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

admin

  • Administrator
  • Sr. Member
  • *****
  • Wiadomości: 313
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #60 dnia: Lipca 01, 2017, 08:31:10 pm »

Masz błąd w funkcji IP_ADDRESS, SatelCRC i bloku SatelEthernet.

Pokaż, jak one wyglądają...
Zapisane

radnet

  • Newbie
  • *
  • Wiadomości: 21
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #61 dnia: Lipca 01, 2017, 08:44:04 pm »

Skopiowałem je z posta KamiKAC.

« Ostatnia zmiana: Lipca 01, 2017, 08:48:41 pm wysłana przez radnet »
Zapisane

radnet

  • Newbie
  • *
  • Wiadomości: 21
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #62 dnia: Lipca 01, 2017, 11:51:18 pm »

Skopiowałem je z posta KamiKAC.



Już wiem, nie rozdzieliłem kodu od zmiennych.
Zapisane

radnet

  • Newbie
  • *
  • Wiadomości: 21
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #63 dnia: Lipca 02, 2017, 01:59:18 pm »

Gdzie wpisać ten adres IP i Port?

Zapisane

radnet

  • Newbie
  • *
  • Wiadomości: 21
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #64 dnia: Lipca 02, 2017, 10:30:34 pm »

Kompiluje się już poprawnie, ale komunikacji niema. Nie wiem co jeszcze trzeba zmienić.
Zapisane

lukaszdebiec

  • Jr. Member
  • **
  • Wiadomości: 63
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #65 dnia: Lipca 02, 2017, 11:34:28 pm »

Hej
A co to za port komunikacji masz ustawiony?
Domyślny satela to 7094.
Zapisane

radnet

  • Newbie
  • *
  • Wiadomości: 21
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #66 dnia: Lipca 03, 2017, 07:18:08 am »

Port na Dloadx mam 25593 i na takim się łącze z Dloadx przez ETHM. Myślę ze to nie wina nr portu tylko mojej struktury programu codesys. Nie wiem gdzie wpisać nr IP czy tam gdzie jest komentarz (* adres IP  modulu ETHM-1 *) czy w bloku, i co jeszcze trzeba przestawić, zamienić.
« Ostatnia zmiana: Lipca 03, 2017, 07:26:01 am wysłana przez radnet »
Zapisane

radnet

  • Newbie
  • *
  • Wiadomości: 21
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #67 dnia: Lipca 03, 2017, 10:18:52 pm »

Zmieniłem port na domyślny w satelu i w codesys ale nic sie nie zmieniło. Jeżeli program jest uruchomiony to tylko na SATEL.PRG mam widoczne np. niebieskie TRUE czy czarne FALSE a na innych czyli IP_address, CRC, SatelEthernet wszędzie znaki zapytania. Może źle wybrałem język programowania, chodzi o te LD, CFC, itd.
« Ostatnia zmiana: Lipca 03, 2017, 10:22:03 pm wysłana przez radnet »
Zapisane

radnet

  • Newbie
  • *
  • Wiadomości: 21
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #68 dnia: Lipca 04, 2017, 09:13:07 pm »

Nie wiem co nie gra. Kopiowałem wszystko od nowa z 5 razy, przeinstalowałem codesys i nic to nie pomogło. Jeszcze jedno mi przyszło do głowy, może to wersja ETHM bo mam 1.07.
Zapisane

lukaszdebiec

  • Jr. Member
  • **
  • Wiadomości: 63
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #69 dnia: Lipca 04, 2017, 10:47:14 pm »

Masz uruchomioną integracje w module ETHM-1 ? W sumie nigdy nie testowałem komunikacji z modułem ETHM-1, zawsze był ETHM-1 plus. Korzystasz z aplikacji mobilnych do satela? Działają Ci?
Pamiętaj że nie możesz mieć zaznaczonej opcji kodowania integracji.
Zapisane

radnet

  • Newbie
  • *
  • Wiadomości: 21
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #70 dnia: Lipca 04, 2017, 10:54:46 pm »

Mam zaznaczoną integracje w ETHM. Aplikacja INTEGRA CONTROL działa bez problemu. Opcja kodowania wyłączona. Wydaje mi sie że, ja źle to wszystko składam w codesys.
Zapisane

kamiKAC

  • Jr. Member
  • **
  • Wiadomości: 78
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #71 dnia: Lipca 24, 2017, 11:20:22 pm »

Cześć

Czy udało się uruchomić komunikację z Satelem? Aktualnie mam urlop i mogę pomóc.

Pozdrawiam
kamiKAC
Zapisane

lukasz_gostyn

  • Newbie
  • *
  • Wiadomości: 1
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #72 dnia: Sierpnia 08, 2017, 08:38:20 am »

