FB_SlitPairV2 implemented
This commit is contained in:
1 parent
7d007f9249
commit
54ca280288
6 files changed
+342
-21
No files matched your search
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
+315
-5
@@ -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>
|
||||
@@ -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" />
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in new issue
Block a user