'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 86185 razy)

DZIKI_2005

  • Newbie
  • *
  • Wiadomości: 12
    • Zobacz profil
Integracja PLC z systemem alarmowym SATEL INTEGRA
« dnia: Lutego 28, 2011, 04:19:07 pm »

Czy i w jaki sposób połączyłeś PLC z SATELEm czy za pomocą RS232 bądź każde wyjście w SATELu jest odczytywane przez wejście w PLC? ja mam INTEGRE 128-WRL.
Zapisane

admin

  • Administrator
  • Sr. Member
  • *****
  • Wiadomości: 313
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #1 dnia: Marca 04, 2011, 08:54:34 am »

Integracja z Satelem ogranicza się w moim przypadku do sygnalizowania naruszenia czujek i przekazywania impulsów uzbrajających instalację.  Technicznie - wyjścia Satela poprzez rozszerzenie z przekaźnikami połączone są z wejściami sterownika PLC.

Nie chciałem angażować się w moduł komunikacyjny INT-RS i interfejs szeregowy do sterownika. Wymagają one umiejętności programowania... Zapewne nic arcytrudnego, ale zdecydowałem sie na proste przekazywanie impulsów... Pewnie gdybym robił instalację od nowa i planował wykorzystać interfejs RS do innych rzeczy, jak chociażby mierzenie temperatury jakimś zewnętrznym modułem - wtedy koszt portu szeregowego dałoby się uzasadnić.

Pozdrawiam,
Zapisane

lanwan

  • Newbie
  • *
  • Wiadomości: 1
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #2 dnia: Października 20, 2011, 10:42:06 am »

WITAM
Dołączę się z pytaniem
Czy ten zakres integracji (w Twoim projekcie ) z Satelem wystarcza do np. wykorzystania czujek Satela do sterowania oświetleniem w pomieszczeniach załączanie lub wyłączanie ?
Zapisane

admin

  • Administrator
  • Sr. Member
  • *****
  • Wiadomości: 313
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #3 dnia: Października 21, 2011, 07:08:19 pm »

Witam,

to, co zrobiłem, w zupełności wystarcza.  W korytarzach/schodach i pomieszczeniach bez okien światło zapala się automatycznie (z np. dodatkowym warunkiem 'po zmroku').  Więcej jednak wykorzystuję czujki do wyłączania światła przy długim braku obecności.

Trzeba jednak pamiętać, że czujki alarmu mają swoją 'logikę', która jest odpowiednia do alarmu właśnie.  Jedną z rzeczy która mnie zaskoczyła - czujka sygnalizuje tylko początek ruchu, jeśli więc jest on ciągły, do sterownika wysyłany jest tylko 1 impuls (na początku).  Oznacza to np., że w pokoju dzieci, które bez przerwy skaczą może po 10 minutach zgasnąć światło...

Pozdrawiam,
Zapisane

admin

  • Administrator
  • Sr. Member
  • *****
  • Wiadomości: 313
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #4 dnia: Lipca 11, 2012, 03:19:46 pm »

Witam,

ostatecznie jednak zdecydowałem się spróbowac połączyć Integre z PLC za pomocą RS232: 

http://www.edom-plc.pl/index.php?option=com_content&view=article&id=86%3Ars232integra64&catid=29%3Apodsystemy&Itemid=54&lang=pl

Pozdrawiam,
Zapisane

nismo

  • Newbie
  • *
  • Wiadomości: 6
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #5 dnia: Lutego 18, 2013, 10:55:14 pm »

Witam.
Udalo mi sie kupic modul 750-650. Mam takze modul rs w satelu. Chcialem skorzystac z Panskiego kodu do odczytu stanu czujek. Niestety, pomimo, ze program jest poprawny,  ie dochodzi do wymiany danych. Czy ma Pan jakis pomysl, co moze byc przyczyna? Dodam, ze moj modul 750-650 ma na stale przypisany baudrate = 9600, nie moge takze ustawic flow control na wartosc 0. Czy moze to miec jakies znaczenie?

