490 lines
10 KiB
XML
490 lines
10 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.11">
|
|
<POU Name="SCHUSTER_FB" Id="{cddda422-ecf8-4686-8f76-3b74f720146f}" SpecialFunc="None">
|
|
<Declaration><![CDATA[FUNCTION_BLOCK SCHUSTER_FB EXTENDS Peripherie_FB
|
|
VAR_INPUT
|
|
NoComErrorIndex : INT;
|
|
|
|
sMessrate : USINT(0..4);
|
|
sRampe : USINT(0..5);
|
|
sVR,sVD : UDINT;
|
|
sIR,sID : LREAL;
|
|
|
|
R_Dir : BOOL;
|
|
|
|
|
|
bInStartRead : BOOL;
|
|
bInReadParameter : BOOL;
|
|
|
|
HV_I : sHV_I;
|
|
END_VAR
|
|
|
|
VAR_OUTPUT
|
|
gMessrate : USINT(0..4);
|
|
gRampe : USINT(0..5);
|
|
gVR,gVD : UDINT;
|
|
gIR,gID : LREAL;
|
|
|
|
|
|
|
|
|
|
ServiceScaleEndV : LREAL;
|
|
ServiceScaleMainV : LREAL;
|
|
ServiceSubscaleV : LREAL;
|
|
|
|
ServiceScaleEndI : LREAL;
|
|
ServiceScaleMainI : LREAL;
|
|
ServiceSubscaleI : LREAL;
|
|
END_VAR
|
|
|
|
VAR
|
|
Com : TCPClient_FB;
|
|
FindPosition : INT;
|
|
ReceiveMessage : T_MaxString;
|
|
ComTimeDelay : TON;
|
|
|
|
EmptyTrend : ARRAY[0..50] OF LREAL;
|
|
|
|
OldSendMessage : T_MaxString;
|
|
|
|
CMD_LOGGER : CMD_LOGGER_FB;
|
|
END_VAR
|
|
|
|
VAR CONSTANT
|
|
NewLine : STRING := '#';
|
|
END_VAR
|
|
]]></Declaration>
|
|
<Implementation>
|
|
<ST><![CDATA[CMD_LOGGER();
|
|
Com();
|
|
ErrorHandling();
|
|
|
|
ComTimeDelay(IN := InAktorspannung, PT := T#3S);
|
|
AlarmSend(iStation, NoComErrorIndex, FALSE, eReportType.Warning, sAvailableResponse.NoResponse, Com.bOutConnected OR NOT ComTimeDelay.Q);
|
|
|
|
FindPosition := Find(Com.ReceiveMessage, NewLine);
|
|
IF FindPosition > 0 THEN
|
|
ReceiveMessage := Left(Com.ReceiveMessage, FindPosition);
|
|
Com.ReceiveMessage := DELETE(Com.ReceiveMessage, FindPosition,1);
|
|
JMP Lable1;
|
|
END_IF
|
|
|
|
Lable1:
|
|
IF FIND(ReceiveMessage, SCHUSTER_LOG[0]) = 0 AND ReceiveMessage <> '' THEN
|
|
MEMMOVE(ADR(SCHUSTER_LOG[1]), ADR(SCHUSTER_LOG[0]), SIZEOF(SCHUSTER_LOG)- SIZEOF(SCHUSTER_LOG[0]));
|
|
SCHUSTER_LOG[0] := ReceiveMessage;
|
|
END_IF
|
|
|
|
FindPosition := find(SCHUSTER_LOG[0], NewLine);
|
|
IF FindPosition > 0 AND SCHUSTER_LOG[0] <> NewLine THEN
|
|
SCHUSTER_LOG[0] := LEFT(SCHUSTER_LOG[0], FindPosition-1);
|
|
END_IF
|
|
|
|
IF OldSendMessage <> Com.SendMessage THEN
|
|
OldSendMessage := Com.SendMessage;
|
|
|
|
ReceiveMessage := '';
|
|
|
|
MEMMOVE(ADR(SCHUSTER_LOG[1]), ADR(SCHUSTER_LOG[0]), SIZEOF(SCHUSTER_LOG)- SIZEOF(SCHUSTER_LOG[0]));
|
|
SCHUSTER_LOG[0] := Com.SendMessage;
|
|
END_IF
|
|
|
|
IF bInStartRead THEN
|
|
StartRead(iStation);
|
|
END_IF
|
|
|
|
IF bInReadParameter THEN
|
|
ReadParameter();
|
|
END_IF
|
|
|
|
ReadInput();
|
|
Visu();]]></ST>
|
|
</Implementation>
|
|
<Method Name="CheckResult" Id="{fad758aa-eb3d-402d-9488-b2bd7f865c09}">
|
|
<Declaration><![CDATA[METHOD CheckResult : BOOL
|
|
VAR_INPUT
|
|
V_Limit : LREAL;
|
|
I_Limit : LREAL;
|
|
END_VAR
|
|
VAR_OUTPUT
|
|
ResultNotOk : BOOL;
|
|
END_VAR
|
|
VAR
|
|
i : INT;
|
|
END_VAR]]></Declaration>
|
|
<Implementation>
|
|
<ST><![CDATA[FOR i := 0 TO 50 DO
|
|
IF SCHUSTER_TrendV[i] = 0 AND SCHUSTER_TrendI[i] = 0 THEN
|
|
EXIT;
|
|
ELSE
|
|
IF SCHUSTER_TrendV[i] <= V_Limit THEN
|
|
IF SCHUSTER_TrendI[i] > I_Limit THEN
|
|
ResultNotOk := TRUE;
|
|
CheckResult := TRUE;
|
|
RETURN;
|
|
END_IF
|
|
END_IF
|
|
END_IF
|
|
END_FOR
|
|
|
|
|
|
|
|
FOR i := 0 TO 50 DO
|
|
IF SCHUSTER_TrendV[i] = 0 AND SCHUSTER_TrendI[i] = 0 THEN
|
|
ResultNotOk := TRUE;
|
|
CheckResult := TRUE;
|
|
RETURN;
|
|
ELSE
|
|
IF SCHUSTER_TrendV[i] >= V_Limit THEN
|
|
IF SCHUSTER_TrendI[i] > I_Limit THEN
|
|
CheckResult := TRUE;
|
|
RETURN;
|
|
END_IF
|
|
END_IF
|
|
END_IF
|
|
END_FOR ]]></ST>
|
|
</Implementation>
|
|
</Method>
|
|
<Method Name="Initialization" Id="{0ecf030c-5efd-4f3e-91a9-2462c2abfca7}">
|
|
<Declaration><![CDATA[METHOD Initialization
|
|
VAR_INPUT
|
|
iStation : INT;
|
|
IPAdress : STRING;
|
|
Port : UDINT;
|
|
END_VAR
|
|
]]></Declaration>
|
|
<Implementation>
|
|
<ST><![CDATA[PeripherieInitialization(iStation);
|
|
|
|
|
|
//Com.NewLine := NewLine;
|
|
Com.IPAdress := IPAdress;//'192.168.9.101';
|
|
Com.Port := Port;//23;
|
|
|
|
|
|
CMD_LOGGER.LogPath := 'D:\Obducat\LOG_CMD\SCHUSTER\';
|
|
CMD_LOGGER.LogString REF= SCHUSTER_LOG[0];]]></ST>
|
|
</Implementation>
|
|
</Method>
|
|
<Method Name="ReadInput" Id="{37422f72-7bc5-40a0-8871-634ac1a23a3f}">
|
|
<Declaration><![CDATA[METHOD ReadInput : BOOL
|
|
VAR_INPUT
|
|
END_VAR
|
|
VAR_INST
|
|
TempString : STRING;
|
|
|
|
Index : INT;
|
|
|
|
TempPos : INT;
|
|
|
|
TempText : STRING;
|
|
|
|
OldIndex : UINT;
|
|
END_VAR
|
|
]]></Declaration>
|
|
<Implementation>
|
|
<ST><![CDATA[IF FIND(ReceiveMessage, 'I;') > 0 THEN
|
|
TempString := ReceiveMessage;
|
|
TempString := DELETE(TempString, 2, 1);
|
|
|
|
FOR index := 1 TO 9 DO
|
|
TempPos := Find(TempString, ',');
|
|
TempText := Left(TempString, TempPos -1);
|
|
TempString := DELETE(TempString, TempPos, 1);
|
|
CASE index OF
|
|
1:
|
|
HV_I.Index := STRING_TO_UINT(TempText);
|
|
2:
|
|
HV_I.Ereignis := STRING_TO_USINT(TempText);
|
|
IF HV_I.Ereignis <> 2 THEN
|
|
EXIT;
|
|
END_IF
|
|
3:
|
|
HV_I.Betriebsart := STRING_TO_USINT(TempText);
|
|
4:
|
|
HV_I.Messrate := STRING_TO_USINT(TempText);
|
|
5:
|
|
HV_I.Rampe := STRING_TO_USINT(TempText);
|
|
6:
|
|
HV_I.Spannungsgrenzwert := STRING_TO_UDINT(TempText);
|
|
7:
|
|
HV_I.Stromgrenzwert := STRING_TO_LREAL(TempText)/100;
|
|
8:
|
|
HV_I.Spannungsmesswert := STRING_TO_UDINT(TempText);
|
|
9:
|
|
HV_I.Strommesswert := STRING_TO_LREAL(TempText)/100;
|
|
END_CASE
|
|
END_FOR
|
|
END_IF
|
|
|
|
IF HV_I.Index <> OldIndex THEN
|
|
OldIndex := HV_I.Index;
|
|
|
|
MEMMOVE(ADR(SCHUSTER_TrendV[1]), ADR(SCHUSTER_TrendV) ,SIZEOF(LREAL)*50);
|
|
SCHUSTER_TrendV[0] := HV_I.Spannungsmesswert;
|
|
|
|
MEMMOVE(ADR(SCHUSTER_TrendI[1]), ADR(SCHUSTER_TrendI) ,SIZEOF(LREAL)*50);
|
|
SCHUSTER_TrendI[0] := HV_I.Strommesswert;
|
|
END_IF]]></ST>
|
|
</Implementation>
|
|
</Method>
|
|
<Method Name="ReadParameter" Id="{08e53c57-2972-4317-a66f-d29bb4f6f31f}">
|
|
<Declaration><![CDATA[METHOD ReadParameter : BOOL
|
|
VAR_INST
|
|
Step : INT;
|
|
TempString : STRING;
|
|
|
|
Index : INT;
|
|
TempPos : INT;
|
|
TempText : STRING;
|
|
END_VAR]]></Declaration>
|
|
<Implementation>
|
|
<ST><![CDATA[CASE Step OF
|
|
0:
|
|
Com.SendMessage := 'G;';
|
|
DelayTimer(IN := FALSE);
|
|
Step := 10;
|
|
10:
|
|
DelayTimer(IN := TRUE, PT := T#1S);
|
|
IF DelayTimer.Q THEN
|
|
Step := 0;
|
|
END_IF
|
|
IF find(ReceiveMessage, 'G;') > 0 THEN
|
|
TempString := ReceiveMessage;
|
|
TempString := DELETE(TempString, 2, 1);
|
|
|
|
|
|
FOR index := 1 TO 6 DO
|
|
TempPos := Find(TempString, ',');
|
|
TempText := Left(TempString, TempPos -1);
|
|
TempString := DELETE(TempString, TempPos, 1);
|
|
CASE index OF
|
|
1:
|
|
gMessrate := STRING_TO_USINT(TempText);
|
|
sMessrate := gMessrate;
|
|
2:
|
|
gRampe := STRING_TO_USINT(TempText);
|
|
sRampe := gRampe;
|
|
3:
|
|
gVR := STRING_TO_UDINT(TempText);
|
|
sVR := gVR;
|
|
4:
|
|
gIR := STRING_TO_LREAL(TempText)/100;
|
|
sIR := gIR;
|
|
5:
|
|
gVD := STRING_TO_UDINT(TempText);
|
|
sVD := gVD;
|
|
6:
|
|
gID := STRING_TO_LREAL(TempText)/100;
|
|
sID := gID;
|
|
END_CASE
|
|
END_FOR
|
|
Step := 20;
|
|
END_IF
|
|
20:
|
|
bInReadParameter := FALSE;
|
|
ReadParameter := TRUE;
|
|
Step := 0;
|
|
END_CASE]]></ST>
|
|
</Implementation>
|
|
</Method>
|
|
<Method Name="Restart" Id="{82bc2d8c-ea80-4015-b886-94d45e64698e}">
|
|
<Declaration><![CDATA[METHOD Restart : BOOL
|
|
VAR_INPUT
|
|
END_VAR
|
|
]]></Declaration>
|
|
<Implementation>
|
|
<ST><![CDATA[Com.SendMessage := 'R;';]]></ST>
|
|
</Implementation>
|
|
</Method>
|
|
<Method Name="SendParameter" Id="{6ce2a076-63f2-489c-9ec5-c12455c9ddd0}">
|
|
<Declaration><![CDATA[METHOD SendParameter : BOOL
|
|
VAR_INPUT
|
|
END_VAR
|
|
VAR_INST
|
|
Step : INT;
|
|
fbFormat : FB_FormatString;
|
|
format : STRING;
|
|
|
|
TempIR, TempID : UDINT;
|
|
|
|
|
|
TempMessrate : USINT;
|
|
TempRampe : USINT;
|
|
END_VAR]]></Declaration>
|
|
<Implementation>
|
|
<ST><![CDATA[TempIR := LREAL_TO_UDINT(sIR * 100);
|
|
TempID := LREAL_TO_UDINT(sID * 100);
|
|
|
|
TempMessrate := sMessrate;
|
|
TempRampe := sRampe;
|
|
format := 'P%d,%d,%d,%d,%d,%d;';
|
|
|
|
fbFormat(
|
|
sFormat:=format,
|
|
arg1:= F_USINT (TempMessrate),
|
|
arg2:= F_USINT (TempRampe),
|
|
arg3:= F_UDINT (sVR),
|
|
arg4:= F_UDINT (TempIR),
|
|
arg5:= F_UDINT (sVD),
|
|
arg6:= F_UDINT (TempID),
|
|
sOut=> Com.SendMessage
|
|
);]]></ST>
|
|
</Implementation>
|
|
</Method>
|
|
<Method Name="StartRead" Id="{7f26b1da-4d0e-453a-b6c2-a320f4947df5}">
|
|
<Declaration><![CDATA[METHOD StartRead : BOOL
|
|
VAR_INPUT
|
|
iStation : INT;
|
|
END_VAR
|
|
|
|
VAR_INST
|
|
Step : INT;
|
|
END_VAR]]></Declaration>
|
|
<Implementation>
|
|
<ST><![CDATA[CASE Step OF
|
|
0:
|
|
SCHUSTER_TrendV := EmptyTrend;
|
|
SCHUSTER_TrendI := EmptyTrend;
|
|
|
|
CASE iStation OF
|
|
FirstHV:
|
|
Com.SendMessage := 'M0;';
|
|
LastHV:
|
|
Com.SendMessage := 'M1;';
|
|
END_CASE
|
|
DelayTimer(IN := FALSE);
|
|
Step := Step +1;
|
|
1:
|
|
DelayTimer(IN := TRUE, PT :=T#1S);
|
|
IF DelayTimer.Q THEN
|
|
Step := 0;
|
|
END_IF
|
|
|
|
CASE iStation OF
|
|
FirstHV:
|
|
IF find(ReceiveMessage , 'M0;') > 0 THEN
|
|
Step := 10;
|
|
END_IF
|
|
LastHV:
|
|
IF find(ReceiveMessage , 'M1;') > 0 THEN
|
|
Step := 10;
|
|
END_IF
|
|
END_CASE
|
|
10:
|
|
Com.SendMessage := 'K1;';
|
|
DelayTimer(IN := FALSE);
|
|
Step := Step +1;
|
|
11:
|
|
DelayTimer(IN := TRUE, PT :=T#1S);
|
|
IF DelayTimer.Q THEN
|
|
Step := 10;
|
|
END_IF
|
|
|
|
IF find(ReceiveMessage, 'K1;') > 0 THEN
|
|
Step := 20;
|
|
END_IF
|
|
20:
|
|
Com.SendMessage := SEL(R_Dir, 'S0;', 'S1;');
|
|
HV_I.Ereignis := 0;
|
|
Step := 30;
|
|
30:
|
|
CASE HV_I.Ereignis OF
|
|
3:
|
|
bInStartRead := FALSE;
|
|
StartRead := TRUE;
|
|
Step := 0;
|
|
END_CASE
|
|
END_CASE]]></ST>
|
|
</Implementation>
|
|
</Method>
|
|
<Method Name="StopMeasurement" Id="{be5ae5a7-adbe-401f-b0ee-ae9bb2238c54}">
|
|
<Declaration><![CDATA[METHOD StopMeasurement : BOOL
|
|
VAR_INPUT
|
|
END_VAR
|
|
]]></Declaration>
|
|
<Implementation>
|
|
<ST><![CDATA[Com.SendMessage := 'A;';]]></ST>
|
|
</Implementation>
|
|
</Method>
|
|
<Method Name="Visu" Id="{5a877f71-418f-4c4b-9a90-b5668f09db71}">
|
|
<Declaration><![CDATA[METHOD Visu : BOOL
|
|
VAR
|
|
i : INT;
|
|
|
|
BiggerV : UDINT;
|
|
BiggerI : UDINT;
|
|
|
|
EndV : LREAL;
|
|
EndI : LREAL;
|
|
END_VAR
|
|
]]></Declaration>
|
|
<Implementation>
|
|
<ST><![CDATA[IF sVR > sVD THEN
|
|
BiggerV := sVR;
|
|
ELSE
|
|
BiggerV := sVD;
|
|
END_IF
|
|
|
|
CASE BiggerV OF
|
|
0..80:
|
|
EndV := 100;
|
|
81..180:
|
|
EndV := 200;
|
|
181..480:
|
|
EndV := 500;
|
|
481..980:
|
|
EndV := 1000;
|
|
981..1980:
|
|
EndV := 2000;
|
|
1981..4980:
|
|
EndV := 5000;
|
|
4981..9980:
|
|
EndV := 10000;
|
|
9981..19980:
|
|
EndV := 20000;
|
|
19981..49980:
|
|
EndV := 50000;
|
|
49981..99980:
|
|
EndV := 100000;
|
|
ELSE
|
|
EndV := 200000;
|
|
END_CASE
|
|
|
|
|
|
ServiceScaleEndV := EndV;
|
|
ServiceScaleMainV := EndV /4;
|
|
ServiceSubscaleV := EndV /20;
|
|
|
|
|
|
IF sIR > sID THEN
|
|
BiggerI := LREAL_TO_UDINT(sIR);
|
|
ELSE
|
|
BiggerI := LREAL_TO_UDINT(sID);
|
|
END_IF
|
|
|
|
CASE BiggerI OF
|
|
0..19:
|
|
EndI := 20;
|
|
20..39:
|
|
EndI := 40;
|
|
40..79:
|
|
EndI := 80;
|
|
80..99:
|
|
EndI := 100;
|
|
100..119:
|
|
EndI := 120;
|
|
120..159:
|
|
EndI := 160;
|
|
ELSE
|
|
EndI := 200;
|
|
END_CASE
|
|
|
|
ServiceScaleEndI := EndI;
|
|
ServiceScaleMainI := EndI /4;
|
|
ServiceSubscaleI := EndI /20;
|
|
]]></ST>
|
|
</Implementation>
|
|
</Method>
|
|
</POU>
|
|
</TcPlcObject> |