'Inteligenty' dom ze sterownikiem PLC

 Language:
Szukanie zaawansowane  

Aktualności:

Powrót do strony głównej: www.edom-plc.pl

Autor Wątek: Integracja PLC z systemem alarmowym SATEL INTEGRA  (Przeczytany 45172 razy)

krwi

  • Newbie
  • *
  • Wiadomości: 38
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #30 dnia: Wrzesień 20, 2014, 12:36:59 pm »

Rozbudowałem nieco kod zamieszczony przez kamiKAC o pobieranie danych o stanie wyjść centrali. Dzięki temu można np w oparaciu o aktywne wyjście alarmowe zapalić wybrane obwodu itp. Poniżej zamieszczam zmodyfikowany kod funkcji SatelEthernet, może komuś się przyda (tablice czujki i wyjścia mam w rozmiarze 64 gdyż posiadam Integrę 64).
FUNCTION_BLOCK SatelEthernet
VAR_INPUT
xOpen_Client: BOOL; (* uaktywnij polaczenie do modulu ETHM-1 *)
IP: STRING; (* adres IP  modulu ETHM-1 *)
Port: WORD; (* port integracji modulu ETHM-1 *)
END_VAR
VAR_OUTPUT
czujki: ARRAY [1..64] OF BOOL; (* tablica zawierajaca stany czujek od 1 do 64, TRUE - czujka aktywna *)
strefy: ARRAY [1..32] OF BOOL; (* tablica zawierajaca stany stref od 1 do 32, TRUE - strefa uzbrojona *)
wyjscia: ARRAY [1..64] OF BOOL; (* tablica zawierajaca stany wyjsc od 1 do 64, TRUE - wyjscie aktywne *)
xCLIENT_OPEN: BOOL; (* polaczenie do modulu ETHM-1 aktywne *)
wSOCKET: WORD; (* numer wtyczki *)
END_VAR
VAR
Protocol : SEL_PROTOCOL := IPPROTO_TCP; (* wybrany protokol transmisji - TCP *)
ProtocolType : SEL_TYPE := SOCK_STREAM; (* wybrany typ trasmisji - stream *)
MyEthernetOpen : ETHERNET_CLIENT_OPEN;
MyEthernetClose : ETHERNET_CLIENT_CLOSE;
MyEthernetWrite : ETHERNET_WRITE;
MyEthernetRead : ETHERNET_READ;
Read00 : BOOL := TRUE; (* zadanie wyslania polecenia 00 - odczyt stanu czujek*)
Read0A : BOOL := TRUE; (*zadanie wyslania polecenia 0A - odczyt stanu uzbrojenia alarmu *)
Read17 : BOOL := TRUE; (* zadanie wyslania polecenia 00 - odczyt stanu wyjsc*)
fi: INT; (* pierwszy  indeks ramki *)
fin: INT; (* drugi indeks ramki *)
buf_len: WORD; (* dlugosc danych w buforze *)
znacznik: BYTE := 1; (* znacznik uzywany do operacji bitowych *)
pt: POINTER TO ARRAY [1..1500] OF BYTE; (* wskaznik do tablicy - uzywany przy przkazywaniu tablicy do funkcji *)
frame_rcv: ARRAY [1..1500] OF BYTE; (* tablica danych odebranych *)
frame_snd: ARRAY [1..1500] OF BYTE; (* tablica danych wysylanych *)
Status: WORD := 0; (* status transmisji: 0 - inicjalizacja, 1 - sprawdzenie stosu TCP/IP 4 - inicjalizacja otwarcia polaczenia, 5 - oczekiwanie na otwarcie polaczenia, 10 -wyslanie danych do serwera, 20 - oczekiwanie na odbior danych, 30 - interpretacja otrzymanych danych, 40 - zamykanie polaczenia *)
GetConfig: ETHERNET_GET_NETWORK_CONFIG;
utERROR: ETH_ERROR;
closeState: INT; (* status zamykania polaczenia *)
Timeout: TOF_1 := (PT:=T#2s, IN:=TRUE, RST:= FALSE); (* maksymalny czas oczekiwania na odpowiedz ze sterownika *)
END_VAR

IF xOpen_Client THEN

CASE Status OF
0:(*Initialize functionblocks*)
GetConfig(EN:=FALSE );
GetConfig(EN:=TRUE );
status:=1;
utERROR:=0;
wSocket:=0;
closeState:=0;
xCLIENT_OPEN:=FALSE;


1:(*check ethernet stack*)
GetConfig(EN:=TRUE );
IF GetConfig.ENO THEN
IF GetConfig.IP_ADR<>0 THEN
status:=4;(*stack initialized*)
ELSE
status:=0;(*try again*)
END_IF
END_IF


4:(*open connection*)
MyEthernetRead( EN:= 0, SOCKET:=0 ,  DATA:=frame_rcv );
MyEthernetClose(EN:= 0);
MyEthernetOpen(EN:=0);

MyEthernetOpen(EN:=1 , TYP:=ProtocolType , PROTO:=Protocol , IP_ADR:= IP_ADDRESS(IP), PORT:=Port );
status:=5;

5:(*wait for server response according to client  request to open the connection*)

MyEthernetOpen(EN:=1, TYP:=ProtocolType, PROTO:=Protocol, IP_ADR:= IP_ADDRESS(IP), PORT:=Port );
IF  MyEthernetOpen.ENO = 1 THEN
IF MyEthernetOpen.ERROR = 0 THEN
Status  := 10; (*socket available*)
xCLIENT_OPEN:=TRUE;
wSOCKET :=MyEthernetOpen.socket;
MyEthernetWrite( EN:= 0 , DATA:=frame_snd );
ELSE
Status := 0; (*no socket available, try it again *)
END_IF;
utERROR:=MyEthernetOpen.ERROR;
END_IF


10:(* Write data to server*)

frame_snd[1]:=16#FE;
frame_snd[2]:=16#FE;
IF Read00 THEN
frame_snd[3]:=16#00; (* zapytanie o stan czujek *)
ELSIF Read0A THEN
frame_snd[3]:=16#0A; (* zapytanie o stan uzbrojenia alarmu *)
ELSIF Read17 THEN
frame_snd[3]:=16#17; (* zapytanie o stan wyjsc *)
ELSE
frame_snd[3]:=16#7F; (* zapytanie o zmiane stanu *)
END_IF
pt:=ADR(frame_snd);
frame_snd[4]:=WORD_TO_BYTE(SHR(SatelCRC(pt,3,3),8)); (* obliczenie CRC.H *)
frame_snd[5]:=WORD_TO_BYTE(SatelCRC(pt,3,3)); (* obliczenie CRC.L *)
frame_snd[6]:=16#FE;
frame_snd[7]:=16#0D;
MyEthernetWrite(EN:= 1,SOCKET:= MyEthernetOpen.SOCKET, LEN_IN:=7,DATA:=frame_snd); (* wyslanie ramki *)
IF MyEthernetWrite.eno THEN
IF(MyEthernetWrite.ERROR <>0) THEN
Status:=40; (* Error writing to the socket, close it *)
ELSE
Status:=20; (* Write complete, read data *)
END_IF;
utERROR:=MyEthernetWrite.ERROR;
END_IF
Timeout (IN := FALSE);


20: (* Read data*)

MyEthernetRead( EN:= 1, SOCKET:=MyEthernetOpen.SOCKET ,  DATA:=frame_rcv );
MyEthernetRead( EN:= 0, SOCKET:=0 ,  DATA:=frame_rcv );

Timeout (IN := FALSE);
utERROR:=MyEthernetREAD.ERROR;
IF(MyEthernetRead.ERROR<>0) THEN (* Error reading the socket, close it *)
Status:=40;
ELSIF (MyEthernetRead.LEN_OUT <> 0) THEN  (* Process the data received via the ethernet port *)
Timeout(IN := TRUE);
Status:=30;
ELSIF NOT Timeout.Q THEN
Timeout(IN := TRUE);
Status:=10; (* uplynal czas oczeiwania na odpowiedz, zerowanie licznika i ponowne wyslanie zapytania *)
END_IF

30: (* Process received data *)

buf_len:=MyEthernetRead.LEN_OUT;
FOR fi:=3 TO buf_len-4 DO (* sprawdzenie, czy bajt odebranej ramki nie zawiera kombinacji FE F0; w takim przypadku wyrzuc F0 i skroc odebrane dane *)
IF frame_rcv[fi]=16#FE THEN
IF frame_rcv [fi+1]=16#F0 THEN
FOR fin:=fi+1 TO buf_len-2 DO
frame_rcv[fin]:= frame_rcv[fin+1];
END_FOR
buf_len:=buf_len-1;
END_IF;
END_IF;
END_FOR;
pt:=ADR(frame_rcv); (* przekazanie adresu znacznika danych odebranych - potrzebne do przekazania danych do obliczenia CRC *)
IF frame_rcv[buf_len-3]=WORD_TO_BYTE(SHR(SatelCRC(pt,3,buf_len-4),8)) AND frame_rcv[buf_len-2]=WORD_TO_BYTE(SatelCRC(pt,3,buf_len-4)) THEN (* sprawdzenie poprawnosci CRC otrzymanych danych *)
IF frame_rcv[3]=16#7F THEN (* jesli otrzymano ramke zapytania o zmiane stanu *)
(*Com7FReceived:=Com7FReceived+1;*)
IF (frame_rcv[4] AND znacznik) >0 THEN (* sprawdzenie czy bit 0 pierwszego bajtu danych jest 1, czyli stan czujek ulegl zmianie *)
Read00:=TRUE; (* jesli tak, nastepnym razem zapytaj o stan czujek *)
END_IF;
IF (frame_rcv[5] AND ROL(znacznik,2)) >0 THEN (* sprawdzenie czy bit 2 drugiego bajtu danych jest 1, czyli stan stref ulegl zmianie *)
Read0A:=TRUE; (* jesli tak, nastepnym razem zapytaj o stan stref*)
END_IF;
IF (frame_rcv[6] AND ROL(znacznik,7)) >0 THEN (* sprawdzenie czy bit 7 trzeciego bajtu danych jest 1, czyli stan wyjsc ulegl zmianie *)
Read17:=TRUE; (* jesli tak, nastepnym razem zapytaj o stan wyjsc*)
END_IF;
ELSIF frame_rcv[3] = 16#00 THEN (* jesli otrzymano ramke stanu czujek *)
(*Com00Received:=Com00Received+1;*)
znacznik:=1;
FOR fi:=4 TO buf_len-5 DO (* dla kazdego bajtu danych *)
FOR fin:=0 TO 7 DO (* dla kazdego bitu *)
IF (SHL(znacznik,fin) AND frame_rcv[fi]) >0 THEN (* sprawdz czy bit jest 1 *)
czujki[(fi-4)*8+fin+1]:=TRUE; (* jesli tak stan czujki = TRUE - aktywna *)
ELSE
czujki[(fi-4)*8+fin+1]:=FALSE; (* jesli nie = FALSE - nieaktywna *)
END_IF;
END_FOR;
END_FOR;
(*AktCzujek := TRUE;*)
Read00 := FALSE;; (* nastepnym razem nie pytaj o czujki *)
ELSIF frame_rcv[3] = 16#0A THEN
FOR fi:=4 TO buf_len-5 DO (* dla kazdego bajtu danych *)
FOR fin:=0 TO 7 DO (* dla kazdego bitu *)
IF (SHL(znacznik,fin) AND frame_rcv[fi]) >0 THEN (* sprawdz czy bit jest 1 *)
strefy[(fi-4)*8+fin+1]:=TRUE; (* jesli tak stan strefy = TRUE - uzbrojona *)
ELSE
strefy[(fi-4)*8+fin+1]:=FALSE; (* jesli nie = FALSE - rozbrojona *)
END_IF;
END_FOR;
END_FOR;
Read0A := FALSE; (* nastepnym razem nie pyatj o strefy *)
ELSIF frame_rcv[3] =16#17 THEN
FOR fi:=4 TO buf_len-5 DO (* dla kazdego bajtu danych *)
FOR fin:=0 TO 7 DO (* dla kazdego bitu *)
IF (SHL(znacznik,fin) AND frame_rcv[fi]) >0 THEN (* sprawdz czy bit jest 1 *)
wyjscia[(fi-4)*8+fin+1]:=TRUE; (* jesli tak stan wyjscia = TRUE - aktywne *)
ELSE
wyjscia[(fi-4)*8+fin+1]:=FALSE; (* jesli nie = FALSE - nieaktywne *)
END_IF;
END_FOR;
END_FOR;
Read17 := FALSE; (* nastepnym razem nie pyatj o wyjscia *)
END_IF;
END_IF;
Status:=10; (* przejdz do wysylania danych *)
MyEthernetWrite( EN:= 0 , DATA:=frame_snd ); (* przygotuj nadajnik do nadawania *)

40: (* Close the client *)

MyEthernetClose(EN:= 1, SOCKET:= MyEthernetOpen.SOCKET);
IF MyEthernetClose.eno THEN
MyEthernetClose(EN:= 0);
xCLIENT_OPEN:=FALSE;
Status := 0; (* Try to open the server again *)
END_IF

END_CASE;
ELSE
CASE CloseState OF
0:
MyEthernetClose(EN:= 0);
MyEthernetClose(EN:= 1, SOCKET:= MyEthernetOpen.SOCKET);
CloseState:=1;
1:
MyEthernetClose(EN:= 1, SOCKET:= MyEthernetOpen.SOCKET);
IF MyEthernetClose.eno THEN
MyEthernetClose(EN:= 0);
CloseState:=2;
END_IF
2:
Status := 0;
utERROR:=0;
xCLIENT_OPEN:=FALSE;
END_CASE
END_IF
Zapisane

mordorr

  • Full Member
  • ***
  • Wiadomości: 152
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #31 dnia: Listopad 22, 2014, 09:10:49 pm »

Witam,


jestem w tej chwili na etapie wyboru interfejsu komunikayjnego PLC<->SATEL i mam przy okazji dwa pytania ....
1. czy od strony SATELa oba interfejsy są równoważne i zapewniają taki sam poziomo obsługi??

2. powyższe funckje zapewniają odczyt stanów alarmu i czujek, a czy można (czy SATEL na to pozwoli) również alarm uzbroić ?? rozbrajanie z poziomu PLC nie wchodzi w ogóle w rachubę :)

