Ethernet Client

wopl

Level-1
Beiträge
3
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo allerseits,
recht neu in der SPS Programmierung versuche ich gerade einen Ethernet-Client auf der Wago 750-880 zur Datenübertragung zu realisieren. Soweit funktioniert alles ganz gut, bis der Server temporär nicht mehr antworten kann. Dann bricht die Verbindung mit Fehler 16#8006 => SysSockConnect() fails ab. Wünschenswert wäre ein automatischer Wiederaufbau der Verbindung, sobald der Server wieder verfügbar ist. Eine Speicherung der nicht übertragenen Datenpakete ist nicht erforderlich.
Anbei mein Code und danach ein paar Fragen hierzu:

Code:
(******************************************************************************)
PROGRAM PLC_PRG
VAR
END_VAR

(* run the different modules *)
MYethernet;

MYmodule1;
MYmodule2;

(******************************************************************************)
(* VAR_GLOBAL *)

VAR_GLOBAL
  data : STRING;
  startTransmission : BOOL := FALSE;
END_VAR

(******************************************************************************)
(* PROGRAM MYethernet    *)

PROGRAM MYethernet
VAR
  tcpc : TCP_Client3;
  ip : STRING := '10.10.50.1';
  port : WORD := 7072;
  receivebuff : ARRAY [0..MAX_RECEIVE_TCP_CLIENT] OF BYTE;
  received : DINT;
  tcperr : DINT;

END_VAR

tcpc (xOpenConnection := TRUE,
      sIPaddress := ip,
      wPortNumber := port,
      ptSendData := ADR(data),
      diSendCount := LEN(data),
      xStartSend := startTransmission,
      aReceiveBuffer := receivebuff,
      diReceiveCount := received);

IF tcpc.diError <> 0 THEN
  tcperr := tcpc.diError;
END_IF

(******************************************************************************)
(* FUNCTION MYtrigger *)

FUNCTION MyTrigger : BOOL
VAR_INPUT
  str: STRING;
END_VAR
VAR
END_VAR

... some more string manipulation ...
data := str;
startTransmission := TRUE;

(******************************************************************************)
(* PROGRAM MYmodule1 *)

(*** here is all the logic *** *)
...
 MyTrigger ("string to be transmitted");
...


  • tcpc wird in jedem Zyklus aufgerufen, egal, ob Daten übertragen werden sollen oder nicht. Ist das wünschenswert oder sollte der Aufruf nur dann erfolgen, wenn Daten übertragen werden sollen?
  • Wie kann ich nach einem Verbindungsabbruch die Verbindung wieder aufbauen?
  • MYmodule1 und MyTrigger bereiten den Datenstring vor. Über startTransmission erfolgt die Auslösung der Übertragung. In dem gezeigten Beispiel wird die Datenübertragung aber erst im nächsten Zyklus ausgelöst. Ist das o.k. und "by Design" erwünscht, oder sollte ich die Kommunikation "anders" umsetzen?
  • würdet ihr die Struktur des Programms gänzlich anders aufbauen (hinsichtlich der TCP-Kommunikation) ?
  • Ist TCP_Client3 der richtige Baustein von Wago oder gibts hier was "besseres"?
  • und optional, wenn die obigen Fragen geklärt sind: wie bekomme ich MyTrigger re-entrant, so daß ich pro Zyklus mehrere TCP-Übertragungen absetzen kann?

Würde mich sehr freuen, wenn Ihr mir hier ein wenig unter die Arme greifen könnt. Ich denke z.Zt. mehr in C++ und Java Methoden. SPS Programmierung ist halt ein wenig anders und für mich recht ungewohnt.
Dank und schöne Grüße aus Köln,
Wolfram
 
Zuletzt bearbeitet:
Zurück
Oben