Made library ready for first release

This commit is contained in:
2026-01-21 07:54:12 +01:00
parent ff41dafe13
commit 5d3dd09d13
56 changed files with 120 additions and 70 deletions

View File

@@ -116,12 +116,13 @@
</Hides> </Hides>
</DataType> </DataType>
</DataTypes> </DataTypes>
<Project ProjectGUID="{775BE4FD-89CE-48D5-8E68-5C84AF95981A}" TargetNetId="5.167.199.178.1.1" Target64Bit="true" ShowHideConfigurations="#x6"> <Project ProjectGUID="{775BE4FD-89CE-48D5-8E68-5C84AF95981A}" Target64Bit="true" ShowHideConfigurations="#x6">
<System> <System>
<Settings MaxCpus="2"/> <Settings MaxCpus="2"/>
<Licenses> <Licenses>
<Target> <Target>
<LicenseDevice DongleHardwareId="2" DongleDevice="#x71010001" DongleLevel="40" DongleSystemId="{5097FB65-8A2A-EFB0-8273-38CF2A98119D}" DongleSerialNumber="000btjb7" DongleCacheLicense="false"/> <ManualSelect>{9FD32FC8-0CF9-4C5B-95FB-F35423496A77}</ManualSelect>
<LicenseDevice DongleHardwareId="2" DongleDevice="#x71010002" DongleLevel="92" DongleSystemId="{F4D452BD-01EA-8CE8-F538-CCB335BD88CC}" DongleSerialNumber="000btjb7" DongleCacheLicense="false"/>
</Target> </Target>
</Licenses> </Licenses>
<Tasks> <Tasks>
@@ -129,11 +130,14 @@
<Name>PlcTask</Name> <Name>PlcTask</Name>
</Task> </Task>
</Tasks> </Tasks>
<TypeSystem>
<AdditionalTmcFile Name="BaseComponents" File="BaseComponents.tmc"/>
</TypeSystem>
</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="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="{2F71D701-8FCE-746A-6BDE-2ADEF4ACE650}" TmcPath="PLC\PLC.tmc"> <Instance Id="#x08502000" TcSmClass="TComPlcObjDef" KeepUnrestoredLinks="2" TmcHash="{BC065F54-D783-3F62-2B3C-EC8392B01342}" TmcPath="PLC\PLC.tmc">
<Name>PLC Instance</Name> <Name>BasicComponents Instance</Name>
<CLSID ClassFactory="TcPlc30">{08500001-0000-0000-F000-000000000064}</CLSID> <CLSID ClassFactory="TcPlc30">{08500001-0000-0000-F000-000000000064}</CLSID>
<Vars VarGrpType="2" AreaNo="1"> <Vars VarGrpType="2" AreaNo="1">
<Name>PlcTask Outputs</Name> <Name>PlcTask Outputs</Name>
@@ -190,46 +194,6 @@
</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>
@@ -482,6 +446,46 @@
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>
@@ -500,8 +504,5 @@
</Instance> </Instance>
</Project> </Project>
</Plc> </Plc>
<Io>
<Device File="Gerät 1 (EtherCAT).xti" Id="1"/>
</Io>
</Project> </Project>
</TcSmProject> </TcSmProject>

BIN
BasicComponents.library Normal file

Binary file not shown.

View File