no i na koniec pytanie premium:) czy szybkość odczytów LAN i RS jest porównywalna, lub różnica nie wpływa znacząco na jakość działania ? (np lag przy zapalniu swiatła sygnałem czujnika ruchu z SATELa).


Centralka SATEL Integra, PLC WAGO 750-8xx (jeszcze nie zdecydowałem który)

Z góry dziękuję za wskazówki

Jacek
Zapisane

mordorr

  • Full Member
  • ***
  • Wiadomości: 152
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #32 dnia: Listopad 22, 2014, 10:00:53 pm »

Ponieważ nei potrafię edytować to napiszę w nowym poscie.

Wygląda na to, że można uzbroić SATELa po LANie:
Part 2 - INTEGRA control:
0x80 arm in mode 0: + 8 bytes - user code (with prefix, if required by INTEGRA), e.g.:
if code is '1234', no prefixes: 0x12, 0x34, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
if code is '1234', prefix is '97': 0x97, 0x12, 0x34, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+ 4 bytes - partition list, e.g.:
if partition 1, 2, and 29 have to be armed: 0x03, 0x00, 0x00, 0x10
If function is accepted, function result can be checked by observe the system state
0x81 arm in mode 1 data structure as above
If function is accepted, function result can be checked by observe the system state
0x82 arm in mode 2 data structure as above
If function is accepted, function result can be checked by observe the system state
0x83 arm in mode 3 data structure as above
If function is accepted, function result can be checked by observe the system state
0x84 disarm data structure as above
If function is accepted, function result can be checked by observe the system state


