-> Hier kostenlos registrieren
Hallo,
stehe heute vor einem neuen kleinen Problem.
Eine CPU315-2 DP kommuniziert über eine CP343-1 Lean via TCP/IP mit einem anderen Rechner (Andere Station).
Die Kommunikation über AG_SEND und AG_RECV habe ich bereits projektiert und getestet. Alles einwandfrei.
Seit gestern ist noch eine Sache hinzu gekommen, unzwar soll über diese Verbindung ein 16 Zeichen langer DatenString empfangen werden.
Beispielstring: +1+1+1+1+0+0+0+0
'+' dient als Trennzeichen, somit sind es 8 Werte, die aus dem String heraus genommen werden sollen und als Integerwert in eine DB abgelegt werden sollen. Der String wird nach dem empfangen zunächst in dem DB202 abgelegt String[16] Anfangswert: ''.
AG_RECV BAUSTEIN habe ich unter RECV: P#DB201.DBX0.0 BYTE 18 eingestellt.
Soweit so gut. Darufhin in SCL einige Zeilen geschrieben und mit der MID Funktion den String Stück für Stück ausgelesen und gewandelt.
Funktioniert auch soweit alles gut. Die Daten werden gewandelt und in DB1 geschrieben.
JETZT zum Problem: Mit dieser Routine "verschieben" sich nach jedem Empfang die Parameter um eine Variable. Wenn also der Beispiel Datenstring: +1+1+1+1+0+0+0+0 mehrmals hintereinander gesendet wird passiert folgendes in dem DB.
1. mal empfangen (richtig) ->1 1 1 1 0 0 0 0
2. mal empfangen -> 1 1 1 0 0 0 0 1
3. mal empfangen -> 1 1 0 0 0 0 1 1
usw...
Woran kann das liegen?
Danke für Eure Hilfe
Gruß Stefan
stehe heute vor einem neuen kleinen Problem.
Eine CPU315-2 DP kommuniziert über eine CP343-1 Lean via TCP/IP mit einem anderen Rechner (Andere Station).
Die Kommunikation über AG_SEND und AG_RECV habe ich bereits projektiert und getestet. Alles einwandfrei.
Seit gestern ist noch eine Sache hinzu gekommen, unzwar soll über diese Verbindung ein 16 Zeichen langer DatenString empfangen werden.
Beispielstring: +1+1+1+1+0+0+0+0
'+' dient als Trennzeichen, somit sind es 8 Werte, die aus dem String heraus genommen werden sollen und als Integerwert in eine DB abgelegt werden sollen. Der String wird nach dem empfangen zunächst in dem DB202 abgelegt String[16] Anfangswert: ''.
AG_RECV BAUSTEIN habe ich unter RECV: P#DB201.DBX0.0 BYTE 18 eingestellt.
Soweit so gut. Darufhin in SCL einige Zeilen geschrieben und mit der MID Funktion den String Stück für Stück ausgelesen und gewandelt.
Code:
FUNCTION DATA_ENCODER : VOID
VAR_TEMP
// temporäre Variablen
a1:STRING[2];
a2:STRING[2];
a3:STRING[2];
a4:STRING[2];
a5:STRING[2];
a6:STRING[2];
a7:STRING[2];
a8:STRING[2];
END_VAR
a1 := '';
a2 := '';
a3 := '';
a4 := '';
a5 := '';
a6 := '';
a7 := '';
a8 := '';
a1 := MID(IN := DB202.Stringkette_RECV, L := 2, P := 1);
a2 := MID(IN := DB202.Stringkette_RECV, L := 2, P := 3);
a3 := MID(IN := DB202.Stringkette_RECV, L := 2, P := 5);
a4 := MID(IN := DB202.Stringkette_RECV, L := 2, P := 7);
a5 := MID(IN := DB202.Stringkette_RECV, L := 2, P := 9);
a6 := MID(IN := DB202.Stringkette_RECV, L := 2, P := 11);
a7 := MID(IN := DB202.Stringkette_RECV, L := 2, P := 13);
a8 := MID(IN := DB202.Stringkette_RECV, L := 2, P := 15);
//Überführung von INT nach String
DB1.MOVE_to_REFERENCE_POS := STRING_TO_INT(a1);
DB1.REACHED_REFERENCE_POS := STRING_TO_INT(a2);
DB1.MOVE_to_DECK_of_SHIP := STRING_TO_INT(a3);
DB1.REACHED_DECK_of_SHIP := STRING_TO_INT(a4);
DB1.ROBOTER_MOVING := STRING_TO_INT(a5);
DB1.BARGRAPH_green := STRING_TO_INT(a6);
DB1.BARGRAPH_yellow := STRING_TO_INT(a7);
DB1.BARGRAPH_red := STRING_TO_INT(a8);
END_FUNCTION
Funktioniert auch soweit alles gut. Die Daten werden gewandelt und in DB1 geschrieben.
JETZT zum Problem: Mit dieser Routine "verschieben" sich nach jedem Empfang die Parameter um eine Variable. Wenn also der Beispiel Datenstring: +1+1+1+1+0+0+0+0 mehrmals hintereinander gesendet wird passiert folgendes in dem DB.
1. mal empfangen (richtig) ->1 1 1 1 0 0 0 0
2. mal empfangen -> 1 1 1 0 0 0 0 1
3. mal empfangen -> 1 1 0 0 0 0 1 1
usw...
Woran kann das liegen?
Danke für Eure Hilfe
Gruß Stefan