-Menü

Beiträge anzeigen

Dieser Abschnitt erlaubt es Ihnen, alle Beiträge anzusehen, die von diesem Mitglied geschrieben wurden. Beachten Sie, dass Sie nur Beiträge sehen können, die in Teilen des Forums geschrieben wurden, auf die Sie aktuell Zugriff haben.

Beiträge anzeigen-Menü

Beiträge - inovent

#1
Modulentwicklung / Re: Ethernet/IP
14. August 2015, 19:04:58
danke für die Infos.
ich werde nochmals mit Wago sprechen und hoffen eine Portierung auf Codesys 3.5 zu bekommen.
ich melde mich wenn es neues gibt
#2
Modulentwicklung / Re: Ethernet/IP
12. August 2015, 21:57:16
Hallo,
ich weiß, das es von Wago eine Ethernet/IP Implementierung für codesys 2.3 auf Bausteinebene für explizite Zugriffe gibt.
Infos z.b. hier:  http://www.wago.com/wagoweb/documentation/app_note/a2036/a203600e.pdf
Allerdings nicht auf Codesys 3.5.
Aktuelle Idee wäre ein Ethernet/IP -> ModbusTCP Gateway. Ein direkter Weg wäre natürlich aber schöner.
#3
Modulentwicklung / Ethernet/IP
11. August 2015, 20:59:35
Hallo zusammen,
gibt es schon Umsetzungen oder Überlegungen zu einem EtherNet/IP Stack?
ich würde gerne unter Codesys mit einem IO-Knoten über EtherNet/IP sprechen, explizite Nachrichten würden komplett ausreichen.
Es geht nur darum ein paar IO-Werte abzufragen oder zu setzen.
Das IO-Mapping müsste man sich natürlich ähnlich wie bei Modbus/TCP selbst bauen da die eds-Datein auf diese Art nicht einlesbar sind.
Das ganze soll auf einer Wago-SPS laufen, hier wird aber EtherNet/IP nicht von haus aus unterstützt.

grüße Fabian
#4
Codesys 2 / Re: File IO auf Eckelmann
20. August 2014, 08:10:00
vielen dank das hilft schonmal weiter.
ich melde mich sobald es klappt :-)
#5
Codesys 2 / File IO auf Eckelmann
19. August 2014, 14:59:11
Hallo,
ich bin mal wieder mit Eckelmann beschäftigt. Diesmal File IO auf USB Stick.
Problem ist hier das Eckelmann die IO Funktionen anders nennt und die Übergabetypen sich auch unterscheiden.
besteht eine Möglichkeit hier einen passenden "Adapter" zu schreiben?
Ich könnte z.b. die Funktion sysfileopen (von Oscat verwendet) selbst nachbilden, und in dieser Funktion dann sysopenfile (von Eckelmann) aufrufen, sowie die Übergabewerte durch typecasts anpassen.
Allerdings würde ich gerne sichergehen das dies auch immer richtig funktioniert oder ob ich passende Fallunterscheidungen vorsehen muss.

Hierfür bräuchte ich allerdings eine Dokumentation der Funktionen die Oscat für File IO verlangt.
Gibt es diese irgendwo?

Anbei auch die IO Bibliothek von Eckelmann.

[gelöscht durch Administrator]
#6
vielen Dank.
Da hast du Recht.
was mich bei Phoenix recht stark stört, ist dass die Verwendung von Zeigern eigentlich kaum vorhanden ist.

Gibt es schon Erfahrungen mit Oscat in Verbindung Wago und Codesys 3 ?
#7
vielen dank,
habe mich noch etwas mehr mit pcworx beschäftigt. Werde evtl doch auf Wago umschwenken, vorallem auf Grund neuer Ankündigungen zur Messe.
Gibt es einen Grund der gegen Oscat auf Wago spricht?
#8
Hallo zusammen,
nachdem ich lange nichts mehr geschrieben habe hätte ich wieder eine neue Frage.
Ich werde auch im laufe der Woche meinen Code für Modbus für Eckelmann online stellen der jetzt schon seit 2 Jahren stabil läuft.

Aber zum eigentlich Thema.

Ich möchte mehere Phoenix-SPSn in einem Netzwerk synchronisieren.
Das Netzwerk hat keine Verbindung zum Internet.
Es gibt keinen wirklichen Master, da Steuerungen auch vom Netzwerk entfernt oder dazugefügt werden können.
Eine weitere Steuerung nur als Zeitmaster einzufügen kommt nicht in Frage.

Es sollen bestimmte Timer auf allen SPS Steuerungen gleichzeitig gestartet werden.
(gleichzeitig heißt etwa in einem Fenster von +- 100ms)

Gibt es hierfür irgendwelche Ideen oder Ansätze?

Meine einzige Idee bis jetzt war:
Alle Pakete aus dem Netzwerk empfangen. Somit sind die eigene und die IPs aller anderen Steuerungen bekannt. Die Steuerung mit der nidrigsten IP-Adresse macht den Zeitmaster.
#9
mal schauen ob ich irgendwie wireshark aufzeichnungen machen kann.
werde mich dann doch mal versuchen selbst durch den baustein durch zu hangeln.
an welchen stellen müsste ich denn ansetzten um die direkte ethernetverbindung von den allgemeinen oscat funktionen auf die eckelmannvorschläge umzubauen?
das müsste ja eigentlich alles rein im ip_control sitzen oder?
#10
Halllo
ich bin auch etwas weiter gekommen,
habe noch ein paar probleme mit der modbus verbindung, läuft wie bei emv-fuzzi beschrieben anscheiend stabil, dann bricht aber die verbindung teils ab.
teils heißt: nur eine richtung bleibt stabil bestehen, d.h. teils bricht das lesen, oder das schreiben auf den modbusteilnehmer ab. die bestehenden verbindungen bleiben dann aber stabil.
bei diesem vorgang bleibt mb_client in state 30 stehen.