pytanie, czy mozna zablokować wewnątrz SATELa rozbrojenie z LANu ? dobrze by było :)
w programie będzie trzeba umieścić kod, więc będzie on dość słabo chroniony w sterowniku :( przydałoby sie haszowanie i blokada odblokowania via LAN.
Zapisane

Horhe

  • Newbie
  • *
  • Wiadomości: 16
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #33 dnia: Listopad 23, 2014, 12:04:19 pm »

Zmontowałem to u siebie na biurku (Wago i Satel połączone przez LAN) i wszystko działa bez żadnych lagów. Światełka zapalają się natychmiast, ale jeśli chodzi Ci o milisekundy, to nie odpowiem bo nie wiem.

Sterowanie Satelem za pomocą Wago jak np uzbrajanie, rozbrajanie (lepiej nie) itp, można zrobić normalnie po kabelkach, bo nie będzie tego dużo.

Co do ostatniego pytania, to rozumiem, że boisz się, że intruz przejmie kontrolę nad Wago i rozbroi alarm. To dość karkołomne zadanie: musiałby napisać program w Wago, który wyłącza alarm, wgrać go i uruchomić zdalnie oraz ustawić wejścia w Satelu, żeby odpowiednio reagowały na sygnały z Wago. To już prościej połączyć się z DloadX i wejść bezpośrednio do Satela wcześniej zdobywając hasło (lub łamiąc, ale nie wiem jak). Trzeba odpowiednio zabezpieczyć sieć LAN i raczej tylko na tym trzeba się skupić. Warto porozmawiać jak można to zrobić dobrze, bo odłączanie urządzenia od sieci daje co prawda 100% bezpieczeństwa, ale traci się na funkcjonalności.
Zapisane

mordorr

  • Full Member
  • ***
  • Wiadomości: 152
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #34 dnia: Listopad 23, 2014, 08:27:51 pm »

Dzięki za odpowiedź!

kupiłem juz co prawda SATELowskiego INT-RSa, ale mam nadzieje, ze mogę go jeszce wymienić na LANa.
oczywiscie - zabezpieczenie swojego internetu to podstawa... loguję sobie w swojej sieci próby wywołań SSH i codziennie przynajmniej 3-4 strzały z Azji :)
raczej bym się nie obawiał lokalnych złodziejaszków... z drugiej strony to miałem w ogole nie montowac alarmu, bo mam zwierzaczki (psa i kota) i alarm z czujnikami ruchu bylby raczje klopotem niz zabezpieczeniem, ale instalator przekonal mnie, ze podczas budowy bedzie sporo wartosciowych rzeczy "do wzięcia", a zlodziej bedzie mial spokojną nockę do pracy...