Pozdrawiam
Marcin
Zapisane

admin

  • Administrator
  • Sr. Member
  • *****
  • Wiadomości: 313
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #6 dnia: Lutego 21, 2013, 05:56:00 pm »

Witam,

konfiguracja portu RS232 po stronie INT-RS Satela, to 4800/8/1/N dla Funkcji 1 i 19200/8/1/N dla Funkcji 2.  Poszukałbym więc sposobu zmiany ustawień modułu 750-650.  Zacząłbym od podpytania Panów z Wago, czy mają jakieś pomysły.

Pozdrawiam,
Zapisane

nismo

  • Newbie
  • *
  • Wiadomości: 6
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #7 dnia: Marca 07, 2013, 01:57:58 pm »

Witam,


wszystko już wiem, a przynajmniej tak mi się wydaje.  Moduł jest niestety "nieprzestawialny". Zamiast kupować kolejny moduł za ładnych parę stówek, poszedłem po rozum do głowy i chcę zrobić coś, co powinienem zrobić od razu.

Sterownik 750-881 ma wbudowany port RS232 (gniazdo serwisowe) i to z niego zamierzam skorzystać. Obecnie czekam na odpowiedni kabel.
Zapisane

nismo

  • Newbie
  • *
  • Wiadomości: 6
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #8 dnia: Marca 19, 2013, 10:34:47 am »

Witam,

mam kabelek, podłączyłem się do satela poprzez gniazdo serwisowe w sterowniku. Program RS232 (skopiowany z Pańskiej strony i zmieniony jedynie numer portu) dodałem do PLC_PRG. Niestety program nie działa poprawnie. W tabeli "new states" pojawiają się wartości true , ale program nic z nimi nie robi. Zmienna Send po chwili ma wartość false. Tak jakby program się gdzieś zawieszał. Gdy wymuszę (force values) wartość true dla zmiennej Send, pierwszy z wpisów w tabeli "new states" zmienia wartość na false i tyle. W tabeli "sensors" nic się nie dzieje.

Czy ma Pan pomysł co może być przyczyną? Czy jest jakiś sposób na sprawdzenie czy w ogóle jest komunikacja z Satel'em? Ja mam co prawda centralkę Satel 128, ale w programie nie ma żadnego odwołania do konkretnego modelu, więc to chyba nie ma większego znaczenia.

Czy u Pana program również jest po prostu dodany do PLC_PRG? Czy może uruchamiany jako event? Gdy spróbowałem tak zrobić, sterownik zawiesił się.

Będę wdzięczny za wszelkie wskazówki.
Zapisane

admin

  • Administrator
  • Sr. Member
  • *****
  • Wiadomości: 313
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #9 dnia: Marca 19, 2013, 11:09:30 am »

Witam,

ciężko będzie tak 'ogólnie' podpowiedzieć. Opis na stronie to inspiracja a nie recepta.  Trzeba poszukać samemu.

Po pierwsze, komunikacja z Satelem powinna wg mnie odbywać się w odrębnym procesie.  Tak naprawdę potrzeba stworzyć 1 proces i 2 funkcje zgodnie z rysunkiem:


Po drugie proponuję zrobić prostą wizualizację, która pozwoli kontrolować przebieg komunikacji, czyli np:
- przycisk 'Togglujący' zmienną RS232.Send
- pola wyświetlające wartość kluczowych zmiennych

Klikać, sprawdzać, testować... czy w ogóle Satel odpowiada (RS232.RMessage)...  W swoim programie dodałem też zmienną ManualReset : BOOL i w ostatniej części programu:

IF StopWaiting.Q OR FrameComplete OR ManualReset  THEN
 
  (*reset all the variables*)
  WaitForData:=FALSE;
  RMessage.Index:=0;
  (...)
END_IF;

...aby móc resetować komunikację, jeśli wystąpiłby problem.

Good luck!
Zapisane

