Added hot and cold plates
- Started spinner chuck io's
This commit is contained in:
147
PLC/01_Stationen/HeatCoolPlates/FB_CoolPlate.TcPOU
Normal file
147
PLC/01_Stationen/HeatCoolPlates/FB_CoolPlate.TcPOU
Normal file
@@ -0,0 +1,147 @@
|
||||
<?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
|
||||
// Card inputs
|
||||
_stStatus AT %I* : ST_SerialStatus;
|
||||
_byDataIn AT %I* : ARRAY[0..21] OF BYTE;
|
||||
|
||||
// Card outputs
|
||||
_stCtrl AT %Q* : ST_SerialCrl;
|
||||
_byDataOut AT %Q* : ARRAY[0..21] OF BYTE;
|
||||
|
||||
// Internal temp setpoint
|
||||
_rTempSetpoint : REAL;
|
||||
|
||||
// Send trigger
|
||||
_xSend : BOOL;
|
||||
|
||||
// Send temp test
|
||||
_xTempTest : BOOL;
|
||||
|
||||
// Init trigger
|
||||
_xInit : BOOL;
|
||||
END_VAR
|
||||
]]></Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[// Clamp temperature settings
|
||||
_rTempSetpoint := rTempSetpoint;
|
||||
|
||||
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
|
||||
|
||||
// Debug test
|
||||
IF _xTempTest THEN
|
||||
_xTempTest := FALSE;
|
||||
M_SetTemp(rTemp := _rTempSetpoint);
|
||||
_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[// Calculate sum
|
||||
FOR _uiCounter := uiStartIndex TO uiEndIndex DO
|
||||
_dwChecksum := _dwChecksum + _byDataOut[_uiCounter];
|
||||
END_FOR
|
||||
|
||||
// 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(4);
|
||||
|
||||
_byHigh : BYTE;
|
||||
_byLow : BYTE;
|
||||
_sHexString : STRING(4);
|
||||
|
||||
END_VAR
|
||||
]]></Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[// Convert temperature
|
||||
_dwTemp := REAL_TO_DWORD(rTemp * 10)*10;
|
||||
_sTemp := DWORD_TO_STRING(_dwTemp);
|
||||
|
||||
_byDataOut[0] := 16#02; // STX
|
||||
_byDataOut[1] := 16#31; // Command code
|
||||
_byDataOut[2] := _sTemp[0];
|
||||
_byDataOut[3] := _sTemp[1];
|
||||
_byDataOut[4] := _sTemp[2];
|
||||
_byDataOut[5] := _sTemp[3];
|
||||
_byDataOut[6] := 16#03; // ETX
|
||||
|
||||
M_CalcChecksum(
|
||||
uiStartIndex:= 1,
|
||||
uiEndIndex:= 5,
|
||||
byHigh=> _byDataOut[7],
|
||||
byLow=> _byDataOut[8]);
|
||||
|
||||
_byDataOut[9] := 16#0D; // <CR>
|
||||
|
||||
_stCtrl.byOutputLength := 10;]]></ST>
|
||||
</Implementation>
|
||||
</Method>
|
||||
</POU>
|
||||
</TcPlcObject>
|
||||
31
PLC/01_Stationen/HeatCoolPlates/FB_HeatCoolPlates.TcPOU
Normal file
31
PLC/01_Stationen/HeatCoolPlates/FB_HeatCoolPlates.TcPOU
Normal file
@@ -0,0 +1,31 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TcPlcObject Version="1.1.0.1">
|
||||
<POU Name="FB_HeatCoolPlates" Id="{a2be063c-19d7-4ca2-8121-529d61cc7bc2}" SpecialFunc="None">
|
||||
<Declaration><![CDATA[FUNCTION_BLOCK FB_HeatCoolPlates
|
||||
VAR_INPUT
|
||||
xConfirmAlarms : BOOL;
|
||||
END_VAR
|
||||
VAR_OUTPUT
|
||||
END_VAR
|
||||
VAR
|
||||
_fbHeatingPlate : FB_HotPlate;
|
||||
|
||||
_xEnableHotplate : BOOL;
|
||||
_rTargetTemp : REAL := 30.0;
|
||||
|
||||
// Cool plate
|
||||
_fbCoolPlate : FB_CoolPlate;
|
||||
END_VAR
|
||||
]]></Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[_fbHeatingPlate(
|
||||
xEnable:= _xEnableHotplate,
|
||||
rTargetTemp:= _rTargetTemp,
|
||||
xConfirmAlarms:= xConfirmAlarms,
|
||||
uiNextFreeSlot=> ,
|
||||
uiNextReadySlot=> );
|
||||
|
||||
_fbCoolPlate();]]></ST>
|
||||
</Implementation>
|
||||
</POU>
|
||||
</TcPlcObject>
|
||||
72
PLC/01_Stationen/HeatCoolPlates/FB_HotPlate.TcPOU
Normal file
72
PLC/01_Stationen/HeatCoolPlates/FB_HotPlate.TcPOU
Normal file
@@ -0,0 +1,72 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TcPlcObject Version="1.1.0.1">
|
||||
<POU Name="FB_HotPlate" Id="{317a2373-f886-4e32-b683-81b726d00aac}" SpecialFunc="None">
|
||||
<Declaration><![CDATA[FUNCTION_BLOCK FB_HotPlate
|
||||
VAR_INPUT
|
||||
xEnable : BOOL;
|
||||
rTargetTemp : REAL;
|
||||
rDeadBand : REAL := 5.0;
|
||||
|
||||
xConfirmAlarms : BOOL;
|
||||
END_VAR
|
||||
VAR_OUTPUT
|
||||
uiNextFreeSlot : UINT;
|
||||
uiNextReadySlot : UINT;
|
||||
END_VAR
|
||||
VAR
|
||||
_xEnableHotplate AT %Q* : BOOL;
|
||||
|
||||
_axSlotFree : ARRAY [0..(GVL_HeatCoolConfig.HEAT_COOL_PLATES_NUM_SLOTS - 1)] OF BOOL;
|
||||
_tonSlotTimer : ARRAY[0..(GVL_HeatCoolConfig.HEAT_COOL_PLATES_NUM_SLOTS - 1)] OF TON;
|
||||
|
||||
// Temp sensor
|
||||
_fbTempSensor : FB_AnalogInput('Temp sensor');
|
||||
_stTempSensorConfig : ST_ANALOG_IO_CONFIG := (sUnit := '°C', rPVMin := -200, rPVMax := 850, iAIMin := -2000, iAIMax := 8500);
|
||||
_stTempSEnsorEWConfig : ST_ANALOG_EW_CONFIG := (
|
||||
stLevels := (
|
||||
rErrorMin := -2000,
|
||||
rErrorMax := 8500,
|
||||
rWarningMin := -1000,
|
||||
rWarningMax := 7500),
|
||||
stDelays := (
|
||||
timErrorHighOn := T#1S,
|
||||
timErrorLowOn := T#1S,
|
||||
timWarningHighOn := T#1S,
|
||||
timWarningLowOn := T#1S,
|
||||
timHardwareSignalLevelOff := T#1S));
|
||||
|
||||
END_VAR
|
||||
]]></Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[// Call sensor fbs
|
||||
_fbTempSensor(
|
||||
stAnalogIOConfig:= _stTempSensorConfig,
|
||||
stAnalogEWConfig:= _stTempSEnsorEWConfig,
|
||||
xReleaseErrors:= TRUE,
|
||||
xReleaseLimitErrors:= FALSE,
|
||||
xReleaseHardwareErrors:= TRUE,
|
||||
xConfirmAlarms:= xConfirmAlarms,
|
||||
stHMIInterface=> );
|
||||
|
||||
|
||||
// Control temperature with two point controller
|
||||
IF _fbTempSensor.rScaledValue < (rTargetTemp - rDeadBand) THEN
|
||||
_xEnableHotplate := TRUE;
|
||||
END_IF
|
||||
|
||||
IF _fbTempSensor.rScaledValue >= (rTargetTemp) THEN
|
||||
_xEnableHotplate := FALSE;
|
||||
END_IF
|
||||
]]></ST>
|
||||
</Implementation>
|
||||
<Method Name="M_AddItem" Id="{9707459a-6558-487c-b730-c9dc92d598ed}">
|
||||
<Declaration><![CDATA[METHOD M_AddItem
|
||||
VAR_INPUT
|
||||
END_VAR
|
||||
]]></Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[]]></ST>
|
||||
</Implementation>
|
||||
</Method>
|
||||
</POU>
|
||||
</TcPlcObject>
|
||||
9
PLC/01_Stationen/HeatCoolPlates/GVL_HeatCoolConfig.TcGVL
Normal file
9
PLC/01_Stationen/HeatCoolPlates/GVL_HeatCoolConfig.TcGVL
Normal file
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TcPlcObject Version="1.1.0.1">
|
||||
<GVL Name="GVL_HeatCoolConfig" Id="{865917de-a2fa-49b0-b682-05395fd01971}">
|
||||
<Declaration><![CDATA[{attribute 'qualified_only'}
|
||||
VAR_GLOBAL CONSTANT
|
||||
HEAT_COOL_PLATES_NUM_SLOTS : UINT := 9;
|
||||
END_VAR]]></Declaration>
|
||||
</GVL>
|
||||
</TcPlcObject>
|
||||
16
PLC/01_Stationen/HeatCoolPlates/ST_SerialCrl.TcDUT
Normal file
16
PLC/01_Stationen/HeatCoolPlates/ST_SerialCrl.TcDUT
Normal file
@@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TcPlcObject Version="1.1.0.1">
|
||||
<DUT Name="ST_SerialCrl" Id="{02e99166-5c76-4fb3-84cc-719c63e20136}">
|
||||
<Declaration><![CDATA[{attribute 'pack_mode' := '1'}
|
||||
TYPE ST_SerialCrl :
|
||||
STRUCT
|
||||
bTransmitRequest : BIT;
|
||||
bReceiveAccepted : BIT;
|
||||
bInitRequest : BIT;
|
||||
bSendContinues : BIT;
|
||||
byOutputLength : BYTE;
|
||||
END_STRUCT
|
||||
END_TYPE
|
||||
]]></Declaration>
|
||||
</DUT>
|
||||
</TcPlcObject>
|
||||
19
PLC/01_Stationen/HeatCoolPlates/ST_SerialStatus.TcDUT
Normal file
19
PLC/01_Stationen/HeatCoolPlates/ST_SerialStatus.TcDUT
Normal file
@@ -0,0 +1,19 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TcPlcObject Version="1.1.0.1">
|
||||
<DUT Name="ST_SerialStatus" Id="{e37399e0-7acb-4d91-826f-26258cabab1c}">
|
||||
<Declaration><![CDATA[{attribute 'pack_mode' := '1'}
|
||||
TYPE ST_SerialStatus :
|
||||
STRUCT
|
||||
bTransmitAccepted : BIT;
|
||||
bReceiveRequested : BIT;
|
||||
bInitAccepted : BIT;
|
||||
bBufferFull : BIT;
|
||||
bParityError : BIT;
|
||||
bFramingError : BIT;
|
||||
bOverrunError : BIT;
|
||||
byInputLength : BYTE;
|
||||
END_STRUCT
|
||||
END_TYPE
|
||||
]]></Declaration>
|
||||
</DUT>
|
||||
</TcPlcObject>
|
||||
Reference in New Issue
Block a user