a jak juz bedzie alarm na czas budowy - to jzu zostanie ze mna na zawsze :) jedynie do normalnego działania nie bede wykorzystywal czujnikow ruchu. zamiast nich będę bronił dostępu kontaktronami wpuszczanymi w okna i drzwi.
Zapisane

kamiKAC

  • Jr. Member
  • **
  • Wiadomości: 66
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #35 dnia: Grudzień 08, 2014, 12:24:53 am »

Witam

Można rozbudować kod integracji o zapis wyjść (zdaje się, że protokół to umożliwia),  a potem zaprogramować Integrę, że ma uzbrajać się po aktywacji wyjścia.

Pozdrawiam

P.S. Lag przy wejściu do pomieszczenia, gdzie jest czujka jest spory (ok.1s), ale myślę, że to kwestia czujki oraz opóźnienia ustawionego w Integrze, a nie sposobu odczytywania danych.
Zapisane

Horhe

  • Newbie
  • *
  • Wiadomości: 16
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #36 dnia: Grudzień 10, 2014, 01:11:26 pm »

Ten lag jest od czujki i jest ściśle związany z jej budową. Po prostu czujki alarmowe tak działają, że aktywują się ze zwłoką i raczej nie można tego zmienić w ustawieniach. Jak wspomniałem, sama komunikacja między Satelem a Wago jest bez żadnych lagów.
Zapisane

