Új hozzászólás Aktív témák

  • And

    veterán

    válasz kip.kop #1486 üzenetére

    Ajánlom figyelmedbe ezt a dokumentációt: [link]. A 126. oldaltól láthatod a modbus kommunikáció megvalósítását Twido-n. A megoldás lényege az EXCHx utasítás (134. oldaltól), ill. a %MSGx belső funkcióblokk két állapotjelző bitje, a %MSGx.D és a %MSGx.E. A kommunikáció megkezdése előtt definiálni kell egy adott hosszúságú táblázatot, amely tartalmazza az összes szükséges paramétert. A 131. oldalon találod a táblát, amely három részre van osztva: vezérlő-, adási- és vételi táblázat. Utána szépen ki van fejtve, hogy az egyes elemeknek mi a szerepük. A korábban már megismert 3-as (és 4-es, mivel a kérés itt is ugyanúgy néz ki) funkciókód bővebb leírása a 145. oldalon van. A control table tartalma itt kötött, a transmission table tartalmában állítható be a lekérdezett slave címe, a slave-ből kiolvasandó regisztertömb kezdőcíme és a tömb hossza. Példaprogram a 140. oldalon, ezt átalakítva a neked szükséges feladatra úgy, hogy a DigitalT és DigitalRH nevű adatregisztereket olvassuk ki a slave egységből:
    LD 1
    [%MW0 := 16#0106 ]
    [%MW1 := 16#0300 ]
    [%MW2 := 16#4003 ]
    [%MW3 := 16#0008 ]
    [%MW4 := 16#0002 ]
    LD 1
    AND %MSG2.D
    [EXCH2 %MW0:9]
    END
    Az első két word a control table, mint írtam, itt a tartalmuk kötött, lásd a funkciókód leírásnál. A %MW2..%MW4 a transmission table, itt adjuk meg a slave címét (64dec = 0x40), a modbus kérés funkciókódját (0x03), a kezdő regisztert (8, ami a DigitalT regiszter 7-es címe plusz egy), ill. a lekérdezett tartomány hosszát (2 db. word). A %MW5-től kezdődik a reception table, amelynek tartalma a slave válasza után áll be, ha nincs hiba a kommunikáció során. Utóbbi vételi tábla a következőket fogja tartalmazni:
    %MW5: 0x4003, a slave címe és a válasz kódja, ezek a válaszban szintén megjelennek,
    %MW6: 0x0004, az 'Rx offset' által beiktatott 0x00 (MSByte) és a kiolvasott byte-ok száma (LSByte), ami 4, hiszen két darab 16-bites word-öt kértünk le,
    %MW7: ebben kapod meg az első lekért regiszter tartalmát, vagyis a DigitalT-t,
    %MW8: ebben pedig a másodikat, azaz a DigitalRH-t.
    A %MSG2.D bit jelentése: 'communication complete', ez azért kell, hogy a kontroller (több lehetséges üzenet kezelése esetén) csak akkor kezdje el küldeni az aktuális adatkérést a buszon, ha az előző már befejeződött.
    Természetesen a hardverek megfelelő összekötéséről és a Twido portjának beállításáról a hw-konfigurációnál (lásd: 139. o.) előzőleg gondoskodnod kell. Az adattábla meg bárhol kezdődhet, nem csak %MW0-nál (a példában %MW0:9), és nem csak a 2-es számú (EXCH2 és %MSG2), egyébként opcionális portot lehet igénybe venni a feladathoz. Az alap, programozáshoz is felhasznált 8-pólusú mini-din aljzat az 1-es számú port. E port használatához az aljzat DPT-jelét GND-re kell húzni (128. o.), ill. az A-B adatvonalakra megfelelő fel- és lehúzó ellenállásokat kell kötni (129. o.).

Új hozzászólás Aktív témák