Merge pull request #6 from EuropeanSpallationSource/federicor/progs-for-pneumtaics

Federicor/progs for pneumtaics
This commit is contained in:
Federico Rojas G
2025-04-23 13:56:32 +02:00
committed by GitHub
12 changed files with 224 additions and 304 deletions
+27 -1
View File
@@ -1,11 +1,19 @@
<?xml version="1.0"?>
<TcSmItem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.beckhoff.com/schemas/2012/07/TcSmProject" TcSmVersion="1.0" TcVersion="3.1.4024.62" ClassName="CNestedPlcProjDef">
<Project GUID="{FB261665-FD20-4BF2-97F8-2854C82B752D}" Name="tc_project_app" PrjFilePath="..\..\tc_project_app\tc_project_app.plcproj" TmcFilePath="..\..\tc_project_app\tc_project_app.tmc" ReloadTmc="true" AmsPort="852" FileArchiveSettings="#x000e" ClearInvalidPersist="true" SymbolicMapping="true">
<Instance Id="#x08502040" TcSmClass="TComPlcObjDef" KeepUnrestoredLinks="2" TmcPath="tc_project_app\tc_project_app.tmc" TmcHash="{C4BD3855-3315-D1A6-F8E7-1C5E39A5801C}">
<Instance Id="#x08502040" TcSmClass="TComPlcObjDef" KeepUnrestoredLinks="2" TmcPath="tc_project_app\tc_project_app.tmc" TmcHash="{38EB9C89-F2EA-1F8B-A69A-A8444D140251}">
<Name>tc_project_app Instance</Name>
<CLSID ClassFactory="TcPlc30">{08500001-0000-0000-F000-000000000064}</CLSID>
<Vars VarGrpType="1">
<Name>PlcTask Inputs</Name>
<Var>
<Name>Safety_Shutter.bPSSPermit1</Name>
<Type>BOOL</Type>
</Var>
<Var>
<Name>Safety_Shutter.bPSSPermit2</Name>
<Type>BOOL</Type>
</Var>
<Var>
<Name>GVL.nAirPressureSensorGroup1</Name>
<Comment><![CDATA[Raw value from analog air pressure sensor for pneumatic axes group 1]]></Comment>
@@ -17,6 +25,24 @@
<Type>INT</Type>
</Var>
</Vars>
<Vars VarGrpType="2" AreaNo="1">
<Name>PlcTask Outputs</Name>
<Var>
<Name>Safety_Shutter.bPSSPermitPower</Name>
<Comment><![CDATA[Define all necessary variables for your application]]></Comment>
<Type>BOOL</Type>
</Var>
<Var>
<Name>Pneumatic_Box.bPowerLedAndLight</Name>
<Comment><![CDATA[Variable to power the green LED and the internal light]]></Comment>
<Type>BOOL</Type>
</Var>
<Var>
<Name>Pneumatic_Box.bPowerPressureSensors</Name>
<Comment><![CDATA[Variable to power the air pressure sensors in the pneuatmic box]]></Comment>
<Type>BOOL</Type>
</Var>
</Vars>
<Contexts>
<Context>
<Id>0</Id>
+5 -4
View File
@@ -12,10 +12,11 @@ VAR_GLOBAL CONSTANT
nPNEUMATIC_AXIS_NUM: UINT := 0; //Specifies the total number of pneumatic axes in the system
//Pneumatic air pressure groups high and low limits
fLOW_LIMIT_AIR_PRESSURE1: REAL := 0; //User defined value in bar for low limit air pressure value for pneumatic axes group 1
fHIGH_LIMIT_AIR_PRESSURE1: REAL := 0; //User defined value in bar for high limit air pressure value for pneumatic axes group 1
fLOW_LIMIT_AIR_PRESSURE2: REAL := 0; //User defined value in bar for low limit air pressure value for pneumatic axes group 2
fHIGH_LIMIT_AIR_PRESSURE2: REAL := 0; //User defined value in bar for high limit air pressure value for pneumatic axes group 2
tTIME_PRESSURE_OUT_OF_RANGE: TIME := T#10S; //User defined allowed time in seconds for the duration of air pressure value fluctuation
fLOW_LIMIT_AIR_PRESSURE1: REAL := 1; //User defined value in bar for low limit air pressure value for pneumatic axes group 1
fHIGH_LIMIT_AIR_PRESSURE1: REAL := 6; //User defined value in bar for high limit air pressure value for pneumatic axes group 1
fLOW_LIMIT_AIR_PRESSURE2: REAL := 1; //User defined value in bar for low limit air pressure value for pneumatic axes group 2
fHIGH_LIMIT_AIR_PRESSURE2: REAL := 6; //User defined value in bar for high limit air pressure value for pneumatic axes group 2
END_VAR
]]></Declaration>
</GVL>
+2 -222
View File
@@ -5,21 +5,6 @@
<Data>
<o xml:space="preserve" t="GlobalTextListObject">
<l n="TextList" t="ArrayList" cet="TextListRow">
<o>
<v n="TextID">"947"</v>
<v n="TextDefault">" LocalMode"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
<v n="TextID">"972"</v>
<v n="TextDefault">" bLocalMode"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
<v n="TextID">"587"</v>
<v n="TextDefault">"%1d"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
<v n="TextID">"951"</v>
<v n="TextDefault">"%2.2f"</v>
@@ -40,21 +25,11 @@
<v n="TextDefault">"%d"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
<v n="TextID">"39"</v>
<v n="TextDefault">"%n"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
<v n="TextID">"821"</v>
<v n="TextDefault">"%s"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
<v n="TextID">"916"</v>
<v n="TextDefault">"%time_t"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
<v n="TextID">"940"</v>
<v n="TextDefault">"%x"</v>
@@ -95,11 +70,6 @@
<v n="TextDefault">"bBwEnabled"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
<v n="TextID">"633"</v>
<v n="TextDefault">"bCoammandAborted"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
<v n="TextID">"225"</v>
<v n="TextDefault">"bCommandAborted"</v>
@@ -125,11 +95,6 @@
<v n="TextDefault">"bError"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
<v n="TextID">"102"</v>
<v n="TextDefault">"bExecute"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
<v n="TextID">"999"</v>
<v n="TextDefault">"bExtended"</v>
@@ -140,11 +105,6 @@
<v n="TextDefault">"bFwEnabled"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
<v n="TextID">"297"</v>
<v n="TextDefault">"bGeared"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
<v n="TextID">"902"</v>
<v n="TextDefault">"bHighTempAxisDisabled"</v>
@@ -155,11 +115,6 @@
<v n="TextDefault">"bHomed"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
<v n="TextID">"944"</v>
<v n="TextDefault">"bCommandAborted"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
<v n="TextID">"509"</v>
<v n="TextDefault">"bHWMaskActive"</v>
@@ -176,8 +131,8 @@
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
<v n="TextID">"541"</v>
<v n="TextDefault">"bInVeloit"</v>
<v n="TextID">"835"</v>
<v n="TextDefault">"bLocalMode"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
@@ -190,21 +145,11 @@
<v n="TextDefault">"bMovingExtend"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
<v n="TextID">"648"</v>
<v n="TextDefault">"bMovingExtract"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
<v n="TextID">"998"</v>
<v n="TextDefault">"bMovingRetract"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
<v n="TextID">"511"</v>
<v n="TextDefault">"bPermit"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
<v n="TextID">"963"</v>
<v n="TextDefault">"bPSSPermit"</v>
@@ -245,11 +190,6 @@
<v n="TextDefault">"disSoftLimFw"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
<v n="TextID">"986"</v>
<v n="TextDefault">"ehomeDirect"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
<v n="TextID">"350"</v>
<v n="TextDefault">"eHomeDirect"</v>
@@ -305,11 +245,6 @@
<v n="TextDefault">"eHomeToRef_Fwd"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
<v n="TextID">"313"</v>
<v n="TextDefault">"Elapsed time"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
<v n="TextID">"87"</v>
<v n="TextDefault">"Elapsed time (ms)"</v>
@@ -320,16 +255,6 @@
<v n="TextDefault">"ENABLE"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
<v n="TextID">"106"</v>
<v n="TextDefault">"ENABLE BW"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
<v n="TextID">"105"</v>
<v n="TextDefault">"ENABLE FW"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
<v n="TextID">"1009"</v>
<v n="TextDefault">"End switches simulation"</v>
@@ -345,11 +270,6 @@
<v n="TextDefault">"EndSwitchFwd"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
<v n="TextID">"109"</v>
<v n="TextDefault">"English"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
<v n="TextID">"1496"</v>
<v n="TextDefault">"enSoftLimBw"</v>
@@ -385,11 +305,6 @@
<v n="TextDefault">"eWriteParameter"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
<v n="TextID">"768"</v>
<v n="TextDefault">"eWriteParameter"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
<v n="TextID">"937"</v>
<v n="TextDefault">"E_PneumaticErrors"</v>
@@ -400,11 +315,6 @@
<v n="TextDefault">"E_PneumaticMode"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
<v n="TextID">"463"</v>
<v n="TextDefault">"E_PneumaticMode Selection"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
<v n="TextID">"955"</v>
<v n="TextDefault">"fAcceleration"</v>
@@ -430,11 +340,6 @@
<v n="TextDefault">"fHomePosition"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
<v n="TextID">"157"</v>
<v n="TextDefault">"fHomePositions"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
<v n="TextID">"957"</v>
<v n="TextDefault">"fPosition"</v>
@@ -475,11 +380,6 @@
<v n="TextDefault">"fWriteCoEParam"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
<v n="TextID">"299"</v>
<v n="TextDefault">"gearIn"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
<v n="TextID">"717"</v>
<v n="TextDefault">"gearInMultiMaster"</v>
@@ -500,31 +400,11 @@
<v n="TextDefault">"High pressure limit (bar)"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
<v n="TextID">"123"</v>
<v n="TextDefault">"HOME"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
<v n="TextID">"568"</v>
<v n="TextDefault">"Home"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
<v n="TextID">"169"</v>
<v n="TextDefault">"homeDirect"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
<v n="TextID">"566"</v>
<v n="TextDefault">"homeSensorNeg"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
<v n="TextID">"677"</v>
<v n="TextDefault">"homeSensorPos"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
<v n="TextID">"784"</v>
<v n="TextDefault">"Interlock Bwd"</v>
@@ -550,41 +430,16 @@
<v n="TextDefault">"Label"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
<v n="TextID">"19"</v>
<v n="TextDefault">"Limit switches simulation"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
<v n="TextID">"919"</v>
<v n="TextDefault">"LimitBwd"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
<v n="TextID">"459"</v>
<v n="TextDefault">"LimitFwd"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
<v n="TextID">"961"</v>
<v n="TextDefault">"Low pressure limit (bar)"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
<v n="TextID">"298"</v>
<v n="TextDefault">"masterGear"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
<v n="TextID">"460"</v>
<v n="TextDefault">"Mode Selection"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
<v n="TextID">"118"</v>
<v n="TextDefault">"Mode selection"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
<v n="TextID">"111"</v>
<v n="TextDefault">"moveAbsolute"</v>
@@ -610,31 +465,11 @@
<v n="TextDefault">"nIndex"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
<v n="TextID">"716"</v>
<v n="TextDefault">"nTimeToExtend"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
<v n="TextID">"787"</v>
<v n="TextDefault">"nTimeToExtend(ms)"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
<v n="TextID">"992"</v>
<v n="TextDefault">"nTimeToExtend(s)"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
<v n="TextID">"929"</v>
<v n="TextDefault">"nTimeToRetract"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
<v n="TextID">"444"</v>
<v n="TextDefault">"nTimeToRetract(ms)"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
<v n="TextID">"995"</v>
<v n="TextDefault">"nTimeToRetract(s)"</v>
@@ -645,26 +480,11 @@
<v n="TextDefault">"Pneumatic Axis Selection"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
<v n="TextID">"958"</v>
<v n="TextDefault">"Pneumatic AxisSelection"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
<v n="TextID">"694"</v>
<v n="TextDefault">"Pneumatics"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
<v n="TextID">"942"</v>
<v n="TextDefault">"reset"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
<v n="TextID">"611"</v>
<v n="TextDefault">"shomeDirect"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
<v n="TextID">"227"</v>
<v n="TextDefault">"Single Solenoid Manual"</v>
@@ -675,21 +495,6 @@
<v n="TextDefault">"Single Solenoid PLC"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
<v n="TextID">"581"</v>
<v n="TextDefault">"Single Solenoid PLC ON"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
<v n="TextID">"959"</v>
<v n="TextDefault">"Sngle solenoid PLC"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
<v n="TextID">"466"</v>
<v n="TextDefault">"Sngle solenoid PLC "</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
<v n="TextID">"855"</v>
<v n="TextDefault">"sStatus"</v>
@@ -710,36 +515,11 @@
<v n="TextDefault">"stop"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
<v n="TextID">"978"</v>
<v n="TextDefault">"Stop at any Limit Swtich"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
<v n="TextID">"1033"</v>
<v n="TextDefault">"SWLimitSwitches"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
<v n="TextID">"108"</v>
<v n="TextDefault">"Test Language"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
<v n="TextID">"103"</v>
<v n="TextDefault">"toggle"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
<v n="TextID">"445"</v>
<v n="TextDefault">"Write"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
<o>
<v n="TextID">"322"</v>
<v n="TextDefault">"WriteParameters"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
</l>
<l n="Languages" t="ArrayList" />
<v n="GuidInit">{a3a9f9fc-0872-4de9-8fe0-73a54ef2c389}</v>
@@ -1,53 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1">
<POU Name="Cabinet_Configuration" Id="{f09ddf2c-38c8-0b17-348a-c2e3aa836c88}" SpecialFunc="None">
<Declaration><![CDATA[PROGRAM Cabinet_Configuration
VAR
//fbCabinetMonitoring: FB_ESSMonitoringMCU5001a; FB_ESSMonitoringMCU5001b; FB_ESSMonitoringMCU6001a; FB_ESSMonitoringMCU6001b; FB_ESSMonitoringMCU5002; FB_ESSMonitoringMCU5003;
fScaledAirPressureGroup1: REAL;
fScaledAirPressureGroup2: REAL;
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[//Cabinet monitoring
(*fbCabinetMonitoring(
nEcMasterNetId:= , //AMS NetId of Device (EtherCAT) from I/Os
aErrorID=> ,
aErrorMsg=> ,
nEcMasterFramesLost=> ,
nCPULoad=> ,
fCycleExecTime_ms=> ,
nAlarmGrpBitNumber=> );
*)
//Scale pressure sensor group 1 and 2
fScaledAirPressureGroup1 := mScaledPressureValue(nRawValue:=GVL.nAirPressureSensorGroup1);
fScaledAirPressureGroup2 := mScaledPressureValue(nRawValue:=GVL.nAirPressureSensorGroup2);
]]></ST>
</Implementation>
<Method Name="mScaledPressureValue" Id="{3a9ac7a5-453e-098d-2143-f7d60168bb86}">
<Declaration><![CDATA[METHOD PUBLIC mScaledPressureValue : REAL
VAR_INPUT
nRawValue: INT; //Raw value from the Terminal
END_VAR
VAR
rGradient: REAL; //Internal variable to calculate gradient of the slope
rOffset: REAL; //Internal variable to calculate the offset value
fRawHigh: REAL := 30518.0; //Highest value for the Raw value
fRawLow: REAL := 0.0; //Lowest value for the Raw value
fScaledHigh: REAL := 10.0; //Highest value for the Scaled value 10 bar
fScaledLow: REAL := 0.0; //Lowest value for the Scaled value 0 bar
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[rGradient:= (fScaledHigh - fScaledLow)/(fRawHigh - fRawLow);
rOffset:= fScaledHigh - rGradient * fRawHigh;
mScaledPressureValue:= rGradient * nRawValue + rOffset;
]]></ST>
</Implementation>
</Method>
</POU>
</TcPlcObject>
@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1">
<POU Name="Cabinet_Monitoring" Id="{f09ddf2c-38c8-0b17-348a-c2e3aa836c88}" SpecialFunc="None">
<Declaration><![CDATA[PROGRAM Cabinet_Monitoring
VAR
//fbCabinetMonitoring: FB_ESSMonitoringMCU5001a; FB_ESSMonitoringMCU5001b; FB_ESSMonitoringMCU6001a; FB_ESSMonitoringMCU6001b; FB_ESSMonitoringMCU5002; FB_ESSMonitoringMCU5003;
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[//Cabinet monitoring
(*fbCabinetMonitoring(
nEcMasterNetId:= , //AMS NetId of Device (EtherCAT) from I/Os
aErrorID=> ,
aErrorMsg=> ,
nEcMasterFramesLost=> ,
nCPULoad=> ,
fCycleExecTime_ms=> ,
nAlarmGrpBitNumber=> );
*)
]]></ST>
</Implementation>
</POU>
</TcPlcObject>
@@ -0,0 +1,105 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1">
<POU Name="Pneumatic_Box" Id="{6f77a7af-7f82-065a-2434-407aca22087a}" SpecialFunc="None">
<Declaration><![CDATA[PROGRAM Pneumatic_Box
VAR
//Define all necessary variables for your application
bPowerLedAndLight AT %Q*: BOOL:= TRUE; //Variable to power the green LED and the internal light
bPowerPressureSensors AT %Q*: BOOL:= TRUE; //Variable to power the air pressure sensors in the pneuatmic box
fScaledAirPressureGroup1: REAL;
fScaledAirPressureGroup2: REAL;
//Variable for the PSS box air feeding pressure
//fScaledAirPressurePSS: REAL;
//nRawAirPressurePSS AT %I*: INT;
//Variables for air pressure status
bAirPressureLowGrp1: BOOL;
bAirPressureHighGrp1: BOOL;
bAirPressureLowGrp2: BOOL;
bAirPressureHighGrp2: BOOL;
//Timers for air pressur out of range
fbOutOfRangeLowTimer1: TON;
fbOutOfRangeHighTimer1: TON;
fbOutOfRangeLowTimer2: TON;
fbOutOfRangeHighTimer2: TON;
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[//Scale pressure sensor group 1 and 2
fScaledAirPressureGroup1 := mScaledPressureValue(nRawValue:=GVL.nAirPressureSensorGroup1);
fScaledAirPressureGroup2 := mScaledPressureValue(nRawValue:=GVL.nAirPressureSensorGroup2);
//fScaledAirPressurePSS := mScaledPressureValue(nRawValue:=nRawAirPressurePSS);
mAirPressureLimits();
]]></ST>
</Implementation>
<Method Name="mAirPressureLimits" Id="{e89d1593-a8ca-0d0d-2454-1b7741864d9f}">
<Declaration><![CDATA[METHOD mAirPressureLimits
VAR_INPUT
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[fbOutOfRangeLowTimer1(IN := fScaledAirPressureGroup1 < GVL_APP.fLOW_LIMIT_AIR_PRESSURE1,PT:=GVL_APP.tTIME_PRESSURE_OUT_OF_RANGE);
fbOutOfRangeHighTimer1(IN := fScaledAirPressureGroup1 > GVL_APP.fHigh_LIMIT_AIR_PRESSURE1,PT:=GVL_APP.tTIME_PRESSURE_OUT_OF_RANGE);
fbOutOfRangeLowTimer2(IN := fScaledAirPressureGroup2 < GVL_APP.fLOW_LIMIT_AIR_PRESSURE2,PT:=GVL_APP.tTIME_PRESSURE_OUT_OF_RANGE);
fbOutOfRangeHighTimer2(IN := fScaledAirPressureGroup2 > GVL_APP.fHigh_LIMIT_AIR_PRESSURE2,PT:=GVL_APP.tTIME_PRESSURE_OUT_OF_RANGE);
//Check if the air pressure value is too low for longer than defined time
IF fbOutOfRangeLowTimer1.Q THEN
bAirPressureLowGrp1 := TRUE;
ELSE
bAirPressureLowGrp1 := FALSE;
END_IF
IF fbOutOfRangeLowTimer2.Q THEN
bAirPressureLowGrp2 := TRUE;
ELSE
bAirPressureLowGrp2 := FALSE;
END_IF
//Check if the air pressure value is too high for longer than defined time
IF fbOutOfRangeHighTimer1.Q THEN
bAirPressureHighGrp1 := TRUE;
ELSE
bAirPressureHighGrp1 := FALSE;
END_IF
IF fbOutOfRangeHighTimer2.Q THEN
bAirPressureHighGrp2 := TRUE;
ELSE
bAirPressureHighGrp2 := FALSE;
END_IF
]]></ST>
</Implementation>
</Method>
<Method Name="mScaledPressureValue" Id="{0a1832fc-ef94-036a-37c0-f6a54ad9133a}">
<Declaration><![CDATA[METHOD PUBLIC mScaledPressureValue : REAL
VAR_INPUT
nRawValue: INT; //Raw value from the Terminal
END_VAR
VAR
rGradient: REAL; //Internal variable to calculate gradient of the slope
rOffset: REAL; //Internal variable to calculate the offset value
fRawHigh: REAL := 30518.0; //Highest value for the Raw value
fRawLow: REAL := 0.0; //Lowest value for the Raw value
fScaledHigh: REAL := 10.0; //Highest value for the Scaled value 10 bar
fScaledLow: REAL := 0.0; //Lowest value for the Scaled value 0 bar
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[rGradient:= (fScaledHigh - fScaledLow)/(fRawHigh - fRawLow);
rOffset:= fScaledHigh - rGradient * fRawHigh;
mScaledPressureValue:= rGradient * nRawValue + rOffset;
]]></ST>
</Implementation>
</Method>
</POU>
</TcPlcObject>
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1">
<POU Name="Shutter_Operator_panel_Template" Id="{09741edf-58a0-0d9d-0563-de91fec8904d}" SpecialFunc="None">
<Declaration><![CDATA[PROGRAM Shutter_Operator_panel_Template
<POU Name="Shutter_Operator_Panel" Id="{09741edf-58a0-0d9d-0563-de91fec8904d}" SpecialFunc="None">
<Declaration><![CDATA[PROGRAM Shutter_Operator_Panel
VAR
//Variables used to control the LEDs of the Safety Shutter Operator panel
(*
@@ -12,7 +12,7 @@ VAR
{attribute 'TcLinkTo' := 'TIID^Device 1 (EtherCAT)^KF201 (EK1200)^KF217 (EK1521)^KF01 (EK1501-0100)^KF03 (EL2014)^DIG Outputs^Channel 2^Output'}
bMovingLight AT %Q*: BOOL; //Power output for cylinder Moving LED
{attribute 'TcLinkTo' := 'TIID^Device 1 (EtherCAT)^KF201 (EK1200)^KF217 (EK1521)^KF01 (EK1501-0100)^KF04 (EL2014)^DIG Outputs^Channel 1^Output'}
bNoPermitLight AT %Q*: BOOL; //Power output for No permit LED
bPermitLight AT %Q*: BOOL; //Power output for PSS permit LED
{attribute 'TcLinkTo' := 'TIID^Device 1 (EtherCAT)^KF201 (EK1200)^KF217 (EK1521)^KF01 (EK1501-0100)^KF04 (EL2014)^DIG Outputs^Channel 2^Output'}
bErrorLight AT %Q*: BOOL; //Power output for Error LED
*)
@@ -22,17 +22,17 @@ END_VAR
<ST><![CDATA[//Uncomment the code, it is needed to control the LEDs of the Safety Shutter Operator panel
(*
//Assign LED to the permit status
bNoPermitLight := NOT GVL.astPneumaticAxes[x].stPneumaticAxisInputs.bPSSPermit;
bPermitLight := GVL.astPneumaticAxes[1].stPneumaticAxisStatus.bPSSPermitOK;
//Assign LED to the error status
bErrorLight := GVL.astPneumaticAxes[x].stPneumaticAxisStatus.bError;
bErrorLight := GVL.astPneumaticAxes[1].stPneumaticAxisStatus.bError;
//Assign LEDs to the end switches statuses
bExtendedLight := GVL.astPneumaticAxes[x].stPneumaticAxisStatus.bExtended;
bRetractedLight := GVL.astPneumaticAxes[x].stPneumaticAxisStatus.bRetracted;
bExtendedLight := GVL.astPneumaticAxes[1].stPneumaticAxisStatus.bExtended;
bRetractedLight := GVL.astPneumaticAxes[1].stPneumaticAxisStatus.bRetracted;
//Checking the condition for the Moving LED
bMovingLight := GVL.astPneumaticAxes[x].stPneumaticAxisStatus.bRetracting OR gvl.astPneumaticAxes[x].stPneumaticAxisStatus.bExtending;
bMovingLight := GVL.astPneumaticAxes[1].stPneumaticAxisStatus.bRetracting OR gvl.astPneumaticAxes[1].stPneumaticAxisStatus.bExtending;
*)
]]></ST>
</Implementation>
@@ -10,21 +10,17 @@ END_VAR
<ST><![CDATA[//Initial parameters of an Pneumatic Axis
//Uncomment the next IF statement to configure and activate the intial parameters of the axis
(*
IF TaskInfo[fbGetCurTaskIndex.index].FirstCycle THEN
GVL.astPneumaticAxes[x].stPneumaticAxisConfig.sPneumaticAxisName := 'Shutter';
GVL.astPneumaticAxes[x].stPneumaticAxisConfig.bSafetyShutter := TRUE;
IF _TaskInfo[fbGetCurTaskIndex.index].FirstCycle THEN
GVL.astPneumaticAxes[x].stPneumaticAxisConfig.sPneumaticAxisName := 'P1PneuAxis';
GVL.astPneumaticAxes[x].stPneumaticAxisConfig.bSafetyShutter := FALSE;
GVL.astPneumaticAxes[x].stPneumaticAxisConfig.nTimeToExtend := 10;
GVL.astPneumaticAxes[x].stPneumaticAxisConfig.nTimeToRetract := 10;
GVL.astPneumaticAxes[x].stPneumaticAxisConfig.nAllowTimePressureOutOfRange := 5;
GVL.astPneumaticAxes[x].stPneumaticAxisConfig.tAllowTimePressureOutOfRange := GVL_APP.tTIME_PRESSURE_OUT_OF_RANGE;
GVL.astPneumaticAxes[x].stPneumaticAxisConfig.eSelectPneumaticAxisGroup := E_PneumaticAxisGroup.ePneumaticAxisGroup#;
GVL.astPneumaticAxes[x].stPneumaticAxisConfig.fLowLimitPressureValue := GVL_APP.fLOW_LIMIT_AIR_PRESSURE#;
GVL.astPneumaticAxes[x].stPneumaticAxisConfig.fHighLimitPressureValue := GVL_APP.fHIGH_LIMIT_AIR_PRESSURE#;
END_IF
*)
]]></ST>
</Implementation>
</POU>
@@ -0,0 +1,33 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1">
<POU Name="Safety_Shutter" Id="{6edcef4b-0039-01e0-14cb-28763a1c98aa}" SpecialFunc="None">
<Declaration><![CDATA[PROGRAM Safety_Shutter
VAR
//Define all necessary variables for your application
bPSSPermitPower AT %Q*: BOOL := TRUE;
bPSSPermit1 AT %I*: BOOL;
bPSSPermit2 at %I*: BOOL;
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[//Initial parameters of an Pneumatic Axis
//Uncomment the next IF statement to configure and activate the intial parameters of the axis
(*
IF _TaskInfo[fbGetCurTaskIndex.index].FirstCycle THEN
GVL.astPneumaticAxes[1].stPneumaticAxisConfig.sPneumaticAxisName := 'SafetyShutter';
GVL.astPneumaticAxes[1].stPneumaticAxisConfig.bSafetyShutter := TRUE;
GVL.astPneumaticAxes[1].stPneumaticAxisConfig.nTimeToExtend := 10;
GVL.astPneumaticAxes[1].stPneumaticAxisConfig.nTimeToRetract := 10;
GVL.astPneumaticAxes[1].stPneumaticAxisConfig.tAllowTimePressureOutOfRange := GVL_APP.tTIME_PRESSURE_OUT_OF_RANGE;
GVL.astPneumaticAxes[1].stPneumaticAxisConfig.eSelectPneumaticAxisGroup := E_PneumaticAxisGroup.ePneumaticAxisGroup1;
GVL.astPneumaticAxes[1].stPneumaticAxisConfig.fLowLimitPressureValue := GVL_APP.fLOW_LIMIT_AIR_PRESSURE1;
GVL.astPneumaticAxes[1].stPneumaticAxisConfig.fHighLimitPressureValue := GVL_APP.fHIGH_LIMIT_AIR_PRESSURE1;
END_IF
//PSS Permit signal
//GVL.astPneumaticAxes[1].stPneumaticAxisStatus.bPSSPermitOK := bPSSPermit1 AND bPSSPermit2
*)
]]></ST>
</Implementation>
</POU>
</TcPlcObject>
+5 -2
View File
@@ -129,11 +129,14 @@ GVL.fbGetCurTaskIndex();
//Axes initial parameters and program
Axis_Template();
Safety_Shutter();
//Pneumatics_Template();
//Application program calls
Cabinet_Configuration();
Application_Template();
Cabinet_Monitoring();
Pneumatic_Box();
//Shutter_Operator_Panel();
//Application_Template();
]]></ST>
</Implementation>
</Action>
@@ -37,10 +37,13 @@
<Compile Include="POUs\Application_Specific\Applications\Application_Template.TcPOU">
<SubType>Code</SubType>
</Compile>
<Compile Include="POUs\Application_Specific\Applications\Cabinet_Configuration.TcPOU">
<Compile Include="POUs\Application_Specific\Applications\Cabinet_Monitoring.TcPOU">
<SubType>Code</SubType>
</Compile>
<Compile Include="POUs\Application_Specific\Applications\Shutter_Operator_panel_Template.TcPOU">
<Compile Include="POUs\Application_Specific\Applications\Pneumatic_Box.TcPOU">
<SubType>Code</SubType>
</Compile>
<Compile Include="POUs\Application_Specific\Applications\Shutter_Operator_Panel.TcPOU">
<SubType>Code</SubType>
</Compile>
<Compile Include="POUs\Application_Specific\Axes\Axis_Template.TcPOU">
@@ -49,6 +52,9 @@
<Compile Include="POUs\Application_Specific\Axes\Pneumatics_Template.TcPOU">
<SubType>Code</SubType>
</Compile>
<Compile Include="POUs\Application_Specific\Axes\Safety_Shutter.TcPOU">
<SubType>Code</SubType>
</Compile>
<Compile Include="POUs\MAIN.TcPOU">
<SubType>Code</SubType>
</Compile>