Initial
This commit is contained in:
490
PLC/4 HV/Schuster/SCHUSTER_FB.TcPOU
Normal file
490
PLC/4 HV/Schuster/SCHUSTER_FB.TcPOU
Normal file
@@ -0,0 +1,490 @@
|
||||
<?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>
|
||||
Reference in New Issue
Block a user