Wyjściami steruje poprzez NOVRAM (12288... 24575, %MW0... %MW12287) oraz Fb_LatchingRelay sprawdzając bit w pamięci do którego może pisać openhab poprzez modbusa oraz wejścia fizyczne i na podstawie tego ustawiam wyjście oraz drugą zmienną w pamięci którą openhab czyta.
Jakoś nie miałem "mądrzejszego" pomysłu.
Mógłbym:
VAR
LIGHT1: Fb_LatchingRelay;
VIS_LIGHT1 AT %MX0.0 : BOOL;
VIS_LIGHT2 AT %MX0.1 : BOOL;
END_VAR
LIGHT1(xSwitch:=IN1 OR VIS_LIGHT1); OUT1:=LIGHT1.xActuator; VIS_LIGHT2:=OUT1; VIS_LIGHT1:=FALSE;
Witam,
ja analogicznie steruję światłem przez Fb_LatchingRelay i żeby nie przerabiać zbytnio kodu na PLC uzupełniłem jedynie deklarację zmiennych o %MX tj. np. VIS_K01 AT %MX0.8: BOOL; VIS_K02 AT %MX0.9: BOOL;VIS_K19 AT %MX1.10: BOOL; itd. - wtedy wiem gdzie szukać ich przy komunikacji przez modbus w openhab.
W samym openhab mam:
cfg
modbus:tcp.slave2.connection=x.x.x.x:502
modbus:tcp.slave2.type=coil
modbus:tcp.slave2.id=1
modbus:tcp.slave2.start=12288
modbus:tcp.slave2.length=100
.item
Switch cewka_VIS_K19 "PLC_PRG.VIS_K19" (ALL) {autoupdate="false",modbus="slave2:26"}
.sitemap
Switch item=cewka_VIS_K19 label="VIS_K19_kominek" mappings=[ON="ON"]
.rule
rule "Automatically switch off switch"
when
Item cewka_VIS_K19 received command ON
then
createTimer(now.plusSeconds(1))[|
cewka_VIS_K19.sendCommand(OFF)
]
end
Wtedy po wciśnięciu lampy (VIS_K19_kominek) na ON zmienna %MX1.10 przyjmuje wartość 1 a po jednej sekundzie dzięki zapisom w .rules automatycznie przyjmuje wartość 0. Nie trzeba angażować dodatkowych zmiennych i działa
Teraz walczę żeby z danych wyciągniętych z plc_visu.xml odszyfrować adresy zmiennych innych niż stany 0/1 tj. zapisane w PLC zmienne przechowujące czas, datę zdarzeń i statystyki załączeń światła bo jakoś tego nie widzę.