nismo

  • Newbie
  • *
  • Wiadomości: 6
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #10 dnia: Maja 23, 2013, 08:05:05 pm »

Witam,

po paru tygodniach bezowocnych prób, zdecydowałem się na zakup modułu 750-650/0003. Program opublikowany przez autora strony "zatrybił" od razu. Praktycznie bez żadnych poprawek.

Port wbudowany w sterownik niestety nie nadaje się do komunikacji z Satelem.


Dziękuję Panie Admin!

Zapisane

admin

  • Administrator
  • Sr. Member
  • *****
  • Wiadomości: 313
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #11 dnia: Maja 24, 2013, 01:30:35 pm »

Witam,


Cieszę się że wszystko działa.  Pozdrowienia!
Zapisane

kofcio

  • Newbie
  • *
  • Wiadomości: 4
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #12 dnia: Września 04, 2013, 07:36:06 pm »

Witam,
jestem w trakcie zabierania się za układanie kabli w domu pod instalację którą chcę sterować za pomocą sterownika Wago. Mam do Was parę pytań odnośnie instalacji alarmowej:
1. Pisze Pan o tym, że czujki ruchu reagują za pierwszym razem. Czy to jest przypadłość wszystkich czujek czy tylko tych które są w Pańskiej instalacji?
2. Planuję montaż w paru miejscach takich czytników http://allegro.pl/zamek-kodowy-z-czytnikiem-rfid-10-kart-dostep-i3517074676.html i zastanawiam się czy jest sens kupna dodatkowej centralki alarmowej jeśli wszystkie wejścia wchodzą do sterownika Wago i teoretycznie powinno dać się zaprogramować jakąś prostą funkcjonalność alarmu za pomocą sterownika. Wystarczyłoby tylko dokupić jakieś zapasowe zasilanie na wypadek braku prądu. Proszę o Wasze opinie czy to ma sens czy może o czymś nie pomyślałem.

Pozdrawiam
Zapisane

witek

  • Newbie
  • *
  • Wiadomości: 1
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #13 dnia: Września 07, 2013, 02:02:36 pm »

Witam serdecznie wszystkich uczestników forum.
Zainteresował mnie temat współpracy centralki Satel ze sterownikiem PLC. Mam centralkę Integra 128 wersja firmware najnowsza dostępna czyli 1.11 z podłączonymi czujkami na liniach parametrycznych 2EOL/NC. Postanowiłem zrobić doświadczenie i spróbować połączyć się z centralką za pomocą nabytego drogą kupna modułu INT-RS. Wykonałem następujące czynności:
- ustawienie INT-RS w tryb integracji,
- rozpoznanie przez centralkę nowych urządzeń,
- ustawienie w parametrach centralki opcji monitoring ETHM-1,
- podłączenie INT-RS do PC,
- uruchomienie programu monitorowania portu szeregowego, żeby mieć pewność, czy wszystko przebiega tak jak powinno
- uruchomienie programu terminala
- przesłanie paru rozkazów 0x00 w celu synchronizacji (jak zalecają w opisie INT-RS)
Zgodnie z algorytmem (tablica Message7F) wielokrotnie wysyłam polecenie 0x7F:
FE FE 7F D8 61 FE 0D
i nie otrzymuję z centralki żadnej odpowiedzi. Wysłanie bezpośredniego zapytania o stan alarmów czyli polecenia 0x00, 0x01 czy 0x02 zwraca poprawną ramkę z ustawionymi bitami odpowiadającymi alarmom (tak długo jak mam zwarty przekaźnik w czujce tak długo odpowiedni bit jest ustawiony). Czyli komunikacja działa poprawnie, natomiast nie mogę dojść do tego, dlaczego nie działają polecenia kontroli zmiany stanu centralki poleceniem 0x7F. Podobnie nie otrzymuję odpowiedzi na zapytanie o wersję oprogramowania centralki poleceniem 0x7E.
Podejrzewam, że nie ustawiłem wszystkich niezbędnych parametrów w centralce.
Zwracam się o pomoc w rozwiązaniu tego problemu. Skoro napisany program na sterownik PLC działa prawidłowo, to błąd jest na pewno po mojej stronie ale nie jestem w stanie zorientować się kiedy go popełniam. Zadałem już sporo pytań wujkowi Google ale nie udzielił mi żadnych przydatnych odpowiedzi.
Pozdrawiam
Witek
Zapisane

