Added HMI Interface to Analog Input

This commit is contained in:
2025-11-13 11:38:51 +01:00
parent ae9667622a
commit 7db5a7b4d7
2 changed files with 70 additions and 41 deletions

View File

@@ -132,7 +132,7 @@
</System> </System>
<Plc> <Plc>
<Project GUID="{4E62D9E7-436C-457D-8DC4-82D2FEF91C96}" Name="PLC" PrjFilePath="PLC\PLC.plcproj" TmcFilePath="PLC\PLC.tmc" ReloadTmc="true" AmsPort="851" FileArchiveSettings="#x000e" CopyTmcToTarget="true" CopyTpyToTarget="false" SymbolicMapping="true"> <Project GUID="{4E62D9E7-436C-457D-8DC4-82D2FEF91C96}" Name="PLC" PrjFilePath="PLC\PLC.plcproj" TmcFilePath="PLC\PLC.tmc" ReloadTmc="true" AmsPort="851" FileArchiveSettings="#x000e" CopyTmcToTarget="true" CopyTpyToTarget="false" SymbolicMapping="true">
<Instance Id="#x08502000" TcSmClass="TComPlcObjDef" KeepUnrestoredLinks="2" TmcHash="{14654FC1-00FC-CFEC-B890-75F0B5146731}" TmcPath="PLC\PLC.tmc"> <Instance Id="#x08502000" TcSmClass="TComPlcObjDef" KeepUnrestoredLinks="2" TmcHash="{2F71D701-8FCE-746A-6BDE-2ADEF4ACE650}" TmcPath="PLC\PLC.tmc">
<Name>PLC Instance</Name> <Name>PLC Instance</Name>
<CLSID ClassFactory="TcPlc30">{08500001-0000-0000-F000-000000000064}</CLSID> <CLSID ClassFactory="TcPlc30">{08500001-0000-0000-F000-000000000064}</CLSID>
<Vars VarGrpType="2" AreaNo="1"> <Vars VarGrpType="2" AreaNo="1">
@@ -190,6 +190,46 @@
</Vars> </Vars>
<Vars VarGrpType="1"> <Vars VarGrpType="1">
<Name>PlcTask Inputs</Name> <Name>PlcTask Inputs</Name>
<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>
<Var> <Var>
<Name>PRG_MAIN._fbAnalogInputTest._fbAIErrorLowOn.iAnalogValue</Name> <Name>PRG_MAIN._fbAnalogInputTest._fbAIErrorLowOn.iAnalogValue</Name>
<Comment><![CDATA[ Analog input value]]></Comment> <Comment><![CDATA[ Analog input value]]></Comment>
@@ -442,46 +482,6 @@
EL30xx also sets this if an underrange or overrange error is present]]></Comment> EL30xx also sets this if an underrange or overrange error is present]]></Comment>
<Type>BOOL</Type> <Type>BOOL</Type>
</Var> </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>
<Contexts> <Contexts>
<Context> <Context>

View File

@@ -40,6 +40,9 @@ VAR_INPUT
xInUnitTestMode : BOOL := FALSE; xInUnitTestMode : BOOL := FALSE;
END_VAR END_VAR
VAR_OUTPUT VAR_OUTPUT
// Optional HMI interface
stHMIInterface : ST_HMI_ANALOG_VALUE;
// Scaled output value // Scaled output value
rScaledValue : REAL; rScaledValue : REAL;
@@ -367,6 +370,13 @@ IF xConfirmAlarms AND _xError AND (NOT _xAlarmsActive) AND (NOT _xInputErrorsAct
_xError := FALSE; _xError := FALSE;
END_IF END_IF
// ====================
// Handle HMI interface
// ====================
HandleHMIOutput();
// Copy internal signals to outputs // Copy internal signals to outputs
xWarningLow := _xWarningLow; xWarningLow := _xWarningLow;
xWarningHigh := _xWarningHigh; xWarningHigh := _xWarningHigh;
@@ -528,6 +538,25 @@ CreateAlarmMSG();
CreateAlarmLimitsMSG();]]></ST> CreateAlarmLimitsMSG();]]></ST>
</Implementation> </Implementation>
</Method> </Method>
<Method Name="HandleHMIOutput" Id="{1667ccb9-efb6-43f9-9a11-5c208475143f}">
<Declaration><![CDATA[METHOD PRIVATE HandleHMIOutput
VAR_INPUT
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[stHMIInterface.xUsed := stAnalogIOConfig.xUsed;
stHMIInterface.sUnit := stAnalogIOConfig.sUnit;
stHMIInterface.sName := _sName;
stHMIInterface.rValue := _rScaledValue;
stHMIInterface.rMin := stAnalogIOConfig.rPVMin;
stHMIInterface.rMax := stAnalogIOConfig.rPVMax;
IF _xError THEN
stHMIInterface.iStatus := 2;
ELSE
stHMIInterface.iStatus := 1;
END_IF]]></ST>
</Implementation>
</Method>
<Property Name="Name" Id="{103c7177-ef49-4a4b-98b1-06578d5fce31}"> <Property Name="Name" Id="{103c7177-ef49-4a4b-98b1-06578d5fce31}">
<Declaration><![CDATA[PROPERTY Name : STRING(80)]]></Declaration> <Declaration><![CDATA[PROPERTY Name : STRING(80)]]></Declaration>
<Get Name="Get" Id="{02e85b3f-9933-4282-a9d2-1ab27eb22499}"> <Get Name="Get" Id="{02e85b3f-9933-4282-a9d2-1ab27eb22499}">