FB_SlitPairV2 implemented

This commit is contained in:
SCooper
2022-04-11 16:01:40 +01:00
parent 7d007f9249
commit 54ca280288
6 changed files with 342 additions and 21 deletions

View File

@@ -1485,7 +1485,6 @@ External Setpoint Generation:
</Drive>
<Controller Name="Ctrl" CtrType="1">
<CtrPara PriorControlFactor="1">
<PosDiffControl Enable="false"/>
<PID PosKp="2"/>
<Observer BandWidth="20"/>
</CtrPara>

View File

@@ -1485,7 +1485,7 @@ External Setpoint Generation:
</Drive>
<Controller Name="Ctrl" CtrType="1">
<CtrPara PriorControlFactor="1">
<PosDiffControl Enable="false"/>
<PosDiffControl Range="0.5"/>
<Observer BandWidth="20"/>
</CtrPara>
</Controller>

View File

@@ -1094,6 +1094,14 @@ External Setpoint Generation:
<Name>GVL.astAxes[6].Axis.PlcToNc</Name>
<Type GUID="{63A84524-72E3-41C8-BEAB-4CCE44690A13}" Namespace="MC">PLCTONC_AXIS_REF</Type>
</Var>
<Var>
<Name>MAIN.slit1Vertical.GapSizeEncoder</Name>
<Type>UDINT</Type>
</Var>
<Var>
<Name>MAIN.slit1Vertical.GapCentreEncoder</Name>
<Type>UDINT</Type>
</Var>
<Var>
<Name>limitsPower.bEnableAxis1Limits</Name>
<Type>BOOL</Type>
@@ -1110,14 +1118,6 @@ External Setpoint Generation:
<Name>limitsPower.bEnableAxis2Enc</Name>
<Type>BOOL</Type>
</Var>
<Var>
<Name>testSlitApp.iGapSizePosition</Name>
<Type>UDINT</Type>
</Var>
<Var>
<Name>testSlitApp.iGapCentrePosition</Name>
<Type>UDINT</Type>
</Var>
</Vars>
<Contexts>
<Context>
@@ -1172,12 +1172,12 @@ External Setpoint Generation:
<OwnerB Name="TINC^NC-Task 1 SAF^Axes^VC">
<Link VarA="PlcTask Inputs^GVL.astAxes[4].Axis.NcToPlc" VarB="Outputs^ToPlc"/>
<Link VarA="PlcTask Outputs^GVL.astAxes[4].Axis.PlcToNc" VarB="Inputs^FromPlc"/>
<Link VarA="PlcTask Outputs^testSlitApp.iGapCentrePosition" VarB="Enc^Inputs^In^nDataIn1"/>
<Link VarA="PlcTask Outputs^MAIN.slit1Vertical.GapCentreEncoder" VarB="Enc^Inputs^In^nDataIn1"/>
</OwnerB>
<OwnerB Name="TINC^NC-Task 1 SAF^Axes^VG">
<Link VarA="PlcTask Inputs^GVL.astAxes[3].Axis.NcToPlc" VarB="Outputs^ToPlc"/>
<Link VarA="PlcTask Outputs^GVL.astAxes[3].Axis.PlcToNc" VarB="Inputs^FromPlc"/>
<Link VarA="PlcTask Outputs^testSlitApp.iGapSizePosition" VarB="Enc^Inputs^In^nDataIn1"/>
<Link VarA="PlcTask Outputs^MAIN.slit1Vertical.GapSizeEncoder" VarB="Enc^Inputs^In^nDataIn1"/>
</OwnerB>
</OwnerA>
</Mappings>

View File

