├── .bumpversion.cfg ├── .github └── workflows │ ├── bump-version.yaml │ └── create-release.yaml ├── .gitignore ├── .vscode └── launch.json ├── LICENSE ├── README.md ├── TcBase.nuspec ├── TcBase ├── TcBase.sln └── TcBase │ ├── TcBase.tsproj │ ├── TcBase │ ├── Action │ │ ├── FB_Action.TcPOU │ │ ├── FB_RunCyclicTasksAction.TcPOU │ │ ├── I_Action.TcIO │ │ └── Tests │ │ │ ├── FB_ActionTestObject.TcPOU │ │ │ ├── FB_Action_Test.TcPOU │ │ │ └── FB_ActivateAction.TcPOU │ ├── Collection │ │ ├── FB_List.TcPOU │ │ ├── I_Collection.TcIO │ │ ├── I_Enumerable.TcIO │ │ ├── I_List.TcIO │ │ ├── Param_List.TcGVL │ │ └── Tests │ │ │ ├── FB_ListCapacity_Test.TcPOU │ │ │ └── FB_List_Test.TcPOU │ ├── Context │ │ ├── FB_Context.TcPOU │ │ └── I_Context.TcIO │ ├── Cyclic Task │ │ └── I_CyclicTask.TcIO │ ├── GVL_IntegerTypeBounds.TcGVL │ ├── Helpers │ │ └── F_CompareObjects.TcPOU │ ├── Invocation Control │ │ ├── FB_InvocationControl.TcPOU │ │ └── Tests │ │ │ ├── FB_InvocationControlTestTask.TcPOU │ │ │ └── FB_InvocationControl_Test.TcPOU │ ├── Object │ │ ├── FB_LinkedObject.TcPOU │ │ ├── FB_Object.TcPOU │ │ ├── I_LinkedObject.TcIO │ │ ├── I_Object.TcIO │ │ └── Tests │ │ │ ├── FB_DummyObject.TcPOU │ │ │ └── FB_Object_Test.TcPOU │ ├── Observer Pattern │ │ ├── Abstraction │ │ │ ├── Actions │ │ │ │ └── FB_NotifyObserverAction.TcPOU │ │ │ ├── FB_AbstractObservable.TcPOU │ │ │ ├── FB_AbstractObserver.TcPOU │ │ │ ├── I_Observable.TcIO │ │ │ └── I_Observer.TcIO │ │ ├── FB_Observable_BOOL.TcPOU │ │ ├── FB_Observable_BYTE.TcPOU │ │ ├── FB_Observable_DINT.TcPOU │ │ ├── FB_Observable_DWORD.TcPOU │ │ ├── FB_Observable_INT.TcPOU │ │ ├── FB_Observable_LINT.TcPOU │ │ ├── FB_Observable_LREAL.TcPOU │ │ ├── FB_Observable_LWORD.TcPOU │ │ ├── FB_Observable_REAL.TcPOU │ │ ├── FB_Observable_SINT.TcPOU │ │ ├── FB_Observable_UDINT.TcPOU │ │ ├── FB_Observable_UINT.TcPOU │ │ ├── FB_Observable_ULINT.TcPOU │ │ ├── FB_Observable_USINT.TcPOU │ │ ├── FB_Observable_WORD.TcPOU │ │ ├── FB_ObserverExt.TcPOU │ │ ├── FB_Observer_BOOL.TcPOU │ │ ├── FB_Observer_BYTE.TcPOU │ │ ├── FB_Observer_DINT.TcPOU │ │ ├── FB_Observer_DWORD.TcPOU │ │ ├── FB_Observer_INT.TcPOU │ │ ├── FB_Observer_LINT.TcPOU │ │ ├── FB_Observer_LREAL.TcPOU │ │ ├── FB_Observer_LWORD.TcPOU │ │ ├── FB_Observer_REAL.TcPOU │ │ ├── FB_Observer_SINT.TcPOU │ │ ├── FB_Observer_UDINT.TcPOU │ │ ├── FB_Observer_UINT.TcPOU │ │ ├── FB_Observer_ULINT.TcPOU │ │ ├── FB_Observer_USINT.TcPOU │ │ ├── FB_Observer_WORD.TcPOU │ │ └── Tests │ │ │ ├── FB_ObserverPattern_Test.TcPOU │ │ │ └── FB_Observer_LREAL_.TcPOU │ ├── Programs │ │ └── Test.TcPOU │ ├── Restorable │ │ ├── I_ObjectRestorer.TcIO │ │ └── I_Restorable.TcIO │ ├── State Pattern │ │ ├── FB_State.TcPOU │ │ ├── FB_StateMachine.TcPOU │ │ ├── I_State.TcIO │ │ ├── I_StateMachine.TcIO │ │ └── Tests │ │ │ ├── FB_StatePattern_Test.TcPOU │ │ │ └── Test Subjects │ │ │ ├── E_Season.TcDUT │ │ │ ├── FB_Autumn.TcPOU │ │ │ ├── FB_Default.TcPOU │ │ │ ├── FB_SeasonBase.TcPOU │ │ │ ├── FB_SeasonStateMachine.TcPOU │ │ │ ├── FB_Spring.TcPOU │ │ │ ├── FB_State1.TcPOU │ │ │ ├── FB_State2.TcPOU │ │ │ ├── FB_State3.TcPOU │ │ │ ├── FB_State4.TcPOU │ │ │ ├── FB_StateMachine1.TcPOU │ │ │ ├── FB_Summer.TcPOU │ │ │ ├── FB_Winter.TcPOU │ │ │ ├── FB_Year.TcPOU │ │ │ ├── I_SeasonControl.TcIO │ │ │ └── I_SeasonState.TcIO │ ├── Task │ │ ├── Data Type │ │ │ └── E_TaskState.TcDUT │ │ ├── FB_Task.TcPOU │ │ ├── I_Task.TcIO │ │ └── I_TaskStatus.TcIO │ ├── TcBase.plcproj │ └── TestTask.TcTTO │ └── _Config │ └── PLC │ └── TcBase.xti └── tools ├── Dummy.tpzip ├── chocolateyInstall.ps1 ├── chocolateyUninstall.ps1 └── createArtifacts.ps1 /.bumpversion.cfg: -------------------------------------------------------------------------------- 1 | [bumpversion] 2 | current_version="0.1.2" 3 | commit=true 4 | tag=true 5 | 6 | [bumpversion.file.0] 7 | file = "TcBase.nuspec" 8 | search = "{current_version}" 9 | replace = "{new_version}" 10 | [bumpversion.file.1] 11 | file = "TcBase/TcBase/TcBase/TcBase.plcproj" 12 | search = "{current_version}" 13 | replace = "{new_version}" 14 | -------------------------------------------------------------------------------- /.github/workflows/bump-version.yaml: -------------------------------------------------------------------------------- 1 | # This is a basic workflow that is manually triggered 2 | 3 | name: Bump version 4 | 5 | # Controls when the action will run. Workflow runs when manually triggered using the UI 6 | # or API. 7 | on: 8 | workflow_dispatch: 9 | # Inputs the workflow accepts. 10 | inputs: 11 | version: 12 | # Friendly description to be shown in the UI instead of 'name' 13 | description: "Semver type of new version (major / minor / patch)" 14 | # Input has to be provided for the workflow to run 15 | required: true 16 | type: choice 17 | options: 18 | - patch 19 | - minor 20 | - major 21 | 22 | # A workflow run is made up of one or more jobs that can run sequentially or in parallel 23 | jobs: 24 | # This workflow contains a single job called "bump-version" 25 | bump-version: 26 | # The type of runner that the job will run on 27 | runs-on: [self-hosted, Windows, x64, runner-1] 28 | 29 | # Steps represent a sequence of tasks that will be executed as part of the job 30 | steps: 31 | # Check out the content (source branch). Use a deploy key so that 32 | # when we push changes, it will trigger the release workflow 33 | # run that runs on: tag. (Using the GitHub token would 34 | # not run the workflow to prevent infinite recursion.) 35 | - name: Check out source 36 | uses: actions/checkout@v2 37 | with: 38 | ssh-key: ${{ secrets.DEPLOY_KEY }} 39 | 40 | - name: Setup Git 41 | run: | 42 | git config user.name 'Giang Nguyen' 43 | git config user.email 'nhgiangvt117@gmail.com' 44 | 45 | - name: Install BumpVersion 46 | run: | 47 | dotnet new tool-manifest 48 | dotnet tool install --local BumpVersion --version 0.0.9 49 | 50 | - name: Bump version 51 | run: dotnet tool run bumpversion -- ${{ github.event.inputs.version }} 52 | 53 | - name: Push latest version 54 | run: git push origin main --follow-tags 55 | -------------------------------------------------------------------------------- /.github/workflows/create-release.yaml: -------------------------------------------------------------------------------- 1 | on: 2 | push: 3 | tags: 4 | - "v*" 5 | 6 | name: Create Release 7 | 8 | jobs: 9 | create-github-release: 10 | name: Create GitHub Release 11 | runs-on: [self-hosted, Windows, x64, runner-1] 12 | permissions: 13 | contents: write 14 | steps: 15 | - name: Checkout source 16 | uses: actions/checkout@v3 17 | 18 | - name: Create artifacts 19 | run: .\tools\createArtifacts.ps1 20 | 21 | - name: Install GitHub CLI 22 | run: | 23 | choco install gh -y 24 | refreshenv 25 | 26 | - name: Create Release 27 | run: gh release create ${{ github.ref }} (Get-Item ./tools/*.library) --generate-notes 28 | env: 29 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 30 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # gitignore template for TwinCAT3 2 | # website: https://www.beckhoff.com/twincat3/ 3 | # 4 | # Recommended: VisualStudio.gitignore 5 | 6 | # TwinCAT files 7 | *.tpy 8 | *.tclrs 9 | *.compiled-library 10 | *.compileinfo 11 | # Don't include the tmc-file rule if either of the following is true: 12 | # 1. You've got TwinCAT C++ projects, as the information in the TMC-file is created manually for the C++ projects (in that case, only (manually) ignore the tmc-files for the PLC projects) 13 | # 2. You've created a standalone PLC-project and added events to it, as these are stored in the TMC-file. 14 | *.tmc 15 | *.tmcRefac 16 | *.library 17 | *.project.~u 18 | *.tsproj.bak 19 | *.tspproj.bak 20 | *.xti.bak 21 | LineIDs.dbg 22 | LineIDs.dbg.bak 23 | _Boot/ 24 | _CompileInfo/ 25 | _Libraries/ 26 | _ModuleInstall/ 27 | 28 | # Visual studio 29 | .vs/ 30 | 31 | # VS code 32 | .vscode/ 33 | 34 | .config/ 35 | 36 | *.nupkg -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | "version": "0.2.0", 6 | "configurations": [ 7 | { 8 | "name": "chocolateyInstall.ps1", 9 | "type": "PowerShell", 10 | "request": "launch", 11 | "script": "D:\\src\\TcBase\\tools\\chocolateyInstall.ps1", 12 | "args": ["-ForceProgId \"TcXaeShell.DTE.15.0\" -Verbose -Debug -Force"] 13 | }, 14 | { 15 | "name": "chocolateyUninstall.ps1", 16 | "type": "PowerShell", 17 | "request": "launch", 18 | "script": "D:\\src\\TcBase\\tools\\chocolateyUninstall.ps1", 19 | "args": ["-ForceProgId \"TcXaeShell.DTE.15.0\" -Verbose -Debug"] 20 | } 21 | ] 22 | } -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Giang Nguyen 4 | Copyright (c) 2020 Dustin Hullett, Inxton team, MTS spol. s r.o. and contributors 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to deal 8 | in the Software without restriction, including without limitation the rights 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the Software is 11 | furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in all 14 | copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![GitHub license](https://img.shields.io/github/license/Naereen/StrapDown.js.svg)](https://github.com/ahuca/TcBase/blob/main/LICENSE) 2 | 3 | # TcBase - TwinCAT 3 base framework 4 | 5 | ## Introduction 6 | 7 | This is an open-source TwinCAT 3 base framework providing a baseline for developing object-oriented TwinCAT 3 projects. It provides boilerplates of some well-known software design patterns, such as [state pattern](https://en.wikipedia.org/wiki/State_pattern), and [observer pattern](https://en.wikipedia.org/wiki/Observer_pattern). More patterns to come. It aims to provide more advanced types of data collection, for now only a [list](https://github.com/ahuca/TcBase/blob/main/TcBase/TcBase/TcBase/Collection/FB_List.TcPOU). Additionally, it has some utilities like an [invocation tracker](https://github.com/ahuca/TcBase/tree/main/TcBase/TcBase/TcBase/Invocation%20Control) and [action](https://github.com/ahuca/TcBase/tree/main/TcBase/TcBase/TcBase/Action), which can be executed iteratively over an [I_Enumerable](https://github.com/ahuca/TcBase/blob/main/TcBase/TcBase/TcBase/Collection/I_Enumerable.TcIO), for example, `fbList.ForEach(fbRunAllCyclicTask)`. 8 | 9 | This project is under heavy development, so there will not be any releases any time soon. However, the project is built to be a library, so you can manually produce a library out of this project from the source code. For instructions on how to do this, check [here](https://infosys.beckhoff.com/english.php?content=../content/1033/tc3_plc_intro/4189255051.html&id=). 10 | 11 | ## How to use the framework 12 | 13 | To take full advantage of the framework - being an object-oriented framework itself - every new FB that you create should inherit from FB_Object or its children. Like how FB_State inherits from FB_Object and thus can be stored in FB_List without any extra implementation. At this point, you might be wondering "well that is a helluva lot of coupling", and we applaud such intuition. That is why we try our best to keep the framework as lite as possible, to minimize the coupling. 14 | 15 | Being under heavy development, we advise you well to use [proxy](https://en.wikipedia.org/wiki/Proxy_pattern) - or simply put, a wrapper - when using this library, instead of direct usage. 16 | 17 | ## Dependencies 18 | 19 | The unit tests for [TcBase](https://github.com/ahuca/TcBase/tree/main/TcBase) depends on the [TcUnit library](https://github.com/tcunit/TcUnit) version [1.2.0.0](https://github.com/tcunit/TcUnit/releases/tag/1.2.0.0). 20 | 21 | ## Acknowledgement 22 | 23 | Some elements of the TcBase were based on parts of the open-sourced project [TcOpen](https://github.com/TcOpenGroup/TcOpen). 24 | -------------------------------------------------------------------------------- /TcBase.nuspec: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | TcBase 5 | 0.1.2 6 | Giang Nguyen 7 | false 8 | https://github.com/ahuca/TcBase/blob/main/LICENSE 9 | https://github.com/ahuca/TcBase 10 | https://github.com/ahuca/TcBase 11 | https://github.com/ahuca/TcBase/issues 12 | Yet another object-oriented TwinCAT 3 framework 13 | https://github.com/ahuca/TcBase/releases 14 | Beckhoff TwinCAT3 15 | 16 | ## Overview 17 | Yet another open-source TwinCAT 3 object-oriented framework. For more information, check the project's [README](https://github.com/ahuca/TcBase/blob/main/README.md). 18 | 19 | ## Package parameters 20 | 21 | * `-ForceProgId` - Force the installer to use the specified ProgId first. 22 | * `-LibRepo` - Specify the PLC library repository to install to, "System" by deffault. 23 | * `-MaxAttempts` - Retry (un)installation for [MaxAttemtps] amount in case of failure. 24 | 25 | Example: `choco install tcbase --params "-LibRepo System"` 26 | 27 | ## Notes 28 | This package needs [TwinCAT XAE](https://www.beckhoff.com/en-en/products/automation/twincat/texxxx-twincat-3-engineering/te1000.html) installed. It utilizes TwinCAT's [Automation Interface](https://infosys.beckhoff.com/content/1033/tc3_automationinterface/242733963.html?id=3803805599597676142) for the (un)installation of the `.library` file. 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /TcBase/TcBase.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 15 4 | VisualStudioVersion = 15.0.33026.149 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{B1E792BE-AA5F-4E3C-8C82-674BF9C0715B}") = "TcBase", "TcBase\TcBase.tsproj", "{E433D447-1E57-4990-B085-621CF7EFF45F}" 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 | {E433D447-1E57-4990-B085-621CF7EFF45F}.Debug|TwinCAT CE7 (ARMV7).ActiveCfg = Debug|TwinCAT CE7 (ARMV7) 21 | {E433D447-1E57-4990-B085-621CF7EFF45F}.Debug|TwinCAT CE7 (ARMV7).Build.0 = Debug|TwinCAT CE7 (ARMV7) 22 | {E433D447-1E57-4990-B085-621CF7EFF45F}.Debug|TwinCAT OS (ARMT2).ActiveCfg = Debug|TwinCAT OS (ARMT2) 23 | {E433D447-1E57-4990-B085-621CF7EFF45F}.Debug|TwinCAT OS (ARMT2).Build.0 = Debug|TwinCAT OS (ARMT2) 24 | {E433D447-1E57-4990-B085-621CF7EFF45F}.Debug|TwinCAT RT (x64).ActiveCfg = Debug|TwinCAT RT (x64) 25 | {E433D447-1E57-4990-B085-621CF7EFF45F}.Debug|TwinCAT RT (x64).Build.0 = Debug|TwinCAT RT (x64) 26 | {E433D447-1E57-4990-B085-621CF7EFF45F}.Debug|TwinCAT RT (x86).ActiveCfg = Debug|TwinCAT RT (x86) 27 | {E433D447-1E57-4990-B085-621CF7EFF45F}.Debug|TwinCAT RT (x86).Build.0 = Debug|TwinCAT RT (x86) 28 | {E433D447-1E57-4990-B085-621CF7EFF45F}.Release|TwinCAT CE7 (ARMV7).ActiveCfg = Release|TwinCAT CE7 (ARMV7) 29 | {E433D447-1E57-4990-B085-621CF7EFF45F}.Release|TwinCAT CE7 (ARMV7).Build.0 = Release|TwinCAT CE7 (ARMV7) 30 | {E433D447-1E57-4990-B085-621CF7EFF45F}.Release|TwinCAT OS (ARMT2).ActiveCfg = Release|TwinCAT OS (ARMT2) 31 | {E433D447-1E57-4990-B085-621CF7EFF45F}.Release|TwinCAT OS (ARMT2).Build.0 = Release|TwinCAT OS (ARMT2) 32 | {E433D447-1E57-4990-B085-621CF7EFF45F}.Release|TwinCAT RT (x64).ActiveCfg = Release|TwinCAT RT (x64) 33 | {E433D447-1E57-4990-B085-621CF7EFF45F}.Release|TwinCAT RT (x64).Build.0 = Release|TwinCAT RT (x64) 34 | {E433D447-1E57-4990-B085-621CF7EFF45F}.Release|TwinCAT RT (x86).ActiveCfg = Release|TwinCAT RT (x86) 35 | {E433D447-1E57-4990-B085-621CF7EFF45F}.Release|TwinCAT RT (x86).Build.0 = Release|TwinCAT RT (x86) 36 | {553D344D-26D1-4070-8621-D82B73140D8A}.Debug|TwinCAT CE7 (ARMV7).ActiveCfg = Debug|TwinCAT CE7 (ARMV7) 37 | {553D344D-26D1-4070-8621-D82B73140D8A}.Debug|TwinCAT CE7 (ARMV7).Build.0 = Debug|TwinCAT CE7 (ARMV7) 38 | {553D344D-26D1-4070-8621-D82B73140D8A}.Debug|TwinCAT OS (ARMT2).ActiveCfg = Debug|TwinCAT OS (ARMT2) 39 | {553D344D-26D1-4070-8621-D82B73140D8A}.Debug|TwinCAT OS (ARMT2).Build.0 = Debug|TwinCAT OS (ARMT2) 40 | {553D344D-26D1-4070-8621-D82B73140D8A}.Debug|TwinCAT RT (x64).ActiveCfg = Debug|TwinCAT RT (x64) 41 | {553D344D-26D1-4070-8621-D82B73140D8A}.Debug|TwinCAT RT (x64).Build.0 = Debug|TwinCAT RT (x64) 42 | {553D344D-26D1-4070-8621-D82B73140D8A}.Debug|TwinCAT RT (x86).ActiveCfg = Debug|TwinCAT RT (x86) 43 | {553D344D-26D1-4070-8621-D82B73140D8A}.Debug|TwinCAT RT (x86).Build.0 = Debug|TwinCAT RT (x86) 44 | {553D344D-26D1-4070-8621-D82B73140D8A}.Release|TwinCAT CE7 (ARMV7).ActiveCfg = Release|TwinCAT CE7 (ARMV7) 45 | {553D344D-26D1-4070-8621-D82B73140D8A}.Release|TwinCAT CE7 (ARMV7).Build.0 = Release|TwinCAT CE7 (ARMV7) 46 | {553D344D-26D1-4070-8621-D82B73140D8A}.Release|TwinCAT OS (ARMT2).ActiveCfg = Release|TwinCAT OS (ARMT2) 47 | {553D344D-26D1-4070-8621-D82B73140D8A}.Release|TwinCAT OS (ARMT2).Build.0 = Release|TwinCAT OS (ARMT2) 48 | {553D344D-26D1-4070-8621-D82B73140D8A}.Release|TwinCAT RT (x64).ActiveCfg = Release|TwinCAT RT (x64) 49 | {553D344D-26D1-4070-8621-D82B73140D8A}.Release|TwinCAT RT (x64).Build.0 = Release|TwinCAT RT (x64) 50 | {553D344D-26D1-4070-8621-D82B73140D8A}.Release|TwinCAT RT (x86).ActiveCfg = Release|TwinCAT RT (x86) 51 | {553D344D-26D1-4070-8621-D82B73140D8A}.Release|TwinCAT RT (x86).Build.0 = Release|TwinCAT RT (x86) 52 | EndGlobalSection 53 | GlobalSection(SolutionProperties) = preSolution 54 | HideSolutionNode = FALSE 55 | EndGlobalSection 56 | GlobalSection(ExtensibilityGlobals) = postSolution 57 | SolutionGuid = {C4831085-6EDB-4A7A-9C55-0B1F2F7A2726} 58 | EndGlobalSection 59 | EndGlobal 60 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase.tsproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | TestTask 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/Action/FB_Action.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 8 | 9 | 10 | 11 | 12 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/Action/FB_RunCyclicTasksAction.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 8 | 9 | 10 | 11 | 12 | 19 | 20 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/Action/I_Action.TcIO: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 6 | 7 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/Action/Tests/FB_ActionTestObject.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 10 | 11 | 12 | 13 | 14 | 19 | 20 | 22 | 23 | 24 | 25 | 26 | 27 | 30 | 31 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 42 | 43 | 45 | 46 | 47 | 48 | 49 | 53 | 54 | 56 | 57 | 58 | 59 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/Action/Tests/FB_Action_Test.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 8 | 9 | 12 | 13 | 14 | 19 | 20 | 37 | 38 | 39 | 40 | 47 | 48 | 60 | 61 | 62 | 63 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/Action/Tests/FB_ActivateAction.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 9 | 10 | 11 | 12 | 13 | 20 | 21 | 0 THEN 24 | p^.Activate(THIS^._bActivated); 25 | END_IF 26 | ]]> 27 | 28 | 29 | 30 | 35 | 36 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/Collection/I_Collection.TcIO: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 6 | 7 | 14 | 15 | 16 | 21 | 22 | 23 | 29 | 30 | 31 | 41 | 42 | 43 | 45 | 46 | 47 | 48 | 49 | 50 | 56 | 57 | 58 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/Collection/I_Enumerable.TcIO: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 6 | 7 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/Collection/I_List.TcIO: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 6 | 7 | 14 | 15 | 16 | 23 | 24 | 25 | 30 | 31 | 32 | 37 | 38 | 39 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 58 | 59 | 60 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/Collection/Param_List.TcGVL: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 9 | 10 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/Collection/Tests/FB_ListCapacity_Test.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 12 | 13 | 19 | 20 | 21 | 28 | 29 | 20 THEN 46 | THIS^.AssertEquals_UDINT(Expected := 40, 47 | Actual := fbList.nCapacity, 48 | Message := 'Unexpected new capacity'); 49 | END_IF 50 | END_FOR 51 | 52 | 53 | TcUnit.TEST_FINISHED(); 54 | ]]> 55 | 56 | 57 | 58 | 65 | 66 | 76 | 77 | 78 | 79 | 86 | 87 | 124 | 125 | 126 | 127 | 136 | 137 | 161 | 162 | 163 | 164 | 173 | 174 | 203 | 204 | 205 | 206 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/Context/FB_Context.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 15 | 16 | 17 | 18 | 19 | 24 | 25 | 27 | 28 | 29 | 30 | 36 | 37 | 40 | 41 | 42 | 43 | 44 | 45 | 48 | 49 | 51 | 52 | 53 | 54 | 55 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 69 | 70 | 72 | 73 | 74 | 75 | 76 | 80 | 81 | 82 | 83 | 84 | 85 | 89 | 90 | 91 | 92 | 93 | 94 | 98 | 99 | 103 | 104 | 105 | 106 | 107 | 108 | 111 | 112 | 114 | 115 | 116 | 117 | 118 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/Context/I_Context.TcIO: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 6 | 7 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/Cyclic Task/I_CyclicTask.TcIO: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 6 | 7 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/GVL_IntegerTypeBounds.TcGVL: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 23 | 24 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/Helpers/F_CompareObjects.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 12 | 13 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/Invocation Control/Tests/FB_InvocationControlTestTask.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 15 | 16 | 17 | 18 | 19 | 21 | 22 | 25 | 26 | 28 | 29 | 30 | 31 | 32 | 36 | 37 | 0 THEN 38 | THIS^._nCyclesToRun := THIS^._nCyclesToRunIn; 39 | ELSE 40 | THIS^._nCyclesToRun := THIS^.cDefaultCyclesToRun; 41 | END_IF 42 | ]]> 43 | 44 | 45 | 46 | 48 | 49 | 53 | 54 | 55 | 56 | 60 | 61 | 67 | 68 | 69 | 70 | 75 | 76 | 82 | 83 | 84 | 85 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/Invocation Control/Tests/FB_InvocationControl_Test.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 9 | 10 | 16 | 17 | 18 | 24 | 25 | 1 THEN 43 | THIS^.AssertTrue(Condition := fbCallCtrl.bCalledLastCycle, 44 | Message := '$'bCalledLastCycle$' is false, but it should be true'); 45 | IF NOT fbCallCtrl.bCalledLastCycle THEN 46 | ADSLOGSTR(msgCtrlMask := ADSLOG_MSGTYPE_ERROR, 47 | msgFmtStr := fbCallCtrl.ToString(), 48 | strArg := ''); 49 | END_IF 50 | ELSE 51 | THIS^.AssertFalse(Condition := fbCallCtrl.bCalledLastCycle, 52 | Message := '$'bCalledLastCycle$' should not be true on the first cycle it is called'); 53 | END_IF 54 | 55 | IF fbCallCtrlTestTask.bDone THEN 56 | TcUnit.TEST_FINISHED(); 57 | END_IF 58 | ]]> 59 | 60 | 61 | 62 | 68 | 69 | 87 | 88 | 89 | 90 | 96 | 97 | 114 | 115 | 116 | 117 | 123 | 124 | 141 | 142 | 143 | 144 | 150 | 151 | 1 THEN 156 | THIS^.AssertTrue(Condition := fbCallCtrl.bMultipleCall, 157 | Message := '$'bMultipleCall$' is false, but it should be true'); 158 | END_IF 159 | 160 | fbCallCtrl.Track().Track().Track(); 161 | 162 | THIS^.AssertTrue(Condition := fbCallCtrl.bMultipleCall, 163 | Message := '$'bMultipleCall$' is false, but it should be true'); 164 | 165 | IF fbCallCtrlTestTask.bDone THEN 166 | TcUnit.TEST_FINISHED(); 167 | END_IF 168 | ]]> 169 | 170 | 171 | 172 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/Object/FB_LinkedObject.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 9 | 10 | 11 | 12 | 13 | 20 | 21 | 23 | 24 | 25 | 26 | 27 | 28 | 31 | 32 | 0 THEN 33 | ipContext := THIS^.ipParent.ipContext; 34 | END_IF 35 | ]]> 36 | 37 | 38 | 39 | 40 | 41 | 42 | 45 | 46 | 48 | 49 | 50 | 51 | 52 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/Object/FB_Object.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 15 | 16 | 17 | 18 | 19 | 24 | 25 | 28 | 29 | 30 | 31 | 37 | 38 | 41 | 42 | 43 | 44 | 46 | 47 | 50 | 51 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 63 | 64 | 66 | 67 | 68 | 69 | 70 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/Object/I_LinkedObject.TcIO: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/Object/I_Object.TcIO: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 6 | 7 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/Object/Tests/FB_DummyObject.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 22 | 23 | 25 | 26 | 27 | 28 | 31 | 32 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/Object/Tests/FB_Object_Test.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 15 | 16 | 21 | 22 | 23 | 27 | 28 | 35 | 36 | 37 | 38 | 44 | 45 | 52 | 53 | 54 | 55 | 59 | 60 | 68 | 69 | 70 | 71 | 73 | 74 | 82 | 83 | 84 | 85 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/Observer Pattern/Abstraction/Actions/FB_NotifyObserverAction.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 11 | 12 | 13 | 14 | 15 | 22 | 23 | 33 | 34 | 35 | 36 | 43 | 44 | 50 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/Observer Pattern/Abstraction/FB_AbstractObservable.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 17 | 18 | 19 | 20 | 21 | 25 | 26 | THIS^._nTypeClass // Invalid type 28 | OR_ELSE THIS^.Contains(ipObserver) // Already added 29 | THEN 30 | RETURN; 31 | END_IF 32 | 33 | Attach := THIS^._fbObsList.AddItem(ipObserver) <> -1; 34 | 35 | IF Attach THEN 36 | THIS^.NotifyLast(); 37 | END_IF 38 | ]]> 39 | 40 | 41 | 42 | 44 | 45 | 48 | 49 | 51 | 52 | 53 | 54 | 57 | 58 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 69 | 70 | 72 | 73 | 74 | 75 | 78 | 79 | 81 | 82 | 83 | 84 | 85 | 89 | 90 | 92 | 93 | 94 | 95 | 100 | 101 | 103 | 104 | 105 | 106 | 110 | 111 | 113 | 114 | 115 | 116 | 118 | 119 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 130 | 131 | 134 | 135 | 137 | 138 | 139 | 140 | 141 | 143 | 144 | 152 | 153 | 154 | 155 | 159 | 160 | 0 THEN 165 | ipLastObs.UpdateP(pData := THIS^.pData, 166 | nTypeClass := THIS^._nTypeClass, 167 | nSize := THIS^.nDataSize); 168 | END_IF 169 | ]]> 170 | 171 | 172 | 173 | 177 | 178 | 191 | 192 | 193 | 194 | 195 | 196 | 199 | 200 | 202 | 203 | 204 | 205 | 206 | 211 | 212 | 214 | 215 | 216 | 217 | 218 | 219 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 232 | 233 | 234 | 235 | 236 | 237 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/Observer Pattern/Abstraction/FB_AbstractObserver.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | 25 | 26 | THIS^._nTypeClass THEN 27 | RETURN; 28 | END_IF 29 | 30 | IF nSize <> TO_UDINT(THIS^._nSize) THEN 31 | RETURN; 32 | END_IF 33 | 34 | IF pData = 0 THEN 35 | RETURN; 36 | END_IF 37 | 38 | nMemcpyRes := Tc2_System.MEMCPY(destAddr := THIS^._pVal, 39 | srcAddr := pData, 40 | n := TO_UDINT(THIS^._nSize)); 41 | 42 | IF nMemcpyRes <> 0 THEN 43 | THIS^._nUpdateCounter := THIS^._nUpdateCounter + 1; 44 | END_IF 45 | ]]> 46 | 47 | 48 | 49 | 51 | 52 | 55 | 56 | 58 | 59 | 60 | 61 | 62 | 66 | 67 | 68 | 69 | 70 | 71 | 75 | 76 | 77 | 78 | 79 | 80 | 87 | 88 | 96 | 97 | 98 | 99 | 107 | 108 | 116 | 117 | 118 | 119 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/Observer Pattern/Abstraction/I_Observable.TcIO: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 6 | 7 | 12 | 13 | 14 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 58 | 59 | 60 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 76 | 77 | 78 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/Observer Pattern/Abstraction/I_Observer.TcIO: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 18 | 19 | 20 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/Observer Pattern/FB_Observable_BOOL.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 19 | 20 | 22 | 23 | 24 | 25 | 28 | 29 | 34 | 35 | 36 | 37 | 38 | 44 | 45 | 47 | 48 | 49 | 50 | 51 | 52 | 55 | 56 | 58 | 59 | 60 | 61 | 62 | 64 | 65 | 68 | 69 | 71 | 72 | 73 | 74 | 75 | 79 | 80 | THIS^._bVal; 81 | ]]> 82 | 83 | 84 | 85 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/Observer Pattern/FB_Observable_BYTE.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 10 | 11 | 12 | 13 | 14 | 20 | 21 | 23 | 24 | 25 | 26 | 27 | 28 | 31 | 32 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 43 | 44 | 46 | 47 | 48 | 49 | 52 | 53 | 58 | 59 | 60 | 61 | 62 | 64 | 65 | 68 | 69 | 71 | 72 | 73 | 74 | 75 | 79 | 80 | THIS^._nVal; 81 | ]]> 82 | 83 | 84 | 85 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/Observer Pattern/FB_Observable_DINT.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 11 | 12 | 13 | 14 | 15 | 21 | 22 | 24 | 25 | 26 | 27 | 28 | 29 | 32 | 33 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 44 | 45 | 47 | 48 | 49 | 50 | 53 | 54 | 59 | 60 | 61 | 62 | 63 | 65 | 66 | 69 | 70 | 72 | 73 | 74 | 75 | 76 | 80 | 81 | THIS^._nVal; 82 | ]]> 83 | 84 | 85 | 86 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/Observer Pattern/FB_Observable_DWORD.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 10 | 11 | 12 | 13 | 14 | 20 | 21 | 23 | 24 | 25 | 26 | 27 | 28 | 31 | 32 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 43 | 44 | 46 | 47 | 48 | 49 | 52 | 53 | 59 | 60 | 61 | 62 | 63 | 65 | 66 | 69 | 70 | 72 | 73 | 74 | 75 | 76 | 80 | 81 | THIS^._nVal; 82 | ]]> 83 | 84 | 85 | 86 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/Observer Pattern/FB_Observable_INT.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 10 | 11 | 12 | 13 | 14 | 20 | 21 | 23 | 24 | 25 | 26 | 27 | 28 | 31 | 32 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 43 | 44 | 46 | 47 | 48 | 49 | 52 | 53 | 58 | 59 | 60 | 61 | 62 | 64 | 65 | 68 | 69 | 71 | 72 | 73 | 74 | 75 | 79 | 80 | THIS^._nVal; 81 | ]]> 82 | 83 | 84 | 85 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/Observer Pattern/FB_Observable_LINT.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 10 | 11 | 12 | 13 | 14 | 20 | 21 | 23 | 24 | 25 | 26 | 27 | 28 | 31 | 32 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 43 | 44 | 46 | 47 | 48 | 49 | 52 | 53 | 58 | 59 | 60 | 61 | 62 | 64 | 65 | 68 | 69 | 71 | 72 | 73 | 74 | 75 | 79 | 80 | THIS^._nVal; 81 | ]]> 82 | 83 | 84 | 85 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/Observer Pattern/FB_Observable_LREAL.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 10 | 11 | 12 | 13 | 14 | 20 | 21 | 23 | 24 | 25 | 26 | 27 | 28 | 31 | 32 | 34 | 35 | 36 | 37 | 40 | 41 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 55 | 56 | 58 | 59 | 60 | 61 | 62 | 64 | 65 | 68 | 69 | 71 | 72 | 73 | 74 | 75 | 79 | 80 | THIS^._fVal; 81 | ]]> 82 | 83 | 84 | 85 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/Observer Pattern/FB_Observable_LWORD.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 10 | 11 | 12 | 13 | 14 | 20 | 21 | 23 | 24 | 25 | 26 | 27 | 28 | 31 | 32 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 43 | 44 | 46 | 47 | 48 | 49 | 52 | 53 | 58 | 59 | 60 | 61 | 62 | 64 | 65 | 68 | 69 | 71 | 72 | 73 | 74 | 75 | 79 | 80 | THIS^._nVal; 81 | ]]> 82 | 83 | 84 | 85 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/Observer Pattern/FB_Observable_REAL.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 10 | 11 | 12 | 13 | 14 | 20 | 21 | 23 | 24 | 25 | 26 | 27 | 28 | 31 | 32 | 34 | 35 | 36 | 37 | 40 | 41 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 55 | 56 | 58 | 59 | 60 | 61 | 62 | 64 | 65 | 68 | 69 | 71 | 72 | 73 | 74 | 75 | 79 | 80 | THIS^._fVal; 81 | ]]> 82 | 83 | 84 | 85 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/Observer Pattern/FB_Observable_SINT.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 10 | 11 | 12 | 13 | 14 | 20 | 21 | 23 | 24 | 25 | 26 | 27 | 28 | 31 | 32 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 43 | 44 | 46 | 47 | 48 | 49 | 52 | 53 | 58 | 59 | 60 | 61 | 62 | 64 | 65 | 68 | 69 | 71 | 72 | 73 | 74 | 75 | 79 | 80 | THIS^._nVal; 81 | ]]> 82 | 83 | 84 | 85 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/Observer Pattern/FB_Observable_UDINT.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 10 | 11 | 12 | 13 | 14 | 20 | 21 | 23 | 24 | 25 | 26 | 27 | 28 | 31 | 32 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 43 | 44 | 46 | 47 | 48 | 49 | 52 | 53 | 59 | 60 | 61 | 62 | 63 | 65 | 66 | 69 | 70 | 72 | 73 | 74 | 75 | 76 | 80 | 81 | THIS^._nVal; 82 | ]]> 83 | 84 | 85 | 86 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/Observer Pattern/FB_Observable_UINT.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 10 | 11 | 12 | 13 | 14 | 20 | 21 | 23 | 24 | 25 | 26 | 27 | 28 | 31 | 32 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 43 | 44 | 46 | 47 | 48 | 49 | 52 | 53 | 58 | 59 | 60 | 61 | 62 | 64 | 65 | 68 | 69 | 71 | 72 | 73 | 74 | 75 | 79 | 80 | THIS^._nVal; 81 | ]]> 82 | 83 | 84 | 85 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/Observer Pattern/FB_Observable_ULINT.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 10 | 11 | 12 | 13 | 14 | 20 | 21 | 23 | 24 | 25 | 26 | 27 | 28 | 31 | 32 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 43 | 44 | 46 | 47 | 48 | 49 | 52 | 53 | 58 | 59 | 60 | 61 | 62 | 64 | 65 | 68 | 69 | 71 | 72 | 73 | 74 | 75 | 79 | 80 | THIS^._nVal; 81 | ]]> 82 | 83 | 84 | 85 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/Observer Pattern/FB_Observable_USINT.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 10 | 11 | 12 | 13 | 14 | 20 | 21 | 23 | 24 | 25 | 26 | 27 | 28 | 31 | 32 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 43 | 44 | 46 | 47 | 48 | 49 | 52 | 53 | 58 | 59 | 60 | 61 | 62 | 64 | 65 | 68 | 69 | 71 | 72 | 73 | 74 | 75 | 79 | 80 | THIS^._nVal; 81 | ]]> 82 | 83 | 84 | 85 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/Observer Pattern/FB_Observable_WORD.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 10 | 11 | 12 | 13 | 14 | 20 | 21 | 23 | 24 | 25 | 26 | 27 | 28 | 31 | 32 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 43 | 44 | 46 | 47 | 48 | 49 | 52 | 53 | 58 | 59 | 60 | 61 | 62 | 64 | 65 | 68 | 69 | 71 | 72 | 73 | 74 | 75 | 79 | 80 | THIS^._nVal; 81 | ]]> 82 | 83 | 84 | 85 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/Observer Pattern/FB_ObserverExt.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 9 | 10 | 11 | 12 | 13 | 20 | 21 | 25 | 26 | 27 | 28 | 29 | 30 | 33 | 34 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 45 | 46 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 57 | 58 | 60 | 61 | 62 | 63 | 64 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/Observer Pattern/FB_Observer_BOOL.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 18 | 19 | 21 | 22 | 23 | 24 | 25 | 31 | 32 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/Observer Pattern/FB_Observer_BYTE.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 9 | 10 | 11 | 12 | 13 | 19 | 20 | 24 | 25 | 26 | 27 | 28 | 29 | 32 | 33 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/Observer Pattern/FB_Observer_DINT.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 9 | 10 | 11 | 12 | 13 | 19 | 20 | 24 | 25 | 26 | 27 | 28 | 29 | 32 | 33 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/Observer Pattern/FB_Observer_DWORD.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 9 | 10 | 11 | 12 | 13 | 19 | 20 | 24 | 25 | 26 | 27 | 28 | 29 | 32 | 33 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/Observer Pattern/FB_Observer_INT.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 9 | 10 | 11 | 12 | 13 | 19 | 20 | 24 | 25 | 26 | 27 | 28 | 29 | 32 | 33 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/Observer Pattern/FB_Observer_LINT.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 9 | 10 | 11 | 12 | 13 | 19 | 20 | 24 | 25 | 26 | 27 | 28 | 29 | 32 | 33 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/Observer Pattern/FB_Observer_LREAL.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 9 | 10 | 11 | 12 | 13 | 19 | 20 | 24 | 25 | 26 | 27 | 28 | 29 | 32 | 33 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/Observer Pattern/FB_Observer_LWORD.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 9 | 10 | 11 | 12 | 13 | 19 | 20 | 24 | 25 | 26 | 27 | 28 | 29 | 32 | 33 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/Observer Pattern/FB_Observer_REAL.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 9 | 10 | 11 | 12 | 13 | 19 | 20 | 24 | 25 | 26 | 27 | 28 | 29 | 32 | 33 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/Observer Pattern/FB_Observer_SINT.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 9 | 10 | 11 | 12 | 13 | 19 | 20 | 24 | 25 | 26 | 27 | 28 | 29 | 32 | 33 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/Observer Pattern/FB_Observer_UDINT.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 9 | 10 | 11 | 12 | 13 | 19 | 20 | 24 | 25 | 26 | 27 | 28 | 29 | 32 | 33 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/Observer Pattern/FB_Observer_UINT.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 9 | 10 | 11 | 12 | 13 | 19 | 20 | 24 | 25 | 26 | 27 | 28 | 29 | 32 | 33 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/Observer Pattern/FB_Observer_ULINT.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 9 | 10 | 11 | 12 | 13 | 19 | 20 | 24 | 25 | 26 | 27 | 28 | 29 | 32 | 33 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/Observer Pattern/FB_Observer_USINT.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 9 | 10 | 11 | 12 | 13 | 19 | 20 | 24 | 25 | 26 | 27 | 28 | 29 | 32 | 33 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/Observer Pattern/FB_Observer_WORD.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 9 | 10 | 11 | 12 | 13 | 19 | 20 | 24 | 25 | 26 | 27 | 28 | 29 | 32 | 33 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/Observer Pattern/Tests/FB_Observer_LREAL_.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 21 | 22 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/Programs/Test.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 15 | 16 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/Restorable/I_ObjectRestorer.TcIO: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 6 | 7 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/Restorable/I_Restorable.TcIO: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 6 | 7 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/State Pattern/FB_State.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 9 | 10 | 11 | 12 | 13 | 18 | 19 | 0 20 | AND_THEN THIS^._ipStateMachine = 0 THEN 21 | THIS^._ipStateMachine := ipStateMachine; 22 | AssignStateMachine := TRUE; 23 | END_IF 24 | ]]> 25 | 26 | 27 | 28 | 35 | 36 | 0 THEN 37 | ipStateMachine.AddState(THIS^); 38 | END_IF 39 | ]]> 40 | 41 | 42 | 43 | 44 | 45 | 48 | 49 | 51 | 52 | 53 | 54 | 55 | 59 | 60 | 62 | 63 | 64 | 65 | 69 | 70 | 71 | 72 | 73 | 74 | 78 | 79 | 80 | 81 | 82 | 83 | 87 | 88 | 90 | 91 | 92 | 93 | 97 | 98 | 99 | 100 | 101 | 102 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/State Pattern/FB_StateMachine.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 13 | 14 | 15 | 16 | 17 | 22 | 23 | -1; 29 | IF AddState THEN 30 | THIS^.TryAssignSelfToState(ipState); 31 | END_IF 32 | ]]> 33 | 34 | 35 | 36 | 41 | 42 | 50 | 51 | 52 | 53 | 58 | 59 | 61 | 62 | 63 | 64 | 66 | 67 | 70 | 71 | 73 | 74 | 75 | 76 | 77 | 79 | 80 | 83 | 84 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 95 | 96 | 0 THEN 97 | nLastIdx := TO_DINT(THIS^.fbStateList.nCount - 1); 98 | END_IF]]> 99 | 100 | 101 | 102 | 103 | 104 | 105 | 108 | 109 | 111 | 112 | 113 | 114 | 115 | 117 | 118 | 121 | 122 | 124 | 125 | 126 | 127 | 128 | 132 | 133 | 135 | 136 | 137 | 138 | 140 | 141 | 0 THEN 144 | THIS^._ipState.Run(); 145 | ELSE 146 | IF THIS^.fbRunCallCtrl.bNewInvocation THEN 147 | Tc2_System.ADSLOGSTR(msgCtrlMask := Tc2_System.ADSLOG_MSGTYPE_ERROR, 148 | msgFmtStr := 'Current state for %s is not yet initialized', 149 | strArg := THIS^.sPath); 150 | END_IF 151 | END_IF 152 | ]]> 153 | 154 | 155 | 156 | 163 | 164 | 0 THEN 194 | THIS^._ipState.OnExit(); 195 | END_IF 196 | 197 | THIS^._ipPrevState := _ipState; 198 | THIS^._ipState := newState; 199 | 200 | IF THIS^._ipState <> 0 THEN 201 | THIS^._ipState.OnEntry(); 202 | END_IF 203 | 204 | THIS^._nStateChangeCount := THIS^._nStateChangeCount + 1; 205 | 206 | SetState := TRUE; 207 | ]]> 208 | 209 | 210 | 211 | 218 | 219 | 0 THEN 222 | __QUERYINTERFACE(ipObject, StateAt); 223 | END_IF 224 | ]]> 225 | 226 | 227 | 228 | 233 | 234 | 0 235 | AND_THEN THIS^.fbStateList.Contains(ipState) THEN 236 | ipState.AssignStateMachine(THIS^); 237 | TryAssignSelfToState := TRUE; 238 | END_IF 239 | ]]> 240 | 241 | 242 | 243 | 248 | 249 | 0 THEN 250 | ipState.MakeOrphan(); 251 | TryMakeStateOrphan := TRUE; 252 | END_IF 253 | ]]> 254 | 255 | 256 | 257 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/State Pattern/I_State.TcIO: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 6 | 7 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 24 | 25 | 26 | 30 | 31 | 32 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/State Pattern/I_StateMachine.TcIO: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 11 | 12 | 13 | 17 | 18 | 19 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 49 | 50 | 51 | 56 | 57 | 58 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/State Pattern/Tests/Test Subjects/E_Season.TcDUT: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 16 | 17 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/State Pattern/Tests/Test Subjects/FB_Autumn.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | 23 | 24 | 26 | 27 | 28 | 29 | 33 | 34 | 36 | 37 | 38 | 39 | 43 | 44 | 55 | 56 | 57 | 58 | 60 | 61 | 68 | 69 | 70 | 71 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/State Pattern/Tests/Test Subjects/FB_Default.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 8 | 9 | 10 | 11 | 12 | 16 | 17 | 0 THEN 24 | THIS^.ipStateMachine.SetState(THIS^); 25 | END_IF 26 | ]]> 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/State Pattern/Tests/Test Subjects/FB_SeasonStateMachine.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 9 | 10 | 11 | 12 | 13 | 17 | 18 | 24 | 25 | 26 | 27 | 31 | 32 | 34 | 35 | 36 | 37 | 38 | 39 | 42 | 43 | 45 | 46 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/State Pattern/Tests/Test Subjects/FB_Spring.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | 20 | 21 | 26 | 27 | 28 | 29 | 36 | 37 | 39 | 40 | 41 | 42 | 46 | 47 | 49 | 50 | 51 | 52 | 56 | 57 | 63 | 64 | 65 | 66 | 68 | 69 | 76 | 77 | 78 | 79 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/State Pattern/Tests/Test Subjects/FB_State1.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/State Pattern/Tests/Test Subjects/FB_State2.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/State Pattern/Tests/Test Subjects/FB_State3.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/State Pattern/Tests/Test Subjects/FB_State4.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/State Pattern/Tests/Test Subjects/FB_StateMachine1.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/State Pattern/Tests/Test Subjects/FB_Summer.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 12 | 13 | 14 | 15 | 16 | 20 | 21 | 26 | 27 | 28 | 29 | 36 | 37 | 39 | 40 | 41 | 42 | 46 | 47 | 49 | 50 | 51 | 52 | 54 | 55 | 62 | 63 | 64 | 65 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/State Pattern/Tests/Test Subjects/FB_Winter.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 8 | 9 | 10 | 11 | 12 | 16 | 17 | 22 | 23 | 24 | 25 | 32 | 33 | 35 | 36 | 37 | 38 | 42 | 43 | 45 | 46 | 47 | 48 | 52 | 53 | 59 | 60 | 61 | 62 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/State Pattern/Tests/Test Subjects/FB_Year.TcPOU: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 16 | 17 | 18 | 19 | 20 | 21 | 25 | 26 | 28 | 29 | 30 | 31 | 35 | 36 | 38 | 39 | 40 | 41 | 43 | 44 | 46 | 47 | 48 | 49 | 55 | 56 | 59 | 60 | 61 | 62 | 66 | 67 | 69 | 70 | 71 | 72 | 76 | 77 | 80 | 81 | 82 | 83 | 84 | 85 | 88 | 89 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 100 | 101 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 112 | 113 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 124 | 125 | 127 | 128 | 129 | 130 | 131 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/State Pattern/Tests/Test Subjects/I_SeasonControl.TcIO: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/State Pattern/Tests/Test Subjects/I_SeasonState.TcIO: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 36 | 37 | 38 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/Task/Data Type/E_TaskState.TcDUT: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 16 | 17 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/Task/I_Task.TcIO: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 6 | 7 | 11 | 12 | 13 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/Task/I_TaskStatus.TcIO: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /TcBase/TcBase/TcBase/TestTask.TcTTO: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 10000 6 | 1 7 | 8 | Test 9 | 10 | {994236d8-5822-4bc4-8a2a-8fc7ed3ead48} 11 | {d7955a35-7fb2-4623-969d-5c67971fe7ce} 12 | {b8ad2070-6454-424f-b86c-d8a82184de64} 13 | {aabba891-eee4-4443-8c04-87a004525f9a} 14 | {36d4d66d-4f2c-4f15-9553-b1a3466cca69} 15 | 16 | -------------------------------------------------------------------------------- /TcBase/TcBase/_Config/PLC/TcBase.xti: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | TcBase Instance 6 | {08500001-0000-0000-F000-000000000064} 7 | 8 | 9 | 0 10 | TestTask 11 | 12 | #x02010030 13 | 14 | 1 15 | 10000000 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /tools/Dummy.tpzip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ahuca/TcBase/430f700da552ebeb65a759e270f19dce7f998299/tools/Dummy.tpzip -------------------------------------------------------------------------------- /tools/chocolateyInstall.ps1: -------------------------------------------------------------------------------- 1 | [CmdletBinding()] 2 | Param( 3 | [string]$ForceProgId, 4 | [string]$LibRepo = "System", 5 | [int]$MaxAttempts = 5, 6 | [switch]$Force 7 | ) 8 | 9 | $LibPath = "$PSScriptRoot\TcBase.library" 10 | 11 | if (!$env:TWINCAT3DIR) { 12 | Write-Host "TwinCAT 3 is not installed, exiting normally" 13 | exit 0 14 | } 15 | 16 | Start-MessageFilter 17 | 18 | # Create new DTE instance 19 | $dteArgs = @{} 20 | if ($ForceProgId) { $dteArgs.Add("-ForceProgId", $ForceProgId) } 21 | $dte = New-DteInstance @dteArgs 22 | 23 | # Install library 24 | $installArgs = @{} 25 | if ($env:ChocolateyForce) { $installArgs.Add("-Force", $true) } 26 | elseif ($Force) { $installArgs.Add("-Force", $true) } 27 | if ($env:ChocolateyEnvironmentVerbose) { $installArgs.Add("-Verbose", $true) } 28 | $dte | Install-TcLibrary -Path $LibPath @installArgs 29 | 30 | # Close DTE instace 31 | Close-DteInstace -DteInstace $dte 32 | 33 | Stop-MessageFilter 34 | exit $exitCode 35 | -------------------------------------------------------------------------------- /tools/chocolateyUninstall.ps1: -------------------------------------------------------------------------------- 1 | [CmdletBinding()] 2 | Param( 3 | [string]$ForceProgId, 4 | [string]$LibRepo = "System", 5 | [int]$MaxAttempts = 5, 6 | [string]$LibVersion = "*" 7 | ) 8 | 9 | $LibName = "TcBase" 10 | 11 | if (!$env:TWINCAT3DIR) { 12 | Write-Host "TwinCAT 3 is not installed, exiting normally" 13 | exit 0 14 | } 15 | 16 | Start-MessageFilter 17 | 18 | # Create new DTE instance 19 | $dteArgs = @{} 20 | if ($ForceProgId) { $dteArgs.Add("-ForceProgId", $ForceProgId) } 21 | $dte = New-DteInstance @dteArgs 22 | 23 | if ($env:ChocolateyPackageVersion) { $LibVersion = $env:ChocolateyPackageVersion } 24 | 25 | # Uninstall library 26 | $uninstallArgs = @{} 27 | if ($env:ChocolateyEnvironmentVerbose) { $uninstallArgs.Add("-Verbose", $true) } 28 | 29 | Write-Host "Trying to uninstall $LibName with $MaxAttempts attempts" 30 | 31 | for (($attempts = 0); $attempts -lt $MaxAttempts; $attempts++) { 32 | Write-Host "Attempt $($attempts + 1)" 33 | 34 | try { 35 | Uninstall-TcLibrary -LibName $LibName -LibRepo $LibRepo -LibVersion $LibVersion -DteInstace $dte @uninstallArgs 36 | if ($?) { $exitCode = 0 } 37 | } 38 | catch { 39 | Write-Error $_ 40 | $exitCode = 1 41 | } 42 | 43 | if ($exitCode -eq 0) { break } 44 | } 45 | 46 | # Close DTE instace 47 | Close-DteInstace -DteInstace $dte 48 | Stop-MessageFilter 49 | exit 0 50 | -------------------------------------------------------------------------------- /tools/createArtifacts.ps1: -------------------------------------------------------------------------------- 1 | [CmdletBinding()] 2 | Param( 3 | [string]$ForceProgId 4 | ) 5 | 6 | Start-MessageFilter 7 | 8 | # Create new DTE instance 9 | $dteArgs = @{} 10 | if ($ForceProgId) { $dteArgs.Add("-ForceProgId", $ForceProgId) } 11 | $dte = New-DteInstance @dteArgs 12 | 13 | # Save project as library 14 | try { 15 | Export-TcProject -DteInstace $dte -Solution ".\TcBase\TcBase.sln" -ProjectName "TcBase" -Path (Resolve-Path(".\tools")) 16 | } 17 | catch { 18 | Write-Error $_ 19 | } 20 | 21 | # Close DTE instace 22 | Close-DteInstace -DteInstace $dte 23 | 24 | Stop-MessageFilter 25 | exit $exitCode 26 | --------------------------------------------------------------------------------