Merge branch 'release/1.2'
This commit is contained in:
@@ -131,12 +131,12 @@
|
||||
</Task>
|
||||
</Tasks>
|
||||
<TypeSystem>
|
||||
<AdditionalTmcFile Name="BaseComponents" File="BaseComponents.tmc"/>
|
||||
<AdditionalTmcFile Name="Events" File="Events.tmc"/>
|
||||
</TypeSystem>
|
||||
</System>
|
||||
<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">
|
||||
<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>
|
||||
<CLSID ClassFactory="TcPlc30">{08500001-0000-0000-F000-000000000064}</CLSID>
|
||||
<Vars VarGrpType="2" AreaNo="1">
|
||||
|
||||
Binary file not shown.
@@ -21,7 +21,7 @@
|
||||
<GlobalVersionStructureIncluded>false</GlobalVersionStructureIncluded>
|
||||
<Company>Heisig GmbH</Company>
|
||||
<Title>BaseComponents</Title>
|
||||
<ProjectVersion>1.1</ProjectVersion>
|
||||
<ProjectVersion>1.2</ProjectVersion>
|
||||
<DefaultNamespace>BC</DefaultNamespace>
|
||||
<Author>M.Heisig</Author>
|
||||
<Description>Basic components fb's (Valves, AI, AO, Motors, etc.)</Description>
|
||||
@@ -73,6 +73,12 @@
|
||||
<Compile Include="POUs\Components\AxisPTP\FB_AxisPTP.TcPOU">
|
||||
<SubType>Code</SubType>
|
||||
</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">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
@@ -224,6 +230,7 @@
|
||||
<ExcludeFromBuild>true</ExcludeFromBuild>
|
||||
</Folder>
|
||||
<Folder Include="POUs\Components\Motor\Types" />
|
||||
<Folder Include="POUs\Components\Controller" />
|
||||
<Folder Include="POUs\Components\Utilities" />
|
||||
<Folder Include="POUs\Components\Valves" />
|
||||
<Folder Include="POUs\Components\Valves\Types" />
|
||||
@@ -283,7 +290,7 @@
|
||||
</PlaceholderReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="PLC.tmc">
|
||||
<None Include="BasicComponents.tmc">
|
||||
<SubType>Content</SubType>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
@@ -292,11 +299,6 @@
|
||||
<SubType>Content</SubType>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="BasicComponents.tmc">
|
||||
<SubType>Content</SubType>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
<ProjectExtensions>
|
||||
<PlcProjectOptions>
|
||||
<XmlArchive>
|
||||
|
||||
@@ -393,29 +393,18 @@ xError := _xError;]]></ST>
|
||||
<Method Name="M_Halt" Id="{f6e3b049-4121-4299-b0f5-55178ecb35c3}">
|
||||
<Declaration><![CDATA[METHOD M_Halt
|
||||
VAR_OUTPUT
|
||||
eResultCode : E_SequenceResultCode;
|
||||
eFailureCode : E_SequenceFailureCode;
|
||||
END_VAR]]></Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[IF _xBusy THEN
|
||||
_xExecuteHalt := TRUE;
|
||||
eResultCode := E_SequenceResultCode.EXECUTING;
|
||||
eFailureCode := E_SequenceFailureCode.NONE;
|
||||
ELSE
|
||||
eResultCode := E_SequenceResultCode.DONE;
|
||||
eFailureCode := E_SequenceFailureCode.NONE;
|
||||
END_IF]]></ST>
|
||||
</Implementation>
|
||||
</Method>
|
||||
<Method Name="M_Homing" Id="{816a1a43-38da-49f0-b902-c1027a6ba127}">
|
||||
<Declaration><![CDATA[METHOD M_Homing
|
||||
<Declaration><![CDATA[METHOD M_Homing : BOOL
|
||||
VAR_INPUT
|
||||
lrHomingPosition : LREAL;
|
||||
eHomingMode : MC_HomingMode := MC_HomingMode.MC_DefaultHoming;
|
||||
END_VAR
|
||||
VAR_OUTPUT
|
||||
eResultCode : E_SequenceResultCode;
|
||||
eFailureCode : E_SequenceFailureCode;
|
||||
END_VAR]]></Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[IF (NOT _xBusy) AND _fbPower.Status THEN
|
||||
@@ -423,79 +412,59 @@ END_VAR]]></Declaration>
|
||||
_lrHomingPos := lrHomingPosition;
|
||||
_eHomingMode := eHomingMode;
|
||||
_xExecuteHoming := TRUE;
|
||||
eResultCode := E_SequenceResultCode.EXECUTING;
|
||||
eFailureCode := E_SequenceFailureCode.NONE;
|
||||
M_Homing := TRUE;
|
||||
ELSE
|
||||
eResultCode := E_SequenceResultCode.FAILED;
|
||||
eFailureCode := E_SequenceFailureCode.OTHER;
|
||||
M_Homing := FALSE;
|
||||
END_IF]]></ST>
|
||||
</Implementation>
|
||||
</Method>
|
||||
<Method Name="M_MoveAbs" Id="{f67a4861-cdb0-4dd2-93c8-1ae9dbc9a9a6}">
|
||||
<Declaration><![CDATA[METHOD M_MoveAbs
|
||||
<Declaration><![CDATA[METHOD M_MoveAbs : BOOL;
|
||||
VAR_INPUT
|
||||
lrTargetPos : LREAL;
|
||||
END_VAR
|
||||
VAR_OUTPUT
|
||||
eResultCode : E_SequenceResultCode;
|
||||
eFailureCode : E_SequenceFailureCode;
|
||||
END_VAR]]></Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[IF (NOT _xBusy) AND _fbPower.Status THEN
|
||||
_xBusy := TRUE;
|
||||
_lrTargetPosition := lrTargetPos;
|
||||
_xExecuteMoveAbs := TRUE;
|
||||
eResultCode := E_SequenceResultCode.EXECUTING;
|
||||
eFailureCode := E_SequenceFailureCode.NONE;
|
||||
M_MoveAbs := TRUE;
|
||||
ELSE
|
||||
eResultCode := E_SequenceResultCode.FAILED;
|
||||
eFailureCode := E_SequenceFailureCode.OTHER;
|
||||
M_MoveAbs := FALSE;
|
||||
END_IF
|
||||
]]></ST>
|
||||
</Implementation>
|
||||
</Method>
|
||||
<Method Name="M_MoveRel" Id="{51e5fe82-5e25-4de0-84c7-b4d6560c312f}">
|
||||
<Declaration><![CDATA[METHOD M_MoveRel
|
||||
<Declaration><![CDATA[METHOD M_MoveRel : BOOL;
|
||||
VAR_INPUT
|
||||
lrRelDist : LREAL;
|
||||
END_VAR
|
||||
VAR_OUTPUT
|
||||
eResultCode : E_SequenceResultCode;
|
||||
eFailureCode : E_SequenceFailureCode;
|
||||
END_VAR]]></Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[IF (NOT _xBusy) AND _fbPower.Status THEN
|
||||
_xBusy := TRUE;
|
||||
_lrRelativeDistance := lrRelDist;
|
||||
_xExecuteMoveRel:= TRUE;
|
||||
eResultCode := E_SequenceResultCode.EXECUTING;
|
||||
eFailureCode := E_SequenceFailureCode.NONE;
|
||||
M_MoveRel := TRUE;
|
||||
ELSE
|
||||
eResultCode := E_SequenceResultCode.FAILED;
|
||||
eFailureCode := E_SequenceFailureCode.OTHER;
|
||||
M_MoveRel := FALSE;
|
||||
END_IF]]></ST>
|
||||
</Implementation>
|
||||
</Method>
|
||||
<Method Name="M_MoveVelocity" Id="{fd4ad471-f522-45f2-a138-ebe509907cf6}">
|
||||
<Declaration><![CDATA[METHOD M_MoveVelocity
|
||||
<Declaration><![CDATA[METHOD M_MoveVelocity : BOOL;
|
||||
VAR_INPUT
|
||||
eDirection : MC_Direction := MC_Direction.MC_Positive_Direction;
|
||||
END_VAR
|
||||
VAR_OUTPUT
|
||||
eResultCode : E_SequenceResultCode;
|
||||
eFailureCode : E_SequenceFailureCode;
|
||||
END_VAR
|
||||
]]></Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[IF (NOT _xBusy) AND _fbPower.Status THEN
|
||||
_xBusy := TRUE;
|
||||
_xExecuteMoveVelocity := TRUE;
|
||||
_eMoveVelDirection := eDirection;
|
||||
eResultCode := E_SequenceResultCode.EXECUTING;
|
||||
eFailureCode := E_SequenceFailureCode.NONE;
|
||||
M_MoveVelocity := TRUE;
|
||||
ELSE
|
||||
eResultCode := E_SequenceResultCode.FAILED;
|
||||
eFailureCode := E_SequenceFailureCode.OTHER;
|
||||
M_MoveVelocity := FALSE;
|
||||
END_IF
|
||||
]]></ST>
|
||||
</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