Dobrý den,
hlídám si funkčnost jednotlivých zařízení pomocí proměnné např.: r16_p2_CIB_DIAG.STAT[0] . Problém je, že programově neumím zjistit, které zařízení má kterou adresu a na jaký index se mám ptát. Když zařízení vyměním, může asi dojít ke změně adresy. Dá se prosím nějakou funkcí zjistit linku a adresu z názvu zařízení? Nebo nějaký jiný způsob zjištění?
Děkuji
Odpovědi 1
Dobrý den,
pro kontrolu funkce CIB jednotek je možné využít funkci CIBunitInfo2 z knihovny SysLib.
Pro interní linku může volání vypadat například takto:
PROGRAM prgCibDiag
VAR
unitInfo : ARRAY [0..31] OF TCIBunitInfo;
i : USINT;
END_VAR
FOR i := 0 TO 31 DO
CIBunitInfo2(Bus_ID := 16#1030, CIB_unitID := i, unitInfo := unitInfo[i]);
END_FOR;
END_PROGRAM
V poli unitinfo uvidíte nejen aktuální status, ale typ a popis jednotky, npaříklad:
CibDiag.unitInfo [0..31]
└─ CibDiag.unitInfo[0]
├─ line_defined : BOOL = 1
├─ unit_defined : BOOL = 1
├─ state : TCIbUnitState
│ └─ {INI=1, COM=1, ADDR=1, DUMMY3=0, REI=0, DUMMY5=0, ALT=0, NET=1}
├─ address : WORD = 16#1028
├─ code : WORD = 16#10D1
├─ unit_type : STRING[17] = 'C-ID-0011R'
└─ description : STRING[31] = 'termostat pokoj'
└─ CibDiag.unitInfo[1]
├─ line_defined : BOOL = 1
├─ unit_defined : BOOL = 1
├─ state : TCIbUnitState
│ └─ {INI=1, COM=1, ADDR=1, DUMMY3=0, REI=0, DUMMY5=0, ALT=0, NET=1}
├─ address : WORD = 16#5E99
└─ code : WORD = 16#10F1
...
Obecně platí, že jak index v r16_p2_CIB_DIAG.STAT[], tak index ve výše uvedeném poli je dán logickou adresou, kterou si volíte v I/O konfiguraci a bez zásahu programátora se nemění.
Vaše odpověď
Pro vložení odpovědi je nezbytné být přihlášený. Pokračujte na přihlášení.