kamiKAC

  • Jr. Member
  • **
  • Wiadomości: 66
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #37 dnia: Grudzień 10, 2014, 11:16:50 pm »

z drugiej strony to miałem w ogole nie montowac alarmu, bo mam zwierzaczki (psa i kota) i alarm z czujnikami ruchu bylby raczje klopotem niz zabezpieczeniem, ale instalator przekonal mnie, ze podczas budowy bedzie sporo wartosciowych rzeczy "do wzięcia", a zlodziej bedzie mial spokojną nockę do pracy...

a jak juz bedzie alarm na czas budowy - to jzu zostanie ze mna na zawsze :) jedynie do normalnego działania nie bede wykorzystywal czujnikow ruchu. zamiast nich będę bronił dostępu kontaktronami wpuszczanymi w okna i drzwi.

Są czujki PIR odporne na małe zwierzęta (ja mam takie do 12kg, chociaż zwierzaków nie mam). Słabo reagują na obecność trzyletniej córki :-) Zależy też jak duży jest piesek - odporność na wagę do 60kg nie ma sensu , bo amator cudzej własności może wazyć mniej.
Zapisane

krwi

  • Newbie
  • *
  • Wiadomości: 38
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #38 dnia: Styczeń 06, 2015, 04:05:01 pm »

