This commit is contained in:
2026-01-08 11:08:17 +01:00
commit fe882dc444
311 changed files with 511562 additions and 0 deletions

View 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>