raph

  • Newbie
  • *
  • Wiadomości: 6
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #14 dnia: Września 12, 2013, 11:39:13 am »

Hej,

Nie wiem czy już było ale moduł ETHM-1 ma opcję integracji (od wersji 1.06) po sieci ethernet.
Jest to opisane w tym samym dokumencie co opis komunikacji dla INT-RS.

Zapisane

admin

  • Administrator
  • Sr. Member
  • *****
  • Wiadomości: 313
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #15 dnia: Września 14, 2013, 12:49:52 pm »

Cześć,

cenowo wygląda bardzo atrakcyjnie, bo można znaleźć za 410 PLN przy INT-RS kosztującym 250 PLN.  Co do działania - trzeba potestować...

Co do pytania Witka - skontaktuj się z Satelem.  Gdy pisałem kod ich centrum techniczne było bardzo pomocne.  Jeśli się uda rozwiązać problem, daj znać.

Pozdrawiam,
Zapisane

kamiKAC

  • Jr. Member
  • **
  • Wiadomości: 78
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #16 dnia: Października 20, 2013, 09:42:05 pm »

Hej,

Nie wiem czy już było ale moduł ETHM-1 ma opcję integracji (od wersji 1.06) po sieci ethernet.
Jest to opisane w tym samym dokumencie co opis komunikacji dla INT-RS.

Raczej nie było. Montowałem ostatnio Integrę u siebie na budowie i się zdziwiłem, bo kupiłem INT-RS (do integracji) i ETHM-1 (do podglądu stanu przez sieć) i po lekturze instrukcji okazało się, że oba dają możliwość integracji. Jak oprogramuję komunikację z Satelem przez Ethernet to moduł RS do WAGO nie będzie mi już potrzebny, podobnie jak INT-RS.
Zapisane

hexal

  • Newbie
  • *
  • Wiadomości: 9
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #17 dnia: Lutego 23, 2014, 01:54:10 am »

Jak oprogramuję komunikację z Satelem przez Ethernet to moduł RS do WAGO nie będzie mi już potrzebny, podobnie jak INT-RS.

Witam. Zastanawiałem się nad zakupem INT-RS + moduł RS232 (cenowa masakra kompletu) ale z tego co widzę po wpisach ETHM-1 załatwił by mi komunikację Satel <-> 750-841. Udało się oprogramować komunikację? Słyszałem że Wago czasem bywa oporne jeżeli chodzi o komunikację IP i połączenie RS232 jest stabilniejsze. Jakieś wnioski po przejściu z RS232 na Etherner? Będę wdzięczny.

Pozdrawiam.
Zapisane

kamiKAC

  • Jr. Member
  • **
  • Wiadomości: 78
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #18 dnia: Lutego 25, 2014, 11:49:25 pm »

Witam

Ja już mam problem integracji rozwiązany przez ETHM-1, działa całkiem sprawnie. Mój blok funkcyjny zwraca stany czujek i stan uzbrojenia stref, ale łatwo można go rozbudować o inne dane. Jak tylko uporządkuję kod umieszczę go na forum, ale nie mam za wiele czasu, bo finiszujemy z budową - właśnie robimy zabudowę kominka ;-)

Pozdrawiam
Zapisane

kamiKAC

  • Jr. Member
  • **
  • Wiadomości: 78
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #19 dnia: Lutego 28, 2014, 09:35:50 pm »

W delegacji miałem chwilę czasu i poprawiłem i uporządkowałem kod.