Ten lag jest od czujki i jest ściśle związany z jej budową. Po prostu czujki alarmowe tak działają, że aktywują się ze zwłoką i raczej nie można tego zmienić w ustawieniach. Jak wspomniałem, sama komunikacja między Satelem a Wago jest bez żadnych lagów.

To prawda ale zauważyłem, że zależy to od czujki. Zwykle im droższa i bardziej zaawansowana tym lag większy, natomiast u mnie najlepiej spisują się Satel Aqua Plus i Pro ustawione na wysoką czułość. Natomiast zupełną porażką były Satel Amber (a szkoda bo to małe czujki i się tak nie rzucają). W ustawieniach centrali można jeszcze zmniejszyć czułość, Integra ma domyślnie 320 ms.
Zapisane

mordorr

  • Full Member
  • ***
  • Wiadomości: 152
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #39 dnia: Sierpień 24, 2015, 08:51:39 pm »

Hej,

Pytanko o interfejs integracji satela.
w programach powyżej jedna z tabli przechowuje stan stref (uzbrojona = true)
i byloby to idealne, gdyby :
1. uzbrajam alarm, odliczanie czasu na wyjscie ze strefy => po czasie alarm uzbrojony - arrStrefy
  • =true

2. naruszam strefę, odliczanie czasu na rozbrojenie alarmu => wpisanie kodu, alarm rozbrojony arrStrefy
  • =false


ale niestety u mnie tak nie jest :) u mnie naruszenie strefy zmienia od razu arrStrefy
  • na false. czy to tak ma być ? w efekcie rolety zaczynaja mi się podnosić zanim rozbroje alarm :)

a moze byc jeszcze ciekawiej ... wystarczy wlaczyc alarm, zeby podniosly sie rolety :)

Zapisane

mordorr

  • Full Member
  • ***
  • Wiadomości: 152
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #40 dnia: Wrzesień 03, 2015, 12:18:39 am »

mam mały problem z "gadaniem" z integrą przez ethernet....
niby wszystko jest OK, ale po jakimś czasie (czasem dwa dni, czasem pare godzin) wago przestaje odczytywać dane z Satela.
w tej czesci kodu:


      20:   (* Read data*)

          MyEthernetRead(   EN:= 1, SOCKET:=MyEthernetOpen.SOCKET ,  DATA:=frame_rcv );
         MyEthernetRead(   EN:= 0, SOCKET:=0 ,  DATA:=frame_rcv );

         Timeout (IN := FALSE);
         utERROR:=MyEthernetREAD.ERROR;
         IF(MyEthernetRead.ERROR<>0) THEN                        (* Error reading the socket, close it *)
            Status:=40;
         ELSIF (MyEthernetRead.LEN_OUT <> 0) THEN                    (* Process the data received via the ethernet port *)
            Timeout(IN := TRUE);
            Status:=30;
         ELSIF NOT Timeout.Q THEN
            Timeout(IN := TRUE);
            Status:=10;                                          (* uplynal czas oczeiwania na odpowiedz, zerowanie licznika i ponowne wyslanie zapytania *)
         END_IF