@@ -3,10 +3,10 @@
<POU Name="FB_SlitPairV2" Id="{ff4013b1-472a-4f42-a6c8-2711712ac06d}" SpecialFunc="None">
<Declaration><![CDATA[FUNCTION_BLOCK FB_SlitPairV2
VAR_INPUT
positiveAxis_ID : UINT;
negativeAxis_ID : UINT;
GapSizeAxis_ID : UINT;
GapCentreAxis_ID : UINT;
ID_positiveAxis : UINT;
ID_negativeAxis : UINT;
ID_gapSizeAxis : UINT;
ID_gapCentreAxis : UINT;
Enable : BOOL;
Reset : BOOL;
@@ -45,13 +45,323 @@ VAR
dir_gapSizeAxis : DINT;
dir_gapCentreAxis : DINT;
iState : E_SlitPairStatesV2 := E_SlitPairStatesV2.INIT;
internalReset : BOOL;
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[]]></ST>
<ST><![CDATA[//Setup instructions
//Virtual encoder mask needs to be 0xFFFFFFFF
actVirtualAxisPositions();
GVL.astAxes[ID_gapSizeAxis].stConfig.eHomeSeq:= E_HomingRoutines.eHomeDirect;
GVL.astAxes[ID_gapCentreAxis].stConfig.eHomeSeq:= E_HomingRoutines.eHomeDirect;
GVL.astAxes[ID_gapSizeAxis].stConfig.fHomePosition:= fGapSize;
GVL.astAxes[ID_gapCentreAxis].stConfig.fHomePosition:= fGapCentre;
//What do we need
//Limit logic
actVirtualAxisLimits();
//Enable Logic
actVirtualAxisEnable();
//Call spGenerator FBs
actGeneratorEnableDisable();
//Calculate position setpoints
actCalculateSetpointPositions();
//Calculate velocity setpoints
actCalculateSetpointVelocities();
//Calculate directions
actCalculateSetpointDirections();
//We're only going to care about errors that stop motion!
IF GVL.astAxes[ID_positiveAxis].Axis.Status.ErrorStop OR GVL.astAxes[ID_negativeAxis].Axis.Status.ErrorStop OR GVL.astAxes[ID_gapSizeAxis].Axis.Status.ErrorStop OR GVL.astAxes[ID_gapCentreAxis].Axis.Status.ErrorStop THEN
iState:= E_SlitPairStatesV2.ERROR_INIT;
END_IF
//Internal Reset linked to any axis reset
internalReset := Reset OR GVL.astAxes[ID_positiveAxis].stControl.bReset OR GVL.astAxes[ID_negativeAxis].stControl.bReset OR GVL.astAxes[ID_gapSizeAxis].stControl.bReset OR GVL.astAxes[ID_gapCentreAxis].stControl.bReset;
//State machine (with error handling and reset logic) - WHAT ABOUT HOMING?
IF Enable THEN
CASE istate OF
E_SlitPairStatesV2.INIT:
IF GVL.astAxes[ID_positiveAxis].stStatus.bHomed AND GVL.astAxes[ID_negativeAxis].stStatus.bHomed THEN
GVL.astAxes[ID_gapSizeAxis].stControl.eCommand:= E_MotionFunctions.eHome;
GVL.astAxes[ID_gapSizeAxis].stControl.bExecute:= TRUE;
GVL.astAxes[ID_gapcentreAxis].stControl.eCommand:= E_MotionFunctions.eHome;
GVL.astAxes[ID_gapcentreAxis].stControl.bExecute:= TRUE;
iState:=E_SlitPairStatesV2.WAIT_FOR_HOMED;
ELSE
iState:=E_SlitPairStatesV2.OPERATIONAL;
END_IF
E_SlitPairStatesV2.WAIT_FOR_HOMED:
IF GVL.astAxes[ID_gapSizeAxis].stStatus.bHomed AND GVL.astAxes[ID_gapCentreAxis].stStatus.bHomed THEN
iState:=E_SlitPairStatesV2.OPERATIONAL;
END_IF
E_SlitPairStatesV2.OPERATIONAL:
IF GVL.astAxes[ID_gapSizeAxis].stStatus.bMoving OR GVL.astAxes[ID_gapCentreAxis].stStatus.bMoving THEN
iState:=E_SlitPairStatesV2.ENABLE_REAL_GENERATORS;
END_IF
IF GVL.astAxes[1].stStatus.bMoving OR GVL.astAxes[2].stStatus.bMoving THEN
iState:=E_SlitPairStatesV2.ENABLE_VIRTUAL_GENERATORS;
END_IF
E_SlitPairStatesV2.ENABLE_REAL_GENERATORS:
setpointGenEnable_positiveAxis.Execute:=TRUE;
setpointGenEnable_negativeAxis.Execute:=TRUE;
iState:=E_SlitPairStatesV2.WAIT_FOR_VIRTUAL_MOVE_DONE;
E_SlitPairStatesV2.WAIT_FOR_VIRTUAL_MOVE_DONE:
IF NOT(GVL.astAxes[ID_gapSizeAxis].stStatus.bMoving OR GVL.astAxes[ID_gapCentreAxis].stStatus.bMoving) THEN
iState:=E_SlitPairStatesV2.DISABLE_REAL_GENERATORS;
END_IF
E_SlitPairStatesV2.DISABLE_REAL_GENERATORS:
setpointGenDisable_positiveAxis.Execute:=TRUE;
setpointGenDisable_negativeAxis.Execute:=TRUE;
iState:=E_SlitPairStatesV2.OPERATIONAL;
E_SlitPairStatesV2.ENABLE_VIRTUAL_GENERATORS:
setpointGenEnable_gapSizeAxis.Execute :=TRUE;
setpointGenEnable_gapCentreAxis.Execute:=TRUE;
iState:=E_SlitPairStatesV2.WAIT_FOR_REAL_MOVE_DONE;
E_SlitPairStatesV2.WAIT_FOR_REAL_MOVE_DONE:
IF NOT(GVL.astAxes[1].stStatus.bMoving OR GVL.astAxes[2].stStatus.bMoving) THEN
iState:=E_SlitPairStatesV2.DISABLE_VIRTUAL_GENERATORS;
END_IF
E_SlitPairStatesV2.DISABLE_VIRTUAL_GENERATORS:
setpointGenDisable_gapSizeAxis.Execute :=TRUE;
setpointGenDisable_gapCentreAxis.Execute:=TRUE;
iState:=E_SlitPairStatesV2.OPERATIONAL;
E_SlitPairStatesV2.ERROR_INIT:
IF internalReset THEN
GVL.astAxes[ID_positiveAxis].stControl.bReset := TRUE;
GVL.astAxes[ID_negativeAxis].stControl.bReset := TRUE;
GVL.astAxes[ID_gapSizeAxis].stControl.bReset := TRUE;
GVL.astAxes[ID_gapCentreAxis].stControl.bReset := TRUE;
iState:= E_SlitPairStatesV2.INIT;
END_IF
END_CASE
END_IF
//Feed externalsetpoint generators
MC_ExtSetPointGenFeed(Axis:= GVL.astAxes[ID_positiveAxis].Axis, Position:= posSetpoint_positiveAxis, Velocity:= veloSetpoint_positiveAxis, Acceleration:= 0, Direction:= dir_positiveAxis);
MC_ExtSetPointGenFeed(Axis:= GVL.astAxes[ID_negativeAxis].Axis, Position:= posSetpoint_negativeAxis, Velocity:= veloSetpoint_negativeAxis, Acceleration:= 0, Direction:= dir_negativeAxis);
MC_ExtSetPointGenFeed(Axis:= GVL.astAxes[ID_gapSizeAxis].Axis, Position:= posSetpoint_gapSizeAxis, Velocity:= veloSetpoint_gapSizeAxis, Acceleration:= 0, Direction:= dir_gapSizeAxis);
MC_ExtSetPointGenFeed(Axis:= GVL.astAxes[ID_gapCentreAxis].Axis, Position:= posSetpoint_gapCentreAxis, Velocity:= veloSetpoint_gapCentreAxis, Acceleration:= 0, Direction:= dir_gapCentreAxis);]]></ST>
</Implementation>
<Action Name="actCalculateSetpointDirections" Id="{7783e346-7fab-40d5-bab7-fe46a8c2f785}">
<Implementation>
<ST><![CDATA[IF veloSetpoint_positiveAxis >0 THEN
dir_positiveAxis := 1; //moving forward
ELSIF veloSetpoint_positiveAxis <0 THEN
dir_positiveAxis := -1; //moving backward
ELSE
dir_positiveAxis := 0; //stationary
END_IF
IF veloSetpoint_negativeAxis >0 THEN
dir_negativeAxis := 1; //moving forward
ELSIF veloSetpoint_negativeAxis <0 THEN
dir_negativeAxis := -1; //moving backward
ELSE
dir_negativeAxis := 0; //stationary
END_IF
IF veloSetpoint_gapSizeAxis >0 THEN
dir_gapSizeAxis := 1; //moving forward
ELSIF veloSetpoint_gapSizeAxis <0 THEN
dir_gapSizeAxis := -1; //moving backward
ELSE
dir_gapSizeAxis := 0; //stationary
END_IF
IF veloSetpoint_gapCentreAxis >0 THEN
dir_gapCentreAxis := 1; //moving forward
ELSIF veloSetpoint_gapCentreAxis <0 THEN
dir_gapCentreAxis := -1; //moving backward
ELSE
dir_gapCentreAxis := 0; //stationary
END_IF]]></ST>
</Implementation>
</Action>
<Action Name="actCalculateSetpointPositions" Id="{08e35b97-914a-4ccc-a3af-6b7cd8e60439}">
<Implementation>
<ST><![CDATA[posSetpoint_positiveAxis := GVL.astAxes[ID_gapCentreAxis].Axis.NcToPlc.SetPos + (GVL.astAxes[ID_gapSizeAxis].Axis.NcToPlc.SetPos/2);
posSetpoint_negativeAxis := GVL.astAxes[ID_gapCentreAxis].Axis.NcToPlc.SetPos - (GVL.astAxes[ID_gapSizeAxis].Axis.NcToPlc.SetPos/2);
posSetpoint_gapSizeAxis := GVL.astAxes[ID_positiveAxis].Axis.NcToPlc.SetPos - GVL.astAxes[ID_negativeAxis].Axis.NcToPlc.SetPos;
posSetpoint_gapCentreAxis := (GVL.astAxes[ID_positiveAxis].Axis.NcToPlc.SetPos + GVL.astAxes[ID_negativeAxis].Axis.NcToPlc.SetPos) / 2;]]></ST>
</Implementation>
</Action>
<Action Name="actCalculateSetpointVelocities" Id="{59813eea-6905-4661-a8f3-10b16a472979}">
<Implementation>
<ST><![CDATA[veloSetpoint_positiveAxis := GVL.astAxes[ID_gapCentreAxis].Axis.NcToPlc.SetVelo +(GVL.astAxes[ID_gapSizeAxis].Axis.NcToPlc.SetVelo/2);
veloSetpoint_negativeAxis := GVL.astAxes[ID_gapCentreAxis].Axis.NcToPlc.SetVelo -(GVL.astAxes[ID_gapSizeAxis].Axis.NcToPlc.SetVelo/2);
veloSetpoint_gapSizeAxis := GVL.astAxes[ID_positiveAxis].Axis.NcToPlc.SetVelo - GVL.astAxes[ID_negativeAxis].Axis.NcToPlc.SetVelo;
veloSetpoint_gapCentreAxis := GVL.astAxes[ID_positiveAxis].Axis.NcToPlc.SetVelo + GVL.astAxes[ID_negativeAxis].Axis.NcToPlc.SetVelo;]]></ST>
</Implementation>
</Action>
<Action Name="actGeneratorEnableDisable" Id="{d59f6d39-50eb-4cb0-8d9d-b62df150c5a5}">
<Implementation>
<ST><![CDATA[setpointGenEnable_positiveAxis(Axis:= GVL.astAxes[ID_positiveAxis].Axis);
setpointGenEnable_positiveAxis.Execute:= FALSE;
setpointGenEnable_negativeAxis(Axis:= GVL.astAxes[ID_negativeAxis].Axis);
setpointGenEnable_negativeAxis.Execute:= FALSE;
setpointGenEnable_gapSizeAxis(Axis:= GVL.astAxes[ID_gapSizeAxis].Axis);
setpointGenEnable_gapSizeAxis.Execute:= FALSE;
setpointGenEnable_gapCentreAxis(Axis:= GVL.astAxes[ID_gapCentreAxis].Axis);
setpointGenEnable_gapCentreAxis.Execute:= FALSE;
setpointGenDisable_positiveAxis(Axis:= GVL.astAxes[ID_positiveAxis].Axis);
setpointGenDisable_positiveAxis.Execute:= FALSE;
setpointGenDisable_negativeAxis(Axis:= GVL.astAxes[ID_negativeAxis].Axis);
setpointGenDisable_negativeAxis.Execute:= FALSE;
setpointGenDisable_gapSizeAxis(Axis:= GVL.astAxes[ID_gapSizeAxis].Axis);
setpointGenDisable_gapSizeAxis.Execute:= FALSE;
setpointGenDisable_gapCentreAxis(Axis:= GVL.astAxes[ID_gapCentreAxis].Axis);
setpointGenDisable_gapCentreAxis.Execute:= FALSE;]]></ST>
</Implementation>
</Action>
<Action Name="actVirtualAxisEnable" Id="{d8729d12-361d-472b-8974-5b566dad7d06}">
<Implementation>
<ST><![CDATA[GVL.astAxes[ID_gapSizeAxis].stControl.bEnable := GVL.astAxes[ID_positiveAxis].stStatus.bEnabled AND GVL.astAxes[ID_negativeAxis].stStatus.bEnabled;
GVL.astAxes[ID_gapCentreAxis].stControl.bEnable := GVL.astAxes[ID_positiveAxis].stStatus.bEnabled AND GVL.astAxes[ID_negativeAxis].stStatus.bEnabled;]]></ST>
</Implementation>
</Action>
<Action Name="actVirtualAxisLimits" Id="{436d835a-8846-47e9-922d-a1df63469a25}">
<Implementation>
<ST><![CDATA[GVL.astAxes[ID_gapSizeAxis].stInputs.bLimitFwd:= GVL.astAxes[ID_positiveAxis].stStatus.bFwEnabled AND GVL.astAxes[ID_negativeAxis].stStatus.bBwEnabled;
GVL.astAxes[ID_gapSizeAxis].stInputs.bLimitBwd:= GVL.astAxes[ID_positiveAxis].stStatus.bBwEnabled AND GVL.astAxes[ID_negativeAxis].stStatus.bFwEnabled;
GVL.astAxes[ID_gapCentreAxis].stInputs.bLimitFwd:= GVL.astAxes[ID_positiveAxis].stStatus.bFwEnabled AND GVL.astAxes[ID_negativeAxis].stStatus.bFwEnabled;
GVL.astAxes[ID_gapCentreAxis].stInputs.bLimitBwd:= GVL.astAxes[ID_positiveAxis].stStatus.bBwEnabled AND GVL.astAxes[ID_negativeAxis].stStatus.bBwEnabled;]]></ST>
</Implementation>
</Action>
<Action Name="actVirtualAxisPositions" Id="{4ef557a2-3171-4a03-98ba-14f2cd3ef5ec}">
<Implementation>
<ST><![CDATA[(*Calculate virtual axis positions and convert to UDINT.
Conversion to UDINT is prohibited if it would exceed UDINT max value of 4,294,967,295.
If this is not done, it can cause overflow when connected to the encoder input and hard-crash the PLC which will only recover with a power cycle.
To preserve decimal position data of the LREAL (i.e. anything <1mm) it is necessary to scale the value before converting to UDINT.
This can be reversed with the correct scaling at the NC encoder level.
*)
fGapSize := GVL.astAxes[ID_positiveAxis].stStatus.fActPosition - GVL.astAxes[ID_negativeAxis].stStatus.fActPosition;
fGapCentre := (GVL.astAxes[ID_positiveAxis].stStatus.fActPosition + GVL.astAxes[ID_negativeAxis].stStatus.fActPosition) / 2;
IF ABS(fGapSize) < 100000 THEN
GapSizeEncoder := LREAL_TO_UDINT(fGapSize*EncoderScaling);
END_IF
IF ABS(fGapCentre) < 100000 THEN
GapCentreEncoder := LREAL_TO_UDINT(fGapCentre*EncoderScaling);
END_IF]]></ST>
</Implementation>
</Action>
<LineIds Name="FB_SlitPairV2">
<LineId Id="231" Count="0" />
<LineId Id="233" Count="0" />
<LineId Id="232" Count="0" />
<LineId Id="9" Count="0" />
<LineId Id="245" Count="1" />
<LineId Id="259" Count="1" />
<LineId Id="57" Count="0" />
<LineId Id="56" Count="0" />
<LineId Id="59" Count="0" />
<LineId Id="58" Count="0" />
<LineId Id="78" Count="0" />
<LineId Id="60" Count="0" />
<LineId Id="80" Count="0" />
<LineId Id="62" Count="0" />
<LineId Id="92" Count="0" />
<LineId Id="64" Count="0" />
<LineId Id="106" Count="0" />
<LineId Id="66" Count="0" />
<LineId Id="112" Count="0" />
<LineId Id="68" Count="0" />
<LineId Id="118" Count="0" />
<LineId Id="170" Count="4" />
<LineId Id="219" Count="2" />
<LineId Id="73" Count="0" />
<LineId Id="72" Count="0" />
<LineId Id="175" Count="0" />
<LineId Id="178" Count="1" />
<LineId Id="242" Count="1" />
<LineId Id="247" Count="3" />
<LineId Id="257" Count="1" />
<LineId Id="244" Count="0" />
<LineId Id="185" Count="0" />
<LineId Id="251" Count="0" />
<LineId Id="254" Count="2" />
<LineId Id="252" Count="0" />
<LineId Id="234" Count="0" />
<LineId Id="236" Count="4" />
<LineId Id="235" Count="0" />
<LineId Id="241" Count="0" />
<LineId Id="187" Count="8" />
<LineId Id="216" Count="0" />
<LineId Id="196" Count="8" />
<LineId Id="215" Count="0" />
<LineId Id="205" Count="3" />
<LineId Id="214" Count="0" />
<LineId Id="209" Count="3" />
<LineId Id="222" Count="3" />
<LineId Id="227" Count="3" />
<LineId Id="226" Count="0" />
<LineId Id="213" Count="0" />
<LineId Id="176" Count="1" />
<LineId Id="127" Count="1" />
<LineId Id="126" Count="0" />
<LineId Id="129" Count="2" />
<LineId Id="133" Count="0" />
</LineIds>
<LineIds Name="FB_SlitPairV2.actCalculateSetpointDirections">
<LineId Id="2" Count="5" />
<LineId Id="1" Count="0" />
<LineId Id="9" Count="6" />
<LineId Id="8" Count="0" />
<LineId Id="17" Count="6" />
<LineId Id="16" Count="0" />
<LineId Id="25" Count="6" />
<LineId Id="24" Count="0" />
</LineIds>
<LineIds Name="FB_SlitPairV2.actCalculateSetpointPositions">
<LineId Id="2" Count="2" />
<LineId Id="1" Count="0" />
</LineIds>
<LineIds Name="FB_SlitPairV2.actCalculateSetpointVelocities">
<LineId Id="2" Count="2" />
<LineId Id="1" Count="0" />
</LineIds>
<LineIds Name="FB_SlitPairV2.actGeneratorEnableDisable">
<LineId Id="2" Count="22" />
<LineId Id="1" Count="0" />
</LineIds>
<LineIds Name="FB_SlitPairV2.actVirtualAxisEnable">
<LineId Id="2" Count="1" />
</LineIds>
<LineIds Name="FB_SlitPairV2.actVirtualAxisLimits">
<LineId Id="2" Count="4" />
</LineIds>
<LineIds Name="FB_SlitPairV2.actVirtualAxisPositions">
<LineId Id="2" Count="14" />
<LineId Id="1" Count="0" />
</LineIds>
</POU>
</TcPlcObject>

View File

@@ -20,6 +20,8 @@ VAR
afbReadEncRefSys: ARRAY [1..GVL_APP.nAXIS_NUM] OF MC_ReadParameter;
afbRestorePosition: ARRAY [1..GVL_APP.nAXIS_NUM] OF MC_SetPosition;
fbGetDeviceIdentification: FB_GetDeviceIdentification;
slit1Vertical : FB_SlitPairV2;
END_VAR
VAR PERSISTENT
@@ -28,7 +30,10 @@ END_VAR]]></Declaration>
<Implementation>
<ST><![CDATA[POSITION_RECOVERY();
AXES();
PROG();]]></ST>
PROG();
slit1Vertical(ID_positiveAxis:=1, ID_negativeAxis:=2, ID_gapSizeAxis:=3, ID_gapCentreAxis:=4);
]]></ST>
</Implementation>
<Folder Name="POSITION_RECOVERY" Id="{3561f6ef-e145-4ed3-9839-f17334bd2d97}" />
<Action Name="AXES" Id="{7eb32732-9b53-4934-8cd9-20ba971dd8ff}">
@@ -76,8 +81,7 @@ END_IF]]></ST>
<Action Name="PROG" Id="{5d03ebbb-2a47-4890-ad6d-e82daf72dc51}">
<Implementation>
<ST><![CDATA[testProg();
limitsPower();
testSlitApp();]]></ST>
limitsPower();]]></ST>
</Implementation>
</Action>
<Action Name="RESTORE_POSITIONS" Id="{0c7ee537-7bd9-4833-b428-c17cbb57e893}" FolderPath="POSITION_RECOVERY\">
@@ -208,6 +212,9 @@ END_FOR]]></ST>
<LineId Id="505" Count="0" />
<LineId Id="81" Count="0" />
<LineId Id="538" Count="0" />
<LineId Id="589" Count="0" />
<LineId Id="586" Count="0" />
<LineId Id="585" Count="0" />
</LineIds>
<LineIds Name="MAIN.AXES">
<LineId Id="11" Count="1" />
@@ -228,7 +235,6 @@ END_FOR]]></ST>
</LineIds>
<LineIds Name="MAIN.PROG">
<LineId Id="13" Count="1" />
<LineId Id="11" Count="0" />
</LineIds>
<LineIds Name="MAIN.RESTORE_POSITIONS">
<LineId Id="567" Count="105" />

View File

@@ -28,6 +28,9 @@
<Compile Include="PlcTask.TcTTO">
<SubType>Code</SubType>
</Compile>
<Compile Include="POUs\Application_Specific\Applications\FB_SlitPairV2.TcPOU">
<SubType>Code</SubType>
</Compile>
<Compile Include="POUs\Application_Specific\Applications\limitsPower.TcPOU">
<SubType>Code</SubType>
</Compile>
@@ -61,6 +64,9 @@
<Compile Include="tc_mca_std_lib\DUTs\E_RestorePosition.TcDUT">
<SubType>Code</SubType>
</Compile>
<Compile Include="tc_mca_std_lib\DUTs\E_SlitPairStatesV2.TcDUT">
<SubType>Code</SubType>
</Compile>
<Compile Include="tc_mca_std_lib\DUTs\Pneumatics\E_PneumaticAxisErrors.TcDUT">
<SubType>Code</SubType>
</Compile>