'Inteligenty' dom ze sterownikiem PLC

 Language:
Szukanie zaawansowane  

Aktualności:

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

Strony: 1 ... 4 5 [6]   Do dołu

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

Karol

  • Newbie
  • *
  • Wiadomości: 1
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #75 dnia: Wrzesień 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: Wrzesień 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ździernik 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: 7
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #78 dnia: Październik 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: 66
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #79 dnia: Październik 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: 7
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #80 dnia: Październik 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: 7
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #81 dnia: Październik 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: Luty 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ździernik 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: 2
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #84 dnia: Listopad 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: Listopad 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: 2
    • Zobacz profil
Odp: Integracja PLC z systemem alarmowym SATEL INTEGRA
« Odpowiedź #86 dnia: Listopad 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
Strony: 1 ... 4 5 [6]   Do góry