Witam wszystkich uczestników forum.
Zwracam się do Was - ekspertów w sprawie komunikacji Satel-PLC.
Zacznę od tego że jestem totalnym laikiem w tematach programowania.
Moja sytuacja wygląda następująco:
Posiadam System alarmowy firmy Satel (tj. Integra 32+INT-RS) oraz sterownik PLC Wago ( Sterownik 750-8202+moduł 750-650)
Chciałbym odpytywać po RS232 wejścia Satela.
W programie w Codesysie korzystam z kodu ze strony:
http://edom-plc.pl/index.php/pl/component/content/article?id=86:rs232integra64
Program skompilował się od razu, ale wg mnie coś w nim nie działa, np, nie liczy sumy CRC - wszędzie zera.
Czy jest szansa aby ktoś podesłał działający program z Codesysa 2.3, na którym mógłbym sprawdzić swój kod.

Podrawiam Łukasz.
Zapisane

DZIKI_2005

  • Newbie
  • *
  • Wiadomości: 12
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #73 dnia: Lipca 22, 2018, 10:35:11 pm »

Witam, czy może ktoś mi przesłać działający program na komunikację SATELA z WAGO po ethernecie.
lukasz.klinger@vp.pl
z góry dziękuje
Zapisane

abdenago

  • Newbie
  • *
  • Wiadomości: 12
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #74 dnia: Lipca 25, 2018, 11:12:26 am »

Cześć,

W tym wątku jest taki program, sam z niego korzystam i działa.
Zapisane

Karol

  • Newbie
  • *
  • Wiadomości: 1
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #75 dnia: Września 24, 2018, 10:13:55 am »

Cześć,

W tym wątku jest taki program, sam z niego korzystam i działa.

Witam,
Czy komuś udało się odpalić program na nowych sterownikach pod e!COCKPIT?
Po dodaniu oscat mam konflikt z wago standard.
Kompilacja wywala się na Protocol : SEL_PROTOCOL       := IPPROTO_TCP;

Zapisane

luk511

  • Newbie
  • *
  • Wiadomości: 1
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #76 dnia: Września 30, 2018, 10:42:01 pm »

Witam wszystkich szanownych kolegów,

Mam pytanie czy udało się komuś uruchomić integracje satela ( po ethm ) z codesys 3,5 ???

Niestety nie używam sterownika wago a kod z tego wątku używa biblioteki wago ethernet.lib której w 3.5 nie mam jak użyć

Jak któryś z Kolegów czuje się na siłach chętnie zlecę napisanie takiego bloczku

Pozdrawiam
Zapisane

DZIKI_2005

  • Newbie
  • *
  • Wiadomości: 12
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #77 dnia: Października 02, 2018, 05:49:13 pm »

Cześć,

W tym wątku jest taki program, sam z niego korzystam i działa.

Witam,
Czy komuś udało się odpalić program na nowych sterownikach pod e!COCKPIT?
Po dodaniu oscat mam konflikt z wago standard.
Kompilacja wywala się na Protocol : SEL_PROTOCOL       := IPPROTO_TCP;

Podłączam się o prośbę z kodem pod eCockpit
lukasz.klinger@vp.pl
Zapisane

g6pl

  • Newbie
  • *
  • Wiadomości: 11
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #78 dnia: Października 21, 2018, 10:45:39 am »

Skopiowałem je z posta KamiKAC.



Już wiem, nie rozdzieliłem kodu od zmiennych.

Hej
Jak rozdzieliłeś kod od zmiennych...bo z tym samym walcze i mam te same błędy..
Zapisane

kamiKAC

  • Jr. Member
  • **
  • Wiadomości: 78
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #79 dnia: Października 22, 2018, 11:11:14 pm »

Czołem

Jeśli pytanie dotyczy eCockpit, to nie pomogę, bo nie mam. W Codesys 3.2 jest tak, że w górnej części okna deklaruje się zmienne a w dolnej wpisuje kod (program) operujący na tych zmiennych. radnet wkleił wszystko w jedno okno i program się nie kompilował.

Znajomy właśnie zakupił zestaw z eCockpitem, ale on jeszcze do integracji z Satelem nie doszedł :)

Pozdrawiam
Zapisane

g6pl

  • Newbie
  • *
  • Wiadomości: 11
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #80 dnia: Października 23, 2018, 03:05:52 pm »

Witam
Dziękuję za informację.
Mam Codesys 2.3.5, lecz nie wiem gdzie to wpisać...
U mnie wyglada to tak:
Zapisane

g6pl

  • Newbie
  • *
  • Wiadomości: 11
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #81 dnia: Października 24, 2018, 10:02:53 am »

Witam
Ehh...trzeba było wybrać język programowania ST, a ja miałem wszędzie CFC i dlatego nie miałem tego dodatkowego okna...brak doświadczenia!
Zapisane

mbed01

  • Newbie
  • *
  • Wiadomości: 2
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #82 dnia: Lutego 10, 2019, 01:04:00 pm »