Blok komunikacji SatelEthernet oparłem o notę dotycząca biblioteki Ethernet.lib (stąd angielskie komentarze) i uzupełniłem o 2 funkcje: SatelCRC obliczającą CRC dla wybranego fragmentu ramki (nie mogłem rozkminić kodu Admina, więc napisałem funkcję po swojemu ;) )oraz IP_ADDRESS "pożyczoną" z noty serwisowej, która zamienia adres IP w znanej nam notacji na postać 32-bitową, której oczekuje biblioteka Ethernet.lib

SatelEthernet (FB)
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..128] OF BOOL; (* tablica zawierajaca stany czujek od 1 do 128, TRUE - czujka aktywna *)
strefy: ARRAY [1..32] OF BOOL; (* tablica zawierajaca stany stref od 1 do 32, TRUE - strefa uzbrojona *)
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 *)
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 *)
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;
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 *)
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

SatelCRC (FUN)

FUNCTION SatelCRC : WORD
VAR_INPUT
pt: POINTER TO ARRAY [1..1500] OF BYTE;
start_pos: INT;
end_pos: INT;
END_VAR
VAR
i: INT :=0;
END_VAR


SatelCRC:= 16#147A;
FOR i:=start_pos TO end_pos DO
SatelCRC:= ROL(SatelCRC,1);
SatelCRC:= SatelCRC XOR 16#FFFF;
SatelCRC:= SatelCRC + SHR(SatelCRC,8) + pt^[i];
END_FOR

IP_ADDRESS (FUN) (by WAGO)

FUNCTION IP_ADDRESS : DWORD
VAR_INPUT
IP_ADR : STRING;
END_VAR
VAR
Address : DWORD;
Value : WORD;
DecimalPos : INT;
Rest : STRING;
END_VAR


Address := STRING_TO_WORD(IP_ADR);
IF (Address <= 255) AND (Address >= 0) THEN
DecimalPos := FIND(IP_ADR,'.');
IF DecimalPos <> 0 THEN
Rest := RIGHT(IP_ADR,LEN(IP_ADR) - DecimalPos);
Value := STRING_TO_WORD(Rest);
IF (Value <= 255) AND (Value >= 0) THEN
Address := (Address * 16#0100) + Value;

DecimalPos := FIND(Rest,'.');
IF DecimalPos <> 0 THEN
Rest := RIGHT(IP_ADR,LEN(Rest) - DecimalPos);
Value := STRING_TO_WORD(Rest);
IF (Value <= 255) AND (Value >= 0) THEN
Address := (Address * 16#0100) + Value;

DecimalPos := FIND(Rest,'.');
IF DecimalPos <> 0 THEN
Rest := RIGHT(IP_ADR,LEN(Rest) - DecimalPos);
Value := STRING_TO_WORD(Rest);
IF (Value <= 255) AND (Value >= 0) THEN
Address := (Address * 16#0100) + Value;
ELSE
Address := 0;
END_IF
ELSE
Address := 0;
END_IF
ELSE
Address := 0;
END_IF
ELSE
Address := 0;
END_IF
ELSE
Address := 0;
END_IF
ELSE
Address := 0;
END_IF
ELSE
Address := 0;
END_IF
IP_ADDRESS := Address;


W załączniku "sposób użycia".
Zapisane

Horhe

  • Newbie
  • *
  • Wiadomości: 16
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #20 dnia: Marca 22, 2014, 02:09:23 pm »

Witam serdecznie.
Jestem tu całkiem nowy, aczkolwiek stronę i forum przeczytałem już kilka razy ;). Jestem pełen uznania dla Admina po pierwsze za dobrą robotę, ale przede wszystkim za udostępnienie tego światu. To dzięki tej stronie podjąłem decyzję o rozpoczęciu przygody z automatyką domową. Dziękuję wszystkim chcącym się dzielić wiedzą.

Tyle słowem wstępu. Bardzo interesuje mnie temat tego wątku, a szczególnie ostatnie rozwiązanie podane przez kolegę @kamiKAC. Niestety podany kod nie działa. Błąd znajduje się w bloku funkcyjnym SatelEthernet (FB) w części deklaracji zmiennych, a dokładnie w ostatniej linijce :

"Timeout:   TOF_1 := (PT:=T#2s, IN:=TRUE, RST:= FALSE); (* maksymalny czas oczekiwania na odpowiedz ze sterownika *)"

Myślę, że raczej powinno być tak:

"Timeout:   TOF := (PT:=T#2s, IN:=TRUE); (* maksymalny czas oczekiwania na odpowiedz ze sterownika *)"

Po tej zmianie nie ma już błędów kompilacji, natomiast komunikacja z Satelem  nie zachodzi. Jest połączenie z centralą, ale zmienna Status zatrzymuje się na wartości 20 - oczekiwanie na odbiór danych. Wychodzi na to, że Satel nic nie wysyła. Walczę od wczoraj ale nie udaje mi się znaleźć rozwiązania.

« Ostatnia zmiana: Marca 22, 2014, 02:11:30 pm wysłana przez Horhe »
Zapisane

admin

  • Administrator
  • Sr. Member
  • *****
  • Wiadomości: 313
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #21 dnia: Marca 22, 2014, 03:53:41 pm »

Cześć,

dzięki za dobre słowa :)  TOF_1 pachnie mi funkcją z biblioteki OSCAT i... zamiana jej na TOF nie może działać :)  Tak więc chyba trzeba przymierzyć się do dodania oscat_basic_xxx.lib do programu. 

