├── .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 | 
59 |
60 | #### c. The complete code once added to the code behind file.
61 |
62 | 
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 | 
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 |
--------------------------------------------------------------------------------
/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 |
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 |
--------------------------------------------------------------------------------