Witam,

Czy udało się komuś uruchomić komunikację na sterowniku Beckhoffa??
Program kompiluje się, jednak wyrzuca warnings:

Chyba coś z biblioteką Ethernet.lib, ma ktoś działającą na Twincat 3??
Używam Twincat 3.

Pozdrawiam
Zapisane

kur4kwdz

  • Newbie
  • *
  • Wiadomości: 2
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #83 dnia: Października 17, 2019, 08:00:45 am »

Witam kolegów.

Czy komuś udało się połączyć CA ze sterownikiem WAGO pod e!cockpit? Jeśli tak, to czy mógłbym uśmiechnąć się o jakieś źródła?

Pozdrawiam.
Zapisane

shockmp

  • Newbie
  • *
  • Wiadomości: 3
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #84 dnia: Listopada 07, 2019, 07:04:40 pm »

Podłączam się do prośby. Na 750-880 działało, teraz mam PFC200 i chciałbym uruchomić komunikację z Satelem ale chyba jestem za cienki :'(
Zapisane

kur4kwdz

  • Newbie
  • *
  • Wiadomości: 2
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #85 dnia: Listopada 19, 2019, 03:09:39 pm »

Witam w złączeniu moja próba integracji sterownika PFC200 z centralką Satel INTEGRA128 stworzona na podstawie kodu @KamilKAC. Niestety ze względu na awarię płyty centrali nie jestem w stanie sprawdzićdziałania, chociaż symulowanie transmisji przy pomocy programu Hercules wygląda obiecująco.

Kolego @Schockimp sprawdzisz czy lata u Ciebie?

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 *)
wSocketState: WORD; (* numer wtyczki *)
END_VAR
VAR
pingSatel : FbPing_base;
pingState : WagoTypes.eResultCode;

socketSatel : FbSocketClient;
socketState : WagoSysErrorBase.FbResult;
socketOpenState : WagoTypes.eResultCode;
socketWriteState : WagoTypes.eResultCode;
socketReadState : WagoTypes.eResultCode;

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 : INT; (* 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 *)
rcv_len : UDINT;
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 *)

tonTimeOut : Standard.TON := (PT:=T#2s);
socketSatel(oStatus => socketState);
pingSatel(xAbort:=FALSE);

IF xOpen_Client THEN
CASE Status OF
0:(*Initialize functionblocks*)
Read00 := TRUE;
Read0A := TRUE;
buf_len := 0;
socketSatel.Initialize();
xCLIENT_OPEN:=FALSE;
status:=1;

1:
pingSatel.Start(
sAddress := IP,
tPingTimeout := T#20MS,
udiNumber := 5);

IF (pingState=0) AND (NOT socketSatel.xBusy) THEN
status := 5;
ELSE
Status := 0;
END_IF

5:(*open connection*)
socketSatel.OpenAndConnect(
sAddress := IP,
uiPort := Port,
eType := TCP,
xAllowBroadcast := FALSE,
sOwnInterface := '',
tTimeout := T#5S,
pWriteBuffer := 0,
udiWriteBufferSize := 0,
pReadBuffer := 0,
udiReadBufferSize := 0,
OpenAndConnect => socketOpenState);

IF  socketSatel.State = eSocketOpState.connected THEN
Status  := 10;
xCLIENT_OPEN:=TRUE;
ELSIF socketSatel.State = eSocketOpState.connecting THEN
Status := 5;
ELSE
Status := 0;
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;

IF socketSatel.IsReadyForWrite THEN
socketSatel.Write(
pTxBuffer:=ADR(frame_snd),
udiTxNBytes:=7,
write => socketWriteState);
END_IF

  IF  (socketWriteState <> 0) THEN
  Status:=0;
ELSE
Status := 40;
  END_IF

// socketSatel.CancelWrite();
status:=20;

20:
socketSatel.Read(
pRxBuffer:=ADR(frame_rcv),
udiRxBufferSize:= SIZEOF(frame_rcv),
udiRxNBytes => rcv_len,
Read => socketReadState);
tonTimeOut(IN := TRUE);
IF buf_len <> 0 THEN
tonTimeOut(IN := FALSE);
Status:=30;
ELSIF tonTimeOut.Q THEN
tonTimeOut(IN := FALSE);
Status:=10;
END_IF

30:
buf_len := UDINT_TO_INT(rcv_len);
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 *)
40:
socketSatel.Finish();
socketSatel.Close();
status := 0;
END_CASE
ELSE
socketSatel.Finish();
socketSatel.Close();
END_IF

Do Poprawnego działania potrzeba biblioteki WagoAppSocket
Funkcja SatelCRC zgodna z kodem kolegi @KamilKac
Zapisane