Pozdrawiam,

Zapisane

Horhe

  • Newbie
  • *
  • Wiadomości: 16
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #22 dnia: Marca 22, 2014, 06:40:15 pm »

Oczywiście masz rację ;). Po dodaniu biblioteki oscat_basic_333.lib, program kompiluje się już bezbłędnie, jednak różnicy w działaniu nie widzę. Co dwie sekundy zgodnie z Timeoutem zmienna Status zmienia się przez jeden cykl na  10 - "wysyłanie danych do serwera", po czym przez dwie sekundy przyjmuje wartość 20 - "oczekiwanie na odbiór danych". I tak w kółko.
Widać, że Satel nie odpowiada. Adres IP i port jest ustawiony poprawnie, zresztą zmienna xCLIENT_OPEN jest True czyli połączenie poprawne. Nie mam pomysłów co z tym zrobić.
« Ostatnia zmiana: Marca 26, 2014, 03:06:27 pm wysłana przez admin »
Zapisane

kamiKAC

  • Jr. Member
  • **
  • Wiadomości: 78
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #23 dnia: Marca 28, 2014, 10:40:04 pm »

Oczywiście masz rację ;). Po dodaniu biblioteki oscat_basic_333.lib, program kompiluje się już bezbłędnie, jednak różnicy w działaniu nie widzę. Co dwie sekundy zgodnie z Timeoutem zmienna Status zmienia się przez jeden cykl na  10 - "wysyłanie danych do serwera", po czym przez dwie sekundy przyjmuje wartość 20 - "oczekiwanie na odbiór danych". I tak w kółko.
Widać, że Satel nie odpowiada. Adres IP i port jest ustawiony poprawnie, zresztą zmienna xCLIENT_OPEN jest True czyli połączenie poprawne. Nie mam pomysłów co z tym zrobić.

A nie masz czasem włączonego kodowania integracji w module ETHM-1?

Może nie ten nr portu? Na pewno włączyłeś integrację i łączysz się na port integracji?

U mnie w sterowniku działa poprawnie, więc mogłem tylko strzelićü byka przy kopiowaniu kodu na forum.

Jeśli się łączy to jest otwarty port, ale jak nie ma odpowiedzi to albo nie ten port albo błędna ramka.  A właściwie jaki masz sterownik?

Pozdrawiam
Zapisane

Horhe

  • Newbie
  • *
  • Wiadomości: 16
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #24 dnia: Marca 31, 2014, 08:23:54 am »

