├── .gitignore ├── LICENSE ├── README.md ├── docs └── png │ ├── codebehind.png │ ├── codebehind_code.png │ └── monitors.png ├── example-shortcuts ├── LeftScreen.lnk └── MainScreen.lnk └── twincat-hmi-project ├── .gitignore ├── .vs └── config │ └── applicationhost.config ├── demo-multi-screen.sln ├── demo-multi-screen ├── .eslintrc.json ├── .tfignore ├── CodeBehind │ └── ViewSelector.js ├── Desktop.view ├── ExtendedDesktop.view ├── Fonts │ ├── Fonts.css │ └── Roboto-Condensed-webfont.woff ├── Images │ ├── Beckhoff_Logo.svg │ ├── Favicon.ico │ └── Manifest │ │ ├── launcher-icon-0-75x.png │ │ ├── launcher-icon-1-5x.png │ │ ├── launcher-icon-1x.png │ │ ├── launcher-icon-2x.png │ │ ├── launcher-icon-3x.png │ │ └── launcher-icon-4x.png ├── KeyboardLayouts │ ├── German - compact.keyboard.json │ └── US - compact.keyboard.json ├── Localization │ ├── de-DE.localization │ ├── de-DE.tpl.localization │ ├── en-US.localization │ └── en-US.tpl.localization ├── Properties │ ├── Default.tpl │ ├── tchmi.framework.Schema.json │ ├── tchmi.framework.Schema.tpl.json │ ├── tchmi.project.Schema.json │ ├── tchmi.project.Schema.tpl.json │ ├── tchmiconfig.json │ ├── tchmimanifest.json │ └── tchmipublish.config.json ├── Server │ ├── ADS │ │ ├── ADS.Config.default.json │ │ ├── ADS.Config.remote.json │ │ └── ADS.Storage.json │ ├── TcHmiLua │ │ ├── TcHmiLua.Config.default.json │ │ ├── TcHmiLua.Config.remote.json │ │ └── TcHmiLua.Storage.json │ ├── TcHmiSqliteLogger │ │ ├── TcHmiSqliteLogger.Config.default.json │ │ ├── TcHmiSqliteLogger.Config.remote.json │ │ └── TcHmiSqliteLogger.Storage.json │ ├── TcHmiSrv │ │ ├── TcHmiSrv.Config.default.json │ │ ├── TcHmiSrv.Config.remote.json │ │ └── TcHmiSrv.Storage.json │ └── TcHmiUserManagement │ │ ├── TcHmiUserManagement.Config.default.json │ │ ├── TcHmiUserManagement.Config.remote.json │ │ └── TcHmiUserManagement.Storage.json ├── Themes │ └── Base │ │ ├── Base.theme │ │ ├── BaseStyle.css │ │ └── Images │ │ ├── Background.png │ │ ├── Splash-320x534.png │ │ ├── Splash-420x200.png │ │ └── Splash-800x600.png ├── demo-multi-screen.hmiproj ├── packages.config ├── packages.xsd ├── tsconfig.json └── tsconfig.tpl.json └── demo-plc └── demo-plc.tsproj /.gitignore: -------------------------------------------------------------------------------- 1 | # Add any directories, files, or patterns you don't want to be tracked by version control # 2 | 3 | ## Ignore Twincat non-source files ## 4 | 5 | ### User-specific files (from 4018 tmc should be ignored) ### 6 | *.~u 7 | *.tpy 8 | *.tmc 9 | *.suo 10 | *.user 11 | *.orig 12 | TrialLicense.tclrs 13 | 14 | ### Build results ### 15 | _Boot/ 16 | _CompileInfo/ 17 | .engineering_servers/ 18 | *.compileinfo 19 | *.bootinfo 20 | *.bootinfo_guids 21 | 22 | ### Visual studio files ### 23 | *.obj 24 | *.exe 25 | *.pdb 26 | *.user 27 | *.aps 28 | *.pch 29 | *.vspscc 30 | *_i.c 31 | *_p.c 32 | *.ncb 33 | *.suo 34 | *.tlb 35 | *.tlh 36 | *.bak 37 | *.cache 38 | *.ilk 39 | *.log 40 | *.dll 41 | *.lib 42 | *.sbr 43 | *.crc 44 | *.cid 45 | *.autostart 46 | *.app 47 | *.compiled-library 48 | *.compileinfo 49 | *.occ 50 | *.tizip 51 | *.plcproj.orig 52 | 53 | ### VS Code files ### 54 | *.vscode 55 | 56 | ### Windows files ### 57 | Thumbs.db 58 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Ben 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Example using TcHmi on IPC with multiple screens (or multiple clients accessing different screens) 2 | 3 | ## Disclaimer 4 | This guide is a personal project and not a peer-reviewed publication or sponsored document. It is provided “as is,” without any warranties—express or implied—including, but not limited to, accuracy, completeness, reliability, or suitability for any purpose. The author(s) shall not be held liable for any errors, omissions, delays, or damages arising from the use or display of this information. 5 | 6 | All opinions expressed are solely those of the author(s) and do not necessarily represent those of any organization, employer, or other entity. Any assumptions or conclusions presented are subject to revision or rethinking at any time. 7 | 8 | Use of this information, code, or scripts provided is at your own risk. Readers are encouraged to independently verify facts. This content does not constitute professional advice, and no client or advisory relationship is formed through its use. 9 | 10 | ## Overview 11 | 12 | Typically an IPC will have a single screen which will be used as a HMI. This will require, starting a browser in kiosk mode, then directing it to TcHmi (typically using a shortcut). 13 | 14 | There are applications which will require more than one screen with each screen showing a different view of TcHMI. This project shows you one method to achieve this. 15 | 16 | 1. Add a code behind javascript which will allow the current view to be selected via a query string passed in the URL. 17 | 2. Create two shortcuts to control chrome's startup location. 18 | 3. Change the default url in the shortcuts to include the new query string. 19 | 20 | This example code can also be used when more than one client needs to access different pages from the server. 21 | 22 | ## Getting Started 23 | 24 | ### 1. Additions to your TcHMI project 25 | 26 | The code we will add will allow us to replace 27 | 28 | ``` 29 | http://127.0.0.1:1010/ 30 | ``` 31 | 32 | with 33 | 34 | ``` 35 | http://127.0.0.1:1010?view=Desktop 36 | ``` 37 | 38 | In this example we have a second view called ExtendedDesktop which can now be accessed by the following, 39 | 40 | ``` 41 | http://127.0.0.1:1010?view=ExtendedDesktop 42 | ``` 43 | 44 | You will need to add the code below, to a "CodeBehind" JavaScript file to your project. Either copy the "ViewSelector.js" from the included project or create a new code behind file and paste in the following code, shown in the steps below. 45 | 46 | #### a. The code snippet which does the work 47 | 48 | ```javascript 49 | const urlParams = new URLSearchParams(window.location.search); 50 | const view = urlParams.get("view"); 51 | 52 | if (!view) return; 53 | TcHmi.View.load(view + ".view"); 54 | ``` 55 | 56 | #### b. Creating the code behind file 57 | 58 | ![screen layout](docs/png/codebehind.png) 59 | 60 | #### c. The complete code once added to the code behind file. 61 | 62 | ![screen layout](docs/png/codebehind_code.png) 63 | 64 | At this point you project is now able to accept queries passed in via the location bar. 65 | 66 | ### 2. Create two shortcuts 67 | 68 | Shortcut 1 (Main screen) 69 | 70 | ``` 71 | "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --new-window "http://localhost:1010" --window-size="1024,768" --window-position="0,0" --kiosk --user-data-dir="C:/temp/Profiles/1" 72 | ``` 73 | 74 | Shortcut 2 (Second screen) 75 | 76 | ``` 77 | "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --new-window "http://localhost:1010" --window-size="1024,768" --window-position="-1024,0" --kiosk --user-data-dir="C:/temp/Profiles/2" 78 | ``` 79 | 80 | Please note that you will need to set the second window-position so that it correctly sits on your second screen. 81 | 82 | ``` 83 | --window-position="-1024,0" 84 | ``` 85 | 86 | This may require setting a positive or negative position depending on which side the second screen is placed. 87 | 88 | ![screen layout](docs/png/monitors.png) 89 | 90 | It is also important to set the two profiles to different values as the window position is stored here. 91 | 92 | ### 3. Change the default url 93 | 94 | Shortcut 1 (Main screen) 95 | 96 | ``` 97 | "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --new-window "http://localhost:1010?view=Desktop" --window-size="1024,768" --window-position="0,0" --kiosk --user-data-dir="C:/temp/Profiles/1" 98 | ``` 99 | 100 | Shortcut 2 (Second screen) 101 | 102 | ``` 103 | "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --new-window "http://localhost:1010?view=ExtendedDesktop" --window-size="1024,768" --window-position="-1024,0" --kiosk --user-data-dir="C:/temp/Profiles/2" 104 | ``` 105 | 106 | You can request any view simply by changing the value. It must match the name of a view in your TcHmi Project. 107 | 108 | ## TwinCAT 109 | 110 | This project uses TcXaeShell 3.1.4024.55 and TwinCAT HMI 1.12.762.42 111 | 112 | ## Licenses 113 | 114 | TwinCAT HMI will allow multiple browsers to connect using a single client license if they have the same IP address. Therefore at the time of writing this is possible with the standard TF2000 license only. 115 | -------------------------------------------------------------------------------- /docs/png/codebehind.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benhar-dev/tchmi-multi-screen/5054cf38b4aab6fcd41bf9323c59f82dc5083872/docs/png/codebehind.png -------------------------------------------------------------------------------- /docs/png/codebehind_code.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benhar-dev/tchmi-multi-screen/5054cf38b4aab6fcd41bf9323c59f82dc5083872/docs/png/codebehind_code.png -------------------------------------------------------------------------------- /docs/png/monitors.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benhar-dev/tchmi-multi-screen/5054cf38b4aab6fcd41bf9323c59f82dc5083872/docs/png/monitors.png -------------------------------------------------------------------------------- /example-shortcuts/LeftScreen.lnk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benhar-dev/tchmi-multi-screen/5054cf38b4aab6fcd41bf9323c59f82dc5083872/example-shortcuts/LeftScreen.lnk -------------------------------------------------------------------------------- /example-shortcuts/MainScreen.lnk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benhar-dev/tchmi-multi-screen/5054cf38b4aab6fcd41bf9323c59f82dc5083872/example-shortcuts/MainScreen.lnk -------------------------------------------------------------------------------- /twincat-hmi-project/.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore TwinCAT HMI temporary files, build results, and 2 | ## files generated by popular TwinCAT HMI add-ons. 3 | 4 | .engineering_servers/ 5 | tchmipublish.journal.json 6 | liveview_* 7 | *.cache 8 | *.db-shm 9 | *.db-wal 10 | *.pid 11 | **/.hmiframework/ 12 | **/.hmipkgs/ 13 | **/*.d.ts 14 | **/*.js.map 15 | 16 | ## Ignore Visual Studio temporary files, build results, and 17 | ## files generated by popular Visual Studio add-ons. 18 | ## 19 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore 20 | 21 | # User-specific files 22 | *.suo 23 | *.user 24 | *.userosscache 25 | *.sln.docstates 26 | *.vcxproj.filters 27 | 28 | # User-specific files (MonoDevelop/Xamarin Studio) 29 | *.userprefs 30 | 31 | # Build results 32 | [Dd]ebug/ 33 | [Dd]ebugPublic/ 34 | [Rr]elease/ 35 | [Rr]eleases/ 36 | x64/ 37 | x86/ 38 | bld/ 39 | [Bb]in/ 40 | [Oo]bj/ 41 | [Ll]og/ 42 | 43 | # Visual Studio 2015 cache/options directory 44 | .vs/ 45 | # Uncomment if you have tasks that create the project's static files in wwwroot 46 | #wwwroot/ 47 | 48 | # MSTest test Results 49 | [Tt]est[Rr]esult*/ 50 | [Bb]uild[Ll]og.* 51 | 52 | # NUNIT 53 | *.VisualState.xml 54 | TestResult.xml 55 | 56 | # Build Results of an ATL Project 57 | [Dd]ebugPS/ 58 | [Rr]eleasePS/ 59 | dlldata.c 60 | 61 | # .NET Core 62 | project.lock.json 63 | project.fragment.lock.json 64 | artifacts/ 65 | **/Properties/launchSettings.json 66 | 67 | *_i.c 68 | *_p.c 69 | *_i.h 70 | *.ilk 71 | *.meta 72 | *.obj 73 | *.pch 74 | *.pdb 75 | *.pgc 76 | *.pgd 77 | *.rsp 78 | *.sbr 79 | *.tlb 80 | *.tli 81 | *.tlh 82 | *.tmp 83 | *.tmp_proj 84 | *.log 85 | *.vspscc 86 | *.vssscc 87 | .builds 88 | *.pidb 89 | *.svclog 90 | *.scc 91 | 92 | # Chutzpah Test files 93 | _Chutzpah* 94 | 95 | # Visual C++ cache files 96 | ipch/ 97 | *.aps 98 | *.ncb 99 | *.opendb 100 | *.opensdf 101 | *.sdf 102 | *.cachefile 103 | *.VC.db 104 | *.VC.VC.opendb 105 | 106 | # Visual Studio profiler 107 | *.psess 108 | *.vsp 109 | *.vspx 110 | *.sap 111 | 112 | # TFS 2012 Local Workspace 113 | $tf/ 114 | 115 | # Guidance Automation Toolkit 116 | *.gpState 117 | 118 | # ReSharper is a .NET coding add-in 119 | _ReSharper*/ 120 | *.[Rr]e[Ss]harper 121 | *.DotSettings.user 122 | 123 | # JustCode is a .NET coding add-in 124 | .JustCode 125 | 126 | # TeamCity is a build add-in 127 | _TeamCity* 128 | 129 | # DotCover is a Code Coverage Tool 130 | *.dotCover 131 | 132 | # Visual Studio code coverage results 133 | *.coverage 134 | *.coveragexml 135 | 136 | # NCrunch 137 | _NCrunch_* 138 | .*crunch*.local.xml 139 | nCrunchTemp_* 140 | 141 | # MightyMoose 142 | *.mm.* 143 | AutoTest.Net/ 144 | 145 | # Web workbench (sass) 146 | .sass-cache/ 147 | 148 | # Installshield output folder 149 | [Ee]xpress/ 150 | 151 | # DocProject is a documentation generator add-in 152 | DocProject/buildhelp/ 153 | DocProject/Help/*.HxT 154 | DocProject/Help/*.HxC 155 | DocProject/Help/*.hhc 156 | DocProject/Help/*.hhk 157 | DocProject/Help/*.hhp 158 | DocProject/Help/Html2 159 | DocProject/Help/html 160 | 161 | # Click-Once directory 162 | publish/ 163 | 164 | # Publish Web Output 165 | *.[Pp]ublish.xml 166 | *.azurePubxml 167 | # TODO: Comment the next line if you want to checkin your web deploy settings 168 | # but database connection strings (with potential passwords) will be unencrypted 169 | *.pubxml 170 | *.publishproj 171 | 172 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 173 | # checkin your Azure Web App publish settings, but sensitive information contained 174 | # in these scripts will be unencrypted 175 | PublishScripts/ 176 | 177 | # NuGet Packages 178 | *.nupkg 179 | # The packages folder can be ignored because of Package Restore 180 | **/packages/* 181 | # except build/, which is used as an MSBuild target. 182 | !**/packages/build/ 183 | # Uncomment if necessary however generally it will be regenerated when needed 184 | #!**/packages/repositories.config 185 | # NuGet v3's project.json files produces more ignoreable files 186 | *.nuget.props 187 | *.nuget.targets 188 | 189 | # Microsoft Azure Build Output 190 | csx/ 191 | *.build.csdef 192 | 193 | # Microsoft Azure Emulator 194 | ecf/ 195 | rcf/ 196 | 197 | # Windows Store app package directories and files 198 | AppPackages/ 199 | BundleArtifacts/ 200 | Package.StoreAssociation.xml 201 | _pkginfo.txt 202 | 203 | # Visual Studio cache files 204 | # files ending in .cache can be ignored 205 | *.[Cc]ache 206 | # but keep track of directories ending in .cache 207 | !*.[Cc]ache/ 208 | 209 | # Others 210 | ClientBin/ 211 | ~$* 212 | *~ 213 | *.dbmdl 214 | *.dbproj.schemaview 215 | *.jfm 216 | *.pfx 217 | *.publishsettings 218 | node_modules/ 219 | orleans.codegen.cs 220 | 221 | # Since there are multiple workflows, uncomment next line to ignore bower_components 222 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 223 | #bower_components/ 224 | 225 | # RIA/Silverlight projects 226 | Generated_Code/ 227 | 228 | # Backup & report files from converting an old project file 229 | # to a newer Visual Studio version. Backup files are not needed, 230 | # because git is used. 231 | _UpgradeReport_Files/ 232 | Backup*/ 233 | UpgradeLog*.XML 234 | UpgradeLog*.htm 235 | 236 | # SQL Server files 237 | *.mdf 238 | *.ldf 239 | 240 | # Business Intelligence projects 241 | *.rdl.data 242 | *.bim.layout 243 | *.bim_*.settings 244 | 245 | # Microsoft Fakes 246 | FakesAssemblies/ 247 | 248 | # GhostDoc plugin setting file 249 | *.GhostDoc.xml 250 | 251 | # Node.js Tools for Visual Studio 252 | .ntvs_analysis.dat 253 | 254 | # Visual Studio 6 build log 255 | *.plg 256 | 257 | # Visual Studio 6 workspace options file 258 | *.opt 259 | 260 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) 261 | *.vbw 262 | 263 | # Visual Studio LightSwitch build output 264 | **/*.HTMLClient/GeneratedArtifacts 265 | **/*.DesktopClient/GeneratedArtifacts 266 | **/*.DesktopClient/ModelManifest.xml 267 | **/*.Server/GeneratedArtifacts 268 | **/*.Server/ModelManifest.xml 269 | _Pvt_Extensions 270 | 271 | # Paket dependency manager 272 | .paket/paket.exe 273 | paket-files/ 274 | 275 | # FAKE - F# Make 276 | .fake/ 277 | 278 | # JetBrains Rider 279 | .idea/ 280 | *.sln.iml 281 | 282 | # CodeRush 283 | .cr/ 284 | 285 | # Python Tools for Visual Studio (PTVS) 286 | __pycache__/ 287 | *.pyc 288 | 289 | # Cake - Uncomment if you are using it 290 | # tools/ -------------------------------------------------------------------------------- /twincat-hmi-project/.vs/config/applicationhost.config: -------------------------------------------------------------------------------- 1 |  2 | 20 | 21 | 22 | 23 | 50 | 51 | 52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 | 61 | 62 | 63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 | 82 |
83 |
84 | 85 |
86 |
87 |
88 |
89 |
90 |
91 | 92 |
93 |
94 |
95 |
96 |
97 | 98 |
99 |
100 |
101 | 102 |
103 |
104 | 105 |
106 |
107 | 108 |
109 |
110 |
111 | 112 | 113 |
114 |
115 |
116 |
117 |
118 |
119 | 120 |
121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | 283 | 284 | 285 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | 299 | 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | 313 | 314 | 315 | 316 | 317 | 318 | 319 | 320 | 321 | 322 | 323 | 324 | 325 | 326 | 327 | 328 | 329 | 330 | 331 | 332 | 333 | 334 | 335 | 336 | 337 | 338 | 339 | 340 | 341 | 342 | 343 | 344 | 345 | 346 | 347 | 348 | 349 | 350 | 351 | 352 | 353 | 354 | 355 | 356 | 357 | 358 | 359 | 360 | 361 | 362 | 363 | 364 | 365 | 366 | 367 | 368 | 369 | 370 | 371 | 372 | 373 | 374 | 375 | 376 | 377 | 378 | 379 | 380 | 381 | 382 | 383 | 384 | 385 | 386 | 387 | 388 | 389 | 390 | 391 | 392 | 393 | 394 | 395 | 396 | 397 | 398 | 399 | 400 | 401 | 402 | 403 | 404 | 405 | 406 | 407 | 408 | 409 | 410 | 411 | 412 | 413 | 414 | 415 | 416 | 417 | 418 | 419 | 420 | 421 | 422 | 423 | 424 | 425 | 426 | 427 | 428 | 429 | 430 | 431 | 432 | 433 | 434 | 435 | 436 | 437 | 438 | 439 | 440 | 441 | 442 | 443 | 444 | 445 | 446 | 447 | 448 | 449 | 450 | 451 | 452 | 453 | 454 | 455 | 456 | 457 | 458 | 459 | 460 | 461 | 462 | 463 | 464 | 465 | 466 | 467 | 468 | 469 | 470 | 471 | 472 | 473 | 474 | 475 | 476 | 477 | 478 | 479 | 480 | 481 | 482 | 483 | 484 | 485 | 486 | 487 | 488 | 489 | 490 | 491 | 492 | 493 | 494 | 495 | 496 | 497 | 498 | 499 | 500 | 501 | 502 | 503 | 504 | 505 | 506 | 507 | 508 | 509 | 510 | 511 | 512 | 513 | 514 | 515 | 516 | 517 | 518 | 519 | 520 | 521 | 522 | 523 | 524 | 525 | 526 | 527 | 528 | 529 | 530 | 531 | 532 | 533 | 534 | 535 | 536 | 537 | 538 | 539 | 540 | 541 | 542 | 543 | 544 | 545 | 546 | 547 | 548 | 549 | 550 | 551 | 552 | 553 | 554 | 555 | 556 | 557 | 558 | 559 | 560 | 561 | 562 | 563 | 564 | 565 | 566 | 567 | 568 | 569 | 570 | 571 | 572 | 573 | 574 | 575 | 576 | 577 | 578 | 579 | 580 | 581 | 582 | 583 | 584 | 585 | 586 | 587 | 588 | 589 | 590 | 591 | 592 | 593 | 594 | 595 | 596 | 597 | 598 | 599 | 600 | 601 | 602 | 603 | 604 | 605 | 606 | 607 | 608 | 609 | 610 | 611 | 612 | 613 | 614 | 615 | 616 | 617 | 618 | 619 | 620 | 621 | 622 | 623 | 624 | 625 | 626 | 627 | 628 | 629 | 630 | 631 | 632 | 633 | 634 | 635 | 636 | 637 | 638 | 639 | 640 | 641 | 642 | 643 | 644 | 645 | 646 | 647 | 648 | 649 | 650 | 651 | 652 | 653 | 654 | 655 | 656 | 657 | 658 | 659 | 660 | 661 | 662 | 663 | 664 | 665 | 666 | 667 | 668 | 669 | 670 | 671 | 672 | 673 | 674 | 675 | 676 | 677 | 678 | 679 | 680 | 681 | 682 | 683 | 684 | 685 | 686 | 687 | 688 | 689 | 690 | 691 | 692 | 693 | 694 | 695 | 696 | 697 | 698 | 699 | 700 | 701 | 702 | 703 | 704 | 705 | 706 | 707 | 708 | 709 | 710 | 711 | 712 | 713 | 714 | 715 | 716 | 717 | 718 | 719 | 720 | 721 | 722 | 723 | 724 | 725 | 726 | 727 | 728 | 729 | 730 | 731 | 732 | 733 | 734 | 735 | 736 | 737 | 738 | 739 | 740 | 741 | 742 | 743 | 744 | 745 | 746 | 747 | 748 | 749 | 750 | 751 | 752 | 753 | 754 | 755 | 756 | 757 | 758 | 759 | 760 | 761 | 762 | 763 | 764 | 765 | 766 | 767 | 768 | 769 | 770 | 771 | 772 | 773 | 774 | 775 | 776 | 777 | 778 | 779 | 780 | 781 | 782 | 783 | 784 | 785 | 786 | 787 | 788 | 789 | 790 | 791 | 792 | 793 | 794 | 795 | 796 | 797 | 798 | 799 | 800 | 801 | 802 | 803 | 804 | 805 | 806 | 807 | 808 | 809 | 810 | 811 | 812 | 813 | 814 | 815 | 816 | 817 | 818 | 819 | 820 | 821 | 822 | 823 | 824 | 825 | 826 | 827 | 828 | 829 | 830 | 831 | 832 | 833 | 834 | 835 | 836 | 837 | 838 | 839 | 840 | 841 | 842 | 843 | 844 | 845 | 846 | 847 | 848 | 849 | 850 | 851 | 852 | 853 | 854 | 855 | 856 | 857 | 858 | 859 | 860 | 861 | 862 | 863 | 864 | 865 | 866 | 867 | 868 | 869 | 870 | 871 | 872 | 873 | 874 | 875 | 876 | 877 | 878 | 879 | 880 | 881 | 882 | 883 | 884 | 885 | 886 | 887 | 888 | 889 | 890 | 891 | 892 | 893 | 894 | 895 | 896 | 897 | 898 | 899 | 900 | 901 | 902 | 903 | 904 | 905 | 906 | 907 | 908 | 909 | 910 | 911 | 912 | 913 | 914 | 915 | 916 | 917 | 918 | 919 | 920 | 921 | 922 | 923 | 924 | 925 | 926 | 927 | 928 | 929 | 930 | 931 | 932 | 933 | 934 | 935 | 936 | 937 | 938 | 939 | 940 | 941 | 942 | 943 | 944 | 945 | 946 | 947 | 948 | 949 | 950 | 951 | 952 | 953 | 954 | 955 | 956 | 957 | 958 | 959 | 960 | 961 | 962 | 963 | 964 | 965 | 966 | 967 | 968 | 969 | 970 | 971 | 972 | 973 | 974 | 975 | 976 | 977 | 978 | 979 | 980 | 981 | 982 | 983 | 984 | 985 | 986 | 987 | 988 | 989 | 990 | 991 | 992 | 993 | 994 | 995 | 996 | 997 | 998 | 999 | 1000 | 1001 | 1002 | 1003 | 1004 | 1005 | 1006 | 1007 | 1008 | 1009 | 1010 | 1011 | 1012 | -------------------------------------------------------------------------------- /twincat-hmi-project/demo-multi-screen.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # TcXaeShell Solution File, Format Version 11.00 4 | VisualStudioVersion = 15.0.28010.2050 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FE7A1B72-C5B7-4D7C-BB7D-76384D4DE8E1}") = "demo-multi-screen", "demo-multi-screen\demo-multi-screen.hmiproj", "{A3F16FC8-DFB6-4FFB-8D05-4593472A6F63}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | Debug|TwinCAT HMI = Debug|TwinCAT HMI 11 | Release|TwinCAT HMI = Release|TwinCAT HMI 12 | EndGlobalSection 13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 14 | {A3F16FC8-DFB6-4FFB-8D05-4593472A6F63}.Debug|TwinCAT HMI.ActiveCfg = Debug|TwinCAT HMI 15 | {A3F16FC8-DFB6-4FFB-8D05-4593472A6F63}.Debug|TwinCAT HMI.Build.0 = Debug|TwinCAT HMI 16 | {A3F16FC8-DFB6-4FFB-8D05-4593472A6F63}.Release|TwinCAT HMI.ActiveCfg = Release|TwinCAT HMI 17 | {A3F16FC8-DFB6-4FFB-8D05-4593472A6F63}.Release|TwinCAT HMI.Build.0 = Release|TwinCAT HMI 18 | EndGlobalSection 19 | GlobalSection(SolutionProperties) = preSolution 20 | HideSolutionNode = FALSE 21 | EndGlobalSection 22 | GlobalSection(ExtensibilityGlobals) = postSolution 23 | SolutionGuid = {097BB319-51BA-4196-9E0D-FAF8FBC0F536} 24 | EndGlobalSection 25 | EndGlobal 26 | -------------------------------------------------------------------------------- /twincat-hmi-project/demo-multi-screen/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json.schemastore.org/eslintrc", 3 | "env": { 4 | "browser": true, 5 | "es6": true, 6 | "jquery": true 7 | }, 8 | "parserOptions": { 9 | "ecmaVersion": 6, 10 | "sourceType": "script" 11 | }, 12 | "rules": { 13 | "no-dupe-args": "error", 14 | "no-dupe-else-if": "error", 15 | "no-duplicate-case": "warn", 16 | "no-redeclare": "error", 17 | "no-unexpected-multiline": "error", 18 | "use-isnan": "error" 19 | }, 20 | "overrides": [ 21 | { 22 | "files": [ "*.ts", "*.tsx" ], 23 | "rules": { 24 | 25 | } 26 | } 27 | ] 28 | } -------------------------------------------------------------------------------- /twincat-hmi-project/demo-multi-screen/.tfignore: -------------------------------------------------------------------------------- 1 | ## Ignore TwinCAT HMI temporary files, build results, and 2 | ## files generated by popular TwinCAT HMI add-ons. 3 | 4 | .engineering_servers/ 5 | liveview_* 6 | *.cache 7 | *.db-shm 8 | *.db-wal 9 | *.pid 10 | .hmiframework/ 11 | .hmipkgs/*-*-*-*/ 12 | tchmipublish.journal.json 13 | -------------------------------------------------------------------------------- /twincat-hmi-project/demo-multi-screen/CodeBehind/ViewSelector.js: -------------------------------------------------------------------------------- 1 | // Keep these lines for a best effort IntelliSense of Visual Studio 2017 and higher. 2 | /// 3 | 4 | (function (/** @type {globalThis.TcHmi} */ TcHmi) { 5 | let destroyOnInitialized = TcHmi.EventProvider.register('onInitialized', (e, data) => { 6 | 7 | e.destroy(); 8 | 9 | const urlParams = new URLSearchParams(window.location.search); 10 | const view = urlParams.get('view'); 11 | 12 | if (!view) return; 13 | TcHmi.View.load(view + '.view'); 14 | 15 | }); 16 | })(TcHmi); 17 | -------------------------------------------------------------------------------- /twincat-hmi-project/demo-multi-screen/Desktop.view: -------------------------------------------------------------------------------- 1 |
2 | 5 | 6 |
-------------------------------------------------------------------------------- /twincat-hmi-project/demo-multi-screen/ExtendedDesktop.view: -------------------------------------------------------------------------------- 1 |
10 | 11 |
12 | 13 |
14 | 15 |
-------------------------------------------------------------------------------- /twincat-hmi-project/demo-multi-screen/Fonts/Fonts.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: RobotoCondensed; 3 | src: url(Roboto-Condensed-webfont.woff); 4 | } 5 | 6 | /** 7 | Description about font inclusion in TcHmi 8 | 9 | As a default we include Roboto Condensed (in Fonts folder) as a webfont which will render latin, greek, vietnamese, cyrillic glyphs 10 | 11 | If Roboto does not render the glyphs we use some preinstalled fallback 12 | 'Microsoft YaHei' (Windows), 'Hiragino Sans GB' (Mac/iOS), 'Noto Sans CJK SC/TC' (Android), 'WenQuanYi Micro Hei' (Linux) renders chinese 13 | 'Meiryo' (Windows), 'Hiragino Kaku Gothic Pro' (Mac/iOS), 'Noto Sans CJK JP' (Android) renders japanese 14 | 15 | For other fonts you can add the woff files into the tchmi project and 16 | add a @font-face section yourself 17 | The noto family from google tries to cover all of the world, is free to use and fits nicely with roboto 18 | see https://www.google.com/get/noto/ and https://fonts.google.com/earlyaccess 19 | 20 | The font usage is defined in the main css file of the active theme (for example Themes/Base/Style.css). 21 | */ -------------------------------------------------------------------------------- /twincat-hmi-project/demo-multi-screen/Fonts/Roboto-Condensed-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benhar-dev/tchmi-multi-screen/5054cf38b4aab6fcd41bf9323c59f82dc5083872/twincat-hmi-project/demo-multi-screen/Fonts/Roboto-Condensed-webfont.woff -------------------------------------------------------------------------------- /twincat-hmi-project/demo-multi-screen/Images/Beckhoff_Logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /twincat-hmi-project/demo-multi-screen/Images/Favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benhar-dev/tchmi-multi-screen/5054cf38b4aab6fcd41bf9323c59f82dc5083872/twincat-hmi-project/demo-multi-screen/Images/Favicon.ico -------------------------------------------------------------------------------- /twincat-hmi-project/demo-multi-screen/Images/Manifest/launcher-icon-0-75x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benhar-dev/tchmi-multi-screen/5054cf38b4aab6fcd41bf9323c59f82dc5083872/twincat-hmi-project/demo-multi-screen/Images/Manifest/launcher-icon-0-75x.png -------------------------------------------------------------------------------- /twincat-hmi-project/demo-multi-screen/Images/Manifest/launcher-icon-1-5x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benhar-dev/tchmi-multi-screen/5054cf38b4aab6fcd41bf9323c59f82dc5083872/twincat-hmi-project/demo-multi-screen/Images/Manifest/launcher-icon-1-5x.png -------------------------------------------------------------------------------- /twincat-hmi-project/demo-multi-screen/Images/Manifest/launcher-icon-1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benhar-dev/tchmi-multi-screen/5054cf38b4aab6fcd41bf9323c59f82dc5083872/twincat-hmi-project/demo-multi-screen/Images/Manifest/launcher-icon-1x.png -------------------------------------------------------------------------------- /twincat-hmi-project/demo-multi-screen/Images/Manifest/launcher-icon-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benhar-dev/tchmi-multi-screen/5054cf38b4aab6fcd41bf9323c59f82dc5083872/twincat-hmi-project/demo-multi-screen/Images/Manifest/launcher-icon-2x.png -------------------------------------------------------------------------------- /twincat-hmi-project/demo-multi-screen/Images/Manifest/launcher-icon-3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benhar-dev/tchmi-multi-screen/5054cf38b4aab6fcd41bf9323c59f82dc5083872/twincat-hmi-project/demo-multi-screen/Images/Manifest/launcher-icon-3x.png -------------------------------------------------------------------------------- /twincat-hmi-project/demo-multi-screen/Images/Manifest/launcher-icon-4x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benhar-dev/tchmi-multi-screen/5054cf38b4aab6fcd41bf9323c59f82dc5083872/twincat-hmi-project/demo-multi-screen/Images/Manifest/launcher-icon-4x.png -------------------------------------------------------------------------------- /twincat-hmi-project/demo-multi-screen/Localization/de-DE.localization: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../Packages/Beckhoff.TwinCAT.HMI.Framework.12.744.3/runtimes/native1.12-tchmi/Schema/LocalizationDescription.Schema.json", 3 | "locale": "de-DE", 4 | "localizedText": { 5 | "Text1": "Hallo Welt!", 6 | "Text2": "Ich bin ein lokalisierter Text." 7 | } 8 | } -------------------------------------------------------------------------------- /twincat-hmi-project/demo-multi-screen/Localization/de-DE.tpl.localization: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../Packages/Beckhoff.TwinCAT.HMI.Framework.12.744.3/runtimes/native1.12-tchmi/Schema/LocalizationDescription.Schema.json", 3 | "locale": "de-DE", 4 | "localizedText": { 5 | "Text1": "Hallo Welt!", 6 | "Text2": "Ich bin ein lokalisierter Text." 7 | } 8 | } -------------------------------------------------------------------------------- /twincat-hmi-project/demo-multi-screen/Localization/en-US.localization: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../Packages/Beckhoff.TwinCAT.HMI.Framework.12.744.3/runtimes/native1.12-tchmi/Schema/LocalizationDescription.Schema.json", 3 | "locale": "en-US", 4 | "localizedText": { 5 | "Text1": "Hello World!", 6 | "Text2": "I'm a localized text." 7 | } 8 | } -------------------------------------------------------------------------------- /twincat-hmi-project/demo-multi-screen/Localization/en-US.tpl.localization: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../Packages/Beckhoff.TwinCAT.HMI.Framework.12.744.3/runtimes/native1.12-tchmi/Schema/LocalizationDescription.Schema.json", 3 | "locale": "en-US", 4 | "localizedText": { 5 | "Text1": "Hello World!", 6 | "Text2": "I'm a localized text." 7 | } 8 | } -------------------------------------------------------------------------------- /twincat-hmi-project/demo-multi-screen/Properties/Default.tpl: -------------------------------------------------------------------------------- 1 | -- Designer -- 2 | 3 | 4 | 5 | {{TITLE}} 6 | 7 | 8 | 9 | 29 | {{GLOBAL_JS_INCLUDES}} 30 | 31 | 32 | {{VIEWLEVEL}} 33 | 34 | 35 | -- /Designer -- 36 | 37 | -- LiveView_and_Build -- 38 | 39 | 48 | 49 | 50 | {{TITLE}} 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | {{GLOBAL_JS_INCLUDES}} 60 | 67 | 68 | 69 | 73 | {{VIEWLEVEL}} 74 | 75 | 76 | -- /LiveView_and_Build -- -------------------------------------------------------------------------------- /twincat-hmi-project/demo-multi-screen/Properties/tchmi.project.Schema.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema#", 3 | "definitions": {} 4 | } -------------------------------------------------------------------------------- /twincat-hmi-project/demo-multi-screen/Properties/tchmi.project.Schema.tpl.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema#", 3 | "definitions": {} 4 | } -------------------------------------------------------------------------------- /twincat-hmi-project/demo-multi-screen/Properties/tchmiconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "./../../Packages/Beckhoff.TwinCAT.HMI.Framework.12.762.42/runtimes/native1.12-tchmi/Schema/TchmiConfig.Schema.json", 3 | "basePath": "./framework", 4 | "scaleMode": "None", 5 | "startupView": "Desktop.view", 6 | "loginPage": "", 7 | "tcHmiServer": { 8 | "websocketIntervalTime": 500, 9 | "websocketTimeout": 20000, 10 | "websocketSystemTimeout": 60000, 11 | "websocketSubscriptionMode": "Change" 12 | }, 13 | "activeTheme": "Base", 14 | "themes": { 15 | "Base": { 16 | "resources": [ 17 | { 18 | "name": "Themes/Base/Base.theme", 19 | "description": "", 20 | "type": "ThemedValues" 21 | }, 22 | { 23 | "name": "Themes/Base/BaseStyle.css", 24 | "description": "", 25 | "type": "Stylesheet" 26 | } 27 | ], 28 | "replacesThemeForControls": [], 29 | "replacesThemeForPackageComponents": [] 30 | } 31 | }, 32 | "dependencyFiles": [ 33 | { 34 | "name": "Fonts/Fonts.css", 35 | "description": "", 36 | "type": "Stylesheet" 37 | }, 38 | { 39 | "name": "CodeBehind/ViewSelector.js", 40 | "description": "", 41 | "type": "JavaScript" 42 | } 43 | ], 44 | "userControls": [], 45 | "content": [], 46 | "views": [ 47 | { 48 | "url": "ExtendedDesktop.view", 49 | "preload": false, 50 | "keepAlive": false, 51 | "preloadBindings": false 52 | }, 53 | { 54 | "url": "Desktop.view", 55 | "preload": false, 56 | "keepAlive": false, 57 | "preloadBindings": false 58 | } 59 | ], 60 | "userFunctions": [], 61 | "symbols": { 62 | "internal": {}, 63 | "themedResources": {} 64 | }, 65 | "trigger": [], 66 | "actionTemplates": [], 67 | "languages": { 68 | "de-DE": "Localization/de-DE.localization", 69 | "en-US": "Localization/en-US.localization" 70 | }, 71 | "languageFallback": "", 72 | "disableLoadingOptimization": false, 73 | "creatorSettings": { 74 | "viewport": { 75 | "defaultWidth": 800, 76 | "defaultHeight": 600 77 | } 78 | }, 79 | "binding": { 80 | "symbolError": "Ignore" 81 | }, 82 | "packages": [ 83 | { 84 | "name": "Beckhoff.TwinCAT.HMI.Controls", 85 | "basePath": "/Beckhoff.TwinCAT.HMI.Controls" 86 | }, 87 | { 88 | "name": "Beckhoff.TwinCAT.HMI.Framework", 89 | "basePath": "/framework" 90 | }, 91 | { 92 | "name": "Beckhoff.TwinCAT.HMI.Functions", 93 | "basePath": "/Beckhoff.TwinCAT.HMI.Functions" 94 | } 95 | ], 96 | "keyboardLayouts": [ 97 | { 98 | "url": "KeyboardLayouts/German - compact.keyboard.json" 99 | }, 100 | { 101 | "url": "KeyboardLayouts/US - compact.keyboard.json" 102 | } 103 | ], 104 | "systemKeyboard": { 105 | "providerName": "", 106 | "projectKeyboardMapping": { 107 | "de-DE": { 108 | "text": "", 109 | "decimal": "", 110 | "numeric": "" 111 | }, 112 | "en-US": { 113 | "text": "", 114 | "decimal": "", 115 | "numeric": "" 116 | } 117 | } 118 | }, 119 | "systemPopups": { 120 | "providerName": "Beckhoff.TcHmiPopups" 121 | } 122 | } -------------------------------------------------------------------------------- /twincat-hmi-project/demo-multi-screen/Properties/tchmimanifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json.schemastore.org/web-manifest", 3 | "name": "demo_multi_screen", 4 | "short_name": "demo_multi_screen", 5 | "icons": [ 6 | { 7 | "src": "../Images/Manifest/launcher-icon-0-75x.png", 8 | "sizes": "36x36", 9 | "type": "image/png", 10 | "density": 0.75 11 | }, 12 | { 13 | "src": "../Images/Manifest/launcher-icon-1x.png", 14 | "sizes": "48x48", 15 | "type": "image/png", 16 | "density": 1.0 17 | }, 18 | { 19 | "src": "../Images/Manifest/launcher-icon-1-5x.png", 20 | "sizes": "72x72", 21 | "type": "image/png", 22 | "density": 1.5 23 | }, 24 | { 25 | "src": "../Images/Manifest/launcher-icon-2x.png", 26 | "sizes": "96x96", 27 | "type": "image/png", 28 | "density": 2.0 29 | }, 30 | { 31 | "src": "../Images/Manifest/launcher-icon-3x.png", 32 | "sizes": "144x144", 33 | "type": "image/png", 34 | "density": 3.0 35 | }, 36 | { 37 | "src": "../Images/Manifest/launcher-icon-4x.png", 38 | "sizes": "192x192", 39 | "type": "image/png", 40 | "density": 4.0 41 | } 42 | ], 43 | "theme_color": "#9E9E9E", 44 | "background_color": "#9E9E9E", 45 | "start_url": "../Default.html", 46 | "display": "standalone", 47 | "orientation": "portrait" 48 | } 49 | -------------------------------------------------------------------------------- /twincat-hmi-project/demo-multi-screen/Properties/tchmipublish.config.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "isNew": false, 4 | "profileName": "local", 5 | "publishMode": "TcHmi", 6 | "targetDirectory": "", 7 | "server": "", 8 | "sitePath": "", 9 | "destinationUrl": "", 10 | "passiveMode": true, 11 | "savePassword": true, 12 | "deleteAllFilesBeforePublish": false, 13 | "deleteExtensionDataBeforePublish": false, 14 | "alwaysPublishLocalServerConfiguration": true, 15 | "temporaryPublishWithoutServerConfiguration": false, 16 | "abortOnErrors": true, 17 | "userName": "", 18 | "encryptedPassword": "", 19 | "encryptedTcHmiServerPassword": "vWUeHvsr/mfWS2B8XuVlKg==", 20 | "tcHmiServerHost": "localhost", 21 | "tcHmiServerPort": "1010", 22 | "socketTimeout": "60", 23 | "clientCertificateCN": "", 24 | "tcHmiUseTLS": false, 25 | "useClientCertificate": false, 26 | "launchBrowserAfterPublish": true, 27 | "tcHmiServerUserName": "__SystemAdministrator", 28 | "tcHmiDestinationUrl": "http://localhost:1010", 29 | "publishConfiguration": "remote", 30 | "tcHmiSavePassword": true, 31 | "tcHmiIgnoreCertificateErrors": true 32 | } 33 | ] -------------------------------------------------------------------------------- /twincat-hmi-project/demo-multi-screen/Server/ADS/ADS.Config.default.json: -------------------------------------------------------------------------------- 1 | { 2 | "ENABLE_READ_BEFORE_WRITE": true, 3 | "IGNORED_PLC_ATTRIBUTES": [ 4 | "DisplayMinValue", 5 | "DisplayMaxValue", 6 | "LowerBorder", 7 | "UpperBorder" 8 | ], 9 | "NEW_HANDLES_PER_SUM_REQUEST_LIMIT": 100, 10 | "RESPONSE_SIZE_LIMIT": 2097152, 11 | "RUNTIMES": { 12 | "PLC1": { 13 | "ENABLED": true, 14 | "NETID": "127.0.0.1.1.1", 15 | "PORT": 851, 16 | "READ_ONLY": false, 17 | "SYMBOLS": {}, 18 | "USE_WHITELISTING": false 19 | } 20 | }, 21 | "RUNTIME_STATE_CHECK_INTERVAL": "PT2S", 22 | "RUNTIME_STATE_CHECK_TIMEOUT": "PT5S", 23 | "SUM_REQUEST_LIMIT": 500, 24 | "TIMEOUT": "PT1S", 25 | "VISIBLE_RUNTIME_PORTS": [ 26 | 301, 27 | 302, 28 | 303, 29 | 304, 30 | 350, 31 | 351, 32 | 352, 33 | 353, 34 | 354, 35 | 355, 36 | 501, 37 | 801, 38 | 811, 39 | 821, 40 | 831, 41 | 851, 42 | 852, 43 | 853, 44 | 854 45 | ] 46 | } -------------------------------------------------------------------------------- /twincat-hmi-project/demo-multi-screen/Server/ADS/ADS.Config.remote.json: -------------------------------------------------------------------------------- 1 | { 2 | "RUNTIMES": { 3 | "PLC1": { 4 | "ENABLED": true, 5 | "NETID": "127.0.0.1.1.1", 6 | "PORT": 851, 7 | "READ_ONLY": false, 8 | "SYMBOLS": {}, 9 | "USE_WHITELISTING": false 10 | } 11 | } 12 | } -------------------------------------------------------------------------------- /twincat-hmi-project/demo-multi-screen/Server/ADS/ADS.Storage.json: -------------------------------------------------------------------------------- 1 | { 2 | "configVersion": "1.0.0.47", 3 | "guid": "5AE90DB9-B895-45AD-9B79-27A19FADCD86" 4 | } -------------------------------------------------------------------------------- /twincat-hmi-project/demo-multi-screen/Server/TcHmiLua/TcHmiLua.Config.default.json: -------------------------------------------------------------------------------- 1 | { 2 | "HTML_ERRORS": false, 3 | "SCRIPT_TIMEOUT": "PT10S" 4 | } -------------------------------------------------------------------------------- /twincat-hmi-project/demo-multi-screen/Server/TcHmiLua/TcHmiLua.Config.remote.json: -------------------------------------------------------------------------------- 1 | {} -------------------------------------------------------------------------------- /twincat-hmi-project/demo-multi-screen/Server/TcHmiLua/TcHmiLua.Storage.json: -------------------------------------------------------------------------------- 1 | {"configVersion":"1.0.0.1"} -------------------------------------------------------------------------------- /twincat-hmi-project/demo-multi-screen/Server/TcHmiSqliteLogger/TcHmiSqliteLogger.Config.default.json: -------------------------------------------------------------------------------- 1 | { 2 | "DEFAULT_LIST_LIMIT": 1000, 3 | "MAXENTRIES": 15000, 4 | "MAXENTRYLENGTH": 1024, 5 | "MAX_DIAGNOSTICS_ARCHIVE_FILE_COUNT": 2, 6 | "MAX_DIAGNOSTICS_MESSAGES_FILE_SIZE": 52428800, 7 | "MODE": 3, 8 | "REDIRECT_DIAGNOSTICS_MESSAGES_TO_FILE": true, 9 | "VACUUM_ON_STARTUP": false 10 | } -------------------------------------------------------------------------------- /twincat-hmi-project/demo-multi-screen/Server/TcHmiSqliteLogger/TcHmiSqliteLogger.Config.remote.json: -------------------------------------------------------------------------------- 1 | {} -------------------------------------------------------------------------------- /twincat-hmi-project/demo-multi-screen/Server/TcHmiSqliteLogger/TcHmiSqliteLogger.Storage.json: -------------------------------------------------------------------------------- 1 | { 2 | "configVersion": "1.0.0.15", 3 | "guid": "CD0B1D03-27D7-4904-BEFF-3882D751757A" 4 | } -------------------------------------------------------------------------------- /twincat-hmi-project/demo-multi-screen/Server/TcHmiSrv/TcHmiSrv.Config.remote.json: -------------------------------------------------------------------------------- 1 | { 2 | "CERTIFICATEEXPIRATION": "P14000D", 3 | "REQUIREAUTH": 2, 4 | "VIRTUALDIRECTORIES": { 5 | "/": "www" 6 | } 7 | } -------------------------------------------------------------------------------- /twincat-hmi-project/demo-multi-screen/Server/TcHmiSrv/TcHmiSrv.Storage.json: -------------------------------------------------------------------------------- 1 | { 2 | "configVersion": "1.0.0.131", 3 | "guid": "1EE8B733-8328-488E-A4BA-C287BF8302E7" 4 | } -------------------------------------------------------------------------------- /twincat-hmi-project/demo-multi-screen/Server/TcHmiUserManagement/TcHmiUserManagement.Config.default.json: -------------------------------------------------------------------------------- 1 | { 2 | "USERS": { 3 | "__SystemAdministrator": { 4 | "ALGORITHM": 0, 5 | "ENABLED": false, 6 | "PASSWORD": "", 7 | "SALT": "" 8 | }, 9 | "__SystemGuest": { 10 | "ALGORITHM": 0, 11 | "ENABLED": true, 12 | "PASSWORD": "", 13 | "SALT": "" 14 | }, 15 | "__SystemUser": { 16 | "ALGORITHM": 0, 17 | "ENABLED": true, 18 | "PASSWORD": "", 19 | "SALT": "" 20 | } 21 | } 22 | } -------------------------------------------------------------------------------- /twincat-hmi-project/demo-multi-screen/Server/TcHmiUserManagement/TcHmiUserManagement.Config.remote.json: -------------------------------------------------------------------------------- 1 | {} -------------------------------------------------------------------------------- /twincat-hmi-project/demo-multi-screen/Server/TcHmiUserManagement/TcHmiUserManagement.Storage.json: -------------------------------------------------------------------------------- 1 | { 2 | "configVersion": "1.0.0.9", 3 | "guid": "2E0817F0-DE05-42ED-BAFA-552D96B07127" 4 | } -------------------------------------------------------------------------------- /twincat-hmi-project/demo-multi-screen/Themes/Base/Base.theme: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../../Packages/Beckhoff.TwinCAT.HMI.Framework.12.744.3/runtimes/native1.12-tchmi/Schema/ThemeDescription.Schema.json" 3 | } -------------------------------------------------------------------------------- /twincat-hmi-project/demo-multi-screen/Themes/Base/BaseStyle.css: -------------------------------------------------------------------------------- 1 | /** 2 | * About font inclusion in TcHmi 3 | * 4 | * As a default we include Roboto Condensed (in Fonts folder) as a webfont which will render latin, greek, vietnamese, cyrillic glyphs. 5 | * 6 | * If Roboto does not render the glyphs we use some preinstalled fallback 7 | * 'Microsoft YaHei' (Windows), 'Hiragino Sans GB' (macOS/iOS), 'Noto Sans CJK SC/TC' (Android), 'WenQuanYi Micro Hei' (Linux) renders chinese 8 | * 'Meiryo' (Windows), 'Hiragino Kaku Gothic Pro' (macOS/iOS), 'Noto Sans CJK JP' (Android) renders japanese 9 | * 10 | * For other fonts you can add the woff files into the TcHmi project and 11 | * add a @font-face section yourself. 12 | * The noto family from Google tries to cover all of the world, is free to use and fits nicely with Roboto 13 | * see https://www.google.com/get/noto/ and https://fonts.google.com/earlyaccess 14 | * 15 | * The font usage is defined in the main CSS file of the active theme (for example Themes/Base/Style.css). 16 | */ 17 | html { 18 | font-family: RobotoCondensed, 'Microsoft YaHei', '微软雅黑', 'Hiragino Sans GB', '冬青黑体', 'STXihei', '华文细黑', 'WenQuanYi Micro Hei', 'Meiryo', 'メイリオ', 'Hiragino Kaku Gothic Pro', 'ヒラギノ角ゴ ProN', 'Noto Sans CJK SC', 'Noto Sans CJK TC', 'Noto Sans CJK JP', 'Noto Sans CJK KR', sans-serif; 19 | font-size: 12px; 20 | font-style: normal; 21 | font-weight: normal; 22 | width: 100%; 23 | height: 100%; 24 | } 25 | 26 | /* Is defined in html tag of runtime html only. */ 27 | .tchmi-html-runtime { 28 | } 29 | 30 | /* Is defined in body tag of runtime html only. */ 31 | .tchmi-body-runtime { 32 | } 33 | 34 | /* Views */ 35 | div[data-tchmi-type="TcHmi.Controls.System.TcHmiView"] { 36 | background-image: url(Images/Background.png); 37 | background-size: 100% 100%; 38 | background-repeat: no-repeat; 39 | } 40 | 41 | /** 42 | * Splash Screen Dialog 43 | */ 44 | #tchmi-splash-container { 45 | position: relative; 46 | width: 100%; 47 | height: 100%; 48 | background-image: url(Images/Background.png); 49 | background-size: 100% 100%; 50 | background-repeat: no-repeat; 51 | overflow: auto; 52 | display: flex; 53 | } 54 | 55 | 56 | @media screen and (min-width: 800px) { 57 | 58 | @media screen and (min-height: 600px) { 59 | 60 | #tchmi-splash-container .tchmi-splash-content-container { 61 | font-size: x-large; 62 | width: 800px; 63 | height: 600px; 64 | position: relative; 65 | left: 0px; 66 | top: 0px; 67 | right: 0px; 68 | bottom: 0px; 69 | margin: auto; 70 | overflow: hidden; 71 | background: url("Images/Splash-800x600.png"); 72 | box-shadow: 0 0 12px 12px rgba(0, 0, 0, 0.12); 73 | } 74 | 75 | #tchmi-splash-container .tchmi-splash-stage-progress-container { 76 | position: absolute; 77 | left: 362px; 78 | top: 395px; 79 | right: 0px; 80 | bottom: 0px; 81 | width: 412px; 82 | background: #ccc; 83 | height: 23px; 84 | } 85 | 86 | #tchmi-splash-container .tchmi-splash-stage-progress { 87 | width: 0%; 88 | height: 100%; 89 | background: #7493CC; 90 | } 91 | 92 | #tchmi-splash-container .tchmi-splash-stage-info { 93 | position: absolute; 94 | left: 362px; 95 | top: 418px; 96 | right: 0px; 97 | bottom: 0px; 98 | width: 412px; 99 | height: 23px; 100 | font-size: 14px; 101 | } 102 | 103 | #tchmi-splash-container .tchmi-splash-version-info { 104 | position: absolute; 105 | left: 5px; 106 | top: 580px; 107 | right: 0px; 108 | bottom: 0px; 109 | width: 412px; 110 | height: 20px; 111 | font-size: 12px; 112 | } 113 | } 114 | 115 | @media not screen and (min-height: 600px) { 116 | 117 | #tchmi-splash-container .tchmi-splash-content-container { 118 | font-size: x-large; 119 | width: 420px; 120 | height: 200px; 121 | position: relative; 122 | left: 0px; 123 | top: 0px; 124 | right: 0px; 125 | bottom: 0px; 126 | margin: auto; 127 | overflow: hidden; 128 | background: url("Images/Splash-420x200.png"); 129 | box-shadow: 0 0 12px 12px rgba(0, 0, 0, 0.12); 130 | } 131 | 132 | #tchmi-splash-container .tchmi-splash-stage-progress-container { 133 | position: absolute; 134 | left: 160px; 135 | top: 105px; 136 | right: 0px; 137 | bottom: 0px; 138 | width: 240px; 139 | background: #ccc; 140 | height: 10px; 141 | } 142 | 143 | #tchmi-splash-container .tchmi-splash-stage-progress { 144 | width: 0%; 145 | height: 100%; 146 | background: #7493CC; 147 | } 148 | 149 | #tchmi-splash-container .tchmi-splash-stage-info { 150 | position: absolute; 151 | left: 160px; 152 | top: 115px; 153 | right: 0px; 154 | bottom: 0px; 155 | width: 412px; 156 | height: 23px; 157 | font-size: 12px; 158 | } 159 | 160 | #tchmi-splash-container .tchmi-splash-version-info { 161 | position: absolute; 162 | left: 5px; 163 | top: 183px; 164 | right: 0px; 165 | bottom: 0px; 166 | width: 412px; 167 | height: 20px; 168 | font-size: 10px; 169 | } 170 | } 171 | } 172 | 173 | @media not screen and (min-width: 800px) { 174 | 175 | @media screen and (min-height: 534px) { 176 | 177 | #tchmi-splash-container .tchmi-splash-content-container { 178 | font-size: x-large; 179 | width: 320px; 180 | height: 534px; 181 | position: relative; 182 | left: 0px; 183 | top: 0px; 184 | right: 0px; 185 | bottom: 0px; 186 | margin: auto; 187 | overflow: hidden; 188 | background: url("Images/Splash-320x534.png"); 189 | box-shadow: 0 0 12px 12px rgba(0, 0, 0, 0.12); 190 | } 191 | 192 | #tchmi-splash-container .tchmi-splash-stage-progress-container { 193 | position: absolute; 194 | left: 17px; 195 | top: 455px; 196 | right: 0px; 197 | bottom: 0px; 198 | width: 283px; 199 | background: #ccc; 200 | height: 20px; 201 | } 202 | 203 | #tchmi-splash-container .tchmi-splash-stage-progress { 204 | width: 0%; 205 | height: 100%; 206 | background: #7493CC; 207 | } 208 | 209 | #tchmi-splash-container .tchmi-splash-stage-info { 210 | position: absolute; 211 | left: 17px; 212 | top: 476px; 213 | right: 0px; 214 | bottom: 0px; 215 | width: 283px; 216 | height: 14px; 217 | font-size: 12px; 218 | } 219 | 220 | #tchmi-splash-container .tchmi-splash-version-info { 221 | position: absolute; 222 | left: 5px; 223 | top: 518px; 224 | right: 0px; 225 | bottom: 0px; 226 | width: 283px; 227 | height: 20px; 228 | font-size: 10px; 229 | } 230 | } 231 | 232 | @media not screen and (min-height: 534px) { 233 | 234 | #tchmi-splash-container .tchmi-splash-content-container { 235 | font-size: x-large; 236 | width: 420px; 237 | height: 200px; 238 | position: relative; 239 | left: 0px; 240 | top: 0px; 241 | right: 0px; 242 | bottom: 0px; 243 | margin: auto; 244 | overflow: hidden; 245 | background: url("Images/Splash-420x200.png"); 246 | box-shadow: 0 0 12px 12px rgba(0, 0, 0, 0.12); 247 | } 248 | 249 | #tchmi-splash-container .tchmi-splash-stage-progress-container { 250 | position: absolute; 251 | left: 160px; 252 | top: 105px; 253 | right: 0px; 254 | bottom: 0px; 255 | width: 240px; 256 | background: #ccc; 257 | height: 10px; 258 | } 259 | 260 | #tchmi-splash-container .tchmi-splash-stage-progress { 261 | width: 0%; 262 | height: 100%; 263 | background: #7493CC; 264 | } 265 | 266 | #tchmi-splash-container .tchmi-splash-stage-info { 267 | position: absolute; 268 | left: 160px; 269 | top: 115px; 270 | right: 0px; 271 | bottom: 0px; 272 | width: 412px; 273 | height: 23px; 274 | font-size: 12px; 275 | } 276 | 277 | #tchmi-splash-container .tchmi-splash-version-info { 278 | position: absolute; 279 | left: 5px; 280 | top: 183px; 281 | right: 0px; 282 | bottom: 0px; 283 | width: 412px; 284 | height: 20px; 285 | font-size: 10px; 286 | } 287 | } 288 | } 289 | 290 | /** 291 | * View Loading Spinner 292 | * Usage:
293 | */ 294 | :root { 295 | --tchmi-view-loading-spinner-color: #4c6374; 296 | } 297 | 298 | @keyframes tchmi-view-loading-spinner { 299 | 0% { 300 | transform: rotate(0deg); 301 | } 302 | 303 | 100% { 304 | transform: rotate(360deg); 305 | } 306 | } 307 | 308 | .tchmi-view-loading-spinner-container { 309 | display: none; /** DEBUG ONLY */ 310 | position: relative; 311 | width: 100%; 312 | height: 100%; 313 | } 314 | 315 | .tchmi-view-loading-spinner { 316 | display: inline-block; 317 | width: 64px; 318 | height: 64px; 319 | position: absolute; 320 | left: 0px; 321 | right: 0px; 322 | top: 0px; 323 | bottom: 0px; 324 | margin: auto; 325 | max-width: 100%; 326 | max-height: 100%; 327 | overflow: hidden; 328 | } 329 | 330 | .tchmi-view-loading-spinner div { 331 | box-sizing: border-box; 332 | display: block; 333 | position: absolute; 334 | width: 51px; 335 | height: 51px; 336 | margin: 6px; 337 | border: 6px solid var(--tchmi-view-loading-spinner-color); 338 | border-radius: 50%; 339 | animation: tchmi-view-loading-spinner 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite; 340 | border-color: var(--tchmi-view-loading-spinner-color) transparent transparent transparent; 341 | } 342 | 343 | .tchmi-view-loading-spinner div:nth-child(1) { 344 | animation-delay: -0.45s; 345 | } 346 | 347 | .tchmi-view-loading-spinner div:nth-child(2) { 348 | animation-delay: -0.3s; 349 | } 350 | 351 | .tchmi-view-loading-spinner div:nth-child(3) { 352 | animation-delay: -0.15s; 353 | } 354 | -------------------------------------------------------------------------------- /twincat-hmi-project/demo-multi-screen/Themes/Base/Images/Background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benhar-dev/tchmi-multi-screen/5054cf38b4aab6fcd41bf9323c59f82dc5083872/twincat-hmi-project/demo-multi-screen/Themes/Base/Images/Background.png -------------------------------------------------------------------------------- /twincat-hmi-project/demo-multi-screen/Themes/Base/Images/Splash-320x534.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benhar-dev/tchmi-multi-screen/5054cf38b4aab6fcd41bf9323c59f82dc5083872/twincat-hmi-project/demo-multi-screen/Themes/Base/Images/Splash-320x534.png -------------------------------------------------------------------------------- /twincat-hmi-project/demo-multi-screen/Themes/Base/Images/Splash-420x200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benhar-dev/tchmi-multi-screen/5054cf38b4aab6fcd41bf9323c59f82dc5083872/twincat-hmi-project/demo-multi-screen/Themes/Base/Images/Splash-420x200.png -------------------------------------------------------------------------------- /twincat-hmi-project/demo-multi-screen/Themes/Base/Images/Splash-800x600.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benhar-dev/tchmi-multi-screen/5054cf38b4aab6fcd41bf9323c59f82dc5083872/twincat-hmi-project/demo-multi-screen/Themes/Base/Images/Splash-800x600.png -------------------------------------------------------------------------------- /twincat-hmi-project/demo-multi-screen/demo-multi-screen.hmiproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 15.0 7 | TwinCAT HMI 8 | $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) 9 | Please enter your Title... 10 | 2 11 | 1.0.0.0 12 | 3001 13 | false 14 | false 15 | Latest 16 | True 17 | client 18 | native,Version=v1.12.0,Profile=tchmi 19 | native1.12-tchmi 20 | v2 21 | demo-multi-screen 22 | 10103 23 | 13000 24 | 1.12.744.3 25 | 1.12.762.42 26 | False 27 | $(registry:HKEY_CURRENT_USER\Software\Beckhoff\TwinCAT3\3.1@InstallDir)\..\Functions\TE2000-HMI-Engineering 28 | $(registry:HKEY_LOCAL_MACHINE\Software\Beckhoff\TwinCAT3\3.1@InstallDir)\..\Functions\TE2000-HMI-Engineering 29 | $(registry:HKEY_LOCAL_MACHINE\Software\Wow6432Node\Beckhoff\TwinCAT3\3.1@InstallDir)\..\Functions\TE2000-HMI-Engineering 30 | 31 | 32 | 33 | 34 | $(TcHmiDirectory)\MSBuild\Beckhoff.TwinCAT.HMI.tasks 35 | $(TcHmiDirectory)\MSBuild\Beckhoff.TwinCAT.HMI.targets 36 | 37 | 38 | 39 | 40 | 2.0 41 | a3f16fc8-dfb6-4ffb-8d05-4593472a6f63 42 | TwinCAT3HmiProject 43 | TwinCAT3HmiProject 44 | Release 45 | TwinCAT HMI 46 | 47 | 48 | 49 | true 50 | full 51 | false 52 | bin\ 53 | DEBUG;TRACE 54 | prompt 55 | 4 56 | TwinCAT HMI 57 | demo_multi_screen 58 | 59 | 60 | pdbonly 61 | true 62 | bin\ 63 | TRACE 64 | prompt 65 | 4 66 | TwinCAT HMI 67 | demo_multi_screen 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | PreBuildEvent; 86 | CoreBuild; 87 | PostBuildEvent 88 | 89 | 90 | BaseClean 91 | 92 | 93 | 94 | 95 | $(MSBuildProjectDirectory) 96 | 127.0.0.1 97 | 1010 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | Content 112 | 113 | 114 | Content 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | demo-multi-screen 129 | 130 | 131 | 132 | false 133 | 134 | 135 | Content 136 | 137 | 138 | Content 139 | 140 | 141 | Content 142 | 143 | 144 | Content 145 | 146 | 147 | Content 148 | 149 | 150 | Content 151 | 152 | 153 | Content 154 | 155 | 156 | Content 157 | 158 | 159 | Content 160 | 161 | 162 | Content 163 | true 164 | 165 | 166 | Content 167 | true 168 | tsconfig.tpl.json 169 | 170 | 171 | Content 172 | true 173 | 174 | 175 | Content 176 | false 177 | 178 | 179 | Content 180 | true 181 | 182 | 183 | Content 184 | true 185 | 186 | 187 | Content 188 | true 189 | Properties\tchmi.framework.Schema.tpl.json 190 | 191 | 192 | Content 193 | true 194 | 195 | 196 | Content 197 | true 198 | Properties\tchmi.project.Schema.tpl.json 199 | 200 | 201 | Content 202 | true 203 | 204 | 205 | Content 206 | true 207 | 208 | 209 | Content 210 | true 211 | 212 | 213 | Content 214 | false 215 | 216 | 217 | Content 218 | false 219 | 220 | 221 | Content 222 | true 223 | 224 | 225 | Content 226 | true 227 | 228 | 229 | Content 230 | true 231 | 232 | 233 | Content 234 | true 235 | 236 | 237 | Content 238 | true 239 | 240 | 241 | Content 242 | true 243 | 244 | 245 | Content 246 | true 247 | 248 | 249 | Content 250 | true 251 | 252 | 253 | Content 254 | true 255 | 256 | 257 | Content 258 | true 259 | 260 | 261 | Content 262 | true 263 | Localization\de-DE.tpl.localization 264 | 265 | 266 | Content 267 | true 268 | Localization\en-US.tpl.localization 269 | 270 | 271 | Content 272 | true 273 | 274 | 275 | Content 276 | true 277 | 278 | 279 | Content 280 | true 281 | 282 | 283 | Content 284 | true 285 | 286 | 287 | Content 288 | true 289 | 290 | 291 | Content 292 | true 293 | 294 | 295 | Content 296 | true 297 | 298 | 299 | Content 300 | true 301 | 302 | 303 | Content 304 | true 305 | 306 | 307 | Content 308 | true 309 | 310 | 311 | Content 312 | true 313 | 314 | 315 | 316 | 317 | 318 | 319 | 320 | Content 321 | 322 | 323 | Content 324 | 325 | 326 | Content 327 | 328 | 329 | Content 330 | false 331 | 332 | 333 | Content 334 | false 335 | 336 | 337 | Content 338 | false 339 | 340 | 341 | Content 342 | false 343 | 344 | 345 | Content 346 | false 347 | 348 | 349 | Content 350 | false 351 | 352 | 353 | Content 354 | 355 | 356 | Content 357 | 358 | 359 | Content 360 | 361 | 362 | Content 363 | false 364 | 365 | 366 | Content 367 | false 368 | 369 | 370 | Content 371 | false 372 | 373 | 374 | 375 | 376 | 377 | This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. 378 | 379 | 380 | 381 | 382 | 383 | -------------------------------------------------------------------------------- /twincat-hmi-project/demo-multi-screen/packages.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /twincat-hmi-project/demo-multi-screen/packages.xsd: -------------------------------------------------------------------------------- 1 |  2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /twincat-hmi-project/demo-multi-screen/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json.schemastore.org/tsconfig", 3 | "compileOnSave": true, 4 | "compilerOptions": { 5 | "module": "none", 6 | "target": "es6", 7 | "skipLibCheck": true, 8 | "lib": [ 9 | "dom", 10 | "scripthost", 11 | "es6", 12 | "es2017.intl" 13 | ], 14 | "types": [], 15 | "declaration": true, 16 | "sourceMap": true, 17 | "noEmitOnError": true, 18 | "suppressImplicitAnyIndexErrors": true, 19 | "noImplicitAny": true, 20 | "noImplicitThis": true, 21 | "strictNullChecks": true, 22 | "noImplicitReturns": true, 23 | "strictFunctionTypes": false, 24 | "strictPropertyInitialization": false, 25 | "alwaysStrict": false 26 | }, 27 | "exclude": [ 28 | "bin/" 29 | ], 30 | "include": [ 31 | "../Packages/Beckhoff.TwinCAT.HMI.Framework.12.762.42/runtimes/native1.12-tchmi/TcHmi.d.ts" 32 | ] 33 | } 34 | -------------------------------------------------------------------------------- /twincat-hmi-project/demo-multi-screen/tsconfig.tpl.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json.schemastore.org/tsconfig", 3 | "compileOnSave": true, 4 | "compilerOptions": { 5 | "module": "none", 6 | "target": "es6", 7 | "skipLibCheck": true, 8 | "lib": [ 9 | "dom", 10 | "scripthost", 11 | "es6", 12 | "es2017.intl" 13 | ], 14 | "types": [], 15 | "declaration": true, 16 | "sourceMap": true, 17 | "noEmitOnError": true, 18 | "suppressImplicitAnyIndexErrors": true, 19 | "noImplicitAny": true, 20 | "noImplicitThis": true, 21 | "strictNullChecks": true, 22 | "noImplicitReturns": true, 23 | "strictFunctionTypes": false, 24 | "strictPropertyInitialization": false, 25 | "alwaysStrict": false 26 | }, 27 | "exclude": [ 28 | "$(Output).Path/" 29 | ], 30 | "include": [ 31 | "$(Beckhoff.TwinCAT.HMI.Framework).InstallPath/TcHmi.d.ts" 32 | ] 33 | } 34 | -------------------------------------------------------------------------------- /twincat-hmi-project/demo-plc/demo-plc.tsproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | --------------------------------------------------------------------------------