Fixed FB_AxisPTP and added controller FB's
- Fixed FB_AxisPTP by removing unsued types - Added FB_Limit - Added pi controller fb - Moved files to own controller folder - Renamed tmc file which contains the events
This commit is contained in:
@@ -131,12 +131,12 @@
|
|||||||
</Task>
|
</Task>
|
||||||
</Tasks>
|
</Tasks>
|
||||||
<TypeSystem>
|
<TypeSystem>
|
||||||
<AdditionalTmcFile Name="BaseComponents" File="BaseComponents.tmc"/>
|
<AdditionalTmcFile Name="Events" File="Events.tmc"/>
|
||||||
</TypeSystem>
|
</TypeSystem>
|
||||||
</System>
|
</System>
|
||||||
<Plc>
|
<Plc>
|
||||||
<Project GUID="{4E62D9E7-436C-457D-8DC4-82D2FEF91C96}" Name="BasicComponents" PrjFilePath="BasicComponents\BasicComponents.plcproj" TmcFilePath="BasicComponents\BasicComponents.tmc" ReloadTmc="true" AmsPort="851" FileArchiveSettings="#x000e" CopyTmcToTarget="true" CopyTpyToTarget="false" SymbolicMapping="true">
|
<Project GUID="{4E62D9E7-436C-457D-8DC4-82D2FEF91C96}" Name="BasicComponents" PrjFilePath="BasicComponents\BasicComponents.plcproj" TmcFilePath="BasicComponents\BasicComponents.tmc" ReloadTmc="true" AmsPort="851" FileArchiveSettings="#x000e" CopyTmcToTarget="true" CopyTpyToTarget="false" SymbolicMapping="true">
|
||||||
<Instance Id="#x08502000" TcSmClass="TComPlcObjDef" KeepUnrestoredLinks="2" TmcHash="{5DBE1701-D5AF-C0A4-B386-82619480C86C}" TmcPath="PLC\PLC.tmc">
|
<Instance Id="#x08502000" TcSmClass="TComPlcObjDef" KeepUnrestoredLinks="2" TmcHash="{FB895001-23AB-2B17-4B12-BEB2F42468E3}" TmcPath="BasicComponents\BasicComponents.tmc">
|
||||||
<Name>BasicComponents Instance</Name>
|
<Name>BasicComponents Instance</Name>
|
||||||
<CLSID ClassFactory="TcPlc30">{08500001-0000-0000-F000-000000000064}</CLSID>
|
<CLSID ClassFactory="TcPlc30">{08500001-0000-0000-F000-000000000064}</CLSID>
|
||||||
<Vars VarGrpType="2" AreaNo="1">
|
<Vars VarGrpType="2" AreaNo="1">
|
||||||
|
|||||||
Binary file not shown.
@@ -21,7 +21,7 @@
|
|||||||
<GlobalVersionStructureIncluded>false</GlobalVersionStructureIncluded>
|
<GlobalVersionStructureIncluded>false</GlobalVersionStructureIncluded>
|
||||||
<Company>Heisig GmbH</Company>
|
<Company>Heisig GmbH</Company>
|
||||||
<Title>BaseComponents</Title>
|
<Title>BaseComponents</Title>
|
||||||
<ProjectVersion>1.1</ProjectVersion>
|
<ProjectVersion>1.2</ProjectVersion>
|
||||||
<DefaultNamespace>BC</DefaultNamespace>
|
<DefaultNamespace>BC</DefaultNamespace>
|
||||||
<Author>M.Heisig</Author>
|
<Author>M.Heisig</Author>
|
||||||
<Description>Basic components fb's (Valves, AI, AO, Motors, etc.)</Description>
|
<Description>Basic components fb's (Valves, AI, AO, Motors, etc.)</Description>
|
||||||
@@ -73,6 +73,12 @@
|
|||||||
<Compile Include="POUs\Components\AxisPTP\FB_AxisPTP.TcPOU">
|
<Compile Include="POUs\Components\AxisPTP\FB_AxisPTP.TcPOU">
|
||||||
<SubType>Code</SubType>
|
<SubType>Code</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
<Compile Include="POUs\Components\Controller\FB_Limit.TcPOU">
|
||||||
|
<SubType>Code</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="POUs\Components\Controller\FB_PI.TcPOU">
|
||||||
|
<SubType>Code</SubType>
|
||||||
|
</Compile>
|
||||||
<Compile Include="POUs\Components\EventListener\FB_EventListener.TcPOU">
|
<Compile Include="POUs\Components\EventListener\FB_EventListener.TcPOU">
|
||||||
<SubType>Code</SubType>
|
<SubType>Code</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
@@ -224,6 +230,7 @@
|
|||||||
<ExcludeFromBuild>true</ExcludeFromBuild>
|
<ExcludeFromBuild>true</ExcludeFromBuild>
|
||||||
</Folder>
|
</Folder>
|
||||||
<Folder Include="POUs\Components\Motor\Types" />
|
<Folder Include="POUs\Components\Motor\Types" />
|
||||||
|
<Folder Include="POUs\Components\Controller" />
|
||||||
<Folder Include="POUs\Components\Utilities" />
|
<Folder Include="POUs\Components\Utilities" />
|
||||||
<Folder Include="POUs\Components\Valves" />
|
<Folder Include="POUs\Components\Valves" />
|
||||||
<Folder Include="POUs\Components\Valves\Types" />
|
<Folder Include="POUs\Components\Valves\Types" />
|
||||||
@@ -283,7 +290,7 @@
|
|||||||
</PlaceholderReference>
|
</PlaceholderReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="PLC.tmc">
|
<None Include="BasicComponents.tmc">
|
||||||
<SubType>Content</SubType>
|
<SubType>Content</SubType>
|
||||||
</None>
|
</None>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
@@ -292,11 +299,6 @@
|
|||||||
<SubType>Content</SubType>
|
<SubType>Content</SubType>
|
||||||
</None>
|
</None>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
|
||||||
<None Include="BasicComponents.tmc">
|
|
||||||
<SubType>Content</SubType>
|
|
||||||
</None>
|
|
||||||
</ItemGroup>
|
|
||||||
<ProjectExtensions>
|
<ProjectExtensions>
|
||||||
<PlcProjectOptions>
|
<PlcProjectOptions>
|
||||||
<XmlArchive>
|
<XmlArchive>
|
||||||
|
|||||||
@@ -393,29 +393,18 @@ xError := _xError;]]></ST>
|
|||||||
<Method Name="M_Halt" Id="{f6e3b049-4121-4299-b0f5-55178ecb35c3}">
|
<Method Name="M_Halt" Id="{f6e3b049-4121-4299-b0f5-55178ecb35c3}">
|
||||||
<Declaration><![CDATA[METHOD M_Halt
|
<Declaration><![CDATA[METHOD M_Halt
|
||||||
VAR_OUTPUT
|
VAR_OUTPUT
|
||||||
eResultCode : E_SequenceResultCode;
|
|
||||||
eFailureCode : E_SequenceFailureCode;
|
|
||||||
END_VAR]]></Declaration>
|
END_VAR]]></Declaration>
|
||||||
<Implementation>
|
<Implementation>
|
||||||
<ST><![CDATA[IF _xBusy THEN
|
<ST><![CDATA[IF _xBusy THEN
|
||||||
_xExecuteHalt := TRUE;
|
_xExecuteHalt := TRUE;
|
||||||
eResultCode := E_SequenceResultCode.EXECUTING;
|
|
||||||
eFailureCode := E_SequenceFailureCode.NONE;
|
|
||||||
ELSE
|
|
||||||
eResultCode := E_SequenceResultCode.DONE;
|
|
||||||
eFailureCode := E_SequenceFailureCode.NONE;
|
|
||||||
END_IF]]></ST>
|
END_IF]]></ST>
|
||||||
</Implementation>
|
</Implementation>
|
||||||
</Method>
|
</Method>
|
||||||
<Method Name="M_Homing" Id="{816a1a43-38da-49f0-b902-c1027a6ba127}">
|
<Method Name="M_Homing" Id="{816a1a43-38da-49f0-b902-c1027a6ba127}">
|
||||||
<Declaration><![CDATA[METHOD M_Homing
|
<Declaration><![CDATA[METHOD M_Homing : BOOL
|
||||||
VAR_INPUT
|
VAR_INPUT
|
||||||
lrHomingPosition : LREAL;
|
lrHomingPosition : LREAL;
|
||||||
eHomingMode : MC_HomingMode := MC_HomingMode.MC_DefaultHoming;
|
eHomingMode : MC_HomingMode := MC_HomingMode.MC_DefaultHoming;
|
||||||
END_VAR
|
|
||||||
VAR_OUTPUT
|
|
||||||
eResultCode : E_SequenceResultCode;
|
|
||||||
eFailureCode : E_SequenceFailureCode;
|
|
||||||
END_VAR]]></Declaration>
|
END_VAR]]></Declaration>
|
||||||
<Implementation>
|
<Implementation>
|
||||||
<ST><![CDATA[IF (NOT _xBusy) AND _fbPower.Status THEN
|
<ST><![CDATA[IF (NOT _xBusy) AND _fbPower.Status THEN
|
||||||
@@ -423,79 +412,59 @@ END_VAR]]></Declaration>
|
|||||||
_lrHomingPos := lrHomingPosition;
|
_lrHomingPos := lrHomingPosition;
|
||||||
_eHomingMode := eHomingMode;
|
_eHomingMode := eHomingMode;
|
||||||
_xExecuteHoming := TRUE;
|
_xExecuteHoming := TRUE;
|
||||||
eResultCode := E_SequenceResultCode.EXECUTING;
|
M_Homing := TRUE;
|
||||||
eFailureCode := E_SequenceFailureCode.NONE;
|
|
||||||
ELSE
|
ELSE
|
||||||
eResultCode := E_SequenceResultCode.FAILED;
|
M_Homing := FALSE;
|
||||||
eFailureCode := E_SequenceFailureCode.OTHER;
|
|
||||||
END_IF]]></ST>
|
END_IF]]></ST>
|
||||||
</Implementation>
|
</Implementation>
|
||||||
</Method>
|
</Method>
|
||||||
<Method Name="M_MoveAbs" Id="{f67a4861-cdb0-4dd2-93c8-1ae9dbc9a9a6}">
|
<Method Name="M_MoveAbs" Id="{f67a4861-cdb0-4dd2-93c8-1ae9dbc9a9a6}">
|
||||||
<Declaration><![CDATA[METHOD M_MoveAbs
|
<Declaration><![CDATA[METHOD M_MoveAbs : BOOL;
|
||||||
VAR_INPUT
|
VAR_INPUT
|
||||||
lrTargetPos : LREAL;
|
lrTargetPos : LREAL;
|
||||||
END_VAR
|
|
||||||
VAR_OUTPUT
|
|
||||||
eResultCode : E_SequenceResultCode;
|
|
||||||
eFailureCode : E_SequenceFailureCode;
|
|
||||||
END_VAR]]></Declaration>
|
END_VAR]]></Declaration>
|
||||||
<Implementation>
|
<Implementation>
|
||||||
<ST><![CDATA[IF (NOT _xBusy) AND _fbPower.Status THEN
|
<ST><![CDATA[IF (NOT _xBusy) AND _fbPower.Status THEN
|
||||||
_xBusy := TRUE;
|
_xBusy := TRUE;
|
||||||
_lrTargetPosition := lrTargetPos;
|
_lrTargetPosition := lrTargetPos;
|
||||||
_xExecuteMoveAbs := TRUE;
|
_xExecuteMoveAbs := TRUE;
|
||||||
eResultCode := E_SequenceResultCode.EXECUTING;
|
M_MoveAbs := TRUE;
|
||||||
eFailureCode := E_SequenceFailureCode.NONE;
|
|
||||||
ELSE
|
ELSE
|
||||||
eResultCode := E_SequenceResultCode.FAILED;
|
M_MoveAbs := FALSE;
|
||||||
eFailureCode := E_SequenceFailureCode.OTHER;
|
|
||||||
END_IF
|
END_IF
|
||||||
]]></ST>
|
]]></ST>
|
||||||
</Implementation>
|
</Implementation>
|
||||||
</Method>
|
</Method>
|
||||||
<Method Name="M_MoveRel" Id="{51e5fe82-5e25-4de0-84c7-b4d6560c312f}">
|
<Method Name="M_MoveRel" Id="{51e5fe82-5e25-4de0-84c7-b4d6560c312f}">
|
||||||
<Declaration><![CDATA[METHOD M_MoveRel
|
<Declaration><![CDATA[METHOD M_MoveRel : BOOL;
|
||||||
VAR_INPUT
|
VAR_INPUT
|
||||||
lrRelDist : LREAL;
|
lrRelDist : LREAL;
|
||||||
END_VAR
|
|
||||||
VAR_OUTPUT
|
|
||||||
eResultCode : E_SequenceResultCode;
|
|
||||||
eFailureCode : E_SequenceFailureCode;
|
|
||||||
END_VAR]]></Declaration>
|
END_VAR]]></Declaration>
|
||||||
<Implementation>
|
<Implementation>
|
||||||
<ST><![CDATA[IF (NOT _xBusy) AND _fbPower.Status THEN
|
<ST><![CDATA[IF (NOT _xBusy) AND _fbPower.Status THEN
|
||||||
_xBusy := TRUE;
|
_xBusy := TRUE;
|
||||||
_lrRelativeDistance := lrRelDist;
|
_lrRelativeDistance := lrRelDist;
|
||||||
_xExecuteMoveRel:= TRUE;
|
_xExecuteMoveRel:= TRUE;
|
||||||
eResultCode := E_SequenceResultCode.EXECUTING;
|
M_MoveRel := TRUE;
|
||||||
eFailureCode := E_SequenceFailureCode.NONE;
|
|
||||||
ELSE
|
ELSE
|
||||||
eResultCode := E_SequenceResultCode.FAILED;
|
M_MoveRel := FALSE;
|
||||||
eFailureCode := E_SequenceFailureCode.OTHER;
|
|
||||||
END_IF]]></ST>
|
END_IF]]></ST>
|
||||||
</Implementation>
|
</Implementation>
|
||||||
</Method>
|
</Method>
|
||||||
<Method Name="M_MoveVelocity" Id="{fd4ad471-f522-45f2-a138-ebe509907cf6}">
|
<Method Name="M_MoveVelocity" Id="{fd4ad471-f522-45f2-a138-ebe509907cf6}">
|
||||||
<Declaration><![CDATA[METHOD M_MoveVelocity
|
<Declaration><![CDATA[METHOD M_MoveVelocity : BOOL;
|
||||||
VAR_INPUT
|
VAR_INPUT
|
||||||
eDirection : MC_Direction := MC_Direction.MC_Positive_Direction;
|
eDirection : MC_Direction := MC_Direction.MC_Positive_Direction;
|
||||||
END_VAR
|
END_VAR
|
||||||
VAR_OUTPUT
|
|
||||||
eResultCode : E_SequenceResultCode;
|
|
||||||
eFailureCode : E_SequenceFailureCode;
|
|
||||||
END_VAR
|
|
||||||
]]></Declaration>
|
]]></Declaration>
|
||||||
<Implementation>
|
<Implementation>
|
||||||
<ST><![CDATA[IF (NOT _xBusy) AND _fbPower.Status THEN
|
<ST><![CDATA[IF (NOT _xBusy) AND _fbPower.Status THEN
|
||||||
_xBusy := TRUE;
|
_xBusy := TRUE;
|
||||||
_xExecuteMoveVelocity := TRUE;
|
_xExecuteMoveVelocity := TRUE;
|
||||||
_eMoveVelDirection := eDirection;
|
_eMoveVelDirection := eDirection;
|
||||||
eResultCode := E_SequenceResultCode.EXECUTING;
|
M_MoveVelocity := TRUE;
|
||||||
eFailureCode := E_SequenceFailureCode.NONE;
|
|
||||||
ELSE
|
ELSE
|
||||||
eResultCode := E_SequenceResultCode.FAILED;
|
M_MoveVelocity := FALSE;
|
||||||
eFailureCode := E_SequenceFailureCode.OTHER;
|
|
||||||
END_IF
|
END_IF
|
||||||
]]></ST>
|
]]></ST>
|
||||||
</Implementation>
|
</Implementation>
|
||||||
|
|||||||
32
BasicComponents/POUs/Components/Controller/FB_Limit.TcPOU
Normal file
32
BasicComponents/POUs/Components/Controller/FB_Limit.TcPOU
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<TcPlcObject Version="1.1.0.1">
|
||||||
|
<POU Name="FB_Limit" Id="{b96bc001-8221-07a5-2342-3de34e6faf1f}" SpecialFunc="None">
|
||||||
|
<Declaration><![CDATA[FUNCTION_BLOCK FB_Limit
|
||||||
|
VAR_INPUT
|
||||||
|
rIn : REAL;
|
||||||
|
rMin : REAL;
|
||||||
|
rMax : REAL;
|
||||||
|
END_VAR
|
||||||
|
VAR_OUTPUT
|
||||||
|
rOut : REAL;
|
||||||
|
xClampedUpper : BOOL;
|
||||||
|
xClampedLower : BOOL;
|
||||||
|
END_VAR
|
||||||
|
VAR
|
||||||
|
END_VAR
|
||||||
|
]]></Declaration>
|
||||||
|
<Implementation>
|
||||||
|
<ST><![CDATA[IF rIn > rMax THEN
|
||||||
|
rOut := rMax;
|
||||||
|
xClampedUpper := TRUE;
|
||||||
|
ELSIF rIn < rMin THEN
|
||||||
|
rOut := rMin;
|
||||||
|
xClampedLower := TRUE;
|
||||||
|
ELSE
|
||||||
|
rOut := rIn;
|
||||||
|
xClampedUpper := FALSE;
|
||||||
|
xClampedLower := FALSE;
|
||||||
|
END_IF]]></ST>
|
||||||
|
</Implementation>
|
||||||
|
</POU>
|
||||||
|
</TcPlcObject>
|
||||||
82
BasicComponents/POUs/Components/Controller/FB_PI.TcPOU
Normal file
82
BasicComponents/POUs/Components/Controller/FB_PI.TcPOU
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<TcPlcObject Version="1.1.0.1">
|
||||||
|
<POU Name="FB_PI" Id="{d504557e-7fd7-4784-a00a-5d7d1bed0c95}" SpecialFunc="None">
|
||||||
|
<Declaration><![CDATA[FUNCTION_BLOCK FB_PI
|
||||||
|
VAR_INPUT
|
||||||
|
rSP : REAL;
|
||||||
|
rPV : REAL;
|
||||||
|
rKp : REAL;
|
||||||
|
rTn : REAL;
|
||||||
|
|
||||||
|
xEnable : BOOL;
|
||||||
|
xSaturatedUpper : BOOL := FALSE;
|
||||||
|
xSaturatedLower : BOOL := FALSE;
|
||||||
|
END_VAR
|
||||||
|
VAR_OUTPUT
|
||||||
|
rMV : REAL;
|
||||||
|
END_VAR
|
||||||
|
VAR
|
||||||
|
|
||||||
|
_rError : REAL := 0.0;
|
||||||
|
_rIntegral : REAL := 0.0;
|
||||||
|
_rProportinal : REAL := 0.0;
|
||||||
|
|
||||||
|
_rDeltaIntegral : REAL := 0.0;
|
||||||
|
|
||||||
|
_fbGetCurTaskIdx : GETCURTASKINDEX;
|
||||||
|
_rT : REAL;
|
||||||
|
|
||||||
|
_xFirstCylce : BOOL := TRUE;
|
||||||
|
END_VAR
|
||||||
|
]]></Declaration>
|
||||||
|
<Implementation>
|
||||||
|
<ST><![CDATA[IF _xFirstCylce THEN
|
||||||
|
_xFirstCylce := FALSE;
|
||||||
|
|
||||||
|
// Get current task time
|
||||||
|
_fbGetCurTaskIdx();
|
||||||
|
_rT := LREAL_TO_REAL(UDINT_TO_LREAL(TwinCAT_SystemInfoVarList._TASKInfo[_fbGetCurTaskIdx.index].CycleTime) * 10E-5);
|
||||||
|
END_IF
|
||||||
|
|
||||||
|
|
||||||
|
IF xEnable THEN
|
||||||
|
_rError := rSP - rPV;
|
||||||
|
ELSE
|
||||||
|
_rError := 0.0;
|
||||||
|
_rIntegral := 0.0;
|
||||||
|
rMV := 0.0;
|
||||||
|
RETURN;
|
||||||
|
END_IF
|
||||||
|
|
||||||
|
// Calculate proportinal part
|
||||||
|
_rProportinal := rKp * _rError;
|
||||||
|
|
||||||
|
// Calculate controller output
|
||||||
|
rMV := _rProportinal + _rIntegral;
|
||||||
|
|
||||||
|
// Calculate integral for this step
|
||||||
|
IF rTn <> 0 THEN
|
||||||
|
_rDeltaIntegral := (rKp * _rT / rTn) * _rError;
|
||||||
|
ELSE
|
||||||
|
_rDeltaIntegral := 0;
|
||||||
|
END_IF
|
||||||
|
|
||||||
|
// Only add new integral part if we are going away from the upper or lower bound
|
||||||
|
IF (xSaturatedUpper AND (_rDeltaIntegral > 0.0)) THEN
|
||||||
|
_rDeltaIntegral := 0.0;
|
||||||
|
END_IF
|
||||||
|
|
||||||
|
IF (xSaturatedLower AND (_rDeltaIntegral < 0.0)) THEN
|
||||||
|
_rDeltaIntegral := 0.0;
|
||||||
|
END_IF
|
||||||
|
|
||||||
|
// Calculate integral part
|
||||||
|
_rIntegral := _rIntegral + _rDeltaIntegral;
|
||||||
|
|
||||||
|
// Reset integral with deactivated integral time
|
||||||
|
IF (rTn = 0.0) AND (_rIntegral <> 0) THEN
|
||||||
|
_rIntegral := 0.0;
|
||||||
|
END_IF]]></ST>
|
||||||
|
</Implementation>
|
||||||
|
</POU>
|
||||||
|
</TcPlcObject>
|
||||||
Reference in New Issue
Block a user