Add project files.

master
D_Yankovyi 6 months ago
parent 099a4f9014
commit b08ccd1e7c

@ -0,0 +1,575 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<FileVersion>1.0.0.0</FileVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{28c0a30c-39aa-43ef-ab3c-daf6ebe119ea}</ProjectGuid>
<SubObjectsSortedByName>True</SubObjectsSortedByName>
<DownloadApplicationInfo>true</DownloadApplicationInfo>
<WriteProductVersion>true</WriteProductVersion>
<GenerateTpy>false</GenerateTpy>
<Name>_605MILL</Name>
<ProgramVersion>3.1.4024.0</ProgramVersion>
<Application>{631d3ee5-7f73-48a5-ae6f-60a0dbd01971}</Application>
<TypeSystem>{af031d20-fbed-49fb-ae34-f57e42bda58e}</TypeSystem>
<Implicit_Task_Info>{a8a8824b-781b-4739-8eb8-326f4fe45813}</Implicit_Task_Info>
<Implicit_KindOfTask>{76b36016-8bd0-45cb-85e5-35309cf24ca9}</Implicit_KindOfTask>
<Implicit_Jitter_Distribution>{4853a406-29d3-43ee-a322-e7cb50185769}</Implicit_Jitter_Distribution>
<LibraryReferences>{bb1547db-a2ad-4a61-ad8b-48fc04ec33e8}</LibraryReferences>
<CompilerDefines>VISU_USEWSTRING,VISU_USEPROPERTYINFO</CompilerDefines>
<Released>false</Released>
</PropertyGroup>
<ItemGroup>
<Compile Include="DUTs\Apartm.TcDUT">
<SubType>Code</SubType>
</Compile>
<Compile Include="DUTs\AparZone.TcDUT">
<SubType>Code</SubType>
</Compile>
<Compile Include="DUTs\Building.TcDUT">
<SubType>Code</SubType>
</Compile>
<Compile Include="DUTs\HMI_ApartmDisplay.TcDUT">
<SubType>Code</SubType>
</Compile>
<Compile Include="DUTs\PIDParam.TcDUT">
<SubType>Code</SubType>
</Compile>
<Compile Include="DUTs\System.TcDUT">
<SubType>Code</SubType>
</Compile>
<Compile Include="DUTs\WindData.TcDUT">
<SubType>Code</SubType>
</Compile>
<Compile Include="DUTs\Zone.TcDUT">
<SubType>Code</SubType>
</Compile>
<Compile Include="DUTs\ZoneProp.TcDUT">
<SubType>Code</SubType>
</Compile>
<Compile Include="GlobalTextList.TcGTLO">
<SubType>Code</SubType>
</Compile>
<Compile Include="GVLs\GVL.TcGVL">
<SubType>Code</SubType>
<LinkAlways>true</LinkAlways>
</Compile>
<Compile Include="GVLs\IO.TcGVL">
<SubType>Code</SubType>
<LinkAlways>true</LinkAlways>
</Compile>
<Compile Include="GVLs\Set.TcGVL">
<SubType>Code</SubType>
<LinkAlways>true</LinkAlways>
</Compile>
<Compile Include="PlcTask.TcTTO">
<SubType>Code</SubType>
</Compile>
<Compile Include="POUs\Alarms.TcPOU">
<SubType>Code</SubType>
</Compile>
<Compile Include="POUs\AutoCalibration.TcPOU">
<SubType>Code</SubType>
</Compile>
<Compile Include="POUs\Cell_Startup.TcPOU">
<SubType>Code</SubType>
</Compile>
<Compile Include="POUs\FB\fbHeatLevel.TcPOU">
<SubType>Code</SubType>
</Compile>
<Compile Include="POUs\FB\fbMAU.TcPOU">
<SubType>Code</SubType>
</Compile>
<Compile Include="POUs\FB\fbPID.TcPOU">
<SubType>Code</SubType>
</Compile>
<Compile Include="POUs\FB\fbPulseDelay.TcPOU">
<SubType>Code</SubType>
</Compile>
<Compile Include="POUs\FB\fbSamples.TcPOU">
<SubType>Code</SubType>
</Compile>
<Compile Include="POUs\FB\fbZone.TcPOU">
<SubType>Code</SubType>
</Compile>
<Compile Include="POUs\FB\LowPassFilter.TcPOU">
<SubType>Code</SubType>
</Compile>
<Compile Include="POUs\FB_OSCAT\CLK_PRG.TcPOU">
<SubType>Code</SubType>
</Compile>
<Compile Include="POUs\FB_OSCAT\CTRL_IN.TcPOU">
<SubType>Code</SubType>
</Compile>
<Compile Include="POUs\FB_OSCAT\CTRL_OUT.TcPOU">
<SubType>Code</SubType>
</Compile>
<Compile Include="POUs\FB_OSCAT\CTRL_PID.TcPOU">
<SubType>Code</SubType>
</Compile>
<Compile Include="POUs\FB_OSCAT\CTRL_PWM.TcPOU">
<SubType>Code</SubType>
</Compile>
<Compile Include="POUs\FB_OSCAT\DEAD_BAND.TcPOU">
<SubType>Code</SubType>
</Compile>
<Compile Include="POUs\FB_OSCAT\DEAD_ZONE.TcPOU">
<SubType>Code</SubType>
</Compile>
<Compile Include="POUs\FB_OSCAT\FT_DERIV.TcPOU">
<SubType>Code</SubType>
</Compile>
<Compile Include="POUs\FB_OSCAT\FT_PIDWL.TcPOU">
<SubType>Code</SubType>
</Compile>
<Compile Include="POUs\FB_OSCAT\FT_PIWL.TcPOU">
<SubType>Code</SubType>
</Compile>
<Compile Include="POUs\FB_OSCAT\PWM_DC.TcPOU">
<SubType>Code</SubType>
</Compile>
<Compile Include="POUs\FB_OSCAT\SCALE_R.TcPOU">
<SubType>Code</SubType>
</Compile>
<Compile Include="POUs\FB_OSCAT\TP_X.TcPOU">
<SubType>Code</SubType>
</Compile>
<Compile Include="POUs\FB_OSCAT\T_PLC_MS.TcPOU">
<SubType>Code</SubType>
</Compile>
<Compile Include="POUs\FB_OSCAT\T_PLC_US.TcPOU">
<SubType>Code</SubType>
</Compile>
<Compile Include="POUs\Functions\LimitValueINT.TcPOU">
<SubType>Code</SubType>
</Compile>
<Compile Include="POUs\Functions\LimitValueLREAL.TcPOU">
<SubType>Code</SubType>
</Compile>
<Compile Include="POUs\MAIN.TcPOU">
<SubType>Code</SubType>
</Compile>
<Compile Include="POUs\SavePersistent.TcPOU">
<SubType>Code</SubType>
</Compile>
<Compile Include="POUs\Send_email.TcPOU">
<SubType>Code</SubType>
</Compile>
<Compile Include="Visualization Manager.TcVMO">
<SubType>Code</SubType>
</Compile>
<Compile Include="VISUs\VISUs\AlarmsDEP.TcVIS">
<SubType>Code</SubType>
<DependentUpon>Visualization Manager.TcVMO</DependentUpon>
</Compile>
<Compile Include="VISUs\VISUs\Alarms\ActiveAlarms.TcVIS">
<SubType>Code</SubType>
<DependentUpon>Visualization Manager.TcVMO</DependentUpon>
</Compile>
<Compile Include="VISUs\VISUs\Alarms\Alarms.TcVIS">
<SubType>Code</SubType>
<DependentUpon>Visualization Manager.TcVMO</DependentUpon>
</Compile>
<Compile Include="VISUs\VISUs\Alarms\AlarmsHistory.TcVIS">
<SubType>Code</SubType>
<DependentUpon>Visualization Manager.TcVMO</DependentUpon>
</Compile>
<Compile Include="VISUs\VISUs\DutyCyclesFrames\HeatLevelsEdit1to6.TcVIS">
<SubType>Code</SubType>
<DependentUpon>Visualization Manager.TcVMO</DependentUpon>
</Compile>
<Compile Include="VISUs\VISUs\DutyCyclesFrames\HeatLevelsEdit7to10.TcVIS">
<SubType>Code</SubType>
<DependentUpon>Visualization Manager.TcVMO</DependentUpon>
</Compile>
<Compile Include="VISUs\VISUs\DutyCyclesFrames\HeatLevelsView1to6.TcVIS">
<SubType>Code</SubType>
<DependentUpon>Visualization Manager.TcVMO</DependentUpon>
</Compile>
<Compile Include="VISUs\VISUs\DutyCyclesFrames\HeatLevelsEdit.TcVIS">
<SubType>Code</SubType>
<DependentUpon>Visualization Manager.TcVMO</DependentUpon>
</Compile>
<Compile Include="VISUs\VISUs\DutyCyclesFrames\HeatLevelsView.TcVIS">
<SubType>Code</SubType>
<DependentUpon>Visualization Manager.TcVMO</DependentUpon>
</Compile>
<Compile Include="VISUs\VISUs\DutyCyclesFrames\HeatLevelsView7to10.TcVIS">
<SubType>Code</SubType>
<DependentUpon>Visualization Manager.TcVMO</DependentUpon>
</Compile>
<Compile Include="VISUs\VISUs\DutyCyclesFrames\ZoneDutyCycleEdit.TcVIS">
<SubType>Code</SubType>
<DependentUpon>Visualization Manager.TcVMO</DependentUpon>
</Compile>
<Compile Include="VISUs\VISUs\DutyCyclesFrames\ZoneDutyCycleView.TcVIS">
<SubType>Code</SubType>
<DependentUpon>Visualization Manager.TcVMO</DependentUpon>
</Compile>
<Compile Include="VISUs\VISUs\HeatersManualOffsetSetup.TcVIS">
<SubType>Code</SubType>
<DependentUpon>Visualization Manager.TcVMO</DependentUpon>
</Compile>
<Compile Include="VISUs\VISUs\HeatLevelPIDOffsets.TcVIS">
<SubType>Code</SubType>
<DependentUpon>Visualization Manager.TcVMO</DependentUpon>
</Compile>
<Compile Include="VISUs\VISUs\ImagePool.TcIPO">
<SubType>Code</SubType>
</Compile>
<Compile Include="VISUs\VISUs\MainScr.TcVIS">
<SubType>Code</SubType>
<DependentUpon>Visualization Manager.TcVMO</DependentUpon>
</Compile>
<Compile Include="VISUs\VISUs\MappingTest\MappingByFloors.TcVIS">
<SubType>Code</SubType>
<DependentUpon>Visualization Manager.TcVMO</DependentUpon>
</Compile>
<Compile Include="VISUs\VISUs\MappingTest\MappingFloor1_4.TcVIS">
<SubType>Code</SubType>
<DependentUpon>Visualization Manager.TcVMO</DependentUpon>
</Compile>
<Compile Include="VISUs\VISUs\MappingTest\MappingFloor5_8.TcVIS">
<SubType>Code</SubType>
<DependentUpon>Visualization Manager.TcVMO</DependentUpon>
</Compile>
<Compile Include="VISUs\VISUs\MappingTest\MappingScreenHolder.TcVIS">
<SubType>Code</SubType>
<DependentUpon>Visualization Manager.TcVMO</DependentUpon>
</Compile>
<Compile Include="VISUs\VISUs\MAU\MAUscreenII.TcVIS">
<SubType>Code</SubType>
<DependentUpon>Visualization Manager.TcVMO</DependentUpon>
</Compile>
<Compile Include="VISUs\VISUs\ScreenTemplates\DateTimeFrame.TcVIS">
<SubType>Code</SubType>
<DependentUpon>Visualization Manager.TcVMO</DependentUpon>
</Compile>
<Compile Include="VISUs\VISUs\ScreenTemplates\DutyCycleOffset.TcVIS">
<SubType>Code</SubType>
<DependentUpon>Visualization Manager.TcVMO</DependentUpon>
</Compile>
<Compile Include="VISUs\VISUs\ScreenTemplates\FloorsTemperatures.TcVIS">
<SubType>Code</SubType>
<DependentUpon>Visualization Manager.TcVMO</DependentUpon>
</Compile>
<Compile Include="VISUs\VISUs\ScreenTemplates\FloorTemperature.TcVIS">
<SubType>Code</SubType>
<DependentUpon>Visualization Manager.TcVMO</DependentUpon>
</Compile>
<Compile Include="VISUs\VISUs\ScreenTemplates\HeadFrame.TcVIS">
<SubType>Code</SubType>
<DependentUpon>Visualization Manager.TcVMO</DependentUpon>
</Compile>
<Compile Include="VISUs\VISUs\ScreenTemplates\MappingFloor.TcVIS">
<SubType>Code</SubType>
<DependentUpon>Visualization Manager.TcVMO</DependentUpon>
</Compile>
<Compile Include="VISUs\VISUs\ScreenTemplates\MappingFrameUnitII.TcVIS">
<SubType>Code</SubType>
<DependentUpon>Visualization Manager.TcVMO</DependentUpon>
</Compile>
<Compile Include="VISUs\VISUs\ScreenTemplates\SetTempFloor.TcVIS">
<SubType>Code</SubType>
<DependentUpon>Visualization Manager.TcVMO</DependentUpon>
</Compile>
<Compile Include="VISUs\VISUs\ScreenTemplates\TemperatureFrameUnit.TcVIS">
<SubType>Code</SubType>
<DependentUpon>Visualization Manager.TcVMO</DependentUpon>
</Compile>
<Compile Include="VISUs\VISUs\ScreenTemplates\TemperatureFrameUnitII.TcVIS">
<SubType>Code</SubType>
<DependentUpon>Visualization Manager.TcVMO</DependentUpon>
</Compile>
<Compile Include="VISUs\VISUs\ScreenTemplates\TempSetFrameUnit.TcVIS">
<SubType>Code</SubType>
<DependentUpon>Visualization Manager.TcVMO</DependentUpon>
</Compile>
<Compile Include="VISUs\VISUs\ScreenTemplates\TempSetFrameUnitII.TcVIS">
<SubType>Code</SubType>
<DependentUpon>Visualization Manager.TcVMO</DependentUpon>
</Compile>
<Compile Include="VISUs\VISUs\ScreenTemplates\ZoneIndicator.TcVIS">
<SubType>Code</SubType>
<DependentUpon>Visualization Manager.TcVMO</DependentUpon>
</Compile>
<Compile Include="VISUs\VISUs\ScreenTemplates\ZoneMapping.TcVIS">
<SubType>Code</SubType>
<DependentUpon>Visualization Manager.TcVMO</DependentUpon>
</Compile>
<Compile Include="VISUs\VISUs\ScreenTemplates\ZoneTemperatures.TcVIS">
<SubType>Code</SubType>
<DependentUpon>Visualization Manager.TcVMO</DependentUpon>
</Compile>
<Compile Include="VISUs\VISUs\ScreenTemplates\ZoneTempSet.TcVIS">
<SubType>Code</SubType>
<DependentUpon>Visualization Manager.TcVMO</DependentUpon>
</Compile>
<Compile Include="VISUs\VISUs\Setup.TcVIS">
<SubType>Code</SubType>
<DependentUpon>Visualization Manager.TcVMO</DependentUpon>
</Compile>
<Compile Include="VISUs\VISUs\SimpleHeaterSetOffset.TcVIS">
<SubType>Code</SubType>
<DependentUpon>Visualization Manager.TcVMO</DependentUpon>
</Compile>
<Compile Include="VISUs\VISUs\SystemGlobalSetup.TcVIS">
<SubType>Code</SubType>
<DependentUpon>Visualization Manager.TcVMO</DependentUpon>
</Compile>
<Compile Include="VISUs\VISUs\SystemParametersSetup.TcVIS">
<SubType>Code</SubType>
<DependentUpon>Visualization Manager.TcVMO</DependentUpon>
</Compile>
<Compile Include="VISUs\VISUs\UnitsTempsSet\UnitsSetPointsScreenHolder.TcVIS">
<SubType>Code</SubType>
<DependentUpon>Visualization Manager.TcVMO</DependentUpon>
</Compile>
<Compile Include="VISUs\VISUs\UnitsTempsSet\UnitsSetTempOnFloors.TcVIS">
<SubType>Code</SubType>
<DependentUpon>Visualization Manager.TcVMO</DependentUpon>
</Compile>
<Compile Include="VISUs\VISUs\UnitsTempsSet\UnitsTempSetFloors1_5.TcVIS">
<SubType>Code</SubType>
<DependentUpon>Visualization Manager.TcVMO</DependentUpon>
</Compile>
<Compile Include="VISUs\VISUs\UnitsTempsSet\UnitsTempSetFloors6_8.TcVIS">
<SubType>Code</SubType>
<DependentUpon>Visualization Manager.TcVMO</DependentUpon>
</Compile>
<Compile Include="VISUs\VISUs\UnitsTemps\Floors1_5.TcVIS">
<SubType>Code</SubType>
<DependentUpon>Visualization Manager.TcVMO</DependentUpon>
</Compile>
<Compile Include="VISUs\VISUs\UnitsTemps\Floors5_8.TcVIS">
<SubType>Code</SubType>
<DependentUpon>Visualization Manager.TcVMO</DependentUpon>
</Compile>
<Compile Include="VISUs\VISUs\UnitsTemps\UnitsTemperaturesScreenHolder.TcVIS">
<SubType>Code</SubType>
<DependentUpon>Visualization Manager.TcVMO</DependentUpon>
</Compile>
<Compile Include="VISUs\VISUs\UnitsTemps\UnitsTemperaturesUSERsScreen.TcVIS">
<SubType>Code</SubType>
<DependentUpon>Visualization Manager.TcVMO</DependentUpon>
</Compile>
<Compile Include="VISUs\VISUs\VISUs\ScreenTemplates\MappingFrameUnit.TcVIS">
<SubType>Code</SubType>
<DependentUpon>Visualization Manager.TcVMO</DependentUpon>
</Compile>
<Compile Include="VISUs\VISUs\ZonesLayout.TcVIS">
<SubType>Code</SubType>
<DependentUpon>Visualization Manager.TcVMO</DependentUpon>
</Compile>
<Compile Include="VISU_TASK.TcTTO">
<SubType>Code</SubType>
</Compile>
</ItemGroup>
<ItemGroup>
<Folder Include="DUTs" />
<Folder Include="GVLs" />
<Folder Include="POUs\FB" />
<Folder Include="POUs\FB_OSCAT" />
<Folder Include="POUs\Functions" />
<Folder Include="POUs" />
<Folder Include="VISUs" />
<Folder Include="VISUs\VISUs" />
<Folder Include="VISUs\VISUs\Alarms" />
<Folder Include="VISUs\VISUs\MappingTest" />
<Folder Include="VISUs\VISUs\MAU" />
<Folder Include="VISUs\VISUs\DutyCyclesFrames" />
<Folder Include="VISUs\VISUs\ScreenTemplates" />
<Folder Include="VISUs\VISUs\UnitsTemps" />
<Folder Include="VISUs\VISUs\UnitsTempsSet" />
<Folder Include="VISUs\VISUs\VISUs" />
<Folder Include="VISUs\VISUs\VISUs\ScreenTemplates" />
</ItemGroup>
<ItemGroup>
<PlaceholderReference Include="CmpBitmapPool">
<DefaultResolution>CmpBitmapPool, * (System)</DefaultResolution>
<Namespace>CmpBitmapPool</Namespace>
</PlaceholderReference>
<PlaceholderReference Include="Custom Alarm Library for TF1800">
<DefaultResolution>Custom Alarm Library for TF1800, * (K3D Inc)</DefaultResolution>
</PlaceholderReference>
<PlaceholderReference Include="System_VisuElemEventTable">
<DefaultResolution>VisuElemEventTable, 1.0.3.0 (System)</DefaultResolution>
<Namespace>VisuElemEventTable</Namespace>
<SystemLibrary>true</SystemLibrary>
<ResolverGuid>2717eb6a-dd07-4c66-8d8d-cacebd7b18ae</ResolverGuid>
</PlaceholderReference>
<PlaceholderReference Include="System_VisuElemMeter">
<DefaultResolution>VisuElemMeter, 3.5.13.0 (System)</DefaultResolution>
<Namespace>VisuElemMeter</Namespace>
<SystemLibrary>true</SystemLibrary>
<ResolverGuid>2717eb6a-dd07-4c66-8d8d-cacebd7b18ae</ResolverGuid>
</PlaceholderReference>
<PlaceholderReference Include="System_VisuElems">
<DefaultResolution>VisuElems, 3.5.13.40 (System)</DefaultResolution>
<Namespace>VisuElems</Namespace>
<SystemLibrary>true</SystemLibrary>
<ResolverGuid>2717eb6a-dd07-4c66-8d8d-cacebd7b18ae</ResolverGuid>
</PlaceholderReference>
<PlaceholderReference Include="System_VisuElemsSpecialControls">
<DefaultResolution>VisuElemsSpecialControls, 3.5.13.0 (System)</DefaultResolution>
<Namespace>VisuElemsSpecialControls</Namespace>
<SystemLibrary>true</SystemLibrary>
<ResolverGuid>2717eb6a-dd07-4c66-8d8d-cacebd7b18ae</ResolverGuid>
</PlaceholderReference>
<PlaceholderReference Include="System_VisuElemsWinControls">
<DefaultResolution>VisuElemsWinControls, 3.5.13.20 (System)</DefaultResolution>
<Namespace>VisuElemsWinControls</Namespace>
<SystemLibrary>true</SystemLibrary>
<ResolverGuid>2717eb6a-dd07-4c66-8d8d-cacebd7b18ae</ResolverGuid>
</PlaceholderReference>
<PlaceholderReference Include="System_VisuElemTextEditor">
<DefaultResolution>VisuElemTextEditor, 3.5.13.0 (System)</DefaultResolution>
<Namespace>VisuElemTextEditor</Namespace>
<SystemLibrary>true</SystemLibrary>
<ResolverGuid>2717eb6a-dd07-4c66-8d8d-cacebd7b18ae</ResolverGuid>
</PlaceholderReference>
<PlaceholderReference Include="system_visuinputs">
<DefaultResolution>visuinputs, 3.5.13.0 (system)</DefaultResolution>
<Namespace>visuinputs</Namespace>
<SystemLibrary>true</SystemLibrary>
<ResolverGuid>2717eb6a-dd07-4c66-8d8d-cacebd7b18ae</ResolverGuid>
</PlaceholderReference>
<PlaceholderReference Include="System_VisuNativeControl">
<DefaultResolution>VisuNativeControl, 3.5.13.0 (System)</DefaultResolution>
<Namespace>VisuNativeControl</Namespace>
<SystemLibrary>true</SystemLibrary>
<ResolverGuid>2717eb6a-dd07-4c66-8d8d-cacebd7b18ae</ResolverGuid>
</PlaceholderReference>
<PlaceholderReference Include="Tc2_EtherCAT">
<DefaultResolution>Tc2_EtherCAT, * (Beckhoff Automation GmbH)</DefaultResolution>
<Namespace>Tc2_EtherCAT</Namespace>
</PlaceholderReference>
<PlaceholderReference Include="Tc2_ModbusRTU">
<DefaultResolution>Tc2_ModbusRTU, * (Beckhoff Automation GmbH)</DefaultResolution>
<Namespace>Tc2_ModbusRTU</Namespace>
</PlaceholderReference>
<PlaceholderReference Include="Tc2_Smtp">
<DefaultResolution>Tc2_Smtp, * (Beckhoff Automation GmbH)</DefaultResolution>
<Namespace>Tc2_Smtp</Namespace>
</PlaceholderReference>
<PlaceholderReference Include="Tc2_Standard">
<DefaultResolution>Tc2_Standard, * (Beckhoff Automation GmbH)</DefaultResolution>
<Namespace>Tc2_Standard</Namespace>
</PlaceholderReference>
<PlaceholderReference Include="Tc2_SUPS">
<DefaultResolution>Tc2_SUPS, * (Beckhoff Automation GmbH)</DefaultResolution>
<Namespace>Tc2_SUPS</Namespace>
</PlaceholderReference>
<PlaceholderReference Include="Tc2_System">
<DefaultResolution>Tc2_System, * (Beckhoff Automation GmbH)</DefaultResolution>
<Namespace>Tc2_System</Namespace>
</PlaceholderReference>
<PlaceholderReference Include="Tc2_Utilities">
<DefaultResolution>Tc2_Utilities, * (Beckhoff Automation GmbH)</DefaultResolution>
<Namespace>Tc2_Utilities</Namespace>
</PlaceholderReference>
<PlaceholderReference Include="Tc3_EventLogger">
<DefaultResolution>Tc3_EventLogger, * (Beckhoff Automation GmbH)</DefaultResolution>
<Namespace>Tc3_EventLogger</Namespace>
</PlaceholderReference>
<PlaceholderReference Include="Tc3_Module">
<DefaultResolution>Tc3_Module, * (Beckhoff Automation GmbH)</DefaultResolution>
<Namespace>Tc3_Module</Namespace>
</PlaceholderReference>
<PlaceholderReference Include="VisuDialogs">
<DefaultResolution>VisuDialogs, * (System)</DefaultResolution>
<Namespace>VisuDialogs</Namespace>
</PlaceholderReference>
<PlaceholderReference Include="VisuUserManagement">
<DefaultResolution>VisuUserMgmt, * (System)</DefaultResolution>
<Namespace>VisuUserManagement</Namespace>
<SystemLibrary>true</SystemLibrary>
</PlaceholderReference>
</ItemGroup>
<ItemGroup>
<None Include="605MILL.tmc">
<SubType>Content</SubType>
</None>
</ItemGroup>
<ItemGroup>
<LibraryReference Include="VisuSymbols,3.5.10.0,System">
<Namespace>VisuSymbols</Namespace>
</LibraryReference>
</ItemGroup>
<ProjectExtensions>
<PlcProjectOptions>
<XmlArchive>
<Data>
<o xml:space="preserve" t="OptionKey">
<v n="Name">"&lt;ProjectRoot&gt;"</v>
<d n="SubKeys" t="Hashtable" ckt="String" cvt="OptionKey">
<v>{192FAD59-8248-4824-A8DE-9177C94C195A}</v>
<o>
<v n="Name">"{192FAD59-8248-4824-A8DE-9177C94C195A}"</v>
<d n="SubKeys" t="Hashtable" />
<d n="Values" t="Hashtable" />
</o>
<v>{246001F4-279D-43AC-B241-948EB31120E1}</v>
<o>
<v n="Name">"{246001F4-279D-43AC-B241-948EB31120E1}"</v>
<d n="SubKeys" t="Hashtable" />
<d n="Values" t="Hashtable" ckt="String">
<v>UnicodeStrings</v>
<v>true</v>
<v>GlobalTextListFilePath</v>
<v>""</v>
<v>ExtendedSettings</v>
<v>true</v>
<v>GlobalVisuImageFilePath</v>
<v>"%APPLICATIONPATH%\"</v>
<v>GeneralPropertySupport</v>
<v>true</v>
</d>
</o>
<v>{29BD8D0C-3586-4548-BB48-497B9A01693F}</v>
<o>
<v n="Name">"{29BD8D0C-3586-4548-BB48-497B9A01693F}"</v>
<d n="SubKeys" t="Hashtable" ckt="String" cvt="OptionKey">
<v>Rules</v>
<o>
<v n="Name">"Rules"</v>
<d n="SubKeys" t="Hashtable" />
<d n="Values" t="Hashtable" />
</o>
</d>
<d n="Values" t="Hashtable" />
</o>
<v>{8F99A816-E488-41E4-9FA3-846536012284}</v>
<o>
<v n="Name">"{8F99A816-E488-41E4-9FA3-846536012284}"</v>
<d n="SubKeys" t="Hashtable" />
<d n="Values" t="Hashtable" />
</o>
<v>{40450F57-0AA3-4216-96F3-5444ECB29763}</v>
<o>
<v n="Name">"{40450F57-0AA3-4216-96F3-5444ECB29763}"</v>
<d n="SubKeys" t="Hashtable" />
<d n="Values" t="Hashtable" ckt="String">
<v>ActiveVisuExtensions_0</v>
<v>"IR0whWr8bwdyBwAA2CM5uwAAAAC4AQAAabXwRAAAAAABAAAAAAAAAAEaUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwACTHsANgBkADQAMgBlADkAMQA4AC0AZQA2AGEANQAtADQAYgAyAGMALQA5ADEANwBiAC0AZQAwADcAMwAxAGIANwA2ADYAYgAxAGYAfQADDkMAbwBtAHAAYQBuAHkABDBCAGUAYwBrAGgAbwBmAGYAIABBAHUAdABvAG0AYQB0AGkAbwBuACAARwBtAGIASAAFDlYAZQByAHMAaQBvAG4ABg4xAC4AMAAuADMALgAwAAcMQQBjAHQAaQB2AGUACAhiAG8AbwBsAAkITgBhAG0AZQAKJFYAaQBzAHUARQBsAGUAbQBFAHYAZQBuAHQAVABhAGIAbABlAAsWUAByAG8AZgBpAGwAZQBEAGEAdABhAAxMewAxADYAZQA1ADUAYgA2ADAALQA3ADAANAAzAC0ANABhADYAMwAtAGIANgA1AGIALQA2ADEANAA3ADEAMwA4ADcAOABkADQAMgB9AA0STABpAGIAcgBhAHIAaQBlAHMADkx7ADMAYgBmAGQANQA0ADUAOQAtAGIAMAA3AGYALQA0AGQANgBlAC0AYQBlADEAYQAtAGEAOAAzADMANQA2AGEANQA1ADEANAAyAH0AD0x7ADkAYwA5ADUAOAA5ADYAOAAtADIAYwA4ADUALQA0ADEAYgBiAC0AOAA4ADcAMQAtADgAOQA1AGYAZgAxAGYAZQBkAGUAMQBhAH0AEAZpAG4AdAARClUAcwBhAGcAZQASClQAaQB0AGwAZQATDFMAeQBzAHQAZQBtABQSVgBpAHMAdQBFAGwAZQBtAHMAFRhWAGkAcwB1AEUAbABlAG0AQgBhAHMAZQAWFFYAaQBzAHUASQBuAHAAdQB0AHMAFyZEAGUAdgBQAGwAYQBjAGUAaABvAGwAZABlAHIAcwBVAHMAZQBkABgiUABsAHUAZwBpAG4AQwBvAG4AcwB0AHIAYQBpAG4AdABzABlMewA0ADMAZAA1ADIAYgBjAGUALQA5ADQAMgBjAC0ANAA0AGQANwAtADkAZQA5ADQALQAxAGIAZgBkAGYAMwAxADAAZQA2ADMAYwB9ABocQQB0AEwAZQBhAHMAdABWAGUAcgBzAGkAbwBuABsUUABsAHUAZwBpAG4ARwB1AGkAZAAcFlMAeQBzAHQAZQBtAC4ARwB1AGkAZAAdSGEAZgBjAGQANQA0ADQANgAtADQAOQAxADQALQA0AGYAZQA3AC0AYgBiADcAOAAtADkAYgBmAGYAZQBiADcAMABmAGQAMQA3AB4UVQBwAGQAYQB0AGUASQBuAGYAbwAfTHsAYgAwADMAMwA2ADYAYQA4AC0AYgA1AGMAMAAtADQAYgA5AGEALQBhADAAMABlAC0AZQBiADgANgAwADEAMQAxADAANABjADMAfQAgDlUAcABkAGEAdABlAHMAIUx7ADEAOAA2ADgAZgBmAGMAOQAtAGUANABmAGMALQA0ADUAMwAyAC0AYQBjADAANgAtADEAZQAzADkAYgBiADUANQA3AGIANgA5AH0AIkx7AGEANQBiAGQANAA4AGMAMwAtADAAZAAxADcALQA0ADEAYgA1AC0AYgAxADYANAAtADUAZgBjADYAYQBkADIAYgA5ADYAYgA3AH0AIxZPAGIAagBlAGMAdABzAFQAeQBwAGUAJFRVAHAAZABhAHQAZQBMAGEAbgBnAHUAYQBnAGUATQBvAGQAZQBsAEYAbwByAEMAbwBuAHYAZQByAHQAaQBiAGwAZQBMAGkAYgByAGEAcgBpAGUAcwAlEEwAaQBiAFQAaQB0AGwAZQAmFEwAaQBiAEMAbwBtAHAAYQBuAHkAJx5VAHAAZABhAHQAZQBQAHIAbwB2AGkAZABlAHIAcwAoOFMAeQBzAHQAZQBtAC4AQwBvAGwAbABlAGMAdABpAG8AbgBzAC4ASABhAHMAaAB0AGEAYgBsAGUAKRJ2AGkAcwB1AGUAbABlAG0AcwAqDHMAeQBzAHQAZQBtACtINgBjAGIAMQBjAGQAZQAxAC0AZAA1AGQAYwAtADQAYQAzAGIALQA5ADAANQA0AC0AMgAxAGYAYQA3ADUANgBhADMAZgBhADQALChJAG4AdABlAHIAZgBhAGMAZQBWAGUAcgBzAGkAbwBuAEkAbgBmAG8ALUx7AGMANgAxADEAZQA0ADAAMAAtADcAZgBiADkALQA0AGMAMwA1AC0AYgA5AGEAYwAtADQAZQAzADEANABiADUAOQA5ADYANAAzAH0ALhhNAGEAagBvAHIAVgBlAHIAcwBpAG8AbgAvGE0AaQBuAG8AcgBWAGUAcgBzAGkAbwBuADAMTABlAGcAYQBjAHkAMTBMAGEAbgBnAHUAYQBnAGUATQBvAGQAZQBsAFYAZQByAHMAaQBvAG4ASQBuAGYAbwAyMEwAbwBhAGQATABpAGIAcgBhAHIAaQBlAHMASQBuAHQAbwBQAHIAbwBqAGUAYwB0ADMaQwBvAG0AcABhAHQAaQBiAGkAbABpAHQAeQDQAAIaBtADAS0E0AUBLQbQBwitAdAJAS0K0AsMGgfQDQ4aAUUNDwTQAA8aBEUFEAQBAAAAAAAAAAMAAAAAAAAA0BEQrQIAAADQEgEtCtADAS0T0AAPGgRFBRAEAwAAAAUAAAANAAAAFAAAANAREK0BAAAA0BIBLRTQAwEtE9AADxoERQUQBAMAAAAFAAAADQAAABQAAADQERCtBAAAANASAS0V0AMBLRPQAA8aBEUFEAQDAAAABQAAAA0AAAAAAAAA0BEQrQQAAADQEgEtFtADAS0T0BcIrQFFGBkB0AAZGgJFGhAEAwAAAAUAAAANAAAAAAAAANAbHC0d0B4fGgJFICEC0AAiGgVFBRAEAwAAAAMAAAAAAAAACgAAANAjEK0AAAAA0AkBLSTQJQEtFNAmAS0T0AAiGgVFBRAEAwAAAAMAAAAAAAAACgAAANAjEK0BAAAA0AkBLSTQJQEtFNAmAS0TmicoAUUAAQLQAAEtKdAAAS0q0AAcLSvQLC0aA9AuEK0BAAAA0C8QrRcAAADQMAitANAxLRoD0C4QrQIAAADQLxCtAwAAANAwCK0A0DIIrQDQMwitAA=="</v>
<v>ActiveVisuExtensionsLength</v>
<v>1</v>
<v>ActiveVisuProfile</v>
<v>"IR0whWr8bwfwBwAAiD2qpQAAAABVAgAA37x72QAAAAABAAAAAAAAAAEaUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwACTHsAZgA5ADUAYgBiADQAMgA2AC0ANQA1ADIANAAtADQAYgA0ADUALQA5ADQAMAAwAC0AZgBiADAAZgAyAGUANwA3AGUANQAxAGIAfQADCE4AYQBtAGUABDBUAHcAaQBuAEMAQQBUACAAMwAuADEAIABCAHUAaQBsAGQAIAA0ADAAMgA0AC4ANwAFFlAAcgBvAGYAaQBsAGUARABhAHQAYQAGTHsAMQA2AGUANQA1AGIANgAwAC0ANwAwADQAMwAtADQAYQA2ADMALQBiADYANQBiAC0ANgAxADQANwAxADMAOAA3ADgAZAA0ADIAfQAHEkwAaQBiAHIAYQByAGkAZQBzAAhMewAzAGIAZgBkADUANAA1ADkALQBiADAANwBmAC0ANABkADYAZQAtAGEAZQAxAGEALQBhADgAMwAzADUANgBhADUANQAxADQAMgB9AAlMewA5AGMAOQA1ADgAOQA2ADgALQAyAGMAOAA1AC0ANAAxAGIAYgAtADgAOAA3ADEALQA4ADkANQBmAGYAMQBmAGUAZABlADEAYQB9AAoOVgBlAHIAcwBpAG8AbgALBmkAbgB0AAwKVQBzAGEAZwBlAA0KVABpAHQAbABlAA4aVgBpAHMAdQBFAGwAZQBtAE0AZQB0AGUAcgAPDkMAbwBtAHAAYQBuAHkAEAxTAHkAcwB0AGUAbQARElYAaQBzAHUARQBsAGUAbQBzABIwVgBpAHMAdQBFAGwAZQBtAHMAUwBwAGUAYwBpAGEAbABDAG8AbgB0AHIAbwBsAHMAEyhWAGkAcwB1AEUAbABlAG0AcwBXAGkAbgBDAG8AbgB0AHIAbwBsAHMAFCRWAGkAcwB1AEUAbABlAG0AVABlAHgAdABFAGQAaQB0AG8AcgAVIlYAaQBzAHUATgBhAHQAaQB2AGUAQwBvAG4AdAByAG8AbAAWFHYAaQBzAHUAaQBuAHAAdQB0AHMAFwxzAHkAcwB0AGUAbQAYGFYAaQBzAHUARQBsAGUAbQBCAGEAcwBlABkmRABlAHYAUABsAGEAYwBlAGgAbwBsAGQAZQByAHMAVQBzAGUAZAAaCGIAbwBvAGwAGyJQAGwAdQBnAGkAbgBDAG8AbgBzAHQAcgBhAGkAbgB0AHMAHEx7ADQAMwBkADUAMgBiAGMAZQAtADkANAAyAGMALQA0ADQAZAA3AC0AOQBlADkANAAtADEAYgBmAGQAZgAzADEAMABlADYAMwBjAH0AHRxBAHQATABlAGEAcwB0AFYAZQByAHMAaQBvAG4AHhRQAGwAdQBnAGkAbgBHAHUAaQBkAB8WUwB5AHMAdABlAG0ALgBHAHUAaQBkACBIYQBmAGMAZAA1ADQANAA2AC0ANAA5ADEANAAtADQAZgBlADcALQBiAGIANwA4AC0AOQBiAGYAZgBlAGIANwAwAGYAZAAxADcAIRRVAHAAZABhAHQAZQBJAG4AZgBvACJMewBiADAAMwAzADYANgBhADgALQBiADUAYwAwAC0ANABiADkAYQAtAGEAMAAwAGUALQBlAGIAOAA2ADAAMQAxADEAMAA0AGMAMwB9ACMOVQBwAGQAYQB0AGUAcwAkTHsAMQA4ADYAOABmAGYAYwA5AC0AZQA0AGYAYwAtADQANQAzADIALQBhAGMAMAA2AC0AMQBlADMAOQBiAGIANQA1ADcAYgA2ADkAfQAlTHsAYQA1AGIAZAA0ADgAYwAzAC0AMABkADEANwAtADQAMQBiADUALQBiADEANgA0AC0ANQBmAGMANgBhAGQAMgBiADkANgBiADcAfQAmFk8AYgBqAGUAYwB0AHMAVAB5AHAAZQAnVFUAcABkAGEAdABlAEwAYQBuAGcAdQBhAGcAZQBNAG8AZABlAGwARgBvAHIAQwBvAG4AdgBlAHIAdABpAGIAbABlAEwAaQBiAHIAYQByAGkAZQBzACgQTABpAGIAVABpAHQAbABlACkUTABpAGIAQwBvAG0AcABhAG4AeQAqHlUAcABkAGEAdABlAFAAcgBvAHYAaQBkAGUAcgBzACs4UwB5AHMAdABlAG0ALgBDAG8AbABsAGUAYwB0AGkAbwBuAHMALgBIAGEAcwBoAHQAYQBiAGwAZQAsEnYAaQBzAHUAZQBsAGUAbQBzAC1INgBjAGIAMQBjAGQAZQAxAC0AZAA1AGQAYwAtADQAYQAzAGIALQA5ADAANQA0AC0AMgAxAGYAYQA3ADUANgBhADMAZgBhADQALihJAG4AdABlAHIAZgBhAGMAZQBWAGUAcgBzAGkAbwBuAEkAbgBmAG8AL0x7AGMANgAxADEAZQA0ADAAMAAtADcAZgBiADkALQA0AGMAMwA1AC0AYgA5AGEAYwAtADQAZQAzADEANABiADUAOQA5ADYANAAzAH0AMBhNAGEAagBvAHIAVgBlAHIAcwBpAG8AbgAxGE0AaQBuAG8AcgBWAGUAcgBzAGkAbwBuADIMTABlAGcAYQBjAHkAMzBMAGEAbgBnAHUAYQBnAGUATQBvAGQAZQBsAFYAZQByAHMAaQBvAG4ASQBuAGYAbwA0MEwAbwBhAGQATABpAGIAcgBhAHIAaQBlAHMASQBuAHQAbwBQAHIAbwBqAGUAYwB0ADUaQwBvAG0AcABhAHQAaQBiAGkAbABpAHQAeQDQAAIaA9ADAS0E0AUGGgfQBwgaAUUHCQjQAAkaBEUKCwQDAAAABQAAAA0AAAAAAAAA0AwLrQIAAADQDQEtDtAPAS0Q0AAJGgRFCgsEAwAAAAUAAAANAAAAKAAAANAMC60BAAAA0A0BLRHQDwEtENAACRoERQoLBAMAAAAFAAAADQAAAAAAAADQDAutAgAAANANAS0S0A8BLRDQAAkaBEUKCwQDAAAABQAAAA0AAAAUAAAA0AwLrQIAAADQDQEtE9APAS0Q0AAJGgRFCgsEAwAAAAUAAAANAAAAAAAAANAMC60CAAAA0A0BLRTQDwEtENAACRoERQoLBAMAAAAFAAAADQAAAAAAAADQDAutAgAAANANAS0V0A8BLRDQAAkaBEUKCwQDAAAABQAAAA0AAAAAAAAA0AwLrQIAAADQDQEtFtAPAS0X0AAJGgRFCgsEAwAAAAUAAAANAAAAKAAAANAMC60EAAAA0A0BLRjQDwEtENAZGq0BRRscAdAAHBoCRR0LBAMAAAAFAAAADQAAAAAAAADQHh8tINAhIhoCRSMkAtAAJRoFRQoLBAMAAAADAAAAAAAAAAoAAADQJgutAAAAANADAS0n0CgBLRHQKQEtENAAJRoFRQoLBAMAAAADAAAAAAAAAAoAAADQJgutAQAAANADAS0n0CgBLRHQKQEtEJoqKwFFAAEC0AABLSzQAAEtF9AAHy0t0C4vGgPQMAutAQAAANAxC60XAAAA0DIarQDQMy8aA9AwC60CAAAA0DELrQMAAADQMhqtANA0Gq0A0DUarQA="</v>
</d>
</o>
</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>
</TypeList>
</XmlArchive>
</PlcProjectOptions>
</ProjectExtensions>
</Project>

