Sterownik WAGO 750-841 obsługuje skrypty SSI (server side includes). Udało mi się znaleźć jakąś japońską broszurkę, w której było kilka przykładów. Po wielu próbach stworzyłem małą stronkę, która wygląda, jak poniżej, która jest obsługiwana przez każdą przeglądarkę www i która, co do zasady, może sterować wszystkim.
A teraz szczegóły techniczne:
W komunikacji SSI ze sterownikiem 750-841 dostępne są następujące polecenia:
- READPI (parametry: ADR, FORMAT, przykładowo: <!--READPI ADR=IW0&FORMAT=%d-->)
- WRITEPI (parametry ADR, VAUE, FORMAT j.w., przykładowo: <!--WRITEPI ADR1=MW0&VALUE1=1234&FORMAT1=%d-->)
- GETTIMEDATE (parametry: FORMAT, przykładowo <!--GETTIMEDATE FORMAT=%d.%m.%y %H:%M:%S-->)
- AUTHUSR (parametry: USR, PWD, RT, przykładowo <!--AUTHUSR USR1=ja&PWD1=nic&RT1=R-->)
Jeśli więc w kodzie strony umieścimy zapis <!--READPI ADR=QX0&FORMAT=%d-->) serwer sterownika wykonując skrypt, zwróci wartość fizycznego wyjścia nr 1.
Tyle formalności. Oto, jak wyglądać może najprostszy plik test.ssi (rozszerzenie ssi, jest, zdaje się konieczne, by serwer wykonał skrypty)
<HTML> <BODY> Wyjscie 93 (5.12): Wejscie 3 (8.2): Tag 1 (MB0): Czas: </BODY> </HTML>
Voila! Po wgraniu pliku do katalogu “webserv” i otwarciu w go przeglądarce (np. 192.168.1.1/test.ssi) otrzymamy informacje odczytane prosto ze sterownika.
Do zapisywanie danych można wykorzystać formularz:
<form action="/WRITEPI" method="POST"> <input type="text" name="ADR1" value="MB0"> <input type="text" name="VALUE1" value="<!--#READPI ADR=MB0&FORMAT=%d-->" > <input type="text" name="FORMAT1" value="%d" > <input type="SUBMIT" value="ZAPISZ">
Po naciśnięciu przycisku ‘Zapisz’, wartość zmiennej przechowywanej pod adresem MB0 zostanie zastąpiona wartością z pola VALUE1.
Moja aplikacja wygląda następująco:
W procesie PLC_PRG w części definiowania zmiennych umieściłem:
VIS_GARDEN1 AT %MB0 :BOOL; VIS_GARDEN2 AT %MB1 :BOOL; (…) GARDEN1, GARDEN2 (…) :Fb_LatchingRelay;
Zmienne o przedrostku VIS_ wykorzystuję do sterowania przez wizualizację.
Do Zmiennych GARDEN… przypisałem bloki funkcyjne Fb_LatchingRelay z biblioteki buliding_common.lib firmy WAGO
W części programowej:
GARDEN1(xSwitch:=VIS_GARDEN1, xCentON:=Timers.Garden1_OnTrig.Q, xCentOFF:=Timers.Garden1_OffTrig.Q); OUT93:=GARDEN1.xActuator;
Zmienne Garden1_OnTrig i Garden1_OffTrig pochodzą z odrębnego procesu (Timers), w którym umieściłem wszystkie zegary, w tym momencie jest to kwestia nieistotna)
Przykładowy skrypt z omówieniem znajduje się na kolejnej stronie.
AKTUALIZACJA (05.01.2015)
Udało mi się znaleźć całą paczkę przykładów wykorzystania skryptów SSI przygotowaną (chyba) przez WAGO. Oto link.