CASE Properties.Step OF 0://Empfangsbereitschaft aktivieren
IF Toggle300ms THEN //AND false THEN // AND NOT Ctrl.IsBusy THEN
FOR i:=0 TO TCPSize-1 DO
KommCtrl.RecArray[i] := char#0;
END_FOR;
KommCtrl.EmpfangenGesProp := 0;
KommCtrl.EmpfangenLaProp := 0;
KommCtrl.HeaderLaProp := 0;
Properties.Step := Properties.Step + 1;
END_IF;
1://Kommandostring senden:
IF NOT KommCtrl.Send_DoREQ AND NOT KommCtrl.Send_IsBusy AND NOT KommCtrl.PropKomplett AND NOT KommCtrl.BefehlKomplett THEN // Evtl. warten bis Senden von Befehl abgeschlossen
KommCtrl.SendArray[0] := 'R';
KommCtrl.SendArray[1] := 'd';
KommCtrl.SendArray[2] := ',';
KommCtrl.SendArray[3] := 'P';
KommCtrl.SendArray[4] := 'r';
KommCtrl.SendArray[5] := 'o';
KommCtrl.SendArray[6] := 'p';
KommCtrl.SendArray[7] := 'e';
KommCtrl.SendArray[8] := 'r';
KommCtrl.SendArray[9] := 't';
KommCtrl.SendArray[10] := 'i';
KommCtrl.SendArray[11] := 'e';
KommCtrl.SendArray[12] := 's';
KommCtrl.SendArray[13] := ',';
KommCtrl.SendArray[14] := '0';
KommCtrl.SendArray[15] := ',';
KommCtrl.SendArray[16] := '0';
KommCtrl.SendArray[17] := '$0D';
KommCtrl.SendArray[18] := '$0A';
KommCtrl.Sendelaenge := 19;
KommCtrl.Receive_DoREQProp := True;
KommCtrl.Send_DoREQ := True;
Properties.Step := Properties.Step + 1;
END_IF;
2://Kommando fertig
IF KommCtrl.Send_IsDone AND NOT KommCtrl.Send_IsBusy THEN
KommCtrl.Send_DoREQ := False;
Properties.Step := Properties.Step + 1;
END_IF;
3://Daten empfangen. Mindestens die Länge ist schon angekommen
IF KommCtrl.PropKomplett THEN
KommCtrl.PropKomplett := False;
// HighByte und LowByte vertauschen !!!
KommCtrl.AStr := MID(in:=KommCtrl.RecStrProp, l:=5, p:=20);
AWordForBool := INT_TO_WORD(STRING_TO_INT(KommCtrl.AStr)); // Read Inputs 17-24
FOR i:=17 TO 24 DO // Input 17-24
Properties.Input[i] := AWordBoolArray[i-9];
END_FOR;
KommCtrl.AStr := MID(in:=KommCtrl.RecStrProp, l:=5, p:=25);
AWordForBool := INT_TO_WORD(STRING_TO_INT(KommCtrl.AStr)); // Read Inputs 1-16
FOR i:=1 TO 8 DO // Input 1-16
Properties.Input[i] := AWordBoolArray[i+7];
END_FOR;
FOR i:=9 TO 16 DO // Input 1-16
Properties.Input[i] := AWordBoolArray[i-9];
END_FOR;
KommCtrl.AStr := MID(in:=KommCtrl.RecStrProp, l:=5, p:=30);
AWordForBool := INT_TO_WORD(STRING_TO_INT(KommCtrl.AStr)); // Read Outputs 1-16
FOR i:=1 TO 8 DO // Output 1-16
Properties.Output[i] := AWordBoolArray[i+7];
END_FOR;
FOR i:=9 TO 16 DO // Output 1-16
Properties.Output[i] := AWordBoolArray[i-9];
END_FOR;
KommCtrl.AStr := MID(in:=KommCtrl.RecStrProp, l:=5, p:=35);
Properties.ErrorCode := INT_TO_WORD(STRING_TO_INT(KommCtrl.AStr));
KommCtrl.AStr := MID(in:=KommCtrl.RecStrProp, l:=5, p:=40);
AWordForBool := INT_TO_WORD(STRING_TO_INT(KommCtrl.AStr));
Properties.Status.InHome := AWordBoolArray[8];
Properties.Status.MotorOn := AWordBoolArray[9];
Properties.Status.PowerHigh := AWordBoolArray[10];
Properties.Status.Automatik := AWordBoolArray[11];
ALen := LEN(KommCtrl.RecStrProp)-45;
// KommCtrl.RecStrProp Bsp.: 126,ACK,Properties,0000000000000020000000000,68.8883,-165.911,-26.5361,-26.9209,1,0,0,0,221.613,-38.1282,-26.5361,-210.406,1
KommCtrl.TempStr := MID(in:=KommCtrl.RecStrProp, l:=(ALen), p:=46); // Feste Zeichenanzahl rausschmeißen
// KommCtrl.TempStr Bsp.: 68.8883,-165.911,-26.5361,-26.9209,1,0,0,0,221.613,-38.1282,-26.5361,-210.406,1
AInt := FIND(in1:=KommCtrl.TempStr, in2:=',');
ALen := ALen - AInt;
KommCtrl.AStr := MID(in:=KommCtrl.TempStr, l:=AInt-1, p:=1); // CurPos.X aus KommCtrl.TempStr ausschneiden Bsp.: 68.8883
KommCtrl.TempStr := MID(in:=KommCtrl.TempStr, l:=ALen, p:=AInt+1);
// KommCtrl.TempStr Bsp.: -165.911,-26.5361,-26.9209,1,0,0,0,221.613,-38.1282,-26.5361,-210.406,1
// KommCtrl.AStr bsp.: 68.8883 nach S7 real Format wandeln ±v.nnnnnnnE±xx
NonS7StrToRealStr(InString:=KommCtrl.AStr);
Properties.CurPos.X := STRING_TO_REAL(NonS7StrToRealStr.OutString);
AInt := FIND(in1:=KommCtrl.TempStr, in2:=',');
ALen := ALen - AInt;
KommCtrl.AStr := MID(in:=KommCtrl.TempStr, l:=AInt-1, p:=1); // CurPos.Y aus KommCtrl.TempStr ausschneiden Bsp.: 68.8883
KommCtrl.TempStr := MID(in:=KommCtrl.TempStr, l:=ALen, p:=AInt+1);
// KommCtrl.TempStr Bsp.: -26.5361,-26.9209,1,0,0,0,221.613,-38.1282,-26.5361,-210.406,1
// KommCtrl.AStr bsp.: -165.911 nach S7 real Format wandeln ±v.nnnnnnnE±xx
NonS7StrToRealStr(InString:=KommCtrl.AStr);
Properties.CurPos.Y := STRING_TO_REAL(NonS7StrToRealStr.OutString);
AInt := FIND(in1:=KommCtrl.TempStr, in2:=',');
ALen := ALen - AInt;
KommCtrl.AStr := MID(in:=KommCtrl.TempStr, l:=AInt-1, p:=1); // CurPos.Z aus KommCtrl.TempStr ausschneiden Bsp.: 68.8883
KommCtrl.TempStr := MID(in:=KommCtrl.TempStr, l:=ALen, p:=AInt+1);
// KommCtrl.TempStr Bsp.: -26.9209,1,0,0,0,221.613,-38.1282,-26.5361,-210.406,1
// KommCtrl.AStr bsp.: -26.5361 nach S7 real Format wandeln ±v.nnnnnnnE±xx
NonS7StrToRealStr(InString:=KommCtrl.AStr);
Properties.CurPos.Z := STRING_TO_REAL(NonS7StrToRealStr.OutString);
AInt := FIND(in1:=KommCtrl.TempStr, in2:=',');
ALen := ALen - AInt;
KommCtrl.AStr := MID(in:=KommCtrl.TempStr, l:=AInt-1, p:=1); // CurPos.U aus KommCtrl.TempStr ausschneiden Bsp.: 68.8883
KommCtrl.TempStr := MID(in:=KommCtrl.TempStr, l:=ALen, p:=AInt+1);
// KommCtrl.TempStr Bsp.: 1,0,0,0,221.613,-38.1282,-26.5361,-210.406,1
// KommCtrl.AStr bsp.: 26.9209 nach S7 real Format wandeln ±v.nnnnnnnE±xx
NonS7StrToRealStr(InString:=KommCtrl.AStr);
Properties.CurPos.U := STRING_TO_REAL(NonS7StrToRealStr.OutString);
AInt := FIND(in1:=KommCtrl.TempStr, in2:=',');
ALen := ALen - AInt;
KommCtrl.AStr := MID(in:=KommCtrl.TempStr, l:=AInt-1, p:=1); // Merker aus KommCtrl.TempStr ausschneiden Bsp.: 99
KommCtrl.TempStr := MID(in:=KommCtrl.TempStr, l:=ALen, p:=AInt+1);
// KommCtrl.TempStr Bsp.: 0,0,0,221.613,-38.1282,-26.5361,-210.406,1
// KommCtrl.AStr bsp.: 1 nach Bool
AWordForBool := INT_TO_WORD(STRING_TO_INT(KommCtrl.AStr));
FOR i:=1 TO 8 DO // Merker 1-8
Properties.Merker[i] := AWordBoolArray[i+7];
END_FOR;
AInt := FIND(in1:=KommCtrl.TempStr, in2:=',');
ALen := ALen - AInt;
KommCtrl.AStr := MID(in:=KommCtrl.TempStr, l:=AInt-1, p:=1); // HandLefty aus KommCtrl.TempStr ausschneiden Bsp.: 1
KommCtrl.TempStr := MID(in:=KommCtrl.TempStr, l:=ALen, p:=AInt+1);
// KommCtrl.TempStr Bsp.: 0,0,221.613,-38.1282,-26.5361,-210.406,1
// KommCtrl.AStr bsp.: 1 nach Bool
IF STRING_TO_CHAR(KommCtrl.AStr) = '1' THEN
Properties.CurPos.HandLefty := True;
ELSE
Properties.CurPos.HandLefty := False;
END_IF;
AInt := FIND(in1:=KommCtrl.TempStr, in2:=',');
ALen := ALen - AInt;
KommCtrl.AStr := MID(in:=KommCtrl.TempStr, l:=AInt-1, p:=1); // J1Flag aus KommCtrl.TempStr ausschneiden Bsp.: 1
KommCtrl.TempStr := MID(in:=KommCtrl.TempStr, l:=ALen, p:=AInt+1);
// KommCtrl.TempStr Bsp.: 0,221.613,-38.1282,-26.5361,-210.406,1
// KommCtrl.AStr bsp.: 1 nach Bool
IF STRING_TO_CHAR(KommCtrl.AStr) = '1' THEN
Properties.CurPos.J1Flag := True;
ELSE
Properties.CurPos.J1Flag := False;
END_IF;
AInt := FIND(in1:=KommCtrl.TempStr, in2:=',');
ALen := ALen - AInt;
KommCtrl.AStr := MID(in:=KommCtrl.TempStr, l:=AInt-1, p:=1); // J2Flag aus KommCtrl.TempStr ausschneiden Bsp.: 1
KommCtrl.TempStr := MID(in:=KommCtrl.TempStr, l:=ALen, p:=AInt+1);
// KommCtrl.TempStr Bsp.: 221.613,-38.1282,-26.5361,-210.406,1
// KommCtrl.AStr bsp.: 1 nach Bool
IF STRING_TO_CHAR(KommCtrl.AStr) = '1' THEN
Properties.CurPos.J2Flag := True;
ELSE
Properties.CurPos.J2Flag := False;
END_IF;
AInt := FIND(in1:=KommCtrl.TempStr, in2:=',');
ALen := ALen - AInt;
KommCtrl.AStr := MID(in:=KommCtrl.TempStr, l:=AInt-1, p:=1); // CurPosW.J1 aus KommCtrl.TempStr ausschneiden Bsp.: 68.8883
KommCtrl.TempStr := MID(in:=KommCtrl.TempStr, l:=ALen, p:=AInt+1);
// KommCtrl.TempStr Bsp.: -38.1282,-26.5361,-210.406,1
// KommCtrl.AStr bsp.: 221.613 nach S7 real Format wandeln ±v.nnnnnnnE±xx
NonS7StrToRealStr(InString:=KommCtrl.AStr);
Properties.CurPosW.J1 := STRING_TO_REAL(NonS7StrToRealStr.OutString);
AInt := FIND(in1:=KommCtrl.TempStr, in2:=',');
ALen := ALen - AInt;
KommCtrl.AStr := MID(in:=KommCtrl.TempStr, l:=AInt-1, p:=1); // CurPosW.J2 aus KommCtrl.TempStr ausschneiden Bsp.: 68.8883
KommCtrl.TempStr := MID(in:=KommCtrl.TempStr, l:=ALen, p:=AInt+1);
// KommCtrl.TempStr Bsp.: -26.5361,-210.406,1
// KommCtrl.AStr bsp.: -38.1282 nach S7 real Format wandeln ±v.nnnnnnnE±xx
NonS7StrToRealStr(InString:=KommCtrl.AStr);
Properties.CurPosW.J2 := STRING_TO_REAL(NonS7StrToRealStr.OutString);
AInt := FIND(in1:=KommCtrl.TempStr, in2:=',');
ALen := ALen - AInt;
KommCtrl.AStr := MID(in:=KommCtrl.TempStr, l:=AInt-1, p:=1); // CurPosW.J3 aus KommCtrl.TempStr ausschneiden Bsp.: 68.8883
KommCtrl.TempStr := MID(in:=KommCtrl.TempStr, l:=ALen, p:=AInt+1);
// KommCtrl.TempStr Bsp.: -210.406,1
// KommCtrl.AStr bsp.: -26.5361 nach S7 real Format wandeln ±v.nnnnnnnE±xx
NonS7StrToRealStr(InString:=KommCtrl.AStr);
Properties.CurPosW.J3 := STRING_TO_REAL(NonS7StrToRealStr.OutString);
AInt := FIND(in1:=KommCtrl.TempStr, in2:=',');
ALen := ALen - AInt;
KommCtrl.AStr := MID(in:=KommCtrl.TempStr, l:=AInt-1, p:=1); // CurPosW.J4 aus KommCtrl.TempStr ausschneiden Bsp.: 68.8883
KommCtrl.TempStr := MID(in:=KommCtrl.TempStr, l:=ALen, p:=AInt+1);
// KommCtrl.TempStr Bsp.: 1
// KommCtrl.AStr bsp.: -210.406 nach S7 real Format wandeln ±v.nnnnnnnE±xx
NonS7StrToRealStr(InString:=KommCtrl.AStr);
Properties.CurPosW.J4 := STRING_TO_REAL(NonS7StrToRealStr.OutString);
// Letztes Zeichen, hier kein Komma mehr
KommCtrl.AStr := MID(in:=KommCtrl.TempStr, l:=1, p:=1); // InPos aus KommCtrl.TempStr ausschneiden Bsp.: 1
// KommCtrl.AStr bsp.: 1 nach Bool
IF STRING_TO_CHAR(KommCtrl.AStr) = '1' THEN
Properties.Status.InPos := True;
ELSE
Properties.Status.InPos := False;
END_IF;
Properties.Step := 100;
END_IF;
100://Schrittkette beenden
Properties.Step := 0;
Properties.IsError := False;
Properties.ErrorID := 0;
END_CASE;