@@ -8,7 +8,7 @@
<DownloadApplicationInfo>true</DownloadApplicationInfo> <DownloadApplicationInfo>true</DownloadApplicationInfo>
<WriteProductVersion>false</WriteProductVersion> <WriteProductVersion>false</WriteProductVersion>
<GenerateTpy>false</GenerateTpy> <GenerateTpy>false</GenerateTpy>
<Name>PLC</Name> <Name>BasicComponents</Name>
<ProgramVersion>3.1.4026.19</ProgramVersion> <ProgramVersion>3.1.4026.19</ProgramVersion>
<Application>{7cc9c530-510c-48e6-a294-2e6b5e6fa820}</Application> <Application>{7cc9c530-510c-48e6-a294-2e6b5e6fa820}</Application>
<TypeSystem>{951d7a0c-817c-4013-8204-ecd29ee0162e}</TypeSystem> <TypeSystem>{951d7a0c-817c-4013-8204-ecd29ee0162e}</TypeSystem>
@@ -19,6 +19,31 @@
<Released>false</Released> <Released>false</Released>
<POUsForPropertyAccessIncluded>false</POUsForPropertyAccessIncluded> <POUsForPropertyAccessIncluded>false</POUsForPropertyAccessIncluded>
<GlobalVersionStructureIncluded>false</GlobalVersionStructureIncluded> <GlobalVersionStructureIncluded>false</GlobalVersionStructureIncluded>
<Company>Heisig GmbH</Company>
<Title>BaseComponents</Title>
<ProjectVersion>1.0</ProjectVersion>
<DefaultNamespace>BC</DefaultNamespace>
<Author>M.Heisig</Author>
<Description>Basic components fb's (Valves, AI, AO, Motors, etc.)</Description>
<LibraryCategories>
<LibraryCategory xmlns="">
<Id>{3d49e892-ba18-4f02-888a-850f97d52db7}</Id>
<Version>1.0.0.0</Version>
<DefaultName>Heisig GmbH</DefaultName>
</LibraryCategory>
<LibraryCategory xmlns="">
<Id>{eb1097e9-64c5-43a2-8e69-a580a5ac7866}</Id>
<Version>1.0.0.0</Version>
<ParentCategory>
<Id>{3d49e892-ba18-4f02-888a-850f97d52db7}</Id>
</ParentCategory>
<DefaultName>Standard Libraries</DefaultName>
</LibraryCategory>
</LibraryCategories>
<SelectedLibraryCategories>
<Id xmlns="">{3d49e892-ba18-4f02-888a-850f97d52db7}</Id>
<Id xmlns="">{eb1097e9-64c5-43a2-8e69-a580a5ac7866}</Id>
</SelectedLibraryCategories>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<Compile Include="PlcTask.TcTTO"> <Compile Include="PlcTask.TcTTO">
@@ -53,6 +78,7 @@
</Compile> </Compile>
<Compile Include="POUs\Components\Motor\FB_MotorBecker.TcPOU"> <Compile Include="POUs\Components\Motor\FB_MotorBecker.TcPOU">
<SubType>Code</SubType> <SubType>Code</SubType>
<ExcludeFromBuild>true</ExcludeFromBuild>
</Compile> </Compile>
<Compile Include="POUs\Components\Motor\Types\ST_MOTOR_BECKER_CONFIG.TcDUT"> <Compile Include="POUs\Components\Motor\Types\ST_MOTOR_BECKER_CONFIG.TcDUT">
<SubType>Code</SubType> <SubType>Code</SubType>
@@ -187,7 +213,9 @@
<Folder Include="POUs\Components\Analog\Types" /> <Folder Include="POUs\Components\Analog\Types" />
<Folder Include="POUs\Components\EventListener" /> <Folder Include="POUs\Components\EventListener" />
<Folder Include="POUs\Components\EventListener\Types" /> <Folder Include="POUs\Components\EventListener\Types" />
<Folder Include="POUs\Components\Motor" /> <Folder Include="POUs\Components\Motor">
<ExcludeFromBuild>true</ExcludeFromBuild>
</Folder>
<Folder Include="POUs\Components\Motor\Types" /> <Folder Include="POUs\Components\Motor\Types" />
<Folder Include="POUs\Components\Utilities" /> <Folder Include="POUs\Components\Utilities" />
<Folder Include="POUs\Components\Valves" /> <Folder Include="POUs\Components\Valves" />
@@ -252,11 +280,16 @@
<SubType>Content</SubType> <SubType>Content</SubType>
</None> </None>
</ItemGroup> </ItemGroup>
<ItemGroup>
<None Include="ExternalTypes.tmc">
<SubType>Content</SubType>
</None>
</ItemGroup>
<ProjectExtensions> <ProjectExtensions>
<PlcProjectOptions> <PlcProjectOptions>
<XmlArchive> <XmlArchive>
<Data> <Data>
<o xml:space="preserve" t="OptionKey"> <o xml:space="preserve" t="OptionKey">
<v n="Name">"&lt;ProjectRoot&gt;"</v> <v n="Name">"&lt;ProjectRoot&gt;"</v>
<d n="SubKeys" t="Hashtable" ckt="String" cvt="OptionKey"> <d n="SubKeys" t="Hashtable" ckt="String" cvt="OptionKey">
<v>{192FAD59-8248-4824-A8DE-9177C94C195A}</v> <v>{192FAD59-8248-4824-A8DE-9177C94C195A}</v>
@@ -2631,16 +2664,16 @@
</d> </d>
<d n="Values" t="Hashtable" /> <d n="Values" t="Hashtable" />
</o> </o>
</Data> </Data>
<TypeList> <TypeList>
<Type n="Boolean">System.Boolean</Type> <Type n="Boolean">System.Boolean</Type>
<Type n="Hashtable">System.Collections.Hashtable</Type> <Type n="Hashtable">System.Collections.Hashtable</Type>
<Type n="Int32">System.Int32</Type> <Type n="Int32">System.Int32</Type>
<Type n="OptionKey">{54dd0eac-a6d8-46f2-8c27-2f43c7e49861}</Type> <Type n="OptionKey">{54dd0eac-a6d8-46f2-8c27-2f43c7e49861}</Type>
<Type n="String">System.String</Type> <Type n="String">System.String</Type>
<Type n="UInt32">System.UInt32</Type> <Type n="UInt32">System.UInt32</Type>
</TypeList> </TypeList>
</XmlArchive> </XmlArchive>
</PlcProjectOptions> </PlcProjectOptions>
</ProjectExtensions> </ProjectExtensions>
</Project> </Project>

View File

