Merge branch 'release/2.0.0'
This commit is contained in:
@@ -136,357 +136,9 @@
|
||||
</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="{CC57F9F8-FD4D-8A3D-E8DE-220E6C379AE4}" TmcPath="BasicComponents\BasicComponents.tmc">
|
||||
<Instance Id="#x08502000" TcSmClass="TComPlcObjDef" KeepUnrestoredLinks="2" TmcHash="{F7EEFF71-0952-DE86-79DA-785827446F08}" TmcPath="BasicComponents\BasicComponents.tmc">
|
||||
<Name>BasicComponents Instance</Name>
|
||||
<CLSID ClassFactory="TcPlc30">{08500001-0000-0000-F000-000000000064}</CLSID>
|
||||
<Vars VarGrpType="1">
|
||||
<Name>PlcTask Inputs</Name>
|
||||
<Var>
|
||||
<Name>PRG_MAIN._fbAnalogInputTest._fbAIErrorLowOn.iAnalogValue</Name>
|
||||
<Comment><![CDATA[ Analog input value]]></Comment>
|
||||
<Type>INT</Type>
|
||||
</Var>
|
||||
<Var>
|
||||
<Name>PRG_MAIN._fbAnalogInputTest._fbAIErrorLowOn.xUnderrange</Name>
|
||||
<Comment><![CDATA[ Card has detected an open circuit]]></Comment>
|
||||
<Type>BOOL</Type>
|
||||
</Var>
|
||||
<Var>
|
||||
<Name>PRG_MAIN._fbAnalogInputTest._fbAIErrorLowOn.xOverrange</Name>
|
||||
<Comment><![CDATA[ Input is overloaded]]></Comment>
|
||||
<Type>BOOL</Type>
|
||||
</Var>
|
||||
<Var>
|
||||
<Name>PRG_MAIN._fbAnalogInputTest._fbAIErrorLowOn.xErrorCard</Name>
|
||||
<Comment><![CDATA[ Input card has error
|
||||
EL30xx also sets this if an underrange or overrange error is present]]></Comment>
|
||||
<Type>BOOL</Type>
|
||||
</Var>
|
||||
<Var>
|
||||
<Name>PRG_MAIN._fbAnalogInputTest._fbAIWarningLowOn.iAnalogValue</Name>
|
||||
<Comment><![CDATA[ Analog input value]]></Comment>
|
||||
<Type>INT</Type>
|
||||
</Var>
|
||||
<Var>
|
||||
<Name>PRG_MAIN._fbAnalogInputTest._fbAIWarningLowOn.xUnderrange</Name>
|
||||
<Comment><![CDATA[ Card has detected an open circuit]]></Comment>
|
||||
<Type>BOOL</Type>
|
||||
</Var>
|
||||
<Var>
|
||||
<Name>PRG_MAIN._fbAnalogInputTest._fbAIWarningLowOn.xOverrange</Name>
|
||||
<Comment><![CDATA[ Input is overloaded]]></Comment>
|
||||
<Type>BOOL</Type>
|
||||
</Var>
|
||||
<Var>
|
||||
<Name>PRG_MAIN._fbAnalogInputTest._fbAIWarningLowOn.xErrorCard</Name>
|
||||
<Comment><![CDATA[ Input card has error
|
||||
EL30xx also sets this if an underrange or overrange error is present]]></Comment>
|
||||
<Type>BOOL</Type>
|
||||
</Var>
|
||||
<Var>
|
||||
<Name>PRG_MAIN._fbAnalogInputTest._fbAIWarningHighOn.iAnalogValue</Name>
|
||||
<Comment><![CDATA[ Analog input value]]></Comment>
|
||||
<Type>INT</Type>
|
||||
</Var>
|
||||
<Var>
|
||||
<Name>PRG_MAIN._fbAnalogInputTest._fbAIWarningHighOn.xUnderrange</Name>
|
||||
<Comment><![CDATA[ Card has detected an open circuit]]></Comment>
|
||||
<Type>BOOL</Type>
|
||||
</Var>
|
||||
<Var>
|
||||
<Name>PRG_MAIN._fbAnalogInputTest._fbAIWarningHighOn.xOverrange</Name>
|
||||
<Comment><![CDATA[ Input is overloaded]]></Comment>
|
||||
<Type>BOOL</Type>
|
||||
</Var>
|
||||
<Var>
|
||||
<Name>PRG_MAIN._fbAnalogInputTest._fbAIWarningHighOn.xErrorCard</Name>
|
||||
<Comment><![CDATA[ Input card has error
|
||||
EL30xx also sets this if an underrange or overrange error is present]]></Comment>
|
||||
<Type>BOOL</Type>
|
||||
</Var>
|
||||
<Var>
|
||||
<Name>PRG_MAIN._fbAnalogInputTest._fbAIErrorHighOn.iAnalogValue</Name>
|
||||
<Comment><![CDATA[ Analog input value]]></Comment>
|
||||
<Type>INT</Type>
|
||||
</Var>
|
||||
<Var>
|
||||
<Name>PRG_MAIN._fbAnalogInputTest._fbAIErrorHighOn.xUnderrange</Name>
|
||||
<Comment><![CDATA[ Card has detected an open circuit]]></Comment>
|
||||
<Type>BOOL</Type>
|
||||
</Var>
|
||||
<Var>
|
||||
<Name>PRG_MAIN._fbAnalogInputTest._fbAIErrorHighOn.xOverrange</Name>
|
||||
<Comment><![CDATA[ Input is overloaded]]></Comment>
|
||||
<Type>BOOL</Type>
|
||||
</Var>
|
||||
<Var>
|
||||
<Name>PRG_MAIN._fbAnalogInputTest._fbAIErrorHighOn.xErrorCard</Name>
|
||||
<Comment><![CDATA[ Input card has error
|
||||
EL30xx also sets this if an underrange or overrange error is present]]></Comment>
|
||||
<Type>BOOL</Type>
|
||||
</Var>
|
||||
<Var>
|
||||
<Name>PRG_MAIN._fbAnalogInputTest._fbAIOverrangeOn.iAnalogValue</Name>
|
||||
<Comment><![CDATA[ Analog input value]]></Comment>
|
||||
<Type>INT</Type>
|
||||
</Var>
|
||||
<Var>
|
||||
<Name>PRG_MAIN._fbAnalogInputTest._fbAIOverrangeOn.xUnderrange</Name>
|
||||
<Comment><![CDATA[ Card has detected an open circuit]]></Comment>
|
||||
<Type>BOOL</Type>
|
||||
</Var>
|
||||
<Var>
|
||||
<Name>PRG_MAIN._fbAnalogInputTest._fbAIOverrangeOn.xOverrange</Name>
|
||||
<Comment><![CDATA[ Input is overloaded]]></Comment>
|
||||
<Type>BOOL</Type>
|
||||
</Var>
|
||||
<Var>
|
||||
<Name>PRG_MAIN._fbAnalogInputTest._fbAIOverrangeOn.xErrorCard</Name>
|
||||
<Comment><![CDATA[ Input card has error
|
||||
EL30xx also sets this if an underrange or overrange error is present]]></Comment>
|
||||
<Type>BOOL</Type>
|
||||
</Var>
|
||||
<Var>
|
||||
<Name>PRG_MAIN._fbAnalogInputTest._fbAIUnderrangeOn.iAnalogValue</Name>
|
||||
<Comment><![CDATA[ Analog input value]]></Comment>
|
||||
<Type>INT</Type>
|
||||
</Var>
|
||||
<Var>
|
||||
<Name>PRG_MAIN._fbAnalogInputTest._fbAIUnderrangeOn.xUnderrange</Name>
|
||||
<Comment><![CDATA[ Card has detected an open circuit]]></Comment>
|
||||
<Type>BOOL</Type>
|
||||
</Var>
|
||||
<Var>
|
||||
<Name>PRG_MAIN._fbAnalogInputTest._fbAIUnderrangeOn.xOverrange</Name>
|
||||
<Comment><![CDATA[ Input is overloaded]]></Comment>
|
||||
<Type>BOOL</Type>
|
||||
</Var>
|
||||
<Var>
|
||||
<Name>PRG_MAIN._fbAnalogInputTest._fbAIUnderrangeOn.xErrorCard</Name>
|
||||
<Comment><![CDATA[ Input card has error
|
||||
EL30xx also sets this if an underrange or overrange error is present]]></Comment>
|
||||
<Type>BOOL</Type>
|
||||
</Var>
|
||||
<Var>
|
||||
<Name>PRG_MAIN._fbAnalogInputTest._fbAIErrorLowOff.iAnalogValue</Name>
|
||||
<Comment><![CDATA[ Analog input value]]></Comment>
|
||||
<Type>INT</Type>
|
||||
</Var>
|
||||
<Var>
|
||||
<Name>PRG_MAIN._fbAnalogInputTest._fbAIErrorLowOff.xUnderrange</Name>
|
||||
<Comment><![CDATA[ Card has detected an open circuit]]></Comment>
|
||||
<Type>BOOL</Type>
|
||||
</Var>
|
||||
<Var>
|
||||
<Name>PRG_MAIN._fbAnalogInputTest._fbAIErrorLowOff.xOverrange</Name>
|
||||
<Comment><![CDATA[ Input is overloaded]]></Comment>
|
||||
<Type>BOOL</Type>
|
||||
</Var>
|
||||
<Var>
|
||||
<Name>PRG_MAIN._fbAnalogInputTest._fbAIErrorLowOff.xErrorCard</Name>
|
||||
<Comment><![CDATA[ Input card has error
|
||||
EL30xx also sets this if an underrange or overrange error is present]]></Comment>
|
||||
<Type>BOOL</Type>
|
||||
</Var>
|
||||
<Var>
|
||||
<Name>PRG_MAIN._fbAnalogInputTest._fbAIWarningLowOff.iAnalogValue</Name>
|
||||
<Comment><![CDATA[ Analog input value]]></Comment>
|
||||
<Type>INT</Type>
|
||||
</Var>
|
||||
<Var>
|
||||
<Name>PRG_MAIN._fbAnalogInputTest._fbAIWarningLowOff.xUnderrange</Name>
|
||||
<Comment><![CDATA[ Card has detected an open circuit]]></Comment>
|
||||
<Type>BOOL</Type>
|
||||
</Var>
|
||||
<Var>
|
||||
<Name>PRG_MAIN._fbAnalogInputTest._fbAIWarningLowOff.xOverrange</Name>
|
||||
<Comment><![CDATA[ Input is overloaded]]></Comment>
|
||||
<Type>BOOL</Type>
|
||||
</Var>
|
||||
<Var>
|
||||
<Name>PRG_MAIN._fbAnalogInputTest._fbAIWarningLowOff.xErrorCard</Name>
|
||||
<Comment><![CDATA[ Input card has error
|
||||
EL30xx also sets this if an underrange or overrange error is present]]></Comment>
|
||||
<Type>BOOL</Type>
|
||||
</Var>
|
||||
<Var>
|
||||
<Name>PRG_MAIN._fbAnalogInputTest._fbAIWarningHighOff.iAnalogValue</Name>
|
||||
<Comment><![CDATA[ Analog input value]]></Comment>
|
||||
<Type>INT</Type>
|
||||
</Var>
|
||||
<Var>
|
||||
<Name>PRG_MAIN._fbAnalogInputTest._fbAIWarningHighOff.xUnderrange</Name>
|
||||
<Comment><![CDATA[ Card has detected an open circuit]]></Comment>
|
||||
<Type>BOOL</Type>
|
||||
</Var>
|
||||
<Var>
|
||||
<Name>PRG_MAIN._fbAnalogInputTest._fbAIWarningHighOff.xOverrange</Name>
|
||||
<Comment><![CDATA[ Input is overloaded]]></Comment>
|
||||
<Type>BOOL</Type>
|
||||
</Var>
|
||||
<Var>
|
||||
<Name>PRG_MAIN._fbAnalogInputTest._fbAIWarningHighOff.xErrorCard</Name>
|
||||
<Comment><![CDATA[ Input card has error
|
||||
EL30xx also sets this if an underrange or overrange error is present]]></Comment>
|
||||
<Type>BOOL</Type>
|
||||
</Var>
|
||||
<Var>
|
||||
<Name>PRG_MAIN._fbAnalogInputTest._fbAIErrorHighOff.iAnalogValue</Name>
|
||||
<Comment><![CDATA[ Analog input value]]></Comment>
|
||||
<Type>INT</Type>
|
||||
</Var>
|
||||
<Var>
|
||||
<Name>PRG_MAIN._fbAnalogInputTest._fbAIErrorHighOff.xUnderrange</Name>
|
||||
<Comment><![CDATA[ Card has detected an open circuit]]></Comment>
|
||||
<Type>BOOL</Type>
|
||||
</Var>
|
||||
<Var>
|
||||
<Name>PRG_MAIN._fbAnalogInputTest._fbAIErrorHighOff.xOverrange</Name>
|
||||
<Comment><![CDATA[ Input is overloaded]]></Comment>
|
||||
<Type>BOOL</Type>
|
||||
</Var>
|
||||
<Var>
|
||||
<Name>PRG_MAIN._fbAnalogInputTest._fbAIErrorHighOff.xErrorCard</Name>
|
||||
<Comment><![CDATA[ Input card has error
|
||||
EL30xx also sets this if an underrange or overrange error is present]]></Comment>
|
||||
<Type>BOOL</Type>
|
||||
</Var>
|
||||
<Var>
|
||||
<Name>PRG_MAIN._fbAnalogInputTest._fbAIUnderrangeOff.iAnalogValue</Name>
|
||||
<Comment><![CDATA[ Analog input value]]></Comment>
|
||||
<Type>INT</Type>
|
||||
</Var>
|
||||
<Var>
|
||||
<Name>PRG_MAIN._fbAnalogInputTest._fbAIUnderrangeOff.xUnderrange</Name>
|
||||
<Comment><![CDATA[ Card has detected an open circuit]]></Comment>
|
||||
<Type>BOOL</Type>
|
||||
</Var>
|
||||
<Var>
|
||||
<Name>PRG_MAIN._fbAnalogInputTest._fbAIUnderrangeOff.xOverrange</Name>
|
||||
<Comment><![CDATA[ Input is overloaded]]></Comment>
|
||||
<Type>BOOL</Type>
|
||||
</Var>
|
||||
<Var>
|
||||
<Name>PRG_MAIN._fbAnalogInputTest._fbAIUnderrangeOff.xErrorCard</Name>
|
||||
<Comment><![CDATA[ Input card has error
|
||||
EL30xx also sets this if an underrange or overrange error is present]]></Comment>
|
||||
<Type>BOOL</Type>
|
||||
</Var>
|
||||
<Var>
|
||||
<Name>PRG_MAIN._fbAnalogInputTest._fbAIOverrangeOff.iAnalogValue</Name>
|
||||
<Comment><![CDATA[ Analog input value]]></Comment>
|
||||
<Type>INT</Type>
|
||||
</Var>
|
||||
<Var>
|
||||
<Name>PRG_MAIN._fbAnalogInputTest._fbAIOverrangeOff.xUnderrange</Name>
|
||||
<Comment><![CDATA[ Card has detected an open circuit]]></Comment>
|
||||
<Type>BOOL</Type>
|
||||
</Var>
|
||||
<Var>
|
||||
<Name>PRG_MAIN._fbAnalogInputTest._fbAIOverrangeOff.xOverrange</Name>
|
||||
<Comment><![CDATA[ Input is overloaded]]></Comment>
|
||||
<Type>BOOL</Type>
|
||||
</Var>
|
||||
<Var>
|
||||
<Name>PRG_MAIN._fbAnalogInputTest._fbAIOverrangeOff.xErrorCard</Name>
|
||||
<Comment><![CDATA[ Input card has error
|
||||
EL30xx also sets this if an underrange or overrange error is present]]></Comment>
|
||||
<Type>BOOL</Type>
|
||||
</Var>
|
||||
<Var>
|
||||
<Name>PRG_MAIN._fbValve_TimeoutTestOpen._fbValveTimeout.xOpenFeedback</Name>
|
||||
<Type>BOOL</Type>
|
||||
</Var>
|
||||
<Var>
|
||||
<Name>PRG_MAIN._fbValve_TimeoutTestOpen._fbValveTimeout.xCloseFeedback</Name>
|
||||
<Type>BOOL</Type>
|
||||
</Var>
|
||||
<Var>
|
||||
<Name>PRG_MAIN._fbValve_TimeoutTestClose._fbValveTimeout.xOpenFeedback</Name>
|
||||
<Type>BOOL</Type>
|
||||
</Var>
|
||||
<Var>
|
||||
<Name>PRG_MAIN._fbValve_TimeoutTestClose._fbValveTimeout.xCloseFeedback</Name>
|
||||
<Type>BOOL</Type>
|
||||
</Var>
|
||||
<Var>
|
||||
<Name>PRG_MAIN._fbValve_TimoutTriggerOpen._fbValveTimeout.xOpenFeedback</Name>
|
||||
<Type>BOOL</Type>
|
||||
</Var>
|
||||
<Var>
|
||||
<Name>PRG_MAIN._fbValve_TimoutTriggerOpen._fbValveTimeout.xCloseFeedback</Name>
|
||||
<Type>BOOL</Type>
|
||||
</Var>
|
||||
<Var>
|
||||
<Name>PRG_MAIN._fbValve_TimoutTriggerClose._fbValveTimeout.xOpenFeedback</Name>
|
||||
<Type>BOOL</Type>
|
||||
</Var>
|
||||
<Var>
|
||||
<Name>PRG_MAIN._fbValve_TimoutTriggerClose._fbValveTimeout.xCloseFeedback</Name>
|
||||
<Type>BOOL</Type>
|
||||
</Var>
|
||||
<Var>
|
||||
<Name>PRG_MAIN._fbValveTestHMI._fbValveOC.xOpenFeedback</Name>
|
||||
<Type>BOOL</Type>
|
||||
</Var>
|
||||
<Var>
|
||||
<Name>PRG_MAIN._fbValveTestHMI._fbValveOC.xCloseFeedback</Name>
|
||||
<Type>BOOL</Type>
|
||||
</Var>
|
||||
</Vars>
|
||||
<Vars VarGrpType="2" AreaNo="1">
|
||||
<Name>PlcTask Outputs</Name>
|
||||
<Var>
|
||||
<Name>PRG_MAIN._fbValve_TimeoutTestOpen._fbValveTimeout.xOpenValve</Name>
|
||||
<Comment><![CDATA[ Use xOpenValve for normally closed valves]]></Comment>
|
||||
<Type>BOOL</Type>
|
||||
</Var>
|
||||
<Var>
|
||||
<Name>PRG_MAIN._fbValve_TimeoutTestOpen._fbValveTimeout.xCloseValve</Name>
|
||||
<Comment><![CDATA[ Use xCloseValve for normally open valves]]></Comment>
|
||||
<Type>BOOL</Type>
|
||||
</Var>
|
||||
<Var>
|
||||
<Name>PRG_MAIN._fbValve_TimeoutTestClose._fbValveTimeout.xOpenValve</Name>
|
||||
<Comment><![CDATA[ Use xOpenValve for normally closed valves]]></Comment>
|
||||
<Type>BOOL</Type>
|
||||
</Var>
|
||||
<Var>
|
||||
<Name>PRG_MAIN._fbValve_TimeoutTestClose._fbValveTimeout.xCloseValve</Name>
|
||||
<Comment><![CDATA[ Use xCloseValve for normally open valves]]></Comment>
|
||||
<Type>BOOL</Type>
|
||||
</Var>
|
||||
<Var>
|
||||
<Name>PRG_MAIN._fbValve_TimoutTriggerOpen._fbValveTimeout.xOpenValve</Name>
|
||||
<Comment><![CDATA[ Use xOpenValve for normally closed valves]]></Comment>
|
||||
<Type>BOOL</Type>
|
||||
</Var>
|
||||
<Var>
|
||||
<Name>PRG_MAIN._fbValve_TimoutTriggerOpen._fbValveTimeout.xCloseValve</Name>
|
||||
<Comment><![CDATA[ Use xCloseValve for normally open valves]]></Comment>
|
||||
<Type>BOOL</Type>
|
||||
</Var>
|
||||
<Var>
|
||||
<Name>PRG_MAIN._fbValve_TimoutTriggerClose._fbValveTimeout.xOpenValve</Name>
|
||||
<Comment><![CDATA[ Use xOpenValve for normally closed valves]]></Comment>
|
||||
<Type>BOOL</Type>
|
||||
</Var>
|
||||
<Var>
|
||||
<Name>PRG_MAIN._fbValve_TimoutTriggerClose._fbValveTimeout.xCloseValve</Name>
|
||||
<Comment><![CDATA[ Use xCloseValve for normally open valves]]></Comment>
|
||||
<Type>BOOL</Type>
|
||||
</Var>
|
||||
<Var>
|
||||
<Name>PRG_MAIN._fbValveTestHMI._fbValveOC.xOpenValve</Name>
|
||||
<Comment><![CDATA[ Use xOpenValve for normally closed valves]]></Comment>
|
||||
<Type>BOOL</Type>
|
||||
</Var>
|
||||
<Var>
|
||||
<Name>PRG_MAIN._fbValveTestHMI._fbValveOC.xCloseValve</Name>
|
||||
<Comment><![CDATA[ Use xCloseValve for normally open valves]]></Comment>
|
||||
<Type>BOOL</Type>
|
||||
</Var>
|
||||
</Vars>
|
||||
<Contexts>
|
||||
<Context>
|
||||
<Id>0</Id>
|
||||
|
||||
Binary file not shown.
@@ -21,7 +21,7 @@
|
||||
<GlobalVersionStructureIncluded>false</GlobalVersionStructureIncluded>
|
||||
<Company>Heisig GmbH</Company>
|
||||
<Title>BaseComponents</Title>
|
||||
<ProjectVersion>1.3.4</ProjectVersion>
|
||||
<ProjectVersion>2.0.0</ProjectVersion>
|
||||
<DefaultNamespace>BC</DefaultNamespace>
|
||||
<Author>M.Heisig</Author>
|
||||
<Description>Basic components fb's (Valves, AI, AO, Motors, etc.)</Description>
|
||||
@@ -45,212 +45,231 @@
|
||||
</SelectedLibraryCategories>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="PlcTask.TcTTO">
|
||||
<Compile Include="Components\Analog\DUTs\ST_AnalogInput_IO.TcDUT">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="POUs\Components\Analog\FB_AnalogInput.TcPOU">
|
||||
<Compile Include="Components\Analog\DUTs\ST_AnalogOutput_IO.TcDUT">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="POUs\Components\Analog\FB_AnalogOutput.TcPOU">
|
||||
<Compile Include="Components\Analog\DUTs\ST_ANALOG_EW_CONFIG.TcDUT">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="POUs\Components\Analog\Types\ST_ANALOG_EW_CONFIG.TcDUT">
|
||||
<Compile Include="Components\Analog\DUTs\ST_ANALOG_EW_DELAYS.TcDUT">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="POUs\Components\Analog\Types\ST_ANALOG_EW_DELAYS.TcDUT">
|
||||
<Compile Include="Components\Analog\DUTs\ST_ANALOG_EW_LEVELS.TcDUT">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="POUs\Components\Analog\Types\ST_ANALOG_EW_LEVELS.TcDUT">
|
||||
<Compile Include="Components\Analog\DUTs\ST_ANALOG_IO_CONFIG.TcDUT">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="POUs\Components\Analog\Types\ST_ANALOG_IO_CONFIG.TcDUT">
|
||||
<Compile Include="Components\Analog\POUs\FB_AnalogInput.TcPOU">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="POUs\Components\AxisPTP\E_AXIS_PTP_STATE.TcDUT">
|
||||
<Compile Include="Components\Analog\POUs\FB_AnalogOutput.TcPOU">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="POUs\Components\AxisPTP\FB_AxisPTP.TcPOU">
|
||||
<Compile Include="Components\AxisPTP\DUTs\E_AXIS_PTP_STATE.TcDUT">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="POUs\Components\Controller\FB_Limit.TcPOU">
|
||||
<Compile Include="Components\AxisPTP\DUTs\ST_AxisPTP_IO.TcDUT">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="POUs\Components\Controller\FB_PI.TcPOU">
|
||||
<Compile Include="Components\AxisPTP\POUs\FB_AxisPTP.TcPOU">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="POUs\Components\Controller\FB_PID.TcPOU">
|
||||
<Compile Include="Components\Controller\POUs\FB_Limit.TcPOU">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="POUs\Components\Controller\FB_RampGenerator.TcPOU">
|
||||
<Compile Include="Components\Controller\POUs\FB_PI.TcPOU">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="POUs\Components\EventListener\FB_EventListener.TcPOU">
|
||||
<Compile Include="Components\Controller\POUs\FB_PID.TcPOU">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="POUs\Components\EventListener\Types\E_EventType.TcDUT">
|
||||
<Compile Include="Components\Controller\POUs\FB_RampGenerator.TcPOU">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="POUs\Components\EventListener\Types\ST_BufferEventEntry.TcDUT">
|
||||
<Compile Include="Components\EventListener\DUTs\E_EventType.TcDUT">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="POUs\Components\Motor\FB_MotorBecker.TcPOU">
|
||||
<Compile Include="Components\EventListener\DUTs\ST_BufferEventEntry.TcDUT">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Components\EventListener\POUs\FB_EventListener.TcPOU">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Components\Motor\FB_MotorBecker.TcPOU">
|
||||
<SubType>Code</SubType>
|
||||
<ExcludeFromBuild>true</ExcludeFromBuild>
|
||||
</Compile>
|
||||
<Compile Include="POUs\Components\Motor\Types\ST_MOTOR_BECKER_CONFIG.TcDUT">
|
||||
<Compile Include="Components\Motor\Types\ST_MOTOR_BECKER_CONFIG.TcDUT">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="POUs\Components\Utilities\FB_AlarmMessage.TcPOU">
|
||||
<Compile Include="Components\Utilities\FB_AlarmMessage.TcPOU">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="POUs\Components\Utilities\FB_Blinker.TcPOU">
|
||||
<Compile Include="Components\Utilities\FB_Blinker.TcPOU">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="POUs\Components\Utilities\FB_ReleaseSignal.TcPOU">
|
||||
<Compile Include="Components\Utilities\FB_ReleaseSignal.TcPOU">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="POUs\Components\Utilities\FC_HashFNV1a_32Bit.TcPOU">
|
||||
<Compile Include="Components\Utilities\FC_HashFNV1a_32Bit.TcPOU">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="POUs\Components\Utilities\F_GetTaskCycleTime.TcPOU">
|
||||
<Compile Include="Components\Utilities\F_GetTaskCycleTime.TcPOU">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="POUs\Components\Valves\FB_Valve.TcPOU">
|
||||
<Compile Include="Components\Valves\DUTs\ST_ValveAnalogConfig.TcDUT">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="POUs\Components\Valves\FB_ValveAnalog.TcPOU">
|
||||
<Compile Include="Components\Valves\DUTs\ST_ValveAnalog_IO.TcDUT">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="POUs\Components\Valves\Types\ST_ValveAnalogConfig.TcDUT">
|
||||
<Compile Include="Components\Valves\DUTs\ST_ValveConfig.TcDUT">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="POUs\Components\Valves\Types\ST_ValveConfig.TcDUT">
|
||||
<Compile Include="Components\Valves\DUTs\ST_Valve_IO.TcDUT">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="POUs\Constants\GVL_TYPE_CONST.TcGVL">
|
||||
<Compile Include="Components\Valves\POUs\FB_Valve.TcPOU">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Components\Valves\POUs\FB_ValveAnalog.TcPOU">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="DUTs\E_CmdResult.TcDUT">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="GVLs\GVL_CONFIGS.TcGVL">
|
||||
<SubType>Code</SubType>
|
||||
<LinkAlways>true</LinkAlways>
|
||||
</Compile>
|
||||
<Compile Include="POUs\GVL\GVL_CONFIGS.TcGVL">
|
||||
<Compile Include="GVLs\GVL_TYPE_CONST.TcGVL">
|
||||
<SubType>Code</SubType>
|
||||
<LinkAlways>true</LinkAlways>
|
||||
</Compile>
|
||||
<Compile Include="POUs\HMI\Datentypen\ST_HMI_ANALOG_MOTOR_DATA.TcDUT">
|
||||
<Compile Include="HMI\Datentypen\ST_HMI_ANALOG_MOTOR_DATA.TcDUT">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="POUs\HMI\Datentypen\ST_HMI_ANALOG_VALUE.TcDUT">
|
||||
<Compile Include="HMI\Datentypen\ST_HMI_ANALOG_VALUE.TcDUT">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="POUs\HMI\Datentypen\ST_HMI_ANALOG_VALVE_DATA.TcDUT">
|
||||
<Compile Include="HMI\Datentypen\ST_HMI_ANALOG_VALVE_DATA.TcDUT">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="POUs\HMI\Datentypen\ST_HMI_CONTROL_BUTTON.TcDUT">
|
||||
<Compile Include="HMI\Datentypen\ST_HMI_CONTROL_BUTTON.TcDUT">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="POUs\HMI\Datentypen\ST_HMI_INTEGER_VALUE.TcDUT">
|
||||
<Compile Include="HMI\Datentypen\ST_HMI_INTEGER_VALUE.TcDUT">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="POUs\HMI\Datentypen\ST_HMI_INTERLOCK.TcDUT">
|
||||
<Compile Include="HMI\Datentypen\ST_HMI_INTERLOCK.TcDUT">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="POUs\HMI\Datentypen\ST_HMI_VALVE_DATA.TcDUT">
|
||||
<Compile Include="HMI\Datentypen\ST_HMI_VALVE_DATA.TcDUT">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="POUs\HMI\Datentypen\T_INTERLOCK.TcDUT">
|
||||
<Compile Include="HMI\Datentypen\T_INTERLOCK.TcDUT">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="POUs\HMI\Enum\E_HMI_ANALOG_VALUE_STATUS.TcDUT">
|
||||
<Compile Include="HMI\Enum\E_HMI_ANALOG_VALUE_STATUS.TcDUT">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="POUs\HMI\Enum\E_HMI_BUTTON_FEEDBACK.TcDUT">
|
||||
<Compile Include="HMI\Enum\E_HMI_BUTTON_FEEDBACK.TcDUT">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="POUs\HMI\Enum\E_HMI_MODE.TcDUT">
|
||||
<Compile Include="HMI\Enum\E_HMI_MODE.TcDUT">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="POUs\HMI\Enum\E_HMI_MOTOR_STATUS.TcDUT">
|
||||
<Compile Include="HMI\Enum\E_HMI_MOTOR_STATUS.TcDUT">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="POUs\HMI\Enum\E_HMI_VALVE_STATUS.TcDUT">
|
||||
<Compile Include="HMI\Enum\E_HMI_VALVE_STATUS.TcDUT">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="POUs\PRG_MAIN.TcPOU">
|
||||
<Compile Include="PlcTask.TcTTO">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="POUs\Unittests\AITests\FB_AnalogInputTest.TcPOU">
|
||||
<Compile Include="PRG_MAIN.TcPOU">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="POUs\Unittests\AnalogValveTests\FB_ValveAnalog_Test.TcPOU">
|
||||
<Compile Include="Unittests\AITests\FB_AnalogInputTest.TcPOU">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="POUs\Unittests\AOTests\FB_AnalogOutputTest.TcPOU">
|
||||
<Compile Include="Unittests\AnalogValveTests\FB_ValveAnalog_Test.TcPOU">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="POUs\Unittests\ReleaseSignalTests\FB_ReleaseSignalTest.TcPOU">
|
||||
<Compile Include="Unittests\AOTests\FB_AnalogOutputTest.TcPOU">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="POUs\Unittests\UtilitiesTests\FB_BlinkerTest.TcPOU">
|
||||
<Compile Include="Unittests\ReleaseSignalTests\FB_ReleaseSignalTest.TcPOU">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="POUs\Unittests\UtilitiesTests\FB_HashFNV1a_32BitTest.TcPOU">
|
||||
<Compile Include="Unittests\UtilitiesTests\FB_BlinkerTest.TcPOU">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="POUs\Unittests\UtilitiesTests\FB_PT1Test.TcPOU">
|
||||
<Compile Include="Unittests\UtilitiesTests\FB_HashFNV1a_32BitTest.TcPOU">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="POUs\Unittests\UtilitiesTests\FB_RampGeneratorTest.TcPOU">
|
||||
<Compile Include="Unittests\UtilitiesTests\FB_PT1Test.TcPOU">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="POUs\Unittests\ValveTests\FB_ValveTestHMI.TcPOU">
|
||||
<Compile Include="Unittests\UtilitiesTests\FB_RampGeneratorTest.TcPOU">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="POUs\Unittests\ValveTests\FB_ValveTestTimoutClose.TcPOU">
|
||||
<Compile Include="Unittests\ValveTests\FB_ValveTestHMI.TcPOU">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="POUs\Unittests\ValveTests\FB_ValveTestTimoutOpen.TcPOU">
|
||||
<Compile Include="Unittests\ValveTests\FB_ValveTestTimoutClose.TcPOU">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="POUs\Unittests\ValveTests\FB_ValveTestTriggerTimoutClose.TcPOU">
|
||||
<Compile Include="Unittests\ValveTests\FB_ValveTestTimoutOpen.TcPOU">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="POUs\Unittests\ValveTests\FB_ValveTestTriggerTimoutOpen.TcPOU">
|
||||
<Compile Include="Unittests\ValveTests\FB_ValveTestTriggerTimoutClose.TcPOU">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="POUs\Unittests\ValveTests\FB_Valve_Test.TcPOU">
|
||||
<Compile Include="Unittests\ValveTests\FB_ValveTestTriggerTimoutOpen.TcPOU">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Unittests\ValveTests\FB_Valve_Test.TcPOU">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Folder Include="Components" />
|
||||
<Folder Include="Components\Analog" />
|
||||
<Folder Include="Components\Analog\DUTs" />
|
||||
<Folder Include="Components\Analog\POUs" />
|
||||
<Folder Include="Components\AxisPTP" />
|
||||
<Folder Include="Components\AxisPTP\DUTs" />
|
||||
<Folder Include="Components\AxisPTP\POUs" />
|
||||
<Folder Include="Components\Controller" />
|
||||
<Folder Include="Components\Controller\POUs" />
|
||||
<Folder Include="Components\EventListener" />
|
||||
<Folder Include="Components\EventListener\DUTs" />
|
||||
<Folder Include="Components\EventListener\POUs" />
|
||||
<Folder Include="Components\Motor" />
|
||||
<Folder Include="Components\Motor\Types" />
|
||||
<Folder Include="Components\Utilities" />
|
||||
<Folder Include="Components\Valves" />
|
||||
<Folder Include="Components\Valves\DUTs" />
|
||||
<Folder Include="Components\Valves\POUs" />
|
||||
<Folder Include="DUTs" />
|
||||
<Folder Include="GVLs" />
|
||||
<Folder Include="POUs\Components\Analog" />
|
||||
<Folder Include="POUs\Components\Analog\Types" />
|
||||
<Folder Include="POUs\Components\AxisPTP" />
|
||||
<Folder Include="POUs\Components\EventListener" />
|
||||
<Folder Include="POUs\Components\EventListener\Types" />
|
||||
<Folder Include="POUs\Components\Motor">
|
||||
<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" />
|
||||
<Folder Include="POUs\Constants" />
|
||||
<Folder Include="POUs\HMI" />
|
||||
<Folder Include="POUs\HMI\Datentypen" />
|
||||
<Folder Include="POUs\HMI\Enum" />
|
||||
<Folder Include="POUs\GVL" />
|
||||
<Folder Include="POUs\Components" />
|
||||
<Folder Include="POUs\Unittests\AnalogValveTests" />
|
||||
<Folder Include="POUs\Unittests\ReleaseSignalTests" />
|
||||
<Folder Include="POUs\Unittests\UtilitiesTests" />
|
||||
<Folder Include="POUs\Unittests\ValveTests" />
|
||||
<Folder Include="POUs\Unittests" />
|
||||
<Folder Include="POUs\Unittests\AITests" />
|
||||
<Folder Include="POUs\Unittests\AOTests" />
|
||||
<Folder Include="HMI" />
|
||||
<Folder Include="HMI\Datentypen" />
|
||||
<Folder Include="HMI\Enum" />
|
||||
<Folder Include="Unittests" />
|
||||
<Folder Include="Unittests\AITests" />
|
||||
<Folder Include="Unittests\AnalogValveTests" />
|
||||
<Folder Include="Unittests\AOTests" />
|
||||
<Folder Include="Unittests\ReleaseSignalTests" />
|
||||
<Folder Include="Unittests\UtilitiesTests" />
|
||||
<Folder Include="Unittests\ValveTests" />
|
||||
<Folder Include="VISUs" />
|
||||
<Folder Include="POUs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PlaceholderReference Include="Tc2_MC2">
|
||||
@@ -304,8 +323,8 @@
|
||||
<ProjectExtensions>
|
||||
<PlcProjectOptions>
|
||||
<XmlArchive>
|
||||
<Data>
|
||||
<o xml:space="preserve" t="OptionKey">
|
||||
<Data>
|
||||
<o xml:space="preserve" t="OptionKey">
|
||||
<v n="Name">"<ProjectRoot>"</v>
|
||||
<d n="SubKeys" t="Hashtable" ckt="String" cvt="OptionKey">
|
||||
<v>{192FAD59-8248-4824-A8DE-9177C94C195A}</v>
|
||||
@@ -2686,16 +2705,16 @@
|
||||
</d>
|
||||
<d n="Values" t="Hashtable" />
|
||||
</o>
|
||||
</Data>
|
||||
<TypeList>
|
||||
<Type n="Boolean">System.Boolean</Type>
|
||||
<Type n="Hashtable">System.Collections.Hashtable</Type>
|
||||
<Type n="Int32">System.Int32</Type>
|
||||
<Type n="OptionKey">{54dd0eac-a6d8-46f2-8c27-2f43c7e49861}</Type>
|
||||
<Type n="String">System.String</Type>
|
||||
<Type n="UInt32">System.UInt32</Type>
|
||||
</TypeList>
|
||||
</XmlArchive>
|
||||
</Data>
|
||||
<TypeList>
|
||||
<Type n="Boolean">System.Boolean</Type>
|
||||
<Type n="Hashtable">System.Collections.Hashtable</Type>
|
||||
<Type n="Int32">System.Int32</Type>
|
||||
<Type n="OptionKey">{54dd0eac-a6d8-46f2-8c27-2f43c7e49861}</Type>
|
||||
<Type n="String">System.String</Type>
|
||||
<Type n="UInt32">System.UInt32</Type>
|
||||
</TypeList>
|
||||
</XmlArchive>
|
||||
</PlcProjectOptions>
|
||||
</ProjectExtensions>
|
||||
</Project>
|
||||
@@ -0,0 +1,22 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TcPlcObject Version="1.1.0.1">
|
||||
<DUT Name="ST_AnalogInput_IO" Id="{e5e1217a-3b79-46bd-82c2-c2132f6c3fab}">
|
||||
<Declaration><![CDATA[TYPE ST_AnalogInput_IO :
|
||||
STRUCT
|
||||
// Analog input value
|
||||
i_iAnalogValue AT %I* : INT;
|
||||
|
||||
// Card has detected an open circuit
|
||||
i_xUnderrange AT%I* : BOOL;
|
||||
|
||||
// Input is overloaded
|
||||
i_xOverrange AT %I* : BOOL;
|
||||
|
||||
// Input card has error
|
||||
// EL30xx also sets this if an underrange or overrange error is present
|
||||
i_xErrorCard AT %I* : BOOL;
|
||||
END_STRUCT
|
||||
END_TYPE
|
||||
]]></Declaration>
|
||||
</DUT>
|
||||
</TcPlcObject>
|
||||
@@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TcPlcObject Version="1.1.0.1">
|
||||
<DUT Name="ST_AnalogOutput_IO" Id="{1ae956eb-64b1-49ce-81a6-21db6ca74bc0}">
|
||||
<Declaration><![CDATA[TYPE ST_AnalogOutput_IO :
|
||||
STRUCT
|
||||
o_iAnalogValue AT %Q* : INT;
|
||||
END_STRUCT
|
||||
END_TYPE
|
||||
]]></Declaration>
|
||||
</DUT>
|
||||
</TcPlcObject>
|
||||
@@ -3,19 +3,6 @@
|
||||
<POU Name="FB_AnalogInput" Id="{532e1013-5a2e-43c7-8863-3ad112d7d7e8}" SpecialFunc="None">
|
||||
<Declaration><![CDATA[FUNCTION_BLOCK FINAL FB_AnalogInput
|
||||
VAR_INPUT
|
||||
// Analog input value
|
||||
iAnalogValue AT %I* : INT;
|
||||
|
||||
// Card has detected an open circuit
|
||||
xUnderrange AT%I* : BOOL;
|
||||
|
||||
// Input is overloaded
|
||||
xOverrange AT %I* : BOOL;
|
||||
|
||||
// Input card has error
|
||||
// EL30xx also sets this if an underrange or overrange error is present
|
||||
xErrorCard AT %I* : BOOL;
|
||||
|
||||
// IO config data
|
||||
stAnalogIOConfig : ST_ANALOG_IO_CONFIG;
|
||||
|
||||
@@ -64,6 +51,9 @@ VAR_OUTPUT
|
||||
//High level error
|
||||
xErrorHigh : BOOL;
|
||||
END_VAR
|
||||
VAR_IN_OUT
|
||||
stIO : ST_AnalogInput_IO;
|
||||
END_VAR
|
||||
VAR
|
||||
// Scaling factor for conversion
|
||||
_rConversionFactor : REAL;
|
||||
@@ -210,7 +200,7 @@ END_IF
|
||||
// ========================
|
||||
|
||||
// Clamp analogue input levels
|
||||
_iClampedAnalogValue := MAX(_iAIMin, iAnalogValue);
|
||||
_iClampedAnalogValue := MAX(_iAIMin, stIO.i_iAnalogValue);
|
||||
_iClampedAnalogValue := MIN(_iAIMax, _iClampedAnalogValue);
|
||||
|
||||
// Calc scaled value
|
||||
@@ -222,7 +212,7 @@ _rScaledValue := _iClampedAnalogValue * _rConversionFactor + _rBaseOffset;
|
||||
// =========================
|
||||
|
||||
_fbAlarmUnderrange(
|
||||
xActive:= xUnderrange,
|
||||
xActive:= stIO.i_xUnderrange,
|
||||
xRelease:= stAnalogIOConfig.xUsed AND xReleaseErrors AND xReleaseHardwareErrors,
|
||||
xAcknowledge:= xConfirmAlarms,
|
||||
timOnDelay:= stAnalogEWConfig.stDelays.timHardwareSignalLevelOn,
|
||||
@@ -240,7 +230,7 @@ END_IF
|
||||
// =========================
|
||||
|
||||
_fbAlarmOverload(
|
||||
xActive:= xOverrange,
|
||||
xActive:= stIO.i_xOverrange,
|
||||
xRelease:= stAnalogIOConfig.xUsed AND xReleaseErrors AND xReleaseHardwareErrors,
|
||||
xAcknowledge:= xConfirmAlarms,
|
||||
timOnDelay:= stAnalogEWConfig.stDelays.timHardwareSignalLevelOn,
|
||||
@@ -261,7 +251,7 @@ END_IF
|
||||
// EL30xx also sets this if an underrange or overrange error is present,
|
||||
// so we filter this out
|
||||
_fbAlarmCardError(
|
||||
xActive:= xErrorCard AND (NOT xUnderrange) AND (NOT xOverrange),
|
||||
xActive:= stIO.i_xErrorCard AND (NOT stIO.i_xUnderrange) AND (NOT stIO.i_xOverrange),
|
||||
xRelease:= stAnalogIOConfig.xUsed AND xReleaseErrors AND xReleaseHardwareErrors,
|
||||
xAcknowledge:= xConfirmAlarms,
|
||||
timOnDelay:= stAnalogEWConfig.stDelays.timHardwareSignalLevelOn,
|
||||
@@ -21,12 +21,13 @@ VAR_INPUT
|
||||
xInUnitTestMode : BOOL := FALSE;
|
||||
END_VAR
|
||||
VAR_OUTPUT
|
||||
iAnalogValue AT %Q* : INT;
|
||||
|
||||
// Error in function block
|
||||
xError : BOOL;
|
||||
END_VAR
|
||||
VAR_IN_OUT
|
||||
// IO
|
||||
stIO : ST_AnalogOutput_IO;
|
||||
|
||||
// HMI Interface
|
||||
stHMIInterface : ST_HMI_ANALOG_VALUE;
|
||||
END_VAR
|
||||
@@ -117,7 +118,7 @@ _rSetpointInternal := MIN(_rSetpointInternal, _rPVMax);
|
||||
|
||||
// Calc scaled value
|
||||
_rTempAnalogValue := _rSetpointInternal * _rConversionFactor + _rBaseOffset;
|
||||
iAnalogValue := REAL_TO_INT(_rTempAnalogValue);
|
||||
stIO.o_iAnalogValue := REAL_TO_INT(_rTempAnalogValue);
|
||||
|
||||
|
||||
// ====================
|
||||
@@ -6,16 +6,25 @@
|
||||
{attribute 'to_string'}
|
||||
TYPE E_AXIS_PTP_STATE :
|
||||
(
|
||||
OFF := 0,
|
||||
WAIT_FOR_ENABLE,
|
||||
ENABLED,
|
||||
HOMING,
|
||||
MOVING_ABSOLUTE,
|
||||
MOVING_RELATIVE,
|
||||
MOVING_VELOCITY,
|
||||
MOVING_MODULO,
|
||||
HALTING,
|
||||
WAIT_FOR_DISABLE,
|
||||
IDLE := 0,
|
||||
START_ENABLE,
|
||||
WAIT_ENABLE,
|
||||
START_DISABLE,
|
||||
WAIT_DISABLE,
|
||||
START_HOMING,
|
||||
WAIT_HOMING,
|
||||
START_MOVING_ABSOLUTE,
|
||||
WAIT_MOVING_ABSOLUTE,
|
||||
START_MOVING_RELATIVE,
|
||||
WAIT_MOVING_RELATIVE,
|
||||
START_MOVING_VELOCITY,
|
||||
WAIT_MOVING_VELOCITY,
|
||||
MOVING_VELO,
|
||||
START_MOVING_MODULO,
|
||||
WAIT_MOVING_MODULO,
|
||||
START_HALTING,
|
||||
WAIT_HALTING,
|
||||
ENTER_ERROR,
|
||||
ERROR,
|
||||
RESET
|
||||
);
|
||||
12
BasicComponents/Components/AxisPTP/DUTs/ST_AxisPTP_IO.TcDUT
Normal file
12
BasicComponents/Components/AxisPTP/DUTs/ST_AxisPTP_IO.TcDUT
Normal file
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TcPlcObject Version="1.1.0.1">
|
||||
<DUT Name="ST_AxisPTP_IO" Id="{e9334c76-7085-45c0-b389-151c48bf0632}">
|
||||
<Declaration><![CDATA[TYPE ST_AxisPTP_IO :
|
||||
STRUCT
|
||||
i_xCalibrationCam AT %I* : BOOL;
|
||||
io_fbAxisRef : AXIS_REF;
|
||||
END_STRUCT
|
||||
END_TYPE
|
||||
]]></Declaration>
|
||||
</DUT>
|
||||
</TcPlcObject>
|
||||
564
BasicComponents/Components/AxisPTP/POUs/FB_AxisPTP.TcPOU
Normal file
564
BasicComponents/Components/AxisPTP/POUs/FB_AxisPTP.TcPOU
Normal file
@@ -0,0 +1,564 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TcPlcObject Version="1.1.0.1">
|
||||
<POU Name="FB_AxisPTP" Id="{5a7035b7-f11b-403b-9828-9d2d1f662a54}" SpecialFunc="None">
|
||||
<Declaration><![CDATA[FUNCTION_BLOCK FB_AxisPTP
|
||||
VAR_INPUT
|
||||
xInvertCalibrationCam : BOOL := FALSE;
|
||||
xEnablePositive : BOOL := TRUE;
|
||||
xEnableNegative : BOOL := TRUE;
|
||||
rOverride : REAL := 100.0;
|
||||
|
||||
lrVelocity : LREAL;
|
||||
lrAcceleration : LREAL := 0.0;
|
||||
lrDecelleration : LREAL := 0.0;
|
||||
lrJerk : LREAL := 0.0;
|
||||
|
||||
xConfirmAlarms : BOOL;
|
||||
END_VAR
|
||||
VAR_OUTPUT
|
||||
xEnabled : BOOL;
|
||||
xHomed : BOOL;
|
||||
lrActPosition : LREAL;
|
||||
xIsStopped : BOOL;
|
||||
|
||||
// Outputs for execute pattern
|
||||
xBusy : BOOL;
|
||||
xDone : BOOL := TRUE;
|
||||
xError : BOOL;
|
||||
END_VAR
|
||||
VAR_IN_OUT
|
||||
stIO : ST_AxisPTP_IO;
|
||||
END_VAR
|
||||
VAR
|
||||
// ========
|
||||
// Axis fbs
|
||||
// ========
|
||||
|
||||
_fbPower : MC_Power;
|
||||
_fbHome : MC_Home;
|
||||
_fbMoveAbsolute : MC_MoveAbsolute;
|
||||
_fbMoveRelative : MC_MoveRelative;
|
||||
_fbMoveVelocity : MC_MoveVelocity;
|
||||
_fbMoveModulo : MC_MoveModulo;
|
||||
_fbHalt : MC_Halt;
|
||||
_fbReset : MC_Reset;
|
||||
|
||||
|
||||
// =====================
|
||||
// Sequence control data
|
||||
// =====================
|
||||
|
||||
_xExecuteHoming : BOOL;
|
||||
_xExecuteMoveAbs : BOOL;
|
||||
_xExecuteMoveRel : BOOL;
|
||||
_xExecuteMoveVelocity : BOOL;
|
||||
_xExecuteMoveModulo : BOOL;
|
||||
_xExecuteHalt : BOOL;
|
||||
|
||||
|
||||
// =========================
|
||||
// Internal helper variables
|
||||
// =========================
|
||||
|
||||
_lrTargetPosition : LREAL;
|
||||
_lrRelativeDistance : LREAL;
|
||||
_lrHomingPos : LREAL := Tc2_MC2.DEFAULT_HOME_POSITION;
|
||||
_eHomingMode : MC_HomingMode := MC_HomingMode.MC_DefaultHoming;
|
||||
_xCalibrationCam : BOOL;
|
||||
|
||||
_eMoveDirection : MC_Direction;
|
||||
|
||||
_xCanExecNewCmd : BOOL;
|
||||
|
||||
_eState : E_AXIS_PTP_STATE := E_AXIS_PTP_STATE.IDLE;
|
||||
END_VAR
|
||||
]]></Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[// Call axis interface
|
||||
stIO.io_fbAxisRef.ReadStatus();
|
||||
|
||||
IF xInvertCalibrationCam THEN
|
||||
_xCalibrationCam := NOT stIO.i_xCalibrationCam;
|
||||
ELSE
|
||||
_xCalibrationCam := stIO.i_xCalibrationCam;
|
||||
END_IF
|
||||
|
||||
|
||||
// =================
|
||||
// Call axis classes
|
||||
// =================
|
||||
|
||||
_fbPower(
|
||||
Axis:= stIO.io_fbAxisRef,
|
||||
Enable_Positive:= xEnablePositive,
|
||||
Enable_Negative:= xEnableNegative,
|
||||
Override:= rOverride);
|
||||
|
||||
_fbHome(
|
||||
Axis:= stIO.io_fbAxisRef,
|
||||
Position:= _lrHomingPos,
|
||||
HomingMode:= _eHomingMode,
|
||||
bCalibrationCam:= _xCalibrationCam);
|
||||
|
||||
_fbReset(Axis:= stIO.io_fbAxisRef);
|
||||
|
||||
_fbMoveAbsolute(
|
||||
Axis:= stIO.io_fbAxisRef,
|
||||
Position:= _lrTargetPosition,
|
||||
Velocity:= lrVelocity,
|
||||
Acceleration:= 0,
|
||||
Deceleration:= 0,
|
||||
Jerk:= 0);
|
||||
|
||||
_fbMoveRelative(
|
||||
Axis:= stIO.io_fbAxisRef,
|
||||
Distance:= _lrRelativeDistance,
|
||||
Velocity:= lrVelocity,
|
||||
Acceleration:= 0,
|
||||
Deceleration:= 0,
|
||||
Jerk:= 0);
|
||||
|
||||
_fbMoveVelocity(
|
||||
Axis:= stIO.io_fbAxisRef,
|
||||
Velocity:= lrVelocity,
|
||||
Acceleration:= 0,
|
||||
Deceleration:= 0,
|
||||
Jerk:= 0,
|
||||
Direction:= _eMoveDirection);
|
||||
|
||||
_fbMoveModulo(
|
||||
Axis:= stIO.io_fbAxisRef,
|
||||
Position:= _lrTargetPosition,
|
||||
Velocity:= lrVelocity,
|
||||
Acceleration:= 0,
|
||||
Deceleration:= 0,
|
||||
Jerk:= 0,
|
||||
Direction:= _eMoveDirection);
|
||||
|
||||
_fbHalt(
|
||||
Axis:= stIO.io_fbAxisRef,
|
||||
Deceleration:= 0,
|
||||
BufferMode := MC_BufferMode.MC_Aborting,
|
||||
Jerk:= 0);
|
||||
|
||||
// ====================
|
||||
// Handle state machine
|
||||
// ====================
|
||||
|
||||
CASE _eState OF
|
||||
E_AXIS_PTP_STATE.IDLE:
|
||||
// Check for error
|
||||
IF stIO.io_fbAxisRef.Status.Error THEN
|
||||
_eState := E_AXIS_PTP_STATE.ERROR;
|
||||
END_IF
|
||||
|
||||
// =========
|
||||
// Enableing
|
||||
// =========
|
||||
E_AXIS_PTP_STATE.START_ENABLE:
|
||||
_fbPower.Enable := TRUE;
|
||||
_eState := E_AXIS_PTP_STATE.WAIT_ENABLE;
|
||||
|
||||
E_AXIS_PTP_STATE.WAIT_ENABLE:
|
||||
IF _fbPower.Status AND (NOT _fbPower.Error) THEN
|
||||
xBusy := FALSE;
|
||||
xDone := TRUE;
|
||||
_eState := E_AXIS_PTP_STATE.IDLE;
|
||||
END_IF
|
||||
|
||||
IF _fbPower.Error THEN
|
||||
_eState := E_AXIS_PTP_STATE.ENTER_ERROR;
|
||||
END_IF
|
||||
|
||||
// =======
|
||||
// Homeing
|
||||
// =======
|
||||
E_AXIS_PTP_STATE.START_HOMING:
|
||||
_fbHome.Execute := TRUE;
|
||||
_eState := E_AXIS_PTP_STATE.WAIT_HOMING;
|
||||
|
||||
E_AXIS_PTP_STATE.WAIT_HOMING:
|
||||
IF _fbHome.Done THEN
|
||||
_fbHome.Execute := FALSE;
|
||||
xBusy := FALSE;
|
||||
xDone := TRUE;
|
||||
_eState := E_AXIS_PTP_STATE.IDLE;
|
||||
END_IF
|
||||
|
||||
IF _fbHome.Error THEN
|
||||
_fbHome.Execute := FALSE;
|
||||
_eState := E_AXIS_PTP_STATE.ENTER_ERROR;
|
||||
END_IF
|
||||
|
||||
// =============
|
||||
// Move absolute
|
||||
// =============
|
||||
E_AXIS_PTP_STATE.START_MOVING_ABSOLUTE:
|
||||
_fbMoveAbsolute.Execute := TRUE;
|
||||
_eState := E_AXIS_PTP_STATE.WAIT_MOVING_ABSOLUTE;
|
||||
|
||||
E_AXIS_PTP_STATE.WAIT_MOVING_ABSOLUTE:
|
||||
IF _fbMoveAbsolute.Done THEN
|
||||
_fbMoveAbsolute.Execute := FALSE;
|
||||
xBusy := FALSE;
|
||||
xDone := TRUE;
|
||||
_eState := E_AXIS_PTP_STATE.IDLE;
|
||||
END_IF
|
||||
|
||||
IF _fbMoveAbsolute.Error THEN
|
||||
_fbMoveAbsolute.Execute := FALSE;
|
||||
_eState := E_AXIS_PTP_STATE.ENTER_ERROR;
|
||||
END_IF
|
||||
|
||||
|
||||
// =============
|
||||
// Move relative
|
||||
// =============
|
||||
E_AXIS_PTP_STATE.START_MOVING_RELATIVE:
|
||||
_fbMoveRelative.Execute := TRUE;
|
||||
_eState := E_AXIS_PTP_STATE.WAIT_MOVING_RELATIVE;
|
||||
|
||||
E_AXIS_PTP_STATE.WAIT_MOVING_RELATIVE:
|
||||
IF _fbMoveRelative.Done THEN
|
||||
_fbMoveRelative.Execute := FALSE;
|
||||
xBusy := FALSE;
|
||||
xDone := TRUE;
|
||||
_eState := E_AXIS_PTP_STATE.IDLE;
|
||||
END_IF
|
||||
|
||||
IF _fbMoveRelative.Error THEN
|
||||
_fbMoveRelative.Execute := FALSE;
|
||||
_eState := E_AXIS_PTP_STATE.ENTER_ERROR;
|
||||
END_IF
|
||||
|
||||
|
||||
// =============
|
||||
// Move velocity
|
||||
// =============
|
||||
E_AXIS_PTP_STATE.START_MOVING_VELOCITY:
|
||||
_fbMoveVelocity.Execute := TRUE;
|
||||
_eState := E_AXIS_PTP_STATE.WAIT_MOVING_VELOCITY;
|
||||
|
||||
E_AXIS_PTP_STATE.WAIT_MOVING_VELOCITY:
|
||||
IF _fbMoveVelocity.Busy THEN
|
||||
_fbMoveVelocity.Execute := FALSE;
|
||||
_eState := E_AXIS_PTP_STATE.MOVING_VELO;
|
||||
END_IF
|
||||
|
||||
IF _fbMoveVelocity.Error THEN
|
||||
_fbMoveVelocity.Execute := FALSE;
|
||||
_eState := E_AXIS_PTP_STATE.ENTER_ERROR;
|
||||
END_IF
|
||||
|
||||
E_AXIS_PTP_STATE.MOVING_VELO:
|
||||
IF _fbMoveVelocity.Error THEN
|
||||
_eState := E_AXIS_PTP_STATE.ENTER_ERROR;
|
||||
END_IF
|
||||
|
||||
|
||||
// =============
|
||||
// Move modulo
|
||||
// =============
|
||||
E_AXIS_PTP_STATE.START_MOVING_MODULO:
|
||||
_fbMoveModulo.Execute := TRUE;
|
||||
_eState := E_AXIS_PTP_STATE.WAIT_MOVING_MODULO;
|
||||
|
||||
E_AXIS_PTP_STATE.WAIT_MOVING_MODULO:
|
||||
IF _fbMoveModulo.Done THEN
|
||||
_fbMoveModulo.Execute := FALSE;
|
||||
xBusy := FALSE;
|
||||
xDone := TRUE;
|
||||
_eState := E_AXIS_PTP_STATE.IDLE;
|
||||
END_IF
|
||||
|
||||
IF _fbMoveModulo.Error THEN
|
||||
_fbMoveModulo.Execute := FALSE;
|
||||
_eState := E_AXIS_PTP_STATE.ENTER_ERROR;
|
||||
END_IF
|
||||
|
||||
// =======
|
||||
// Halting
|
||||
// =======
|
||||
E_AXIS_PTP_STATE.START_HALTING:
|
||||
_fbHalt.Execute := TRUE;
|
||||
_eState := E_AXIS_PTP_STATE.WAIT_HALTING;
|
||||
|
||||
E_AXIS_PTP_STATE.WAIT_HALTING:
|
||||
IF _fbHalt.Done THEN
|
||||
_fbHalt.Execute := FALSE;
|
||||
xBusy := FALSE;
|
||||
xDone := TRUE;
|
||||
_eState := E_AXIS_PTP_STATE.IDLE;
|
||||
END_IF
|
||||
|
||||
IF _fbHalt.Error THEN
|
||||
_fbHalt.Execute := FALSE;
|
||||
_eState := E_AXIS_PTP_STATE.ENTER_ERROR;
|
||||
END_IF
|
||||
|
||||
|
||||
// ==========
|
||||
// Disableing
|
||||
// ==========
|
||||
E_AXIS_PTP_STATE.START_DISABLE:
|
||||
_fbPower.Enable := FALSE;
|
||||
_eState := E_AXIS_PTP_STATE.WAIT_DISABLE;
|
||||
|
||||
E_AXIS_PTP_STATE.WAIT_DISABLE:
|
||||
IF (NOT _fbPower.Status) THEN
|
||||
xBusy := FALSE;
|
||||
xDone := TRUE;
|
||||
_eState := E_AXIS_PTP_STATE.IDLE;
|
||||
END_IF
|
||||
|
||||
IF _fbPower.Error THEN
|
||||
_eState := E_AXIS_PTP_STATE.ENTER_ERROR;
|
||||
END_IF
|
||||
|
||||
|
||||
// =====
|
||||
// Error
|
||||
// =====
|
||||
E_AXIS_PTP_STATE.ENTER_ERROR:
|
||||
xError := TRUE;
|
||||
xBusy := FALSE;
|
||||
xDone := FALSE;
|
||||
_eState := E_AXIS_PTP_STATE.ERROR;
|
||||
|
||||
E_AXIS_PTP_STATE.ERROR:
|
||||
IF xConfirmAlarms THEN
|
||||
_fbReset.Execute := TRUE;
|
||||
_eState := E_AXIS_PTP_STATE.RESET;
|
||||
END_IF
|
||||
|
||||
E_AXIS_PTP_STATE.RESET:
|
||||
IF _fbReset.Done THEN
|
||||
_fbReset.Execute := FALSE;
|
||||
_eState := E_AXIS_PTP_STATE.IDLE;
|
||||
END_IF
|
||||
|
||||
IF _fbReset.Error THEN
|
||||
_fbReset.Execute := FALSE;
|
||||
_eState := E_AXIS_PTP_STATE.ENTER_ERROR;
|
||||
END_IF
|
||||
|
||||
ELSE
|
||||
_eState := E_AXIS_PTP_STATE.ENTER_ERROR;
|
||||
END_CASE
|
||||
|
||||
|
||||
// Copy internal buffers to outputs
|
||||
xEnabled := _fbPower.Status;
|
||||
xHomed := stIO.io_fbAxisRef.Status.Homed;
|
||||
lrActPosition := stIO.io_fbAxisRef.NcToPlc.ActPos;
|
||||
xIsStopped := stIO.io_fbAxisRef.Status.StandStill OR stIO.io_fbAxisRef.Status.Disabled;]]></ST>
|
||||
</Implementation>
|
||||
<Method Name="M_Disable" Id="{9ad5c9f5-bbf1-4888-86a0-ffdb2251d9c0}">
|
||||
<Declaration><![CDATA[METHOD M_Disable : E_CmdResult
|
||||
VAR_INPUT
|
||||
END_VAR
|
||||
]]></Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[CASE _eState OF
|
||||
E_AXIS_PTP_STATE.IDLE:
|
||||
_eState := E_AXIS_PTP_STATE.START_DISABLE;
|
||||
|
||||
xBusy := TRUE;
|
||||
xDone := FALSE;
|
||||
M_Disable := E_CmdResult.ACCEPTED;
|
||||
|
||||
E_AXIS_PTP_STATE.ERROR:
|
||||
M_Disable := E_CmdResult.ERROR;
|
||||
|
||||
ELSE
|
||||
M_Disable := E_CmdResult.BUSY;
|
||||
END_CASE]]></ST>
|
||||
</Implementation>
|
||||
</Method>
|
||||
<Method Name="M_Enable" Id="{d68c8a7b-c709-4efe-872c-84892228bb19}">
|
||||
<Declaration><![CDATA[METHOD M_Enable : E_CmdResult
|
||||
VAR_INPUT
|
||||
END_VAR
|
||||
]]></Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[CASE _eState OF
|
||||
E_AXIS_PTP_STATE.IDLE:
|
||||
_eState := E_AXIS_PTP_STATE.START_ENABLE;
|
||||
|
||||
xBusy := TRUE;
|
||||
xDone := FALSE;
|
||||
M_Enable := E_CmdResult.ACCEPTED;
|
||||
|
||||
E_AXIS_PTP_STATE.ERROR:
|
||||
M_Enable := E_CmdResult.ERROR;
|
||||
|
||||
ELSE
|
||||
M_Enable := E_CmdResult.BUSY;
|
||||
END_CASE]]></ST>
|
||||
</Implementation>
|
||||
</Method>
|
||||
<Method Name="M_Halt" Id="{f6e3b049-4121-4299-b0f5-55178ecb35c3}">
|
||||
<Declaration><![CDATA[METHOD M_Halt : E_CmdResult
|
||||
VAR_OUTPUT
|
||||
END_VAR]]></Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[_eState := E_AXIS_PTP_STATE.START_HALTING;
|
||||
|
||||
xBusy := TRUE;
|
||||
xDone := FALSE;
|
||||
M_Halt := E_CmdResult.ACCEPTED;]]></ST>
|
||||
</Implementation>
|
||||
</Method>
|
||||
<Method Name="M_Homing" Id="{816a1a43-38da-49f0-b902-c1027a6ba127}">
|
||||
<Declaration><![CDATA[METHOD M_Homing : E_CmdResult
|
||||
VAR_INPUT
|
||||
lrHomingPosition : LREAL := Tc2_MC2.DEFAULT_HOME_POSITION;
|
||||
eHomingMode : MC_HomingMode := MC_HomingMode.MC_DefaultHoming;
|
||||
END_VAR]]></Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[// Reject command if axis is not enabled
|
||||
IF (NOT _fbPower.Status) THEN
|
||||
M_Homing := E_CmdResult.REJECTED;
|
||||
RETURN;
|
||||
END_IF
|
||||
|
||||
CASE _eState OF
|
||||
E_AXIS_PTP_STATE.IDLE:
|
||||
_lrHomingPos := lrHomingPosition;
|
||||
_eHomingMode := eHomingMode;
|
||||
_eState := E_AXIS_PTP_STATE.START_HOMING;
|
||||
|
||||
xBusy := TRUE;
|
||||
xDone := FALSE;
|
||||
M_Homing := E_CmdResult.ACCEPTED;
|
||||
|
||||
E_AXIS_PTP_STATE.ERROR:
|
||||
M_Homing := E_CmdResult.ERROR;
|
||||
|
||||
ELSE
|
||||
M_Homing := E_CmdResult.BUSY;
|
||||
END_CASE]]></ST>
|
||||
</Implementation>
|
||||
</Method>
|
||||
<Method Name="M_MoveAbs" Id="{f67a4861-cdb0-4dd2-93c8-1ae9dbc9a9a6}">
|
||||
<Declaration><![CDATA[METHOD M_MoveAbs : E_CmdResult
|
||||
VAR_INPUT
|
||||
lrTargetPos : LREAL;
|
||||
END_VAR]]></Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[// Reject command if axis is not enabled
|
||||
IF (NOT _fbPower.Status) THEN
|
||||
M_MoveAbs := E_CmdResult.REJECTED;
|
||||
RETURN;
|
||||
END_IF
|
||||
|
||||
CASE _eState OF
|
||||
E_AXIS_PTP_STATE.IDLE:
|
||||
_lrTargetPosition := lrTargetPos;
|
||||
_eState := E_AXIS_PTP_STATE.START_MOVING_ABSOLUTE;
|
||||
|
||||
xBusy := TRUE;
|
||||
xDone := FALSE;
|
||||
M_MoveAbs := E_CmdResult.ACCEPTED;
|
||||
|
||||
E_AXIS_PTP_STATE.ERROR:
|
||||
M_MoveAbs := E_CmdResult.ERROR;
|
||||
|
||||
ELSE
|
||||
M_MoveAbs := E_CmdResult.BUSY;
|
||||
END_CASE
|
||||
]]></ST>
|
||||
</Implementation>
|
||||
</Method>
|
||||
<Method Name="M_MoveModulo" Id="{1a5eaefa-5bb1-4438-b3e0-80c1a34fc0ee}">
|
||||
<Declaration><![CDATA[METHOD M_MoveModulo : E_CmdResult
|
||||
VAR_INPUT
|
||||
lrTargetPos : LREAL;
|
||||
eMoveDirection : MC_Direction;
|
||||
END_VAR]]></Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[// Reject command if axis is not enabled
|
||||
IF (NOT _fbPower.Status) THEN
|
||||
M_MoveModulo := E_CmdResult.REJECTED;
|
||||
RETURN;
|
||||
END_IF
|
||||
|
||||
CASE _eState OF
|
||||
E_AXIS_PTP_STATE.IDLE:
|
||||
_lrTargetPosition := lrTargetPos;
|
||||
_eMoveDirection := eMoveDirection;
|
||||
_eState := E_AXIS_PTP_STATE.START_MOVING_MODULO;
|
||||
|
||||
xBusy := TRUE;
|
||||
xDone := FALSE;
|
||||
M_MoveModulo := E_CmdResult.ACCEPTED;
|
||||
|
||||
E_AXIS_PTP_STATE.ERROR:
|
||||
M_MoveModulo := E_CmdResult.ERROR;
|
||||
|
||||
ELSE
|
||||
M_MoveModulo := E_CmdResult.BUSY;
|
||||
END_CASE]]></ST>
|
||||
</Implementation>
|
||||
</Method>
|
||||
<Method Name="M_MoveRel" Id="{51e5fe82-5e25-4de0-84c7-b4d6560c312f}">
|
||||
<Declaration><![CDATA[METHOD M_MoveRel : E_CmdResult
|
||||
VAR_INPUT
|
||||
lrRelDist : LREAL;
|
||||
END_VAR]]></Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[// Reject command if axis is not enabled
|
||||
IF (NOT _fbPower.Status) THEN
|
||||
M_MoveRel := E_CmdResult.REJECTED;
|
||||
RETURN;
|
||||
END_IF
|
||||
|
||||
CASE _eState OF
|
||||
E_AXIS_PTP_STATE.IDLE:
|
||||
_lrRelativeDistance := lrRelDist;
|
||||
_eState := E_AXIS_PTP_STATE.START_MOVING_RELATIVE;
|
||||
|
||||
xBusy := TRUE;
|
||||
xDone := FALSE;
|
||||
M_MoveRel := E_CmdResult.ACCEPTED;
|
||||
|
||||
E_AXIS_PTP_STATE.ERROR:
|
||||
M_MoveRel := E_CmdResult.ERROR;
|
||||
|
||||
ELSE
|
||||
M_MoveRel := E_CmdResult.BUSY;
|
||||
END_CASE]]></ST>
|
||||
</Implementation>
|
||||
</Method>
|
||||
<Method Name="M_MoveVelocity" Id="{fd4ad471-f522-45f2-a138-ebe509907cf6}">
|
||||
<Declaration><![CDATA[METHOD M_MoveVelocity : E_CmdResult
|
||||
VAR_INPUT
|
||||
eDirection : MC_Direction := MC_Direction.MC_Positive_Direction;
|
||||
END_VAR
|
||||
]]></Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[// Reject command if axis is not enabled
|
||||
IF (NOT _fbPower.Status) THEN
|
||||
M_MoveVelocity := E_CmdResult.REJECTED;
|
||||
RETURN;
|
||||
END_IF
|
||||
|
||||
CASE _eState OF
|
||||
E_AXIS_PTP_STATE.IDLE:
|
||||
_eMoveDirection := eDirection;
|
||||
_eState := E_AXIS_PTP_STATE.START_MOVING_VELOCITY;
|
||||
|
||||
xBusy := TRUE;
|
||||
xDone := FALSE;
|
||||
M_MoveVelocity := E_CmdResult.ACCEPTED;
|
||||
|
||||
E_AXIS_PTP_STATE.ERROR:
|
||||
M_MoveVelocity := E_CmdResult.ERROR;
|
||||
|
||||
ELSE
|
||||
M_MoveVelocity := E_CmdResult.BUSY;
|
||||
END_CASE]]></ST>
|
||||
</Implementation>
|
||||
</Method>
|
||||
</POU>
|
||||
</TcPlcObject>
|
||||
@@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TcPlcObject Version="1.1.0.1">
|
||||
<DUT Name="ST_ValveAnalog_IO" Id="{f148b3f6-7dc4-47f9-ae19-f3b88577c5b3}">
|
||||
<Declaration><![CDATA[TYPE ST_ValveAnalog_IO :
|
||||
STRUCT
|
||||
stAnalogInputIO : ST_AnalogInput_IO;
|
||||
|
||||
i_xOpenFeedback AT %I* : BOOL;
|
||||
i_xCloseFeedback AT %I* : BOOL;
|
||||
|
||||
stAnalogOutputIO : ST_AnalogOutput_IO;
|
||||
END_STRUCT
|
||||
END_TYPE
|
||||
]]></Declaration>
|
||||
</DUT>
|
||||
</TcPlcObject>
|
||||
21
BasicComponents/Components/Valves/DUTs/ST_Valve_IO.TcDUT
Normal file
21
BasicComponents/Components/Valves/DUTs/ST_Valve_IO.TcDUT
Normal file
@@ -0,0 +1,21 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TcPlcObject Version="1.1.0.1">
|
||||
<DUT Name="ST_Valve_IO" Id="{f1913d56-9cee-47f4-8fd9-831b29501390}">
|
||||
<Declaration><![CDATA[TYPE ST_Valve_IO :
|
||||
STRUCT
|
||||
// Valve is closed feedback
|
||||
i_xOpenFeedback AT %I* : BOOL;
|
||||
|
||||
// Valve is open feedback
|
||||
i_xCloseFeedback AT %I* : BOOL;
|
||||
|
||||
// Use xOpenValve for normally closed valves
|
||||
o_xOpenValve AT %Q* : BOOL := FALSE;
|
||||
|
||||
// Use xCloseValve for normally open valves
|
||||
o_xCloseValve AT %Q* : BOOL := TRUE;
|
||||
END_STRUCT
|
||||
END_TYPE
|
||||
]]></Declaration>
|
||||
</DUT>
|
||||
</TcPlcObject>
|
||||
@@ -3,8 +3,7 @@
|
||||
<POU Name="FB_Valve" Id="{658f8bac-5e87-43a2-9b4c-a425a60acda2}" SpecialFunc="None">
|
||||
<Declaration><![CDATA[FUNCTION_BLOCK FINAL FB_Valve
|
||||
VAR_INPUT
|
||||
xOpenFeedback AT %I* : BOOL;
|
||||
xCloseFeedback AT %I* : BOOL;
|
||||
|
||||
|
||||
// Open and close the valve
|
||||
xAutomaticOpen : BOOL;
|
||||
@@ -38,16 +37,13 @@ VAR_INPUT
|
||||
xInUnitTestMode : BOOL := FALSE;
|
||||
END_VAR
|
||||
VAR_OUTPUT
|
||||
// Use xOpenValve for normally closed valves
|
||||
xOpenValve AT %Q* : BOOL := FALSE;
|
||||
|
||||
// Use xCloseValve for normally open valves
|
||||
xCloseValve AT %Q* : BOOL := TRUE;
|
||||
|
||||
// Error in valve active
|
||||
xError : BOOL;
|
||||
END_VAR
|
||||
VAR_IN_OUT
|
||||
// IO
|
||||
stIO : ST_Valve_IO;
|
||||
|
||||
// HMI interface
|
||||
stHMIInterface : ST_HMI_VALVE_DATA;
|
||||
END_VAR
|
||||
@@ -153,8 +149,8 @@ IF (NOT _xProcessINTLKOk) OR (NOT _xSafetyINTLKOk) THEN
|
||||
END_IF
|
||||
|
||||
// Handle open close feedback
|
||||
_xIsOpen := (stValveConfig.xHasOpenFeedback AND xOpenFeedback AND (NOT xCloseFeedback)) OR ((NOT stValveConfig.xHasOpenFeedback) AND _xOpenValve);
|
||||
_xIsClosed := (stValveConfig.xHasClosedFeedback AND xCloseFeedback AND (NOT xOpenFeedback)) OR ((NOT stValveConfig.xHasClosedFeedback) AND (NOT _xOpenValve));
|
||||
_xIsOpen := (stValveConfig.xHasOpenFeedback AND stIO.i_xOpenFeedback AND (NOT stIO.i_xCloseFeedback)) OR ((NOT stValveConfig.xHasOpenFeedback) AND _xOpenValve);
|
||||
_xIsClosed := (stValveConfig.xHasClosedFeedback AND stIO.i_xCloseFeedback AND (NOT stIO.i_xOpenFeedback)) OR ((NOT stValveConfig.xHasClosedFeedback) AND (NOT _xOpenValve));
|
||||
|
||||
|
||||
// ===========================
|
||||
@@ -209,8 +205,8 @@ END_IF
|
||||
// Copy internal signals to outputs
|
||||
// ================================
|
||||
|
||||
xOpenValve := _xOpenValve;
|
||||
xCloseValve := (NOT _xOpenValve);
|
||||
stIO.o_xOpenValve := _xOpenValve;
|
||||
stIO.o_xCloseValve := (NOT _xOpenValve);
|
||||
|
||||
xError := _xError;
|
||||
|
||||
@@ -6,14 +6,6 @@ FUNCTION_BLOCK FINAL FB_ValveAnalog
|
||||
VAR_INPUT
|
||||
rSPAutomatic : REAL;
|
||||
|
||||
iFeedbackValue AT %I* : INT;
|
||||
xFeedbackUnderrange AT %I* : BOOL;
|
||||
xFeedbackOverrange AT %I* : BOOL;
|
||||
xErrorCard AT %I* : BOOL;
|
||||
|
||||
xOpenFeedback AT %I* : BOOL;
|
||||
xCloseFeedback AT %I* : BOOL;
|
||||
|
||||
// Open and close the valve
|
||||
xAutomaticOpen : BOOL;
|
||||
|
||||
@@ -46,13 +38,14 @@ VAR_INPUT
|
||||
xInUnitTestMode : BOOL := FALSE;
|
||||
END_VAR
|
||||
VAR_OUTPUT
|
||||
// Ouput setpoint
|
||||
iSetpoint AT %Q* : INT;
|
||||
|
||||
// Error in valve active
|
||||
xError : BOOL;
|
||||
END_VAR
|
||||
VAR_IN_OUT
|
||||
// IO
|
||||
stIO : ST_ValveAnalog_IO;
|
||||
|
||||
// HMI interface
|
||||
stHMIInterface : ST_HMI_ANALOG_VALVE_DATA;
|
||||
END_VAR
|
||||
@@ -231,8 +224,8 @@ _fbAnalogOutput(
|
||||
xReleaseErrors:= xReleaseErrors,
|
||||
xConfirmAlarms:= xConfirmAlarms,
|
||||
xInUnitTestMode := xInUnitTestMode,
|
||||
iAnalogValue=> iSetpoint,
|
||||
xError => _xAnalogOutputError,
|
||||
stIO := stIO.stAnalogOutputIO,
|
||||
stHMIInterface:= stHMIInterface.stSetpoint);
|
||||
|
||||
IF _fbAnalogOutput.xError THEN
|
||||
@@ -250,10 +243,6 @@ ELSE
|
||||
END_IF
|
||||
|
||||
_fbAnalogInput(
|
||||
iAnalogValue:= iFeedbackValue,
|
||||
xUnderrange:= _xHasUnderrangeFeedback AND xFeedbackUnderrange,
|
||||
xOverrange:= _xHasOverrangeFeedback AND xFeedbackOverrange,
|
||||
xErrorCard:= _xHasCardError AND xErrorCard,
|
||||
stAnalogIOConfig:= stValveConfig.stAnalogInputConfig,
|
||||
stAnalogEWConfig:= stValveConfig.stAnalogInputEWConfig,
|
||||
xReleaseErrors:= xReleaseErrors,
|
||||
@@ -267,7 +256,8 @@ _fbAnalogInput(
|
||||
xErrorLow=> ,
|
||||
xWarningLow=> ,
|
||||
xWarningHigh=> ,
|
||||
xErrorHigh=> );
|
||||
xErrorHigh=> ,
|
||||
stIO := stIO.stAnalogInputIO);
|
||||
|
||||
IF _fbAnalogInput.xError THEN
|
||||
_xError := TRUE;
|
||||
@@ -279,8 +269,8 @@ END_IF
|
||||
|
||||
|
||||
// Handle open close feedback
|
||||
_xIsOpen := (stValveConfig.xHasOpenFeedback AND xOpenFeedback AND (NOT xCloseFeedback)) OR ((NOT stValveConfig.xHasOpenFeedback) AND (_rCurrentValvePosition >= stValveConfig.rPVIsOpen));
|
||||
_xIsClosed := (stValveConfig.xHasClosedFeedback AND xCloseFeedback AND (NOT xOpenFeedback)) OR ((NOT stValveConfig.xHasClosedFeedback) AND (_rCurrentValvePosition <= stValveConfig.rPVIsOpen));
|
||||
_xIsOpen := (stValveConfig.xHasOpenFeedback AND stIO.i_xOpenFeedback AND (NOT stIO.i_xCloseFeedback)) OR ((NOT stValveConfig.xHasOpenFeedback) AND (_rCurrentValvePosition >= stValveConfig.rPVIsOpen));
|
||||
_xIsClosed := (stValveConfig.xHasClosedFeedback AND stIO.i_xCloseFeedback AND (NOT stIO.i_xOpenFeedback)) OR ((NOT stValveConfig.xHasClosedFeedback) AND (_rCurrentValvePosition <= stValveConfig.rPVIsOpen));
|
||||
|
||||
|
||||
// Calculate target tolerance
|
||||
24
BasicComponents/DUTs/E_CmdResult.TcDUT
Normal file
24
BasicComponents/DUTs/E_CmdResult.TcDUT
Normal file
@@ -0,0 +1,24 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TcPlcObject Version="1.1.0.1">
|
||||
<DUT Name="E_CmdResult" Id="{280b22d6-e4fc-482b-8eba-52154be334ab}">
|
||||
<Declaration><![CDATA[{attribute 'qualified_only'}
|
||||
{attribute 'strict'}
|
||||
{attribute 'to_string'}
|
||||
TYPE E_CmdResult :
|
||||
(
|
||||
// Command accepted and in execution
|
||||
ACCEPTED := 0,
|
||||
|
||||
// Component currently busy with another command
|
||||
BUSY := 1,
|
||||
|
||||
// Command currently not allowed
|
||||
REJECTED := 2,
|
||||
|
||||
// Component has error
|
||||
ERROR := 3
|
||||
) INT;
|
||||
END_TYPE
|
||||
]]></Declaration>
|
||||
</DUT>
|
||||
</TcPlcObject>
|
||||
@@ -1,599 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TcPlcObject Version="1.1.0.1">
|
||||
<POU Name="FB_AxisPTP" Id="{5a7035b7-f11b-403b-9828-9d2d1f662a54}" SpecialFunc="None">
|
||||
<Declaration><![CDATA[FUNCTION_BLOCK FB_AxisPTP
|
||||
VAR_INPUT
|
||||
xEnable : BOOL;
|
||||
xCalibrationCam AT %I* : BOOL;
|
||||
xInvertCalibrationCam : BOOL := FALSE;
|
||||
xEnablePositive : BOOL := TRUE;
|
||||
xEnableNegative : BOOL := TRUE;
|
||||
rOverride : REAL := 100.0;
|
||||
|
||||
lrVelocity : LREAL;
|
||||
lrAcceleration : LREAL := 0.0;
|
||||
lrDecelleration : LREAL := 0.0;
|
||||
lrJerk : LREAL := 0.0;
|
||||
|
||||
xConfirmAlarms : BOOL;
|
||||
END_VAR
|
||||
VAR_OUTPUT
|
||||
xEnabled : BOOL;
|
||||
xHomed : BOOL;
|
||||
lrActPosition : LREAL;
|
||||
xIsStopped : BOOL;
|
||||
xBusy : BOOL;
|
||||
xDone : BOOL;
|
||||
xError : BOOL;
|
||||
END_VAR
|
||||
VAR
|
||||
// ========
|
||||
// Axis fbs
|
||||
// ========
|
||||
|
||||
_fbAxis : AXIS_REF;
|
||||
_fbPower : MC_Power;
|
||||
_fbHome : MC_Home;
|
||||
_fbMoveAbsolute : MC_MoveAbsolute;
|
||||
_fbMoveRelative : MC_MoveRelative;
|
||||
_fbMoveVelocity : MC_MoveVelocity;
|
||||
_fbMoveModulo : MC_MoveModulo;
|
||||
_fbHalt : MC_Halt;
|
||||
_fbReset : MC_Reset;
|
||||
|
||||
|
||||
// ======================
|
||||
// Axis fbs control flags
|
||||
// ======================
|
||||
|
||||
_xEnable : BOOL;
|
||||
_xStartHomeing : BOOL;
|
||||
_xStartMoveAbsolute : BOOL;
|
||||
_xStartMoveRelative : BOOL;
|
||||
_xStartMoveVelocity : BOOL;
|
||||
_xStartMoveModulo : BOOL;
|
||||
_xHalt : BOOL;
|
||||
_xReset : BOOL;
|
||||
|
||||
|
||||
// =====================
|
||||
// Sequence control data
|
||||
// =====================
|
||||
|
||||
_xExecuteHoming : BOOL;
|
||||
_xExecuteMoveAbs : BOOL;
|
||||
_xExecuteMoveRel : BOOL;
|
||||
_xExecuteMoveVelocity : BOOL;
|
||||
_xExecuteMoveModulo : BOOL;
|
||||
_xExecuteHalt : BOOL;
|
||||
|
||||
|
||||
// =========================
|
||||
// Internal helper variables
|
||||
// =========================
|
||||
|
||||
_lrTargetPosition : LREAL;
|
||||
_lrRelativeDistance : LREAL;
|
||||
_lrHomingPos : LREAL;
|
||||
_eHomingMode : MC_HomingMode := MC_HomingMode.MC_DefaultHoming;
|
||||
_xCalibrationCam : BOOL;
|
||||
|
||||
_eMoveDirection : MC_Direction;
|
||||
|
||||
_xCanExecNewCmd : BOOL;
|
||||
|
||||
_eState : E_AXIS_PTP_STATE;
|
||||
|
||||
|
||||
// =============
|
||||
// Ouput buffers
|
||||
// =============
|
||||
|
||||
_xDone : BOOL;
|
||||
_xBusy : BOOL;
|
||||
_xError : BOOL;
|
||||
END_VAR
|
||||
]]></Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[// Call axis interface
|
||||
_fbAxis.ReadStatus();
|
||||
|
||||
IF _fbAxis.Status.Error THEN
|
||||
_xError := TRUE;
|
||||
END_IF
|
||||
|
||||
IF xInvertCalibrationCam THEN
|
||||
_xCalibrationCam := NOT xCalibrationCam;
|
||||
ELSE
|
||||
_xCalibrationCam := xCalibrationCam;
|
||||
END_IF
|
||||
|
||||
|
||||
// =================
|
||||
// Call axis classes
|
||||
// =================
|
||||
|
||||
_fbPower(
|
||||
Axis:= _fbAxis,
|
||||
Enable:= _xEnable,
|
||||
Enable_Positive:= xEnablePositive,
|
||||
Enable_Negative:= xEnableNegative,
|
||||
Override:= rOverride);
|
||||
|
||||
IF _fbPower.Error THEN
|
||||
_xError := TRUE;
|
||||
END_IF
|
||||
|
||||
|
||||
_fbHome(
|
||||
Axis:= _fbAxis,
|
||||
Execute:= _xStartHomeing,
|
||||
Position:= _lrHomingPos,
|
||||
HomingMode:= _eHomingMode,
|
||||
bCalibrationCam:= _xCalibrationCam);
|
||||
|
||||
IF _fbHome.Error THEN
|
||||
_xError := TRUE;
|
||||
END_IF
|
||||
|
||||
_fbReset(
|
||||
Axis:= _fbAxis,
|
||||
Execute:= _xReset);
|
||||
|
||||
IF _fbReset.Error THEN
|
||||
_xError := TRUE;
|
||||
END_IF
|
||||
|
||||
|
||||
_fbMoveAbsolute(
|
||||
Axis:= _fbAxis,
|
||||
Execute:= _xStartMoveAbsolute,
|
||||
Position:= _lrTargetPosition,
|
||||
Velocity:= lrVelocity,
|
||||
Acceleration:= 0,
|
||||
Deceleration:= 0,
|
||||
Jerk:= 0);
|
||||
|
||||
IF _fbMoveAbsolute.Error THEN
|
||||
_xError := TRUE;
|
||||
END_IF
|
||||
|
||||
|
||||
_fbMoveRelative(
|
||||
Axis:= _fbAxis,
|
||||
Execute:= _xStartMoveRelative,
|
||||
Distance:= _lrRelativeDistance,
|
||||
Velocity:= lrVelocity,
|
||||
Acceleration:= 0,
|
||||
Deceleration:= 0,
|
||||
Jerk:= 0);
|
||||
|
||||
IF _fbMoveRelative.Error THEN
|
||||
_xError := TRUE;
|
||||
END_IF
|
||||
|
||||
|
||||
_fbMoveVelocity(
|
||||
Axis:= _fbAxis,
|
||||
Execute:= _xStartMoveVelocity,
|
||||
Velocity:= lrVelocity,
|
||||
Acceleration:= 0,
|
||||
Deceleration:= 0,
|
||||
Jerk:= 0,
|
||||
Direction:= _eMoveDirection);
|
||||
|
||||
IF _fbMoveVelocity.Error THEN
|
||||
_xError := TRUE;
|
||||
END_IF
|
||||
|
||||
_fbMoveModulo(
|
||||
Axis:= _fbAxis,
|
||||
Execute:= _xStartMoveModulo,
|
||||
Position:= _lrTargetPosition,
|
||||
Velocity:= lrVelocity,
|
||||
Acceleration:= 0,
|
||||
Deceleration:= 0,
|
||||
Jerk:= 0,
|
||||
Direction:= _eMoveDirection);
|
||||
|
||||
IF _fbMoveModulo.Error THEN
|
||||
_xError := TRUE;
|
||||
END_IF
|
||||
|
||||
|
||||
_fbHalt(
|
||||
Axis:= _fbAxis,
|
||||
Execute:= _xHalt,
|
||||
Deceleration:= 0,
|
||||
BufferMode := MC_BufferMode.MC_Aborting,
|
||||
Jerk:= 0);
|
||||
|
||||
IF _fbHalt.Error THEN
|
||||
_xError := TRUE;
|
||||
END_IF
|
||||
|
||||
// ====================
|
||||
// Handle state machine
|
||||
// ====================
|
||||
|
||||
CASE _eState OF
|
||||
E_AXIS_PTP_STATE.OFF:
|
||||
IF xEnable THEN
|
||||
_xEnable := TRUE;
|
||||
_xBusy := TRUE;
|
||||
_xDone := FALSE;
|
||||
_eState := E_AXIS_PTP_STATE.WAIT_FOR_ENABLE;
|
||||
END_IF
|
||||
|
||||
IF _xError THEN
|
||||
_xBusy := FALSE;
|
||||
_eState := E_AXIS_PTP_STATE.ERROR;
|
||||
END_IF
|
||||
|
||||
|
||||
E_AXIS_PTP_STATE.WAIT_FOR_ENABLE:
|
||||
IF _fbPower.Status AND (NOT _xError) THEN
|
||||
_xBusy := FALSE;
|
||||
_xDone := TRUE;
|
||||
_eState := E_AXIS_PTP_STATE.ENABLED;
|
||||
END_IF
|
||||
|
||||
IF _xError THEN
|
||||
_xEnable := FALSE;
|
||||
_xBusy := FALSE;
|
||||
_eState := E_AXIS_PTP_STATE.ERROR;
|
||||
END_IF
|
||||
|
||||
|
||||
E_AXIS_PTP_STATE.ENABLED:
|
||||
|
||||
IF _xExecuteMoveAbs THEN
|
||||
_xExecuteMoveAbs := FALSE;
|
||||
_xStartMoveAbsolute := TRUE;
|
||||
_eState := E_AXIS_PTP_STATE.MOVING_ABSOLUTE;
|
||||
END_IF
|
||||
|
||||
IF _xExecuteMoveRel THEN
|
||||
_xExecuteMoveRel := FALSE;
|
||||
_xStartMoveRelative := TRUE;
|
||||
_eState := E_AXIS_PTP_STATE.MOVING_RELATIVE;
|
||||
END_IF
|
||||
|
||||
IF _xExecuteHoming THEN
|
||||
_xExecuteHoming := FALSE;
|
||||
_xStartHomeing := TRUE;
|
||||
_eState := E_AXIS_PTP_STATE.HOMING;
|
||||
END_IF
|
||||
|
||||
IF _xExecuteMoveVelocity THEN
|
||||
_xExecuteMoveVelocity := FALSE;
|
||||
_xStartMoveVelocity := TRUE;
|
||||
_eState := E_AXIS_PTP_STATE.MOVING_VELOCITY;
|
||||
END_IF
|
||||
|
||||
IF _xExecuteMoveModulo THEN
|
||||
_xExecuteMoveModulo := FALSE;
|
||||
_xStartMoveModulo := TRUE;
|
||||
_eState := E_AXIS_PTP_STATE.MOVING_MODULO;
|
||||
END_IF
|
||||
|
||||
IF (NOT xEnable) AND (NOT _xError) THEN
|
||||
_xEnable := FALSE;
|
||||
_xBusy := TRUE;
|
||||
_xDone := FALSE;
|
||||
_eState := E_AXIS_PTP_STATE.WAIT_FOR_DISABLE;
|
||||
END_IF
|
||||
|
||||
IF _xError THEN
|
||||
_xEnable := FALSE;
|
||||
_xBusy := FALSE;
|
||||
_eState := E_AXIS_PTP_STATE.ERROR;
|
||||
END_IF
|
||||
|
||||
|
||||
E_AXIS_PTP_STATE.HOMING:
|
||||
IF (NOT _fbHome.Busy) AND (NOT _xError) THEN
|
||||
_xStartHomeing := FALSE;
|
||||
_xBusy := FALSE;
|
||||
_xDone := TRUE;
|
||||
_eState := E_AXIS_PTP_STATE.ENABLED;
|
||||
END_IF
|
||||
|
||||
IF _xExecuteHalt THEN
|
||||
_xExecuteHalt := FALSE;
|
||||
_xStartHomeing := FALSE;
|
||||
_xHalt := TRUE;
|
||||
_eState := E_AXIS_PTP_STATE.HALTING;
|
||||
END_IF
|
||||
|
||||
IF _xError THEN
|
||||
_xStartHomeing := FALSE;
|
||||
_xBusy := FALSE;
|
||||
_eState := E_AXIS_PTP_STATE.ERROR;
|
||||
END_IF
|
||||
|
||||
|
||||
E_AXIS_PTP_STATE.MOVING_ABSOLUTE:
|
||||
IF (NOT _fbMoveAbsolute.Busy) AND (NOT _xError) THEN
|
||||
_xStartMoveAbsolute := FALSE;
|
||||
_xBusy := FALSE;
|
||||
_xDone := TRUE;
|
||||
_eState := E_AXIS_PTP_STATE.ENABLED;
|
||||
END_IF
|
||||
|
||||
IF _xExecuteHalt THEN
|
||||
_xExecuteHalt := FALSE;
|
||||
_xStartMoveAbsolute := FALSE;
|
||||
_xHalt := TRUE;
|
||||
_eState := E_AXIS_PTP_STATE.HALTING;
|
||||
END_IF
|
||||
|
||||
IF _xError THEN
|
||||
_xStartMoveAbsolute := FALSE;
|
||||
_xBusy := FALSE;
|
||||
_eState := E_AXIS_PTP_STATE.ERROR;
|
||||
END_IF
|
||||
|
||||
|
||||
E_AXIS_PTP_STATE.MOVING_RELATIVE:
|
||||
IF (NOT _fbMoveRelative.Busy) AND (NOT _xError) THEN
|
||||
_xStartMoveRelative := FALSE;
|
||||
_xBusy := FALSE;
|
||||
_xDone := TRUE;
|
||||
_eState := E_AXIS_PTP_STATE.ENABLED;
|
||||
END_IF
|
||||
|
||||
IF _xExecuteHalt THEN
|
||||
_xExecuteHalt := FALSE;
|
||||
_xStartMoveAbsolute := FALSE;
|
||||
_xHalt := TRUE;
|
||||
_eState := E_AXIS_PTP_STATE.HALTING;
|
||||
END_IF
|
||||
|
||||
IF _xError THEN
|
||||
_xStartMoveRelative := FALSE;
|
||||
_xBusy := FALSE;
|
||||
_eState := E_AXIS_PTP_STATE.ERROR;
|
||||
END_IF
|
||||
|
||||
|
||||
E_AXIS_PTP_STATE.MOVING_VELOCITY:
|
||||
IF _fbMoveVelocity.Error THEN
|
||||
_xBusy := FALSE;
|
||||
_xStartMoveVelocity := FALSE;
|
||||
_eState := E_AXIS_PTP_STATE.ERROR;
|
||||
END_IF
|
||||
|
||||
IF _xExecuteHalt THEN
|
||||
_xExecuteHalt := FALSE;
|
||||
_xStartMoveVelocity := FALSE;
|
||||
_xHalt := TRUE;
|
||||
_eState := E_AXIS_PTP_STATE.HALTING;
|
||||
END_IF
|
||||
|
||||
|
||||
E_AXIS_PTP_STATE.MOVING_MODULO:
|
||||
IF _fbMoveModulo.Done THEN
|
||||
_xStartMoveModulo := FALSE;
|
||||
_xBusy := FALSE;
|
||||
_xDone := TRUE;
|
||||
_eState := E_AXIS_PTP_STATE.ENABLED;
|
||||
END_IF
|
||||
|
||||
IF _xExecuteHalt THEN
|
||||
_xExecuteHalt := FALSE;
|
||||
_xStartMoveModulo := FALSE;
|
||||
_xHalt := TRUE;
|
||||
_eState := E_AXIS_PTP_STATE.HALTING;
|
||||
END_IF
|
||||
|
||||
IF _xError THEN
|
||||
_xStartMoveModulo := FALSE;
|
||||
_xBusy := FALSE;
|
||||
_eState := E_AXIS_PTP_STATE.ERROR;
|
||||
END_IF
|
||||
|
||||
|
||||
E_AXIS_PTP_STATE.HALTING:
|
||||
IF (NOT _fbHalt.Busy) AND (NOT _xError) THEN
|
||||
_xHalt := FALSE;
|
||||
_xBusy := FALSE;
|
||||
_xDone := TRUE;
|
||||
_eState := E_AXIS_PTP_STATE.ENABLED;
|
||||
END_IF
|
||||
|
||||
IF _xError THEN
|
||||
_xHalt := FALSE;
|
||||
_xBusy := FALSE;
|
||||
_eState := E_AXIS_PTP_STATE.ERROR;
|
||||
END_IF
|
||||
|
||||
|
||||
E_AXIS_PTP_STATE.WAIT_FOR_DISABLE:
|
||||
IF (NOT _fbPower.Status) AND (NOT _xError) THEN
|
||||
_xBusy := FALSE;
|
||||
_xDone := TRUE;
|
||||
_eState := E_AXIS_PTP_STATE.OFF;
|
||||
END_IF
|
||||
|
||||
IF _xError THEN
|
||||
_xEnable := FALSE;
|
||||
_xBusy := FALSE;
|
||||
_eState := E_AXIS_PTP_STATE.ERROR;
|
||||
END_IF
|
||||
|
||||
|
||||
E_AXIS_PTP_STATE.ERROR:
|
||||
IF xConfirmAlarms THEN
|
||||
_xBusy := FALSE;
|
||||
_xReset := TRUE;
|
||||
_xError := FALSE;
|
||||
_eState := E_AXIS_PTP_STATE.RESET;
|
||||
END_IF
|
||||
|
||||
|
||||
E_AXIS_PTP_STATE.RESET:
|
||||
IF _fbReset.Done THEN
|
||||
_xReset := FALSE;
|
||||
_xError := FALSE;
|
||||
_eState := E_AXIS_PTP_STATE.OFF;
|
||||
END_IF
|
||||
|
||||
|
||||
ELSE
|
||||
_eState := E_AXIS_PTP_STATE.ERROR;
|
||||
_xError := TRUE;
|
||||
END_CASE
|
||||
|
||||
// Can the axis perform a new move command
|
||||
_xCanExecNewCmd := (NOT _xBusy) AND _fbPower.Status AND (NOT _xError);
|
||||
|
||||
// Copy internal buffers to outputs
|
||||
xEnabled := _fbPower.Status;
|
||||
xHomed := _fbAxis.Status.Homed;
|
||||
lrActPosition := _fbAxis.NcToPlc.ActPos;
|
||||
xIsStopped := _fbAxis.Status.StandStill OR _fbAxis.Status.Disabled;
|
||||
xDone := _xDone;
|
||||
xBusy := _xBusy;
|
||||
xError := _xError;]]></ST>
|
||||
</Implementation>
|
||||
<Method Name="M_Halt" Id="{f6e3b049-4121-4299-b0f5-55178ecb35c3}">
|
||||
<Declaration><![CDATA[METHOD M_Halt
|
||||
VAR_OUTPUT
|
||||
END_VAR]]></Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[IF _xBusy THEN
|
||||
_xExecuteHalt := TRUE;
|
||||
_xDone := FALSE;
|
||||
xDone := FALSE;
|
||||
_xBusy := TRUE;
|
||||
xBusy := TRUE;
|
||||
END_IF]]></ST>
|
||||
</Implementation>
|
||||
</Method>
|
||||
<Method Name="M_Homing" Id="{816a1a43-38da-49f0-b902-c1027a6ba127}">
|
||||
<Declaration><![CDATA[METHOD M_Homing : BOOL
|
||||
VAR_INPUT
|
||||
lrHomingPosition : LREAL := Tc2_MC2.DEFAULT_HOME_POSITION;
|
||||
eHomingMode : MC_HomingMode := MC_HomingMode.MC_DefaultHoming;
|
||||
END_VAR]]></Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[IF _xCanExecNewCmd THEN
|
||||
_xCanExecNewCmd := FALSE;
|
||||
|
||||
_lrHomingPos := lrHomingPosition;
|
||||
_eHomingMode := eHomingMode;
|
||||
_xExecuteHoming := TRUE;
|
||||
|
||||
_xDone := FALSE;
|
||||
xDone := FALSE;
|
||||
_xBusy := TRUE;
|
||||
xBusy := TRUE;
|
||||
|
||||
M_Homing := TRUE;
|
||||
ELSE
|
||||
M_Homing := FALSE;
|
||||
END_IF]]></ST>
|
||||
</Implementation>
|
||||
</Method>
|
||||
<Method Name="M_MoveAbs" Id="{f67a4861-cdb0-4dd2-93c8-1ae9dbc9a9a6}">
|
||||
<Declaration><![CDATA[METHOD M_MoveAbs : BOOL;
|
||||
VAR_INPUT
|
||||
lrTargetPos : LREAL;
|
||||
END_VAR]]></Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[IF _xCanExecNewCmd THEN
|
||||
_xCanExecNewCmd := FALSE;
|
||||
|
||||
_lrTargetPosition := lrTargetPos;
|
||||
_xExecuteMoveAbs := TRUE;
|
||||
|
||||
_xDone := FALSE;
|
||||
xDone := FALSE;
|
||||
_xBusy := TRUE;
|
||||
xBusy := TRUE;
|
||||
|
||||
M_MoveAbs := TRUE;
|
||||
ELSE
|
||||
M_MoveAbs := FALSE;
|
||||
END_IF
|
||||
]]></ST>
|
||||
</Implementation>
|
||||
</Method>
|
||||
<Method Name="M_MoveModulo" Id="{1a5eaefa-5bb1-4438-b3e0-80c1a34fc0ee}">
|
||||
<Declaration><![CDATA[METHOD M_MoveModulo : BOOL
|
||||
VAR_INPUT
|
||||
lrTargetPos : LREAL;
|
||||
eMoveDirection : MC_Direction;
|
||||
END_VAR]]></Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[IF _xCanExecNewCmd THEN
|
||||
_xCanExecNewCmd := FALSE;
|
||||
|
||||
_lrTargetPosition := lrTargetPos;
|
||||
_eMoveDirection := eMoveDirection;
|
||||
_xExecuteMoveModulo := TRUE;
|
||||
|
||||
_xDone := FALSE;
|
||||
xDone := FALSE;
|
||||
_xBusy := TRUE;
|
||||
xBusy := TRUE;
|
||||
|
||||
M_MoveModulo := TRUE;
|
||||
ELSE
|
||||
M_MoveModulo := FALSE;
|
||||
END_IF]]></ST>
|
||||
</Implementation>
|
||||
</Method>
|
||||
<Method Name="M_MoveRel" Id="{51e5fe82-5e25-4de0-84c7-b4d6560c312f}">
|
||||
<Declaration><![CDATA[METHOD M_MoveRel : BOOL;
|
||||
VAR_INPUT
|
||||
lrRelDist : LREAL;
|
||||
END_VAR]]></Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[IF _xCanExecNewCmd THEN
|
||||
_xCanExecNewCmd := FALSE;
|
||||
|
||||
_xBusy := TRUE;
|
||||
_lrRelativeDistance := lrRelDist;
|
||||
_xExecuteMoveRel:= TRUE;
|
||||
|
||||
_xDone := FALSE;
|
||||
xDone := FALSE;
|
||||
_xBusy := TRUE;
|
||||
xBusy := TRUE;
|
||||
|
||||
M_MoveRel := TRUE;
|
||||
ELSE
|
||||
M_MoveRel := FALSE;
|
||||
END_IF]]></ST>
|
||||
</Implementation>
|
||||
</Method>
|
||||
<Method Name="M_MoveVelocity" Id="{fd4ad471-f522-45f2-a138-ebe509907cf6}">
|
||||
<Declaration><![CDATA[METHOD M_MoveVelocity : BOOL;
|
||||
VAR_INPUT
|
||||
eDirection : MC_Direction := MC_Direction.MC_Positive_Direction;
|
||||
END_VAR
|
||||
]]></Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[IF _xCanExecNewCmd THEN
|
||||
_xCanExecNewCmd := FALSE;
|
||||
|
||||
_xBusy := TRUE;
|
||||
_xExecuteMoveVelocity := TRUE;
|
||||
_eMoveDirection := eDirection;
|
||||
|
||||
_xDone := FALSE;
|
||||
xDone := FALSE;
|
||||
_xBusy := TRUE;
|
||||
xBusy := TRUE;
|
||||
|
||||
M_MoveVelocity := TRUE;
|
||||
ELSE
|
||||
M_MoveVelocity := FALSE;
|
||||
END_IF
|
||||
]]></ST>
|
||||
</Implementation>
|
||||
</Method>
|
||||
</POU>
|
||||
</TcPlcObject>
|
||||
@@ -4,20 +4,20 @@
|
||||
<Declaration><![CDATA[{attribute 'analysis' := '-33'}
|
||||
PROGRAM PRG_MAIN
|
||||
VAR
|
||||
// Analog I/O tests
|
||||
_fbAnalogInputTest : FB_AnalogInputTest;
|
||||
_fbAnalogOutputTest : FB_AnalogOutputTest;
|
||||
|
||||
// Valve tests
|
||||
_fbValve_Test : FB_Valve_Test;
|
||||
_fbValve_TimeoutTestOpen : FB_ValveTestTimoutOpen;
|
||||
_fbValve_TimeoutTestClose : FB_ValveTestTimoutClose;
|
||||
_fbValve_TimoutTriggerOpen : FB_ValveTestTriggerTimoutOpen;
|
||||
_fbValve_TimoutTriggerClose : FB_ValveTestTriggerTimoutClose;
|
||||
|
||||
_fbValveAnalogTest : FB_ValveAnalog_Test;
|
||||
|
||||
_fbValveTestHMI : FB_ValveTestHMI;
|
||||
// // Analog I/O tests
|
||||
// _fbAnalogInputTest : FB_AnalogInputTest;
|
||||
// _fbAnalogOutputTest : FB_AnalogOutputTest;
|
||||
//
|
||||
// // Valve tests
|
||||
// _fbValve_Test : FB_Valve_Test;
|
||||
// _fbValve_TimeoutTestOpen : FB_ValveTestTimoutOpen;
|
||||
// _fbValve_TimeoutTestClose : FB_ValveTestTimoutClose;
|
||||
// _fbValve_TimoutTriggerOpen : FB_ValveTestTriggerTimoutOpen;
|
||||
// _fbValve_TimoutTriggerClose : FB_ValveTestTriggerTimoutClose;
|
||||
//
|
||||
// _fbValveAnalogTest : FB_ValveAnalog_Test;
|
||||
//
|
||||
// _fbValveTestHMI : FB_ValveTestHMI;
|
||||
|
||||
// Release signal test
|
||||
_fbReleaseSignalTest : FB_ReleaseSignalTest;
|
||||
@@ -131,13 +131,13 @@ _stAnalogEWConfig.stDelays := _stDelayConfig;
|
||||
|
||||
// run analog input
|
||||
_fbAnalogInput(
|
||||
iAnalogValue := 1234,
|
||||
i_iAnalogValue := 1234,
|
||||
stAnalogIOConfig := _stAnalogInputConfig,
|
||||
stAnalogEWConfig := _stAnalogEWConfig,
|
||||
xReleaseLimitErrors := TRUE,
|
||||
xUnderrange:= FALSE,
|
||||
xOverrange:= FALSE,
|
||||
xErrorCard:= FALSE,
|
||||
i_xUnderrange:= FALSE,
|
||||
i_xOverrange:= FALSE,
|
||||
i_xErrorCard:= FALSE,
|
||||
xInUnitTestMode := TRUE,
|
||||
xError=> _xError,
|
||||
rScaledValue=> );
|
||||
@@ -179,13 +179,13 @@ _stAnalogEWConfig.stDelays := _stDelayConfig;
|
||||
|
||||
// run analog input
|
||||
_fbAnalogInput(
|
||||
iAnalogValue:= 1234,
|
||||
i_iAnalogValue:= 1234,
|
||||
stAnalogIOConfig := _stAnalogInputConfig,
|
||||
stAnalogEWConfig := _stAnalogEWConfig,
|
||||
xReleaseLimitErrors := TRUE,
|
||||
xUnderrange:= FALSE,
|
||||
xOverrange:= FALSE,
|
||||
xErrorCard:= FALSE,
|
||||
i_xUnderrange:= FALSE,
|
||||
i_xOverrange:= FALSE,
|
||||
i_xErrorCard:= FALSE,
|
||||
xInUnitTestMode := TRUE,
|
||||
xError=> _xError,
|
||||
rScaledValue=> );
|
||||
@@ -229,12 +229,12 @@ _stAnalogEWConfig.stDelays := _stDelayConfig;
|
||||
|
||||
// run analog input
|
||||
_fbAnalogInput(
|
||||
iAnalogValue:= 1234,
|
||||
i_iAnalogValue:= 1234,
|
||||
stAnalogIOConfig := _stAnalogInputConfig,
|
||||
stAnalogEWConfig := _stAnalogEWConfig,
|
||||
xUnderrange:= FALSE,
|
||||
xOverrange:= FALSE,
|
||||
xErrorCard:= FALSE,
|
||||
i_xUnderrange:= FALSE,
|
||||
i_xOverrange:= FALSE,
|
||||
i_xErrorCard:= FALSE,
|
||||
xInUnitTestMode := TRUE,
|
||||
xError=> _xError,
|
||||
rScaledValue=> _rResult);
|
||||
@@ -281,12 +281,12 @@ _stAnalogEWConfig.stDelays := _stDelayConfig;
|
||||
|
||||
// Check with active release signal
|
||||
_fbAI(
|
||||
iAnalogValue:= 95,
|
||||
i_iAnalogValue:= 95,
|
||||
stAnalogIOConfig := _stAnalogInputConfig,
|
||||
stAnalogEWConfig := _stAnalogEWConfig,
|
||||
xUnderrange:= FALSE,
|
||||
xOverrange:= FALSE,
|
||||
xErrorCard:= FALSE,
|
||||
i_xUnderrange:= FALSE,
|
||||
i_xOverrange:= FALSE,
|
||||
i_xErrorCard:= FALSE,
|
||||
xReleaseLimitErrors:= TRUE,
|
||||
xError=> _xResultError,
|
||||
rScaledValue=> ,
|
||||
@@ -304,10 +304,10 @@ AssertTrue(Condition:= _xResultErrorHigh, Message:= 'Error high is not active');
|
||||
|
||||
// Check without active release signal
|
||||
_fbAI(
|
||||
iAnalogValue:= 95,
|
||||
xUnderrange:= FALSE,
|
||||
xOverrange:= FALSE,
|
||||
xErrorCard:= FALSE,
|
||||
i_iAnalogValue:= 95,
|
||||
i_xUnderrange:= FALSE,
|
||||
i_xOverrange:= FALSE,
|
||||
i_xErrorCard:= FALSE,
|
||||
xReleaseLimitErrors:= FALSE,
|
||||
xError=> _xResultError,
|
||||
rScaledValue=> ,
|
||||
@@ -365,12 +365,12 @@ _stAnalogEWConfig.stDelays := _stDelayConfig;
|
||||
IF NOT _xErrorHighOffInitDone THEN
|
||||
_xErrorHighOffInitDone := TRUE;
|
||||
_fbAIErrorHighOff(
|
||||
iAnalogValue:= 95,
|
||||
i_iAnalogValue:= 95,
|
||||
stAnalogIOConfig := _stAnalogInputConfig,
|
||||
stAnalogEWConfig := _stAnalogEWConfig,
|
||||
xUnderrange:= FALSE,
|
||||
xOverrange:= FALSE,
|
||||
xErrorCard:= FALSE,
|
||||
i_xUnderrange:= FALSE,
|
||||
i_xOverrange:= FALSE,
|
||||
i_xErrorCard:= FALSE,
|
||||
xReleaseLimitErrors:= TRUE,
|
||||
xError=> _xResultError,
|
||||
rScaledValue=> ,
|
||||
@@ -382,10 +382,10 @@ IF NOT _xErrorHighOffInitDone THEN
|
||||
ELSE
|
||||
_fbErrorHighOffTimer(IN := TRUE, PT := timOffTime);
|
||||
_fbAIErrorHighOff(
|
||||
iAnalogValue:= 50,
|
||||
xUnderrange:= FALSE,
|
||||
xOverrange:= FALSE,
|
||||
xErrorCard:= FALSE,
|
||||
i_iAnalogValue:= 50,
|
||||
i_xUnderrange:= FALSE,
|
||||
i_xOverrange:= FALSE,
|
||||
i_xErrorCard:= FALSE,
|
||||
xReleaseLimitErrors:= TRUE,
|
||||
xError=> _xResultError,
|
||||
rScaledValue=> ,
|
||||
@@ -454,12 +454,12 @@ _fbErrorHighOnTimer(IN := TRUE, PT := timOnTime);
|
||||
|
||||
// Check with active release signal
|
||||
_fbAIErrorHighOn(
|
||||
iAnalogValue:= 95,
|
||||
i_iAnalogValue:= 95,
|
||||
stAnalogIOConfig := _stAnalogInputConfig,
|
||||
stAnalogEWConfig := _stAnalogEWConfig,
|
||||
xUnderrange:= FALSE,
|
||||
xOverrange:= FALSE,
|
||||
xErrorCard:= FALSE,
|
||||
i_xUnderrange:= FALSE,
|
||||
i_xOverrange:= FALSE,
|
||||
i_xErrorCard:= FALSE,
|
||||
xReleaseLimitErrors:= TRUE,
|
||||
xError=> _xResultError,
|
||||
rScaledValue=> ,
|
||||
@@ -518,12 +518,12 @@ _stAnalogEWConfig.stDelays := _stDelayConfig;
|
||||
|
||||
// Error low with release
|
||||
_fbAI(
|
||||
iAnalogValue:= 0,
|
||||
i_iAnalogValue:= 0,
|
||||
stAnalogIOConfig := _stAnalogInputConfig,
|
||||
stAnalogEWConfig := _stAnalogEWConfig,
|
||||
xUnderrange:= FALSE,
|
||||
xOverrange:= FALSE,
|
||||
xErrorCard:= FALSE,
|
||||
i_xUnderrange:= FALSE,
|
||||
i_xOverrange:= FALSE,
|
||||
i_xErrorCard:= FALSE,
|
||||
xReleaseLimitErrors:= TRUE,
|
||||
xError=> _xResultError,
|
||||
rScaledValue=> ,
|
||||
@@ -542,10 +542,10 @@ AssertFalse(Condition:= _xResultErrorHigh, Message:= 'Error high is active');
|
||||
|
||||
// Error low without release
|
||||
_fbAI(
|
||||
iAnalogValue:= 0,
|
||||
xUnderrange:= FALSE,
|
||||
xOverrange:= FALSE,
|
||||
xErrorCard:= FALSE,
|
||||
i_iAnalogValue:= 0,
|
||||
i_xUnderrange:= FALSE,
|
||||
i_xOverrange:= FALSE,
|
||||
i_xErrorCard:= FALSE,
|
||||
xReleaseLimitErrors:= FALSE,
|
||||
xError=> _xResultError,
|
||||
rScaledValue=> ,
|
||||
@@ -602,12 +602,12 @@ _stAnalogEWConfig.stDelays := _stDelayConfig;
|
||||
IF NOT _xErrorLowOffInitDone THEN
|
||||
_xErrorLowOffInitDone := TRUE;
|
||||
_fbAIErrorLowOff(
|
||||
iAnalogValue:= 5,
|
||||
i_iAnalogValue:= 5,
|
||||
stAnalogIOConfig := _stAnalogInputConfig,
|
||||
stAnalogEWConfig := _stAnalogEWConfig,
|
||||
xUnderrange:= FALSE,
|
||||
xOverrange:= FALSE,
|
||||
xErrorCard:= FALSE,
|
||||
i_xUnderrange:= FALSE,
|
||||
i_xOverrange:= FALSE,
|
||||
i_xErrorCard:= FALSE,
|
||||
xReleaseLimitErrors:= TRUE,
|
||||
xError=> _xResultError,
|
||||
rScaledValue=> ,
|
||||
@@ -619,10 +619,10 @@ IF NOT _xErrorLowOffInitDone THEN
|
||||
ELSE
|
||||
_fbErrorLowOffTimer(IN := TRUE, PT := timOffTime);
|
||||
_fbAIErrorLowOff(
|
||||
iAnalogValue:= 50,
|
||||
xUnderrange:= FALSE,
|
||||
xOverrange:= FALSE,
|
||||
xErrorCard:= FALSE,
|
||||
i_iAnalogValue:= 50,
|
||||
i_xUnderrange:= FALSE,
|
||||
i_xOverrange:= FALSE,
|
||||
i_xErrorCard:= FALSE,
|
||||
xReleaseLimitErrors:= TRUE,
|
||||
xError=> _xResultError,
|
||||
rScaledValue=> ,
|
||||
@@ -688,12 +688,12 @@ _fbErrorLowOnTimer(IN := TRUE, PT := timOnTime);
|
||||
|
||||
// Check with active release signal
|
||||
_fbAIErrorLowOn(
|
||||
iAnalogValue:= 5,
|
||||
i_iAnalogValue:= 5,
|
||||
stAnalogIOConfig := _stAnalogInputConfig,
|
||||
stAnalogEWConfig := _stAnalogEWConfig,
|
||||
xUnderrange:= FALSE,
|
||||
xOverrange:= FALSE,
|
||||
xErrorCard:= FALSE,
|
||||
i_xUnderrange:= FALSE,
|
||||
i_xOverrange:= FALSE,
|
||||
i_xErrorCard:= FALSE,
|
||||
xReleaseLimitErrors:= TRUE,
|
||||
xError=> _xResultError,
|
||||
rScaledValue=> ,
|
||||
@@ -753,12 +753,12 @@ _stAnalogEWConfig.stDelays := _stDelayConfig;
|
||||
|
||||
// run analog input
|
||||
_fbAnalogInput(
|
||||
iAnalogValue:= 3071, // 0,75 * 4095 = 3071,25
|
||||
i_iAnalogValue:= 3071, // 0,75 * 4095 = 3071,25
|
||||
stAnalogIOConfig := _stAnalogInputConfig,
|
||||
stAnalogEWConfig := _stAnalogEWConfig,
|
||||
xUnderrange:= FALSE,
|
||||
xOverrange:= FALSE,
|
||||
xErrorCard:= FALSE,
|
||||
i_xUnderrange:= FALSE,
|
||||
i_xOverrange:= FALSE,
|
||||
i_xErrorCard:= FALSE,
|
||||
xError=> ,
|
||||
xInUnitTestMode := TRUE,
|
||||
rScaledValue=> _rResult);
|
||||
@@ -807,12 +807,12 @@ _stAnalogEWConfig.stDelays := _stDelayConfig;
|
||||
|
||||
// run AI to check for overrange error
|
||||
_fbAI(
|
||||
iAnalogValue:= 50,
|
||||
i_iAnalogValue:= 50,
|
||||
stAnalogIOConfig := _stAnalogInputConfig,
|
||||
stAnalogEWConfig := _stAnalogEWConfig,
|
||||
xUnderrange:= FALSE,
|
||||
xOverrange:= TRUE,
|
||||
xErrorCard:= ,
|
||||
i_xUnderrange:= FALSE,
|
||||
i_xOverrange:= TRUE,
|
||||
i_xErrorCard:= ,
|
||||
xReleaseLimitErrors:= TRUE,
|
||||
xError=> _xResultError,
|
||||
rScaledValue=> ,
|
||||
@@ -866,12 +866,12 @@ IF NOT _xOverrangeOffInitDone THEN
|
||||
_xOverrangeOffInitDone := TRUE;
|
||||
// run AI to check for overrange error
|
||||
_fbAIOverrangeOff(
|
||||
iAnalogValue:= 50,
|
||||
i_iAnalogValue:= 50,
|
||||
stAnalogIOConfig := _stAnalogInputConfig,
|
||||
stAnalogEWConfig := _stAnalogEWConfig,
|
||||
xUnderrange:= FALSE,
|
||||
xOverrange:= TRUE,
|
||||
xErrorCard:= ,
|
||||
i_xUnderrange:= FALSE,
|
||||
i_xOverrange:= TRUE,
|
||||
i_xErrorCard:= ,
|
||||
xReleaseLimitErrors:= TRUE,
|
||||
xError=> _xResultError,
|
||||
rScaledValue=> ,
|
||||
@@ -884,12 +884,12 @@ END_IF
|
||||
|
||||
// run AI cyclically until overrange error is supposed to be off
|
||||
_fbAIOverrangeOff(
|
||||
iAnalogValue:= 50,
|
||||
i_iAnalogValue:= 50,
|
||||
stAnalogIOConfig := _stAnalogInputConfig,
|
||||
stAnalogEWConfig := _stAnalogEWConfig,
|
||||
xUnderrange:= FALSE,
|
||||
xOverrange:= FALSE,
|
||||
xErrorCard:= ,
|
||||
i_xUnderrange:= FALSE,
|
||||
i_xOverrange:= FALSE,
|
||||
i_xErrorCard:= ,
|
||||
xReleaseErrors := TRUE,
|
||||
xReleaseHardwareErrors := TRUE,
|
||||
xReleaseLimitErrors:= TRUE,
|
||||
@@ -945,12 +945,12 @@ _fbOverrangeOnTimer(IN := TRUE, PT := T#100MS);
|
||||
|
||||
// run AI to check for overrange error
|
||||
_fbAIOverrangeOn(
|
||||
iAnalogValue:= 50,
|
||||
i_iAnalogValue:= 50,
|
||||
stAnalogIOConfig := _stAnalogInputConfig,
|
||||
stAnalogEWConfig := _stAnalogEWConfig,
|
||||
xUnderrange:= FALSE,
|
||||
xOverrange:= TRUE,
|
||||
xErrorCard:= ,
|
||||
i_xUnderrange:= FALSE,
|
||||
i_xOverrange:= TRUE,
|
||||
i_xErrorCard:= ,
|
||||
xReleaseLimitErrors:= TRUE,
|
||||
xError=> _xResultError,
|
||||
rScaledValue=> ,
|
||||
@@ -1003,12 +1003,12 @@ _stAnalogEWConfig.stDelays := _stDelayConfig;
|
||||
|
||||
// run AI to check for underrange error
|
||||
_fbAI(
|
||||
iAnalogValue:= 50,
|
||||
i_iAnalogValue:= 50,
|
||||
stAnalogIOConfig := _stAnalogInputConfig,
|
||||
stAnalogEWConfig := _stAnalogEWConfig,
|
||||
xUnderrange:= TRUE,
|
||||
xOverrange:= FALSE,
|
||||
xErrorCard:= ,
|
||||
i_xUnderrange:= TRUE,
|
||||
i_xOverrange:= FALSE,
|
||||
i_xErrorCard:= ,
|
||||
xReleaseLimitErrors:= TRUE,
|
||||
xError=> _xResultError,
|
||||
rScaledValue=> ,
|
||||
@@ -1062,12 +1062,12 @@ IF NOT _xUnderrangeOffInitDone THEN
|
||||
_xUnderrangeOffInitDone := TRUE;
|
||||
// run AI to check for underrange error
|
||||
_fbAIUnderrangeOff(
|
||||
iAnalogValue:= 50,
|
||||
i_iAnalogValue:= 50,
|
||||
stAnalogIOConfig := _stAnalogInputConfig,
|
||||
stAnalogEWConfig := _stAnalogEWConfig,
|
||||
xUnderrange:= TRUE,
|
||||
xOverrange:= FALSE,
|
||||
xErrorCard:= ,
|
||||
i_xUnderrange:= TRUE,
|
||||
i_xOverrange:= FALSE,
|
||||
i_xErrorCard:= ,
|
||||
xReleaseLimitErrors:= TRUE,
|
||||
xError=> _xResultError,
|
||||
rScaledValue=> ,
|
||||
@@ -1080,12 +1080,12 @@ END_IF
|
||||
|
||||
// run AI cyclically until underrange error is supposed to be off
|
||||
_fbAIUnderrangeOff(
|
||||
iAnalogValue:= 0,
|
||||
i_iAnalogValue:= 0,
|
||||
stAnalogIOConfig := _stAnalogInputConfig,
|
||||
stAnalogEWConfig := _stAnalogEWConfig,
|
||||
xUnderrange:= FALSE,
|
||||
xOverrange:= FALSE,
|
||||
xErrorCard:= ,
|
||||
i_xUnderrange:= FALSE,
|
||||
i_xOverrange:= FALSE,
|
||||
i_xErrorCard:= ,
|
||||
xReleaseErrors := TRUE,
|
||||
xReleaseHardwareErrors := TRUE,
|
||||
xReleaseLimitErrors:= TRUE,
|
||||
@@ -1141,12 +1141,12 @@ _fbUnderrangeOnTimer(IN := TRUE, PT := T#100MS);
|
||||
|
||||
// run AI to check for underrange error
|
||||
_fbAIUnderrangeOn(
|
||||
iAnalogValue:= 50,
|
||||
i_iAnalogValue:= 50,
|
||||
stAnalogIOConfig := _stAnalogInputConfig,
|
||||
stAnalogEWConfig := _stAnalogEWConfig,
|
||||
xUnderrange:= TRUE,
|
||||
xOverrange:= FALSE,
|
||||
xErrorCard:= ,
|
||||
i_xUnderrange:= TRUE,
|
||||
i_xOverrange:= FALSE,
|
||||
i_xErrorCard:= ,
|
||||
xReleaseLimitErrors:= TRUE,
|
||||
xError=> _xResultError,
|
||||
rScaledValue=> ,
|
||||
@@ -1200,12 +1200,12 @@ _stAnalogEWConfig.stDelays := _stDelayConfig;
|
||||
|
||||
// Check with active release signal
|
||||
_fbAI(
|
||||
iAnalogValue:= 85,
|
||||
i_iAnalogValue:= 85,
|
||||
stAnalogIOConfig := _stAnalogInputConfig,
|
||||
stAnalogEWConfig := _stAnalogEWConfig,
|
||||
xUnderrange:= FALSE,
|
||||
xOverrange:= FALSE,
|
||||
xErrorCard:= FALSE,
|
||||
i_xUnderrange:= FALSE,
|
||||
i_xOverrange:= FALSE,
|
||||
i_xErrorCard:= FALSE,
|
||||
xReleaseLimitErrors:= TRUE,
|
||||
xError=> _xResultError,
|
||||
rScaledValue=> ,
|
||||
@@ -1224,10 +1224,10 @@ AssertFalse(Condition:= _xResultErrorHigh, Message:= 'Error high is active');
|
||||
|
||||
// Check without active release signal
|
||||
_fbAI(
|
||||
iAnalogValue:= 85,
|
||||
xUnderrange:= FALSE,
|
||||
xOverrange:= FALSE,
|
||||
xErrorCard:= FALSE,
|
||||
i_iAnalogValue:= 85,
|
||||
i_xUnderrange:= FALSE,
|
||||
i_xOverrange:= FALSE,
|
||||
i_xErrorCard:= FALSE,
|
||||
xReleaseLimitErrors:= FALSE,
|
||||
xError=> _xResultError,
|
||||
rScaledValue=> ,
|
||||
@@ -1283,12 +1283,12 @@ _stAnalogEWConfig.stDelays := _stDelayConfig;
|
||||
IF NOT _xWarningHighOffInitDone THEN
|
||||
_xWarningHighOffInitDone := TRUE;
|
||||
_fbAIWarningHighOff(
|
||||
iAnalogValue:= 85,
|
||||
i_iAnalogValue:= 85,
|
||||
stAnalogIOConfig := _stAnalogInputConfig,
|
||||
stAnalogEWConfig := _stAnalogEWConfig,
|
||||
xUnderrange:= FALSE,
|
||||
xOverrange:= FALSE,
|
||||
xErrorCard:= FALSE,
|
||||
i_xUnderrange:= FALSE,
|
||||
i_xOverrange:= FALSE,
|
||||
i_xErrorCard:= FALSE,
|
||||
xReleaseLimitErrors:= TRUE,
|
||||
xError=> _xResultError,
|
||||
rScaledValue=> ,
|
||||
@@ -1300,10 +1300,10 @@ IF NOT _xWarningHighOffInitDone THEN
|
||||
ELSE
|
||||
_fbWarningHighOffTimer(IN := TRUE, PT := timOffTime);
|
||||
_fbAIWarningHighOff(
|
||||
iAnalogValue:= 50,
|
||||
xUnderrange:= FALSE,
|
||||
xOverrange:= FALSE,
|
||||
xErrorCard:= FALSE,
|
||||
i_iAnalogValue:= 50,
|
||||
i_xUnderrange:= FALSE,
|
||||
i_xOverrange:= FALSE,
|
||||
i_xErrorCard:= FALSE,
|
||||
xReleaseLimitErrors:= TRUE,
|
||||
xError=> _xResultError,
|
||||
rScaledValue=> ,
|
||||
@@ -1369,12 +1369,12 @@ _fbWarningHighOnTimer(IN := TRUE, PT := timOnTime);
|
||||
|
||||
// Check with active release signal
|
||||
_fbAIWarningHighOn(
|
||||
iAnalogValue:= 85,
|
||||
i_iAnalogValue:= 85,
|
||||
stAnalogIOConfig := _stAnalogInputConfig,
|
||||
stAnalogEWConfig := _stAnalogEWConfig,
|
||||
xUnderrange:= FALSE,
|
||||
xOverrange:= FALSE,
|
||||
xErrorCard:= FALSE,
|
||||
i_xUnderrange:= FALSE,
|
||||
i_xOverrange:= FALSE,
|
||||
i_xErrorCard:= FALSE,
|
||||
xReleaseLimitErrors:= TRUE,
|
||||
xError=> _xResultError,
|
||||
rScaledValue=> ,
|
||||
@@ -1433,12 +1433,12 @@ _stAnalogEWConfig.stDelays := _stDelayConfig;
|
||||
|
||||
// Warning low with release
|
||||
_fbAI(
|
||||
iAnalogValue:= 15,
|
||||
i_iAnalogValue:= 15,
|
||||
stAnalogIOConfig := _stAnalogInputConfig,
|
||||
stAnalogEWConfig := _stAnalogEWConfig,
|
||||
xUnderrange:= FALSE,
|
||||
xOverrange:= FALSE,
|
||||
xErrorCard:= FALSE,
|
||||
i_xUnderrange:= FALSE,
|
||||
i_xOverrange:= FALSE,
|
||||
i_xErrorCard:= FALSE,
|
||||
xReleaseLimitErrors:= TRUE,
|
||||
xError=> _xResultError,
|
||||
rScaledValue=> ,
|
||||
@@ -1457,10 +1457,10 @@ AssertFalse(Condition:= _xResultErrorHigh, Message:= 'Error high is active');
|
||||
|
||||
// Warning low without release
|
||||
_fbAI(
|
||||
iAnalogValue:= 15,
|
||||
xUnderrange:= FALSE,
|
||||
xOverrange:= FALSE,
|
||||
xErrorCard:= FALSE,
|
||||
i_iAnalogValue:= 15,
|
||||
i_xUnderrange:= FALSE,
|
||||
i_xOverrange:= FALSE,
|
||||
i_xErrorCard:= FALSE,
|
||||
xReleaseLimitErrors:= FALSE,
|
||||
xError=> _xResultError,
|
||||
rScaledValue=> ,
|
||||
@@ -1517,12 +1517,12 @@ _stAnalogEWConfig.stDelays := _stDelayConfig;
|
||||
IF NOT _xWarningLowOffInitDone THEN
|
||||
_xWarningLowOffInitDone := TRUE;
|
||||
_fbAIWarningLowOff(
|
||||
iAnalogValue:= 15,
|
||||
i_iAnalogValue:= 15,
|
||||
stAnalogIOConfig := _stAnalogInputConfig,
|
||||
stAnalogEWConfig := _stAnalogEWConfig,
|
||||
xUnderrange:= FALSE,
|
||||
xOverrange:= FALSE,
|
||||
xErrorCard:= FALSE,
|
||||
i_xUnderrange:= FALSE,
|
||||
i_xOverrange:= FALSE,
|
||||
i_xErrorCard:= FALSE,
|
||||
xReleaseLimitErrors:= TRUE,
|
||||
xError=> _xResultError,
|
||||
rScaledValue=> ,
|
||||
@@ -1534,10 +1534,10 @@ IF NOT _xWarningLowOffInitDone THEN
|
||||
ELSE
|
||||
_fbWarningLowOffTimer(IN := TRUE, PT := timOffTime);
|
||||
_fbAIWarningLowOff(
|
||||
iAnalogValue:= 50,
|
||||
xUnderrange:= FALSE,
|
||||
xOverrange:= FALSE,
|
||||
xErrorCard:= FALSE,
|
||||
i_iAnalogValue:= 50,
|
||||
i_xUnderrange:= FALSE,
|
||||
i_xOverrange:= FALSE,
|
||||
i_xErrorCard:= FALSE,
|
||||
xReleaseLimitErrors:= TRUE,
|
||||
xError=> _xResultError,
|
||||
rScaledValue=> ,
|
||||
@@ -1603,12 +1603,12 @@ _fbWarningLowOnTimer(IN := TRUE, PT := timOnTime);
|
||||
|
||||
// Check with active release signal
|
||||
_fbAIWarningLowOn(
|
||||
iAnalogValue:= 15,
|
||||
i_iAnalogValue:= 15,
|
||||
stAnalogIOConfig := _stAnalogInputConfig,
|
||||
stAnalogEWConfig := _stAnalogEWConfig,
|
||||
xUnderrange:= FALSE,
|
||||
xOverrange:= FALSE,
|
||||
xErrorCard:= FALSE,
|
||||
i_xUnderrange:= FALSE,
|
||||
i_xOverrange:= FALSE,
|
||||
i_xErrorCard:= FALSE,
|
||||
xReleaseLimitErrors:= TRUE,
|
||||
xError=> _xResultError,
|
||||
rScaledValue=> ,
|
||||
@@ -63,7 +63,7 @@ _fbAnalogOutput(
|
||||
xReleaseErrors := ,
|
||||
xConfirmAlarms := ,
|
||||
stHMIInterface := _stHMIInterface,
|
||||
iAnalogValue => _iAnalogOutput,
|
||||
o_iAnalogValue => _iAnalogOutput,
|
||||
xError => _xError,
|
||||
xInUnitTestMode := TRUE);
|
||||
|
||||
@@ -112,7 +112,7 @@ _fbAnalogOutput(
|
||||
xReleaseErrors := ,
|
||||
xConfirmAlarms := ,
|
||||
stHMIInterface := _stHMIInterface,
|
||||
iAnalogValue => _iAnalogOutput,
|
||||
o_iAnalogValue => _iAnalogOutput,
|
||||
xError => _xError,
|
||||
xInUnitTestMode := TRUE);
|
||||
|
||||
@@ -170,7 +170,7 @@ _fbAnalogOutput(
|
||||
xReleaseErrors := ,
|
||||
xConfirmAlarms := ,
|
||||
stHMIInterface := _stHMIInterface,
|
||||
iAnalogValue => _iAnalogOutput,
|
||||
o_iAnalogValue => _iAnalogOutput,
|
||||
xError => _xError,
|
||||
xInUnitTestMode := TRUE);
|
||||
|
||||
@@ -198,7 +198,7 @@ _fbAnalogOutput(
|
||||
xReleaseErrors := ,
|
||||
xConfirmAlarms := ,
|
||||
stHMIInterface := _stHMIInterface,
|
||||
iAnalogValue => _iAnalogOutput,
|
||||
o_iAnalogValue => _iAnalogOutput,
|
||||
xError => _xError);
|
||||
|
||||
// reading error from HMI interface
|
||||
@@ -251,7 +251,7 @@ _fbAnalogOutput(
|
||||
xReleaseErrors := ,
|
||||
xConfirmAlarms := ,
|
||||
stHMIInterface := _stHMIInterface,
|
||||
iAnalogValue => _iAnalogOutput,
|
||||
o_iAnalogValue => _iAnalogOutput,
|
||||
xError => _xError,
|
||||
xInUnitTestMode := TRUE);
|
||||
|
||||
@@ -266,7 +266,7 @@ _fbAnalogOutput(
|
||||
xReleaseErrors := ,
|
||||
xConfirmAlarms := ,
|
||||
stHMIInterface := _stHMIInterface,
|
||||
iAnalogValue => _iAnalogOutput,
|
||||
o_iAnalogValue => _iAnalogOutput,
|
||||
xError => _xError);
|
||||
|
||||
// and evaluate result
|
||||
@@ -280,7 +280,7 @@ _fbAnalogOutput(
|
||||
xReleaseErrors := ,
|
||||
xConfirmAlarms := ,
|
||||
stHMIInterface := _stHMIInterface,
|
||||
iAnalogValue => _iAnalogOutput,
|
||||
o_iAnalogValue => _iAnalogOutput,
|
||||
xError => _xError);
|
||||
|
||||
// and evaluate result
|
||||
@@ -294,7 +294,7 @@ _fbAnalogOutput(
|
||||
xReleaseErrors := ,
|
||||
xConfirmAlarms := ,
|
||||
stHMIInterface := _stHMIInterface,
|
||||
iAnalogValue => _iAnalogOutput,
|
||||
o_iAnalogValue => _iAnalogOutput,
|
||||
xError => _xError);
|
||||
|
||||
// and evaluate result
|
||||
@@ -308,7 +308,7 @@ _fbAnalogOutput(
|
||||
xReleaseErrors := ,
|
||||
xConfirmAlarms := ,
|
||||
stHMIInterface := _stHMIInterface,
|
||||
iAnalogValue => _iAnalogOutput,
|
||||
o_iAnalogValue => _iAnalogOutput,
|
||||
xError => _xError);
|
||||
|
||||
// and evaluate result
|
||||
@@ -359,7 +359,7 @@ _fbAnalogOutput(
|
||||
xReleaseErrors := ,
|
||||
xConfirmAlarms := ,
|
||||
stHMIInterface := _stHMIInterface,
|
||||
iAnalogValue => _iAnalogOutput,
|
||||
o_iAnalogValue => _iAnalogOutput,
|
||||
xError => _xError,
|
||||
xInUnitTestMode := TRUE);
|
||||
|
||||
@@ -410,7 +410,7 @@ _fbAnalogOutput(
|
||||
xReleaseErrors := ,
|
||||
xConfirmAlarms := ,
|
||||
stHMIInterface := _stHMIInterface,
|
||||
iAnalogValue => _iAnalogOutput,
|
||||
o_iAnalogValue => _iAnalogOutput,
|
||||
xError => _xError,
|
||||
xInUnitTestMode := TRUE);
|
||||
|
||||
@@ -454,7 +454,7 @@ _fbAnalogOutput(
|
||||
xReleaseErrors := ,
|
||||
xConfirmAlarms := ,
|
||||
stHMIInterface := _stHMIInterface,
|
||||
iAnalogValue => _iAnalogOutput,
|
||||
o_iAnalogValue => _iAnalogOutput,
|
||||
xError => _xError,
|
||||
xInUnitTestMode := TRUE);
|
||||
|
||||
@@ -63,7 +63,7 @@ _fbValve.ReqAutomaticMode();
|
||||
_fbValve.rSPAutomatic := 100;
|
||||
|
||||
// needs one cycle to write values (scaled feedback ~75, tolerance 95 to 105)
|
||||
_fbValve(xAutomaticOpen := TRUE, stValveConfig := _stValveConfig, stHMIInterface := _stHMIValve, iFeedbackValue := 3000, xError => _xError, xInUnitTestMode := TRUE);
|
||||
_fbValve(xAutomaticOpen := TRUE, stValveConfig := _stValveConfig, stHMIInterface := _stHMIValve, i_iFeedbackValue := 3000, xError => _xError, xInUnitTestMode := TRUE);
|
||||
|
||||
// assert result
|
||||
AssertTrue(_xError, 'Expected NotInRangeError, got no error.');
|
||||
@@ -102,7 +102,7 @@ _xOpenFeedback := FALSE;
|
||||
_xCloseFeedback := FALSE;
|
||||
_fbValve.xReleaseManualMode := TRUE;
|
||||
_fbValve.ReqManualMode();
|
||||
_fbValve(xOpenFeedback := _xOpenFeedback, xCloseFeedback := _xCloseFeedback, stHMIInterface := _stHMIValve, stValveConfig := _stValveConfig, xInUnitTestMode := TRUE);
|
||||
_fbValve(i_xOpenFeedback := _xOpenFeedback, i_xCloseFeedback := _xCloseFeedback, stHMIInterface := _stHMIValve, stValveConfig := _stValveConfig, xInUnitTestMode := TRUE);
|
||||
|
||||
|
||||
// We should now be in manual mode
|
||||
@@ -112,7 +112,7 @@ AssertTrue(Condition := _fbValve.IsInManualMode, Message := 'Valve did not chang
|
||||
// Test closed
|
||||
_xOpenFeedback := FALSE;
|
||||
_xCloseFeedback := TRUE;
|
||||
_fbValve(xOpenFeedback := _xOpenFeedback, xCloseFeedback := _xCloseFeedback, stHMIInterface := _stHMIValve, stValveConfig := _stValveConfig, xInUnitTestMode := TRUE);
|
||||
_fbValve(i_xOpenFeedback := _xOpenFeedback, i_xCloseFeedback := _xCloseFeedback, stHMIInterface := _stHMIValve, stValveConfig := _stValveConfig, xInUnitTestMode := TRUE);
|
||||
AssertTrue(Condition := _fbValve.IsClosed, Message := 'Valve should be closed');
|
||||
AssertFalse(Condition := _fbValve.IsOpen, Message := 'Valve should not be open');
|
||||
|
||||
@@ -120,14 +120,14 @@ AssertFalse(Condition := _fbValve.IsOpen, Message := 'Valve should not be open')
|
||||
_xOpenFeedback := TRUE;
|
||||
_xCloseFeedback := FALSE;
|
||||
_stHMIValve.stSetpoint.rValue := 100.0;
|
||||
_fbValve(xOpenFeedback := _xOpenFeedback, xCloseFeedback := _xCloseFeedback, stHMIInterface := _stHMIValve, stValveConfig := _stValveConfig, xInUnitTestMode := TRUE);
|
||||
_fbValve(i_xOpenFeedback := _xOpenFeedback, i_xCloseFeedback := _xCloseFeedback, stHMIInterface := _stHMIValve, stValveConfig := _stValveConfig, xInUnitTestMode := TRUE);
|
||||
AssertTrue(Condition := _fbValve.IsOpen, Message := 'Valve should be open');
|
||||
AssertFalse(Condition := _fbValve.IsClosed, Message := 'Valve should not be closed');
|
||||
|
||||
// Test open and close
|
||||
_xOpenFeedback := TRUE;
|
||||
_xCloseFeedback := TRUE;
|
||||
_fbValve(xOpenFeedback := _xOpenFeedback, xCloseFeedback := _xCloseFeedback, stHMIInterface := _stHMIValve, stValveConfig := _stValveConfig, xInUnitTestMode := TRUE);
|
||||
_fbValve(i_xOpenFeedback := _xOpenFeedback, i_xCloseFeedback := _xCloseFeedback, stHMIInterface := _stHMIValve, stValveConfig := _stValveConfig, xInUnitTestMode := TRUE);
|
||||
AssertFalse(Condition := _fbValve.IsClosed OR _fbValve.IsOpen, Message := 'Valve should not signal open or closed with both feedback signals high');
|
||||
|
||||
TEST_FINISHED();]]></ST>
|
||||
@@ -161,7 +161,7 @@ _stValveConfig.xHasAnalogFeedback := TRUE;
|
||||
_fbValve(
|
||||
stValveConfig := _stValveConfig,
|
||||
stHMIInterface := _stHMIValve,
|
||||
xFeedbackOverrange := TRUE,
|
||||
i_xFeedbackOverrange := TRUE,
|
||||
xError => _xError,
|
||||
xInUnitTestMode := TRUE);
|
||||
|
||||
@@ -199,7 +199,7 @@ _stValveConfig.xHasAnalogFeedback := TRUE;
|
||||
_fbValve(
|
||||
stValveConfig := _stValveConfig,
|
||||
stHMIInterface := _stHMIValve,
|
||||
xFeedbackUnderrange := TRUE,
|
||||
i_xFeedbackUnderrange := TRUE,
|
||||
xError => _xError,
|
||||
xInUnitTestMode := TRUE);
|
||||
|
||||
@@ -487,7 +487,7 @@ IF _fbValve.IsOpen THEN
|
||||
// Valve should now be closed
|
||||
AssertFalse(Condition := _fbValve.IsOpen, Message := 'Valve should not be open with active Interlock');
|
||||
AssertTrue(Condition := _fbValve.IsClosed, Message := 'Close output not active with active Interlock');
|
||||
AssertEquals_INT(Expected := 0, Actual := _fbValve.iSetpoint, Message := 'Analog output should be zero');
|
||||
AssertEquals_INT(Expected := 0, Actual := _fbValve.o_iSetpoint, Message := 'Analog output should be zero');
|
||||
ELSE
|
||||
AssertTrue(Condition := _fbValve.IsOpen, Message := 'Valve did not open before the test');
|
||||
END_IF
|
||||
@@ -535,7 +535,7 @@ IF _fbValve.IsOpen THEN
|
||||
// Valve should now be closed
|
||||
AssertFalse(Condition := _fbValve.IsOpen, Message := 'Valve should not be open with active Interlock');
|
||||
AssertTrue(Condition := _fbValve.IsClosed, Message := 'Close output not active with active Interlock');
|
||||
AssertEquals_INT(Expected := 0, Actual := _fbValve.iSetpoint, Message := 'Analog output should be zero');
|
||||
AssertEquals_INT(Expected := 0, Actual := _fbValve.o_iSetpoint, Message := 'Analog output should be zero');
|
||||
ELSE
|
||||
AssertTrue(Condition := _fbValve.IsOpen, Message := 'Valve did not open before the test');
|
||||
END_IF
|
||||
@@ -46,13 +46,13 @@ _fbValve(
|
||||
wProcessINTLKUsed:= _wInterlocksUsed,
|
||||
stHMIInterface:= _stHMIValve,
|
||||
xError=> ,
|
||||
xOpenFeedback:= ,
|
||||
xCloseFeedback:= ,
|
||||
i_xOpenFeedback:= ,
|
||||
i_xCloseFeedback:= ,
|
||||
xReleaseErrors:= ,
|
||||
xConfirmAlarms:= ,
|
||||
stValveConfig:= _stValveConfig,
|
||||
xOpenValve=> ,
|
||||
xCloseValve=> );
|
||||
o_xOpenValve=> ,
|
||||
o_xCloseValve=> );
|
||||
|
||||
// Valve should now be in manual mode and xRequest should have been reset
|
||||
AssertTrue(Condition := _fbValve.IsInManualMode, Message := 'Valve did not change to manual mode');
|
||||
@@ -90,13 +90,13 @@ _fbValve(
|
||||
wProcessINTLKUsed:= _wInterlocksUsed,
|
||||
stHMIInterface:= _stHMIValve,
|
||||
xError=> ,
|
||||
xOpenFeedback:= ,
|
||||
xCloseFeedback:= ,
|
||||
i_xOpenFeedback:= ,
|
||||
i_xCloseFeedback:= ,
|
||||
xReleaseErrors:= ,
|
||||
xConfirmAlarms:= ,
|
||||
stValveConfig:= _stValveConfig,
|
||||
xOpenValve=> ,
|
||||
xCloseValve=> );
|
||||
o_xOpenValve=> ,
|
||||
o_xCloseValve=> );
|
||||
|
||||
AssertFalse(Condition := _stHMIValve.stManualButton.xRelease, Message := 'Manual mode button was released but should not have been');
|
||||
|
||||
@@ -108,13 +108,13 @@ _fbValve(
|
||||
wProcessINTLKUsed:= _wInterlocksUsed,
|
||||
stHMIInterface:= _stHMIValve,
|
||||
xError=> ,
|
||||
xOpenFeedback:= ,
|
||||
xCloseFeedback:= ,
|
||||
i_xOpenFeedback:= ,
|
||||
i_xCloseFeedback:= ,
|
||||
xReleaseErrors:= ,
|
||||
xConfirmAlarms:= ,
|
||||
stValveConfig:= ,
|
||||
xOpenValve=> ,
|
||||
xCloseValve=> );
|
||||
o_xOpenValve=> ,
|
||||
o_xCloseValve=> );
|
||||
|
||||
AssertTrue(Condition := _stHMIValve.stManualButton.xRelease, Message := 'Manual mode button was not released but should have been');
|
||||
|
||||
@@ -151,13 +151,13 @@ _fbValveOC(
|
||||
wProcessINTLKUsed:= _wInterlocksUsed,
|
||||
stHMIInterface:= _stHMIValve,
|
||||
xError=> ,
|
||||
xOpenFeedback:= ,
|
||||
xCloseFeedback:= ,
|
||||
i_xOpenFeedback:= ,
|
||||
i_xCloseFeedback:= ,
|
||||
xReleaseErrors:= ,
|
||||
xConfirmAlarms:= ,
|
||||
stValveConfig:= _stValveConfig,
|
||||
xOpenValve=> ,
|
||||
xCloseValve=> );
|
||||
o_xOpenValve=> ,
|
||||
o_xCloseValve=> );
|
||||
|
||||
// Valve should now be in manual mode
|
||||
AssertTrue(Condition := _fbValveOC.IsInManualMode, Message := 'Valve did not change to manual mode pre test');
|
||||
@@ -170,16 +170,16 @@ _fbValveOC(
|
||||
wProcessINTLKUsed:= _wInterlocksUsed,
|
||||
stHMIInterface:= _stHMIValve,
|
||||
xError=> ,
|
||||
xOpenFeedback:= ,
|
||||
xCloseFeedback:= ,
|
||||
i_xOpenFeedback:= ,
|
||||
i_xCloseFeedback:= ,
|
||||
xReleaseErrors:= ,
|
||||
xConfirmAlarms:= ,
|
||||
stValveConfig:= ,
|
||||
xOpenValve=> ,
|
||||
xCloseValve=> );
|
||||
o_xOpenValve=> ,
|
||||
o_xCloseValve=> );
|
||||
|
||||
// test for valve state and HMI feedback
|
||||
AssertTrue(Condition := _fbValveOC.xOpenValve, Message := 'Valve did not open as requested by hmi button');
|
||||
AssertTrue(Condition := _fbValveOC.o_xOpenValve, Message := 'Valve did not open as requested by hmi button');
|
||||
AssertFalse(Condition := _stHMIValve.stOpenButton.xRequest, Message := 'Valve did not reset open request');
|
||||
_eExpectedOpenButtonFeedback := E_HMI_BUTTON_FEEDBACK.ACTIVE;
|
||||
_eExpectedCloseButtonFeedback := E_HMI_BUTTON_FEEDBACK.NONE;
|
||||
@@ -194,16 +194,16 @@ _fbValveOC(
|
||||
wProcessINTLKUsed:= _wInterlocksUsed,
|
||||
stHMIInterface:= _stHMIValve,
|
||||
xError=> ,
|
||||
xOpenFeedback:= ,
|
||||
xCloseFeedback:= ,
|
||||
i_xOpenFeedback:= ,
|
||||
i_xCloseFeedback:= ,
|
||||
xReleaseErrors:= ,
|
||||
xConfirmAlarms:= ,
|
||||
stValveConfig:= ,
|
||||
xOpenValve=> ,
|
||||
xCloseValve=> );
|
||||
o_xOpenValve=> ,
|
||||
o_xCloseValve=> );
|
||||
|
||||
// test for valve state and HMI feedback
|
||||
AssertTrue(Condition := _fbValveOC.xCloseValve, Message := 'Valve did not close as requested by hmi button');
|
||||
AssertTrue(Condition := _fbValveOC.o_xCloseValve, Message := 'Valve did not close as requested by hmi button');
|
||||
AssertFalse(Condition := _stHMIValve.stCloseButton.xRequest, Message := 'Valve did not reset close request');
|
||||
_eExpectedOpenButtonFeedback := E_HMI_BUTTON_FEEDBACK.NONE;
|
||||
_eExpectedCloseButtonFeedback := E_HMI_BUTTON_FEEDBACK.ACTIVE;
|
||||
@@ -243,13 +243,13 @@ _fbValve(
|
||||
wProcessINTLKUsed:= wInterlocksUsed,
|
||||
stHMIInterface:= _stHMIValve,
|
||||
xError=> ,
|
||||
xOpenFeedback:= ,
|
||||
xCloseFeedback:= ,
|
||||
i_xOpenFeedback:= ,
|
||||
i_xCloseFeedback:= ,
|
||||
xReleaseErrors:= ,
|
||||
xConfirmAlarms:= ,
|
||||
stValveConfig:= _stValveConfig,
|
||||
xOpenValve=> ,
|
||||
xCloseValve=> );
|
||||
o_xOpenValve=> ,
|
||||
o_xCloseValve=> );
|
||||
|
||||
// Valve should now be in manual mode
|
||||
AssertTrue(Condition := _fbValve.IsInManualMode, Message := 'Valve did not change to manual mode pre test');
|
||||
@@ -265,15 +265,15 @@ _fbValve(
|
||||
wProcessINTLKUsed:= wInterlocksUsed,
|
||||
stHMIInterface:= _stHMIValve,
|
||||
xError=> ,
|
||||
xOpenFeedback:= ,
|
||||
xCloseFeedback:= ,
|
||||
i_xOpenFeedback:= ,
|
||||
i_xCloseFeedback:= ,
|
||||
xReleaseErrors:= ,
|
||||
xConfirmAlarms:= ,
|
||||
stValveConfig:= ,
|
||||
xOpenValve=> ,
|
||||
xCloseValve=> );
|
||||
o_xOpenValve=> ,
|
||||
o_xCloseValve=> );
|
||||
|
||||
AssertFalse(Condition := _fbValve.xOpenValve, Message := 'Valve did not block manual open command with active interlock');
|
||||
AssertFalse(Condition := _fbValve.o_xOpenValve, Message := 'Valve did not block manual open command with active interlock');
|
||||
|
||||
TEST_FINISHED();]]></ST>
|
||||
</Implementation>
|
||||
@@ -48,8 +48,8 @@ CASE _iState OF
|
||||
10:
|
||||
// set close feedback after 50ms and call valve block
|
||||
_xOpenFeedback := FALSE;
|
||||
_xCloseFeedback := _fbValveTimeout.xCloseValve AND _fbDelayFeedbackSignalTimer.Q;
|
||||
_fbValveTimeout(xOpenFeedback := _xOpenFeedback, xCloseFeedback := _xCloseFeedback, stHMIInterface := _stHMIValve, stValveConfig := _stValveConfig);
|
||||
_xCloseFeedback := _fbValveTimeout.o_xCloseValve AND _fbDelayFeedbackSignalTimer.Q;
|
||||
_fbValveTimeout(i_xOpenFeedback := _xOpenFeedback, i_xCloseFeedback := _xCloseFeedback, stHMIInterface := _stHMIValve, stValveConfig := _stValveConfig);
|
||||
|
||||
// test timeout after 200ms
|
||||
IF _fbTimeoutCloseTestTimer.Q THEN
|
||||
@@ -48,9 +48,9 @@ CASE _iState OF
|
||||
|
||||
10:
|
||||
// set open feedback after 50ms and call valve block
|
||||
_xOpenFeedback := _fbValveTimeout.xOpenValve AND _fbDelayFeedbackSignalTimer.Q;
|
||||
_xOpenFeedback := _fbValveTimeout.o_xOpenValve AND _fbDelayFeedbackSignalTimer.Q;
|
||||
_xCloseFeedback := FALSE;
|
||||
_fbValveTimeout(xOpenFeedback := _xOpenFeedback, xCloseFeedback := _xCloseFeedback, stHMIInterface := _stHMIValve, stValveConfig := _stValveConfig);
|
||||
_fbValveTimeout(i_xOpenFeedback := _xOpenFeedback, i_xCloseFeedback := _xCloseFeedback, stHMIInterface := _stHMIValve, stValveConfig := _stValveConfig);
|
||||
|
||||
// test timeout after 200ms
|
||||
IF _fbTimeoutOpenTestTimer.Q THEN
|
||||
@@ -50,7 +50,7 @@ CASE _iState OF
|
||||
// both feedback false and call valve block
|
||||
_xOpenFeedback := FALSE;
|
||||
_xCloseFeedback := FALSE;
|
||||
_fbValveTimeout(xOpenFeedback := _xOpenFeedback, xCloseFeedback := _xCloseFeedback, xInUnitTestMode := TRUE, stHMIInterface := _stHMIValve, stValveConfig := _stValveConfig);
|
||||
_fbValveTimeout(i_xOpenFeedback := _xOpenFeedback, i_xCloseFeedback := _xCloseFeedback, xInUnitTestMode := TRUE, stHMIInterface := _stHMIValve, stValveConfig := _stValveConfig);
|
||||
|
||||
// test timeout after 200ms
|
||||
IF _fbTimeoutCloseTestTimer.Q THEN
|
||||
@@ -51,7 +51,7 @@ CASE _iState OF
|
||||
// both feedback false and call valve block
|
||||
_xOpenFeedback := FALSE;
|
||||
_xCloseFeedback := FALSE;
|
||||
_fbValveTimeout(xOpenFeedback := _xOpenFeedback, xCloseFeedback := _xCloseFeedback, xInUnitTestMode := TRUE, stHMIInterface := _stHMIValve, stValveConfig := _stValveConfig);
|
||||
_fbValveTimeout(i_xOpenFeedback := _xOpenFeedback, i_xCloseFeedback := _xCloseFeedback, xInUnitTestMode := TRUE, stHMIInterface := _stHMIValve, stValveConfig := _stValveConfig);
|
||||
|
||||
// test timeout after 200ms
|
||||
IF _fbTimeoutOpenTestTimer.Q THEN
|
||||
@@ -53,7 +53,7 @@ _xOpenFeedback := FALSE;
|
||||
_xCloseFeedback := FALSE;
|
||||
_fbValve.xReleaseManualMode := TRUE;
|
||||
_fbValve.ReqManualMode();
|
||||
_fbValve(xOpenFeedback := _xOpenFeedback, xCloseFeedback := _xCloseFeedback, stHMIInterface := _stHMIValve, stValveConfig := _stValveConfig, xInUnitTestMode := TRUE);
|
||||
_fbValve(i_xOpenFeedback := _xOpenFeedback, i_xCloseFeedback := _xCloseFeedback, stHMIInterface := _stHMIValve, stValveConfig := _stValveConfig, xInUnitTestMode := TRUE);
|
||||
|
||||
// We should now be in manual mode
|
||||
AssertTrue(Condition := _fbValve.IsInManualMode, Message := 'Valve did not changed to manual mode');
|
||||
@@ -65,7 +65,7 @@ AssertFalse(Condition := _fbValve.IsClosed OR _fbValve.IsOpen, Message := 'Valve
|
||||
// Test closed
|
||||
_xOpenFeedback := FALSE;
|
||||
_xCloseFeedback := TRUE;
|
||||
_fbValve(xOpenFeedback := _xOpenFeedback, xCloseFeedback := _xCloseFeedback,stHMIInterface := _stHMIValve, stValveConfig := _stValveConfig, xInUnitTestMode := TRUE);
|
||||
_fbValve(i_xOpenFeedback := _xOpenFeedback, i_xCloseFeedback := _xCloseFeedback,stHMIInterface := _stHMIValve, stValveConfig := _stValveConfig, xInUnitTestMode := TRUE);
|
||||
AssertTrue(Condition := _fbValve.IsClosed, Message := 'Valve should be closed');
|
||||
AssertFalse(Condition := _fbValve.IsOpen, Message := 'Valve should not be open');
|
||||
|
||||
@@ -74,14 +74,14 @@ _xOpenFeedback := TRUE;
|
||||
_xCloseFeedback := FALSE;
|
||||
_stHMIValve.stOpenButton.xRequest := TRUE;
|
||||
_fbValve(stHMIInterface := _stHMIValve);
|
||||
_fbValve(xOpenFeedback := _xOpenFeedback, xCloseFeedback := _xCloseFeedback, stHMIInterface := _stHMIValve, stValveConfig := _stValveConfig, xInUnitTestMode := TRUE);
|
||||
_fbValve(i_xOpenFeedback := _xOpenFeedback, i_xCloseFeedback := _xCloseFeedback, stHMIInterface := _stHMIValve, stValveConfig := _stValveConfig, xInUnitTestMode := TRUE);
|
||||
AssertTrue(Condition := _fbValve.IsOpen, Message := 'Valve should be open');
|
||||
AssertFalse(Condition := _fbValve.IsClosed, Message := 'Valve should not be closed');
|
||||
|
||||
// Test open and close
|
||||
_xOpenFeedback := TRUE;
|
||||
_xCloseFeedback := TRUE;
|
||||
_fbValve(xOpenFeedback := _xOpenFeedback, xCloseFeedback := _xCloseFeedback, stHMIInterface := _stHMIValve, stValveConfig := _stValveConfig, xInUnitTestMode := TRUE);
|
||||
_fbValve(i_xOpenFeedback := _xOpenFeedback, i_xCloseFeedback := _xCloseFeedback, stHMIInterface := _stHMIValve, stValveConfig := _stValveConfig, xInUnitTestMode := TRUE);
|
||||
AssertFalse(Condition := _fbValve.IsClosed OR _fbValve.IsOpen, Message := 'Valve should not signal open or closed with both feedback signals high');
|
||||
|
||||
TEST_FINISHED();]]></ST>
|
||||
@@ -347,16 +347,16 @@ IF _fbValve.IsOpen THEN
|
||||
_fbValve(wProcessINTLK := _wInterlocks, wProcessINTLKUsed := _wInterlocksUsed, stHMIInterface := _stHMIValve);
|
||||
|
||||
// Valve should now be closed
|
||||
AssertFalse(Condition := _fbValve.xOpenValve, Message := 'Valve should not be open with active Interlock');
|
||||
AssertTrue(Condition := _fbValve.xCloseValve, Message := 'Close output not active with active Interlock');
|
||||
AssertFalse(Condition := _fbValve.o_xOpenValve, Message := 'Valve should not be open with active Interlock');
|
||||
AssertTrue(Condition := _fbValve.o_xCloseValve, Message := 'Close output not active with active Interlock');
|
||||
|
||||
// Test the same with open valve when interlock active
|
||||
_stValveConfig.xNormallyOpen := TRUE;
|
||||
_fbValve(stValveConfig := _stValveConfig, wProcessINTLK := _wInterlocks, wProcessINTLKUsed := _wInterlocksUsed, stHMIInterface := _stHMIValve);
|
||||
|
||||
// Valve should now be open
|
||||
AssertTrue(Condition := _fbValve.xOpenValve, Message := 'Valve should be open with active Interlock and inverted config');
|
||||
AssertFalse(Condition := _fbValve.xCloseValve, Message := 'Close output active with active Interlock and inverted config');
|
||||
AssertTrue(Condition := _fbValve.o_xOpenValve, Message := 'Valve should be open with active Interlock and inverted config');
|
||||
AssertFalse(Condition := _fbValve.o_xCloseValve, Message := 'Close output active with active Interlock and inverted config');
|
||||
ELSE
|
||||
AssertTrue(Condition := _fbValve.IsOpen, Message := 'Valve did not open before the test');
|
||||
END_IF
|
||||
@@ -405,16 +405,16 @@ IF _fbValve.IsOpen THEN
|
||||
_fbValve(wProcessINTLK := _wInterlocks, wProcessINTLKUsed := _wInterlocksUsed, stHMIInterface := _stHMIValve);
|
||||
|
||||
// Valve should now be closed
|
||||
AssertFalse(Condition := _fbValve.xOpenValve, Message := 'Valve should not be open with active Interlock');
|
||||
AssertTrue(Condition := _fbValve.xCloseValve, Message := 'Close output not active with active Interlock');
|
||||
AssertFalse(Condition := _fbValve.o_xOpenValve, Message := 'Valve should not be open with active Interlock');
|
||||
AssertTrue(Condition := _fbValve.o_xCloseValve, Message := 'Close output not active with active Interlock');
|
||||
|
||||
// Test the same with open valve when interlock active
|
||||
_stValveConfig.xNormallyOpen := TRUE;
|
||||
_fbValve(stValveConfig := _stValveConfig, wProcessINTLK := _wInterlocks, wProcessINTLKUsed := _wInterlocksUsed, stHMIInterface := _stHMIValve);
|
||||
|
||||
// Valve should now be open
|
||||
AssertTrue(Condition := _fbValve.xOpenValve, Message := 'Valve should be open with active Interlock and inverted config');
|
||||
AssertFalse(Condition := _fbValve.xCloseValve, Message := 'Close output active with active Interlock and inverted config');
|
||||
AssertTrue(Condition := _fbValve.o_xOpenValve, Message := 'Valve should be open with active Interlock and inverted config');
|
||||
AssertFalse(Condition := _fbValve.o_xCloseValve, Message := 'Close output active with active Interlock and inverted config');
|
||||
AssertTrue(Condition := _stHMIValve.stOpenButton.eFeedback = E_HMI_BUTTON_FEEDBACK.ACTIVE, Message := 'Open button should be set active with active Interlock and inverted config');
|
||||
ELSE
|
||||
AssertTrue(Condition := _fbValve.IsOpen, Message := 'Valve did not open before the test');
|
||||
Reference in New Issue
Block a user