Potrzebuję skomunikować ze sobą sterownik PLC i kontroler robota poprzez ethernet.
Aby sprawdzić, czy program napisany na sterownik działa poprawnie, zdecydowałem się pobrać program http://www.darmoweprogramy.org/569/Hercules-SETUP i użyć go do testów.
Zacząłem od napisaniu programu dla sterownika jako servera i próby połączenia się z nim za pomocą w/w programu.
Program jest pisany w środowisku CoDeSys, w języku ST, i wygląda tak:
PROGRAM PLC_PROGRAM
VAR
sa : SOCKADDRESS;
saSize : DINT;
port : WORD := 999;
hSocket, hClientSocket : UDINT;
maxConnections : DINT := 10;
result : UDINT;
str : STRING := 'HelloClient!';
str2 : STRING(255);
END_VAR
hSocket := SysSockCreate(SOCKET_AF_INET, SOCKET_STREAM,
SOCKET_IPPROTO_TCP, ADR(result));
sa.sin_family := SOCKET_AF_INET;
sa.sin_addr.ulAddr := SOCKET_INADDR_ANY;
sa.sin_port := SysSockHtons(port);
result := SysSockBind(hSocket, ADR(sa), SIZEOF(sa));
result := SysSockListen(hSocket, maxConnections);
hClientSocket := SysSockAccept(hSocket, ADR(sa), ADR(saSize), ADR(result));
SysSocketSend(hClientSocket, ADR(str), len(str) + 1, 0, ADR(result));
SysSockClose(hClientSocket);
SysSockClose(hSocket);
W polu port wpisuję tą samą wartość, którą podałem w programie
W polu IP próbowałem wpisywać wartość IP sterownika PLC, i adres z tej samej podsieci sterownika PLC.
Jak można się domyślić, program nie działa.
- Czy dostrzegacie może jakieś błędy w programie ? (przypuszczam, że w innych językach programowania, użyte tutaj funkcje wyglądają podobnie)
- Czy fakt, że program na sterowniku PLC wykonuje się cyklicznie może mieć jakiś wpływ na nie-działanie programu?
- Czy wystarczy podpiąć kabel ethernet do sterownika i komputera, czy trzeba to jeszcze jakoś dodatkowo konfigurować (pracuję na maszynie wirtualnej), (przez ten sam kabel programuję sterownik ).
- Inne powodu, czemu nie działa ?