len_out jest równe 0 i program dalej jest w pętli status 10 i 20.
pomaga restet sterownika - i wszystko wraca do normy (czyli ponowne nawiazanie komunikacji)

mial ktos taki przypadek ??
zastanawiam sie, czy nie dodac liniczka timeoutow, albo moze nawet po kazdym timeoucie zamykac polaczenie i inicjalizowac od nowa...
dodam tylko, ze w czasie kiedy wago nie gada z satelem mogę podłączyć się przez DLOADXa. sam sterownik tez działa prawidlowo.
bede wdzięczny za wskazówki

Zapisane

kamiKAC

  • Jr. Member
  • **
  • Wiadomości: 66
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #41 dnia: Wrzesień 04, 2015, 06:03:34 pm »

Witam

U mnie działa bez zarzutu. Być może za często komunikujesz się z Satelem i PLC lub ETHM-1 "dostaje zadyszki".
Używasz wersji z odczytem wyjść (modyfikowaną przez krwi), czy moją orginalną wersję?
Jak wywołujesz komunikację z Satelem? Pierwotnie wywoływałem bloczek jako Task co 100-150ms.
Teraz wiekszość tasków mam w jednej pętli (łacznie z komunikacją z Satalem, ale dodałem kolejną zmienną LastStatusRead oraz stałą StatusReadInterval, które kontrolują, żeby nie odpytywał za często.


10:(* Write data to server*)

IF  Read0A OR Read00 OR CUR_TIME > LastStatusRead + StatusReadInterval THEN
frame_snd[1]:=16#FE;
frame_snd[2]:=16#FE;
[...]

30: (* Process received data *)
[...]
IF (frame_rcv[4] AND znacznik) >0 THEN (* sprawdzenie czy bit 0 pierwszego bajtu danych jest 1, czyli stan czujek ulegl zmianie *)
Read00:=TRUE; (* jesli tak, nastepnym razem zapytaj o stan czujek *)
END_IF;
IF (frame_rcv[5] AND ROL(znacznik,2)) >0 THEN (* sprawdzenie czy bit 2 drugiego bajtu danych jest 1, czyli stan stref ulegl zmianie *)
Read0A:=TRUE; (* jesli tak, nastepnym razem zapytaj o stan stref*)
END_IF;
LastStatusRead := CUR_TIME;
ELSIF frame_rcv[3] = 16#00 THEN (* jesli otrzymano ramke stanu czujek *)
Zapisane

mordorr

  • Full Member
  • ***
  • Wiadomości: 152
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #42 dnia: Wrzesień 04, 2015, 11:09:27 pm »

Probowalem roznie -
raz jako task freewheeling,
raz wlaczylem go jako FB do PLC_PRG - zawsze to samo - zwiecha komunikacji
teraz zmienilem zachowanie przy timeoucie na Status:=40 zamiast status:=10  i dodalem licznik "resetow". od tamtego czasu wszystko dziala jak nalezy i .... licznik pokazuje 0 timeoutów :)
magia :)

jak teraz beda problemy to dodam zadanie jako task z odczytem co 150ms.
podejrzewam, ze cos nie tak jest z ETHM-1, ale ciezko bedzie to wykazac, bo w koncu dloadx dziala....


Zapisane

zim

  • Jr. Member
  • **
  • Wiadomości: 54
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #43 dnia: Wrzesień 06, 2015, 05:17:42 pm »

Witajcie,

Zabieram się za testy komunikacji i dzięki waszym wpisom poszło jak z płatka,

Natomiast zastanawia mnie czy ktoś z Was próbował wysyłania sygnałów z Wago do Satela ?

Chodzi mi po głowie wykorzystanie przekaźników Abax'a do pominiętych miejsc w trakcie okablowywania domu.

Zapisane

cougarek

  • Newbie
  • *
  • Wiadomości: 1
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #44 dnia: Wrzesień 09, 2015, 07:57:09 pm »

Cześć,
Czy miał ktoś z Was do czynienia z modułem ETHM-1 Plus?
ETHM-1 widnieje już na stronie Satela jako produkt archiwalny.
Zapisane