File diff suppressed because one or more lines are too long

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<DUT Name="AparZone" Id="{b204c244-f977-48e1-a4ff-88d4ab5864fa}">
<Declaration><![CDATA[TYPE AparZone :
STRUCT
iAp : INT; // Apartment number where the room is
iZone : INT; // Zone number where the appartment is
END_STRUCT
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<DUT Name="Apartm" Id="{bc6c7360-bdaa-4287-a6b6-8864ad748e20}">
<Declaration><![CDATA[TYPE Apartm :
STRUCT
// iNo : UINT; // Room number. In case of few rooms in the Apartment.
iAp : INT; // Apartment number where the room is
iFloor : INT; // Floor number where the room is
iFloorIndex : INT; // Apartment index on the floor (inside array)
iZone : INT; // Zone number where the appartment is
iT_SP : INT; // Temperature Set Point x0.1°
iT_PV AT %I* :INT; // Temperature Process Value (Current Temperature) x0.1°
bSSR AT %Q* : BOOL; // SSR Control Output
fDC : REAL; // % Calculated Duty Cycle
fDCOffset : REAL; // % Duty Cycle Calculated offset +- value to zone duty cycle
// iCO2 : INT; // Current CO2 level
// bType : BOOL; // 0 Main: 1 Service (corridors)
bNM : BOOL; // 0 Night mode OFF; 1 Night Mode ON
bPWMSSR_ON : BOOL; // ON/OFF SSR command from the PID controller
bHMISSR_ON : BOOL; // ON/OFF SSR command from the HMI screen
fbSSR_Delay : fbPulseDelay; // SSR ON Delay function block to prevent all SSRs start at the same time
HMI_Visible : BOOL; //show/hide visualisation at HMI;0 visible,1 invisible according to HMI specs
HMI_Value : REAL; //converted iT_PV to REAl - for visualisation at HMI
END_STRUCT
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<DUT Name="Building" Id="{b57b78fd-7720-4f45-8777-10b069448b20}">
<Declaration><![CDATA[TYPE Building :
STRUCT
// Variables market with // are moved to the GVL retain data
// iSetT : INT; // Set temperature x0.1°
iOutT : INT; // Outside Temperature x0.1°
// iTmax : INT; // Max set temperature x0.1°
// iTmin : INT; // Min set temperature x0.1°
iTAver : INT; // Average building temperature x0.1°
iWindSpeed : INT; // Wind Speed
iWindDir : INT; // Wind Direction, North is 0
// iChillFactor : INT; // Chill Factor
// bNM : BOOL; // 0 Night mode OFF; 1 Night Mode ON
END_STRUCT
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<DUT Name="HMI_ApartmDisplay" Id="{9aba87be-1ba9-4ece-bbab-29581d2ddfb0}">
<Declaration><![CDATA[TYPE HMI_ApartmDisplay :
STRUCT
iAp : INT; // Apartment Number
bSSR : BOOL; // SSR Output, Output control
bHMISSR_ON : BOOL; // for mapping test purpose
fValue : REAL; // Actual temperature °C
bVisible : BOOL;
fT_SP : REAL; // Temperature Set Point °C
iZoneNo : INT; // Zone Number
iInZoneNo : INT; // Inside Zone number
END_STRUCT
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

@ -0,0 +1,55 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<DUT Name="PIDParam" Id="{a4e56d41-8809-4704-890c-739d6c980f22}">
<Declaration><![CDATA[TYPE PIDParam :
STRUCT
// LREAL
(*
// Inputs
fSetpointValue : LREAL; (* setpoint value *)
fActualValue : LREAL; (* actual value *)
bReset : BOOL; (* TRUE at this input resets the internal state variables and the controller output. *)
bManual : BOOL; (* Manual mode ON/OFF *)
fM_In : REAL; (* Output in Manual Mode *)
fOfs : REAL; (* Offset for the output *)
fCtrlCycleTime : LREAL; (* controller cycle time in seconds [s] *)
fKp : LREAL; (* proportional gain Kp (P) *)
fTn : LREAL; (* integral gain Tn (I) [s] *)
fTv : LREAL; (* derivative gain Tv (D-T1) [s] *)
fTd : LREAL; (* derivative damping time Td (D-T1) [s] *)
fLL : REAL; (* lower output limit *)
fLH : REAL; (* upper output limit *)
// Outputs
fCtrlOutput : LREAL; (* Output of the PID-element. *)
nErrorStatus : UINT; (* 0 - nERR_NOERROR No error; 1 - nERR_INVALIDPARAM Invalid parameter; 2 - nERR_INVALIDCYCLETIME Invalid cycle time. *)
DIFF : REAL; (* deviation *)
LIM : BOOL; (* TRUE if the output has reached a limit *)
*)
// REAL
// Inputs
fSetpointValue : REAL; (* setpoint value *)
fActualValue : REAL; (* actual value *)
bReset : BOOL; (* TRUE at this input resets the internal state variables and the controller output. *)
bManual : BOOL; (* Manual mode ON/OFF *)
fM_In : REAL; (* Output in Manual Mode *)
fOfs : REAL; (* Offset for the output *)
fCtrlCycleTime : REAL; (* controller cycle time in seconds [s] *)
fKp : REAL; (* proportional gain Kp (P) *)
fTn : REAL; (* integral gain Tn (I) [s] *)
fTv : REAL; (* derivative gain Tv (D-T1) [s] *)
fTd : REAL; (* derivative damping time Td (D-T1) [s] *)
fLL : REAL; (* lower output limit *)
fLH : REAL; (* upper output limit *)
// Outputs
fCtrlOutput : REAL; (* Output of the PID-element. *)
nErrorStatus : UINT; (* 0 - nERR_NOERROR No error; 1 - nERR_INVALIDPARAM Invalid parameter; 2 - nERR_INVALIDCYCLETIME Invalid cycle time. *)
DIFF : REAL; (* deviation *)
LIM : BOOL; (* TRUE if the output has reached a limit *)
END_STRUCT
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<DUT Name="System" Id="{65045e7e-dca4-4d4c-88ed-2e35fd97e755}">
<Declaration><![CDATA[TYPE System :
STRUCT
bAlways_OFF:BOOL;
bAlways_ON:BOOL;
bFirst_Scan_Bit:BOOL;
bTenthSecondFlasher:BOOL;
bQuarterSecondFlasher:BOOL;
bHalfSecondFlasher:BOOL;
bOneSecondFlasher:BOOL;
bTwentyMilliFlasher:BOOL;
bTwentMilli_OS:BOOL;
bStart_Up_Done:BOOL;
bMin_Tmr_Done: BOOL;
ActiveFaultText: STRING(80);
ActiveLLMsgText: STRING(80);
AMS_ID : T_AMSNetID;
END_STRUCT
END_TYPE]]></Declaration>
</DUT>
</TcPlcObject>

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<DUT Name="WindData" Id="{fe510c14-f1cb-4af1-8e15-054afa87b808}">
<Declaration><![CDATA[
TYPE WindData : // Vaisala Weather Transmitter
STRUCT
iAirPressureAver : INT; // Reg:18 Addr:0x0011, 3000..12000, 300..1200 hPa, Err:32767
iWindDirectionInst : INT; // Reg:19-Instant, 22-Average; 0..3599, 0..359.9° x0.1°
iWindDirectionAver : INT; // Reg:19-Instant, 22-Average; 0..3599, 0..359.9° x0.1°
iWindDirectionMin : INT; // Reg:19-Instant, 22-Average; 0..3599, 0..359.9° x0.1°
iWindDirectionMax : INT; // Reg:19-Instant, 22-Average; 0..3599, 0..359.9° x0.1°
iWindDirectionGust : INT; // Reg:19-Instant, 22-Average; 0..3599, 0..359.9° x0.1°
iWindSpeedInst : INT; // Reg:43 Addr:0x002A; 0..750 x0.1 m/s ; 0..75 m/s
iWindSpeedAver : INT; // Reg:46 Addr:0x002D; 0..750 x0.1 m/s ; 0..75 m/s
iWindSpeedMin : INT; // Reg:44 Addr:0x002B; 0..750 x0.1 m/s ; 0..75 m/s
iWindSpeedMax : INT; // Reg:45 Addr:0x002C; 0..750 x0.1 m/s ; 0..75 m/s
iWindSpeedGust : INT; // Reg:48 Addr:0x002F, m/s, 0..750, 0..75 m/s, Err:32767
iWindChillT : INT; // Reg:40-Instant; -600..700 x0.1 °C ; -60..70°C
iHeaterTemperature : INT; // Reg:42 Addr:0x0029 , -500..1500, -50..150°C, Err:32767
END_STRUCT
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<DUT Name="Zone" Id="{c064f863-9f93-4a1e-820a-ead6a279da6e}">
<Declaration><![CDATA[TYPE Zone :
STRUCT
iID : INT; // ID unique number, can be an index in the Array
iZone : INT; // Zone number.
iTAver : INT; // Calculated Zone Average Temperature x0.1°C
fDutyCycle : REAL; // Calculated Duty Cycle '
iDutyCycleManualOffset : INT:=0; //Additional dutycycle for zone 0-20%
iChillFactor : INT; // Calculated Chill Factor
iAngle : INT; // Zone angle related to North 0..360°
iAngleOffset : INT; // +- value to calculate wind effectiveness
arAp : ARRAY[1..Set.iNoApZoneMax] OF Apartm; // Array of Apartments in the Zone
PID : PIDParam;
bHMISSR_Manual : BOOL; // HMI PB, Zone Command to switch all SSR control to Manual Mode (Maping test)
fHMI_TValue : REAL; // Converted to HMI (REAL) average temperature
END_STRUCT
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<DUT Name="ZoneProp" Id="{9814464d-8114-4a0d-84ef-51c7852195f9}">
<Declaration><![CDATA[TYPE ZoneProp :
STRUCT
iApsNo : INT; // Number of Apartments in Zone
iLowHigh : INT; // Number of Apartments to substruct when calculate Average Temperature
fDCCorrection : REAL; // To correct Duty Cycle from the lower (1st) to the last floor. Higher floor requires less Duty Cycle
bHeatEnabled : BOOL; // Enable/Disable Zone Heating
fDutyCycle : REAL; // Calculated Duty Cycle, 0..1
END_STRUCT
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

@ -0,0 +1,49 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<GVL Name="GVL" Id="{7bc1699c-fcaa-4ea9-a3c6-841892db5f1d}">
<Declaration><![CDATA[{attribute 'qualified_only'}
VAR_GLOBAL PERSISTENT
// nVarPers1 : DINT; (* 1. Persistent variable *)
// bVarPers2 : BOOL; (* 2. Persistent variable *)
END_VAR
VAR_GLOBAL RETAIN
tSysRunTime : TIME; // System run time since PLC reset
iChillFactor : INT; // Chill Factor
END_VAR
VAR_GLOBAL
System : System;
fbU900 : FB_S_UPS_CX9020_U900; // FB to activate Persistant variables saving after power interruption.
arZoneData : ARRAY[1..Set.iNoZones] OF Zone; // Array of Zones in the Building
iTempOutside : INT; // Outside Temperature
iTempOutsideChill : INT; // Outside Temperature with Chill Factor
iTempAverage : INT; // Building Average Temperature
PIDControl : ARRAY[1..Set.iNoZones] OF FB_BasicPID;
tx : TIME; // System time
tCurrentTime : TIMESTRUCT;
W : WindData; // Data from the Vaisala Weather Transmitter
arAptT_PV_Filter : ARRAY[1..Set.iNoZones,1..Set.iNoApZoneMax] OF LowPassFilter; // Array of Function blocks to filter input temperature fluctuations
arAlarms : ARRAY[0..3] OF DINT; // Array of alarm bits
END_VAR
// HMI Variables
VAR_GLOBAL
bHMI_HeatTableInit : BOOL; // Initialize Heat Level tables for the each Zone.
bHMI_AptTSP_PB : BOOL;
bHMISSR_Manual : BOOL; // HMI PB, Global Command to switch all SSR control to Manual Mode (Maping test)
bHMI_DisableOut1T_TC : BOOL; // Disable outside thermocouple 1
bHMI_DisableOut2T_TC : BOOL; // Disable outside thermocouple 2
bHMI_MAU1_Reset : BOOL; // MAU1 reset PID
bHMI_MAU2_Reset : BOOL; // MAU1 reset PID
bHMI_MAU1_HeatON : BOOL; // MAU1 Heat mode Active
bHMI_MAU2_HeatON : BOOL; // MAU2 Heat mode Active
// fbSSR_Delay : ARRAY[1..]fbPulseDelay;
arHMIApt : ARRAY[1..Set.iNoOfFloors,1..Set.iNoApFloorMax] OF HMI_ApartmDisplay; // Apartments Sorted by floor to display on HMI
currentUserName:WSTRING;
END_VAR
]]></Declaration>
</GVL>
</TcPlcObject>

@ -0,0 +1,50 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<GVL Name="IO" Id="{dd41e9fd-64b6-403e-8841-b8d61f3e823e}">
<Declaration><![CDATA[// IO Declaration / Mapping
//
// Inputs
VAR_GLOBAL
inCR1021_BACCON AT %I* : BOOL;
inCR1017_EmerCON AT %I* : BOOL;
inCR1024_SftyBACREL AT %I* : BOOL;
inPLCIOLoopIX AT %I* : BOOL; // Jumper QX58.7 to IX116.7
END_VAR
// Outputs
VAR_GLOBAL
CR2512_HeatersEnable AT %Q* : BOOL;
CR2516_PLCRunning AT %Q* : BOOL;
CR2520_WindSensorReset AT %Q* : BOOL;
CR2524_RouterReset AT %Q* : BOOL;
CR2528_RemotePanelReset AT %Q* : BOOL;
CR2532_HMIReset AT %Q* : BOOL;
CR2544_MAU_S_CTRL AT %Q* : BOOL;
CR2548_MAUBoilerEnable AT %Q* : BOOL;
CR2552_MAU_N_3WAY_VALVE AT %Q* : BOOL; // MAU NORTH 3-way Valve
CR2556_RaspberryPiReset AT %Q* : BOOL;
outPLCIOLoopQX AT %Q* : BOOL; // Jumper QX58.7 to IX116.7
MAU1_TemperatureSET AT %Q* : INT; // 0..10V
MAU1_ActuatorCTRL AT %Q* : INT; // 0..10V
MAU2_TemperatureSET AT %Q* : INT; // 0..10V
END_VAR
// Analog, Thermocouples, Outside of the Building on the NorthSside
VAR_GLOBAL
TS3003_OutT1 AT %I* : INT;
TS3007_OutT2 AT %I* : INT;
TS3011_MPanelT AT %I* : INT;
MAU1_GLY_IN AT %I* : INT;
MAU1_GLY_OUT AT %I* : INT;
MAU1_BoilerT AT %I* : INT;
MAU1_AirT AT %I* : INT;
MAU2_AirT AT %I* : INT;
END_VAR]]></Declaration>
</GVL>
</TcPlcObject>

@ -0,0 +1,83 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<GVL Name="Set" Id="{89b3fe05-7a67-4500-b779-cf344427c189}">
<Declaration><![CDATA[{attribute 'qualified_only'}
VAR_GLOBAL CONSTANT PERSISTENT
//VAR_GLOBAL CONSTANT RETAIN
iNoAp : INT := 131; // Number of appartments in the Building
iNoZones : INT := 10; // Number of Zones in the Building
iNoApZoneMax : INT := 28; // Max number of apartments in one zone
iNoApFloorMax : INT := 18; // Max number of apartments in one floor
iNoOfFloors : INT := 8; // Number of floors in the building
// Max Duty Cycle by default, -40.0°C to 20°C, step 2°C
arHeatLevelDefault : ARRAY[0..30] OF INT := [0,3,4,7,10,13,16,23,28,32,34,40,43,45,48,52,66,68,75,82,90,90,90,90,90,90,90,90,90,90,100];
END_VAR
VAR_GLOBAL PERSISTENT
//VAR_GLOBAL RETAIN
iSetT : INT; // Set temperature x0.1°C 23.0°C
iSetMaxOper : INT; // Set Maximum Operation Temperarure
iSetMaxOperHyst : INT := 15; // Set Maximum Operational Temperature Hysteresys
fHMI_SetMaxOper : REAL := 15.0; // For HMI Set Maximum Operation Temperarure
fSetTMAU_N : REAL := 23.0; // Set temperature °C 23.0°C
fSetTMAU_S : REAL := 23.0; // Set temperature °C 23.0°C
// fSetTMAU_Man_N : REAL := 30.0; // Set PID output in Manual %
// fSetTMAU_Man_S : REAL := 30.0; // Set PID output in Manual %
bSetMAU_N_Manual : BOOL; // Set MAU N in Manual Mode
bSetMAU_S_Manual : BOOL; // Set MAU S in Manual Mode
iTmax : INT := 250; // Max set temperature x0.1°C 25.0°C
iTmin : INT := 180; // Min set temperature x0.1°C 18.0°C
bNM : BOOL := TRUE; // 0 Night mode OFF; 1 Night Mode ON
iOverTempSet : INT := 5; // x0.1°C Over Temperature Set Value. Trigger = PV + iOverTempSet
iChillFactorUsage : INT := 50; // Chill Factor Usage to apply. 0..100%
bHMI_AutoCalib_Enable : BOOL; // Activate Auto Calibration
//arApartInit : ARRAY [1..iNoAp] of AparZone; // Settup of Apartments number with link to Zone
arApartInit : ARRAY [1..iNoOfFloors,1..iNoApFloorMax] OF AparZone; // Settup of Apartments number with link to Zone
tPWMCycle : REAL; // in seconds //TIME := T#30S; // 600sec or 10min. 15min=900sec
// Correction % for individual Apartment adjustment per 1°C of changes, -40.0°C to 20°C, step 2°C
arHeatRoomAdj : ARRAY[0..30] OF INT := [0,0,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4];
PID_Noise_SUP : REAL := 2; // 0.2°C In PID controller, if ABS(SP-PV)<SUP then output value is 0
HeatEnabled : BOOL; // Enable/Disable Global Heating
arApInZone : ARRAY[1..iNoZones] OF ZoneProp; // Number of Apartments in the each Zone
// Max Duty Cycle per Zone, -40.0°C to 20°C, step 2°C
arHeatLevel : ARRAY[1..iNoZones] OF ARRAY[0..30] OF INT;
arApt_T_SP : ARRAY[1..iNoOfFloors,1..iNoApFloorMax] OF INT; // To Store temperature set point per each apartment.
fLowPassFilter_k : REAL := 0.9; // 0.999
// PID constatnts
// The control parameters are given in the form OF KP, TN AND TV, AND IF there are parameters KP, KI AND KD they can be converted using the following
// formula: TN = KP/KI und TV = KD/KP
// Kp = 15 Proportional gain (Range 19999, unit 0.1) 0.1 to 999.9
// Ti = 100 Integral time (Range 130000, unit 0.1s) 0.1 to 3000s
// Td = 2000 Derivative time (Range 010000, unit 0.1s) 0.1 to 1000s
// Ts = 10 Sampling time (Range 16000, Unit 0.01s) 0.01s to 60.0s
// ZONE PID CONTROL
//
fKp : REAL := 1.5; // 1.5 REAL proportional gain Kp (P)
fTn : REAL := 0.15; // TN = KP/KI = 1.5/10 = 0.15; 100.0 REAL integral gain Tn (I) [s]
fTv : REAL := 133.3; // TV = KD/KP = 200/1.5 = 133.3; 200.0 REAL derivative gain Tv (D-T1) [s]
fTd : REAL := 1200.0; // 1200.0 REAL derivative damping time Td (D-T1) [s]
// MAU PID constatnts
MAU_fKp : REAL := 0.15; // 15.0 REAL proportional gain Kp (P)
MAU_fTn : REAL := 1.0; // 100.0 REAL integral gain Tn (I) [s]
MAU_fTv : REAL := 0.2; // 200.0 REAL derivative gain Tv (D-T1) [s]
MAU_fTd : REAL := 1200.0; // 1200.0 REAL derivative damping time Td (D-T1) [s]
MAU_PID_Noise_SUP : REAL := 0.5; // 0.5°C In PID controller, if ABS(SP-PV)<SUP then output value is 0
MAU_N_0V : REAL := 10; // T set point at 0V analog output
MAU_N_10V : REAL := 35; // T set point at 10V analog output
MAU_S_0V : REAL := 10; // T set point at 0V analog output
MAU_S_10V : REAL := 35; // T set point at 10V analog output
END_VAR
// HMI Variables
VAR_GLOBAL PERSISTENT
fSetT_HMI : REAL := 21.5; //set point for HMI
bHMI_Overheat_Enabled : BOOL; // Overheat Mode is enabled (From HMI)
END_VAR]]></Declaration>
</GVL>
</TcPlcObject>

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 532 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

@ -0,0 +1,50 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<POU Name="Alarms" Id="{2d85d74f-ff76-4a26-b1c7-c80367604076}" SpecialFunc="None">
<Declaration><![CDATA[PROGRAM Alarms
VAR
fbAdsReadEvents : FB_AdsReadEvents;
bReadEvents : BOOL;
events:Events_Logger;
fbGetCurTaskIdx: GETCURTASKINDEX;
testAlarmZone:BOOL:=FALSE;
testAlarmApt:BOOL:=FALSE;
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[(*fbAdsReadEvents ( sNetId := ,
bReadEvents := bReadEvents,
nLanguageId := 0, // 0 - project dafault language; DE 1031, EN 1033
eDateAndTimeFormat := E_DateAndTimeFormat.en_US,
tRefreshTime := T#1S,
tTimeout := T#5s);
GVL.arAlarms[0].00 := IO.inCR1024_SftyBACREL AND NOT IO.inCR1017_EmerCON; // Contactor CR1017 is not ON. Check CR1024 coil power and CR2516 coil power and NO contact 9-1
IF GVL.iTempOutside > 1000 OR (IO.TS3003_OutT1>1000 AND IO.TS3007_OutT2>1000) THEN
GVL.arAlarms[0].01 := TRUE; // If for any reason outside temperature is out of the reasonable range, set it -20°C
ELSE
GVL.arAlarms[0].01 := FALSE;
END_IF*)
fbGetCurTaskIdx();
IF _TaskInfo[fbGetCurTaskIdx.index].FirstCycle THEN
events.SetAlarm(Trigger:=ADR(testAlarmZone),Object:='Zone 1 alarm',Description:='Test Alarm zone');
events.SetAlarm(Trigger:=ADR(testAlarmApt),Object:='Appartment 101 alarm',Description:='Test Alarm apt');
END_IF;
events.Run(IsFirstCycle:=_TaskInfo[fbGetCurTaskIdx.index].FirstCycle );
]]></ST>
</Implementation>
<LineIds Name="Alarms">
<LineId Id="24" Count="4" />
<LineId Id="21" Count="0" />
<LineId Id="5" Count="0" />
<LineId Id="15" Count="0" />
<LineId Id="10" Count="0" />
<LineId Id="12" Count="2" />
<LineId Id="6" Count="0" />
<LineId Id="43" Count="4" />
<LineId Id="42" Count="0" />
<LineId Id="36" Count="0" />
</LineIds>
</POU>
</TcPlcObject>

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<POU Name="AutoCalibration" Id="{91b03096-f66e-4642-bc92-f621c474de6d}" SpecialFunc="None">
<Declaration><![CDATA[PROGRAM AutoCalibration
VAR
iTError : INT; // The diffrence between PV and SP
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[iTError := GVL.iTempAverage - Set.iSetT; // The diffrence between PV and SP
]]></ST>
</Implementation>
<LineIds Name="AutoCalibration">
<LineId Id="5" Count="0" />
<LineId Id="8" Count="0" />
</LineIds>
</POU>
</TcPlcObject>

File diff suppressed because it is too large Load Diff

@ -0,0 +1,41 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<POU Name="LowPassFilter" Id="{b0ef46a4-dde4-4f26-a06a-0d4bfe4c83bc}" SpecialFunc="None">
<Declaration><![CDATA[FUNCTION_BLOCK LowPassFilter
VAR_INPUT
Enable : BOOL;
In : REAL; // Analog Input, LREAL
k : REAL; // Filter Constant. 0-1. 0: No filter, 1: Max filter, Typical 0.9
END_VAR
VAR_OUTPUT
Valid : BOOL;
Out : REAL; // Filtered Value
END_VAR
VAR
LastOut : REAL; //Temporally value
FirstPass : BOOL; // First Pass of the Function
R_TRIG_1 : R_TRIG;
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[R_TRIG_1(CLK:=Enable);
FirstPass :=R_TRIG_1.Q;
IF FirstPass Then
LastOut:=REAL#0.0;
END_IF;
If Enable Then
Out := In*(REAL#1.0-k)+k*LastOut;
LastOut := Out;
Valid := TRUE;
Else
Valid := FALSE;
End_IF;]]></ST>
</Implementation>
<LineIds Name="LowPassFilter">
<LineId Id="10" Count="12" />
<LineId Id="9" Count="0" />
</LineIds>
</POU>
</TcPlcObject>

@ -0,0 +1,33 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<POU Name="fbHeatLevel" Id="{5d088aac-8a67-4376-a05b-3fb7868bdd95}" SpecialFunc="None">
<Declaration><![CDATA[FUNCTION_BLOCK fbHeatLevel
VAR_INPUT
inTemp : INT;
inHeatLevelArray : ARRAY[0..30] OF INT ;// ARRAY [0..30] OF INT;
END_VAR
VAR_OUTPUT
outLevel : INT;
outIndex : INT;
END_VAR
VAR
aux : INT;
Index : INT;
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[// Operates with Temperature range -400 to 200, which is x0.1 OR -40.0°C to 20.0°C
aux := LimitValueINT(LowerLimit:= -400, Input:= inTemp, UpperLimit:= 200);
Index := (-1 * aux + 200)/20 ;
outLevel := inHeatLevelArray[Index];
outIndex := Index;
]]></ST>
</Implementation>
<LineIds Name="fbHeatLevel">
<LineId Id="20" Count="4" />
<LineId Id="17" Count="0" />
<LineId Id="38" Count="0" />
</LineIds>
</POU>
</TcPlcObject>

@ -0,0 +1,96 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<POU Name="fbMAU" Id="{fedc3f65-b02c-4a18-a977-8b815cdd9288}" SpecialFunc="None">
<Declaration><![CDATA[FUNCTION_BLOCK fbMAU
VAR_INPUT
PV : INT;
SP : INT;
Manual : BOOL; // Manual Mode Active
Man_Y : REAL; // Output value in Manual mode 0..100%
Reset : BOOL; // Reset Command
END_VAR
VAR_OUTPUT
PID_Y_Value : REAL;
PID_Y : INT; // 0..100%; 0..32767
END_VAR
VAR
PID_Par: PIDParam;
PID_CTRL: CTRL_PID;
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[//
// Run PID control to calculate Duty Cycle
//
// Settings
//
PID_Par.bManual := Manual;
PID_Par.fM_In := Man_Y;
PID_Par.bReset := Reset;
PID_Par.fSetpointValue := INT_TO_REAL(SP)/10; // setpoint value
PID_Par.fActualValue := INT_TO_REAL(PV)/10; // process/actual value
//GVL.arZoneData[iZoneNo].PID.bReset := FALSE; // TRUE at this input resets the internal state variables and the controller output.
PID_Par.fCtrlCycleTime := 6.0; // LREAL controller cycle time in seconds [s]
PID_Par.fKp := Set.MAU_fKp; // 15.0 LREAL proportional gain Kp (P)
PID_Par.fTn := Set.MAU_fTn; // 100.0 LREAL integral gain Tn (I) [s]
PID_Par.fTv := Set.MAU_fTv; // 200.0 LREAL derivative gain Tv (D-T1) [s]
PID_Par.fTd := Set.MAU_fTd; // 1200.0 LREAL derivative damping time Td (D-T1) [s]
// Set Output Low and High Limits
PID_Par.fLL := 0.0;
PID_Par.fLH := 100.0;
// PID Control
//
PID_CTRL(
ACT:= PID_Par.fActualValue,
SET:= PID_Par.fSetpointValue,
SUP:= Set.MAU_PID_Noise_SUP, // 0.2°C In PID controller, if ABS(SP-PV)<SUP then output value is 0
OFS:= PID_Par.fOfs,
M_I:= PID_Par.fM_In,
MAN:= PID_Par.bManual,
RST:= PID_Par.bReset,
KP:= PID_Par.fKp,
TN:= PID_Par.fTn,
TV:= PID_Par.fTv,
LL:= PID_Par.fLL,
LH:= PID_Par.fLH,
Y=> PID_Par.fCtrlOutput,
DIFF=> PID_Par.DIFF,
LIM=> );
PID_Y_Value := PID_Par.fCtrlOutput;
PID_Y := REAL_TO_INT(SCALE_R(
X:= PID_Par.fCtrlOutput,
I_LO:= 0.0,
I_HI:= 100.0,
O_LO:= 0,
O_HI:= 32767.0)) ;
]]></ST>
</Implementation>
<LineIds Name="fbMAU">
<LineId Id="13" Count="0" />
<LineId Id="34" Count="4" />
<LineId Id="66" Count="0" />
<LineId Id="65" Count="0" />
<LineId Id="70" Count="1" />
<LineId Id="39" Count="6" />
<LineId Id="33" Count="0" />
<LineId Id="58" Count="0" />
<LineId Id="60" Count="2" />
<LineId Id="14" Count="0" />
<LineId Id="9" Count="0" />
<LineId Id="15" Count="0" />
<LineId Id="18" Count="14" />
<LineId Id="16" Count="0" />
<LineId Id="68" Count="0" />
<LineId Id="79" Count="1" />
<LineId Id="73" Count="4" />
<LineId Id="69" Count="0" />
<LineId Id="72" Count="0" />
</LineIds>
</POU>
</TcPlcObject>

@ -0,0 +1,146 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<POU Name="fbPID" Id="{ba0371f9-f611-44ea-97d3-8d6e71d4762a}" SpecialFunc="None">
<Declaration><![CDATA[FUNCTION_BLOCK fbPID
VAR_INPUT
Setpoint: REAL; (* Desired setpoint *)
ProcessValue: REAL; (* Current process value *)
Enable: BOOL; (* Enable/disable PID control *)
END_VAR
VAR_OUTPUT
ControlOutput: REAL; (* Output of PID controller *)
END_VAR
VAR
// -- PID parameters
Kp: REAL := 0.0; (* Proportional gain *)
Ki: REAL := 0.0; (* Integral gain *)
Kd: REAL := 0.0; (* Derivative gain *)
// -- Internal variables
LastError: REAL := 0.0; (* Error at previous sample *)
Integral: REAL := 0.0; (* Integral of error over time *)
SampleTime: TIME := T#1S; (* Sampling time *)
// -- Auto-tuning parameters
AutoTuneStep: REAL := 0.1; (* Step size for auto-tuning *)
SettlingTime: TIME := T#5S;(* Desired settling time for auto-tuning *)
LastStepTime: TIME := T#0S;(* Time of last auto-tune step *)
AutoTuning: BOOL := FALSE; (* Auto-tuning flag *)
InitStep: BOOL := TRUE; (* Flag for initial step in auto-tuning *)
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[(* Function to perform auto-tuning *)
FUNCTION AutoTunePID : BOOL
VAR
CurrentTime: TIME;
Error: REAL;
DeltaTime: TIME;
BEGIN
CurrentTime := TcSysTime(); (* Get current system time *)
Error := ABS(ProcessValue - Setpoint);
IF Error < 0.05 * Setpoint THEN (* Acceptable error threshold *)
IF NOT InitStep THEN
DeltaTime := CurrentTime - LastStepTime; (* Calculate time difference *)
SampleTime := TIME_TO_REAL(DeltaTime) / 2; (* Calculate sample time *)
Kp := 0.6 / (ProcessValue * AutoTuneStep); (* Calculate proportional gain *)
Ki := 2 * Kp / (0.3 * TIME_TO_REAL(SettlingTime)); (* Calculate integral gain *)
Kd := Kp * 0.125 * TIME_TO_REAL(SettlingTime); (* Calculate derivative gain *)
AutoTuning := FALSE;
AutoTunePID := TRUE;
EXIT;
END_IF;
ELSE
InitStep := FALSE;
LastStepTime := CurrentTime;
IF ProcessValue > Setpoint THEN
ProcessValue := ProcessValue - AutoTuneStep * Setpoint; (* Decrease process value *)
ELSE
ProcessValue := ProcessValue + AutoTuneStep * Setpoint; (* Increase process value *)
END_IF;
END_IF;
AutoTunePID := FALSE;
END_FUNCTION;
(* Function to perform PID control *)
FUNCTION PIDControl : VOID
VAR
Error: REAL;
Proportional: REAL;
IntegralTerm: REAL;
DerivativeTerm: REAL;
BEGIN
IF Enable THEN
Error := Setpoint - ProcessValue;
IF AutoTuning THEN
IF AutoTunePID() THEN
RETURN;
END_IF;
END_IF;
Integral := Integral + (Error * SampleTime); (* Integral term calculation *)
Integral := MAX(MIN(Integral, 1000), -1000); (* Anti-windup limit *)
Proportional := Kp * Error; (* Proportional term *)
IntegralTerm := Ki * Integral; (* Integral term *)
DerivativeTerm := Kd * (Error - LastError) / SampleTime; (* Derivative term *)
ControlOutput := Proportional + IntegralTerm + DerivativeTerm;
LastError := Error; (* Update last error *)
ELSE
ControlOutput := 0.0; (* Disable control if not enabled *)
Integral := 0.0; (* Reset integral term *)
LastError := 0.0; (* Reset last error *)
END_IF;
END_FUNCTION;]]></ST>
</Implementation>
<Method Name="AutoTunePID" Id="{a72ed6ef-5938-4dfc-b7ba-21356dc9bded}">
<Declaration><![CDATA[METHOD AutoTunePID : BOOL
VAR_INPUT
CurrentTime: TIME;
Error: REAL;
DeltaTime: TIME;
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[ CurrentTime := TcSysTime(); (* Get current system time *)
Error := ABS(ProcessValue - Setpoint);
IF Error < 0.05 * Setpoint THEN (* Acceptable error threshold *)
IF NOT InitStep THEN
DeltaTime := CurrentTime - LastStepTime; (* Calculate time difference *)
SampleTime := TIME_TO_REAL(DeltaTime) / 2; (* Calculate sample time *)
Kp := 0.6 / (ProcessValue * AutoTuneStep); (* Calculate proportional gain *)
Ki := 2 * Kp / (0.3 * TIME_TO_REAL(SettlingTime)); (* Calculate integral gain *)
Kd := Kp * 0.125 * TIME_TO_REAL(SettlingTime); (* Calculate derivative gain *)
AutoTuning := FALSE;
AutoTunePID := TRUE;
EXIT;
END_IF;
ELSE
InitStep := FALSE;
LastStepTime := CurrentTime;
IF ProcessValue > Setpoint THEN
ProcessValue := ProcessValue - AutoTuneStep * Setpoint; (* Decrease process value *)
ELSE
ProcessValue := ProcessValue + AutoTuneStep * Setpoint; (* Increase process value *)
END_IF;
END_IF;
AutoTunePID := FALSE;]]></ST>
</Implementation>
</Method>
<LineIds Name="fbPID">
<LineId Id="30" Count="65" />
<LineId Id="9" Count="0" />
</LineIds>
<LineIds Name="fbPID.AutoTunePID">
<LineId Id="9" Count="23" />
<LineId Id="5" Count="0" />
</LineIds>
</POU>
</TcPlcObject>

@ -0,0 +1,80 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<POU Name="fbPulseDelay" Id="{a2eafd9b-e5e8-4663-850a-b038ce6f47d9}" SpecialFunc="None">
<Declaration><![CDATA[FUNCTION_BLOCK fbPulseDelay
VAR_INPUT
PulseIN : BOOL; // Pulse to delay
DelayTime : TIME; // Delay Time in ms
Tx : TIME; // System Time
END_VAR
VAR_OUTPUT
PulseOut : BOOL; // Delayed Pulse
END_VAR
VAR
bPulseRise : BOOL; // PulseIN rising edge
DelaySP : TIME; // Stored DelayTime value to avoide changes during execution
tStart : TIME;
tStop : TIME;
tPulseDuration : TIME; // Measured PulseIN duration
// tPulseDurationLast : TIME; // Measured PulseIN duration
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[// Reset pulse rising edge bit
IF PulseIN AND NOT bPulseRise THEN
tStart := GVL.tx; // On pulse rising edge record the System time
DelaySP := DelayTime; // Write DelayTime value to avoide changes during execution
tPulseDuration := TIME#0MS; // Reset Pulse duration counter
bPulseRise := TRUE;
END_IF
IF PulseIN AND bPulseRise THEN
tPulseDuration := GVL.tx - tStart; // Calculate the time (pulse duration)
END_IF
IF NOT PulseIN AND bPulseRise THEN // The first scan with PulseIN OFF
;
END_IF
IF NOT PulseIn THEN // When PulseIN is OFF, reset pulse rising edge to be ready for the next pulse
bPulseRise := FALSE;
END_IF
// Create the delayed pulse
// Start pulse with delay and stop with delay
//
IF GVL.tx >= (tStart + DelaySP) AND GVL.tx <= (tStart + DelaySP + tPulseDuration) THEN
PulseOut := TRUE;
ELSE
PulseOut := FALSE;
END_IF
]]></ST>
</Implementation>
<LineIds Name="fbPulseDelay">
<LineId Id="29" Count="0" />
<LineId Id="20" Count="1" />
<LineId Id="24" Count="0" />
<LineId Id="74" Count="0" />
<LineId Id="39" Count="0" />
<LineId Id="22" Count="1" />
<LineId Id="25" Count="2" />
<LineId Id="19" Count="0" />
<LineId Id="34" Count="0" />
<LineId Id="36" Count="1" />
<LineId Id="35" Count="0" />
<LineId Id="31" Count="2" />
<LineId Id="30" Count="0" />
<LineId Id="54" Count="0" />
<LineId Id="41" Count="0" />
<LineId Id="55" Count="1" />
<LineId Id="40" Count="0" />
<LineId Id="42" Count="0" />
<LineId Id="51" Count="1" />
<LineId Id="43" Count="0" />
<LineId Id="48" Count="0" />
<LineId Id="50" Count="0" />
</LineIds>
</POU>
</TcPlcObject>

@ -0,0 +1,37 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<POU Name="fbSamples" Id="{7084c0f8-26c4-42fc-8481-4b12fee9b2fb}" SpecialFunc="None">
<Declaration><![CDATA[FUNCTION_BLOCK fbSamples
VAR_INPUT
END_VAR
VAR_OUTPUT
END_VAR
VAR
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[// To measure process time
(* PLC libraries to include: Tc2_EtherCAT
https://infosys.beckhoff.com/english.php?content=../content/1033/tc3_plc_intro/2530307467.html&id=
VAR
MeasureStart : T_DCTIME64;
MeasureResult : T_DCTIME64;
END_VAR
PROGRAM:
MeasureStart:=F_GetActualDcTime64(); (*Insert your program code to measure the processing time*)
MeasureResult:=F_GetActualDcTime64()-MeasureStart;
*)]]></ST>
</Implementation>
<LineIds Name="fbSamples">
<LineId Id="22" Count="1" />
<LineId Id="9" Count="0" />
<LineId Id="24" Count="1" />
<LineId Id="15" Count="6" />
<LineId Id="11" Count="0" />
<LineId Id="10" Count="0" />
</LineIds>
</POU>
</TcPlcObject>

@ -0,0 +1,444 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<POU Name="fbZone" Id="{9d5420d4-253c-4a37-b217-4ab780f6de05}" SpecialFunc="None">
<Declaration><![CDATA[FUNCTION_BLOCK fbZone
VAR_INPUT
iZoneNo : INT;
END_VAR
VAR_OUTPUT
iTAverage : INT; // Average Zone Temperature
END_VAR
VAR
i,k : INT;
bFSpid : BOOL; // First scan PID block
arT : ARRAY[1..Set.iNoApZoneMax] OF DINT; // Array of Temperatures in Zone
temp,tmp, t : DINT;
Size : INT;
LH : INT;
// PIDControl : FB_BasicPID;
fDutyCycle : LREAL;
fbApartOffset : fbHeatLevel;
fApartOffsetCalculated : LREAL;
iApOffsetBasis : INT; // Appartment correction offeset from the Set.arHeatRoomAdj array
MeasureStart : T_DCTIME64;
fbCTRL_PID: CTRL_PID;
PID_Y : REAL;
bPWM_Q : BOOL; // PWM output
tPIDCycle: TON;
fbCTRL_OUT: CTRL_OUT;
fbZoneHeatLevel: fbHeatLevel;
// fZonePID_LIM_H : REAL;
iHeatLevel : INT; // INT Current heat level according outside temperature
fHeatLevel : REAL; // REAL Current heat level according outside temperature
fbCTRL_PWM: CTRL_PWM;
fAptT_PV_Filtered : REAL;
LowPassFilter: LowPassFilter;
iTDiff : INT; // Temperature SP PV differencial
iHeatLevelIndex: INT; // Current Heat Level Index
iHeatLevelIndexMem: INT; // Heat level Index Old/Memory
bHeatLevelIndexChanged : BOOL; // Heat Level Index changed pulse
bInc_CMD: BOOL;
bDec_CMD: BOOL;
tIncTMR : TON;
tDecTMR : TON;
tHeatLevelActive : TON;
bHeatLevelStable : BOOL;
bHeatLevelInc_RQST: BOOL;
bHeatLevelDec_RQST: BOOL;
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[// ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ START OF PREPARATIONS ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
Size := Set.arApInZone[iZoneNo].iApsNo;
LH := Set.arApInZone[iZoneNo].iLowHigh;
// Create an Array if T°C per ZONE to calculate Average T°C x0.1°C
//
FOR i:=1 TO Size DO // Get number of apartments in Zone from the initial array Set.arApInZone
arT[i] := INT_TO_DINT(GVL.arZoneData[iZoneNo].arAp[i].iT_PV); // Create an Array of T°C per ZONE to calculate Average T°C x0.1°C
END_FOR
// Sort Array from Low to High
//
FOR i:=1 TO Size-1 DO
FOR k:=i+1 TO Size DO
IF arT[i] > arT[k] THEN
temp:=arT[i];
arT[i]:=arT[k];
arT[k]:=temp;
END_IF
END_FOR
END_FOR
// Remove the Highest and Lowest numbers and calculate the Average Temperature
//
tmp := 0;
k := 0;
FOR i:=(1+LH) TO (Size-LH) DO
tmp:= (arT[i]) + tmp;
k := k+1;
END_FOR
// Calculate the end result, Average Temperature
//
GVL.arZoneData[iZoneNo].iTAver := DINT_TO_INT(tmp/k);
GVL.arZoneData[iZoneNo].fHMI_TValue := INT_TO_REAL(GVL.arZoneData[iZoneNo].iTAver)/10;
// ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ END OF PREPARATIONS ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ ±
// Find the Limit from the Zone Heat Level Table
fbZoneHeatLevel(inTemp:= GVL.iTempOutsideChill,
inHeatLevelArray:= Set.arHeatLevel[iZoneNo],
outLevel=> iHeatLevel,
outIndex=> iHeatLevelIndex); // Current position of the Heat Level in the Array Set.arHeatLevel
fHeatLevel := INT_TO_REAL(iHeatLevel); // Convert INT to REAL
bHeatLevelIndexChanged := FALSE;
IF iHeatLevelIndex <> iHeatLevelIndexMem THEN
bHeatLevelIndexChanged := TRUE; // Set Flag for one scan to use in tHeatLevelActive Timer
iHeatLevelIndexMem := iHeatLevelIndex;
END_IF
// Run PID control to calculate Duty Cycle
// PID works as a helper to adjust the main heat table
// Settings
//
GVL.arZoneData[iZoneNo].PID.fSetpointValue := INT_TO_REAL(Set.iSetT); // setpoint value
GVL.arZoneData[iZoneNo].PID.fActualValue := INT_TO_REAL(GVL.arZoneData[iZoneNo].iTAver); // actual value
//GVL.arZoneData[iZoneNo].PID.bReset := FALSE; // TRUE at this input resets the internal state variables and the controller output.
GVL.arZoneData[iZoneNo].PID.fCtrlCycleTime := 6.0; // LREAL controller cycle time in seconds [s]
GVL.arZoneData[iZoneNo].PID.fKp := Set.fKp; // 1.5 REAL proportional gain Kp (P)
GVL.arZoneData[iZoneNo].PID.fTn := Set.fTn; // TN = KP/KI = 1.5/10 = 0.15 [s]
GVL.arZoneData[iZoneNo].PID.fTv := Set.fTv; // TV = KD/KP = 200/1.5 = 133.3 [s]
GVL.arZoneData[iZoneNo].PID.fTd := Set.fTd; // 1200.0 LREAL derivative damping time Td (D-T1) [s]
GVL.arZoneData[iZoneNo].PID.fM_In := fHeatLevel; // input value for manual operation
IF Set.HeatEnabled AND Set.arApInZone[iZoneNo].bHeatEnabled THEN
IF bFSpid THEN
GVL.arZoneData[iZoneNo].PID.bReset := FALSE;
ELSE
GVL.arZoneData[iZoneNo].PID.bReset := TRUE; // Reset PID on the First Section Scan
END_IF
bFSpid := TRUE; // Activate first PID scan bit
// If Heat enabled, Execute PID
// OSCAT CTRL_PID function block
// Set Output Low and High Limits
GVL.arZoneData[iZoneNo].PID.fLL := 0.0;
GVL.arZoneData[iZoneNo].PID.fLH := 100.0;
// Execute PID block
// Need to run it once in 6sec
tPIDCycle(IN:= NOT tPIDCycle.Q, PT:= T#6S, Q=> , ET=> ); // Generate a pulse every 6sec
(*
CTRL_PID is a PID controller with dynamic anti-wind up and manual control input. The PID controller operates according to the formula:
Y = KP * (DIFF + 1/Tn * INTEG(DIFF) + TV *DERIV(DIFF)) + OFFSET where DIFF = SET_POINT - ACTUAL
In manual mode (manual = TRUE) is: Y = MANUAL_IN+ OFFSET
ACT is the measured value for the controlled system and SET is the setpoint for the controller. The input values of LH and LL limit the output value Y.
With RST, the internal integrator will always set to 0. The output LIM signals that the controller has reached the limit of LL or LH.
The PID controller operates free-running and uses the trapezoidal rule to calculate with highest accuracy and optimal speed.
The default values of the input parameters are predefned as follows:
KP = 1, TN = 1, TV = 1, LIMIT_L = -1000 and LIMIT_H = +1000. With the input SUP a noise reduction is set, the value on input SUP determines
at which control diference, the controller turns on. With SUP is avoided that the output of the controller wobbles.
The value at the input SUP should be in dimension that it suppresses the noise of the controlled system and the sensors. If the input to SUP is
set to 0.1, the controller is only at deviations greater than 0.1 active.
The ouput DIFF passes the measured and through a noise flter (DEAD_BAND) filtered control deviation.
DIFF is normally not required in a controlled system but can be used to infuence the control parameters.
The input OFS is added as the last value to output, and is used to compensate mainly of noise, whose efect can be estimated on the loop.
The controller works with a dynamic air- Up that prevents that the integrator, when reaching a output limit and further deviation, continues to run
unlimited and afects the properties usually negative. In the introduction chapter of the control technology, more details can be found on anti-windup.
The control parameters are given in the form of KP, TN and TV, and if there are parameters KP, KI and KD they can be converted using the following
formula: TN = KP/KI und TV = KD/KP
*)
IF tPIDCycle.Q THEN
fbCTRL_PID(
ACT:= GVL.arZoneData[iZoneNo].PID.fActualValue, // value measured by the way PV - Process Value
SET:= GVL.arZoneData[iZoneNo].PID.fSetpointValue, // set value, SP - Set Point
SUP:= Set.PID_Noise_SUP, // noise reduction 0.2°C In PID controller, if ABS(SP-PV)<SUP then output value is 0
OFS:= GVL.arZoneData[iZoneNo].PID.fOfs, // ofset for the output
M_I:= GVL.arZoneData[iZoneNo].PID.fM_In, // input value for manual operation
MAN:= GVL.arZoneData[iZoneNo].PID.bManual, // switch to manual mode, MANUAL = TRUE
RST:= GVL.arZoneData[iZoneNo].PID.bReset, // asynchronous reset input
KP:= GVL.arZoneData[iZoneNo].PID.fKp, // controller gain
TN:= GVL.arZoneData[iZoneNo].PID.fTn, // reset of the controller
TV:= GVL.arZoneData[iZoneNo].PID.fTv, // derivative of the controller
LL:= GVL.arZoneData[iZoneNo].PID.fLL, // lower output limit
LH:= GVL.arZoneData[iZoneNo].PID.fLH, // upper output limit
Y=> PID_Y , // REAL, output of the controller
DIFF=> GVL.arZoneData[iZoneNo].PID.DIFF, // (* deviation *)
LIM=> ); // GVL.arZoneData[iZoneNo].PID.LIM Out of limit if active
// PID is a Helper. We increase HeatLevel value on 20% (/100/5=500) of what PID ask
//
GVL.arZoneData[iZoneNo].fDutyCycle := fHeatLevel * (1 + PID_Y/500.0) ;
(* // Limit the value according to Zone Heat Table
fbCTRL_OUT(
CI:= GVL.arZoneData[iZoneNo].fDutyCycle,
OFFSET:= 0.0,
MAN_IN:= 0.0,
LIM_L:= 0.0,
LIM_H:= 100.0,
MANUAL:= FALSE,
Y=> GVL.arZoneData[iZoneNo].PID.fCtrlOutput,
LIM=> GVL.arZoneData[iZoneNo].PID.LIM);
*)
END_IF
ELSE
bFSpid := FALSE; // Reset first PID scan bit
END_IF
// ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ AUTO TUNING START ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
// Auto tuning to collect data over the season and correct Heat Level Table/Array
//
IF Set.bHMI_AutoCalib_Enable AND Set.HeatEnabled THEN
iTDiff := Set.iSetT - GVL.arZoneData[iZoneNo].iTAver; // Calculate SP PV difference
IF GVL.iTempOutside > 200 OR GVL.iTempOutside < -400 THEN
iHeatLevelIndex := -1;
END_IF
tHeatLevelActive(IN:= NOT bHeatLevelIndexChanged AND NOT bInc_CMD AND NOT bDec_CMD, PT:= T#7200S, Q=> bHeatLevelStable , ET=>); // Check if Heat Level didn't change
bInc_CMD := bHeatLevelStable AND iTDiff > 5; // bHeatLevelInc_RQST;
bDec_CMD := bHeatLevelStable AND iTDiff < 5; // bHeatLevelDec_RQST;
IF bInc_CMD AND iHeatLevelIndex >= 0 AND (Set.arHeatLevel[iZoneNo][iHeatLevelIndex] - Set.arHeatLevelDefault[iHeatLevelIndex]) <5 AND Set.arHeatLevel[iZoneNo][iHeatLevelIndex] <100 THEN
Set.arHeatLevel[iZoneNo][iHeatLevelIndex] := Set.arHeatLevel[iZoneNo][iHeatLevelIndex] + 1;
END_IF
IF bDec_CMD AND iHeatLevelIndex >= 0 AND (Set.arHeatLevelDefault[iHeatLevelIndex] - Set.arHeatLevel[iZoneNo][iHeatLevelIndex]) <5 AND Set.arHeatLevel[iZoneNo][iHeatLevelIndex] >0 THEN
Set.arHeatLevel[iZoneNo][iHeatLevelIndex] := Set.arHeatLevel[iZoneNo][iHeatLevelIndex] - 1;
END_IF
// Set an Error flag if Increase/Decrease limit exeeded , more that 5%/units
IF (Set.arHeatLevel[iZoneNo][iHeatLevelIndex] - Set.arHeatLevelDefault[iHeatLevelIndex]) >= 5 THEN
;
END_IF
IF (Set.arHeatLevelDefault[iHeatLevelIndex] - Set.arHeatLevel[iZoneNo][iHeatLevelIndex]) >= 5 THEN
;
END_IF
END_IF
// ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ AUTO TUNING END ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
// Send PID value to the Apartment output
// Convert Duty Cycle to PWM modulation with time cycle Set.tPWMCycle
//
IF Set.HeatEnabled AND Set.arApInZone[iZoneNo].bHeatEnabled AND GVL.iTempOutsideChill <= (Set.iSetMaxOper+10) THEN
FOR i:= 1 TO Set.arApInZone[iZoneNo].iApsNo DO
// i := 1; // Temporaly to test math
// Find an Apartment DutyCycle offset if required (Default temperature is overwritten
IF GVL.arZoneData[iZoneNo].arAp[i].iT_SP <> Set.iSetT THEN
fbApartOffset(
inTemp:= GVL.iTempOutside,
inHeatLevelArray:= SET.arHeatRoomAdj,
outLevel=> iApOffsetBasis);
GVL.arZoneData[iZoneNo].arAp[i].fDCOffset := GVL.arZoneData[iZoneNo].PID.fCtrlOutput * INT_TO_REAL(iApOffsetBasis)/100 * INT_TO_REAL(GVL.arZoneData[iZoneNo].arAp[i].iT_SP - Set.iSetT)/10.0;
ELSE
GVL.arZoneData[iZoneNo].arAp[i].fDCOffset := 0.0;
END_IF
// Convert Duty Cycle to PWM modulation with time cycle Set.tPWMCycle
Set.arApInZone[iZoneNo].fDutyCycle := (GVL.arZoneData[iZoneNo].PID.fCtrlOutput + GVL.arZoneData[iZoneNo].arAp[i].fDCOffset)/100; // = 0.0 .. 1.0
fbCTRL_PWM(
CI:= Set.arApInZone[iZoneNo].fDutyCycle, // CI = 0.0 .. 1.0
MAN_IN:= fHeatLevel/100.0,
MANUAL:= FALSE,
F:= 1 / Set.tPWMCycle, // Duty Cycle Period
Q=> bPWM_Q);
// Before to write SSR output, Check if Overheat is enabled/active
//
IF Set.bHMI_Overheat_Enabled THEN
IF GVL.arZoneData[iZoneNo].arAp[i].iT_PV > (GVL.arZoneData[iZoneNo].arAp[i].iT_SP + Set.iOverTempSet) THEN // If Temp SP + 0.5°C => cut-off SSR
GVL.arZoneData[iZoneNo].arAp[i].bPWMSSR_ON := FALSE;
ELSE
GVL.arZoneData[iZoneNo].arAp[i].bPWMSSR_ON := bPWM_Q;
END_IF
ELSE
GVL.arZoneData[iZoneNo].arAp[i].bPWMSSR_ON := bPWM_Q;
END_IF
END_FOR
ELSE
FOR i:= 1 TO Set.arApInZone[iZoneNo].iApsNo DO
GVL.arZoneData[iZoneNo].arAp[i].bPWMSSR_ON := FALSE; // Ih Heat is not enabled, turn OFF SSRs
END_FOR
END_IF
// Convert and Transfer Apartment Temperature to HMI, INT to REAL
//
i := iZoneNo;
FOR k := 1 TO Set.arApInZone[i].iApsNo DO
// GVL.arZoneData[i].arAp[k].HMI_Value := INT_TO_REAL(GVL.arZoneData[i].arAp[k].iT_PV)/10; // Convert INT to REAL to show T°C on HMI
// Section below is to apply a low-pass filter to the values to prevent fast temperature change on the HMI screen
GVL.arAptT_PV_Filter[i,k](
Enable:= TRUE,
In:= INT_TO_REAL(GVL.arZoneData[i].arAp[k].iT_PV)/10,
k:= Set.fLowPassFilter_k,
Valid=> ,
Out=> fAptT_PV_Filtered);
GVL.arZoneData[i].arAp[k].HMI_Value := fAptT_PV_Filtered;
END_FOR
]]></ST>
</Implementation>
<LineIds Name="fbZone">
<LineId Id="676" Count="1" />
<LineId Id="44" Count="0" />
<LineId Id="80" Count="0" />
<LineId Id="32" Count="0" />
<LineId Id="22" Count="0" />
<LineId Id="95" Count="0" />
<LineId Id="9" Count="0" />
<LineId Id="587" Count="0" />
<LineId Id="26" Count="0" />
<LineId Id="29" Count="0" />
<LineId Id="28" Count="0" />
<LineId Id="94" Count="0" />
<LineId Id="33" Count="7" />
<LineId Id="30" Count="0" />
<LineId Id="63" Count="0" />
<LineId Id="46" Count="0" />
<LineId Id="96" Count="0" />
<LineId Id="82" Count="0" />
<LineId Id="85" Count="0" />
<LineId Id="45" Count="0" />
<LineId Id="83" Count="0" />
<LineId Id="88" Count="0" />
<LineId Id="84" Count="0" />
<LineId Id="97" Count="0" />
<LineId Id="89" Count="0" />
<LineId Id="98" Count="0" />
<LineId Id="87" Count="0" />
<LineId Id="519" Count="0" />
<LineId Id="674" Count="0" />
<LineId Id="116" Count="0" />
<LineId Id="792" Count="3" />
<LineId Id="675" Count="0" />
<LineId Id="931" Count="0" />
<LineId Id="796" Count="0" />
<LineId Id="932" Count="4" />
<LineId Id="800" Count="0" />
<LineId Id="937" Count="0" />
<LineId Id="86" Count="0" />
<LineId Id="117" Count="0" />
<LineId Id="166" Count="0" />
<LineId Id="168" Count="8" />
<LineId Id="798" Count="0" />
<LineId Id="178" Count="0" />
<LineId Id="135" Count="0" />
<LineId Id="137" Count="0" />
<LineId Id="458" Count="3" />
<LineId Id="457" Count="0" />
<LineId Id="456" Count="0" />
<LineId Id="787" Count="0" />
<LineId Id="136" Count="0" />
<LineId Id="261" Count="0" />
<LineId Id="286" Count="0" />
<LineId Id="285" Count="0" />
<LineId Id="282" Count="0" />
<LineId Id="284" Count="0" />
<LineId Id="287" Count="0" />
<LineId Id="281" Count="0" />
<LineId Id="315" Count="1" />
<LineId Id="801" Count="0" />
<LineId Id="320" Count="0" />
<LineId Id="680" Count="0" />
<LineId Id="682" Count="0" />
<LineId Id="684" Count="1" />
<LineId Id="703" Count="2" />
<LineId Id="702" Count="0" />
<LineId Id="706" Count="1" />
<LineId Id="692" Count="0" />
<LineId Id="708" Count="2" />
<LineId Id="697" Count="1" />
<LineId Id="700" Count="1" />
<LineId Id="678" Count="0" />
<LineId Id="802" Count="0" />
<LineId Id="317" Count="0" />
<LineId Id="319" Count="0" />
<LineId Id="267" Count="13" />
<LineId Id="264" Count="0" />
<LineId Id="803" Count="0" />
<LineId Id="749" Count="0" />
<LineId Id="804" Count="0" />
<LineId Id="750" Count="0" />
<LineId Id="366" Count="0" />
<LineId Id="359" Count="0" />
<LineId Id="351" Count="7" />
<LineId Id="349" Count="0" />
<LineId Id="808" Count="0" />
<LineId Id="321" Count="0" />
<LineId Id="805" Count="0" />
<LineId Id="322" Count="0" />
<LineId Id="455" Count="0" />
<LineId Id="129" Count="0" />
<LineId Id="197" Count="0" />
<LineId Id="847" Count="2" />
<LineId Id="201" Count="0" />
<LineId Id="851" Count="29" />
<LineId Id="850" Count="0" />
<LineId Id="179" Count="0" />
<LineId Id="141" Count="0" />
<LineId Id="180" Count="0" />
<LineId Id="226" Count="1" />
<LineId Id="181" Count="0" />
<LineId Id="214" Count="0" />
<LineId Id="213" Count="0" />
<LineId Id="215" Count="1" />
<LineId Id="191" Count="2" />
<LineId Id="220" Count="1" />
<LineId Id="223" Count="1" />
<LineId Id="189" Count="0" />
<LineId Id="218" Count="0" />
<LineId Id="196" Count="0" />
<LineId Id="553" Count="0" />
<LineId Id="369" Count="4" />
<LineId Id="229" Count="0" />
<LineId Id="481" Count="0" />
<LineId Id="475" Count="3" />
<LineId Id="482" Count="0" />
<LineId Id="484" Count="1" />
<LineId Id="483" Count="0" />
<LineId Id="479" Count="1" />
<LineId Id="473" Count="1" />
<LineId Id="183" Count="0" />
<LineId Id="254" Count="3" />
<LineId Id="211" Count="0" />
<LineId Id="464" Count="0" />
<LineId Id="253" Count="0" />
<LineId Id="406" Count="0" />
<LineId Id="420" Count="0" />
<LineId Id="807" Count="0" />
<LineId Id="410" Count="0" />
<LineId Id="412" Count="0" />
<LineId Id="638" Count="0" />
<LineId Id="809" Count="0" />
<LineId Id="595" Count="3" />
<LineId Id="591" Count="0" />
<LineId Id="590" Count="0" />
<LineId Id="637" Count="0" />
<LineId Id="413" Count="0" />
<LineId Id="407" Count="0" />
<LineId Id="184" Count="0" />
</LineIds>
</POU>
</TcPlcObject>

@ -0,0 +1,62 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<POU Name="CLK_PRG" Id="{5c80c50e-5dd2-42bd-9374-17f4b5709650}" SpecialFunc="None">
<Declaration><![CDATA[FUNCTION_BLOCK CLK_PRG
VAR_INPUT
PT : TIME := t#10ms;
END_VAR
VAR_OUTPUT
Q : BOOL;
END_VAR
VAR
init : BOOL;
last : TIME;
tx: TIME;
END_VAR]]></Declaration>
<Implementation>
<ST><![CDATA[(*
version 1.3 25. oct. 2008
programmer hugo
tested by tobias
clk_prg uses the internal sps time to generate a clock with programmable period time.
the first cycle after start is a clk pulse and then depending on the programmed period time a delay.
every pulse is only valid for one cycle.
the accuracy of clk_prg is depending on the accuracy of the system clock.
*)
(* @END_DECLARATION := '0' *)
(* read system time *)
tx := DWORD_TO_TIME(T_PLC_MS());
(* initialize on startup *)
IF NOT init THEN
init := TRUE;
last := tx - pt;
END_IF;
(* generate output pulse when next_pulse is reached *)
Q := tx - last >= pt;
IF Q THEN last := tx; END_IF;
(* revision hiostory
hm 25 feb 2007 rev 1.1
rewritten code for higher performance
pt can now be changed during runtime
hm 17. sep 2007 rev 1.2
replaced time() with t_plc_ms() for compatibility reasons
hm 25. oct. 2008 rev 1.3
optimized code
*)]]></ST>
</Implementation>
<LineIds Name="CLK_PRG">
<LineId Id="20" Count="37" />
<LineId Id="9" Count="0" />
</LineIds>
</POU>
</TcPlcObject>

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<POU Name="CTRL_IN" Id="{10a476d6-ef6b-428a-90c2-053a8f0c8c42}" SpecialFunc="None">
<Declaration><![CDATA[FUNCTION CTRL_IN : REAL
VAR_INPUT
SET_POINT, ACTUAL, NOISE : REAL;
END_VAR
VAR
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[(*
version 1.0 2. jun 2008
programmer hugo
tested by tobias
*)
(* @END_DECLARATION := '0' *)
(* calculate the process error DIFF *)
CTRL_IN := DEAD_ZONE(SET_POINT - ACTUAL, NOISE);
(* revision history
hm 2. jun. 2008 rev 1.0
original version
*)]]></ST>
</Implementation>
<LineIds Name="CTRL_IN">
<LineId Id="9" Count="3" />
<LineId Id="15" Count="4" />
<LineId Id="21" Count="3" />
<LineId Id="7" Count="0" />
</LineIds>
</POU>
</TcPlcObject>

@ -0,0 +1,69 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<POU Name="CTRL_OUT" Id="{2773ee0d-f6d9-45d7-af22-dca036cffc32}" SpecialFunc="None">
<Declaration><![CDATA[FUNCTION_BLOCK CTRL_OUT
VAR_INPUT
CI : REAL; (* input from controller *)
OFFSET : REAL; (* output ofset *)
MAN_IN : REAL; (*Manual input *)
LIM_L : REAL; (* lower output limit *)
LIM_H : REAL; (* upper output limit *)
MANUAL : BOOL; (* switch for manual operation *)
END_VAR
VAR_OUTPUT
Y : REAL; (* Control signal *)
LIM : BOOL; (* TRUE if control signal reaches a limit *)
END_VAR
VAR
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[(*
version 1.1 5. nov 2008
programmer hugo
tested by oscat
*)
(* @END_DECLARATION := '0' *)
(*
CTRL_OUT adds to the CI input the value of OFFSET and returns the result
to Y if MANUAL = FALSE. If MANUAL is TRUE at output Y the input value of
MAN_IN + OFFSET is issued. Y is always limited to the boundaries defned
by LIM_L and LIM_H. If Y reaches one of the limits, then the output LIM is
TRUE. CTRL_OUT can be used to build own rule modules.
*)
Y := SEL(MANUAL, CI, MAN_IN) + OFFSET;
(* Limit the output *)
IF Y > LIM_L AND Y < LIM_H THEN
LIM := FALSE;
ELSE
Y := LIMIT(LIM_L, Y, LIM_H);
LIM := TRUE;
END_IF;
(* revision history
hm 2. jun. 2008 rev 1.0
original version
hm 5. nov. 2008 rev 1.1
optimized code
*)]]></ST>
</Implementation>
<LineIds Name="CTRL_OUT">
<LineId Id="14" Count="3" />
<LineId Id="20" Count="2" />
<LineId Id="53" Count="0" />
<LineId Id="52" Count="0" />
<LineId Id="56" Count="1" />
<LineId Id="55" Count="0" />
<LineId Id="59" Count="0" />
<LineId Id="58" Count="0" />
<LineId Id="54" Count="0" />
<LineId Id="23" Count="9" />
<LineId Id="35" Count="5" />
<LineId Id="9" Count="0" />
</LineIds>
</POU>
</TcPlcObject>

@ -0,0 +1,80 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<POU Name="CTRL_PID" Id="{72b5746a-41f6-4016-b19d-146ea4e1e3e0}" SpecialFunc="None">
<Declaration><![CDATA[FUNCTION_BLOCK CTRL_PID
VAR_INPUT
ACT : REAL; (* PV value measured by the way *)
SET : REAL; (* SP default Set Point *)
SUP : REAL; (* noise reduction *)
OFS : REAL; (* ofset for the output *)
M_I : REAL; (* MANUAL_IN (PID_OUT) input value for manual operation *)
MAN : BOOL; (* switch to manual mode, MANUAL = TRUE *)
RST : BOOL; (* asynchronous reset input *)
KP : REAL := 1.0; (* controller gain *)
TN : REAL := 1.0; (* reset of the controller *)
TV : REAL := 1.0; (* derivative of the controller *)
LL : REAL := -1000.0; (* lower output limit *)
LH : REAL := 1000.0; (* upper output limit *)
END_VAR
VAR_OUTPUT
Y : REAL; (* output OF the controller. In manual mode (manual = TRUE) is: Y = MANUAL_IN + OFFSET *)
DIFF : REAL; (* deviation *)
LIM : BOOL; (* TRUE if the output has reached a limit *)
END_VAR
VAR
pid : FT_PIDWL;
co : CTRL_OUT;
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[(*
version 2.0 30. jun. 2008
programmer hugo
tested by oscat
FT_PI is a PI controller with manual functionality.
The PID controller works according to the fomula Y = e *(KP+ KI * INTEG(e) ) + offset, while e = set_point - actual.
a rst will reset all internal data, while a switch to manual will cause the controller to follow the function Y = manual_in + offset.
limit_h and Limit_l set the possible output range of Y.
the output flags lim will signal that the output limits are active.
*)
DIFF := CTRL_IN(SET, ACT, SUP);
pid(in := DIFF, kp := KP, tn := TN, tv := TV, lim_l := LL, lim_h := LH, rst := RST);
co(ci := pid.Y, OFFSET := OFS, man_in := M_I, lim_l := LL, lim_h := LH, MANUAL := MAN);
Y := co.Y;
LIM := co.LIM;
(* revision history
hm 1.12.2006 rev 1.1
changed algorithm to trapezregel for higher accuracy.
hm 3.1.2007 rev 1.2
added integ_band to select when the integrator is active.
hm 3.3.2007 rev 1.3
added default values to inputs KP, TN, TV, LIMIT_L und LIMIT_H.
hm 31.oct 2007 rev 1.4
total rewrite of the module to avoid failures when one of the limits is 0
hm 3.11.2007 rev 1.5
added noise input to filter noise
added output diff
set limit output false when output is within limits
overfolw was not set correctly
hm 5. jan 2008 rev 1.6
improved code for better performance
*)]]></ST>
</Implementation>
<LineIds Name="CTRL_PID">
<LineId Id="25" Count="9" />
<LineId Id="36" Count="1" />
<LineId Id="39" Count="4" />
<LineId Id="46" Count="22" />
<LineId Id="9" Count="0" />
</LineIds>
</POU>
</TcPlcObject>

@ -0,0 +1,43 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<POU Name="CTRL_PWM" Id="{644dae17-72d0-419b-9b8b-edba9206d973}" SpecialFunc="None">
<Declaration><![CDATA[FUNCTION_BLOCK CTRL_PWM
VAR_INPUT
CI, MAN_IN : REAL;
MANUAL : BOOL;
F : REAL;
END_VAR
VAR_OUTPUT
Q : BOOL;
END_VAR
VAR
PW : PWM_DC;
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[(*
version 1.1 21. oct. 2008
programmer hugo
tested by oscat
*)
(* @END_DECLARATION := '0' *)
PW(F := F, DC := SEL(MANUAL,CI,MAN_IN));
Q := PW.Q;
(* revision history
hm 3. jun. 2008 rev 1.0
original version
hm 21. oct. 2008 rev 1.1
optimized code
*)]]></ST>
</Implementation>
<LineIds Name="CTRL_PWM">
<LineId Id="17" Count="3" />
<LineId Id="23" Count="12" />
<LineId Id="9" Count="0" />
</LineIds>
</POU>
</TcPlcObject>

@ -0,0 +1,50 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<POU Name="DEAD_BAND" Id="{f1b68de8-cffb-40ea-8a26-928203a05789}" SpecialFunc="None">
<Declaration><![CDATA[FUNCTION DEAD_BAND : REAL
VAR_INPUT
X : REAL;
L : REAL;
END_VAR
VAR
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[(*
version 1.2 18. jan. 2011
programmer hugo
tested by oscat
DEAD_BAND ist eine lineare Übertragungsfunktion mit Totzone. Die Funktion verschiebt den positiven Teil der Kurve um +L und den negativen Teil der Kurve um -L.
DEAD_BAND = X - L wenn X > L)
DEAD_BAND = X + L wenn X < -L
DEAD_BAND = 0 wenn Abs(X) <= L
*)
(* @END_DECLARATION := '0' *)
IF X > L THEN
DEAD_BAND := X - L;
ELSIF X < -L THEN
DEAD_BAND := X + L;
ELSE
DEAD_BAND := 0.0;
END_IF;
(* revision history
hm 2. nov. 2007 rev 1.0
original version
hm 14. jun. 2008 rev 1.1
improved performance
hm 18. jan. 2011 rev 1.2
assign 0 before return
*)]]></ST>
</Implementation>
<LineIds Name="DEAD_BAND">
<LineId Id="47" Count="29" />
<LineId Id="7" Count="0" />
</LineIds>
</POU>
</TcPlcObject>

@ -0,0 +1,45 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<POU Name="DEAD_ZONE" Id="{ac384c32-d9db-416f-989e-95f86da03382}" SpecialFunc="None">
<Declaration><![CDATA[FUNCTION DEAD_ZONE : REAL
VAR_INPUT
X : REAL;
L : REAL;
END_VAR
VAR
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[(*
version 1.2 11. mar. 2009
programmer hugo
tested by oscat
dead_zone2 is a linear transfer function which follows a linear function except for x is close to 0.
Y = X if abs(x) > L otherwise its 0.
*)
(* @END_DECLARATION := '0' *)
IF ABS(x) > L THEN
dead_zone := X;
ELSE
DEAD_ZONE := 0.0;
END_IF;
(* revision history
hm 12. feb. 2007 rev 1.0
original version
hm 14. jun. 2008 rev 1.1
improved performance
hm 11. mar. 2009 rev 1.2
real constants updated to new systax using dot
*)]]></ST>
</Implementation>
<LineIds Name="DEAD_ZONE">
<LineId Id="10" Count="24" />
<LineId Id="7" Count="0" />
</LineIds>
</POU>
</TcPlcObject>

@ -0,0 +1,77 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<POU Name="FT_DERIV" Id="{e19d98ea-f45c-4e00-9724-5bee1d9633f0}" SpecialFunc="None">
<Declaration><![CDATA[FUNCTION_BLOCK FT_DERIV
VAR_INPUT
in : REAL;
K : REAL := 1.0;
run : BOOL := TRUE;
END_VAR
VAR_OUTPUT
out : REAL;
END_VAR
VAR
old: REAL;
tx: DWORD;
last: DWORD;
init: BOOL;
tc: REAL;
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[(*
version 1.5 11. mar. 2009
programmer hugo
tested by oscat
FT_deriv calculates the derivate over the signal "in" with Faktor "K".
a run input enables or stops the calculation, if left unconnected its true and therfore the calculation is executed.
if K is not specified the default is 1.
*)
(* @END_DECLARATION := '0' *)
(* read system time *)
tx := T_PLC_US();
tc := DWORD_TO_REAL(tx - last);
last := tx;
(* init on first startup *)
IF NOT init THEN
init := TRUE;
old := in;
ELSIF run AND tc > 0.0 THEN
out := (in - old) / tc * 1000000.0 * K;
old := in;
ELSE
out := 0.0;
END_IF;
(*
hm 3.1.2007 rev 1.1
added init code for startup
set the default for K to 1
hm 15. sep 2007 rev 1.2
replaced Time() with T_PLC_US for compatibility and performance reasons
increased accuracy and work in microseconds internally
hm 29 oct 2007 rev 1.3
prohibit calculation when tx - last = 0 to avoid division by 0 and increase accuracy on fast systems
hm 6. nov. 2008 rev 1.4
improved performance
hm 11. mar. 2009 rev 1.5
inproved code
*)]]></ST>
</Implementation>
<LineIds Name="FT_DERIV">
<LineId Id="19" Count="28" />
<LineId Id="50" Count="17" />
<LineId Id="9" Count="0" />
</LineIds>
</POU>
</TcPlcObject>

@ -0,0 +1,90 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<POU Name="FT_PIDWL" Id="{2d524001-6ab8-495f-9e95-700c27215e19}" SpecialFunc="None">
<Declaration><![CDATA[FUNCTION_BLOCK FT_PIDWL
VAR_INPUT
IN : REAL;
KP : REAL := 1.0;
TN : REAL := 1.0;
TV : REAL := 1.0;
LIM_L : REAL := -1.0E38;
LIM_H : REAL := 1.0E38;
RST : BOOL;
END_VAR
VAR_OUTPUT
Y : REAL;
LIM : BOOL;
END_VAR
VAR
piwl : FT_PIWL;
diff : FT_DERIV;
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[(*
version 1.3 13. nov. 2009
programmer hugo
tested by tobias
FT_PIDWL is a PID controller with dynamic wind_up reset.
The PID controller works according to the fomula Y = KP *(IN + KI * INTEG(e) + DERIV(e) ).
a rst will reset the integrator to 0
lim_h and Lim_l set the possible output range of the internal integrator.
the output flags lim will signal that the output limits are active.
default values for KP = 1, KI = 1, ILIM_L = -1E37, iLIM_H = +1E38.
*)
(* @END_DECLARATION := '0' *)
(* if rst then *)
IF rst THEN
piwl(rst := TRUE);
piwl.RST := FALSE;
ELSE
(* run PIWL controller first *)
(* we need to check if TN = 0 and do alternative calls *)
IF TN = 0.0 THEN
piwl(in := IN * KP, KP := 1.0, KI := 0.0, LIM_L := LIM_L, LIM_H := LIM_H);
ELSE
piwl(in := IN * KP, KP := 1.0, KI := 1.0 / TN, LIM_L := LIM_L, LIM_H := LIM_H);
END_IF;
(* run differentiator and add_to_output *)
diff(IN := IN, K := KP * TV);
Y := piwl.Y + diff.out;
(* limit the output *)
IF Y < LIM_L THEN
LIM := TRUE;
Y := LIM_L;
ELSIF Y > LIM_H THEN
LIM := TRUE;
Y := LIM_H;
ELSE
LIM := FALSE;
END_IF;
END_IF;
(* revision history
hm 13. jun. 2008 rev 1.0
original version
hm 25. jan 2008 rev 1.1
multiply differential part with KP
hm 11. mar. 2009 rev 1.2
real constants updated to new systax using dot
hm 13. nov. 2009 rev 1.3
fixed code for negative KP
*)]]></ST>
</Implementation>
<LineIds Name="FT_PIDWL">
<LineId Id="21" Count="58" />
<LineId Id="9" Count="0" />
</LineIds>
</POU>
</TcPlcObject>

@ -0,0 +1,110 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<POU Name="FT_PIWL" Id="{8cecf0cc-cac1-4356-93da-bbf6e749af95}" SpecialFunc="None">
<Declaration><![CDATA[FUNCTION_BLOCK FT_PIWL
VAR_INPUT
IN : REAL;
KP : REAL := 1.0;
KI : REAL := 1.0;
LIM_L : REAL := -1.0E38;
LIM_H : REAL := 1.0E38;
RST : BOOL;
END_VAR
VAR_OUTPUT
Y : REAL;
LIM : BOOL;
END_VAR
VAR
init: BOOL;
tx: DWORD;
tc : REAL;
t_last: DWORD;
in_last : REAL;
i: REAL;
p: REAL;
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[(*
version 1.3 11. mar. 2009
programmer hugo
tested by oscat
FT_PIWL is a PI controller.
The PID controller works according to the fomula Y = IN *(KP+ KI * INTEG(e) ).
a rst will reset the integrator to 0
lim_h and Lim_l set the possible output range of the controller.
the output flag lim will signal that the output limits are active.
the integrator ist equipped with anti wind-up circuitry which limits trhe total output ranke to lim_l and lim_h
default values for KP = 1, KI = 1, ILIM_L = -1E37, iLIM_H = +1E38.
*)
(* @END_DECLARATION := '0' *)
(* initialize at power_up *)
IF NOT init OR RST THEN
init := TRUE;
in_last := in;
t_last := T_PLC_US();
i := 0.0;
tc := 0.0;
ELSE
(* read last cycle time in Microseconds *)
tx := T_PLC_US();
tc := DWORD_TO_REAL(tx - t_last);
t_last := tx;
(* calculate proportional part *)
p := KP * IN;
(* run integrator *)
i := (IN + in_last) * 5.0E-7 * KI * tc + i;
in_last := IN;
(* calculate output Y *)
Y := p + i;
(* check output for limits *)
IF Y >= LIM_H THEN
Y := LIM_H;
IF ki <> 0.0 THEN
i := LIM_H - p;
ELSE
i := 0.0;
END_IF;
LIM := TRUE;
ELSIF Y <= LIM_L THEN
Y := LIM_L;
IF ki <> 0.0 THEN
i := LIM_L - p;
ELSE
i := 0.0;
END_IF;
LIM := TRUE;
ELSE
LIM := FALSE;
END_IF;
END_IF;
(* revision history
hm 13. jun. 2008 rev 1.0
original version
hm 27. oct. 2008 rev 1.1
integrator will not be adjusted when ki = 0
hm 25. jan 2009 rev 1.2
module will also work with negative K
hm 11. mar. 2009 rev 1.3
real constants updated to new systax using dot
*)]]></ST>
</Implementation>
<LineIds Name="FT_PIWL">
<LineId Id="26" Count="60" />
<LineId Id="89" Count="12" />
<LineId Id="9" Count="0" />
</LineIds>
</POU>
</TcPlcObject>

@ -0,0 +1,56 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<POU Name="PWM_DC" Id="{0f59300b-d8c1-494c-88fa-aaf8a563364f}" SpecialFunc="None">
<Declaration><![CDATA[FUNCTION_BLOCK PWM_DC
VAR_INPUT
F : REAL;
DC : REAL;
END_VAR
VAR_OUTPUT
Q : BOOL;
END_VAR
VAR
clk: CLK_PRG;
pulse: TP_X;
tmp: REAL;
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[(*
version 1.4 11. mar. 2009
programmer oscat
tested BY oscat
this signal generator generates a square wave signal which is specified by the frequency and the duty cycle
*)
(* @END_DECLARATION := '0' *)
IF F > 0.0 THEN
tmp := 1000.0 / F;
CLK(PT := REAL_TO_TIME(tmp));
Pulse(in := clk.Q, pt := REAL_TO_TIME(tmp * DC));
Q := pulse.Q;
END_IF;
(* revision history
hm 25. feb 2007 rev 1.1
recoded in st for better performance and better portability
hm 27. nov 2007 rev 1.2
avoid divide by 0 when F = 0
hm 19. oct. 2008 rev 1.3
changed type TP_R to TP_X because of name change
improved performance
hm 11. mar. 2009 rev 1.4
changed real constants to use dot syntax
*)]]></ST>
</Implementation>
<LineIds Name="PWM_DC">
<LineId Id="21" Count="29" />
<LineId Id="9" Count="0" />
</LineIds>
</POU>
</TcPlcObject>

@ -0,0 +1,69 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<POU Name="SCALE_R" Id="{25a95851-a5ac-4c3a-83d0-6d0841537cfe}" SpecialFunc="None">
<Declaration><![CDATA[FUNCTION SCALE_R : REAL
VAR_INPUT
X : REAL;
I_LO : REAL;
I_HI : REAL;
O_LO : REAL;
O_HI : REAL;
END_VAR
VAR
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[(*
version 1.2 11. jan. 2011
programmer hugo
tested by oscat
Scale_R is used to translate and scale a REAL input x to a real output.
the input is limited to I_LO <= X <= I_HI.
Type Function: REAL
Input X: REAL (input)
I_LO: REAL (min input value)
I_HI: REAL (max input value)
O_LO: REAL (min output value)
O_HI: REAL (max output value)
Output REAL (output value)
SCALE_R scales an input value REAL and calculates an output value in
REAL. The input value X is limited here to I_LO and I_HI.
SCALE_D(IN,4,20,0,100) scales an input with 4 .. 20mA to the output 0..100.
SCALE_R can also be negative output values and work with a negative slope, the values I_LO and I_HI but must always be specifed that ILO < I_HI.
*)
IF I_LO = I_HI THEN
SCALE_R := O_LO;
ELSE
SCALE_R := (O_HI - O_LO) / (I_HI - I_LO) * (LIMIT(I_LO, X, I_HI) - I_LO) + O_LO;
END_IF;
(* revision history
hm 18. may. 2008 rev 1.0
original version
hm 13. nov. 2008 rev 1.1
corrected formula for negative gradient
hm 11. jan 2011 rev 1.2
avoid division by 0
*)]]></ST>
</Implementation>
<LineIds Name="SCALE_R">
<LineId Id="13" Count="6" />
<LineId Id="38" Count="0" />
<LineId Id="40" Count="9" />
<LineId Id="52" Count="0" />
<LineId Id="51" Count="0" />
<LineId Id="20" Count="0" />
<LineId Id="7" Count="0" />
<LineId Id="22" Count="14" />
<LineId Id="21" Count="0" />
<LineId Id="37" Count="0" />
</LineIds>
</POU>
</TcPlcObject>

@ -0,0 +1,68 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<POU Name="TP_X" Id="{94610de2-d47a-4301-b858-64fba677c68d}" SpecialFunc="None">
<Declaration><![CDATA[FUNCTION_BLOCK TP_X
VAR_INPUT
IN : BOOL;
PT : TIME;
END_VAR
VAR_OUTPUT
Q : BOOL;
ET : TIME;
END_VAR
VAR
edge : BOOL;
start : TIME;
tx: TIME;
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[(*
version 1.3 17. dec. 2008
programmer hugo
tested by oscat
retriggerable edge triggered pulse similar to TP but with a retrigger function
if the pt input is 0 then output is always low.
*)
(* @END_DECLARATION := '0' *)
(* read system_time *)
tx := DWORD_TO_TIME(T_PLC_MS());
(* rising edge trigger *)
IF IN AND NOT edge THEN
start := tx;
Q := PT > t#0ms;
ELSIF Q THEN
ET := tx - start;
IF ET >= PT THEN
Q := FALSE;
ET := t#0ms;
END_IF;
END_IF;
edge := IN;
(* revision history
hm 4. aug 2006 rev 1.0
original version
hm 17. sep 2007 rev 1.1
replaced time() with T_PLC_MS() for compatibility reasons
hm 19. oct. 2008 rev 1.2
renamed to TP_R to TP_X for compatibility reasons
hm 17. dec. 2008 rev 1.3
code optimized
*)
]]></ST>
</Implementation>
<LineIds Name="TP_X">
<LineId Id="23" Count="39" />
<LineId Id="9" Count="0" />
</LineIds>
</POU>
</TcPlcObject>

@ -0,0 +1,56 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<POU Name="T_PLC_MS" Id="{9e1a567e-3c62-4487-838b-99966ce9ad2a}" SpecialFunc="None">
<Declaration><![CDATA[FUNCTION T_PLC_MS : DWORD
VAR CONSTANT
debug : BOOL := 0;
N : INT := 0;
offset : DWORD := 0;
END_VAR
VAR
tx : TIME;
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[(*
version 1.2 16. nov 2008
programmer hugo
tested by oscat
T_PLC_MS reads the internal PLC timer and return the time, it has the advantage to be able to set a debug mode
and speed up the counter to test the plc timer overrun which occurs every 50 days respectively 25 days at siemens S7
this routine also allows to correct the behavior of s7 where the internal plc counter will not count all 32 bits.
*)
(* @END_DECLARATION := '0' *)
tx := TIME();
T_PLC_MS := TIME_TO_DWORD(Tx);
(* hier muss die korrektur für step7 stattfinden
plctime muss den vollen wertebereich von time ausnutzen:
wenn bei step7 time -24tage bis plus 24 tage ist dann muss der timer auch beim überlauf auf -24tage springen
und auf keinen fall auf 0 !!!!
für siemens muss ein weiterer fb im main eingebunden werden der sicherstellt das alle 32 bits durchgezählt werden.
es kann nur ein fb sein den er muss sich das oberste (32te) bit merken.
oder etwa spring s7 bei überlauf auf -24 tage????? dann wäre keine korrektur nötig.
*)
IF debug THEN
T_PLC_MS := (SHL(T_PLC_MS,N) OR SHL(DWORD#1,N)-1) + OFFSET;
END_IF;
(* revision history
hm 14.9.2007 rev 1.0
original version
hm 12. nov 2007 rev 1.1
added temporaray variable tx because some compilers could not handle time() as an argument
hm 16. nov. 2008 rev 1.2
initialized constants with 0 for compatibility reasons
*)]]></ST>
</Implementation>
<LineIds Name="T_PLC_MS">
<LineId Id="15" Count="33" />
<LineId Id="7" Count="0" />
</LineIds>
</POU>
</TcPlcObject>

@ -0,0 +1,56 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<POU Name="T_PLC_US" Id="{e6814df1-39a7-4cb1-8665-73a427969dd1}" SpecialFunc="None">
<Declaration><![CDATA[FUNCTION T_PLC_US : DWORD
VAR CONSTANT
debug : BOOL := 0;
N : INT := 0;
offset : DWORD := 0;
END_VAR
VAR
tx : TIME;
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[(*
version 1.2 16 nov 2008
programmer hugo
tested by tobias
T_PLC_US reads the internal PLC timer and return the time, it has the advantage to be able to set a debug mode
and speed up the counter to test the plc timer overrun which occurs every 50 days respectively 25 days at siemens S7
this routine also allows to correct the behavior of s7 where the internal plc counter will not count all 32 bits.
*)
(* @END_DECLARATION := '0' *)
tx := TIME();
T_PLC_US := TIME_TO_DWORD(Tx)*1000;
(* hier muss die korrektur für step7 stattfinden
plctime muss den vollen wertebereich von time ausnutzen:
wenn bei step7 time -24tage bis plus 24 tage ist dann muss der timer auch beim überlauf auf -24tage springen
und auf keinen fall auf 0 !!!!
für siemens muss ein weiterer fb im main eingebunden werden der sicherstellt das alle 32 bits durchgezählt werden.
es kann nur ein fb sein den er muss sich das oberste (32te) bit merken.
oder etwa spring s7 bei überlauf auf -24 tage????? dann wäre keine korrektur nötig.
*)
IF debug THEN
T_PLC_US := (SHL(T_PLC_US,N) OR SHL(DWORD#1,N)-1) + OFFSET;
END_IF;
(* revision history
hm 14.9.2007 rev 1.0
original version
hm 12. nov 2007 rev 1.1
added temporaray variable tx because some compilers could not handle time() as an argument
hm 16. nov. 2008 rev 1.2
initialized constants with 0 for compatibility reasons
*)]]></ST>
</Implementation>
<LineIds Name="T_PLC_US">
<LineId Id="15" Count="33" />
<LineId Id="7" Count="0" />
</LineIds>
</POU>
</TcPlcObject>

@ -0,0 +1,36 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<POU Name="LimitValueINT" Id="{561f7915-f04f-4878-b6c4-f0067cb195bf}" SpecialFunc="None">
<Declaration><![CDATA[FUNCTION LimitValueINT : INT
VAR_INPUT
LowerLimit: INT; (* 1st input variable - Lower limit *)
Input: INT; (* 2nd input variable *)
UpperLimit: INT; (* 3rd input variable - Upper limit *)
END_VAR
VAR
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[(*
The 1st LowerLimit input variable forms the lower and the 3rd UpperLimit input variable the upper limit value.
If the 2nd Input variable is within this limit, it will be transferred to the output variable.
If it is above this limit, the upper limit value will be transferred;
if it is below this limit the lower limit value will be transferred.
*)
IF Input > UpperLimit THEN
LimitValueINT := UpperLimit; (* If input is above upper limit, set output to upper limit *)
ELSIF Input < LowerLimit THEN
LimitValueINT := LowerLimit; (* If input is below lower limit, set output to lower limit *)
ELSE
LimitValueINT := Input; (* If input is within limits, pass it through *)
END_IF;]]></ST>
</Implementation>
<LineIds Name="LimitValueINT">
<LineId Id="18" Count="0" />
<LineId Id="22" Count="3" />
<LineId Id="20" Count="0" />
<LineId Id="12" Count="5" />
<LineId Id="7" Count="0" />
</LineIds>
</POU>
</TcPlcObject>

@ -0,0 +1,36 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<POU Name="LimitValueLREAL" Id="{c413c3eb-b86b-4870-9ccc-b4a38f9398ae}" SpecialFunc="None">
<Declaration><![CDATA[FUNCTION LimitValueLREAL : LREAL
VAR_INPUT
LowerLimit: LREAL; (* 1st input variable - Lower limit *)
Input: LREAL; (* 2nd input variable *)
UpperLimit: LREAL; (* 3rd input variable - Upper limit *)
END_VAR
VAR
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[(*
The 1st LowerLimit input variable forms the lower and the 3rd UpperLimit input variable the upper limit value.
If the 2nd Input variable is within this limit, it will be transferred to the output variable.
If it is above this limit, the upper limit value will be transferred;
if it is below this limit the lower limit value will be transferred.
*)
IF Input > UpperLimit THEN
LimitValueLREAL := UpperLimit; (* If input is above upper limit, set output to upper limit *)
ELSIF Input < LowerLimit THEN
LimitValueLREAL := LowerLimit; (* If input is below lower limit, set output to lower limit *)
ELSE
LimitValueLREAL := Input; (* If input is within limits, pass it through *)
END_IF;]]></ST>
</Implementation>
<LineIds Name="LimitValueLREAL">
<LineId Id="18" Count="0" />
<LineId Id="22" Count="3" />
<LineId Id="20" Count="0" />
<LineId Id="12" Count="5" />
<LineId Id="7" Count="0" />
</LineIds>
</POU>
</TcPlcObject>

File diff suppressed because it is too large Load Diff

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<POU Name="SavePersistent" Id="{1762c678-16da-430f-b876-16d7ed13592a}" SpecialFunc="None">
<Declaration><![CDATA[PROGRAM SavePersistent
VAR
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[// Call FB to initialise Data Saving
//
GVL.fbU900(
sNetID:= ,
iPLCPort:= 851,
tTimeout:= DEFAULT_ADS_TIMEOUT,
eUpsMode:= eSUPS_WrPersistData_NoShutdown,
ePersistentMode:= SPDM_2PASS,
tRecoverTime:= T#10S,
bPowerFailDetect=> ,
eState=> );
]]></ST>
</Implementation>
<LineIds Name="SavePersistent">
<LineId Id="5" Count="1" />
<LineId Id="9" Count="7" />
<LineId Id="7" Count="0" />
<LineId Id="17" Count="0" />
</LineIds>
</POU>
</TcPlcObject>

@ -0,0 +1,55 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<POU Name="Send_email" Id="{600f1b92-e96b-4e8b-b192-95f8c2b46f4c}" SpecialFunc="None">
<Declaration><![CDATA[PROGRAM Send_email
VAR
// fbSendEmail : FB_SmtpV3_Full;
fbSmtpFull : FB_SmtpV3_Full;
sMessage_HTML : STRING(500) := '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><title>HTML-Test</title><body><h3>Dear SMTP-User,</h3>this e-mail was sent in HTML from <u>your PLC!</u><br/><br/>Best regards,<br/>your K3D-Team</body></html>';
nPriority : UDINT;
R_Edge : R_TRIG;
bStart : BOOL;
bBusy : BOOL;
bError : BOOL;
udErrId : UDINT;
nMailCounter : UDINT := 0;
sFiles : ARRAY [0..32] OF STRING(80) := ['c:\Temperatures.txt','c:\Log.txt']; (* TODO: Adjust file paths*)
nState : INT;
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[// Send email in case of critical errors
//
fbSmtpFull(
sNetId:= '',
sSmtpServer:= 'mail.company.com',
sUsername:= 'TestUser',
sPassword:= 'TestPwd',
sFrom:= 'TestUser@company.com',
sTo:= 'service@company.com',
sSubject:= 'Email from your 605 Mill Windsor',
nContentType:= 2, (* 2 = HTML *)
nPriority:= 1, (* 1 = HIGH *)
sAttachments:= sFiles,
pMessage:= ADR(sMessage_HTML),
cbMessage:= SIZEOF(sMessage_HTML),
bExecute:= bStart,
bError=> bError,
bBusy=>bBusy,
nErrId=> udErrId);
IF NOT bBusy AND NOT bError AND bStart THEN
nState := 0;
bStart := FALSE;
END_IF
]]></ST>
</Implementation>
<LineIds Name="Send_email">
<LineId Id="5" Count="0" />
<LineId Id="7" Count="0" />
<LineId Id="23" Count="20" />
<LineId Id="9" Count="0" />
<LineId Id="8" Count="0" />
</LineIds>
</POU>
</TcPlcObject>

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<Task Name="PlcTask" Id="{77cf1818-08b4-42d2-a80e-eb50afd47792}">
<!--CycleTime in micro seconds.-->
<CycleTime>20000</CycleTime>
<Priority>20</Priority>
<PouCall>
<Name>MAIN</Name>
</PouCall>
<TaskFBGuid>{88e28178-fc92-4708-a582-a4b8b5cf9187}</TaskFBGuid>
<Fb_init>{ff8fc729-dea7-4c9e-911a-c2389893eba6}</Fb_init>
<Fb_exit>{60ea14be-9684-4107-8805-b0ad43772e31}</Fb_exit>
<CycleUpdate>{bba1c6cb-e18a-4c16-8cc3-74e769b1b486}</CycleUpdate>
<PostCycleUpdate>{707a1869-60f4-412b-ba54-3369511cd643}</PostCycleUpdate>
</Task>
</TcPlcObject>

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<Task Name="VISU_TASK" Id="{a7659fc3-4a0b-41e4-b72e-e3c0443d4da1}">
<!--CycleTime in micro seconds.-->
<CycleTime>200000</CycleTime>
<Priority>30</Priority>
<PouCall>
<Name>VisuElems.Visu_Prg</Name>
</PouCall>
<TaskFBGuid>{4eef783a-624c-4889-b855-0fbeec0fa3b6}</TaskFBGuid>
<Fb_init>{d032b7b6-cdcb-4ae2-95c0-6c9961615f09}</Fb_init>
<Fb_exit>{3e8fb502-f6d8-4ded-bd60-ff69b1068e04}</Fb_exit>
<CycleUpdate>{1698c011-a2c1-4090-bc47-247001bd7df2}</CycleUpdate>
<PostCycleUpdate>{36c85efc-5c91-46ee-9041-4f90606f23e1}</PostCycleUpdate>
</Task>
</TcPlcObject>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -0,0 +1,87 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<ImagePool Name="ImagePool" Id="{187e2ed7-c795-457b-8e65-78944fedd83a}">
<XmlArchive>
<Data>
<o xml:space="preserve" t="ImagePoolObject">
<v n="UniqueIdGenerator">"88"</v>
<l n="BitmapPool" t="ArrayList" cet="ImagePoolItem">
<o>
<v n="BitmapID">"MAIN_SCR_BACKGROUND"</v>
<v n="FileID">"5ce3da45-db07-42e7-a21c-a00fff4ed8f6|Image\satCROP.png"</v>
<v n="ItemID">9</v>
</o>
<o>
<v n="BitmapID">"LAYOUT"</v>
<v n="FileID">"5ce3da45-db07-42e7-a21c-a00fff4ed8f6|Image\imageedit_1_6350383465.png"</v>
<v n="ItemID">10</v>
</o>
<o>
<v n="BitmapID">"K3D_LOGO"</v>
<v n="FileID">"5ce3da45-db07-42e7-a21c-a00fff4ed8f6|Image\LOGO K3D.png"</v>
<v n="ItemID">11</v>
</o>
<o>
<v n="BitmapID">"LAYOUTII"</v>
<v n="FileID">"5ce3da45-db07-42e7-a21c-a00fff4ed8f6|Image\layout2.png"</v>
<v n="ItemID">26</v>
</o>
<o>
<v n="BitmapID">"BLOW1"</v>
<v n="FileID">"5ce3da45-db07-42e7-a21c-a00fff4ed8f6|Image\imageedit_7_5805304704.png"</v>
<v n="ItemID">41</v>
</o>
<o>
<v n="BitmapID">"HEX1"</v>
<v n="FileID">"5ce3da45-db07-42e7-a21c-a00fff4ed8f6|Image\imageedit_1_6350383465.png"</v>
<v n="ItemID">44</v>
</o>
<o>
<v n="BitmapID">"DUCT"</v>
<v n="FileID">"5ce3da45-db07-42e7-a21c-a00fff4ed8f6|Image\imageedit_1_4498014313.png"</v>
<v n="ItemID">51</v>
</o>
<o>
<v n="BitmapID">"CASE1"</v>
<v n="FileID">"5ce3da45-db07-42e7-a21c-a00fff4ed8f6|Image\imageedit_1_6350383465.png"</v>
<v n="ItemID">54</v>
</o>
<o>
<v n="BitmapID">"CASE2"</v>
<v n="FileID">"5ce3da45-db07-42e7-a21c-a00fff4ed8f6|Image\imageedit_2_9738006528.png"</v>
<v n="ItemID">57</v>
</o>
<o>
<v n="BitmapID">"FLAME1"</v>
<v n="FileID">"5ce3da45-db07-42e7-a21c-a00fff4ed8f6|Image\Flame 2.png"</v>
<v n="ItemID">60</v>
</o>
<o>
<v n="BitmapID">"HEXCHANGER"</v>
<v n="FileID">"5ce3da45-db07-42e7-a21c-a00fff4ed8f6|Image\imageedit_1_3716086639.png"</v>
<v n="ItemID">63</v>
</o>
<o>
<v n="BitmapID">""</v>
<v n="FileID">""</v>
<v n="ItemID">75</v>
</o>
</l>
<v n="GuidInit">{1c8590d4-f3c8-4b26-9e8d-28269f8ec785}</v>
<v n="GuidReInit">{2573bf41-ca87-479a-b772-8b413f53393e}</v>
<v n="GuidExitX">{3886dba0-315d-4fe7-9fdd-62b60e0f4f96}</v>
<v n="ValidIds">true</v>
</o>
</Data>
<TypeList>
<Type n="ArrayList">System.Collections.ArrayList</Type>
<Type n="Boolean">System.Boolean</Type>
<Type n="Guid">System.Guid</Type>
<Type n="ImagePoolItem">{215b2719-0347-4e4d-ba85-8bcd66946f66}</Type>
<Type n="ImagePoolObject">{bb0b9044-714e-4614-ad3e-33cbdf34d16b}</Type>
<Type n="Int32">System.Int32</Type>
<Type n="String">System.String</Type>
</TypeList>
</XmlArchive>
</ImagePool>
</TcPlcObject>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -0,0 +1,928 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<Visu Name="DutyCycleOffset" Id="{270f60fc-bce6-464c-91d5-d9d52b1652bc}">
<XmlArchive>
<Data>
<o xml:space="preserve" t="VisualObject">
<n n="LastVisuLanguageModelEntry" />
<v n="UniqueIdGenerator">"8"</v>
<o n="VisualElemList" t="VisualElemList">
<l n="VisualElementList" t="VisualElemCollection" cet="GenericVisualElem">
<o>
<a n="ConfiguredComplexInputs" et="ComplexInput" />
<l n="Elements" t="ArrayList" />
<n n="VisualElementDescription" />
<o n="VisualElemMemberList" t="VisualElemMemberList">
<l n="VisualElemMemberList" t="VisualElemMemberCollection" cet="VisualElemMember">
<o>
<v n="Id">571893170L</v>
<v n="Value">""</v>
</o>
<o>
<v n="Id">494569607L</v>
<l n="Value" t="ArrayList" cet="UInt32">
<v>4278190080</v>
</l>
</o>
<o>
<v n="Id">2812299069L</v>
<l n="Value" t="ArrayList" cet="UInt32">
<v>4290822336</v>
</l>
</o>
<o>
<v n="Id">135947015L</v>
<l n="Value" t="ArrayList" cet="NamedStyleColor">
<o>
<v n="Color">-65536</v>
<v n="CanonicalName">"Element-Alarm-Frame-Color"</v>
</o>
</l>
</o>
<o>
<v n="Id">493260384L</v>
<l n="Value" t="ArrayList" cet="NamedStyleColor">
<o>
<v n="Color">-12337</v>
<v n="CanonicalName">"Element-Alarm-Fill-Color"</v>
</o>
</l>
</o>
<o>
<v n="Id">2340015797L</v>
<v n="Value">"HCENTER"</v>
</o>
<o>
<v n="Id">2565699834L</v>
<v n="Value">"VCENTER"</v>
</o>
<o>
<v n="Id">4134387352L</v>
<v n="Value">"NONE"</v>
</o>
<o>
<v n="Id">1603690730L</v>
<v n="Value">"Arial"</v>
</o>
<o>
<v n="Id">4253639993L</v>
<v n="Value" t="Int16">12</v>
</o>
<o>
<v n="Id">2729990903L</v>
<v n="Value">0U</v>
</o>
<o>
<v n="Id">1213979116L</v>
<v n="Value">0U</v>
</o>
<o>
<v n="Id">3488306084L</v>
<v n="Value">4278190080U</v>
</o>
<o>
<v n="Id">1999528970L</v>
<v n="Value">"&lt;toggle/tap variable&gt;"</v>
</o>
<o>
<v n="Id">3719097617L</v>
<v n="Value">0</v>
</o>
<o>
<v n="Id">1649127785L</v>
<v n="Value" t="Int16">0</v>
</o>
<o>
<v n="Id">357335551L</v>
<v n="Value" t="Int16">36</v>
</o>
<o>
<v n="Id">2422045748L</v>
<v n="Value" t="Int16">82</v>
</o>
<o>
<v n="Id">2134141914L</v>
<v n="Value" t="Int16">38</v>
</o>
<o>
<v n="Id">3729828405L</v>
<l n="Value" t="ArrayList" cet="FontDescription">
<o>
<v n="FontStyle">0</v>
<v n="AdditionalFontStyle" t="UInt16">0</v>
<v n="ExplicitColor">-16777216</v>
<v n="FontName">"Tahoma"</v>
<v n="FontSize">24</v>
<v n="ScriptIdentification">0</v>
<v n="DoubleFontSize" t="Double">0</v>
<o n="NamedColor" t="NamedStyleColor">
<v n="Color">-16777216</v>
<v n="CanonicalName">"Font-Default-Color"</v>
</o>
</o>
</l>
</o>
<o>
<v n="Id">1337389588L</v>
<v n="Value">"FROM_STYLE"</v>
</o>
<o>
<v n="Id">2678395525L</v>
<v n="Value">1U</v>
</o>
<o>
<v n="Id">390574330L</v>
<v n="Value">"%i %"</v>
</o>
<o>
<v n="Id">2597686782L</v>
<v n="Value">false</v>
</o>
<o>
<v n="Id">2477733581L</v>
<v n="Value">"GVL.arZoneData[zoneID].iDutyCycleManualOffset"</v>
</o>
<o>
<v n="Id">823443203L</v>
<v n="Value">"1022"</v>
</o>
</l>
</o>
<v n="VisualElementName">"Textfield"</v>
<v n="VisualElementTypeName">"VisuFbElemTextfield"</v>
<v n="VisualElementIsRectangle">true</v>
<v n="VisualElementIdentifier">"GenElemInst_7"</v>
<n n="VisualElementOfflinePaintCommands" />
<n n="VisualElementFrameInformation" />
<d n="VisualElementInputActions" t="Hashtable" />
<v n="VisualElementIdentification">{47f05f1f-1dde-498a-8da4-2bfeec39b83a}</v>
<v n="VisualElementOwningObjectGuid">{270f60fc-bce6-464c-91d5-d9d52b1652bc}</v>
<a n="LMGuids" et="Guid" />
<d n="SubElements" t="Hashtable" />
<v n="VisualElementId">6</v>
<l n="UserManagementAccessRights" t="ArrayList" />
</o>
<o>
<a n="ConfiguredComplexInputs" et="ComplexInput" />
<l n="Elements" t="ArrayList" />
<n n="VisualElementDescription" />
<o n="VisualElemMemberList" t="VisualElemMemberList">
<l n="VisualElemMemberList" t="VisualElemMemberCollection" cet="VisualElemMember">
<o>
<v n="Id">571893170L</v>
<v n="Value">""</v>
</o>
<o>
<v n="Id">2340015797L</v>
<v n="Value">"HCENTER"</v>
</o>
<o>
<v n="Id">2565699834L</v>
<v n="Value">"VCENTER"</v>
</o>
<o>
<v n="Id">4134387352L</v>
<v n="Value">"NONE"</v>
</o>
<o>
<v n="Id">1603690730L</v>
<v n="Value">"Arial"</v>
</o>
<o>
<v n="Id">4253639993L</v>
<v n="Value" t="Int16">12</v>
</o>
<o>
<v n="Id">2729990903L</v>
<v n="Value">0U</v>
</o>
<o>
<v n="Id">1213979116L</v>
<v n="Value">0U</v>
</o>
<o>
<v n="Id">3488306084L</v>
<v n="Value">4278190080U</v>
</o>
<o>
<v n="Id">1647042231L</v>
<v n="Value">"&lt;toggle/tap variable&gt;"</v>
</o>
<o>
<v n="Id">2812299069L</v>
<v n="Value">4294967295U</v>
</o>
<o>
<v n="Id">494569607L</v>
<v n="Value">4278190080U</v>
</o>
<o>
<v n="Id">3719097617L</v>
<v n="Value">0</v>
</o>
<o>
<v n="Id">1649127785L</v>
<v n="Value">1</v>
</o>
<o>
<v n="Id">357335551L</v>
<v n="Value">78</v>
</o>
<o>
<v n="Id">2422045748L</v>
<v n="Value" t="Int16">80</v>
</o>
<o>
<v n="Id">2134141914L</v>
<v n="Value" t="Int16">60</v>
</o>
<o>
<v n="Id">1651471674L</v>
<v n="Value">true</v>
</o>
<o>
<v n="Id">2341735680L</v>
<l n="Value" t="ArrayList" cet="NamedStyleColor">
<o>
<v n="Color">-2830136</v>
<v n="CanonicalName">"Element-Control-Color"</v>
</o>
</l>
</o>
<o>
<v n="Id">438423234L</v>
<l n="Value" t="ArrayList" cet="NamedStyleColor">
<o>
<v n="Color">-2830136</v>
<v n="CanonicalName">"Element-Alarm-Fill-Color"</v>
</o>
</l>
</o>
<o>
<v n="Id">3729828405L</v>
<l n="Value" t="ArrayList" cet="FontDescription">
<o>
<v n="FontStyle">0</v>
<v n="AdditionalFontStyle" t="UInt16">0</v>
<v n="ExplicitColor">-16777216</v>
<v n="FontName">"Tahoma"</v>
<v n="FontSize">48</v>
<v n="ScriptIdentification">0</v>
<v n="DoubleFontSize" t="Double">0</v>
<o n="NamedColor" t="NamedStyleColor">
<v n="Color">-16777216</v>
<v n="CanonicalName">"Element-Button-FontColor"</v>
</o>
</o>
</l>
</o>
<o>
<v n="Id">550940142L</v>
<v n="Value">41</v>
</o>
<o>
<v n="Id">1473355128L</v>
<v n="Value">108</v>
</o>
<o>
<v n="Id">493260384L</v>
<v n="Value">4294967295U</v>
</o>
<o>
<v n="Id">135947015L</v>
<v n="Value">4278190080U</v>
</o>
<o>
<v n="Id">2678395525L</v>
<v n="Value">1U</v>
</o>
<o>
<v n="Id">2478807622L</v>
<v n="Value">""</v>
</o>
<o>
<v n="Id">390574330L</v>
<v n="Value">"+"</v>
</o>
<o>
<v n="Id">2597686782L</v>
<v n="Value">false</v>
</o>
<o>
<v n="Id">823443203L</v>
<v n="Value">"936"</v>
</o>
</l>
</o>
<v n="VisualElementName">"Button"</v>
<v n="VisualElementTypeName">"VisuFbElemButton"</v>
<v n="VisualElementIsRectangle">true</v>
<v n="VisualElementIdentifier">"GenElemInst_8"</v>
<n n="VisualElementOfflinePaintCommands" />
<n n="VisualElementFrameInformation" />
<d n="VisualElementInputActions" t="Hashtable" ckt="String" cvt="STSnippetInputAction[]">
<v>OnMouseClick</v>
<a cet="STSnippetInputAction">
<o>
<v n="STSnippet">"IF GVL.arZoneData[zoneID].iDutyCycleManualOffset &lt; 21 THEN
GVL.arZoneData[zoneID].iDutyCycleManualOffset:=GVL.arZoneData[zoneID].iDutyCycleManualOffset+1;
END_IF;"</v>
</o>
</a>
</d>
<v n="VisualElementIdentification">{5197c375-4196-451f-a88f-e9b6e2225f62}</v>
<v n="VisualElementOwningObjectGuid">{270f60fc-bce6-464c-91d5-d9d52b1652bc}</v>
<a n="LMGuids" et="Guid" />
<d n="SubElements" t="Hashtable" />
<v n="VisualElementId">7</v>
<l n="UserManagementAccessRights" t="ArrayList" />
</o>
<o>
<a n="ConfiguredComplexInputs" et="ComplexInput" />
<l n="Elements" t="ArrayList" />
<n n="VisualElementDescription" />
<o n="VisualElemMemberList" t="VisualElemMemberList">
<l n="VisualElemMemberList" t="VisualElemMemberCollection" cet="VisualElemMember">
<o>
<v n="Id">571893170L</v>
<v n="Value">""</v>
</o>
<o>
<v n="Id">2340015797L</v>
<v n="Value">"HCENTER"</v>
</o>
<o>
<v n="Id">2565699834L</v>
<v n="Value">"VCENTER"</v>
</o>
<o>
<v n="Id">4134387352L</v>
<v n="Value">"NONE"</v>
</o>
<o>
<v n="Id">1603690730L</v>
<v n="Value">"Arial"</v>
</o>
<o>
<v n="Id">4253639993L</v>
<v n="Value" t="Int16">12</v>
</o>
<o>
<v n="Id">2729990903L</v>
<v n="Value">0U</v>
</o>
<o>
<v n="Id">1213979116L</v>
<v n="Value">0U</v>
</o>
<o>
<v n="Id">3488306084L</v>
<v n="Value">4278190080U</v>
</o>
<o>
<v n="Id">1647042231L</v>
<v n="Value">"&lt;toggle/tap variable&gt;"</v>
</o>
<o>
<v n="Id">2812299069L</v>
<v n="Value">4294967295U</v>
</o>
<o>
<v n="Id">494569607L</v>
<v n="Value">4278190080U</v>
</o>
<o>
<v n="Id">3719097617L</v>
<v n="Value">0</v>
</o>
<o>
<v n="Id">1649127785L</v>
<v n="Value">1</v>
</o>
<o>
<v n="Id">357335551L</v>
<v n="Value">145</v>
</o>
<o>
<v n="Id">2422045748L</v>
<v n="Value" t="Int16">80</v>
</o>
<o>
<v n="Id">2134141914L</v>
<v n="Value" t="Int16">60</v>
</o>
<o>
<v n="Id">1651471674L</v>
<v n="Value">true</v>
</o>
<o>
<v n="Id">2341735680L</v>
<l n="Value" t="ArrayList" cet="NamedStyleColor">
<o>
<v n="Color">-2830136</v>
<v n="CanonicalName">"Element-Control-Color"</v>
</o>
</l>
</o>
<o>
<v n="Id">438423234L</v>
<l n="Value" t="ArrayList" cet="NamedStyleColor">
<o>
<v n="Color">-2830136</v>
<v n="CanonicalName">"Element-Alarm-Fill-Color"</v>
</o>
</l>
</o>
<o>
<v n="Id">3729828405L</v>
<l n="Value" t="ArrayList" cet="FontDescription">
<o>
<v n="FontStyle">0</v>
<v n="AdditionalFontStyle" t="UInt16">0</v>
<v n="ExplicitColor">-16777216</v>
<v n="FontName">"Tahoma"</v>
<v n="FontSize">48</v>
<v n="ScriptIdentification">0</v>
<v n="DoubleFontSize" t="Double">0</v>
<o n="NamedColor" t="NamedStyleColor">
<v n="Color">-16777216</v>
<v n="CanonicalName">"Element-Button-FontColor"</v>
</o>
</o>
</l>
</o>
<o>
<v n="Id">550940142L</v>
<v n="Value">41</v>
</o>
<o>
<v n="Id">1473355128L</v>
<v n="Value">175</v>
</o>
<o>
<v n="Id">493260384L</v>
<v n="Value">4294967295U</v>
</o>
<o>
<v n="Id">135947015L</v>
<v n="Value">4278190080U</v>
</o>
<o>
<v n="Id">2678395525L</v>
<v n="Value">1U</v>
</o>
<o>
<v n="Id">2478807622L</v>
<v n="Value">""</v>
</o>
<o>
<v n="Id">390574330L</v>
<v n="Value">"-"</v>
</o>
<o>
<v n="Id">2597686782L</v>
<v n="Value">false</v>
</o>
<o>
<v n="Id">823443203L</v>
<v n="Value">"2310"</v>
</o>
</l>
</o>
<v n="VisualElementName">"Button"</v>
<v n="VisualElementTypeName">"VisuFbElemButton"</v>
<v n="VisualElementIsRectangle">true</v>
<v n="VisualElementIdentifier">"GenElemInst_9"</v>
<n n="VisualElementOfflinePaintCommands" />
<n n="VisualElementFrameInformation" />
<d n="VisualElementInputActions" t="Hashtable" ckt="String" cvt="STSnippetInputAction[]">
<v>OnMouseClick</v>
<a cet="STSnippetInputAction">
<o>
<v n="STSnippet">"IF GVL.arZoneData[zoneID].iDutyCycleManualOffset &gt; 0 THEN
GVL.arZoneData[zoneID].iDutyCycleManualOffset:=GVL.arZoneData[zoneID].iDutyCycleManualOffset-1;
END_IF;"</v>
</o>
</a>
</d>
<v n="VisualElementIdentification">{2b3d562c-c4fe-4ff3-a858-42e0d5a7ec70}</v>
<v n="VisualElementOwningObjectGuid">{270f60fc-bce6-464c-91d5-d9d52b1652bc}</v>
<a n="LMGuids" et="Guid" />
<d n="SubElements" t="Hashtable" />
<v n="VisualElementId">8</v>
<l n="UserManagementAccessRights" t="ArrayList" />
</o>
<o>
<a n="ConfiguredComplexInputs" et="ComplexInput" />
<l n="Elements" t="ArrayList" />
<n n="VisualElementDescription" />
<o n="VisualElemMemberList" t="VisualElemMemberList">
<l n="VisualElemMemberList" t="VisualElemMemberCollection" cet="VisualElemMember">
<o>
<v n="Id">571893170L</v>
<v n="Value">""</v>
</o>
<o>
<v n="Id">494569607L</v>
<l n="Value" t="ArrayList" cet="NamedStyleColor">
<o>
<v n="Color">-2830136</v>
<v n="CanonicalName">"Element-Frame-Color"</v>
</o>
</l>
</o>
<o>
<v n="Id">2812299069L</v>
<l n="Value" t="ArrayList" cet="NamedStyleColor">
<o>
<v n="Color">-1</v>
<v n="CanonicalName">"Element-Fill-Color"</v>
</o>
</l>
</o>
<o>
<v n="Id">135947015L</v>
<l n="Value" t="ArrayList" cet="NamedStyleColor">
<o>
<v n="Color">-65536</v>
<v n="CanonicalName">"Element-Alarm-Frame-Color"</v>
</o>
</l>
</o>
<o>
<v n="Id">493260384L</v>
<l n="Value" t="ArrayList" cet="NamedStyleColor">
<o>
<v n="Color">-12337</v>
<v n="CanonicalName">"Element-Alarm-Fill-Color"</v>
</o>
</l>
</o>
<o>
<v n="Id">2340015797L</v>
<v n="Value">"HCENTER"</v>
</o>
<o>
<v n="Id">2565699834L</v>
<v n="Value">"VCENTER"</v>
</o>
<o>
<v n="Id">4134387352L</v>
<v n="Value">"NONE"</v>
</o>
<o>
<v n="Id">1603690730L</v>
<v n="Value">"Arial"</v>
</o>
<o>
<v n="Id">4253639993L</v>
<v n="Value" t="Int16">12</v>
</o>
<o>
<v n="Id">2729990903L</v>
<v n="Value">0U</v>
</o>
<o>
<v n="Id">1213979116L</v>
<v n="Value">0U</v>
</o>
<o>
<v n="Id">3488306084L</v>
<v n="Value">4278190080U</v>
</o>
<o>
<v n="Id">1999528970L</v>
<v n="Value">"&lt;toggle/tap variable&gt;"</v>
</o>
<o>
<v n="Id">3719097617L</v>
<v n="Value">0</v>
</o>
<o>
<v n="Id">1649127785L</v>
<v n="Value" t="Int16">0</v>
</o>
<o>
<v n="Id">357335551L</v>
<v n="Value" t="Int16">0</v>
</o>
<o>
<v n="Id">2422045748L</v>
<v n="Value" t="Int16">80</v>
</o>
<o>
<v n="Id">2134141914L</v>
<v n="Value">30</v>
</o>
<o>
<v n="Id">3729828405L</v>
<l n="Value" t="ArrayList" cet="FontDescription">
<o>
<v n="FontStyle">1</v>
<v n="AdditionalFontStyle" t="UInt16">0</v>
<v n="ExplicitColor">-16777216</v>
<v n="FontName">"Tahoma"</v>
<v n="FontSize">18</v>
<v n="ScriptIdentification">0</v>
<v n="DoubleFontSize" t="Double">0</v>
<o n="NamedColor" t="NamedStyleColor">
<v n="Color">-16777216</v>
<v n="CanonicalName">"Font-Default-Color"</v>
</o>
</o>
</l>
</o>
<o>
<v n="Id">1337389588L</v>
<v n="Value">"FROM_STYLE"</v>
</o>
<o>
<v n="Id">2678395525L</v>
<v n="Value">1U</v>
</o>
<o>
<v n="Id">390574330L</v>
<v n="Value">"Zone %"</v>
</o>
<o>
<v n="Id">2827249010L</v>
<v n="Value">"PS_HOLLOW"</v>
</o>
<o>
<v n="Id">1782330054L</v>
<v n="Value">"BS_HOLLOW"</v>
</o>
<o>
<v n="Id">2597686782L</v>
<v n="Value">false</v>
</o>
<o>
<v n="Id">2477733581L</v>
<v n="Value">"zoneID"</v>
</o>
<o>
<v n="Id">823443203L</v>
<v n="Value">"1684"</v>
</o>
</l>
</o>
<v n="VisualElementName">"Textfield"</v>
<v n="VisualElementTypeName">"VisuFbElemTextfield"</v>
<v n="VisualElementIsRectangle">true</v>
<v n="VisualElementIdentifier">"GenElemInst_10"</v>
<n n="VisualElementOfflinePaintCommands" />
<n n="VisualElementFrameInformation" />
<d n="VisualElementInputActions" t="Hashtable" />
<v n="VisualElementIdentification">{1e032bb2-cc8a-4515-86be-3903f01d43bb}</v>
<v n="VisualElementOwningObjectGuid">{270f60fc-bce6-464c-91d5-d9d52b1652bc}</v>
<a n="LMGuids" et="Guid" />
<d n="SubElements" t="Hashtable" />
<v n="VisualElementId">9</v>
<l n="UserManagementAccessRights" t="ArrayList" />
</o>
</l>
<v n="BackgroundBitmapId">""</v>
<v n="BackgroundColor">16777215</v>
<o n="Background" t="BackgroundSettings">
<n n="BgGradient" />
<n n="BgNamedColor" />
<v n="BgBmpId">""</v>
<v n="BgUseBmp">false</v>
<v n="BgColor">false</v>
<v n="BgUseColor">16777215</v>
<v n="BgUseGradient">false</v>
</o>
</o>
<o n="GeneratedLMMDescriptions" t="GeneratedLanguageModelEntriesData">
<o n="GeneratedVisuFbDescription" t="GenericFbDescription">
<d n="FbMethods" t="CaseInsensitiveHashtable" ckt="String" cvt="Guid">
<v>ContainsPoint</v>
<v>62797064-1d76-45c7-bfdd-7a6a304bbfc3</v>
<v>Destruct</v>
<v>0db206fc-6eee-45b3-88f2-1ba36693917a</v>
<v>ElementInfo</v>
<v>70b8635a-3fe9-4a43-be3c-ffe2fddf012c</v>
<v>FB_Exit</v>
<v>b30f797b-99d7-4499-a9b9-9eecbabef306</v>
<v>FB_Reinit</v>
<v>0df6c6b0-86f1-4aac-ae5f-fd11af07223f</v>
<v>GetClientData</v>
<v>0dd48497-93f6-4bb7-8c83-c184fd29a8d7</v>
<v>GetElementArray</v>
<v>747fb6d0-d5e6-40f8-91c3-a3e41b4ca924</v>
<v>GetElementIdArray</v>
<v>ed4fb498-2440-4db6-9748-aee27dcac224</v>
<v>GetInitializeVersion</v>
<v>9ed2e77c-6406-408b-99c2-223ee43ce795</v>
<v>GetLocalUsergroup</v>
<v>15b8e9d5-508f-4eb6-aec0-d5f262de63bc</v>
<v>GetName</v>
<v>8b70bcdf-4979-4e5e-8ab4-27b57b6a0330</v>
<v>GetNamespace</v>
<v>a7d81463-9f8a-46fa-9f3e-f6d360e54c87</v>
<v>GetSize</v>
<v>7b86c8d0-548f-4b4d-9955-0cb598f49314</v>
<v>GetSurroundingRect</v>
<v>b18deb2a-c95b-4e6c-a921-edd821d4b817</v>
<v>GetText</v>
<v>497e817e-dab9-4d91-8ae6-66a1d4c42bf0</v>
<v>GetTextProperties</v>
<v>37817db6-334f-4883-9abe-c1a756d9d7d0</v>
<v>GetTooltip</v>
<v>d4a9ab81-b842-47c9-a403-eba918ad0817</v>
<v>GetTranslator</v>
<v>f57ac51f-1576-4506-b42b-47b19bfb5c6f</v>
<v>GetUpdateRects</v>
<v>66b4f1a8-5060-43ac-a3dd-0ae081aa479d</v>
<v>HandleInput</v>
<v>f49b8350-871f-46f0-a3f0-2bc4666fe1b7</v>
<v>HasInputAccess</v>
<v>732b86e2-676b-4ac5-90f1-4b4ce00b5af9</v>
<v>HasInputAccessIntern</v>
<v>5e8e0445-7e06-4e72-a926-a5b8306c0d90</v>
<v>HasVisibilityAccess</v>
<v>6e6052aa-bfc7-40db-b977-0bbfc064a99e</v>
<v>HasVisibilityAccessIntern</v>
<v>bc6631e9-78ff-4a04-9793-369fba65b1be</v>
<v>Initialize</v>
<v>aefc32da-39cc-4b66-b769-20038f472a27</v>
<v>IsAntialiasingInactive</v>
<v>776730e2-023b-4c16-a16c-726d171d4d36</v>
<v>Paint</v>
<v>7f50d5ad-0d6c-4e21-b47b-c9995348f13a</v>
<v>SetClientData</v>
<v>2d68d488-718b-4133-876a-e984eedf81e6</v>
<v>SetStaticState</v>
<v>54ffa3e7-a729-4afa-86c8-b1eeb4667ef7</v>
<v>SetVisuFlagsInternal</v>
<v>5b011d88-18b2-4a7e-b2fb-3f6b90020262</v>
<v>Update</v>
<v>444e3172-54a1-4faa-93cb-3c0ae2403f05</v>
</d>
<v n="FbName">"NotImportant"</v>
<v n="FbGuid">{270f60fc-bce6-464c-91d5-d9d52b1652bc}</v>
</o>
<v n="GeneratedGlobalVisuVarsGuid">{8256ee7b-afa6-4352-9d04-66a9ccd90300}</v>
<v n="GeneratedGlobalTheVisuVarlistGuid">{cda99e15-3cdb-45c2-a2ff-7538fcf31e37}</v>
<v n="GeneratedGlobalVisuConstants">{46d620a5-d9cc-43d1-85f1-5e4edfe34eb2}</v>
<d n="GeneratedAllElementsEntries" t="Hashtable" />
<o n="VisuRegDesc" t="GenericFbDescription">
<d n="FbMethods" t="CaseInsensitiveHashtable" ckt="String" cvt="Guid">
<v>FB_Exit</v>
<v>40b8bc29-19be-4179-beac-8b362460861b</v>
<v>FB_Init</v>
<v>0e92fb79-e8fc-4e28-ae32-ebf94da17599</v>
<v>FB_Reinit</v>
<v>149ee87a-2b27-4b15-aa0c-97e683f595eb</v>
</d>
<v n="FbName">"NotImportant"</v>
<v n="FbGuid">{f29d014a-8625-43bb-8dc8-3bbb5666429f}</v>
</o>
<v n="VisuRegisterGvl">{631901e3-405d-4525-82c3-3a3624c221d3}</v>
<n n="SettingsPou" />
<n n="MemManPou" />
<o n="InputsPou" t="GenericFbDescription">
<d n="FbMethods" t="CaseInsensitiveHashtable" ckt="String" cvt="Guid">
<v>abstrGetDefaultCursor</v>
<v>224bc83d-4964-4de8-a4f5-0ab03589eb63</v>
<v>ExecuteDialogClosed</v>
<v>737ca5dd-5dd8-48dc-8944-4db9fed3fad1</v>
<v>ExecuteKeyDown</v>
<v>2bf4adf6-fcf1-4815-80de-e0fecfe6dd7f</v>
<v>ExecuteKeyUp</v>
<v>9ddaf45a-62cd-4c8b-85f6-f292e0acf3d0</v>
<v>ExecuteLooseCapture</v>
<v>6ac3bf40-4aaf-44de-9db6-d97b4229d685</v>
<v>ExecuteMouseClick</v>
<v>90c348cd-5bcb-4c3b-a18b-369a347c5018</v>
<v>ExecuteMouseDblClick</v>
<v>08a2e120-5a89-4fef-b9af-69be24a80b60</v>
<v>ExecuteMouseDown</v>
<v>f96b2cfd-8a15-40bf-8599-3f7968cfcab8</v>
<v>ExecuteMouseEnter</v>
<v>3001eddb-86e4-497f-996f-0ac2625f4a1f</v>
<v>ExecuteMouseLeave</v>
<v>3baad20f-1e7f-482f-b7ec-29fc80411cbf</v>
<v>ExecuteMouseMove</v>
<v>01a5a469-15c2-4bfd-9c1b-d6725127929e</v>
<v>ExecuteMouseUp</v>
<v>52255f5a-53e2-4dc0-b6d8-f152f2a98660</v>
<v>GetElementInfo</v>
<v>d236f9e2-bd4a-434a-a688-6ee446b24dbc</v>
<v>Initialize</v>
<v>15614d9c-3c1d-4d55-a1a2-12e3655bb7db</v>
</d>
<v n="FbName">"NotImportant"</v>
<v n="FbGuid">{29c22693-f862-4bec-837e-35f731ecff1c}</v>
</o>
<v n="DialogDut">{5afd12d5-7012-4353-b4c9-7f2a22c86de8}</v>
</o>
<v n="LastUsedIdForIdentifier">11</v>
<o n="TextDocument" t="TextDocument">
<a n="TextLines" cet="TextLine">
<o>
<v n="Id">7L</v>
<n n="Tag" />
<v n="Text">"VAR_IN_OUT"</v>
</o>
<o>
<v n="Id">8L</v>
<n n="Tag" />
<v n="Text">" zoneID:INT;"</v>
</o>
<o>
<v n="Id">1L</v>
<n n="Tag" />
<v n="Text">"END_VAR"</v>
</o>
</a>
</o>
<v n="GvlCreated">false</v>
<n n="LMEntry" />
<v n="ProfileCompatibilityId">4140216668L</v>
<v n="LMVerMinor">0</v>
<v n="LMVerMajor">1</v>
<o n="Hotkeys" t="HotkeyConfiguration">
<v n="IdMin">481037385728L</v>
<v n="IdMax">549755813887L</v>
<v n="Id">481037385728L</v>
<v n="IdMask">549754765312L</v>
<v n="IdStep">1048576L</v>
<l2 n="Inputs" />
</o>
<o n="VisuSizeManager" t="VisualObjectSizeManager">
<d2 n="Size" ckt="Int32" cvt="VisualObjectSize">
<v>0</v>
<o>
<v n="Width">84</v>
<v n="Height">205</v>
</o>
<v>1</v>
<o>
<v n="Width">84</v>
<v n="Height">205</v>
</o>
</d2>
<v n="Version">1</v>
</o>
</o>
</Data>
<TypeList>
<Type n="ArrayList">System.Collections.ArrayList</Type>
<Type n="BackgroundSettings">{1038f12c-dd4b-4f96-87a3-a350fe8f3552}</Type>
<Type n="Boolean">System.Boolean</Type>
<Type n="CaseInsensitiveHashtable">{7df88604-7ac5-4e36-91c4-55e4fdad3e68}</Type>
<Type n="ComplexInput">{1de566f6-72a7-494c-9353-9a418172c96e}</Type>
<Type n="Double">System.Double</Type>
<Type n="FontDescription">{896a5e54-96c3-433b-96d2-4f1442fef591}</Type>
<Type n="GeneratedLanguageModelEntriesData">{703465dc-4679-4ff2-bcc3-c57d0a204da3}</Type>
<Type n="GenericFbDescription">{40d6dd8d-dfd0-493a-8e29-c9a35e1e6539}</Type>
<Type n="GenericVisualElem">{f86c2928-8614-4cca-824b-e819ac4d58c4}</Type>
<Type n="Guid">System.Guid</Type>
<Type n="Hashtable">System.Collections.Hashtable</Type>
<Type n="HotkeyConfiguration">{6b108d46-58af-4e41-a3f4-174d8f160cc4}</Type>
<Type n="Int16">System.Int16</Type>
<Type n="Int32">System.Int32</Type>
<Type n="Int64">System.Int64</Type>
<Type n="NamedStyleColor">{fa491db2-51ff-4bc1-9cd0-ce8c94ff6216}</Type>
<Type n="String">System.String</Type>
<Type n="STSnippetInputAction">{6302d3fe-6ea5-4c42-819a-a9734a133b3d}</Type>
<Type n="STSnippetInputAction[]">_3S.CoDeSys.VisualElem.STSnippetInputAction[], VisualElem.plugin, Version=3.5.13.32, Culture=neutral, PublicKeyToken=null</Type>
<Type n="TextDocument">{f3878285-8e4f-490b-bb1b-9acbb7eb04db}</Type>
<Type n="TextLine">{a5de0b0b-1cb5-4913-ac21-9d70293ec00d}</Type>
<Type n="UInt16">System.UInt16</Type>
<Type n="UInt32">System.UInt32</Type>
<Type n="VisualElemCollection">{ef9d0b20-c96e-48db-b361-2ded4063150e}</Type>
<Type n="VisualElemList">{f285c9a3-7019-446b-b98c-ccec3a0af8fa}</Type>
<Type n="VisualElemMember">{c694e3a2-5c0b-4177-ab35-cb06bd5a6a02}</Type>
<Type n="VisualElemMemberCollection">{a4b83bea-3742-489c-9fe8-d96d68dba7ab}</Type>
<Type n="VisualElemMemberList">{17e26cd1-bb9b-47fe-a3d5-18fcd63b9c96}</Type>
<Type n="VisualObject">{f18bec89-9fef-401d-9953-2f11739a6808}</Type>
<Type n="VisualObjectSize">{6ad3e88f-aee2-4766-a7ea-a8790037ef51}</Type>
<Type n="VisualObjectSizeManager">{5f612b0e-b404-455f-8177-27864e9f5332}</Type>
</TypeList>
</XmlArchive>
<ObjectProperties>
<XmlArchive>
<Data>
<o xml:space="preserve" t="VisualProperty">
<v n="VisuUsageType">0</v>
<v n="SizeX">84</v>
<v n="SizeY">205</v>
<v n="IsStartVisu">false</v>
<v n="VisuSizeMode" t="VisualVisuSizeMode">Specified</v>
<v n="Internal">false</v>
<v n="DialogIsOpaque">false</v>
<v n="DialogIsOpaqueIsSet">false</v>
</o>
</Data>
<TypeList>
<Type n="Boolean">System.Boolean</Type>
<Type n="Int32">System.Int32</Type>
<Type n="VisualProperty">{477d844b-9b2a-407e-90a4-d36fd6dde2fc}</Type>
<Type n="VisualVisuSizeMode">{34718b76-91f6-43de-8c65-b77e0b1ee621}</Type>
</TypeList>
</XmlArchive>
</ObjectProperties>
</Visu>
</TcPlcObject>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -0,0 +1,607 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<Visu Name="TempSetFrameUnit" Id="{29a336e4-4b5e-4803-b1d0-fd9a7dc28d9f}">
<XmlArchive>
<Data>
<o xml:space="preserve" t="VisualObject">
<n n="LastVisuLanguageModelEntry" />
<v n="UniqueIdGenerator">"6"</v>
<o n="VisualElemList" t="VisualElemList">
<l n="VisualElementList" t="VisualElemCollection" cet="GenericVisualElem">
<o>
<a n="ConfiguredComplexInputs" et="ComplexInput" />
<l n="Elements" t="ArrayList" />
<n n="VisualElementDescription" />
<o n="VisualElemMemberList" t="VisualElemMemberList">
<l n="VisualElemMemberList" t="VisualElemMemberCollection" cet="VisualElemMember">
<o>
<v n="Id">571893170L</v>
<v n="Value">""</v>
</o>
<o>
<v n="Id">494569607L</v>
<l n="Value" t="ArrayList" cet="UInt32">
<v>4278190080</v>
</l>
</o>
<o>
<v n="Id">2812299069L</v>
<l n="Value" t="ArrayList" cet="UInt32">
<v>4290822336</v>
</l>
</o>
<o>
<v n="Id">135947015L</v>
<l n="Value" t="ArrayList" cet="NamedStyleColor">
<o>
<v n="Color">-65536</v>
<v n="CanonicalName">"Element-Alarm-Frame-Color"</v>
</o>
</l>
</o>
<o>
<v n="Id">493260384L</v>
<l n="Value" t="ArrayList" cet="NamedStyleColor">
<o>
<v n="Color">-12337</v>
<v n="CanonicalName">"Element-Alarm-Fill-Color"</v>
</o>
</l>
</o>
<o>
<v n="Id">2340015797L</v>
<v n="Value">"HCENTER"</v>
</o>
<o>
<v n="Id">2565699834L</v>
<v n="Value">"VCENTER"</v>
</o>
<o>
<v n="Id">4134387352L</v>
<v n="Value">"NONE"</v>
</o>
<o>
<v n="Id">1603690730L</v>
<v n="Value">"Arial"</v>
</o>
<o>
<v n="Id">4253639993L</v>
<v n="Value" t="Int16">12</v>
</o>
<o>
<v n="Id">2729990903L</v>
<v n="Value">0U</v>
</o>
<o>
<v n="Id">1213979116L</v>
<v n="Value">0U</v>
</o>
<o>
<v n="Id">3488306084L</v>
<v n="Value">4278190080U</v>
</o>
<o>
<v n="Id">1999528970L</v>
<v n="Value">"&lt;toggle/tap variable&gt;"</v>
</o>
<o>
<v n="Id">3719097617L</v>
<v n="Value">0</v>
</o>
<o>
<v n="Id">1649127785L</v>
<v n="Value" t="Int16">94</v>
</o>
<o>
<v n="Id">357335551L</v>
<v n="Value" t="Int16">1</v>
</o>
<o>
<v n="Id">2422045748L</v>
<v n="Value" t="Int16">91</v>
</o>
<o>
<v n="Id">2134141914L</v>
<v n="Value" t="Int16">30</v>
</o>
<o>
<v n="Id">3729828405L</v>
<l n="Value" t="ArrayList" cet="FontDescription">
<o>
<v n="FontStyle">0</v>
<v n="AdditionalFontStyle" t="UInt16">0</v>
<v n="ExplicitColor">-16777216</v>
<v n="FontName">"Tahoma"</v>
<v n="FontSize">18</v>
<v n="ScriptIdentification">0</v>
<v n="DoubleFontSize" t="Double">0</v>
<o n="NamedColor" t="NamedStyleColor">
<v n="Color">-16777216</v>
<v n="CanonicalName">"Font-Default-Color"</v>
</o>
</o>
</l>
</o>
<o>
<v n="Id">1337389588L</v>
<v n="Value">"FROM_STYLE"</v>
</o>
<o>
<v n="Id">2678395525L</v>
<v n="Value">1U</v>
</o>
<o>
<v n="Id">390574330L</v>
<v n="Value">"%2.1f °C"</v>
</o>
<o>
<v n="Id">2827249010L</v>
<v n="Value">"PS_SOLID"</v>
</o>
<o>
<v n="Id">2597686782L</v>
<v n="Value">false</v>
</o>
<o>
<v n="Id">2477733581L</v>
<v n="Value">"INT_TO_REAL(_app.iT_SP)/10.0"</v>
</o>
<o>
<v n="Id">2880254039L</v>
<v n="Value">"NOT _app.HMI_Visible"</v>
</o>
<o>
<v n="Id">823443203L</v>
<v n="Value">"1179"</v>
</o>
</l>
</o>
<v n="VisualElementName">"Textfield"</v>
<v n="VisualElementTypeName">"VisuFbElemTextfield"</v>
<v n="VisualElementIsRectangle">true</v>
<v n="VisualElementIdentifier">"GenElemInst_2"</v>
<n n="VisualElementOfflinePaintCommands" />
<n n="VisualElementFrameInformation" />
<d n="VisualElementInputActions" t="Hashtable" ckt="String" cvt="InputBoxInputAction[]">
<v>OnMouseClick</v>
<a cet="InputBoxInputAction">
<o>
<v n="InputBoxVariable">"_app.iT_SP"</v>
<v n="InputType">"VisuDialogs.Numpad"</v>
<v n="InputBoxMin">""</v>
<v n="InputBoxMax">""</v>
<v n="InputBoxDialogTitle">""</v>
<v n="Password">false</v>
<v n="UseTextOutputVariable">false</v>
<v n="TextOutputVariableInitialized">true</v>
<v n="OtherVarConversion">""</v>
<v n="Format">""</v>
<v n="DialogPosition" t="DialogPositionSetting">UseGlobalSetting</v>
<v n="DialogXPos">""</v>
<v n="DialogYPos">""</v>
</o>
</a>
</d>
<v n="VisualElementIdentification">{28175e10-ea4d-4fda-af81-dd7459128f4a}</v>
<v n="VisualElementOwningObjectGuid">{29a336e4-4b5e-4803-b1d0-fd9a7dc28d9f}</v>
<a n="LMGuids" et="Guid" />
<d n="SubElements" t="Hashtable" />
<v n="VisualElementId">1</v>
<l n="UserManagementAccessRights" t="ArrayList" />
</o>
<o>
<a n="ConfiguredComplexInputs" et="ComplexInput" />
<l n="Elements" t="ArrayList" />
<n n="VisualElementDescription" />
<o n="VisualElemMemberList" t="VisualElemMemberList">
<l n="VisualElemMemberList" t="VisualElemMemberCollection" cet="VisualElemMember">
<o>
<v n="Id">571893170L</v>
<v n="Value">""</v>
</o>
<o>
<v n="Id">494569607L</v>
<l n="Value" t="ArrayList" cet="NamedStyleColor">
<o>
<v n="Color">-2830136</v>
<v n="CanonicalName">"Element-Frame-Color"</v>
</o>
</l>
</o>
<o>
<v n="Id">2812299069L</v>
<l n="Value" t="ArrayList" cet="UInt32">
<v>4290822336</v>
</l>
</o>
<o>
<v n="Id">135947015L</v>
<l n="Value" t="ArrayList" cet="NamedStyleColor">
<o>
<v n="Color">-65536</v>
<v n="CanonicalName">"Element-Alarm-Frame-Color"</v>
</o>
</l>
</o>
<o>
<v n="Id">493260384L</v>
<l n="Value" t="ArrayList" cet="NamedStyleColor">
<o>
<v n="Color">-12337</v>
<v n="CanonicalName">"Element-Alarm-Fill-Color"</v>
</o>
</l>
</o>
<o>
<v n="Id">2340015797L</v>
<v n="Value">"HCENTER"</v>
</o>
<o>
<v n="Id">2565699834L</v>
<v n="Value">"VCENTER"</v>
</o>
<o>
<v n="Id">4134387352L</v>
<v n="Value">"NONE"</v>
</o>
<o>
<v n="Id">1603690730L</v>
<v n="Value">"Arial"</v>
</o>
<o>
<v n="Id">4253639993L</v>
<v n="Value" t="Int16">12</v>
</o>
<o>
<v n="Id">2729990903L</v>
<v n="Value">0U</v>
</o>
<o>
<v n="Id">1213979116L</v>
<v n="Value">0U</v>
</o>
<o>
<v n="Id">3488306084L</v>
<v n="Value">4278190080U</v>
</o>
<o>
<v n="Id">1999528970L</v>
<v n="Value">"&lt;toggle/tap variable&gt;"</v>
</o>
<o>
<v n="Id">3719097617L</v>
<v n="Value">0</v>
</o>
<o>
<v n="Id">1649127785L</v>
<v n="Value" t="Int16">1</v>
</o>
<o>
<v n="Id">357335551L</v>
<v n="Value" t="Int16">1</v>
</o>
<o>
<v n="Id">2422045748L</v>
<v n="Value" t="Int16">89</v>
</o>
<o>
<v n="Id">2134141914L</v>
<v n="Value" t="Int16">30</v>
</o>
<o>
<v n="Id">3729828405L</v>
<l n="Value" t="ArrayList" cet="FontDescription">
<o>
<v n="FontStyle">2</v>
<v n="AdditionalFontStyle" t="UInt16">0</v>
<v n="ExplicitColor">-16777216</v>
<v n="FontName">"Tahoma"</v>
<v n="FontSize">16</v>
<v n="ScriptIdentification">0</v>
<v n="DoubleFontSize" t="Double">0</v>
<o n="NamedColor" t="NamedStyleColor">
<v n="Color">-16777216</v>
<v n="CanonicalName">"Font-Default-Color"</v>
</o>
</o>
</l>
</o>
<o>
<v n="Id">1337389588L</v>
<v n="Value">"FROM_STYLE"</v>
</o>
<o>
<v n="Id">2678395525L</v>
<v n="Value">1U</v>
</o>
<o>
<v n="Id">390574330L</v>
<v n="Value">"Apt. %d"</v>
</o>
<o>
<v n="Id">2827249010L</v>
<v n="Value">"PS_HOLLOW"</v>
</o>
<o>
<v n="Id">2597686782L</v>
<v n="Value">false</v>
</o>
<o>
<v n="Id">1782330054L</v>
<v n="Value">"BS_HOLLOW"</v>
</o>
<o>
<v n="Id">2477733581L</v>
<v n="Value">"_app.iAp"</v>
</o>
<o>
<v n="Id">2880254039L</v>
<v n="Value">"NOT _app.HMI_VISIBLE"</v>
</o>
<o>
<v n="Id">823443203L</v>
<v n="Value">"1312"</v>
</o>
</l>
</o>
<v n="VisualElementName">"Textfield"</v>
<v n="VisualElementTypeName">"VisuFbElemTextfield"</v>
<v n="VisualElementIsRectangle">true</v>
<v n="VisualElementIdentifier">"GenElemInst_4"</v>
<n n="VisualElementOfflinePaintCommands" />
<n n="VisualElementFrameInformation" />
<d n="VisualElementInputActions" t="Hashtable" />
<v n="VisualElementIdentification">{db7ece01-2886-450f-9e49-48be19c6affe}</v>
<v n="VisualElementOwningObjectGuid">{29a336e4-4b5e-4803-b1d0-fd9a7dc28d9f}</v>
<a n="LMGuids" et="Guid" />
<d n="SubElements" t="Hashtable" />
<v n="VisualElementId">3</v>
<l n="UserManagementAccessRights" t="ArrayList" />
</o>
</l>
<v n="BackgroundBitmapId">""</v>
<v n="BackgroundColor">16777215</v>
<o n="Background" t="BackgroundSettings">
<n n="BgGradient" />
<n n="BgNamedColor" />
<v n="BgBmpId">""</v>
<v n="BgUseBmp">false</v>
<v n="BgColor">false</v>
<v n="BgUseColor">16777215</v>
<v n="BgUseGradient">false</v>
</o>
</o>
<o n="GeneratedLMMDescriptions" t="GeneratedLanguageModelEntriesData">
<o n="GeneratedVisuFbDescription" t="GenericFbDescription">
<d n="FbMethods" t="CaseInsensitiveHashtable" ckt="String" cvt="Guid">
<v>ContainsPoint</v>
<v>f19e8e19-aea1-4f57-9425-4a3cfdbcb1bc</v>
<v>Destruct</v>
<v>d515e074-50eb-4e02-a902-6bfb348db360</v>
<v>ElementInfo</v>
<v>0f6a1135-f84e-4056-b132-9f6054fc6f60</v>
<v>FB_Exit</v>
<v>47832874-a35c-4ae9-83d8-e8132668052c</v>
<v>FB_Reinit</v>
<v>d16a689d-c482-463f-9f9a-7a5f4f98c441</v>
<v>GetClientData</v>
<v>7894c069-bc2b-4b1d-b150-f4333ee73483</v>
<v>GetElementArray</v>
<v>cc1c9f03-e431-4dad-9846-6a75ec01b380</v>
<v>GetElementIdArray</v>
<v>62df7591-b441-4d16-be65-76e9046a359b</v>
<v>GetInitializeVersion</v>
<v>9fb1904c-bf4b-4407-8442-6606b91d29a8</v>
<v>GetLocalUsergroup</v>
<v>b268f1e5-8a04-41c3-bee6-803edae27cf6</v>
<v>GetName</v>
<v>a0b78fa0-0c66-4880-8586-7f3ee4047229</v>
<v>GetNamespace</v>
<v>bfa06094-beb2-40d1-9e2c-63625268b580</v>
<v>GetSize</v>
<v>d052699d-730b-4ead-91cf-bac141b0e6a8</v>
<v>GetSurroundingRect</v>
<v>a555c1e8-37d3-4a0e-a0b5-70317d3e9f2e</v>
<v>GetText</v>
<v>f3f49492-2070-439b-beb9-c3971189db2f</v>
<v>GetTextProperties</v>
<v>c2e8c115-42b1-46fb-bef5-303c4a4fba28</v>
<v>GetTooltip</v>
<v>59544e77-0402-435c-b618-4ecb3111766e</v>
<v>GetTranslator</v>
<v>f344ec53-50e7-49d1-944b-3a52bb700f1b</v>
<v>GetUpdateRects</v>
<v>8ee69637-d90b-4645-8601-c240de42cc5a</v>
<v>HandleInput</v>
<v>4009767a-9402-4c32-9fef-b856ca3187d4</v>
<v>HasInputAccess</v>
<v>bfcd45d6-fe54-4916-b116-edbe79f03e2f</v>
<v>HasInputAccessIntern</v>
<v>4ac4c6ce-58f6-5fa6-b716-a9d48a130d05</v>
<v>HasVisibilityAccess</v>
<v>0b79f892-c279-4bd4-899e-b3e8301370d6</v>
<v>HasVisibilityAccessIntern</v>
<v>14f4d579-3420-5f52-8892-a69f2eb7cb5a</v>
<v>Initialize</v>
<v>8b2cdb6e-7999-40ae-9cc7-1c972359e4ef</v>
<v>IsAntialiasingInactive</v>
<v>bbebec26-5868-4486-a92d-41e6aa643f99</v>
<v>Paint</v>
<v>5cce25a7-d0bb-41d6-b47a-fc935551a918</v>
<v>SetClientData</v>
<v>89fb3076-b7d4-4f2b-b809-610431a6a75c</v>
<v>SetStaticState</v>
<v>98c3dd4d-e964-42be-a772-641e7c10581d</v>
<v>SetVisuFlagsInternal</v>
<v>1642a601-4746-4ee3-b696-c53c6525e342</v>
<v>Update</v>
<v>1236a7a8-7643-4120-87b7-23c99699feaa</v>
</d>
<v n="FbName">"NotImportant"</v>
<v n="FbGuid">{29a336e4-4b5e-4803-b1d0-fd9a7dc28d9f}</v>
</o>
<v n="GeneratedGlobalVisuVarsGuid">{30c38352-895e-41df-9fbb-c1263d4a505a}</v>
<v n="GeneratedGlobalTheVisuVarlistGuid">{3285f08e-753f-4b28-9d5b-5068930e616c}</v>
<v n="GeneratedGlobalVisuConstants">{8c41780c-0141-4474-b640-2c8c9f49137c}</v>
<d n="GeneratedAllElementsEntries" t="Hashtable" />
<o n="VisuRegDesc" t="GenericFbDescription">
<d n="FbMethods" t="CaseInsensitiveHashtable" ckt="String" cvt="Guid">
<v>FB_Exit</v>
<v>ce879719-ab8d-4d8c-ac68-7d8360cf645d</v>
<v>FB_Init</v>
<v>67b2a72a-23d1-49f8-a951-98422dcffd9f</v>
<v>FB_Reinit</v>
<v>78f0c5f3-08b0-4edc-adaa-b3a5c3573015</v>
</d>
<v n="FbName">"NotImportant"</v>
<v n="FbGuid">{a1fd6c95-dcfd-4472-9b51-643c80bc3a32}</v>
</o>
<v n="VisuRegisterGvl">{f0cd658a-7f75-4907-a4f3-dc440a4797a5}</v>
<n n="SettingsPou" />
<n n="MemManPou" />
<o n="InputsPou" t="GenericFbDescription">
<d n="FbMethods" t="CaseInsensitiveHashtable" ckt="String" cvt="Guid">
<v>abstrGetDefaultCursor</v>
<v>d2156229-d09a-417c-86c2-7580f74215b2</v>
<v>ExecuteDialogClosed</v>
<v>f10dfba6-5937-4606-92ea-6b3049b0d63b</v>
<v>ExecuteKeyDown</v>
<v>4dd14ce0-9f4a-4771-b634-301bc19b2378</v>
<v>ExecuteKeyUp</v>
<v>fd54fd63-a58d-4aae-8e2c-90583465835c</v>
<v>ExecuteLooseCapture</v>
<v>ce8748e1-a5a6-43c1-adb3-985983f078ff</v>
<v>ExecuteMouseClick</v>
<v>20b50b9f-1d6e-4f32-8768-69205cd0a8b5</v>
<v>ExecuteMouseDblClick</v>
<v>fb68cf52-e727-4525-ad40-38c8367d48f3</v>
<v>ExecuteMouseDown</v>
<v>dd44ff7f-4fb3-493e-81b4-733be11ae720</v>
<v>ExecuteMouseEnter</v>
<v>70cbd5d1-15d6-4dfe-bf03-dfe3e734e592</v>
<v>ExecuteMouseLeave</v>
<v>e8f92c1a-68fa-4993-bf59-742bdc15280b</v>
<v>ExecuteMouseMove</v>
<v>bd4bcc29-b6e0-486a-9fe0-54229dc9c46e</v>
<v>ExecuteMouseUp</v>
<v>264d423f-2d29-4093-b28f-dcb8631f58e7</v>
<v>GetElementInfo</v>
<v>9f36d33f-a25c-4c0a-ac0a-8e5858e29b0a</v>
<v>Initialize</v>
<v>2cb87cbf-ef8f-496f-b89b-bd3e8bb816e8</v>
</d>
<v n="FbName">"NotImportant"</v>
<v n="FbGuid">{0fe1bff5-e518-4a24-b067-af94bb9a2e69}</v>
</o>
<v n="DialogDut">{9ff6fb40-ac3f-416d-a78c-7966a109de4d}</v>
</o>
<v n="LastUsedIdForIdentifier">5</v>
<o n="TextDocument" t="TextDocument">
<a n="TextLines" cet="TextLine">
<o>
<v n="Id">2L</v>
<n n="Tag" />
<v n="Text">"VAR_IN_OUT"</v>
</o>
<o>
<v n="Id">3L</v>
<n n="Tag" />
<v n="Text">" _app: Apartm;"</v>
</o>
<o>
<v n="Id">1L</v>
<n n="Tag" />
<v n="Text">"END_VAR"</v>
</o>
</a>
</o>
<v n="GvlCreated">false</v>
<n n="LMEntry" />
<v n="ProfileCompatibilityId">4140216668L</v>
<v n="LMVerMinor">0</v>
<v n="LMVerMajor">1</v>
<o n="Hotkeys" t="HotkeyConfiguration">
<v n="IdMin">481037385728L</v>
<v n="IdMax">549755813887L</v>
<v n="Id">481037385728L</v>
<v n="IdMask">549754765312L</v>
<v n="IdStep">1048576L</v>
<l2 n="Inputs" />
</o>
<o n="VisuSizeManager" t="VisualObjectSizeManager">
<d2 n="Size" ckt="Int32" cvt="VisualObjectSize">
<v>0</v>
<o>
<v n="Width">186</v>
<v n="Height">32</v>
</o>
<v>1</v>
<o>
<v n="Width">186</v>
<v n="Height">32</v>
</o>
</d2>
<v n="Version">1</v>
</o>
</o>
</Data>
<TypeList>
<Type n="ArrayList">System.Collections.ArrayList</Type>
<Type n="BackgroundSettings">{1038f12c-dd4b-4f96-87a3-a350fe8f3552}</Type>
<Type n="Boolean">System.Boolean</Type>
<Type n="CaseInsensitiveHashtable">{7df88604-7ac5-4e36-91c4-55e4fdad3e68}</Type>
<Type n="ComplexInput">{1de566f6-72a7-494c-9353-9a418172c96e}</Type>
<Type n="DialogPositionSetting">{16f3f59a-37ad-4991-a1af-cc2926974e08}</Type>
<Type n="Double">System.Double</Type>
<Type n="FontDescription">{896a5e54-96c3-433b-96d2-4f1442fef591}</Type>
<Type n="GeneratedLanguageModelEntriesData">{703465dc-4679-4ff2-bcc3-c57d0a204da3}</Type>
<Type n="GenericFbDescription">{40d6dd8d-dfd0-493a-8e29-c9a35e1e6539}</Type>
<Type n="GenericVisualElem">{f86c2928-8614-4cca-824b-e819ac4d58c4}</Type>
<Type n="Guid">System.Guid</Type>
<Type n="Hashtable">System.Collections.Hashtable</Type>
<Type n="HotkeyConfiguration">{6b108d46-58af-4e41-a3f4-174d8f160cc4}</Type>
<Type n="InputBoxInputAction">{e8e7e747-f76f-4dee-ab1c-b9637e41ac26}</Type>
<Type n="InputBoxInputAction[]">_3S.CoDeSys.VisualElem.InputBoxInputAction[], VisualElem.plugin, Version=3.5.13.32, Culture=neutral, PublicKeyToken=null</Type>
<Type n="Int16">System.Int16</Type>
<Type n="Int32">System.Int32</Type>
<Type n="Int64">System.Int64</Type>
<Type n="NamedStyleColor">{fa491db2-51ff-4bc1-9cd0-ce8c94ff6216}</Type>
<Type n="String">System.String</Type>
<Type n="TextDocument">{f3878285-8e4f-490b-bb1b-9acbb7eb04db}</Type>
<Type n="TextLine">{a5de0b0b-1cb5-4913-ac21-9d70293ec00d}</Type>
<Type n="UInt16">System.UInt16</Type>
<Type n="UInt32">System.UInt32</Type>
<Type n="VisualElemCollection">{ef9d0b20-c96e-48db-b361-2ded4063150e}</Type>
<Type n="VisualElemList">{f285c9a3-7019-446b-b98c-ccec3a0af8fa}</Type>
<Type n="VisualElemMember">{c694e3a2-5c0b-4177-ab35-cb06bd5a6a02}</Type>
<Type n="VisualElemMemberCollection">{a4b83bea-3742-489c-9fe8-d96d68dba7ab}</Type>
<Type n="VisualElemMemberList">{17e26cd1-bb9b-47fe-a3d5-18fcd63b9c96}</Type>
<Type n="VisualObject">{f18bec89-9fef-401d-9953-2f11739a6808}</Type>
<Type n="VisualObjectSize">{6ad3e88f-aee2-4766-a7ea-a8790037ef51}</Type>
<Type n="VisualObjectSizeManager">{5f612b0e-b404-455f-8177-27864e9f5332}</Type>
</TypeList>
</XmlArchive>
<ObjectProperties>
<XmlArchive>
<Data>
<o xml:space="preserve" t="VisualProperty">
<v n="VisuUsageType">0</v>
<v n="SizeX">186</v>
<v n="SizeY">32</v>
<v n="IsStartVisu">false</v>
<v n="VisuSizeMode" t="VisualVisuSizeMode">Specified</v>
<v n="Internal">false</v>
<v n="DialogIsOpaque">false</v>
<v n="DialogIsOpaqueIsSet">false</v>
</o>
</Data>
<TypeList>
<Type n="Boolean">System.Boolean</Type>
<Type n="Int32">System.Int32</Type>
<Type n="VisualProperty">{477d844b-9b2a-407e-90a4-d36fd6dde2fc}</Type>
<Type n="VisualVisuSizeMode">{34718b76-91f6-43de-8c65-b77e0b1ee621}</Type>
</TypeList>
</XmlArchive>
</ObjectProperties>
</Visu>
</TcPlcObject>

@ -0,0 +1,607 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<Visu Name="TempSetFrameUnitII" Id="{e44e8efe-4f82-431f-ae7d-6083516fbedd}">
<XmlArchive>
<Data>
<o xml:space="preserve" t="VisualObject">
<n n="LastVisuLanguageModelEntry" />
<v n="UniqueIdGenerator">"8"</v>
<o n="VisualElemList" t="VisualElemList">
<l n="VisualElementList" t="VisualElemCollection" cet="GenericVisualElem">
<o>
<a n="ConfiguredComplexInputs" et="ComplexInput" />
<l n="Elements" t="ArrayList" />
<n n="VisualElementDescription" />
<o n="VisualElemMemberList" t="VisualElemMemberList">
<l n="VisualElemMemberList" t="VisualElemMemberCollection" cet="VisualElemMember">
<o>
<v n="Id">571893170L</v>
<v n="Value">""</v>
</o>
<o>
<v n="Id">494569607L</v>
<l n="Value" t="ArrayList" cet="UInt32">
<v>4278190080</v>
</l>
</o>
<o>
<v n="Id">2812299069L</v>
<l n="Value" t="ArrayList" cet="UInt32">
<v>4290822336</v>
</l>
</o>
<o>
<v n="Id">135947015L</v>
<l n="Value" t="ArrayList" cet="NamedStyleColor">
<o>
<v n="Color">-65536</v>
<v n="CanonicalName">"Element-Alarm-Frame-Color"</v>
</o>
</l>
</o>
<o>
<v n="Id">493260384L</v>
<l n="Value" t="ArrayList" cet="NamedStyleColor">
<o>
<v n="Color">-12337</v>
<v n="CanonicalName">"Element-Alarm-Fill-Color"</v>
</o>
</l>
</o>
<o>
<v n="Id">2340015797L</v>
<v n="Value">"HCENTER"</v>
</o>
<o>
<v n="Id">2565699834L</v>
<v n="Value">"VCENTER"</v>
</o>
<o>
<v n="Id">4134387352L</v>
<v n="Value">"NONE"</v>
</o>
<o>
<v n="Id">1603690730L</v>
<v n="Value">"Arial"</v>
</o>
<o>
<v n="Id">4253639993L</v>
<v n="Value" t="Int16">12</v>
</o>
<o>
<v n="Id">2729990903L</v>
<v n="Value">0U</v>
</o>
<o>
<v n="Id">1213979116L</v>
<v n="Value">0U</v>
</o>
<o>
<v n="Id">3488306084L</v>
<v n="Value">4278190080U</v>
</o>
<o>
<v n="Id">1999528970L</v>
<v n="Value">"&lt;toggle/tap variable&gt;"</v>
</o>
<o>
<v n="Id">3719097617L</v>
<v n="Value">0</v>
</o>
<o>
<v n="Id">1649127785L</v>
<v n="Value" t="Int16">72</v>
</o>
<o>
<v n="Id">357335551L</v>
<v n="Value" t="Int16">0</v>
</o>
<o>
<v n="Id">2422045748L</v>
<v n="Value" t="Int16">74</v>
</o>
<o>
<v n="Id">2134141914L</v>
<v n="Value" t="Int16">30</v>
</o>
<o>
<v n="Id">3729828405L</v>
<l n="Value" t="ArrayList" cet="FontDescription">
<o>
<v n="FontStyle">0</v>
<v n="AdditionalFontStyle" t="UInt16">0</v>
<v n="ExplicitColor">-16777216</v>
<v n="FontName">"Tahoma"</v>
<v n="FontSize">18</v>
<v n="ScriptIdentification">0</v>
<v n="DoubleFontSize" t="Double">0</v>
<o n="NamedColor" t="NamedStyleColor">
<v n="Color">-16777216</v>
<v n="CanonicalName">"Font-Default-Color"</v>
</o>
</o>
</l>
</o>
<o>
<v n="Id">1337389588L</v>
<v n="Value">"FROM_STYLE"</v>
</o>
<o>
<v n="Id">2678395525L</v>
<v n="Value">1U</v>
</o>
<o>
<v n="Id">390574330L</v>
<v n="Value">"%2.1f °C"</v>
</o>
<o>
<v n="Id">2827249010L</v>
<v n="Value">"PS_SOLID"</v>
</o>
<o>
<v n="Id">2597686782L</v>
<v n="Value">false</v>
</o>
<o>
<v n="Id">2477733581L</v>
<v n="Value">"_app.fT_SP"</v>
</o>
<o>
<v n="Id">2880254039L</v>
<v n="Value">"NOT _app.bVisible"</v>
</o>
<o>
<v n="Id">823443203L</v>
<v n="Value">"1179"</v>
</o>
</l>
</o>
<v n="VisualElementName">"Textfield"</v>
<v n="VisualElementTypeName">"VisuFbElemTextfield"</v>
<v n="VisualElementIsRectangle">true</v>
<v n="VisualElementIdentifier">"GenElemInst_2"</v>
<n n="VisualElementOfflinePaintCommands" />
<n n="VisualElementFrameInformation" />
<d n="VisualElementInputActions" t="Hashtable" ckt="String" cvt="InputBoxInputAction[]">
<v>OnMouseClick</v>
<a cet="InputBoxInputAction">
<o>
<v n="InputBoxVariable">"_app.iT_SP"</v>
<v n="InputType">"VisuDialogs.Numpad"</v>
<v n="InputBoxMin">"15.0"</v>
<v n="InputBoxMax">"28.0"</v>
<v n="InputBoxDialogTitle">""</v>
<v n="Password">false</v>
<v n="UseTextOutputVariable">true</v>
<v n="TextOutputVariableInitialized">true</v>
<v n="OtherVarConversion">""</v>
<v n="Format">""</v>
<v n="DialogPosition" t="DialogPositionSetting">UseGlobalSetting</v>
<v n="DialogXPos">""</v>
<v n="DialogYPos">""</v>
</o>
</a>
</d>
<v n="VisualElementIdentification">{28175e10-ea4d-4fda-af81-dd7459128f4a}</v>
<v n="VisualElementOwningObjectGuid">{e44e8efe-4f82-431f-ae7d-6083516fbedd}</v>
<a n="LMGuids" et="Guid" />
<d n="SubElements" t="Hashtable" />
<v n="VisualElementId">1</v>
<l n="UserManagementAccessRights" t="ArrayList" />
</o>
<o>
<a n="ConfiguredComplexInputs" et="ComplexInput" />
<l n="Elements" t="ArrayList" />
<n n="VisualElementDescription" />
<o n="VisualElemMemberList" t="VisualElemMemberList">
<l n="VisualElemMemberList" t="VisualElemMemberCollection" cet="VisualElemMember">
<o>
<v n="Id">571893170L</v>
<v n="Value">""</v>
</o>
<o>
<v n="Id">494569607L</v>
<l n="Value" t="ArrayList" cet="NamedStyleColor">
<o>
<v n="Color">-2830136</v>
<v n="CanonicalName">"Element-Frame-Color"</v>
</o>
</l>
</o>
<o>
<v n="Id">2812299069L</v>
<l n="Value" t="ArrayList" cet="UInt32">
<v>4290822336</v>
</l>
</o>
<o>
<v n="Id">135947015L</v>
<l n="Value" t="ArrayList" cet="NamedStyleColor">
<o>
<v n="Color">-65536</v>
<v n="CanonicalName">"Element-Alarm-Frame-Color"</v>
</o>
</l>
</o>
<o>
<v n="Id">493260384L</v>
<l n="Value" t="ArrayList" cet="NamedStyleColor">
<o>
<v n="Color">-12337</v>
<v n="CanonicalName">"Element-Alarm-Fill-Color"</v>
</o>
</l>
</o>
<o>
<v n="Id">2340015797L</v>
<v n="Value">"HCENTER"</v>
</o>
<o>
<v n="Id">2565699834L</v>
<v n="Value">"VCENTER"</v>
</o>
<o>
<v n="Id">4134387352L</v>
<v n="Value">"NONE"</v>
</o>
<o>
<v n="Id">1603690730L</v>
<v n="Value">"Arial"</v>
</o>
<o>
<v n="Id">4253639993L</v>
<v n="Value" t="Int16">12</v>
</o>
<o>
<v n="Id">2729990903L</v>
<v n="Value">0U</v>
</o>
<o>
<v n="Id">1213979116L</v>
<v n="Value">0U</v>
</o>
<o>
<v n="Id">3488306084L</v>
<v n="Value">4278190080U</v>
</o>
<o>
<v n="Id">1999528970L</v>
<v n="Value">"&lt;toggle/tap variable&gt;"</v>
</o>
<o>
<v n="Id">3719097617L</v>
<v n="Value">0</v>
</o>
<o>
<v n="Id">1649127785L</v>
<v n="Value" t="Int16">1</v>
</o>
<o>
<v n="Id">357335551L</v>
<v n="Value" t="Int16">1</v>
</o>
<o>
<v n="Id">2422045748L</v>
<v n="Value" t="Int16">60</v>
</o>
<o>
<v n="Id">2134141914L</v>
<v n="Value" t="Int16">30</v>
</o>
<o>
<v n="Id">3729828405L</v>
<l n="Value" t="ArrayList" cet="FontDescription">
<o>
<v n="FontStyle">2</v>
<v n="AdditionalFontStyle" t="UInt16">0</v>
<v n="ExplicitColor">-16777216</v>
<v n="FontName">"Tahoma"</v>
<v n="FontSize">16</v>
<v n="ScriptIdentification">0</v>
<v n="DoubleFontSize" t="Double">0</v>
<o n="NamedColor" t="NamedStyleColor">
<v n="Color">-16777216</v>
<v n="CanonicalName">"Font-Default-Color"</v>
</o>
</o>
</l>
</o>
<o>
<v n="Id">1337389588L</v>
<v n="Value">"FROM_STYLE"</v>
</o>
<o>
<v n="Id">2678395525L</v>
<v n="Value">1U</v>
</o>
<o>
<v n="Id">390574330L</v>
<v n="Value">"Apt. %d"</v>
</o>
<o>
<v n="Id">2827249010L</v>
<v n="Value">"PS_HOLLOW"</v>
</o>
<o>
<v n="Id">2597686782L</v>
<v n="Value">false</v>
</o>
<o>
<v n="Id">1782330054L</v>
<v n="Value">"BS_HOLLOW"</v>
</o>
<o>
<v n="Id">2477733581L</v>
<v n="Value">"_app.iAp"</v>
</o>
<o>
<v n="Id">2880254039L</v>
<v n="Value">"NOT _app.bVisible"</v>
</o>
<o>
<v n="Id">823443203L</v>
<v n="Value">"1312"</v>
</o>
</l>
</o>
<v n="VisualElementName">"Textfield"</v>
<v n="VisualElementTypeName">"VisuFbElemTextfield"</v>
<v n="VisualElementIsRectangle">true</v>
<v n="VisualElementIdentifier">"GenElemInst_4"</v>
<n n="VisualElementOfflinePaintCommands" />
<n n="VisualElementFrameInformation" />
<d n="VisualElementInputActions" t="Hashtable" />
<v n="VisualElementIdentification">{db7ece01-2886-450f-9e49-48be19c6affe}</v>
<v n="VisualElementOwningObjectGuid">{e44e8efe-4f82-431f-ae7d-6083516fbedd}</v>
<a n="LMGuids" et="Guid" />
<d n="SubElements" t="Hashtable" />
<v n="VisualElementId">3</v>
<l n="UserManagementAccessRights" t="ArrayList" />
</o>
</l>
<v n="BackgroundBitmapId">""</v>
<v n="BackgroundColor">16777215</v>
<o n="Background" t="BackgroundSettings">
<n n="BgGradient" />
<n n="BgNamedColor" />
<v n="BgBmpId">""</v>
<v n="BgUseBmp">false</v>
<v n="BgColor">false</v>
<v n="BgUseColor">16777215</v>
<v n="BgUseGradient">false</v>
</o>
</o>
<o n="GeneratedLMMDescriptions" t="GeneratedLanguageModelEntriesData">
<o n="GeneratedVisuFbDescription" t="GenericFbDescription">
<d n="FbMethods" t="CaseInsensitiveHashtable" ckt="String" cvt="Guid">
<v>ContainsPoint</v>
<v>71f6929d-e13b-49c5-adf8-cdaf3d1adc7a</v>
<v>Destruct</v>
<v>cce73285-95cd-4e10-a494-25b114637f8c</v>
<v>ElementInfo</v>
<v>96e67caf-021b-45a4-9933-4e86038b6be3</v>
<v>FB_Exit</v>
<v>a2c7fda3-8f57-4e37-9215-7cbe93bdf063</v>
<v>FB_Reinit</v>
<v>1c0f7a21-a1e8-4ba1-b48c-965384d111da</v>
<v>GetClientData</v>
<v>e57fad25-8ff8-46db-9a24-58fb8da660a4</v>
<v>GetElementArray</v>
<v>c2dea097-3c96-405d-ad0c-4e3c692633db</v>
<v>GetElementIdArray</v>
<v>2146ffa4-fa74-4d44-ab56-4b28a62c33c6</v>
<v>GetInitializeVersion</v>
<v>87425a7f-f4de-43d8-8fd4-679c5d306dec</v>
<v>GetLocalUsergroup</v>
<v>ecf1a879-041d-4ecc-b1f1-f3a1c2f0ea6e</v>
<v>GetName</v>
<v>4949f30d-d9fe-4175-ab26-8d6227796a4e</v>
<v>GetNamespace</v>
<v>f3b17ab4-d2b5-4483-9f0c-71b7e3d483fa</v>
<v>GetSize</v>
<v>251ec171-6d35-4b15-abd1-0c15092a540f</v>
<v>GetSurroundingRect</v>
<v>854b4d0b-a171-434c-9860-46977ef158de</v>
<v>GetText</v>
<v>bc799183-eb4b-4fe3-b8d8-ecfc70af7821</v>
<v>GetTextProperties</v>
<v>9d50c1ba-6e81-44ef-b550-4612b6207d1b</v>
<v>GetTooltip</v>
<v>7b1dd92a-cf90-493d-922f-3a0056399e22</v>
<v>GetTranslator</v>
<v>235ece56-4899-45fb-a627-77ad7cd10be3</v>
<v>GetUpdateRects</v>
<v>85380c6b-e1e8-4f9c-a2f1-1d3a6cc32544</v>
<v>HandleInput</v>
<v>6ea43f13-209b-4f67-bda6-577d2aecd770</v>
<v>HasInputAccess</v>
<v>b02a518c-2d03-4d54-86eb-0e049e6beec1</v>
<v>HasInputAccessIntern</v>
<v>a7a9b4aa-b504-57dc-a94c-ef0c2d934bbf</v>
<v>HasVisibilityAccess</v>
<v>1ed81056-d97c-4986-ade4-1fe1a621fcf5</v>
<v>HasVisibilityAccessIntern</v>
<v>3c4621a8-646a-5e28-9294-5054c3dfbac8</v>
<v>Initialize</v>
<v>0848b914-50f4-4945-86c0-1cec38645e2f</v>
<v>IsAntialiasingInactive</v>
<v>55bbd774-391f-404a-b58d-f54eb167c5ed</v>
<v>Paint</v>
<v>4a663f2a-258f-4c38-b06d-dac036442685</v>
<v>SetClientData</v>
<v>f4194552-a3ef-4357-982e-b99baec1835b</v>
<v>SetStaticState</v>
<v>05a5ea0c-a7a3-40c6-9d17-c5f05cc55b37</v>
<v>SetVisuFlagsInternal</v>
<v>f3cabb1c-fc75-4a1c-a1bb-5f2b14ba3027</v>
<v>Update</v>
<v>be739e1e-ec70-4b0a-81a7-3f3c7e709419</v>
</d>
<v n="FbName">"NotImportant"</v>
<v n="FbGuid">{e44e8efe-4f82-431f-ae7d-6083516fbedd}</v>
</o>
<v n="GeneratedGlobalVisuVarsGuid">{febc40b2-415d-437c-b380-7e4519604991}</v>
<v n="GeneratedGlobalTheVisuVarlistGuid">{098bac23-b08b-405c-ba8f-3ef0072be967}</v>
<v n="GeneratedGlobalVisuConstants">{28b4306b-8264-4907-9d1f-3c3c76ccae53}</v>
<d n="GeneratedAllElementsEntries" t="Hashtable" />
<o n="VisuRegDesc" t="GenericFbDescription">
<d n="FbMethods" t="CaseInsensitiveHashtable" ckt="String" cvt="Guid">
<v>FB_Exit</v>
<v>2ce78f9b-28e5-407d-9533-0212dff0beb5</v>
<v>FB_Init</v>
<v>eaa1ed8a-4d03-4bcf-8bb1-2a81aa408709</v>
<v>FB_Reinit</v>
<v>c496f387-bacb-4742-9f3d-26ef4c413c94</v>
</d>
<v n="FbName">"NotImportant"</v>
<v n="FbGuid">{a6862d40-a6a3-4fb3-86a0-9b2f8af0919a}</v>
</o>
<v n="VisuRegisterGvl">{7d1e2784-221f-41f3-9bd0-30740d7c2f39}</v>
<n n="SettingsPou" />
<n n="MemManPou" />
<o n="InputsPou" t="GenericFbDescription">
<d n="FbMethods" t="CaseInsensitiveHashtable" ckt="String" cvt="Guid">
<v>abstrGetDefaultCursor</v>
<v>55d4414b-3973-416b-a29a-dd59b5dc7e90</v>
<v>ExecuteDialogClosed</v>
<v>aaa65480-4848-43e3-a0fa-1326d8270b59</v>
<v>ExecuteKeyDown</v>
<v>471e9b36-2bcf-4ddb-a393-62b049c57de5</v>
<v>ExecuteKeyUp</v>
<v>c54fbbae-9e1e-442d-a5b7-6580dcfbac02</v>
<v>ExecuteLooseCapture</v>
<v>2d798a1b-efcb-4d08-b210-07c1b5c6551b</v>
<v>ExecuteMouseClick</v>
<v>8abd6616-5139-4034-869b-c4155b48ac01</v>
<v>ExecuteMouseDblClick</v>
<v>9448966c-2a63-4dc1-90ae-63544b46f4ec</v>
<v>ExecuteMouseDown</v>
<v>c16d52c9-aefd-44ec-9de6-da08b1ee7a8e</v>
<v>ExecuteMouseEnter</v>
<v>c1b618de-84b9-440b-9d69-f809ae34fb12</v>
<v>ExecuteMouseLeave</v>
<v>255c16b7-a432-44aa-8bec-9a1f972a8904</v>
<v>ExecuteMouseMove</v>
<v>54316402-bde6-4dfc-a2b7-c10d3fef48af</v>
<v>ExecuteMouseUp</v>
<v>208beaa4-86e6-495e-a85b-4a6f4e6fe008</v>
<v>GetElementInfo</v>
<v>69cd6a01-dcac-4a24-b2e3-9d893fedb459</v>
<v>Initialize</v>
<v>4643e905-c95b-4c71-9ea2-e4b286319a67</v>
</d>
<v n="FbName">"NotImportant"</v>
<v n="FbGuid">{072ac5f5-f972-4c8f-b19a-fe0562fb4f68}</v>
</o>
<v n="DialogDut">{c815c77b-cb73-47c0-ba66-7fb64032abf6}</v>
</o>
<v n="LastUsedIdForIdentifier">5</v>
<o n="TextDocument" t="TextDocument">
<a n="TextLines" cet="TextLine">
<o>
<v n="Id">7L</v>
<n n="Tag" />
<v n="Text">"VAR_IN_OUT"</v>
</o>
<o>
<v n="Id">8L</v>
<n n="Tag" />
<v n="Text">" _app: HMI_ApartmDisplay;"</v>
</o>
<o>
<v n="Id">1L</v>
<n n="Tag" />
<v n="Text">"END_VAR"</v>
</o>
</a>
</o>
<v n="GvlCreated">false</v>
<n n="LMEntry" />
<v n="ProfileCompatibilityId">4140216668L</v>
<v n="LMVerMinor">0</v>
<v n="LMVerMajor">1</v>
<o n="Hotkeys" t="HotkeyConfiguration">
<v n="IdMin">481037385728L</v>
<v n="IdMax">549755813887L</v>
<v n="Id">481037385728L</v>
<v n="IdMask">549754765312L</v>
<v n="IdStep">1048576L</v>
<l2 n="Inputs" />
</o>
<o n="VisuSizeManager" t="VisualObjectSizeManager">
<d2 n="Size" ckt="Int32" cvt="VisualObjectSize">
<v>0</v>
<o>
<v n="Width">185</v>
<v n="Height">31</v>
</o>
<v>1</v>
<o>
<v n="Width">185</v>
<v n="Height">31</v>
</o>
</d2>
<v n="Version">1</v>
</o>
</o>
</Data>
<TypeList>
<Type n="ArrayList">System.Collections.ArrayList</Type>
<Type n="BackgroundSettings">{1038f12c-dd4b-4f96-87a3-a350fe8f3552}</Type>
<Type n="Boolean">System.Boolean</Type>
<Type n="CaseInsensitiveHashtable">{7df88604-7ac5-4e36-91c4-55e4fdad3e68}</Type>
<Type n="ComplexInput">{1de566f6-72a7-494c-9353-9a418172c96e}</Type>
<Type n="DialogPositionSetting">{16f3f59a-37ad-4991-a1af-cc2926974e08}</Type>
<Type n="Double">System.Double</Type>
<Type n="FontDescription">{896a5e54-96c3-433b-96d2-4f1442fef591}</Type>
<Type n="GeneratedLanguageModelEntriesData">{703465dc-4679-4ff2-bcc3-c57d0a204da3}</Type>
<Type n="GenericFbDescription">{40d6dd8d-dfd0-493a-8e29-c9a35e1e6539}</Type>
<Type n="GenericVisualElem">{f86c2928-8614-4cca-824b-e819ac4d58c4}</Type>
<Type n="Guid">System.Guid</Type>
<Type n="Hashtable">System.Collections.Hashtable</Type>
<Type n="HotkeyConfiguration">{6b108d46-58af-4e41-a3f4-174d8f160cc4}</Type>
<Type n="InputBoxInputAction">{e8e7e747-f76f-4dee-ab1c-b9637e41ac26}</Type>
<Type n="InputBoxInputAction[]">_3S.CoDeSys.VisualElem.InputBoxInputAction[], VisualElem.plugin, Version=3.5.13.32, Culture=neutral, PublicKeyToken=null</Type>
<Type n="Int16">System.Int16</Type>
<Type n="Int32">System.Int32</Type>
<Type n="Int64">System.Int64</Type>
<Type n="NamedStyleColor">{fa491db2-51ff-4bc1-9cd0-ce8c94ff6216}</Type>
<Type n="String">System.String</Type>
<Type n="TextDocument">{f3878285-8e4f-490b-bb1b-9acbb7eb04db}</Type>
<Type n="TextLine">{a5de0b0b-1cb5-4913-ac21-9d70293ec00d}</Type>
<Type n="UInt16">System.UInt16</Type>
<Type n="UInt32">System.UInt32</Type>
<Type n="VisualElemCollection">{ef9d0b20-c96e-48db-b361-2ded4063150e}</Type>
<Type n="VisualElemList">{f285c9a3-7019-446b-b98c-ccec3a0af8fa}</Type>
<Type n="VisualElemMember">{c694e3a2-5c0b-4177-ab35-cb06bd5a6a02}</Type>
<Type n="VisualElemMemberCollection">{a4b83bea-3742-489c-9fe8-d96d68dba7ab}</Type>
<Type n="VisualElemMemberList">{17e26cd1-bb9b-47fe-a3d5-18fcd63b9c96}</Type>
<Type n="VisualObject">{f18bec89-9fef-401d-9953-2f11739a6808}</Type>
<Type n="VisualObjectSize">{6ad3e88f-aee2-4766-a7ea-a8790037ef51}</Type>
<Type n="VisualObjectSizeManager">{5f612b0e-b404-455f-8177-27864e9f5332}</Type>
</TypeList>
</XmlArchive>
<ObjectProperties>
<XmlArchive>
<Data>
<o xml:space="preserve" t="VisualProperty">
<v n="VisuUsageType">0</v>
<v n="SizeX">185</v>
<v n="SizeY">31</v>
<v n="IsStartVisu">false</v>
<v n="VisuSizeMode" t="VisualVisuSizeMode">Specified</v>
<v n="Internal">false</v>
<v n="DialogIsOpaque">false</v>
<v n="DialogIsOpaqueIsSet">false</v>
</o>
</Data>
<TypeList>
<Type n="Boolean">System.Boolean</Type>
<Type n="Int32">System.Int32</Type>
<Type n="VisualProperty">{477d844b-9b2a-407e-90a4-d36fd6dde2fc}</Type>
<Type n="VisualVisuSizeMode">{34718b76-91f6-43de-8c65-b77e0b1ee621}</Type>
</TypeList>
</XmlArchive>
</ObjectProperties>
</Visu>
</TcPlcObject>

@ -0,0 +1,686 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<Visu Name="TemperatureFrameUnit" Id="{4002f308-75d3-4013-b6d3-1d6b4771e763}">
<XmlArchive>
<Data>
<o xml:space="preserve" t="VisualObject">
<n n="LastVisuLanguageModelEntry" />
<v n="UniqueIdGenerator">"3"</v>
<o n="VisualElemList" t="VisualElemList">
<l n="VisualElementList" t="VisualElemCollection" cet="GenericVisualElem">
<o>
<a n="ConfiguredComplexInputs" et="ComplexInput" />
<l n="Elements" t="ArrayList" />
<n n="VisualElementDescription" />
<o n="VisualElemMemberList" t="VisualElemMemberList">
<l n="VisualElemMemberList" t="VisualElemMemberCollection" cet="VisualElemMember">
<o>
<v n="Id">571893170L</v>
<v n="Value">""</v>
</o>
<o>
<v n="Id">494569607L</v>
<l n="Value" t="ArrayList" cet="NamedStyleColor">
<o>
<v n="Color">-2830136</v>
<v n="CanonicalName">"Element-Frame-Color"</v>
</o>
</l>
</o>
<o>
<v n="Id">2812299069L</v>
<l n="Value" t="ArrayList" cet="UInt32">
<v>4290822336</v>
</l>
</o>
<o>
<v n="Id">135947015L</v>
<l n="Value" t="ArrayList" cet="NamedStyleColor">
<o>
<v n="Color">-65536</v>
<v n="CanonicalName">"Element-Alarm-Frame-Color"</v>
</o>
</l>
</o>
<o>
<v n="Id">493260384L</v>
<l n="Value" t="ArrayList" cet="NamedStyleColor">
<o>
<v n="Color">-12337</v>
<v n="CanonicalName">"Element-Alarm-Fill-Color"</v>
</o>
</l>
</o>
<o>
<v n="Id">2340015797L</v>
<v n="Value">"HCENTER"</v>
</o>
<o>
<v n="Id">2565699834L</v>
<v n="Value">"VCENTER"</v>
</o>
<o>
<v n="Id">4134387352L</v>
<v n="Value">"NONE"</v>
</o>
<o>
<v n="Id">1603690730L</v>
<v n="Value">"Arial"</v>
</o>
<o>
<v n="Id">4253639993L</v>
<v n="Value" t="Int16">12</v>
</o>
<o>
<v n="Id">2729990903L</v>
<v n="Value">0U</v>
</o>
<o>
<v n="Id">1213979116L</v>
<v n="Value">0U</v>
</o>
<o>
<v n="Id">3488306084L</v>
<v n="Value">4278190080U</v>
</o>
<o>
<v n="Id">1999528970L</v>
<v n="Value">"&lt;toggle/tap variable&gt;"</v>
</o>
<o>
<v n="Id">3719097617L</v>
<v n="Value">0</v>
</o>
<o>
<v n="Id">1649127785L</v>
<v n="Value" t="Int16">94</v>
</o>
<o>
<v n="Id">357335551L</v>
<v n="Value" t="Int16">1</v>
</o>
<o>
<v n="Id">2422045748L</v>
<v n="Value" t="Int16">91</v>
</o>
<o>
<v n="Id">2134141914L</v>
<v n="Value" t="Int16">30</v>
</o>
<o>
<v n="Id">3729828405L</v>
<l n="Value" t="ArrayList" cet="FontDescription">
<o>
<v n="FontStyle">0</v>
<v n="AdditionalFontStyle" t="UInt16">0</v>
<v n="ExplicitColor">-16777216</v>
<v n="FontName">"Tahoma"</v>
<v n="FontSize">18</v>
<v n="ScriptIdentification">0</v>
<v n="DoubleFontSize" t="Double">0</v>
<o n="NamedColor" t="NamedStyleColor">
<v n="Color">-16777216</v>
<v n="CanonicalName">"Font-Default-Color"</v>
</o>
</o>
</l>
</o>
<o>
<v n="Id">1337389588L</v>
<v n="Value">"FROM_STYLE"</v>
</o>
<o>
<v n="Id">2678395525L</v>
<v n="Value">1U</v>
</o>
<o>
<v n="Id">390574330L</v>
<v n="Value">"%2.1f °C"</v>
</o>
<o>
<v n="Id">2827249010L</v>
<v n="Value">"PS_HOLLOW"</v>
</o>
<o>
<v n="Id">2597686782L</v>
<v n="Value">false</v>
</o>
<o>
<v n="Id">2477733581L</v>
<v n="Value">"INT_TO_REAL(_app.iT_PV)/10.0"</v>
</o>
<o>
<v n="Id">2880254039L</v>
<v n="Value">"NOT _app.HMI_VISIBLE"</v>
</o>
<o>
<v n="Id">823443203L</v>
<v n="Value">"1179"</v>
</o>
</l>
</o>
<v n="VisualElementName">"Textfield"</v>
<v n="VisualElementTypeName">"VisuFbElemTextfield"</v>
<v n="VisualElementIsRectangle">true</v>
<v n="VisualElementIdentifier">"GenElemInst_2"</v>
<n n="VisualElementOfflinePaintCommands" />
<n n="VisualElementFrameInformation" />
<d n="VisualElementInputActions" t="Hashtable" />
<v n="VisualElementIdentification">{57afbc17-9d0b-484f-a08b-919ff9711f22}</v>
<v n="VisualElementOwningObjectGuid">{4002f308-75d3-4013-b6d3-1d6b4771e763}</v>
<a n="LMGuids" et="Guid" />
<d n="SubElements" t="Hashtable" />
<v n="VisualElementId">1</v>
<l n="UserManagementAccessRights" t="ArrayList" />
</o>
<o>
<a n="ConfiguredComplexInputs" et="ComplexInput" />
<l n="Elements" t="ArrayList" />
<n n="VisualElementDescription" />
<o n="VisualElemMemberList" t="VisualElemMemberList">
<l n="VisualElemMemberList" t="VisualElemMemberCollection" cet="VisualElemMember">
<o>
<v n="Id">2812299069L</v>
<v n="Value">4294967295U</v>
</o>
<o>
<v n="Id">494569607L</v>
<v n="Value">4278190080U</v>
</o>
<o>
<v n="Id">3719097617L</v>
<v n="Value">0</v>
</o>
<o>
<v n="Id">1649127785L</v>
<v n="Value">191</v>
</o>
<o>
<v n="Id">357335551L</v>
<v n="Value" t="Int16">1</v>
</o>
<o>
<v n="Id">2422045748L</v>
<v n="Value" t="Int16">30</v>
</o>
<o>
<v n="Id">2134141914L</v>
<v n="Value" t="Int16">30</v>
</o>
<o>
<v n="Id">4062784938L</v>
<v n="Value">"Element-Lamp-Lamp1-Green"</v>
</o>
<o>
<v n="Id">493260384L</v>
<v n="Value">4294967295U</v>
</o>
<o>
<v n="Id">135947015L</v>
<v n="Value">4278190080U</v>
</o>
<o>
<v n="Id">2678395525L</v>
<v n="Value">1U</v>
</o>
<o>
<v n="Id">2340015797L</v>
<v n="Value">"HCENTER"</v>
</o>
<o>
<v n="Id">2565699834L</v>
<v n="Value">"VCENTER"</v>
</o>
<o>
<v n="Id">296037572L</v>
<v n="Value">""</v>
</o>
<o>
<v n="Id">390574330L</v>
<v n="Value">""</v>
</o>
<o>
<v n="Id">571893170L</v>
<v n="Value">""</v>
</o>
<o>
<v n="Id">2597686782L</v>
<v n="Value">false</v>
</o>
<o>
<v n="Id">743958181L</v>
<v n="Value">"_app.bSSR"</v>
</o>
<o>
<v n="Id">2880254039L</v>
<v n="Value">"NOT _app.HMI_VISIBLE"</v>
</o>
</l>
</o>
<v n="VisualElementName">"Lamp1"</v>
<v n="VisualElementTypeName">"VisuFbElemLamp"</v>
<v n="VisualElementIsRectangle">true</v>
<v n="VisualElementIdentifier">"GenElemInst_4"</v>
<n n="VisualElementOfflinePaintCommands" />
<n n="VisualElementFrameInformation" />
<d n="VisualElementInputActions" t="Hashtable" />
<v n="VisualElementIdentification">{381dcd66-b26b-46bd-883c-a954ea521c01}</v>
<v n="VisualElementOwningObjectGuid">{4002f308-75d3-4013-b6d3-1d6b4771e763}</v>
<a n="LMGuids" et="Guid" />
<d n="SubElements" t="Hashtable" />
<v n="VisualElementId">3</v>
<l n="UserManagementAccessRights" t="ArrayList" />
</o>
<o>
<a n="ConfiguredComplexInputs" et="ComplexInput" />
<l n="Elements" t="ArrayList" />
<n n="VisualElementDescription" />
<o n="VisualElemMemberList" t="VisualElemMemberList">
<l n="VisualElemMemberList" t="VisualElemMemberCollection" cet="VisualElemMember">
<o>
<v n="Id">571893170L</v>
<v n="Value">""</v>
</o>
<o>
<v n="Id">494569607L</v>
<l n="Value" t="ArrayList" cet="NamedStyleColor">
<o>
<v n="Color">-2830136</v>
<v n="CanonicalName">"Element-Frame-Color"</v>
</o>
</l>
</o>
<o>
<v n="Id">2812299069L</v>
<l n="Value" t="ArrayList" cet="UInt32">
<v>4290822336</v>
</l>
</o>
<o>
<v n="Id">135947015L</v>
<l n="Value" t="ArrayList" cet="NamedStyleColor">
<o>
<v n="Color">-65536</v>
<v n="CanonicalName">"Element-Alarm-Frame-Color"</v>
</o>
</l>
</o>
<o>
<v n="Id">493260384L</v>
<l n="Value" t="ArrayList" cet="NamedStyleColor">
<o>
<v n="Color">-12337</v>
<v n="CanonicalName">"Element-Alarm-Fill-Color"</v>
</o>
</l>
</o>
<o>
<v n="Id">2340015797L</v>
<v n="Value">"HCENTER"</v>
</o>
<o>
<v n="Id">2565699834L</v>
<v n="Value">"VCENTER"</v>
</o>
<o>
<v n="Id">4134387352L</v>
<v n="Value">"NONE"</v>
</o>
<o>
<v n="Id">1603690730L</v>
<v n="Value">"Arial"</v>
</o>
<o>
<v n="Id">4253639993L</v>
<v n="Value" t="Int16">12</v>
</o>
<o>
<v n="Id">2729990903L</v>
<v n="Value">0U</v>
</o>
<o>
<v n="Id">1213979116L</v>
<v n="Value">0U</v>
</o>
<o>
<v n="Id">3488306084L</v>
<v n="Value">4278190080U</v>
</o>
<o>
<v n="Id">1999528970L</v>
<v n="Value">"&lt;toggle/tap variable&gt;"</v>
</o>
<o>
<v n="Id">3719097617L</v>
<v n="Value">0</v>
</o>
<o>
<v n="Id">1649127785L</v>
<v n="Value" t="Int16">1</v>
</o>
<o>
<v n="Id">357335551L</v>
<v n="Value" t="Int16">1</v>
</o>
<o>
<v n="Id">2422045748L</v>
<v n="Value" t="Int16">89</v>
</o>
<o>
<v n="Id">2134141914L</v>
<v n="Value" t="Int16">30</v>
</o>
<o>
<v n="Id">3729828405L</v>
<l n="Value" t="ArrayList" cet="FontDescription">
<o>
<v n="FontStyle">2</v>
<v n="AdditionalFontStyle" t="UInt16">0</v>
<v n="ExplicitColor">-16777216</v>
<v n="FontName">"Tahoma"</v>
<v n="FontSize">16</v>
<v n="ScriptIdentification">0</v>
<v n="DoubleFontSize" t="Double">0</v>
<o n="NamedColor" t="NamedStyleColor">
<v n="Color">-16777216</v>
<v n="CanonicalName">"Font-Default-Color"</v>
</o>
</o>
</l>
</o>
<o>
<v n="Id">1337389588L</v>
<v n="Value">"FROM_STYLE"</v>
</o>
<o>
<v n="Id">2678395525L</v>
<v n="Value">1U</v>
</o>
<o>
<v n="Id">390574330L</v>
<v n="Value">"Apt. %d"</v>
</o>
<o>
<v n="Id">2827249010L</v>
<v n="Value">"PS_HOLLOW"</v>
</o>
<o>
<v n="Id">2597686782L</v>
<v n="Value">false</v>
</o>
<o>
<v n="Id">1782330054L</v>
<v n="Value">"BS_HOLLOW"</v>
</o>
<o>
<v n="Id">2477733581L</v>
<v n="Value">"_app.iAp"</v>
</o>
<o>
<v n="Id">2880254039L</v>
<v n="Value">"NOT _app.HMI_VISIBLE"</v>
</o>
<o>
<v n="Id">823443203L</v>
<v n="Value">"1312"</v>
</o>
</l>
</o>
<v n="VisualElementName">"Textfield"</v>
<v n="VisualElementTypeName">"VisuFbElemTextfield"</v>
<v n="VisualElementIsRectangle">true</v>
<v n="VisualElementIdentifier">"GenElemInst_6"</v>
<n n="VisualElementOfflinePaintCommands" />
<n n="VisualElementFrameInformation" />
<d n="VisualElementInputActions" t="Hashtable" />
<v n="VisualElementIdentification">{d9d0e0de-0157-48bf-905d-dcfe8be68236}</v>
<v n="VisualElementOwningObjectGuid">{4002f308-75d3-4013-b6d3-1d6b4771e763}</v>
<a n="LMGuids" et="Guid" />
<d n="SubElements" t="Hashtable" />
<v n="VisualElementId">5</v>
<l n="UserManagementAccessRights" t="ArrayList" />
</o>
</l>
<v n="BackgroundBitmapId">""</v>
<v n="BackgroundColor">16777215</v>
<o n="Background" t="BackgroundSettings">
<n n="BgGradient" />
<n n="BgNamedColor" />
<v n="BgBmpId">""</v>
<v n="BgUseBmp">false</v>
<v n="BgColor">false</v>
<v n="BgUseColor">16777215</v>
<v n="BgUseGradient">false</v>
</o>
</o>
<o n="GeneratedLMMDescriptions" t="GeneratedLanguageModelEntriesData">
<o n="GeneratedVisuFbDescription" t="GenericFbDescription">
<d n="FbMethods" t="CaseInsensitiveHashtable" ckt="String" cvt="Guid">
<v>ContainsPoint</v>
<v>c6443fa7-def7-4fde-b3a8-eca20a87932e</v>
<v>Destruct</v>
<v>93c2ffbb-c42e-410d-bf7d-5e6c9cb0f333</v>
<v>ElementInfo</v>
<v>ac2d9f48-178e-4249-8df7-ea206f83e060</v>
<v>FB_Exit</v>
<v>5dd5d030-f1ec-458c-a83c-8573ea6e9074</v>
<v>FB_Reinit</v>
<v>461a4621-a3d3-4c0e-8d11-40ccf53147bc</v>
<v>GetClientData</v>
<v>9f97e294-4fce-4f48-a10d-a884c76372e4</v>
<v>GetElementArray</v>
<v>6c783ef3-68cd-48c0-99b2-5900baede59c</v>
<v>GetElementIdArray</v>
<v>8671e0ad-f934-4b55-9d1a-b5b87f887652</v>
<v>GetInitializeVersion</v>
<v>0840095c-c700-45e5-a37d-9d2821660a7f</v>
<v>GetLocalUsergroup</v>
<v>724849e2-1f80-4ad8-8d60-b6bc7443d0cc</v>
<v>GetName</v>
<v>61f51479-7dd7-4bb2-8b6b-b2315d8a81af</v>
<v>GetNamespace</v>
<v>201d6277-6fb9-415d-833b-a5ff8286ca9a</v>
<v>GetSize</v>
<v>d3515c8c-ca53-4d77-bee5-c6b691582dcd</v>
<v>GetSurroundingRect</v>
<v>251ceea2-4ff9-4145-b71c-e42dcff8b148</v>
<v>GetText</v>
<v>d8e5bead-00ce-43d6-8e7a-54dba6bf9310</v>
<v>GetTextProperties</v>
<v>a50627a5-3ccb-4d03-8700-b65224df84ea</v>
<v>GetTooltip</v>
<v>7429165c-c6cf-4915-8a7f-ff11c9093974</v>
<v>GetTranslator</v>
<v>ef8d01a8-733e-437a-93c0-2c36673b9f8b</v>
<v>GetUpdateRects</v>
<v>99ef2b59-410e-426c-b5f6-b25b723a53d6</v>
<v>HandleInput</v>
<v>7292e979-5ba3-43a0-8b9d-ee7d65b2369c</v>
<v>HasInputAccess</v>
<v>02416ea1-25fd-4287-a1e2-7324e2788223</v>
<v>HasInputAccessIntern</v>
<v>83c8f364-5a63-5045-aa5b-bd1939505859</v>
<v>HasVisibilityAccess</v>
<v>4153bd0d-7d16-4bc5-9874-2f9cc4178c46</v>
<v>HasVisibilityAccessIntern</v>
<v>ef94cd40-a034-5d2b-99f7-0a47ac42dbb4</v>
<v>Initialize</v>
<v>a1c368a3-7701-4ddf-aaff-1b067985410d</v>
<v>IsAntialiasingInactive</v>
<v>d0338f0b-2a0b-482a-bd6e-6c25456e35f1</v>
<v>Paint</v>
<v>50d41e02-2ba9-4851-b32c-29c3ca9b7cc8</v>
<v>SetClientData</v>
<v>38a3612f-0c8d-409c-951a-38e729bedd96</v>
<v>SetStaticState</v>
<v>d2e39e6a-5ea0-4487-8a4d-5d54d8f3a251</v>
<v>SetVisuFlagsInternal</v>
<v>3f07848c-65c4-4c19-a8b5-1f88d423d4ab</v>
<v>Update</v>
<v>4c350d23-8601-4296-a47d-c2013c506f34</v>
</d>
<v n="FbName">"NotImportant"</v>
<v n="FbGuid">{4002f308-75d3-4013-b6d3-1d6b4771e763}</v>
</o>
<v n="GeneratedGlobalVisuVarsGuid">{5ae71108-b063-418d-8713-a2057051037c}</v>
<v n="GeneratedGlobalTheVisuVarlistGuid">{15d9d1c0-a672-4d38-b21d-0ca5f5eb8fea}</v>
<v n="GeneratedGlobalVisuConstants">{2912970e-8f9b-461f-9592-6acf287432b0}</v>
<d n="GeneratedAllElementsEntries" t="Hashtable" />
<o n="VisuRegDesc" t="GenericFbDescription">
<d n="FbMethods" t="CaseInsensitiveHashtable" ckt="String" cvt="Guid">
<v>FB_Exit</v>
<v>dbd1c6dc-9977-4f0b-93c5-1ddd06630732</v>
<v>FB_Init</v>
<v>83a1f8ca-4db5-4f88-a496-454b9c020578</v>
<v>FB_Reinit</v>
<v>0e98da46-d865-4f19-8bbf-b28e4802ec28</v>
</d>
<v n="FbName">"NotImportant"</v>
<v n="FbGuid">{070d51c3-3330-48d4-87c1-a410a00cab25}</v>
</o>
<v n="VisuRegisterGvl">{f202068b-e7f9-46e9-a3c4-32f086ac71f6}</v>
<n n="SettingsPou" />
<n n="MemManPou" />
<o n="InputsPou" t="GenericFbDescription">
<d n="FbMethods" t="CaseInsensitiveHashtable" ckt="String" cvt="Guid">
<v>abstrGetDefaultCursor</v>
<v>f8d38332-0100-4ad9-9e87-504f7dc35925</v>
<v>ExecuteDialogClosed</v>
<v>392250de-4c56-4dcd-b433-fff623c4153b</v>
<v>ExecuteKeyDown</v>
<v>b6621f76-10e9-43bc-913d-bcd00c431671</v>
<v>ExecuteKeyUp</v>
<v>721926e8-eece-4703-87ce-975cfff65262</v>
<v>ExecuteLooseCapture</v>
<v>1054d0ac-5a40-4441-a3f1-56edf1e0878e</v>
<v>ExecuteMouseClick</v>
<v>b8ae3bbf-1f9c-41cc-a02f-9898213a321e</v>
<v>ExecuteMouseDblClick</v>
<v>c83254be-6b59-40d9-a723-18227c9f5eb5</v>
<v>ExecuteMouseDown</v>
<v>b604b0c9-b8ba-416c-abcd-4105ec1d3f56</v>
<v>ExecuteMouseEnter</v>
<v>ad33c307-b506-442d-9e28-96e6853d5db1</v>
<v>ExecuteMouseLeave</v>
<v>ba2f5224-875f-4b14-8004-614d336f9465</v>
<v>ExecuteMouseMove</v>
<v>72dd9e27-dbe5-4b2e-a266-e737c1ea406d</v>
<v>ExecuteMouseUp</v>
<v>0a47c368-6375-483c-a6fc-9db6c6718b28</v>
<v>GetElementInfo</v>
<v>80ae22b5-52f1-43ac-a4eb-a8bc4e43f789</v>
<v>Initialize</v>
<v>f3be1bfa-3ad4-447c-9626-79ad3360ab26</v>
</d>
<v n="FbName">"NotImportant"</v>
<v n="FbGuid">{2f394799-529f-4b58-83bf-13b972ddac37}</v>
</o>
<v n="DialogDut">{9feb6bde-32e1-4a42-ae9d-18c95b0ea2d8}</v>
</o>
<v n="LastUsedIdForIdentifier">7</v>
<o n="TextDocument" t="TextDocument">
<a n="TextLines" cet="TextLine">
<o>
<v n="Id">2L</v>
<n n="Tag" />
<v n="Text">"VAR_IN_OUT"</v>
</o>
<o>
<v n="Id">3L</v>
<n n="Tag" />
<v n="Text">" _app: Apartm;"</v>
</o>
<o>
<v n="Id">1L</v>
<n n="Tag" />
<v n="Text">"END_VAR"</v>
</o>
</a>
</o>
<v n="GvlCreated">false</v>
<n n="LMEntry" />
<v n="ProfileCompatibilityId">4140216668L</v>
<v n="LMVerMinor">0</v>
<v n="LMVerMajor">1</v>
<o n="Hotkeys" t="HotkeyConfiguration">
<v n="IdMin">481037385728L</v>
<v n="IdMax">549755813887L</v>
<v n="Id">481037385728L</v>
<v n="IdMask">549754765312L</v>
<v n="IdStep">1048576L</v>
<l2 n="Inputs" />
</o>
<o n="VisuSizeManager" t="VisualObjectSizeManager">
<d2 n="Size" ckt="Int32" cvt="VisualObjectSize">
<v>0</v>
<o>
<v n="Width">222</v>
<v n="Height">32</v>
</o>
<v>1</v>
<o>
<v n="Width">222</v>
<v n="Height">32</v>
</o>
</d2>
<v n="Version">1</v>
</o>
</o>
</Data>
<TypeList>
<Type n="ArrayList">System.Collections.ArrayList</Type>
<Type n="BackgroundSettings">{1038f12c-dd4b-4f96-87a3-a350fe8f3552}</Type>
<Type n="Boolean">System.Boolean</Type>
<Type n="CaseInsensitiveHashtable">{7df88604-7ac5-4e36-91c4-55e4fdad3e68}</Type>
<Type n="ComplexInput">{1de566f6-72a7-494c-9353-9a418172c96e}</Type>
<Type n="Double">System.Double</Type>
<Type n="FontDescription">{896a5e54-96c3-433b-96d2-4f1442fef591}</Type>
<Type n="GeneratedLanguageModelEntriesData">{703465dc-4679-4ff2-bcc3-c57d0a204da3}</Type>
<Type n="GenericFbDescription">{40d6dd8d-dfd0-493a-8e29-c9a35e1e6539}</Type>
<Type n="GenericVisualElem">{f86c2928-8614-4cca-824b-e819ac4d58c4}</Type>
<Type n="Guid">System.Guid</Type>
<Type n="Hashtable">System.Collections.Hashtable</Type>
<Type n="HotkeyConfiguration">{6b108d46-58af-4e41-a3f4-174d8f160cc4}</Type>
<Type n="Int16">System.Int16</Type>
<Type n="Int32">System.Int32</Type>
<Type n="Int64">System.Int64</Type>
<Type n="NamedStyleColor">{fa491db2-51ff-4bc1-9cd0-ce8c94ff6216}</Type>
<Type n="String">System.String</Type>
<Type n="TextDocument">{f3878285-8e4f-490b-bb1b-9acbb7eb04db}</Type>
<Type n="TextLine">{a5de0b0b-1cb5-4913-ac21-9d70293ec00d}</Type>
<Type n="UInt16">System.UInt16</Type>
<Type n="UInt32">System.UInt32</Type>
<Type n="VisualElemCollection">{ef9d0b20-c96e-48db-b361-2ded4063150e}</Type>
<Type n="VisualElemList">{f285c9a3-7019-446b-b98c-ccec3a0af8fa}</Type>
<Type n="VisualElemMember">{c694e3a2-5c0b-4177-ab35-cb06bd5a6a02}</Type>
<Type n="VisualElemMemberCollection">{a4b83bea-3742-489c-9fe8-d96d68dba7ab}</Type>
<Type n="VisualElemMemberList">{17e26cd1-bb9b-47fe-a3d5-18fcd63b9c96}</Type>
<Type n="VisualObject">{f18bec89-9fef-401d-9953-2f11739a6808}</Type>
<Type n="VisualObjectSize">{6ad3e88f-aee2-4766-a7ea-a8790037ef51}</Type>
<Type n="VisualObjectSizeManager">{5f612b0e-b404-455f-8177-27864e9f5332}</Type>
</TypeList>
</XmlArchive>
<ObjectProperties>
<XmlArchive>
<Data>
<o xml:space="preserve" t="VisualProperty">
<v n="VisuUsageType">0</v>
<v n="SizeX">222</v>
<v n="SizeY">32</v>
<v n="IsStartVisu">false</v>
<v n="VisuSizeMode" t="VisualVisuSizeMode">Specified</v>
<v n="Internal">false</v>
<v n="DialogIsOpaque">false</v>
<v n="DialogIsOpaqueIsSet">false</v>
</o>
</Data>
<TypeList>
<Type n="Boolean">System.Boolean</Type>
<Type n="Int32">System.Int32</Type>
<Type n="VisualProperty">{477d844b-9b2a-407e-90a4-d36fd6dde2fc}</Type>
<Type n="VisualVisuSizeMode">{34718b76-91f6-43de-8c65-b77e0b1ee621}</Type>
</TypeList>
</XmlArchive>
</ObjectProperties>
</Visu>
</TcPlcObject>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save