Mój sterownik to 750-880.

Cytuj
A nie masz czasem włączonego kodowania integracji w module ETHM-1?
Nie jestem tego pewien, wieczorem to sprawdzę. Mam nadzieję że to jest to, bo innych pomysłów brak.

Integracja w ETHM-1 jest włączona na 100% i port też jest poprawny.
Zapisane

Horhe

  • Newbie
  • *
  • Wiadomości: 16
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #25 dnia: Marca 31, 2014, 06:16:23 pm »

DZIAŁA!!! :D:D:D

Miałeś rację, miałem włączone kodowanie integracji w ETHM-1, po wyłączeniu śmiga aż miło :). Stokrotne dzięki :).

A przy okazji, Waszym zdaniem komunikacja przez Ethernet jest w miarę bezpieczna? Od razu zaznaczam, że nie mam nic konkretnego na myśli ;), i chodzi mi ogólnie o możliwość wejścia z zewnątrz i poprzełączania światełek. Jaka jest szansa na takie włamanie, ewentualnie co zrobić żeby się przed tym zabezpieczyć? Wybaczcie mi lamerskie pytanie :).
Zapisane

kamiKAC

  • Jr. Member
  • **
  • Wiadomości: 78
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #26 dnia: Kwietnia 01, 2014, 09:26:49 pm »

Nie znam algorytmu kodowania Satela, trzebaby napisać do Satela, może udostępnią algorytm.

Co do zabezpieczenia, to sam się nad tym zastanawiam. Nie wiem, czy sterownik posiada jakiekolwiek zabezpieczenia (typu zabezpieczenie hasłem, czy kodowanie). Myślę, że można wrzucić wifi w domu do oddzielnej podsieci, a dostęp do sieci przewodowej, gdzie podłączony sterownik zrobić przez VPN (PPtP lub OpenVPN). Rozwiązałoby to 2 kwestie bezpieczeństwa: dostęp z wifi i z internetu do sterownika.

Co do alarmu, to dopóki nie będzie dostępu do portu integracji z wifi lub nie damy możliwości uzbrojenia/rozbrojenia z poziomu integracji to jesteśmy bezpieczni.

Może doradzi ktoś, kto już temat przerabiał?

Pozdrawiam
Zapisane

gojac

  • Newbie
  • *
  • Wiadomości: 16
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #27 dnia: Kwietnia 02, 2014, 07:29:06 am »

Zapisane

kamiKAC

  • Jr. Member
  • **
  • Wiadomości: 78
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #28 dnia: Kwietnia 06, 2014, 03:54:29 pm »

Implementacja AES na sterowniku? Brzmi ciekawie, niestety nie mam aktualnie na to czasu, ale w przyszłości - kto wie?

Co do zabezpieczenia dostępu do sterownika. Przypuszczam, że obsługa sterowania przez edomApp działa przez Modbus/TCP, który nie posiada żadnych mechanizmów zabezpieczających przed niepowołanym dostępem. Włączanie sterownika do tej samej podsieci, w której mamy WiFi jest potencjalnie bardzo niebezpieczne i może się skończyć przejęciem kontroli nad naszym sterownikiem przez osoby niepowołane.
Najlepszym wyjściem byłby VPN lub przekierowanie portu na żądanie po wcześniejszym uwierzytelnieniu użytkownika np w routerze.

Co do portu integracji w Satelu, to jestem nieco spokojniejszy, bo operacje uzbrojenia/rozbrojenia wymagają podania kodu.

Pozdrawiam
Zapisane

krwi

  • Newbie
  • *
  • Wiadomości: 47
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #29 dnia: Września 14, 2014, 09:21:32 am »

kamiKAC dzięki za zamieszczenie kodu, u mnie działa bardzo dobrze. Natomiast mam pytanie czy wiesz jak rozbudować go o pobieranie informacji o aktywnym alarmie?

Pozdrawiam.
Zapisane