Added JobScheduler and recipe data for stations

This commit is contained in:
2026-02-24 18:28:00 +01:00
parent c4044be7bd
commit 46e294d991
33 changed files with 1454 additions and 2837 deletions

View File

@@ -0,0 +1,153 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1">
<POU Name="FB_Coolplate" Id="{629e3316-5d72-4e23-a03a-af14d37e58d6}" SpecialFunc="None">
<Declaration><![CDATA[FUNCTION_BLOCK FB_Coolplate
VAR_INPUT
rTempSetpoint : REAL := 25.0;
END_VAR
VAR_OUTPUT
END_VAR
VAR_IN_OUT
stHMIInterface : ST_HMI_Coolplate;
END_VAR
VAR
// Card inputs
stStatus AT %I* : ST_SerialStatus;
abyDataIn AT %I* : ARRAY[0..21] OF BYTE;
// Card outputs
stCtrl AT %Q* : ST_SerialCrl;
abyDataOut AT %Q* : ARRAY[0..21] OF BYTE;
_fbTempSensor : FB_AnalogInput('');
// Internal temp setpoint
_rTempSetpoint : REAL;
// Send trigger
_xSend : BOOL;
// Init trigger
_xInit : BOOL;
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[// Clamp temperature settings
// Currently only controlled throught hmi interface
_rTempSetpoint := stHMIInterface.stSetpoint.rValue;
IF _rTempSetpoint > 60.0 THEN
_rTempSetpoint := 60.0;
END_IF
IF _rTempSetpoint < 10.0 THEN
_rTempSetpoint := 10.0;
END_IF
// Init card on first run
IF _xInit THEN
_xInit := FALSE;
stCtrl.bInitRequest := 1;
END_IF
IF stStatus.bInitAccepted THEN
stCtrl.bInitRequest := 0;
END_IF
// Send
IF _xSend THEN
_xSend := FALSE;
stCtrl.bTransmitRequest := 1;
END_IF
IF stStatus.bTransmitAccepted THEN
stCtrl.bTransmitRequest := 0;
END_IF
IF stHMIInterface.stSetSetpointBtn.xRequest THEN
stHMIInterface.stSetSetpointBtn.xRequest := FALSE;
M_SetTemp(rTemp := stHMIInterface.stSetpoint.rValue);
_xSend := TRUE;
END_IF]]></ST>
</Implementation>
<Method Name="M_CalcChecksum" Id="{dc2c8dbc-8315-4281-befa-84b7f4e74dc9}">
<Declaration><![CDATA[METHOD M_CalcChecksum
VAR_INPUT
uiStartIndex : UINT;
uiEndIndex : UINT;
END_VAR
VAR_OUTPUT
byHigh : BYTE;
byLow : BYTE;
END_VAR
VAR
_dwChecksum : DWORD;
_uiCounter : UINT;
_byHigh : BYTE;
_byLow : BYTE;
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[// Check end index
IF uiEndIndex > 21 THEN
byHigh := 0;
byLow := 0;
RETURN;
END_IF
// Calculate sum
{analysis -81}
FOR _uiCounter := uiStartIndex TO uiEndIndex DO
_dwChecksum := _dwChecksum + abyDataOut[_uiCounter];
END_FOR
{analysis +81}
// Use lower bytes
_byHigh := SHR(_dwChecksum.%B0 AND 16#F0, 4);
_byLow := _dwChecksum.%B0 AND 16#0F;
// Add offset
_byHigh := _byHigh + 16#30;
_byLow := _byLow + 16#30;
byHigh := _byHigh;
byLow := _byLow;]]></ST>
</Implementation>
</Method>
<Method Name="M_SetTemp" Id="{e9f6069c-f4a0-47e4-9ef0-4fbbec8764d9}">
<Declaration><![CDATA[METHOD M_SetTemp
VAR_INPUT
rTemp : REAL;
END_VAR
VAR
_dwTemp : DWORD;
_sTemp : STRING;
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[// Convert temperature
_dwTemp := REAL_TO_DWORD(rTemp * 10 )*10;
_sTemp := DWORD_TO_STRING(_dwTemp);
abyDataOut[0] := 16#02; // STX
abyDataOut[1] := 16#31; // Command code
abyDataOut[2] := _sTemp[0];
abyDataOut[3] := _sTemp[1];
abyDataOut[4] := _sTemp[2];
abyDataOut[5] := _sTemp[3];
abyDataOut[6] := 16#03; // ETX
M_CalcChecksum(
uiStartIndex:= 1,
uiEndIndex:= 5,
byHigh=> abyDataOut[7],
byLow=> abyDataOut[8]);
abyDataOut[9] := 16#0D; // <CR>
stCtrl.byOutputLength := 10;]]></ST>
</Implementation>
</Method>
</POU>
</TcPlcObject>