├── .gitattributes ├── .gitignore ├── .vs └── Retentive Timers │ └── v15 │ └── .suo ├── LICENSE ├── README.md ├── Retentive Timers.sln ├── Retentive Timers ├── Retentive Timers.tsproj ├── Retentive Timers.tsproj.bak ├── RetentiveTimerOOP │ ├── DUTs │ │ ├── E_Timer_Type.TcDUT │ │ ├── ST_Input.TcDUT │ │ ├── ST_Output.TcDUT │ │ ├── ST_PLC_TASK_INFORMATION.TcDUT │ │ └── ST_Setting.TcDUT │ ├── Interfaces │ │ ├── I_Input.TcIO │ │ ├── I_Output.TcIO │ │ └── I_Timer.TcIO │ ├── LineIDs.dbg │ ├── POUs │ │ ├── Function Block │ │ │ ├── Timer.TcPOU │ │ │ ├── Timer_1.TcPOU │ │ │ ├── Timer_Abstract.TcPOU │ │ │ └── Timers │ │ │ │ ├── FB_RStopwatch.TcPOU │ │ │ │ ├── FB_RTOF.TcPOU │ │ │ │ ├── FB_RTON.TcPOU │ │ │ │ ├── FB_RTP.TcPOU │ │ │ │ ├── FB_RTimer.TcPOU │ │ │ │ ├── FB_Stopwatch.TcPOU │ │ │ │ └── FB_Timer.TcPOU │ │ ├── Functions │ │ │ └── F_Get_PLC_Task_Information.TcPOU │ │ ├── MAIN.TcPOU │ │ └── P_Example_1_TONs.TcPOU │ ├── PlcTask.TcTTO │ ├── Project Information │ │ ├── F_GetCompany.TcPOU │ │ ├── F_GetTitle.TcPOU │ │ └── F_GetVersion.TcPOU │ ├── RetentiveTimerOOP.plcproj │ ├── Version │ │ └── Global_Version.TcGVL │ └── _Libraries │ │ └── beckhoff automation gmbh │ │ ├── tc2_standard │ │ └── 3.3.3.0 │ │ │ └── tc2_standard.compiled-library │ │ ├── tc2_system │ │ └── 3.4.26.0 │ │ │ └── tc2_system.compiled-library │ │ └── tc3_module │ │ └── 3.3.21.0 │ │ └── tc3_module.compiled-library ├── RetentiveTimerUnitTest │ ├── LineIDs.dbg │ ├── POUs │ │ ├── FB_A.TcPOU │ │ ├── FB_B.TcPOU │ │ └── MAIN.TcPOU │ ├── PlcTask.TcTTO │ ├── RetentiveTimerUnitTest.plcproj │ └── _Libraries │ │ ├── beckhoff automation gmbh │ │ ├── tc2_standard │ │ │ └── 3.3.3.0 │ │ │ │ └── tc2_standard.compiled-library │ │ ├── tc2_system │ │ │ └── 3.4.26.0 │ │ │ │ └── tc2_system.compiled-library │ │ └── tc3_module │ │ │ └── 3.3.21.0 │ │ │ └── tc3_module.compiled-library │ │ └── fisothemes&runtimevic │ │ └── retentive timers │ │ ├── 0.0.1.0 │ │ └── retentivetimeroop_v0.0.1.0.library │ │ └── 0.0.1.1 │ │ └── retentivetimeroop_v0.0.1.1.library ├── RetentiveTimers │ ├── DUTs │ │ └── Structs │ │ │ └── ST_PLC_TASK_INFORMATION.TcDUT │ ├── LineIDs.dbg │ ├── POUs │ │ ├── Examples │ │ │ ├── Section 1 - Standard Timers Comparisons │ │ │ │ ├── P_Example_1_TONs.TcPOU │ │ │ │ ├── P_Example_2_TOFs.TcPOU │ │ │ │ ├── P_Example_3_TPs.TcPOU │ │ │ │ └── P_Section_1.TcPOU │ │ │ ├── Section 2 - Pausable Timers Comparisons │ │ │ │ └── P_Section_2.TcPOU │ │ │ └── Section 3 - Stopwatch │ │ │ │ ├── P_Example_Stopwatch.TcPOU │ │ │ │ └── P_Section_3.TcPOU │ │ ├── Function Blocks │ │ │ ├── FB_RStopwatch.TcPOU │ │ │ ├── FB_RTOF.TcPOU │ │ │ ├── FB_RTON.TcPOU │ │ │ ├── FB_RTP.TcPOU │ │ │ ├── FB_RTimer.TcPOU │ │ │ ├── FB_Stopwatch.TcPOU │ │ │ └── FB_Timer.TcPOU │ │ ├── Functions │ │ │ └── F_Get_PLC_Task_Information.TcPOU │ │ └── MAIN.TcPOU │ ├── PlcTask.TcTTO │ ├── RetentiveTimers.plcproj │ ├── RetentiveTimers.tmc │ └── _Libraries │ │ └── beckhoff automation gmbh │ │ ├── tc2_standard │ │ └── 3.3.3.0 │ │ │ └── tc2_standard.compiled-library │ │ ├── tc2_system │ │ ├── 3.4.22.0 │ │ │ └── tc2_system.compiled-library │ │ └── 3.4.26.0 │ │ │ └── tc2_system.compiled-library │ │ └── tc3_module │ │ └── 3.3.21.0 │ │ └── tc3_module.compiled-library ├── TrialLicense.tclrs ├── Untitled1 │ ├── POUs │ │ └── MAIN.TcPOU │ ├── PlcTask.TcTTO │ └── Untitled1.plcproj └── _Boot │ ├── CurrentConfig │ └── RetentiveTimers.tpzip │ ├── TargetDescription.xml │ └── TwinCAT RT (x64) │ ├── CurrentConfig.xml │ └── Plc │ ├── Port_851.app │ ├── Port_851.autostart │ ├── Port_851.cid │ ├── Port_851.crc │ ├── Port_851.occ │ ├── Port_851.oce │ ├── Port_851.ocm │ └── Port_851_boot.tizip ├── _TcLibrary__FisoThemes&Runtimevic.xml └── builds └── 0.1.0.0 └── RetentiveTimers.library /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | ## 4 | ## Ignore Twincat non-source files ## 5 | 6 | ### User-specific files (from 4018 tmc should be ignored) ### 7 | *.~u 8 | *.tpy 9 | *.tmc 10 | *.suo 11 | *.user 12 | *.orig 13 | TrialLicense.tclrs 14 | 15 | ### Build results ### 16 | _Boot/ 17 | _CompileInfo/ 18 | .engineering_servers/ 19 | *.compileinfo 20 | *.bootinfo 21 | *.bootinfo_guids 22 | 23 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore 24 | 25 | # User-specific files 26 | *.rsuser 27 | *.suo 28 | *.user 29 | *.userosscache 30 | *.sln.docstates 31 | 32 | # User-specific files (MonoDevelop/Xamarin Studio) 33 | *.userprefs 34 | 35 | # Mono auto generated files 36 | mono_crash.* 37 | 38 | # Build results 39 | [Dd]ebug/ 40 | [Dd]ebugPublic/ 41 | [Rr]elease/ 42 | [Rr]eleases/ 43 | x64/ 44 | x86/ 45 | [Aa][Rr][Mm]/ 46 | [Aa][Rr][Mm]64/ 47 | bld/ 48 | [Bb]in/ 49 | [Oo]bj/ 50 | [Ll]og/ 51 | [Ll]ogs/ 52 | 53 | # Visual Studio 2015/2017 cache/options directory 54 | .vs/ 55 | # Uncomment if you have tasks that create the project's static files in wwwroot 56 | #wwwroot/ 57 | 58 | # Visual Studio 2017 auto generated files 59 | Generated\ Files/ 60 | 61 | # MSTest test Results 62 | [Tt]est[Rr]esult*/ 63 | [Bb]uild[Ll]og.* 64 | 65 | # NUnit 66 | *.VisualState.xml 67 | TestResult.xml 68 | nunit-*.xml 69 | 70 | # Build Results of an ATL Project 71 | [Dd]ebugPS/ 72 | [Rr]eleasePS/ 73 | dlldata.c 74 | 75 | # Benchmark Results 76 | BenchmarkDotNet.Artifacts/ 77 | 78 | # .NET Core 79 | project.lock.json 80 | project.fragment.lock.json 81 | artifacts/ 82 | 83 | # StyleCop 84 | StyleCopReport.xml 85 | 86 | # Files built by Visual Studio 87 | *_i.c 88 | *_p.c 89 | *_h.h 90 | *.ilk 91 | *.meta 92 | *.obj 93 | *.iobj 94 | *.pch 95 | *.pdb 96 | *.ipdb 97 | *.pgc 98 | *.pgd 99 | *.rsp 100 | *.sbr 101 | *.tlb 102 | *.tli 103 | *.tlh 104 | *.tmp 105 | *.tmp_proj 106 | *_wpftmp.csproj 107 | *.log 108 | *.vspscc 109 | *.vssscc 110 | .builds 111 | *.pidb 112 | *.svclog 113 | *.scc 114 | 115 | # Chutzpah Test files 116 | _Chutzpah* 117 | 118 | # Visual C++ cache files 119 | ipch/ 120 | *.aps 121 | *.ncb 122 | *.opendb 123 | *.opensdf 124 | *.sdf 125 | *.cachefile 126 | *.VC.db 127 | *.VC.VC.opendb 128 | 129 | # Visual Studio profiler 130 | *.psess 131 | *.vsp 132 | *.vspx 133 | *.sap 134 | 135 | # Visual Studio Trace Files 136 | *.e2e 137 | 138 | # TFS 2012 Local Workspace 139 | $tf/ 140 | 141 | # Guidance Automation Toolkit 142 | *.gpState 143 | 144 | # ReSharper is a .NET coding add-in 145 | _ReSharper*/ 146 | *.[Rr]e[Ss]harper 147 | *.DotSettings.user 148 | 149 | # TeamCity is a build add-in 150 | _TeamCity* 151 | 152 | # DotCover is a Code Coverage Tool 153 | *.dotCover 154 | 155 | # AxoCover is a Code Coverage Tool 156 | .axoCover/* 157 | !.axoCover/settings.json 158 | 159 | # Visual Studio code coverage results 160 | *.coverage 161 | *.coveragexml 162 | 163 | # NCrunch 164 | _NCrunch_* 165 | .*crunch*.local.xml 166 | nCrunchTemp_* 167 | 168 | # MightyMoose 169 | *.mm.* 170 | AutoTest.Net/ 171 | 172 | # Web workbench (sass) 173 | .sass-cache/ 174 | 175 | # Installshield output folder 176 | [Ee]xpress/ 177 | 178 | # DocProject is a documentation generator add-in 179 | DocProject/buildhelp/ 180 | DocProject/Help/*.HxT 181 | DocProject/Help/*.HxC 182 | DocProject/Help/*.hhc 183 | DocProject/Help/*.hhk 184 | DocProject/Help/*.hhp 185 | DocProject/Help/Html2 186 | DocProject/Help/html 187 | 188 | # Click-Once directory 189 | publish/ 190 | 191 | # Publish Web Output 192 | *.[Pp]ublish.xml 193 | *.azurePubxml 194 | # Note: Comment the next line if you want to checkin your web deploy settings, 195 | # but database connection strings (with potential passwords) will be unencrypted 196 | *.pubxml 197 | *.publishproj 198 | 199 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 200 | # checkin your Azure Web App publish settings, but sensitive information contained 201 | # in these scripts will be unencrypted 202 | PublishScripts/ 203 | 204 | # NuGet Packages 205 | *.nupkg 206 | # NuGet Symbol Packages 207 | *.snupkg 208 | # The packages folder can be ignored because of Package Restore 209 | **/[Pp]ackages/* 210 | # except build/, which is used as an MSBuild target. 211 | !**/[Pp]ackages/build/ 212 | # Uncomment if necessary however generally it will be regenerated when needed 213 | #!**/[Pp]ackages/repositories.config 214 | # NuGet v3's project.json files produces more ignorable files 215 | *.nuget.props 216 | *.nuget.targets 217 | 218 | # Microsoft Azure Build Output 219 | csx/ 220 | *.build.csdef 221 | 222 | # Microsoft Azure Emulator 223 | ecf/ 224 | rcf/ 225 | 226 | # Windows Store app package directories and files 227 | AppPackages/ 228 | BundleArtifacts/ 229 | Package.StoreAssociation.xml 230 | _pkginfo.txt 231 | *.appx 232 | *.appxbundle 233 | *.appxupload 234 | 235 | # Visual Studio cache files 236 | # files ending in .cache can be ignored 237 | *.[Cc]ache 238 | # but keep track of directories ending in .cache 239 | !?*.[Cc]ache/ 240 | 241 | # Others 242 | ClientBin/ 243 | ~$* 244 | *~ 245 | *.dbmdl 246 | *.dbproj.schemaview 247 | *.jfm 248 | *.pfx 249 | *.publishsettings 250 | orleans.codegen.cs 251 | 252 | # Including strong name files can present a security risk 253 | # (https://github.com/github/gitignore/pull/2483#issue-259490424) 254 | #*.snk 255 | 256 | # Since there are multiple workflows, uncomment next line to ignore bower_components 257 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 258 | #bower_components/ 259 | 260 | # RIA/Silverlight projects 261 | Generated_Code/ 262 | 263 | # Backup & report files from converting an old project file 264 | # to a newer Visual Studio version. Backup files are not needed, 265 | # because we have git ;-) 266 | _UpgradeReport_Files/ 267 | Backup*/ 268 | UpgradeLog*.XML 269 | UpgradeLog*.htm 270 | ServiceFabricBackup/ 271 | *.rptproj.bak 272 | 273 | # SQL Server files 274 | *.mdf 275 | *.ldf 276 | *.ndf 277 | 278 | # Business Intelligence projects 279 | *.rdl.data 280 | *.bim.layout 281 | *.bim_*.settings 282 | *.rptproj.rsuser 283 | *- [Bb]ackup.rdl 284 | *- [Bb]ackup ([0-9]).rdl 285 | *- [Bb]ackup ([0-9][0-9]).rdl 286 | 287 | # Microsoft Fakes 288 | FakesAssemblies/ 289 | 290 | # GhostDoc plugin setting file 291 | *.GhostDoc.xml 292 | 293 | # Node.js Tools for Visual Studio 294 | .ntvs_analysis.dat 295 | node_modules/ 296 | 297 | # Visual Studio 6 build log 298 | *.plg 299 | 300 | # Visual Studio 6 workspace options file 301 | *.opt 302 | 303 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) 304 | *.vbw 305 | 306 | # Visual Studio LightSwitch build output 307 | **/*.HTMLClient/GeneratedArtifacts 308 | **/*.DesktopClient/GeneratedArtifacts 309 | **/*.DesktopClient/ModelManifest.xml 310 | **/*.Server/GeneratedArtifacts 311 | **/*.Server/ModelManifest.xml 312 | _Pvt_Extensions 313 | 314 | # Paket dependency manager 315 | .paket/paket.exe 316 | paket-files/ 317 | 318 | # FAKE - F# Make 319 | .fake/ 320 | 321 | # CodeRush personal settings 322 | .cr/personal 323 | 324 | # Python Tools for Visual Studio (PTVS) 325 | __pycache__/ 326 | *.pyc 327 | 328 | # Cake - Uncomment if you are using it 329 | # tools/** 330 | # !tools/packages.config 331 | 332 | # Tabs Studio 333 | *.tss 334 | 335 | # Telerik's JustMock configuration file 336 | *.jmconfig 337 | 338 | # BizTalk build output 339 | *.btp.cs 340 | *.btm.cs 341 | *.odx.cs 342 | *.xsd.cs 343 | 344 | # OpenCover UI analysis results 345 | OpenCover/ 346 | 347 | # Azure Stream Analytics local run output 348 | ASALocalRun/ 349 | 350 | # MSBuild Binary and Structured Log 351 | *.binlog 352 | 353 | # NVidia Nsight GPU debugger configuration file 354 | *.nvuser 355 | 356 | # MFractors (Xamarin productivity tool) working folder 357 | .mfractor/ 358 | 359 | # Local History for Visual Studio 360 | .localhistory/ 361 | 362 | # BeatPulse healthcheck temp database 363 | healthchecksdb 364 | 365 | # Backup folder for Package Reference Convert tool in Visual Studio 2017 366 | MigrationBackup/ 367 | 368 | # Ionide (cross platform F# VS Code tools) working folder 369 | .ionide/ 370 | -------------------------------------------------------------------------------- /.vs/Retentive Timers/v15/.suo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fisothemes/TwinCAT-Retentive-Timers/8b3d50ce89ba1bb26f17314a8c1bab688dc20770/.vs/Retentive Timers/v15/.suo -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Goodwill Mzumala 4 | 5 | Copyright (c) 2023 Víctor Durán Muñoz 6 | 7 | Permission is hereby granted, free of charge, to any person obtaining a copy 8 | of this software and associated documentation files (the "Software"), to deal 9 | in the Software without restriction, including without limitation the rights 10 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 | copies of the Software, and to permit persons to whom the Software is 12 | furnished to do so, subject to the following conditions: 13 | 14 | The above copyright notice and this permission notice shall be included in all 15 | copies or substantial portions of the Software. 16 | 17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 23 | SOFTWARE. 24 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # TwinCAT-Retentive-Timers 2 | Standard library timers on TwinCAT count time by taking the difference between the current time from system timer and start time from system timer. 3 | While this is fine for most application, it is problematic for operations that require time to be retained even if the PLC is paused, stopped or turned off. 4 | For example, if a `TON` (Timer On-Delay) Timer is running and you stop the PLC Boot Project for a period of time, the `TON` will not resume from the point it was stopped. 5 | Instead it will skip time by the number of ms/secs/mins/hours it was stopped. 6 | This makes it useless for applications such as tracking the length of time a PLC has been running or retaining persistent time. 7 | 8 | Retentive variants of the Standard library timers stop this from happen. They are based on PLC Task cycle time rather than system time. 9 | This means they will simply stop counting when the PLC Task Cycle is stopped and will resume from where they left-off as soon as the task cycle picks up. 10 | All arguments behave in the same manner as those of the standard library. 11 | 12 | To see an example of the differences between Retentive Standard Library Timers and Normal Standard Library Timer, download this project, run it and follow the instructions in `P_Example_1_TONs()` 13 | 14 | This project creates retentive variants of the standard library PLC timers: 15 | * TON - Timer On-Delay 16 | * TOF - Timer Off-Delay 17 | * TP - Pulse Timer 18 | 19 | 20 | **In this project the following will be implementated:** 21 | 22 | * 👍 FB_RTON - Retentive Timer On-Delay 23 | * 👍 FB_RTOF - Retentive Timer Off-Delay 24 | * 👍 FB_RTP - Retentive Pulse Timer 25 | * 👍 FB_Timer - Pausable Timer 26 | * 👍 FB_RTimer - Retentive Pausable Timer 27 | * 👍 FB_Stopwatch - Normal Stopwatch 28 | * 👍 FB_RStopwatch - Retentive Stopwatch 29 | 30 | - - - - 31 | ### FB_RTON 32 | 33 | **Declaration:** 34 | ```Pascal 35 | (* : FB_RTON *) 36 | 37 | // Declaring a Retentive Timer On-Delay 38 | fbRTON : FB_RTON; 39 | ``` 40 | 41 | **Implimentation** 42 | ```Pascal 43 | fbRTON(IN := bStart, PT := tSet_Time, Q => bElapsed_Time, ET => tElapsed_Time) 44 | ``` 45 | 46 | - - - - 47 | ### FB_RTOF 48 | 49 | **Declaration:** 50 | ```Pascal 51 | (* : FB_RTOF *) 52 | 53 | // Declaring a Retentive Timer Off-Delay 54 | fbRTOF : FB_RTOF; 55 | ``` 56 | 57 | **Implimentation** 58 | ```Pascal 59 | fbTOF(IN := bStart, PT := tSet_Time, Q => bElapsed_Time_TOF, ET => tElapsed_Time_TOF) 60 | ``` 61 | 62 | - - - - 63 | ### FB_RTP 64 | 65 | **Declaration:** 66 | ```Pascal 67 | (* : FB_RTP *) 68 | 69 | // Declaring a Retentive Pulse Timer 70 | fbRTP : FB_RTP; 71 | ``` 72 | 73 | **Implimentation** 74 | ```Pascal 75 | fbRTP(IN := bStart, PT := tSet_Time, Q => bElapsed_Time_RTP, ET => tElapsed_Time_RTP); 76 | ``` 77 | 78 | - - - - 79 | ### FB_Timer 80 | 81 | **Declaration:** 82 | ```Pascal 83 | (* : FB_Timer *) 84 | 85 | // Declaring a Pausable Timer 86 | fbTimer : FB_Timer; 87 | ``` 88 | 89 | **Implimentation** 90 | ```Pascal 91 | fbTimer(bStart := bStart, bPause := bPause, tSet := tSet_Time, bElapsed => bElapsed_Time, tElapsed => tElapsed_Time); 92 | ``` 93 | 94 | - - - - 95 | ### FB_RTimer 96 | 97 | **Declaration:** 98 | ```Pascal 99 | (* : FB_RTimer *) 100 | 101 | // Declaring a Retentive Pausable Timer 102 | fbRTimer : FB_RTimer; 103 | ``` 104 | 105 | **Implimentation** 106 | ```Pascal 107 | fbRTimer(bStart := bStart, bPause := bPause, tSet := tSet_Time, bElapsed => bElapsed_RTime, tElapsed => tElapsed_RTime); 108 | ``` 109 | 110 | - - - - 111 | ## FB_Stopwatch 112 | 113 | **Declaration:** 114 | ```Pascal 115 | (* : FB_Stopwatch *) 116 | 117 | // Declaring a Stopwatch 118 | fbStopwatch : FB_Stopwatch; 119 | ``` 120 | 121 | **Implimentation** 122 | ```Pascal 123 | fbStopwatch(bStart := bStart, tElapsed => tElapsed_Time); 124 | ``` 125 | 126 | - - - - 127 | ## FB_RStopwatch 128 | 129 | **Declaration:** 130 | ```Pascal 131 | (* : FB_RStopwatch *) 132 | 133 | // Declaring a Stopwatch 134 | fbRStopwatch : FB_RStopwatch; 135 | ``` 136 | 137 | **Implimentation** 138 | ```Pascal 139 | fbRStopwatch(bStart := bStart, tElapsed => tElapsed_Time); 140 | ``` -------------------------------------------------------------------------------- /Retentive Timers.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio Version 16 4 | VisualStudioVersion = 16.0.33529.622 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{B1E792BE-AA5F-4E3C-8C82-674BF9C0715B}") = "Retentive Timers", "Retentive Timers\Retentive Timers.tsproj", "{1DA0CC61-A651-4B6B-BCE3-1839C2704E23}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | Debug|TwinCAT CE7 (ARMV7) = Debug|TwinCAT CE7 (ARMV7) 11 | Debug|TwinCAT OS (ARMT2) = Debug|TwinCAT OS (ARMT2) 12 | Debug|TwinCAT RT (x64) = Debug|TwinCAT RT (x64) 13 | Debug|TwinCAT RT (x86) = Debug|TwinCAT RT (x86) 14 | Release|TwinCAT CE7 (ARMV7) = Release|TwinCAT CE7 (ARMV7) 15 | Release|TwinCAT OS (ARMT2) = Release|TwinCAT OS (ARMT2) 16 | Release|TwinCAT RT (x64) = Release|TwinCAT RT (x64) 17 | Release|TwinCAT RT (x86) = Release|TwinCAT RT (x86) 18 | EndGlobalSection 19 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 20 | {1DA0CC61-A651-4B6B-BCE3-1839C2704E23}.Debug|TwinCAT CE7 (ARMV7).ActiveCfg = Debug|TwinCAT CE7 (ARMV7) 21 | {1DA0CC61-A651-4B6B-BCE3-1839C2704E23}.Debug|TwinCAT CE7 (ARMV7).Build.0 = Debug|TwinCAT CE7 (ARMV7) 22 | {1DA0CC61-A651-4B6B-BCE3-1839C2704E23}.Debug|TwinCAT OS (ARMT2).ActiveCfg = Debug|TwinCAT OS (ARMT2) 23 | {1DA0CC61-A651-4B6B-BCE3-1839C2704E23}.Debug|TwinCAT OS (ARMT2).Build.0 = Debug|TwinCAT OS (ARMT2) 24 | {1DA0CC61-A651-4B6B-BCE3-1839C2704E23}.Debug|TwinCAT RT (x64).ActiveCfg = Debug|TwinCAT RT (x64) 25 | {1DA0CC61-A651-4B6B-BCE3-1839C2704E23}.Debug|TwinCAT RT (x64).Build.0 = Debug|TwinCAT RT (x64) 26 | {1DA0CC61-A651-4B6B-BCE3-1839C2704E23}.Debug|TwinCAT RT (x86).ActiveCfg = Debug|TwinCAT RT (x86) 27 | {1DA0CC61-A651-4B6B-BCE3-1839C2704E23}.Debug|TwinCAT RT (x86).Build.0 = Debug|TwinCAT RT (x86) 28 | {1DA0CC61-A651-4B6B-BCE3-1839C2704E23}.Release|TwinCAT CE7 (ARMV7).ActiveCfg = Release|TwinCAT CE7 (ARMV7) 29 | {1DA0CC61-A651-4B6B-BCE3-1839C2704E23}.Release|TwinCAT CE7 (ARMV7).Build.0 = Release|TwinCAT CE7 (ARMV7) 30 | {1DA0CC61-A651-4B6B-BCE3-1839C2704E23}.Release|TwinCAT OS (ARMT2).ActiveCfg = Release|TwinCAT OS (ARMT2) 31 | {1DA0CC61-A651-4B6B-BCE3-1839C2704E23}.Release|TwinCAT OS (ARMT2).Build.0 = Release|TwinCAT OS (ARMT2) 32 | {1DA0CC61-A651-4B6B-BCE3-1839C2704E23}.Release|TwinCAT RT (x64).ActiveCfg = Release|TwinCAT RT (x64) 33 | {1DA0CC61-A651-4B6B-BCE3-1839C2704E23}.Release|TwinCAT RT (x64).Build.0 = Release|TwinCAT RT (x64) 34 | {1DA0CC61-A651-4B6B-BCE3-1839C2704E23}.Release|TwinCAT RT (x86).ActiveCfg = Release|TwinCAT RT (x86) 35 | {1DA0CC61-A651-4B6B-BCE3-1839C2704E23}.Release|TwinCAT RT (x86).Build.0 = Release|TwinCAT RT (x86) 36 | {0F367A31-25E1-4309-B4DB-37DE0CA39889}.Debug|TwinCAT CE7 (ARMV7).ActiveCfg = Debug|TwinCAT CE7 (ARMV7) 37 | {0F367A31-25E1-4309-B4DB-37DE0CA39889}.Debug|TwinCAT CE7 (ARMV7).Build.0 = Debug|TwinCAT CE7 (ARMV7) 38 | {0F367A31-25E1-4309-B4DB-37DE0CA39889}.Debug|TwinCAT OS (ARMT2).ActiveCfg = Debug|TwinCAT OS (ARMT2) 39 | {0F367A31-25E1-4309-B4DB-37DE0CA39889}.Debug|TwinCAT OS (ARMT2).Build.0 = Debug|TwinCAT OS (ARMT2) 40 | {0F367A31-25E1-4309-B4DB-37DE0CA39889}.Debug|TwinCAT RT (x64).ActiveCfg = Debug|TwinCAT RT (x64) 41 | {0F367A31-25E1-4309-B4DB-37DE0CA39889}.Debug|TwinCAT RT (x64).Build.0 = Debug|TwinCAT RT (x64) 42 | {0F367A31-25E1-4309-B4DB-37DE0CA39889}.Debug|TwinCAT RT (x86).ActiveCfg = Debug|TwinCAT RT (x86) 43 | {0F367A31-25E1-4309-B4DB-37DE0CA39889}.Debug|TwinCAT RT (x86).Build.0 = Debug|TwinCAT RT (x86) 44 | {0F367A31-25E1-4309-B4DB-37DE0CA39889}.Release|TwinCAT CE7 (ARMV7).ActiveCfg = Release|TwinCAT CE7 (ARMV7) 45 | {0F367A31-25E1-4309-B4DB-37DE0CA39889}.Release|TwinCAT CE7 (ARMV7).Build.0 = Release|TwinCAT CE7 (ARMV7) 46 | {0F367A31-25E1-4309-B4DB-37DE0CA39889}.Release|TwinCAT OS (ARMT2).ActiveCfg = Release|TwinCAT OS (ARMT2) 47 | {0F367A31-25E1-4309-B4DB-37DE0CA39889}.Release|TwinCAT OS (ARMT2).Build.0 = Release|TwinCAT OS (ARMT2) 48 | {0F367A31-25E1-4309-B4DB-37DE0CA39889}.Release|TwinCAT RT (x64).ActiveCfg = Release|TwinCAT RT (x64) 49 | {0F367A31-25E1-4309-B4DB-37DE0CA39889}.Release|TwinCAT RT (x64).Build.0 = Release|TwinCAT RT (x64) 50 | {0F367A31-25E1-4309-B4DB-37DE0CA39889}.Release|TwinCAT RT (x86).ActiveCfg = Release|TwinCAT RT (x86) 51 | {0F367A31-25E1-4309-B4DB-37DE0CA39889}.Release|TwinCAT RT (x86).Build.0 = Release|TwinCAT RT (x86) 52 | {DE752FC0-9B2D-4AB0-AE95-50EF01C8043F}.Debug|TwinCAT CE7 (ARMV7).ActiveCfg = Debug|TwinCAT CE7 (ARMV7) 53 | {DE752FC0-9B2D-4AB0-AE95-50EF01C8043F}.Debug|TwinCAT CE7 (ARMV7).Build.0 = Debug|TwinCAT CE7 (ARMV7) 54 | {DE752FC0-9B2D-4AB0-AE95-50EF01C8043F}.Debug|TwinCAT OS (ARMT2).ActiveCfg = Debug|TwinCAT OS (ARMT2) 55 | {DE752FC0-9B2D-4AB0-AE95-50EF01C8043F}.Debug|TwinCAT OS (ARMT2).Build.0 = Debug|TwinCAT OS (ARMT2) 56 | {DE752FC0-9B2D-4AB0-AE95-50EF01C8043F}.Debug|TwinCAT RT (x64).ActiveCfg = Debug|TwinCAT RT (x64) 57 | {DE752FC0-9B2D-4AB0-AE95-50EF01C8043F}.Debug|TwinCAT RT (x64).Build.0 = Debug|TwinCAT RT (x64) 58 | {DE752FC0-9B2D-4AB0-AE95-50EF01C8043F}.Debug|TwinCAT RT (x86).ActiveCfg = Debug|TwinCAT RT (x86) 59 | {DE752FC0-9B2D-4AB0-AE95-50EF01C8043F}.Debug|TwinCAT RT (x86).Build.0 = Debug|TwinCAT RT (x86) 60 | {DE752FC0-9B2D-4AB0-AE95-50EF01C8043F}.Release|TwinCAT CE7 (ARMV7).ActiveCfg = Release|TwinCAT CE7 (ARMV7) 61 | {DE752FC0-9B2D-4AB0-AE95-50EF01C8043F}.Release|TwinCAT CE7 (ARMV7).Build.0 = Release|TwinCAT CE7 (ARMV7) 62 | {DE752FC0-9B2D-4AB0-AE95-50EF01C8043F}.Release|TwinCAT OS (ARMT2).ActiveCfg = Release|TwinCAT OS (ARMT2) 63 | {DE752FC0-9B2D-4AB0-AE95-50EF01C8043F}.Release|TwinCAT OS (ARMT2).Build.0 = Release|TwinCAT OS (ARMT2) 64 | {DE752FC0-9B2D-4AB0-AE95-50EF01C8043F}.Release|TwinCAT RT (x64).ActiveCfg = Release|TwinCAT RT (x64) 65 | {DE752FC0-9B2D-4AB0-AE95-50EF01C8043F}.Release|TwinCAT RT (x64).Build.0 = Release|TwinCAT RT (x64) 66 | {DE752FC0-9B2D-4AB0-AE95-50EF01C8043F}.Release|TwinCAT RT (x86).ActiveCfg = Release|TwinCAT RT (x86) 67 | {DE752FC0-9B2D-4AB0-AE95-50EF01C8043F}.Release|TwinCAT RT (x86).Build.0 = Release|TwinCAT RT (x86) 68 | {C815C559-3B3C-463F-80F5-443F6F671294}.Debug|TwinCAT CE7 (ARMV7).ActiveCfg = Debug|TwinCAT CE7 (ARMV7) 69 | {C815C559-3B3C-463F-80F5-443F6F671294}.Debug|TwinCAT CE7 (ARMV7).Build.0 = Debug|TwinCAT CE7 (ARMV7) 70 | {C815C559-3B3C-463F-80F5-443F6F671294}.Debug|TwinCAT OS (ARMT2).ActiveCfg = Debug|TwinCAT OS (ARMT2) 71 | {C815C559-3B3C-463F-80F5-443F6F671294}.Debug|TwinCAT OS (ARMT2).Build.0 = Debug|TwinCAT OS (ARMT2) 72 | {C815C559-3B3C-463F-80F5-443F6F671294}.Debug|TwinCAT RT (x64).ActiveCfg = Debug|TwinCAT RT (x64) 73 | {C815C559-3B3C-463F-80F5-443F6F671294}.Debug|TwinCAT RT (x64).Build.0 = Debug|TwinCAT RT (x64) 74 | {C815C559-3B3C-463F-80F5-443F6F671294}.Debug|TwinCAT RT (x86).ActiveCfg = Debug|TwinCAT RT (x86) 75 | {C815C559-3B3C-463F-80F5-443F6F671294}.Debug|TwinCAT RT (x86).Build.0 = Debug|TwinCAT RT (x86) 76 | {C815C559-3B3C-463F-80F5-443F6F671294}.Release|TwinCAT CE7 (ARMV7).ActiveCfg = Release|TwinCAT CE7 (ARMV7) 77 | {C815C559-3B3C-463F-80F5-443F6F671294}.Release|TwinCAT CE7 (ARMV7).Build.0 = Release|TwinCAT CE7 (ARMV7) 78 | {C815C559-3B3C-463F-80F5-443F6F671294}.Release|TwinCAT OS (ARMT2).ActiveCfg = Release|TwinCAT OS (ARMT2) 79 | {C815C559-3B3C-463F-80F5-443F6F671294}.Release|TwinCAT OS (ARMT2).Build.0 = Release|TwinCAT OS (ARMT2) 80 | {C815C559-3B3C-463F-80F5-443F6F671294}.Release|TwinCAT RT (x64).ActiveCfg = Release|TwinCAT RT (x64) 81 | {C815C559-3B3C-463F-80F5-443F6F671294}.Release|TwinCAT RT (x64).Build.0 = Release|TwinCAT RT (x64) 82 | {C815C559-3B3C-463F-80F5-443F6F671294}.Release|TwinCAT RT (x86).ActiveCfg = Release|TwinCAT RT (x86) 83 | {C815C559-3B3C-463F-80F5-443F6F671294}.Release|TwinCAT RT (x86).Build.0 = Release|TwinCAT RT (x86) 84 | EndGlobalSection 85 | GlobalSection(SolutionProperties) = preSolution 86 | HideSolutionNode = FALSE 87 | EndGlobalSection 88 | GlobalSection(ExtensibilityGlobals) = postSolution 89 | SolutionGuid = {7CBDD897-9BA4-4FBC-9777-4F9FC495742F} 90 | EndGlobalSection 91 | EndGlobal 92 | -------------------------------------------------------------------------------- /Retentive Timers/Retentive Timers.tsproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | PlcTask 11 | 12 | 13 | PlcTask1 14 | 15 | 16 | PlcTask2 17 | 18 | 19 | 20 | 21 | 22 | 23 | RetentiveTimers Instance 24 | {08500001-0000-0000-F000-000000000064} 25 | 26 | 27 | 0 28 | PlcTask 29 | 30 | #x02010030 31 | 32 | 20 33 | 10000000 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | RetentiveTimerOOP Instance 44 | {08500001-0000-0000-F000-000000000064} 45 | 46 | 47 | 0 48 | PlcTask 49 | 50 | #x02010040 51 | 52 | 21 53 | 10000000 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | RetentiveTimerUnitTest Instance 64 | {08500001-0000-0000-F000-000000000064} 65 | 66 | 67 | 0 68 | PlcTask 69 | 70 | #x02010050 71 | 72 | 22 73 | 10000000 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | -------------------------------------------------------------------------------- /Retentive Timers/Retentive Timers.tsproj.bak: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | PlcTask 11 | 12 | 13 | PlcTask1 14 | 15 | 16 | PlcTask2 17 | 18 | 19 | 20 | 21 | 22 | 23 | RetentiveTimers Instance 24 | {08500001-0000-0000-F000-000000000064} 25 | 26 | 27 | 0 28 | PlcTask 29 | 30 | #x02010030 31 | 32 | 20 33 | 10000000 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | RetentiveTimerOOP Instance 44 | {08500001-0000-0000-F000-000000000064} 45 | 46 | 47 | 0 48 | PlcTask 49 | 50 | #x02010040 51 | 52 | 21 53 | 10000000 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | RetentiveTimerUnitTest Instance 64 | {08500001-0000-0000-F000-000000000064} 65 | 66 | 67 | 0 68 | PlcTask 69 | 70 | #x02010050 71 | 72 | 22 73 | 10000000 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | -------------------------------------------------------------------------------- /Retentive Timers/RetentiveTimerOOP/DUTs/E_Timer_Type.TcDUT: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 22 | 23 | -------------------------------------------------------------------------------- /Retentive Timers/RetentiveTimerOOP/DUTs/ST_Input.TcDUT: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 11 | 12 | -------------------------------------------------------------------------------- /Retentive Timers/RetentiveTimerOOP/DUTs/ST_Output.TcDUT: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 11 | 12 | -------------------------------------------------------------------------------- /Retentive Timers/RetentiveTimerOOP/DUTs/ST_PLC_TASK_INFORMATION.TcDUT: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 11 | 12 | -------------------------------------------------------------------------------- /Retentive Timers/RetentiveTimerOOP/DUTs/ST_Setting.TcDUT: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 10 | 11 | -------------------------------------------------------------------------------- /Retentive Timers/RetentiveTimerOOP/Interfaces/I_Input.TcIO: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 6 | 7 | 12 | 13 | 14 | 19 | 20 | 21 | 25 | 26 | 27 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /Retentive Timers/RetentiveTimerOOP/Interfaces/I_Output.TcIO: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /Retentive Timers/RetentiveTimerOOP/Interfaces/I_Timer.TcIO: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 6 | 7 | 10 | 11 | 12 | 13 | 14 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /Retentive Timers/RetentiveTimerOOP/LineIDs.dbg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fisothemes/TwinCAT-Retentive-Timers/8b3d50ce89ba1bb26f17314a8c1bab688dc20770/Retentive Timers/RetentiveTimerOOP/LineIDs.dbg -------------------------------------------------------------------------------- /Retentive Timers/RetentiveTimerOOP/POUs/Function Block/Timer.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 19 | 20 | 21 | 22 | 23 | 26 | 27 | 0 THEN 29 | i_Timer.Input REF= SUPER^._Input; 30 | i_Timer.Setting REF= SUPER^._Setting; 31 | i_Timer.Cyclic(); 32 | SUPER^._Output := i_Timer.Output; 33 | END_IF 34 | 35 | 36 | 37 | 38 | ]]> 39 | 40 | 41 | 42 | 47 | 48 | 0) THEN 49 | __DELETE(pRStopwatch); 50 | pRStopwatch := 0; 51 | END_IF 52 | 53 | IF (pRTimer <> 0) THEN 54 | __DELETE(pRTimer); 55 | pRTimer := 0; 56 | END_IF 57 | 58 | IF (pRTOF <> 0) THEN 59 | __DELETE(pRTOF); 60 | pRTOF := 0; 61 | END_IF 62 | 63 | IF (pRTON <> 0) THEN 64 | __DELETE(pRTON); 65 | pRTON := 0; 66 | END_IF 67 | 68 | IF (pRTP <> 0) THEN 69 | __DELETE(pRTP); 70 | pRTP := 0; 71 | END_IF 72 | 73 | IF (pStopwatch <> 0) THEN 74 | __DELETE(pStopwatch); 75 | pStopwatch := 0; 76 | END_IF 77 | 78 | IF (pTimer <> 0) THEN 79 | __DELETE(pTimer); 80 | pTimer := 0; 81 | END_IF]]> 82 | 83 | 84 | 85 | 92 | 93 | 127 | 128 | 129 | 130 | -------------------------------------------------------------------------------- /Retentive Timers/RetentiveTimerOOP/POUs/Function Block/Timer_1.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 22 | 23 | 28 | 29 | 30 | 33 | 34 | 0 THEN 36 | i_Timer.Input REF= SUPER^._Input; 37 | i_Timer.Setting REF= SUPER^._Setting; 38 | i_Timer.Cyclic(); 39 | SUPER^._Output := i_Timer.Output; 40 | END_IF 41 | 42 | 43 | 44 | 45 | ]]> 46 | 47 | 48 | 49 | 54 | 55 | 0) THEN 56 | __DELETE(pRStopwatch); 57 | pRStopwatch := 0; 58 | END_IF 59 | 60 | IF (pRTimer <> 0) THEN 61 | __DELETE(pRTimer); 62 | pRTimer := 0; 63 | END_IF 64 | 65 | IF (pRTOF <> 0) THEN 66 | __DELETE(pRTOF); 67 | pRTOF := 0; 68 | END_IF 69 | 70 | IF (pRTON <> 0) THEN 71 | __DELETE(pRTON); 72 | pRTON := 0; 73 | END_IF 74 | 75 | IF (pRTP <> 0) THEN 76 | __DELETE(pRTP); 77 | pRTP := 0; 78 | END_IF 79 | 80 | IF (pStopwatch <> 0) THEN 81 | __DELETE(pStopwatch); 82 | pStopwatch := 0; 83 | END_IF 84 | 85 | IF (pTimer <> 0) THEN 86 | __DELETE(pTimer); 87 | pTimer := 0; 88 | END_IF 89 | 90 | ]]> 91 | 92 | 93 | 94 | 98 | 99 | 0) THEN 102 | i_Timer := pRStopwatch^; 103 | END_IF 104 | 105 | IF (pRTimer <> 0) THEN 106 | i_Timer := pRTimer^; 107 | END_IF 108 | 109 | IF (pRTOF <> 0) THEN 110 | i_Timer := pRTOF^; 111 | END_IF 112 | 113 | IF (pRTON <> 0) THEN 114 | i_Timer := pRTON^; 115 | END_IF 116 | 117 | IF (pRTP <> 0) THEN 118 | i_Timer := pRTP^; 119 | END_IF 120 | 121 | IF (pStopwatch <> 0) THEN 122 | i_Timer := pStopwatch^; 123 | END_IF 124 | 125 | IF (pTimer <> 0) THEN 126 | i_Timer := pTimer^; 127 | END_IF 128 | 129 | END_IF 130 | 131 | 132 | bInit := TRUE;]]> 133 | 134 | 135 | 136 | -------------------------------------------------------------------------------- /Retentive Timers/RetentiveTimerOOP/POUs/Function Block/Timer_Abstract.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 16 | 17 | 18 | 19 | 20 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 43 | 44 | 48 | 49 | 50 | 51 | 52 | 53 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 65 | 66 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 80 | 81 | 84 | 85 | 86 | 87 | 90 | 91 | 95 | 96 | 97 | 98 | 99 | 100 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 115 | 116 | 119 | 120 | 121 | 122 | 126 | 127 | 130 | 131 | 132 | 133 | 137 | 138 | 141 | 142 | 143 | 144 | 145 | 146 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 160 | 161 | 162 | 163 | 164 | 165 | -------------------------------------------------------------------------------- /Retentive Timers/RetentiveTimerOOP/POUs/Function Block/Timers/FB_RStopwatch.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 19 | 20 | 21 | 22 | 23 | 26 | 27 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /Retentive Timers/RetentiveTimerOOP/POUs/Function Block/Timers/FB_RTOF.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 24 | 25 | 26 | 27 | 28 | 31 | 32 | stPLC_Task_Info.CycleCount) OR nLast_Cycle_Count = 0) THEN 39 | SUPER^.Output.bDone := SUPER^._Output.tElapsed <> SUPER^._Setting.tPreSet; 40 | IF (SUPER^._Output.tElapsed >= SUPER^._Setting.tPreSet) THEN SUPER^.Output.bDone := FALSE; eState := IDLE; JMP LBL_TOP; END_IF 41 | tAccumulator := tAccumulator + stPLC_Task_Info.tCycleTime; 42 | SUPER^.Output.tElapsed := LIMIT(T#0MS, THIS^.Lerp(T#0MS, SUPER^._Setting.tPreSet, TO_REAL(tAccumulator)/TO_REAL(SUPER^._Setting.tPreSet))-stPLC_Task_Info.tCycleTime, SUPER^._Setting.tPreSet); 43 | END_IF 44 | nLast_Cycle_Count := stPLC_Task_Info.CycleCount; 45 | IF SUPER^._Input.bStart THEN tAccumulator := SUPER^.Output.tElapsed := T#0MS;END_IF 46 | END_CASE]]> 47 | 48 | 49 | 50 | 58 | 59 | 61 | 62 | 63 | 64 | -------------------------------------------------------------------------------- /Retentive Timers/RetentiveTimerOOP/POUs/Function Block/Timers/FB_RTON.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 23 | 24 | 25 | 26 | 27 | 30 | 31 | = SUPER^._Setting.tPreSet; 34 | 35 | IF NOT(SUPER^._Output.bDone) AND ((nLast_Cycle_Count <> stPLC_Task_Info.CycleCount) OR nLast_Cycle_Count = 0) THEN 36 | tAccumulator := tAccumulator + stPLC_Task_Info.tCycleTime; 37 | SUPER^._Output.tElapsed := LIMIT(T#0MS, THIS^.Lerp(T#0MS, SUPER^._Setting.tPreSet, TO_REAL(tAccumulator)/TO_REAL(SUPER^._Setting.tPreSet))-stPLC_Task_Info.tCycleTime, SUPER^._Setting.tPreSet); 38 | nLast_Cycle_Count := stPLC_Task_Info.CycleCount; 39 | END_IF 40 | RETURN; 41 | END_IF 42 | tAccumulator := SUPER^._Output.tElapsed := T#0MS; SUPER^._Output.bDone := FALSE;]]> 43 | 44 | 45 | 46 | 54 | 55 | 57 | 58 | 59 | 60 | -------------------------------------------------------------------------------- /Retentive Timers/RetentiveTimerOOP/POUs/Function Block/Timers/FB_RTP.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 24 | 25 | 26 | 27 | 28 | 31 | 32 | 48 | 49 | 50 | 51 | 59 | 60 | 62 | 63 | 64 | 65 | -------------------------------------------------------------------------------- /Retentive Timers/RetentiveTimerOOP/POUs/Function Block/Timers/FB_RTimer.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 19 | 20 | 21 | 22 | 23 | 26 | 27 | SUPER^._Output.bDone, tElapsed => SUPER^._Output.tElapsed); 29 | fbRTON._Input.bStart := FALSE; 30 | fbRTON._Setting.tPreSet := SUPER^._Setting.tPreSet; 31 | fbRTON.Cyclic(); 32 | SUPER^._Output := fbRTON.Output; 33 | RETURN; 34 | END_IF 35 | 36 | IF SUPER^._Input.bPause THEN RETURN; END_IF; 37 | 38 | //fbRTON(bStart := TRUE, tPreSet := SUPER^._Setting.tPreSet, bDone => SUPER^._Output.bDone, tElapsed => SUPER^._Output.tElapsed); 39 | fbRTON._Input.bStart := TRUE; 40 | fbRTON._Setting.tPreSet := SUPER^._Setting.tPreSet; 41 | fbRTON.Cyclic(); 42 | SUPER^._Output := fbRTON.Output; 43 | ]]> 44 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /Retentive Timers/RetentiveTimerOOP/POUs/Function Block/Timers/FB_Stopwatch.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 18 | 19 | 20 | 21 | 22 | 25 | 26 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /Retentive Timers/RetentiveTimerOOP/POUs/Function Block/Timers/FB_Timer.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 21 | 22 | 23 | 24 | 25 | 28 | 29 | SUPER^._Output.bDone); 31 | IF SUPER^._Input.bPause THEN 32 | tPaused := fbTON.ET + tPaused; 33 | fbTON(IN := FALSE); 34 | ELSE 35 | fbTON(IN := SUPER^._Input.bStart); 36 | SUPER^._Output.tElapsed := fbTON.ET + tPaused; 37 | END_IF]]> 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /Retentive Timers/RetentiveTimerOOP/POUs/Functions/F_Get_PLC_Task_Information.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 16 | 17 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /Retentive Timers/RetentiveTimerOOP/POUs/MAIN.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 22 | 23 | T#4S THEN 66 | fbRStopwatch.Input.bStart := FALSE; 67 | eStep:= RTimer; 68 | END_IF 69 | 70 | RTimer: 71 | // Example Methods. 72 | fbRTimer.Start(TRUE); 73 | IF fbRTimer.Output.bDone THEN 74 | fbRTimer.Start(FALSE); 75 | eStep:= RTOF; 76 | END_IF 77 | 78 | RTOF: 79 | // Example Fluid Interface : https://www.plccoder.com/fluent-code/ 80 | IF NOT fbRTOF.Start(FALSE).Done THEN 81 | fbRTOF.Start(TRUE); 82 | eStep:= RTON; 83 | END_IF 84 | 85 | RTON: 86 | i_Input := fbRTON ; // use of Polymorphism. 87 | // Example Polymorphism with Fluid Interface. 88 | IF i_Input.Start(TRUE).Done THEN 89 | fbRTON.Start(FALSE); 90 | eStep:= Start_RTP; 91 | END_IF 92 | 93 | Start_RTP: 94 | fbRTP.Input.bStart := TRUE; // use of Property. 95 | eStep:= RTP; 96 | 97 | RTP: 98 | IF NOT fbRTP.Done THEN // use of Property. 99 | fbRTP.Start(FALSE); // use of Methods. 100 | eStep:= Start_Stopwatch; 101 | END_IF 102 | 103 | Start_Stopwatch: 104 | i_Input := fbRStopwatch ; // use of Polymorphism. 105 | i_Input.Start(TRUE); 106 | eStep:= Stopwatch; 107 | 108 | Stopwatch: 109 | // Example Polymorphism with Fluid Interface. 110 | IF i_Input.StartTimer().tElapsed > T#3S THEN 111 | i_Input.StopTimer(); 112 | eStep:= Timer; 113 | END_IF 114 | 115 | Timer: 116 | i_Input := fbTimer ; // use of Polymorphism. 117 | IF i_Input.Start(TRUE).tElapsed > T#1S AND counter < 500 THEN 118 | i_Input.Pause(TRUE); 119 | counter := counter + 1; 120 | END_IF 121 | 122 | IF i_Input.Start(TRUE).tElapsed > T#1S AND counter >= 500 THEN 123 | i_Input.Pause(FALSE); 124 | END_IF 125 | 126 | IF i_Input.Start(TRUE).Done THEN //// use of Polymorphism with fluid interface... 127 | i_Input.Start(FALSE); 128 | counter := 0; 129 | eStep:= RTON_1; //Initialization; 130 | END_IF 131 | 132 | RTON_1: 133 | i_Input := fbRTON_1 ; // use of Polymorphism. 134 | // Example Polymorphism with Fluid Interface. 135 | IF i_Input.Start(TRUE).Done THEN 136 | fbRTON.Start(FALSE); 137 | eStep:= Initialization; 138 | END_IF 139 | 140 | END_CASE 141 | 142 | fbRStopwatch(); 143 | fbRTimer(); 144 | fbRTOF(); 145 | fbRTON(); 146 | fbRTP(); 147 | fbStopwatch(); 148 | fbTimer(); 149 | fbRTON_1();]]> 150 | 151 | 152 | -------------------------------------------------------------------------------- /Retentive Timers/RetentiveTimerOOP/POUs/P_Example_1_TONs.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 22 | 23 | Activate Configuration and START(F5) PLC Boot Project 26 | -> Login (if you haven't already) 27 | -> Make sure both timers are set for 10 mins 28 | -> Start the timers by writing a TRUE to the bStart variable 29 | -> Let the timers run for a little bit 30 | -> Notice that both elapsed time read are the same 31 | -> STOP(Shift+F5) the PLC Boot Project for approx. 10-30secs 32 | -> START(F5) the PLC Boot Project 33 | 34 | --> Notice the TON elapsed time (tElapsed_Time_TON) is 10-30secs ahead of the FB_RTON elapsed time (tElapsed_Time_RTON) 35 | --> FB_RTON resumes from where it left-off if PLC is stopped. 36 | *) 37 | 38 | fbTON(IN := bStart, PT := tSet_Time, 39 | Q => bElapsed_Time_TON, ET => tElapsed_Time_TON); 40 | 41 | //fbRTON(IN := bStart, PT := tSet_Time, 42 | // Q => bElapsed_Time_RTON, ET => tElapsed_Time_RTON); 43 | 44 | fbRTON.tPreSet(tSet_Time); // use of Method. 45 | i_Input := fbRTON ; // use of Polymorphism. 46 | i_Input.Start(bStart); 47 | bElapsed_Time_RTON := fbRTON.Output.bDone; 48 | tElapsed_Time_RTON := fbRTON.Output.tElapsed; 49 | fbRTON();]]> 50 | 51 | 52 | -------------------------------------------------------------------------------- /Retentive Timers/RetentiveTimerOOP/PlcTask.TcTTO: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 10000 6 | 21 7 | 8 | MAIN 9 | 10 | {7b5269ad-6bb8-46e8-bd0d-69723458a75a} 11 | {9d0fbe46-9660-466a-ace1-5d542988888a} 12 | {a24ae08e-660e-46cc-aa25-97dffea2afc9} 13 | {c5d910a1-7acf-4522-868a-1900260c40e5} 14 | {43bbc200-275b-4fac-b91b-e146e135ec85} 15 | 16 | 17 | -------------------------------------------------------------------------------- /Retentive Timers/RetentiveTimerOOP/Project Information/F_GetCompany.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 12 | 13 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /Retentive Timers/RetentiveTimerOOP/Project Information/F_GetTitle.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 12 | 13 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /Retentive Timers/RetentiveTimerOOP/Project Information/F_GetVersion.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 12 | 13 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /Retentive Timers/RetentiveTimerOOP/RetentiveTimerOOP.plcproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 1.0.0.0 4 | 2.0 5 | {c815c559-3b3c-463f-80f5-443f6f671294} 6 | True 7 | true 8 | true 9 | false 10 | RetentiveTimerOOP 11 | 3.1.4023.0 12 | {13faea5d-d222-4497-87be-d5b6085fe03d} 13 | {ac300332-e58e-415a-9eff-1ebca57b9225} 14 | {578b7622-bb37-495b-8112-83b51807c21e} 15 | {85a6de96-bd63-408a-8c88-db90223d844b} 16 | {78dd5b35-f2c0-4fef-ae0b-324c5c7c1f0c} 17 | {33eebe84-20f7-461d-926e-83d71be4e940} 18 | FisoThemes&Runtimevic 19 | false 20 | Retentive Timers 21 | 0.0.1.1 22 | RTimers 23 | Goodwill Mzumala & Victor Duran 24 | Standard library timers on TwinCAT count time by taking the difference between the current time from system timer and start time from system timer. 25 | While this is fine for most application, it is problematic for operations that require time to be retained even if the PLC is paused, stopped or turned off. 26 | For example, if a `TON` (Timer On-Delay) Timer is running and you stop the PLC Boot Project for a period of time, the `TON` will not resume from the point it was stopped. 27 | Instead it will skip time by the number of ms/secs/mins/hours it was stopped. 28 | This makes it useless for applications such as tracking the length of time a PLC has been running or retaining persistent time. 29 | 30 | Retentive variants of the Standard library timers stop this from happen. They are based on PLC Task cycle time rather than system time. 31 | This means they will simply stop counting when the PLC Task Cycle is stopped and will resume from where they left-off as soon as the task cycle picks up. 32 | All arguments behave in the same manner as those of the standard library. 33 | reStructuredText 34 | 35 | 36 | {5df2df86-2142-4224-b358-21a532087d2f} 37 | 1.0.0.0 38 | FisoThemesRuntimevic 39 | 40 | 41 | {70325151-8e67-4486-ae1e-bd90ed47b600} 42 | 1.0.0.0 43 | 44 | {5df2df86-2142-4224-b358-21a532087d2f} 45 | 46 | Timers 47 | 48 | 49 | 50 | {70325151-8e67-4486-ae1e-bd90ed47b600} 51 | 52 | 53 | 54 | 55 | Code 56 | 57 | 58 | Code 59 | 60 | 61 | Code 62 | 63 | 64 | Code 65 | 66 | 67 | Code 68 | 69 | 70 | Code 71 | 72 | 73 | Code 74 | 75 | 76 | Code 77 | 78 | 79 | Code 80 | 81 | 82 | Code 83 | 84 | 85 | Code 86 | 87 | 88 | Code 89 | 90 | 91 | Code 92 | 93 | 94 | Code 95 | 96 | 97 | Code 98 | 99 | 100 | Code 101 | 102 | 103 | Code 104 | 105 | 106 | Code 107 | 108 | 109 | Code 110 | 111 | 112 | Code 113 | 114 | 115 | Code 116 | 117 | 118 | Code 119 | 120 | 121 | Code 122 | true 123 | 124 | 125 | Code 126 | true 127 | 128 | 129 | Code 130 | true 131 | 132 | 133 | Code 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | Tc2_Standard, * (Beckhoff Automation GmbH) 149 | Tc2_Standard 150 | 151 | 152 | Tc2_System, * (Beckhoff Automation GmbH) 153 | Tc2_System 154 | 155 | 156 | Tc3_Module, * (Beckhoff Automation GmbH) 157 | Tc3_Module 158 | 159 | 160 | 161 | 162 | Content 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | "<ProjectRoot>" 171 | 172 | {40450F57-0AA3-4216-96F3-5444ECB29763} 173 | 174 | "{40450F57-0AA3-4216-96F3-5444ECB29763}" 175 | 176 | 177 | ActiveVisuProfile 178 | IR0whWr8bwfwBwAAiD2qpQAAAABVAgAA37x72QAAAAABAAAAAAAAAAEaUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwACTHsAZgA5ADUAYgBiADQAMgA2AC0ANQA1ADIANAAtADQAYgA0ADUALQA5ADQAMAAwAC0AZgBiADAAZgAyAGUANwA3AGUANQAxAGIAfQADCE4AYQBtAGUABDBUAHcAaQBuAEMAQQBUACAAMwAuADEAIABCAHUAaQBsAGQAIAA0ADAAMgA0AC4ANwAFFlAAcgBvAGYAaQBsAGUARABhAHQAYQAGTHsAMQA2AGUANQA1AGIANgAwAC0ANwAwADQAMwAtADQAYQA2ADMALQBiADYANQBiAC0ANgAxADQANwAxADMAOAA3ADgAZAA0ADIAfQAHEkwAaQBiAHIAYQByAGkAZQBzAAhMewAzAGIAZgBkADUANAA1ADkALQBiADAANwBmAC0ANABkADYAZQAtAGEAZQAxAGEALQBhADgAMwAzADUANgBhADUANQAxADQAMgB9AAlMewA5AGMAOQA1ADgAOQA2ADgALQAyAGMAOAA1AC0ANAAxAGIAYgAtADgAOAA3ADEALQA4ADkANQBmAGYAMQBmAGUAZABlADEAYQB9AAoOVgBlAHIAcwBpAG8AbgALBmkAbgB0AAwKVQBzAGEAZwBlAA0KVABpAHQAbABlAA4aVgBpAHMAdQBFAGwAZQBtAE0AZQB0AGUAcgAPDkMAbwBtAHAAYQBuAHkAEAxTAHkAcwB0AGUAbQARElYAaQBzAHUARQBsAGUAbQBzABIwVgBpAHMAdQBFAGwAZQBtAHMAUwBwAGUAYwBpAGEAbABDAG8AbgB0AHIAbwBsAHMAEyhWAGkAcwB1AEUAbABlAG0AcwBXAGkAbgBDAG8AbgB0AHIAbwBsAHMAFCRWAGkAcwB1AEUAbABlAG0AVABlAHgAdABFAGQAaQB0AG8AcgAVIlYAaQBzAHUATgBhAHQAaQB2AGUAQwBvAG4AdAByAG8AbAAWFHYAaQBzAHUAaQBuAHAAdQB0AHMAFwxzAHkAcwB0AGUAbQAYGFYAaQBzAHUARQBsAGUAbQBCAGEAcwBlABkmRABlAHYAUABsAGEAYwBlAGgAbwBsAGQAZQByAHMAVQBzAGUAZAAaCGIAbwBvAGwAGyJQAGwAdQBnAGkAbgBDAG8AbgBzAHQAcgBhAGkAbgB0AHMAHEx7ADQAMwBkADUAMgBiAGMAZQAtADkANAAyAGMALQA0ADQAZAA3AC0AOQBlADkANAAtADEAYgBmAGQAZgAzADEAMABlADYAMwBjAH0AHRxBAHQATABlAGEAcwB0AFYAZQByAHMAaQBvAG4AHhRQAGwAdQBnAGkAbgBHAHUAaQBkAB8WUwB5AHMAdABlAG0ALgBHAHUAaQBkACBIYQBmAGMAZAA1ADQANAA2AC0ANAA5ADEANAAtADQAZgBlADcALQBiAGIANwA4AC0AOQBiAGYAZgBlAGIANwAwAGYAZAAxADcAIRRVAHAAZABhAHQAZQBJAG4AZgBvACJMewBiADAAMwAzADYANgBhADgALQBiADUAYwAwAC0ANABiADkAYQAtAGEAMAAwAGUALQBlAGIAOAA2ADAAMQAxADEAMAA0AGMAMwB9ACMOVQBwAGQAYQB0AGUAcwAkTHsAMQA4ADYAOABmAGYAYwA5AC0AZQA0AGYAYwAtADQANQAzADIALQBhAGMAMAA2AC0AMQBlADMAOQBiAGIANQA1ADcAYgA2ADkAfQAlTHsAYQA1AGIAZAA0ADgAYwAzAC0AMABkADEANwAtADQAMQBiADUALQBiADEANgA0AC0ANQBmAGMANgBhAGQAMgBiADkANgBiADcAfQAmFk8AYgBqAGUAYwB0AHMAVAB5AHAAZQAnVFUAcABkAGEAdABlAEwAYQBuAGcAdQBhAGcAZQBNAG8AZABlAGwARgBvAHIAQwBvAG4AdgBlAHIAdABpAGIAbABlAEwAaQBiAHIAYQByAGkAZQBzACgQTABpAGIAVABpAHQAbABlACkUTABpAGIAQwBvAG0AcABhAG4AeQAqHlUAcABkAGEAdABlAFAAcgBvAHYAaQBkAGUAcgBzACs4UwB5AHMAdABlAG0ALgBDAG8AbABsAGUAYwB0AGkAbwBuAHMALgBIAGEAcwBoAHQAYQBiAGwAZQAsEnYAaQBzAHUAZQBsAGUAbQBzAC1INgBjAGIAMQBjAGQAZQAxAC0AZAA1AGQAYwAtADQAYQAzAGIALQA5ADAANQA0AC0AMgAxAGYAYQA3ADUANgBhADMAZgBhADQALihJAG4AdABlAHIAZgBhAGMAZQBWAGUAcgBzAGkAbwBuAEkAbgBmAG8AL0x7AGMANgAxADEAZQA0ADAAMAAtADcAZgBiADkALQA0AGMAMwA1AC0AYgA5AGEAYwAtADQAZQAzADEANABiADUAOQA5ADYANAAzAH0AMBhNAGEAagBvAHIAVgBlAHIAcwBpAG8AbgAxGE0AaQBuAG8AcgBWAGUAcgBzAGkAbwBuADIMTABlAGcAYQBjAHkAMzBMAGEAbgBnAHUAYQBnAGUATQBvAGQAZQBsAFYAZQByAHMAaQBvAG4ASQBuAGYAbwA0MEwAbwBhAGQATABpAGIAcgBhAHIAaQBlAHMASQBuAHQAbwBQAHIAbwBqAGUAYwB0ADUaQwBvAG0AcABhAHQAaQBiAGkAbABpAHQAeQDQAAIaA9ADAS0E0AUGGgfQBwgaAUUHCQjQAAkaBEUKCwQDAAAABQAAAA0AAAAAAAAA0AwLrQIAAADQDQEtDtAPAS0Q0AAJGgRFCgsEAwAAAAUAAAANAAAAKAAAANAMC60BAAAA0A0BLRHQDwEtENAACRoERQoLBAMAAAAFAAAADQAAAAAAAADQDAutAgAAANANAS0S0A8BLRDQAAkaBEUKCwQDAAAABQAAAA0AAAAUAAAA0AwLrQIAAADQDQEtE9APAS0Q0AAJGgRFCgsEAwAAAAUAAAANAAAAAAAAANAMC60CAAAA0A0BLRTQDwEtENAACRoERQoLBAMAAAAFAAAADQAAAAAAAADQDAutAgAAANANAS0V0A8BLRDQAAkaBEUKCwQDAAAABQAAAA0AAAAAAAAA0AwLrQIAAADQDQEtFtAPAS0X0AAJGgRFCgsEAwAAAAUAAAANAAAAKAAAANAMC60EAAAA0A0BLRjQDwEtENAZGq0BRRscAdAAHBoCRR0LBAMAAAAFAAAADQAAAAAAAADQHh8tINAhIhoCRSMkAtAAJRoFRQoLBAMAAAADAAAAAAAAAAoAAADQJgutAAAAANADAS0n0CgBLRHQKQEtENAAJRoFRQoLBAMAAAADAAAAAAAAAAoAAADQJgutAQAAANADAS0n0CgBLRHQKQEtEJoqKwFFAAEC0AABLSzQAAEtF9AAHy0t0C4vGgPQMAutAQAAANAxC60XAAAA0DIarQDQMy8aA9AwC60CAAAA0DELrQMAAADQMhqtANA0Gq0A0DUarQA= 179 | 180 | 181 | {192FAD59-8248-4824-A8DE-9177C94C195A} 182 | 183 | "{192FAD59-8248-4824-A8DE-9177C94C195A}" 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | System.Collections.Hashtable 193 | {54dd0eac-a6d8-46f2-8c27-2f43c7e49861} 194 | System.String 195 | 196 | 197 | 198 | 199 | -------------------------------------------------------------------------------- /Retentive Timers/RetentiveTimerOOP/Version/Global_Version.TcGVL: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 13 | 14 | -------------------------------------------------------------------------------- /Retentive Timers/RetentiveTimerOOP/_Libraries/beckhoff automation gmbh/tc2_standard/3.3.3.0/tc2_standard.compiled-library: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fisothemes/TwinCAT-Retentive-Timers/8b3d50ce89ba1bb26f17314a8c1bab688dc20770/Retentive Timers/RetentiveTimerOOP/_Libraries/beckhoff automation gmbh/tc2_standard/3.3.3.0/tc2_standard.compiled-library -------------------------------------------------------------------------------- /Retentive Timers/RetentiveTimerOOP/_Libraries/beckhoff automation gmbh/tc2_system/3.4.26.0/tc2_system.compiled-library: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fisothemes/TwinCAT-Retentive-Timers/8b3d50ce89ba1bb26f17314a8c1bab688dc20770/Retentive Timers/RetentiveTimerOOP/_Libraries/beckhoff automation gmbh/tc2_system/3.4.26.0/tc2_system.compiled-library -------------------------------------------------------------------------------- /Retentive Timers/RetentiveTimerOOP/_Libraries/beckhoff automation gmbh/tc3_module/3.3.21.0/tc3_module.compiled-library: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fisothemes/TwinCAT-Retentive-Timers/8b3d50ce89ba1bb26f17314a8c1bab688dc20770/Retentive Timers/RetentiveTimerOOP/_Libraries/beckhoff automation gmbh/tc3_module/3.3.21.0/tc3_module.compiled-library -------------------------------------------------------------------------------- /Retentive Timers/RetentiveTimerUnitTest/LineIDs.dbg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fisothemes/TwinCAT-Retentive-Timers/8b3d50ce89ba1bb26f17314a8c1bab688dc20770/Retentive Timers/RetentiveTimerUnitTest/LineIDs.dbg -------------------------------------------------------------------------------- /Retentive Timers/RetentiveTimerUnitTest/POUs/FB_A.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 11 | 12 | 13 | 14 | 15 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /Retentive Timers/RetentiveTimerUnitTest/POUs/FB_B.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /Retentive Timers/RetentiveTimerUnitTest/POUs/MAIN.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 12 | 13 | sum );]]> 16 | 17 | 18 | -------------------------------------------------------------------------------- /Retentive Timers/RetentiveTimerUnitTest/PlcTask.TcTTO: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 10000 6 | 22 7 | 8 | MAIN 9 | 10 | {727ffc52-6a61-4a9f-95d6-f074f9824118} 11 | {ccda9326-f376-45fe-b1a9-717dc7995496} 12 | {2510abb7-b29c-4812-9f78-66fa1f9ed1d0} 13 | {97d5c8a0-fbec-4604-b478-112c23fc8a33} 14 | {a3b26330-406a-4e1f-81dc-82337a779ae7} 15 | 16 | 17 | -------------------------------------------------------------------------------- /Retentive Timers/RetentiveTimerUnitTest/RetentiveTimerUnitTest.plcproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 1.0.0.0 4 | 2.0 5 | {de752fc0-9b2d-4ab0-ae95-50ef01c8043f} 6 | True 7 | true 8 | true 9 | false 10 | RetentiveTimerUnitTest 11 | 3.1.4023.0 12 | {afae5f07-c9df-44fe-af36-f3b14ea3c8fc} 13 | {89b3e54f-08f5-4c06-a37d-e0a0d5a1c1bc} 14 | {f9c7011e-8408-45f5-a876-f5c832d716d1} 15 | {dc77444e-efd7-41d7-9dd0-0ef15561d848} 16 | {2fd54f46-3eb4-4ac9-9cd0-2f255ef21f75} 17 | {765cee5f-5788-410f-9b86-139b02e0ea0d} 18 | 19 | 20 | 21 | Code 22 | 23 | 24 | Code 25 | 26 | 27 | Code 28 | 29 | 30 | Code 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | Retentive Timers, * (FisoThemes&Runtimevic) 42 | RTimers 43 | 44 | 45 | Tc2_Standard, * (Beckhoff Automation GmbH) 46 | Tc2_Standard 47 | 48 | 49 | Tc2_System, * (Beckhoff Automation GmbH) 50 | Tc2_System 51 | 52 | 53 | Tc3_Module, * (Beckhoff Automation GmbH) 54 | Tc3_Module 55 | 56 | 57 | 58 | 59 | Content 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | "<ProjectRoot>" 68 | 69 | {192FAD59-8248-4824-A8DE-9177C94C195A} 70 | 71 | "{192FAD59-8248-4824-A8DE-9177C94C195A}" 72 | 73 | 74 | 75 | {29BD8D0C-3586-4548-BB48-497B9A01693F} 76 | 77 | "{29BD8D0C-3586-4548-BB48-497B9A01693F}" 78 | 79 | Rules 80 | 81 | "Rules" 82 | 83 | 84 | 85 | 86 | 87 | 88 | {40450F57-0AA3-4216-96F3-5444ECB29763} 89 | 90 | "{40450F57-0AA3-4216-96F3-5444ECB29763}" 91 | 92 | 93 | ActiveVisuProfile 94 | IR0whWr8bwfwBwAAiD2qpQAAAABVAgAA37x72QAAAAABAAAAAAAAAAEaUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwACTHsAZgA5ADUAYgBiADQAMgA2AC0ANQA1ADIANAAtADQAYgA0ADUALQA5ADQAMAAwAC0AZgBiADAAZgAyAGUANwA3AGUANQAxAGIAfQADCE4AYQBtAGUABDBUAHcAaQBuAEMAQQBUACAAMwAuADEAIABCAHUAaQBsAGQAIAA0ADAAMgA0AC4ANwAFFlAAcgBvAGYAaQBsAGUARABhAHQAYQAGTHsAMQA2AGUANQA1AGIANgAwAC0ANwAwADQAMwAtADQAYQA2ADMALQBiADYANQBiAC0ANgAxADQANwAxADMAOAA3ADgAZAA0ADIAfQAHEkwAaQBiAHIAYQByAGkAZQBzAAhMewAzAGIAZgBkADUANAA1ADkALQBiADAANwBmAC0ANABkADYAZQAtAGEAZQAxAGEALQBhADgAMwAzADUANgBhADUANQAxADQAMgB9AAlMewA5AGMAOQA1ADgAOQA2ADgALQAyAGMAOAA1AC0ANAAxAGIAYgAtADgAOAA3ADEALQA4ADkANQBmAGYAMQBmAGUAZABlADEAYQB9AAoOVgBlAHIAcwBpAG8AbgALBmkAbgB0AAwKVQBzAGEAZwBlAA0KVABpAHQAbABlAA4aVgBpAHMAdQBFAGwAZQBtAE0AZQB0AGUAcgAPDkMAbwBtAHAAYQBuAHkAEAxTAHkAcwB0AGUAbQARElYAaQBzAHUARQBsAGUAbQBzABIwVgBpAHMAdQBFAGwAZQBtAHMAUwBwAGUAYwBpAGEAbABDAG8AbgB0AHIAbwBsAHMAEyhWAGkAcwB1AEUAbABlAG0AcwBXAGkAbgBDAG8AbgB0AHIAbwBsAHMAFCRWAGkAcwB1AEUAbABlAG0AVABlAHgAdABFAGQAaQB0AG8AcgAVIlYAaQBzAHUATgBhAHQAaQB2AGUAQwBvAG4AdAByAG8AbAAWFHYAaQBzAHUAaQBuAHAAdQB0AHMAFwxzAHkAcwB0AGUAbQAYGFYAaQBzAHUARQBsAGUAbQBCAGEAcwBlABkmRABlAHYAUABsAGEAYwBlAGgAbwBsAGQAZQByAHMAVQBzAGUAZAAaCGIAbwBvAGwAGyJQAGwAdQBnAGkAbgBDAG8AbgBzAHQAcgBhAGkAbgB0AHMAHEx7ADQAMwBkADUAMgBiAGMAZQAtADkANAAyAGMALQA0ADQAZAA3AC0AOQBlADkANAAtADEAYgBmAGQAZgAzADEAMABlADYAMwBjAH0AHRxBAHQATABlAGEAcwB0AFYAZQByAHMAaQBvAG4AHhRQAGwAdQBnAGkAbgBHAHUAaQBkAB8WUwB5AHMAdABlAG0ALgBHAHUAaQBkACBIYQBmAGMAZAA1ADQANAA2AC0ANAA5ADEANAAtADQAZgBlADcALQBiAGIANwA4AC0AOQBiAGYAZgBlAGIANwAwAGYAZAAxADcAIRRVAHAAZABhAHQAZQBJAG4AZgBvACJMewBiADAAMwAzADYANgBhADgALQBiADUAYwAwAC0ANABiADkAYQAtAGEAMAAwAGUALQBlAGIAOAA2ADAAMQAxADEAMAA0AGMAMwB9ACMOVQBwAGQAYQB0AGUAcwAkTHsAMQA4ADYAOABmAGYAYwA5AC0AZQA0AGYAYwAtADQANQAzADIALQBhAGMAMAA2AC0AMQBlADMAOQBiAGIANQA1ADcAYgA2ADkAfQAlTHsAYQA1AGIAZAA0ADgAYwAzAC0AMABkADEANwAtADQAMQBiADUALQBiADEANgA0AC0ANQBmAGMANgBhAGQAMgBiADkANgBiADcAfQAmFk8AYgBqAGUAYwB0AHMAVAB5AHAAZQAnVFUAcABkAGEAdABlAEwAYQBuAGcAdQBhAGcAZQBNAG8AZABlAGwARgBvAHIAQwBvAG4AdgBlAHIAdABpAGIAbABlAEwAaQBiAHIAYQByAGkAZQBzACgQTABpAGIAVABpAHQAbABlACkUTABpAGIAQwBvAG0AcABhAG4AeQAqHlUAcABkAGEAdABlAFAAcgBvAHYAaQBkAGUAcgBzACs4UwB5AHMAdABlAG0ALgBDAG8AbABsAGUAYwB0AGkAbwBuAHMALgBIAGEAcwBoAHQAYQBiAGwAZQAsEnYAaQBzAHUAZQBsAGUAbQBzAC1INgBjAGIAMQBjAGQAZQAxAC0AZAA1AGQAYwAtADQAYQAzAGIALQA5ADAANQA0AC0AMgAxAGYAYQA3ADUANgBhADMAZgBhADQALihJAG4AdABlAHIAZgBhAGMAZQBWAGUAcgBzAGkAbwBuAEkAbgBmAG8AL0x7AGMANgAxADEAZQA0ADAAMAAtADcAZgBiADkALQA0AGMAMwA1AC0AYgA5AGEAYwAtADQAZQAzADEANABiADUAOQA5ADYANAAzAH0AMBhNAGEAagBvAHIAVgBlAHIAcwBpAG8AbgAxGE0AaQBuAG8AcgBWAGUAcgBzAGkAbwBuADIMTABlAGcAYQBjAHkAMzBMAGEAbgBnAHUAYQBnAGUATQBvAGQAZQBsAFYAZQByAHMAaQBvAG4ASQBuAGYAbwA0MEwAbwBhAGQATABpAGIAcgBhAHIAaQBlAHMASQBuAHQAbwBQAHIAbwBqAGUAYwB0ADUaQwBvAG0AcABhAHQAaQBiAGkAbABpAHQAeQDQAAIaA9ADAS0E0AUGGgfQBwgaAUUHCQjQAAkaBEUKCwQDAAAABQAAAA0AAAAAAAAA0AwLrQIAAADQDQEtDtAPAS0Q0AAJGgRFCgsEAwAAAAUAAAANAAAAKAAAANAMC60BAAAA0A0BLRHQDwEtENAACRoERQoLBAMAAAAFAAAADQAAAAAAAADQDAutAgAAANANAS0S0A8BLRDQAAkaBEUKCwQDAAAABQAAAA0AAAAUAAAA0AwLrQIAAADQDQEtE9APAS0Q0AAJGgRFCgsEAwAAAAUAAAANAAAAAAAAANAMC60CAAAA0A0BLRTQDwEtENAACRoERQoLBAMAAAAFAAAADQAAAAAAAADQDAutAgAAANANAS0V0A8BLRDQAAkaBEUKCwQDAAAABQAAAA0AAAAAAAAA0AwLrQIAAADQDQEtFtAPAS0X0AAJGgRFCgsEAwAAAAUAAAANAAAAKAAAANAMC60EAAAA0A0BLRjQDwEtENAZGq0BRRscAdAAHBoCRR0LBAMAAAAFAAAADQAAAAAAAADQHh8tINAhIhoCRSMkAtAAJRoFRQoLBAMAAAADAAAAAAAAAAoAAADQJgutAAAAANADAS0n0CgBLRHQKQEtENAAJRoFRQoLBAMAAAADAAAAAAAAAAoAAADQJgutAQAAANADAS0n0CgBLRHQKQEtEJoqKwFFAAEC0AABLSzQAAEtF9AAHy0t0C4vGgPQMAutAQAAANAxC60XAAAA0DIarQDQMy8aA9AwC60CAAAA0DELrQMAAADQMhqtANA0Gq0A0DUarQA= 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | System.Collections.Hashtable 103 | {54dd0eac-a6d8-46f2-8c27-2f43c7e49861} 104 | System.String 105 | 106 | 107 | 108 | 109 | -------------------------------------------------------------------------------- /Retentive Timers/RetentiveTimerUnitTest/_Libraries/beckhoff automation gmbh/tc2_standard/3.3.3.0/tc2_standard.compiled-library: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fisothemes/TwinCAT-Retentive-Timers/8b3d50ce89ba1bb26f17314a8c1bab688dc20770/Retentive Timers/RetentiveTimerUnitTest/_Libraries/beckhoff automation gmbh/tc2_standard/3.3.3.0/tc2_standard.compiled-library -------------------------------------------------------------------------------- /Retentive Timers/RetentiveTimerUnitTest/_Libraries/beckhoff automation gmbh/tc2_system/3.4.26.0/tc2_system.compiled-library: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fisothemes/TwinCAT-Retentive-Timers/8b3d50ce89ba1bb26f17314a8c1bab688dc20770/Retentive Timers/RetentiveTimerUnitTest/_Libraries/beckhoff automation gmbh/tc2_system/3.4.26.0/tc2_system.compiled-library -------------------------------------------------------------------------------- /Retentive Timers/RetentiveTimerUnitTest/_Libraries/beckhoff automation gmbh/tc3_module/3.3.21.0/tc3_module.compiled-library: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fisothemes/TwinCAT-Retentive-Timers/8b3d50ce89ba1bb26f17314a8c1bab688dc20770/Retentive Timers/RetentiveTimerUnitTest/_Libraries/beckhoff automation gmbh/tc3_module/3.3.21.0/tc3_module.compiled-library -------------------------------------------------------------------------------- /Retentive Timers/RetentiveTimerUnitTest/_Libraries/fisothemes&runtimevic/retentive timers/0.0.1.0/retentivetimeroop_v0.0.1.0.library: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fisothemes/TwinCAT-Retentive-Timers/8b3d50ce89ba1bb26f17314a8c1bab688dc20770/Retentive Timers/RetentiveTimerUnitTest/_Libraries/fisothemes&runtimevic/retentive timers/0.0.1.0/retentivetimeroop_v0.0.1.0.library -------------------------------------------------------------------------------- /Retentive Timers/RetentiveTimerUnitTest/_Libraries/fisothemes&runtimevic/retentive timers/0.0.1.1/retentivetimeroop_v0.0.1.1.library: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fisothemes/TwinCAT-Retentive-Timers/8b3d50ce89ba1bb26f17314a8c1bab688dc20770/Retentive Timers/RetentiveTimerUnitTest/_Libraries/fisothemes&runtimevic/retentive timers/0.0.1.1/retentivetimeroop_v0.0.1.1.library -------------------------------------------------------------------------------- /Retentive Timers/RetentiveTimers/DUTs/Structs/ST_PLC_TASK_INFORMATION.TcDUT: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 11 | 12 | -------------------------------------------------------------------------------- /Retentive Timers/RetentiveTimers/LineIDs.dbg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fisothemes/TwinCAT-Retentive-Timers/8b3d50ce89ba1bb26f17314a8c1bab688dc20770/Retentive Timers/RetentiveTimers/LineIDs.dbg -------------------------------------------------------------------------------- /Retentive Timers/RetentiveTimers/POUs/Examples/Section 1 - Standard Timers Comparisons/P_Example_1_TONs.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 19 | 20 | Activate Configuration and START(F5) PLC Boot Project 23 | -> Login (if you haven't already) 24 | -> Make sure both timers are set for 10 mins 25 | -> Start the timers by writing a TRUE to the bStart variable 26 | -> Let the timers run for a little bit 27 | -> Notice that both elapsed time read are the same 28 | -> STOP(Shift+F5) the PLC Boot Project for approx. 10-30secs 29 | -> START(F5) the PLC Boot Project 30 | 31 | --> Notice the TON elapsed time (tElapsed_Time_TON) is 10-30secs ahead of the FB_RTON elapsed time (tElapsed_Time_RTON) 32 | --> FB_RTON resumes from where it left-off if PLC is stopped. 33 | *) 34 | 35 | fbTON(IN := bStart, PT := tSet_Time, 36 | Q => bElapsed_Time_TON, ET => tElapsed_Time_TON); 37 | 38 | fbRTON(IN := bStart, PT := tSet_Time, 39 | Q => bElapsed_Time_RTON, ET => tElapsed_Time_RTON);]]> 40 | 41 | 42 | -------------------------------------------------------------------------------- /Retentive Timers/RetentiveTimers/POUs/Examples/Section 1 - Standard Timers Comparisons/P_Example_2_TOFs.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 18 | 19 | Activate Configuration and START(F5) PLC Boot Project 22 | -> Login (if you haven't already) 23 | -> Make sure both timers are set for 1 mins 24 | -> Start the timers by writing a TRUE to the bStart variable 25 | -> Let the timers run for a little bit 26 | -> Notice that both elapsed time read are the same 27 | -> STOP(Shift+F5) the PLC Boot Project for approx. 10-30secs 28 | -> START(F5) the PLC Boot Project 29 | 30 | --> Notice the TOF elapsed time (tElapsed_Time_TOF) is 10-30secs ahead of the FB_RTOF elapsed time (tElapsed_Time_RTOF) 31 | --> FB_RTOF resumes from where it left-off if PLC is stopped. 32 | *) 33 | 34 | fbTOF(IN := bStart, PT := tSet_Time, 35 | Q => bElapsed_Time_TOF, ET => tElapsed_Time_TOF); 36 | 37 | fbRTOF(IN := bStart, PT := tSet_Time, 38 | Q => bElapsed_Time_RTOF, ET => tElapsed_Time_RTOF);]]> 39 | 40 | 41 | 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /Retentive Timers/RetentiveTimers/POUs/Examples/Section 1 - Standard Timers Comparisons/P_Example_3_TPs.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 18 | 19 | Activate Configuration and START(F5) PLC Boot Project 22 | -> Login (if you haven't already) 23 | -> Make sure both timers are set for 10 mins 24 | -> Start the timers by writing a TRUE to the bStart variable 25 | -> Let the timers run for a little bit 26 | -> Notice that both elapsed time read are the same 27 | -> STOP(Shift+F5) the PLC Boot Project for approx. 10-30secs 28 | -> START(F5) the PLC Boot Project 29 | 30 | --> Notice the TP elapsed time (tElapsed_Time_TP) is 10-30secs ahead of the FB_RTOF elapsed time (tElapsed_Time_RTP) 31 | --> FB_RTP resumes from where it left-off if PLC is stopped. 32 | *) 33 | 34 | fbTP(IN := bStart, PT := tSet_Time, 35 | Q => bElapsed_Time_TP, ET => tElapsed_Time_TP); 36 | 37 | fbRTP(IN := bStart, PT := tSet_Time, 38 | Q => bElapsed_Time_RTP, ET => tElapsed_Time_RTP);]]> 39 | 40 | 41 | 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /Retentive Timers/RetentiveTimers/POUs/Examples/Section 1 - Standard Timers Comparisons/P_Section_1.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 8 | 9 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /Retentive Timers/RetentiveTimers/POUs/Examples/Section 2 - Pausable Timers Comparisons/P_Section_2.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 15 | 16 | Activate Configuration and START(F5) PLC Boot Project 19 | -> Login (if you haven't already) 20 | -> Make sure both timers are set for 10 mins 21 | -> Start the timers by writing a TRUE to the bStart variable 22 | -> Let the timers run for a little bit 23 | -> Notice that both elapsed time read are the same 24 | -> STOP(Shift+F5) the PLC Boot Project for approx. 10-30secs 25 | -> START(F5) the PLC Boot Project 26 | 27 | --> Notice the FB_Timer's elapsed time (tElapsed_Time) is 10-30secs ahead of the FB_RTimer's elapsed time (tElapsed_RTime) 28 | --> FB_RTimer resumes from where it left-off if PLC is stopped. 29 | *) 30 | 31 | fbTimer(bStart := bStart, bPause := bPause, tSet := tSet_Time, 32 | bElapsed => bElapsed_Time, tElapsed => tElapsed_Time); 33 | fbRTimer(bStart := bStart, bPause := bPause, tSet := tSet_Time, 34 | bElapsed => bElapsed_RTime, tElapsed => tElapsed_RTime);]]> 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /Retentive Timers/RetentiveTimers/POUs/Examples/Section 3 - Stopwatch/P_Example_Stopwatch.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 13 | 14 | Activate Configuration and START(F5) PLC Boot Project 17 | -> Login (if you haven't already) 18 | -> Make sure both timers are set for 10 mins 19 | -> Start the timers by writing a TRUE to the bStart variable 20 | -> Let the timers run for a little bit 21 | -> Notice that both elapsed time read are the same 22 | -> STOP(Shift+F5) the PLC Boot Project for approx. 10-30secs 23 | -> START(F5) the PLC Boot Project 24 | *) 25 | 26 | fbStopwatch(bStart := bStart, tElapsed => tElapsed_Time_Stopwatch); 27 | fbRStopwatch(bStart := bStart, tElapsed => tElapsed_Time_RStopwatch); ]]> 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /Retentive Timers/RetentiveTimers/POUs/Examples/Section 3 - Stopwatch/P_Section_3.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /Retentive Timers/RetentiveTimers/POUs/Function Blocks/FB_RStopwatch.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 18 | 19 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /Retentive Timers/RetentiveTimers/POUs/Function Blocks/FB_RTOF.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 23 | 24 | stPLC_Task_Info.CycleCount) OR nLast_Cycle_Count = 0) THEN 31 | Q := ET <> PT; 32 | IF (ET >= PT) THEN Q := FALSE; eState := IDLE; JMP LBL_TOP; END_IF 33 | tAccumulator := tAccumulator + stPLC_Task_Info.tCycleTime; 34 | ET := LIMIT(T#0MS, THIS^.Lerp(T#0MS, PT, TO_REAL(tAccumulator)/TO_REAL(PT))-stPLC_Task_Info.tCycleTime, PT); 35 | END_IF 36 | nLast_Cycle_Count := stPLC_Task_Info.CycleCount; 37 | IF IN THEN tAccumulator := ET := T#0MS;END_IF 38 | END_CASE]]> 39 | 40 | 41 | 49 | 50 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | -------------------------------------------------------------------------------- /Retentive Timers/RetentiveTimers/POUs/Function Blocks/FB_RTON.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 22 | 23 | = PT; 26 | 27 | IF NOT(Q) AND ((nLast_Cycle_Count <> stPLC_Task_Info.CycleCount) OR nLast_Cycle_Count = 0) THEN 28 | tAccumulator := tAccumulator + stPLC_Task_Info.tCycleTime; 29 | ET := LIMIT(T#0MS, THIS^.Lerp(T#0MS, PT, TO_REAL(tAccumulator)/TO_REAL(PT))-stPLC_Task_Info.tCycleTime, PT); 30 | nLast_Cycle_Count := stPLC_Task_Info.CycleCount; 31 | END_IF 32 | RETURN; 33 | END_IF 34 | tAccumulator := ET := T#0MS; Q := FALSE;]]> 35 | 36 | 37 | 45 | 46 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | -------------------------------------------------------------------------------- /Retentive Timers/RetentiveTimers/POUs/Function Blocks/FB_RTP.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 23 | 24 | 40 | 41 | 42 | 50 | 51 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | -------------------------------------------------------------------------------- /Retentive Timers/RetentiveTimers/POUs/Function Blocks/FB_RTimer.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 18 | 19 | bElapsed, ET => tElapsed); RETURN; END_IF 20 | IF bPause THEN RETURN; END_IF; 21 | fbRTON(IN := TRUE, PT := tSet, Q => bElapsed, ET => tElapsed);]]> 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /Retentive Timers/RetentiveTimers/POUs/Function Blocks/FB_Stopwatch.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 17 | 18 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /Retentive Timers/RetentiveTimers/POUs/Function Blocks/FB_Timer.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 20 | 21 | bElapsed); 23 | IF bPause THEN 24 | tPaused := fbTON.ET + tPaused; 25 | fbTON(IN := FALSE); 26 | ELSE 27 | fbTON(IN := bStart); 28 | tElapsed := fbTON.ET + tPaused; 29 | END_IF]]> 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /Retentive Timers/RetentiveTimers/POUs/Functions/F_Get_PLC_Task_Information.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 16 | 17 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /Retentive Timers/RetentiveTimers/POUs/MAIN.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 8 | 9 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /Retentive Timers/RetentiveTimers/PlcTask.TcTTO: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 10000 6 | 20 7 | 8 | MAIN 9 | 10 | {c535c5f6-b377-4ad8-9742-4228b55e04dd} 11 | {f54195c4-f767-435b-b5ea-6cdf070830a6} 12 | {1eef2a91-d144-46a4-9fb7-e4464ddaa5aa} 13 | {ff4aa4f6-77be-4375-bc51-b64233d8e7bd} 14 | {9fffab7f-8a94-402d-9fa5-a0f7416448d0} 15 | 16 | -------------------------------------------------------------------------------- /Retentive Timers/RetentiveTimers/RetentiveTimers.plcproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 1.0.0.0 4 | 2.0 5 | {0f367a31-25e1-4309-b4db-37de0ca39889} 6 | True 7 | true 8 | true 9 | false 10 | RetentiveTimers 11 | 3.1.4023.0 12 | {fa82a635-5789-4dee-8b16-f3a52d24d1ee} 13 | {d65695b6-c6e2-40bd-8b4d-625d24c8a49e} 14 | {4f26f17d-c5d3-461e-8740-ff32cfebea0d} 15 | {3dd86d54-9342-4445-9e2f-b1944033efcf} 16 | {2602652b-1c64-41f3-95a9-ecc15987331c} 17 | {de2f5482-5021-4f2b-9d7e-bc773d5d1f82} 18 | FisoThemes 19 | false 20 | Retentive Timers 21 | 0.1.0.0 22 | RTimers 23 | Goodwill Mzumala 24 | Standard library timers on TwinCAT count time by taking the difference between the current time from system timer and start time from system timer. 25 | While this is fine for most application, it is problematic for operations that require time to be retained even if the PLC is paused, stopped or turned off. 26 | For example, if a `TON` (Timer On-Delay) Timer is running and you stop the PLC Boot Project for a period of time, the `TON` will not resume from the point it was stopped. 27 | Instead it will skip time by the number of ms/secs/mins/hours it was stopped. 28 | This makes it useless for applications such as tracking the length of time a PLC has been running or retaining persistent time. 29 | 30 | Retentive variants of the Standard library timers stop this from happen. They are based on PLC Task cycle time rather than system time. 31 | This means they will simply stop counting when the PLC Task Cycle is stopped and will resume from where they left-off as soon as the task cycle picks up. 32 | All arguments behave in the same manner as those of the standard library. 33 | 34 | 35 | 36 | Code 37 | 38 | 39 | Code 40 | 41 | 42 | Code 43 | 44 | 45 | Code 46 | 47 | 48 | Code 49 | 50 | 51 | Code 52 | 53 | 54 | Code 55 | 56 | 57 | Code 58 | 59 | 60 | Code 61 | 62 | 63 | Code 64 | 65 | 66 | Code 67 | 68 | 69 | Code 70 | 71 | 72 | Code 73 | 74 | 75 | Code 76 | 77 | 78 | Code 79 | 80 | 81 | Code 82 | 83 | 84 | Code 85 | 86 | 87 | Code 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | Tc2_Standard, * (Beckhoff Automation GmbH) 105 | Tc2_Standard 106 | 107 | 108 | Tc2_System, * (Beckhoff Automation GmbH) 109 | Tc2_System 110 | 111 | 112 | Tc3_Module, * (Beckhoff Automation GmbH) 113 | Tc3_Module 114 | 115 | 116 | 117 | 118 | Content 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | "<ProjectRoot>" 127 | 128 | {40450F57-0AA3-4216-96F3-5444ECB29763} 129 | 130 | "{40450F57-0AA3-4216-96F3-5444ECB29763}" 131 | 132 | 133 | ActiveVisuProfile 134 | IR0whWr8bwfwBwAAiD2qpQAAAABVAgAA37x72QAAAAABAAAAAAAAAAEaUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwACTHsAZgA5ADUAYgBiADQAMgA2AC0ANQA1ADIANAAtADQAYgA0ADUALQA5ADQAMAAwAC0AZgBiADAAZgAyAGUANwA3AGUANQAxAGIAfQADCE4AYQBtAGUABDBUAHcAaQBuAEMAQQBUACAAMwAuADEAIABCAHUAaQBsAGQAIAA0ADAAMgA0AC4ANwAFFlAAcgBvAGYAaQBsAGUARABhAHQAYQAGTHsAMQA2AGUANQA1AGIANgAwAC0ANwAwADQAMwAtADQAYQA2ADMALQBiADYANQBiAC0ANgAxADQANwAxADMAOAA3ADgAZAA0ADIAfQAHEkwAaQBiAHIAYQByAGkAZQBzAAhMewAzAGIAZgBkADUANAA1ADkALQBiADAANwBmAC0ANABkADYAZQAtAGEAZQAxAGEALQBhADgAMwAzADUANgBhADUANQAxADQAMgB9AAlMewA5AGMAOQA1ADgAOQA2ADgALQAyAGMAOAA1AC0ANAAxAGIAYgAtADgAOAA3ADEALQA4ADkANQBmAGYAMQBmAGUAZABlADEAYQB9AAoOVgBlAHIAcwBpAG8AbgALBmkAbgB0AAwKVQBzAGEAZwBlAA0KVABpAHQAbABlAA4aVgBpAHMAdQBFAGwAZQBtAE0AZQB0AGUAcgAPDkMAbwBtAHAAYQBuAHkAEAxTAHkAcwB0AGUAbQARElYAaQBzAHUARQBsAGUAbQBzABIwVgBpAHMAdQBFAGwAZQBtAHMAUwBwAGUAYwBpAGEAbABDAG8AbgB0AHIAbwBsAHMAEyhWAGkAcwB1AEUAbABlAG0AcwBXAGkAbgBDAG8AbgB0AHIAbwBsAHMAFCRWAGkAcwB1AEUAbABlAG0AVABlAHgAdABFAGQAaQB0AG8AcgAVIlYAaQBzAHUATgBhAHQAaQB2AGUAQwBvAG4AdAByAG8AbAAWFHYAaQBzAHUAaQBuAHAAdQB0AHMAFwxzAHkAcwB0AGUAbQAYGFYAaQBzAHUARQBsAGUAbQBCAGEAcwBlABkmRABlAHYAUABsAGEAYwBlAGgAbwBsAGQAZQByAHMAVQBzAGUAZAAaCGIAbwBvAGwAGyJQAGwAdQBnAGkAbgBDAG8AbgBzAHQAcgBhAGkAbgB0AHMAHEx7ADQAMwBkADUAMgBiAGMAZQAtADkANAAyAGMALQA0ADQAZAA3AC0AOQBlADkANAAtADEAYgBmAGQAZgAzADEAMABlADYAMwBjAH0AHRxBAHQATABlAGEAcwB0AFYAZQByAHMAaQBvAG4AHhRQAGwAdQBnAGkAbgBHAHUAaQBkAB8WUwB5AHMAdABlAG0ALgBHAHUAaQBkACBIYQBmAGMAZAA1ADQANAA2AC0ANAA5ADEANAAtADQAZgBlADcALQBiAGIANwA4AC0AOQBiAGYAZgBlAGIANwAwAGYAZAAxADcAIRRVAHAAZABhAHQAZQBJAG4AZgBvACJMewBiADAAMwAzADYANgBhADgALQBiADUAYwAwAC0ANABiADkAYQAtAGEAMAAwAGUALQBlAGIAOAA2ADAAMQAxADEAMAA0AGMAMwB9ACMOVQBwAGQAYQB0AGUAcwAkTHsAMQA4ADYAOABmAGYAYwA5AC0AZQA0AGYAYwAtADQANQAzADIALQBhAGMAMAA2AC0AMQBlADMAOQBiAGIANQA1ADcAYgA2ADkAfQAlTHsAYQA1AGIAZAA0ADgAYwAzAC0AMABkADEANwAtADQAMQBiADUALQBiADEANgA0AC0ANQBmAGMANgBhAGQAMgBiADkANgBiADcAfQAmFk8AYgBqAGUAYwB0AHMAVAB5AHAAZQAnVFUAcABkAGEAdABlAEwAYQBuAGcAdQBhAGcAZQBNAG8AZABlAGwARgBvAHIAQwBvAG4AdgBlAHIAdABpAGIAbABlAEwAaQBiAHIAYQByAGkAZQBzACgQTABpAGIAVABpAHQAbABlACkUTABpAGIAQwBvAG0AcABhAG4AeQAqHlUAcABkAGEAdABlAFAAcgBvAHYAaQBkAGUAcgBzACs4UwB5AHMAdABlAG0ALgBDAG8AbABsAGUAYwB0AGkAbwBuAHMALgBIAGEAcwBoAHQAYQBiAGwAZQAsEnYAaQBzAHUAZQBsAGUAbQBzAC1INgBjAGIAMQBjAGQAZQAxAC0AZAA1AGQAYwAtADQAYQAzAGIALQA5ADAANQA0AC0AMgAxAGYAYQA3ADUANgBhADMAZgBhADQALihJAG4AdABlAHIAZgBhAGMAZQBWAGUAcgBzAGkAbwBuAEkAbgBmAG8AL0x7AGMANgAxADEAZQA0ADAAMAAtADcAZgBiADkALQA0AGMAMwA1AC0AYgA5AGEAYwAtADQAZQAzADEANABiADUAOQA5ADYANAAzAH0AMBhNAGEAagBvAHIAVgBlAHIAcwBpAG8AbgAxGE0AaQBuAG8AcgBWAGUAcgBzAGkAbwBuADIMTABlAGcAYQBjAHkAMzBMAGEAbgBnAHUAYQBnAGUATQBvAGQAZQBsAFYAZQByAHMAaQBvAG4ASQBuAGYAbwA0MEwAbwBhAGQATABpAGIAcgBhAHIAaQBlAHMASQBuAHQAbwBQAHIAbwBqAGUAYwB0ADUaQwBvAG0AcABhAHQAaQBiAGkAbABpAHQAeQDQAAIaA9ADAS0E0AUGGgfQBwgaAUUHCQjQAAkaBEUKCwQDAAAABQAAAA0AAAAAAAAA0AwLrQIAAADQDQEtDtAPAS0Q0AAJGgRFCgsEAwAAAAUAAAANAAAAKAAAANAMC60BAAAA0A0BLRHQDwEtENAACRoERQoLBAMAAAAFAAAADQAAAAAAAADQDAutAgAAANANAS0S0A8BLRDQAAkaBEUKCwQDAAAABQAAAA0AAAAUAAAA0AwLrQIAAADQDQEtE9APAS0Q0AAJGgRFCgsEAwAAAAUAAAANAAAAAAAAANAMC60CAAAA0A0BLRTQDwEtENAACRoERQoLBAMAAAAFAAAADQAAAAAAAADQDAutAgAAANANAS0V0A8BLRDQAAkaBEUKCwQDAAAABQAAAA0AAAAAAAAA0AwLrQIAAADQDQEtFtAPAS0X0AAJGgRFCgsEAwAAAAUAAAANAAAAKAAAANAMC60EAAAA0A0BLRjQDwEtENAZGq0BRRscAdAAHBoCRR0LBAMAAAAFAAAADQAAAAAAAADQHh8tINAhIhoCRSMkAtAAJRoFRQoLBAMAAAADAAAAAAAAAAoAAADQJgutAAAAANADAS0n0CgBLRHQKQEtENAAJRoFRQoLBAMAAAADAAAAAAAAAAoAAADQJgutAQAAANADAS0n0CgBLRHQKQEtEJoqKwFFAAEC0AABLSzQAAEtF9AAHy0t0C4vGgPQMAutAQAAANAxC60XAAAA0DIarQDQMy8aA9AwC60CAAAA0DELrQMAAADQMhqtANA0Gq0A0DUarQA= 135 | 136 | 137 | {192FAD59-8248-4824-A8DE-9177C94C195A} 138 | 139 | "{192FAD59-8248-4824-A8DE-9177C94C195A}" 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | System.Collections.Hashtable 149 | {54dd0eac-a6d8-46f2-8c27-2f43c7e49861} 150 | System.String 151 | 152 | 153 | 154 | 155 | -------------------------------------------------------------------------------- /Retentive Timers/RetentiveTimers/RetentiveTimers.tmc: -------------------------------------------------------------------------------- 1 | ST_LibVersion288iMajorUINT160iMinorUINT1616iBuildUINT1632iRevisionUINT1648nFlagsDWORD3264sVersionSTRING(23)19296TON256INBOOL864ItemTypeInputPTTIME3296ItemTypeInputQBOOL8128ItemTypeOutputETTIME32160ItemTypeOutputMBOOL8192StartTimeTIME32224PouTypeFunctionBlockImplicit_Enum__FB_Timer__eState16INTSTART0PAUSE1qualified_onlygenerate_implicit_init_functionFB_Timer512bStartBOOL864ItemTypeInputbPauseBOOL872ItemTypeInputtSetTIME3296ItemTypeInputbElapsedBOOL8128ItemTypeOutputtElapsedTIME32160ItemTypeOutputfbTONTON256192tPausedTIME32448eStateImplicit_Enum__FB_Timer__eState16480implicit_enum_typePouTypeFunctionBlockcontains_implicit_enumPlcTaskSystemInfo1024ObjIdOTCID320CycleTimeUDINT3232PriorityUINT1664AdsPortUINT1680CycleCountUDINT3296DcTaskTimeLINT64128LastExecTimeUDINT32192FirstCycleBOOL8224CycleTimeExceededBOOL8232InCallAfterOutputUpdateBOOL8240RTViolationBOOL8248TaskNameSTRING(63)512512ST_PLC_TASK_INFORMATION1152PlcTaskSystemInfotCycleTimeTIME321024tlCycleTimeLTIME641088FB_RTON1408INBOOL864ItemTypeInputPTTIME3296ItemTypeInputQBOOL8128ItemTypeOutputETTIME32160ItemTypeOutputstPLC_Task_InfoST_PLC_TASK_INFORMATION1152192tAccumulatorTIME321344nLast_Cycle_CountUDINT321376LerpTIME32tStartTIME32tFinishTIME32fPercentageREAL32PouTypeFunctionBlockFB_RTimer1600bStartBOOL864ItemTypeInputbPauseBOOL872ItemTypeInputtSetTIME3296ItemTypeInputbElapsedBOOL8128ItemTypeOutputtElapsedTIME32160ItemTypeOutputfbRTONFB_RTON1408192PouTypeFunctionBlockTOF256INBOOL864ItemTypeInputPTTIME3296ItemTypeInputQBOOL8128ItemTypeOutputETTIME32160ItemTypeOutputMBOOL8192StartTimeTIME32224PouTypeFunctionBlockImplicit_Enum__FB_RTOF__eState16INTIDLE0RUN1qualified_onlygenerate_implicit_init_functionFB_RTOF1472INBOOL864ItemTypeInputPTTIME3296ItemTypeInputQBOOL8128ItemTypeOutputETTIME32160ItemTypeOutputstPLC_Task_InfoST_PLC_TASK_INFORMATION1152192tAccumulatorTIME321344nLast_Cycle_CountUDINT321376eStateImplicit_Enum__FB_RTOF__eState161408implicit_enum_typeLerpTIME32tStartTIME32tFinishTIME32fPercentageREAL32PouTypeFunctionBlockcontains_implicit_enumTP256INBOOL864ItemTypeInputPTTIME3296ItemTypeInputQBOOL8128ItemTypeOutputETTIME32160ItemTypeOutputStartTimeTIME32192PouTypeFunctionBlockImplicit_Enum__FB_RTP__eState16INTIDLE0RUN1qualified_onlygenerate_implicit_init_functionFB_RTP1472INBOOL864ItemTypeInputPTTIME3296ItemTypeInputQBOOL8128ItemTypeOutputETTIME32160ItemTypeOutputstPLC_Task_InfoST_PLC_TASK_INFORMATION1152192tAccumulatorTIME321344nLast_Cycle_CountUDINT321376eStateImplicit_Enum__FB_RTP__eState161408implicit_enum_typeLerpTIME32tStartTIME32tFinishTIME32fPercentageREAL32PouTypeFunctionBlockcontains_implicit_enumFB_Stopwatch1600bStartBOOL864ItemTypeInputtElapsedTIME3296ItemTypeOutputstPLC_Task_InfoST_PLC_TASK_INFORMATION1152128tAccumilatorTIME321280fbTONTON2561344PouTypeFunctionBlockFB_RStopwatch2752bStartBOOL864ItemTypeInputtElapsedTIME3296ItemTypeOutputstPLC_Task_InfoST_PLC_TASK_INFORMATION1152128tAccumilatorTIME321280fbTONFB_RTON14081344PouTypeFunctionBlockVERSION64uiMajorUINT160uiMinorUINT1616uiServicePackUINT1632uiPatchUINT1648EPlcPersistentStatus8USINT012PlcAppSystemInfo2048ObjIdOTCID320TaskCntUDINT3232OnlineChangeCntUDINT3264FlagsDWORD3296AdsPortUINT16128BootDataLoadedBOOL8144OldBootDataBOOL8152AppTimestampDT32160KeepOutputsOnBPBOOL8192ShutdownInProgressBOOL8200LicensesPendingBOOL8208BSODOccuredBOOL8216LoggedInBOOL8224PersistentStatusEPlcPersistentStatus8232TComSrvPtrITComObjectServer32256TcComInterfaceAppNameSTRING(63)512512ProjectNameSTRING(63)5121024_Implicit_KindOfTask16INT_implicit_cyclic0_implicit_event1_implicit_external2_implicit_freewheeling3hidegenerate_implicit_init_function_Implicit_Jitter_Distribution48wRangeMaxWORD160wCountJitterNegWORD1616wCountJitterPosWORD1632hide_Implicit_Task_Info896dwVersionDWORD320pszNameSTRING(80)6464nPriorityINT16128KindOf_Implicit_KindOfTask16144bWatchdogBOOL8160bProfilingTaskBOOL8168dwEventFunctionPointerBYTE64192pszExternalEventSTRING(80)64256dwTaskEntryFunctionPointerBYTE64320dwWatchdogSensitivityDWORD32384dwIntervalDWORD32416dwWatchdogTimeDWORD32448dwLastCycleTimeDWORD32480dwAverageCycleTimeDWORD32512dwMaxCycleTimeDWORD32544dwMinCycleTimeDWORD32576diJitterDINT32608diJitterMinDINT32640diJitterMaxDINT32672dwCycleCountDWORD32704wTaskStatusWORD16736wNumOfJitterDistributionsWORD16752pJitterDistribution_Implicit_Jitter_Distribution64768bWithinSPSTimeSlicingBOOL8832byDummyBYTE8840bShouldBlockBOOL8848bActiveBOOL8856dwIECCycleCountDWORD32864hideRetentiveTimers{08500001-0000-0000-F000-000000000064}0PlcTask#x020100303PlcTask Internal0524288Global_Version.stLibVersion_Tc2_Standard288ST_LibVersion.iMajor3.iMinor3.iBuild3.iRevision0.nFlags0.sVersion3.3.3.0const_non_replacedTcVarGlobal3072000Global_Version.stLibVersion_Tc2_System288ST_LibVersion.iMajor3.iMinor4.iBuild26.iRevision0.nFlags1.sVersion3.4.26.0const_non_replacedTcVarGlobal3072288Global_Version.stLibVersion_Tc3_Module288ST_LibVersion.iMajor3.iMinor3.iBuild21.iRevision0.sVersion3.3.21.0const_non_replacedTcVarGlobal3072576P_Section_2.bStart8BOOL3081536P_Section_2.bPause8BOOL3081544P_Section_2.bElapsed_Time8BOOL3081552P_Section_2.bElapsed_RTime8BOOL3081560P_Section_2.tSet_Time32TIMET#10S3081568P_Section_2.tElapsed_Time32TIME3081600P_Section_2.tElapsed_RTime32TIME3081632P_Section_2.fbTimer512FB_Timer3081664P_Section_2.fbRTimer1600FB_RTimer3082176P_Example_1_TONs.bStart8BOOL3083776P_Example_1_TONs.bElapsed_Time_TON8BOOL3083784P_Example_1_TONs.bElapsed_Time_RTON8BOOL3083792P_Example_2_TOFs.bStart8BOOL3083800P_Example_1_TONs.tSet_Time32TIMET#10M3083808P_Example_1_TONs.tElapsed_Time_TON32TIME3083840P_Example_1_TONs.tElapsed_Time_RTON32TIME3083872P_Example_1_TONs.fbTON256TON3083904P_Example_1_TONs.fbRTON1408FB_RTON3084160P_Example_1_TONs.stPLC_Task_Info1152ST_PLC_TASK_INFORMATION3085568P_Example_1_TONs.nCC32UDINT3086720P_Example_1_TONs.nRCC32UDINT3086752P_Example_2_TOFs.tSet_Time32TIMET#10S3087552P_Example_2_TOFs.tElapsed_Time_TOF32TIME3087584P_Example_2_TOFs.tElapsed_Time_RTOF32TIME3087616P_Example_2_TOFs.bElapsed_Time_TOF8BOOL3087648P_Example_2_TOFs.bElapsed_Time_RTOF8BOOL3087656P_Example_3_TPs.bStart8BOOL3087664P_Example_3_TPs.bElapsed_Time_TP8BOOL3087672P_Example_2_TOFs.fbTOF256TOF3087680P_Example_2_TOFs.fbRTOF1472FB_RTOF3087936P_Example_3_TPs.tSet_Time32TIMET#10S3090176P_Example_3_TPs.tElapsed_Time_TP32TIME3090208P_Example_3_TPs.tElapsed_Time_RTP32TIME3090240P_Example_3_TPs.bElapsed_Time_RTP8BOOL3090272P_Example_Stopwatch.bStart8BOOL3090280Constants.bLittleEndian8BOOLtrueTcVarGlobal3090296P_Example_3_TPs.fbTP256TP3090304P_Example_3_TPs.fbRTP1472FB_RTP3090560P_Example_Stopwatch.tElapsed_Time_Stopwatch32TIME3093440P_Example_Stopwatch.tElapsed_Time_RStopwatch32TIME3093472P_Example_Stopwatch.fbStopwatch1600FB_Stopwatch3093504P_Example_Stopwatch.fbRStopwatch2752FB_RStopwatch3095104Constants.RuntimeVersion64VERSION.uiMajor3.uiMinor5.uiServicePack13.uiPatch0TcVarGlobal3097856Constants.CompilerVersion64VERSION.uiMajor3.uiMinor5.uiServicePack13.uiPatch40TcVarGlobal3097920Constants.bSimulationMode8BOOLfalseTcVarGlobal3097984Constants.bFPUSupport8BOOLtrueTcVarGlobal3097992Constants.nRegisterSize16WORD64TcVarGlobal3098000Constants.nPackMode16UINT8TcVarGlobal3098016Constants.bMulticoreSupport8BOOLfalseTcVarGlobal3098032Constants.RuntimeVersionNumeric32DWORD50662656TcVarGlobal3098048Constants.CompilerVersionNumeric32DWORD50662696TcVarGlobal3098080TwinCAT_SystemInfoVarList._AppInfo2048PlcAppSystemInfono_initTcVarGlobal3098112TwinCAT_SystemInfoVarList._TaskInfo1024PlcTaskSystemInfo11no_initTcVarGlobal3100160TwinCAT_SystemInfoVarList._TaskPouOid_PlcTask32OTCIDno_initTcVarGlobal3101184TwinCAT_SystemInfoVarList._TaskOid_PlcTask32OTCIDno_initTcVarGlobal3101216TwinCAT_SystemInfoVarList.__PlcTask896_Implicit_Task_Info.dwVersion2TcContextNamePlcTaskTcVarGlobal3101248ApplicationNamePort_851ChangeDate2023-05-09T12:57:49GeneratedCodeSize81920GlobalDataSize20480 -------------------------------------------------------------------------------- /Retentive Timers/RetentiveTimers/_Libraries/beckhoff automation gmbh/tc2_standard/3.3.3.0/tc2_standard.compiled-library: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fisothemes/TwinCAT-Retentive-Timers/8b3d50ce89ba1bb26f17314a8c1bab688dc20770/Retentive Timers/RetentiveTimers/_Libraries/beckhoff automation gmbh/tc2_standard/3.3.3.0/tc2_standard.compiled-library -------------------------------------------------------------------------------- /Retentive Timers/RetentiveTimers/_Libraries/beckhoff automation gmbh/tc2_system/3.4.22.0/tc2_system.compiled-library: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fisothemes/TwinCAT-Retentive-Timers/8b3d50ce89ba1bb26f17314a8c1bab688dc20770/Retentive Timers/RetentiveTimers/_Libraries/beckhoff automation gmbh/tc2_system/3.4.22.0/tc2_system.compiled-library -------------------------------------------------------------------------------- /Retentive Timers/RetentiveTimers/_Libraries/beckhoff automation gmbh/tc2_system/3.4.26.0/tc2_system.compiled-library: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fisothemes/TwinCAT-Retentive-Timers/8b3d50ce89ba1bb26f17314a8c1bab688dc20770/Retentive Timers/RetentiveTimers/_Libraries/beckhoff automation gmbh/tc2_system/3.4.26.0/tc2_system.compiled-library -------------------------------------------------------------------------------- /Retentive Timers/RetentiveTimers/_Libraries/beckhoff automation gmbh/tc3_module/3.3.21.0/tc3_module.compiled-library: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fisothemes/TwinCAT-Retentive-Timers/8b3d50ce89ba1bb26f17314a8c1bab688dc20770/Retentive Timers/RetentiveTimers/_Libraries/beckhoff automation gmbh/tc3_module/3.3.21.0/tc3_module.compiled-library -------------------------------------------------------------------------------- /Retentive Timers/TrialLicense.tclrs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {8F914F92-D25B-0651-D3DE-D88177D6CBDC} 5 | 2023-05-23T15:53:00 6 | 2023-05-31T00:00:00 7 | 575a6eb8f87218ae0a7c1e10d690cc5a85baa0d9b29bb1939c9f114354902338d6314948199f9b4e98b18047aaac85078da1971d5989fb4584026b39b2fc6186c3afad1704f5e312279db37eaf7664bac8e773903d11815cd61012101c692d91aae304bb6d0f92a0b35d208a781f134c7461c8f6535b9dfa918ee8ac6257a8cde338321ad46f6c8e5c32fbf3656d3fa1f0395ef4b96fc5791249ab6054c51aedcfea9ff051eeb67277f477971f9ef424ebde7e2724f44da42ddb072f7819200fd9a1ea2fc69b73c9a146051a52d0391d4142943284f82ff6dcab827b1bfa1c66e9b8f64cf42dd45f9c6b8883184dc2c2cf0b7711c7cef6d790170c90e23eedb4 8 | 9 | {4C256767-E6E6-4AF5-BD68-9F7ABAD0C200} 10 | TC3 ADS 11 | TC1000 12 | 13 | 14 | {3FF18E97-7754-401B-93FB-70544DE28A13} 15 | TC3 IO 16 | TC1100 17 | 18 | 19 | {66689887-CCBD-452C-AC9A-039D997C6E66} 20 | TC3 PLC 21 | TC1200 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /Retentive Timers/Untitled1/POUs/MAIN.TcPOU: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /Retentive Timers/Untitled1/PlcTask.TcTTO: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 10000 6 | 20 7 | 8 | MAIN 9 | 10 | {7aa3cdbf-af83-402c-a0e6-1ce079598db0} 11 | {3ba4cc30-15b3-4bc0-87c3-73f06c8d89a7} 12 | {f028e5a2-f6d9-4faf-9123-b4a6dd84ec1b} 13 | {af5b9cf6-5c53-4d80-9a97-a8ca95ee93ee} 14 | {746aa00f-ce2f-4d1f-9f44-5dee3bbd5135} 15 | 16 | 17 | -------------------------------------------------------------------------------- /Retentive Timers/Untitled1/Untitled1.plcproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 1.0.0.0 4 | 2.0 5 | {1a50c2ab-a5a5-4836-b125-babe75a0ddd5} 6 | True 7 | true 8 | true 9 | false 10 | Untitled1 11 | 3.1.4023.0 12 | {3ff16142-cc2a-461e-a8b0-cc35227c63dd} 13 | {02400088-52cd-48fd-9699-57e3220e662c} 14 | {2af16e9d-1e1a-4516-bee3-f3393e7fd663} 15 | {636da1d2-fdf7-44b9-806b-1dd70606bf51} 16 | {60ceb466-4705-4552-8e90-ae9ff76298ba} 17 | {fefd986c-e7f7-44f4-ba4c-f6ff520116a0} 18 | 19 | 20 | 21 | Code 22 | 23 | 24 | Code 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | Tc2_Standard, * (Beckhoff Automation GmbH) 36 | Tc2_Standard 37 | 38 | 39 | Tc2_System, * (Beckhoff Automation GmbH) 40 | Tc2_System 41 | 42 | 43 | Tc3_Module, * (Beckhoff Automation GmbH) 44 | Tc3_Module 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | "<ProjectRoot>" 53 | 54 | 55 | 56 | 57 | 58 | System.Collections.Hashtable 59 | {54dd0eac-a6d8-46f2-8c27-2f43c7e49861} 60 | System.String 61 | 62 | 63 | 64 | 65 | -------------------------------------------------------------------------------- /Retentive Timers/_Boot/CurrentConfig/RetentiveTimers.tpzip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fisothemes/TwinCAT-Retentive-Timers/8b3d50ce89ba1bb26f17314a8c1bab688dc20770/Retentive Timers/_Boot/CurrentConfig/RetentiveTimers.tpzip -------------------------------------------------------------------------------- /Retentive Timers/_Boot/TargetDescription.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 3 5 | 1 6 | 4024 7 | 35 8 | 9 | 10 | -------------------------------------------------------------------------------- /Retentive Timers/_Boot/TwinCAT RT (x64)/Plc/Port_851.app: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fisothemes/TwinCAT-Retentive-Timers/8b3d50ce89ba1bb26f17314a8c1bab688dc20770/Retentive Timers/_Boot/TwinCAT RT (x64)/Plc/Port_851.app -------------------------------------------------------------------------------- /Retentive Timers/_Boot/TwinCAT RT (x64)/Plc/Port_851.autostart: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fisothemes/TwinCAT-Retentive-Timers/8b3d50ce89ba1bb26f17314a8c1bab688dc20770/Retentive Timers/_Boot/TwinCAT RT (x64)/Plc/Port_851.autostart -------------------------------------------------------------------------------- /Retentive Timers/_Boot/TwinCAT RT (x64)/Plc/Port_851.cid: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fisothemes/TwinCAT-Retentive-Timers/8b3d50ce89ba1bb26f17314a8c1bab688dc20770/Retentive Timers/_Boot/TwinCAT RT (x64)/Plc/Port_851.cid -------------------------------------------------------------------------------- /Retentive Timers/_Boot/TwinCAT RT (x64)/Plc/Port_851.crc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fisothemes/TwinCAT-Retentive-Timers/8b3d50ce89ba1bb26f17314a8c1bab688dc20770/Retentive Timers/_Boot/TwinCAT RT (x64)/Plc/Port_851.crc -------------------------------------------------------------------------------- /Retentive Timers/_Boot/TwinCAT RT (x64)/Plc/Port_851.occ: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fisothemes/TwinCAT-Retentive-Timers/8b3d50ce89ba1bb26f17314a8c1bab688dc20770/Retentive Timers/_Boot/TwinCAT RT (x64)/Plc/Port_851.occ -------------------------------------------------------------------------------- /Retentive Timers/_Boot/TwinCAT RT (x64)/Plc/Port_851.oce: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fisothemes/TwinCAT-Retentive-Timers/8b3d50ce89ba1bb26f17314a8c1bab688dc20770/Retentive Timers/_Boot/TwinCAT RT (x64)/Plc/Port_851.oce -------------------------------------------------------------------------------- /Retentive Timers/_Boot/TwinCAT RT (x64)/Plc/Port_851.ocm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fisothemes/TwinCAT-Retentive-Timers/8b3d50ce89ba1bb26f17314a8c1bab688dc20770/Retentive Timers/_Boot/TwinCAT RT (x64)/Plc/Port_851.ocm -------------------------------------------------------------------------------- /Retentive Timers/_Boot/TwinCAT RT (x64)/Plc/Port_851_boot.tizip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fisothemes/TwinCAT-Retentive-Timers/8b3d50ce89ba1bb26f17314a8c1bab688dc20770/Retentive Timers/_Boot/TwinCAT RT (x64)/Plc/Port_851_boot.tizip -------------------------------------------------------------------------------- /_TcLibrary__FisoThemes&Runtimevic.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5df2df86-2142-4224-b358-21a532087d2f 5 | 1.0.0.0 6 | FisoThemesRuntimevic 7 | 8 | 9 | 70325151-8e67-4486-ae1e-bd90ed47b600 10 | 1.0.0.0 11 | 12 | 5df2df86-2142-4224-b358-21a532087d2f 13 | 14 | Timers 15 | 16 | -------------------------------------------------------------------------------- /builds/0.1.0.0/RetentiveTimers.library: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fisothemes/TwinCAT-Retentive-Timers/8b3d50ce89ba1bb26f17314a8c1bab688dc20770/builds/0.1.0.0/RetentiveTimers.library --------------------------------------------------------------------------------