@@ -56,7 +56,7 @@ IF _xFirstCycle THEN
// Get current task cycle time // Get current task cycle time
_fbGetCurTaskIdx(); _fbGetCurTaskIdx();
// Convert 100ns to 1ms // Convert 100ns to 1ms
_rCycleTime := UDINT_TO_REAL(TwinCAT_SystemInfoVarList._TASKInfo[_fbGetCurTaskIdx.index].CycleTime) * 10E-5; _rCycleTime := UDINT_TO_REAL(TwinCAT_SystemInfoVarList._TaskInfo[_fbGetCurTaskIdx.index].CycleTime) * 10E-5;
END_IF END_IF
// Clamp setpoint to min max values // Clamp setpoint to min max values

View File

@@ -144,11 +144,11 @@ _xOpenValve := ((_xManualOpen AND _xManualModeActive AND (NOT _xAutomaticModeAct
// Check for interlocks // Check for interlocks
// If not, use valve state from settings // If not, use valve state from settings
IF (NOT _xProcessINTLKOk) OR (NOT _xSafetyINTLKOk) THEN IF (NOT _xProcessINTLKOk) OR (NOT _xSafetyINTLKOk) THEN
_xOpenValve := stValveConfig.xOpenWhenInterlocksActive; _xOpenValve := stValveConfig.xNormallyOpen;
// Also reset manual open command if safetyinterlocks are set // Also reset manual open command if safetyinterlocks are set
IF (NOT _xSafetyINTLKOk) AND (_xManualOpen <> stValveConfig.xOpenWhenInterlocksActive) THEN IF (NOT _xSafetyINTLKOk) AND (_xManualOpen <> stValveConfig.xNormallyOpen) THEN
_xManualOpen := stValveConfig.xOpenWhenInterlocksActive; _xManualOpen := stValveConfig.xNormallyOpen;
END_IF END_IF
END_IF END_IF

View File

@@ -80,7 +80,7 @@ VAR
// Name of valve // Name of valve
// Will be set in constructor and can be changed with the name property // Will be set in constructor and can be changed with the name property
_sName : STRING; _sName : STRING(80);
// Analog input // Analog input
{attribute 'hide'} {attribute 'hide'}

View File

@@ -23,7 +23,7 @@ STRUCT
// Set to TRUE if valve should be open instead // Set to TRUE if valve should be open instead
// of closed with activated interlocks // of closed with activated interlocks
xOpenWhenInterlocksActive : BOOL := FALSE; xNormallyOpen : BOOL := FALSE;
// Valve is used // Valve is used
{attribute 'OPC.UA.DA' := '1'} {attribute 'OPC.UA.DA' := '1'}

View File

@@ -351,7 +351,7 @@ IF _fbValve.IsOpen THEN
AssertTrue(Condition := _fbValve.xCloseValve, Message := 'Close output not active with active Interlock'); AssertTrue(Condition := _fbValve.xCloseValve, Message := 'Close output not active with active Interlock');
// Test the same with open valve when interlock active // Test the same with open valve when interlock active
_stValveConfig.xOpenWhenInterlocksActive := TRUE; _stValveConfig.xNormallyOpen := TRUE;
_fbValve(stValveConfig := _stValveConfig, wProcessINTLK := _wInterlocks, wProcessINTLKUsed := _wInterlocksUsed, stHMIInterface := _stHMIValve); _fbValve(stValveConfig := _stValveConfig, wProcessINTLK := _wInterlocks, wProcessINTLKUsed := _wInterlocksUsed, stHMIInterface := _stHMIValve);
// Valve should now be open // Valve should now be open
@@ -409,7 +409,7 @@ IF _fbValve.IsOpen THEN
AssertTrue(Condition := _fbValve.xCloseValve, Message := 'Close output not active with active Interlock'); AssertTrue(Condition := _fbValve.xCloseValve, Message := 'Close output not active with active Interlock');
// Test the same with open valve when interlock active // Test the same with open valve when interlock active
_stValveConfig.xOpenWhenInterlocksActive := TRUE; _stValveConfig.xNormallyOpen := TRUE;
_fbValve(stValveConfig := _stValveConfig, wProcessINTLK := _wInterlocks, wProcessINTLKUsed := _wInterlocksUsed, stHMIInterface := _stHMIValve); _fbValve(stValveConfig := _stValveConfig, wProcessINTLK := _wInterlocks, wProcessINTLKUsed := _wInterlocksUsed, stHMIInterface := _stHMIValve);
// Valve should now be open // Valve should now be open

View File

@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<LibraryCategories xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="LibraryCategories.xsd">
<LibraryCategory>
<Id>3d49e892-ba18-4f02-888a-850f97d52db7</Id>
<Version>1.0.0.0</Version>
<DefaultName>Heisig GmbH</DefaultName>
</LibraryCategory>
<LibraryCategory>
<Id>eb1097e9-64c5-43a2-8e69-a580a5ac7866</Id>
<Version>1.0.0.0</Version>
<ParentCategory>
<Id>3d49e892-ba18-4f02-888a-850f97d52db7</Id>
</ParentCategory>
<DefaultName>Standard Libraries</DefaultName>
</LibraryCategory>
</LibraryCategories>