shockmp

  • Newbie
  • *
  • Wiadomości: 3
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #86 dnia: Listopada 20, 2019, 08:41:18 pm »

Wkleiłem, skompilowałem, uruchomiłem i nie chciało czytać.
Znalazłem drobny błąd, wniosłem małe poprawki i działa aż miło.
Jakoś specjalnie nie wdawałem się w analizę i chyba nie będę - dopóki działa.
Dzięki @kur4kwdz

Sprawdzone na PFC200 e!COCKPIT
socketSatel(oStatus => socketState);
pingSatel(xAbort:=FALSE);

IF xOpen_Client THEN
CASE Status OF
0:(*Initialize functionblocks*)
Read00 := TRUE;
Read0A := TRUE;
buf_len := 0;
socketSatel.Initialize();
xCLIENT_OPEN:=FALSE;
status:=1;

1:
pingSatel.Start(
sAddress := IP,
tPingTimeout := T#20MS,
udiNumber := 5);

IF (pingState=0) AND (NOT socketSatel.xBusy) THEN
status := 5;
ELSE
Status := 0;
END_IF

5:(*open connection*)
socketSatel.OpenAndConnect(
sAddress := IP,
uiPort := Port,
eType := TCP,
xAllowBroadcast := FALSE,
sOwnInterface := '',
tTimeout := T#5S,
pWriteBuffer := 0,
udiWriteBufferSize := 0,
pReadBuffer := 0,
udiReadBufferSize := 0,
OpenAndConnect => socketOpenState);

IF  socketSatel.State = eSocketOpState.connected THEN
Status  := 10;
xCLIENT_OPEN:=TRUE;
ELSIF socketSatel.State = eSocketOpState.connecting THEN
Status := 5;
ELSE
Status := 0;
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;

IF socketSatel.IsReadyForWrite THEN
socketSatel.Write(
pTxBuffer:=ADR(frame_snd),
udiTxNBytes:=7,
write => socketWriteState);
END_IF

  IF  (socketWriteState <> 0) THEN
  Status:=0;
ELSE
Status := 20; //było 40
  END_IF

// socketSatel.CancelWrite();

20:
socketSatel.Read(
pRxBuffer:=ADR(frame_rcv),
udiRxBufferSize:= SIZEOF(frame_rcv),
udiRxNBytes => rcv_len,
Read => socketReadState);
tonTimeOut(IN := TRUE);
IF rcv_len <> 0 THEN   //było buf_len <> 0
tonTimeOut(IN := FALSE);
Status:=30;
ELSIF tonTimeOut.Q THEN
tonTimeOut(IN := FALSE);
Status:=10;
END_IF

30:
buf_len := UDINT_TO_INT(rcv_len);
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 *)
40:
socketSatel.Finish();
socketSatel.Close();
status := 0;
END_CASE
ELSE
socketSatel.Finish();
socketSatel.Close();
END_IF
Zapisane

Kris

  • Newbie
  • *
  • Wiadomości: 4
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #87 dnia: Stycznia 13, 2020, 05:59:05 pm »

Witam uruchomiłem integrację w e-cockpit na sterowniku PFC200 i działa, ale odczytuje stany czujek do numeru 26 i koniec.
Centrala to Integra 256 i używanych jest więcej wejść.
Prośba o pomoc w rozwiązaniu problemu, poniżej wklejam zdjęcie z e-cockpit.
Zapisane

Kris

  • Newbie
  • *
  • Wiadomości: 4
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #88 dnia: Stycznia 16, 2020, 06:55:47 am »

Witam problem sam się rozwiązał okazało się że jest błąd w e-cockpit.
Zapisane

szerszen

  • Newbie
  • *
  • Wiadomości: 25
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #89 dnia: Marca 07, 2020, 10:55:36 am »

Cześć,
Użyłem kodu uwspólnionego przez KamiKac. Program kompiluje się  bez błędów i bez ostrzeżeń.  Trzykrotnie sprawdziłem ustawiania po stronie SATELa wydają się być ok IP 192.168.2.222 port 7094 . Telnet na ten port pokazuje, że port jest otwarty i przyjmuje połączenia.
Jednak problem dla mnie jest po stronie WAGO (750-881) 192.168.2.5 - funkcja SatelEthernet nie przebija się poza krok ze statusem 5.
 
MyEthernetOpen.ERROR przyjmuje wartość 0x8016 co zgodnie z dokumentacją biblioteki oznacza "Socket is not connected". Spędzam nad tym kolejną noc i już dawno skończyły się sensowne pomysły.  W moim przypadku program nawet nie rozpoczyna budowy ramki i komunikacji. GetConfig pobiera właściwe dane, IP, Maska poprawne.Od stony sieci WAGO komunikuje się z RPi bez zastrzeżeń, a SATEL z PC (DLOADX). Może Wam wpadnie jakiś pomysł.

Pomożecie?


Zapisane