allerdings hatte ich auch ein problem mit den codesys eigenen netzwerkvariablen, hier brach die verbindung öfters ab.
die lösung war die eigene implementierung einer udp verbindung durch ein beispielprojekt von eckelmann.
hier bleibt die verbindung seitdem stabil.

d.h. verbindungen nach außen ohne verwendung der netzwerkvariablen herzustellen ist möglich.

somit sollte also auch modbus möglich sein.
hier der code von eckelmann für senden und empfangen:
vielleicht hat jemand eine idee worin der unterschied zum mb_client besteht, oder wie man dem fehler näher kommen könnte

IF NOT Init_bit THEN
SysCreateConn('172.16.5.22', 1000, ADR(Connection_r));
Init_bit := TRUE;
END_IF
(* --------- Receive --------- *)
Result_di := SysSockRecvFrom(Connection_r.UdpSock_di,
ADR(Connection_r.RxMsg_r),
SIZEOF(Connection_r.RxMsg_r),
0,
ADR(UdpRecvAddr_r),
SIZEOF(UdpRecvAddr_r));



IF Result_di > 0 THEN
(* Check correct IP address *)
IF UdpRecvAddr_r.sin_addr = Connection_r.EseeSockAddr_r.sin_addr THEN

(* message received *)

END_IF
END_IF

(* --------- Send --------- *)
IF send THEN
SysSockSendTo(Connection_r.UdpSock_di,
ADR(Connection_r.TxMsg_r),
Connection_r.TxMsg_r.Header.Length,
0,
ADR(Connection_r.EseeSockAddr_r),
SIZEOF(Connection_r.EseeSockAddr_r));

END_IF

#11
wunderbar vielen dank
und schon läufts :-)

unten noch der code der umsetzung.
das ganze soll virtuelle ein und ausgänge lesen bzw schreiben.
gedacht habe ich mir das so das ich einfach zyklisch zwischen senden und empfangen umschalte. (sendenteil noch nicht implementiert)

ergibt das so sinn oder totaler nonsense?
konnte das leider noch nicht auf der hardware testen

PROGRAM MODBUS
VAR
IP_CONTROL2_1: IP_CONTROL2;
MB_CLIENT_1: MB_CLIENT;
IP_C: IP_C;

S_BUF: NETWORK_BUFFER_SHORT;
R_BUF: NETWORK_BUFFER_SHORT;

W_DATA_BITPOS: INT;
W_DATA_ADR: INT;
W_POINTS: INT;
W_ADDR: INT;
R_DATA_BITPOS: INT;
R_DATA_ADR: INT;
R_POINTS: INT;
R_ADDR: INT;

IP : DWORD;
FC : INT;

DATA: ARRAY[0..255] OF WORD;
DATA_IN: ARRAY[0..7] OF WORD;
DATA_OUT: ARRAY[0..7] OF WORD;

Send_state : UINT;

i: USINT;
END_VAR




IP := DWORD_OF_BYTE(192,168,178,001);

IP_CONTROL2_1.IP := IP;
IP_CONTROL2_1.PORT := 502;
IP_CONTROL2_1.TIME_OUT := t#5s;
IP_CONTROL2_1(IP_C := IP_C,S_BUF := S_BUF,R_BUF := R_BUF);

MB_CLIENT_1.DATA_SIZE := 8;
MB_CLIENT_1.UDP := FALSE;

MB_CLIENT_1(S_BUF := S_BUF,R_BUF := R_BUF,IP_C := IP_C,DATA := DATA);


CASE Send_state OF

0:  (*READ virtual output, PILZ -> *)
FC := 3;
R_ADDR := 512;
R_POINTS := 8;
R_DATA_ADR := 0;
MB_CLIENT_1.ENABLE := TRUE;

Send_state := 1;

1:
IF NOT MB_CLIENT_1.BUSY THEN
FOR i := 0 TO 7 BY 1 DO
DATA_OUT[i] := DATA[i];
END_FOR;
Send_state := 2;
MB_CLIENT_1.ENABLE := FALSE;
END_IF;

2: (*WRITE virtual input*)

Send_state := 0;


ELSE
Send_state:= 0;

END_CASE;


MB_CLIENT_1.R_ADDR := R_ADDR;
MB_CLIENT_1.R_POINTS := R_POINTS;
MB_CLIENT_1.R_DATA_ADR := R_DATA_ADR;
MB_CLIENT_1.R_DATA_BITPOS := R_DATA_BITPOS;
MB_CLIENT_1.W_ADDR := W_ADDR;
MB_CLIENT_1.W_POINTS := W_POINTS;
MB_CLIENT_1.W_DATA_ADR := W_DATA_ADR;
MB_CLIENT_1.W_DATA_BITPOS := W_DATA_BITPOS;
MB_CLIENT_1.FC := FC;

#12
hallo,
ich arbeite auch gerade an dem gleichen problem
modbus-client auf einer elc66 von eckelmann.

somit lässt sich auch alles übersetzten, nur der fehler "variable socket_fd_setsize nicht deklariert" besteht weiterhin.

irgendwie scheint das bei den obenstehenden projekten aber dennoch zu funktioniern, oder habe ich nur die lösung für dieses problem übersehen?
#13
Codesys 2 / Re: Help with Modbus TCP
11. September 2012, 10:35:50
hi :-)
at first i have to say,  oscat is the best :-)

but there is still a little question:
what is the difference between "R_ADDR" and "R_DATA_ADR"
i dont know what i have to put in there.
i want to read some registers (FC = 3) of an Pilz Pnozmulti.

can anyone give me a little example please