zv Programování Mosaic 5. 2. 2026 11:13 6. 2. 2026 16:24

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

M.B. 6. 2. 2026 16:24

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í.