├── VFFSDemo_HMI ├── Server │ ├── TcHmiLua │ │ ├── TcHmiLua.Config.remote.json │ │ ├── TcHmiLua.Config.default.json │ │ └── TcHmiLua.Storage.json │ ├── TcHmiSqliteLogger │ │ ├── TcHmiSqliteLogger.Config.remote.json │ │ ├── TcHmiSqliteLogger.Storage.json │ │ └── TcHmiSqliteLogger.Config.default.json │ ├── TcHmiUserManagement │ │ ├── TcHmiUserManagement.Config.remote.json │ │ ├── TcHmiUserManagement.Storage.json │ │ └── TcHmiUserManagement.Config.default.json │ ├── TcHmiRecipeManagement │ │ ├── TcHmiRecipeManagement.Config.remote.json │ │ └── TcHmiRecipeManagement.Storage.json │ ├── ADS │ │ ├── ADS.Storage.json │ │ ├── ADS.Config.remote.json │ │ └── ADS.Config.default.json │ ├── TcHmiSrv │ │ ├── TcHmiSrv.Storage.json │ │ └── TcHmiSrv.Config.remote.json │ ├── TcHmiEventLogger │ │ ├── TcHmiEventLogger.Storage.json │ │ ├── TcHmiEventLogger.Config.remote.json │ │ └── TcHmiEventLogger.Config.default.json │ ├── .TcHmiEcDiagnostics │ │ ├── TcHmiEcDiagnostics.Storage.json │ │ ├── TcHmiEcDiagnostics.Config.remote.json │ │ └── TcHmiEcDiagnostics.Config.default.json │ └── TcHmiSqliteHistorize │ │ ├── TcHmiSqliteHistorize.Storage.json │ │ ├── TcHmiSqliteHistorize.Config.remote.json │ │ └── TcHmiSqliteHistorize.Config.default.json ├── Images │ ├── Favicon.ico │ ├── Manifest │ │ ├── launcher-icon-1x.png │ │ ├── launcher-icon-2x.png │ │ ├── launcher-icon-3x.png │ │ ├── launcher-icon-4x.png │ │ ├── launcher-icon-0-75x.png │ │ └── launcher-icon-1-5x.png │ ├── MachineOverviewImages │ │ ├── Unwind.png │ │ ├── Pullbelts.png │ │ ├── CrossjawSeal.png │ │ └── VFFS_Overview.png │ ├── Beckhoff_Logo.svg │ └── PLC │ │ ├── plc-fallback.svg │ │ ├── plc-config.svg │ │ ├── plc-run.svg │ │ ├── plc-stop.svg │ │ └── plc-exeption.svg ├── Imports │ └── Images │ │ ├── Arrow-0.png │ │ ├── ArrowDR.png │ │ ├── ArrowDn.png │ │ ├── ArrowLt.png │ │ ├── ArrowUR.png │ │ ├── ArrowUp.png │ │ ├── ArrowLt_LongLong-0.png │ │ ├── arrow-bar-down-white.svg │ │ ├── arrow-bar-up-white.svg │ │ ├── scope_start_active.svg │ │ ├── scope_start_normal.svg │ │ ├── scope_start_pressed.svg │ │ ├── hand_operation_active.svg │ │ ├── hand_operation_normal.svg │ │ ├── hand_operation_pressed.svg │ │ ├── stop_inactive.svg │ │ ├── reset_achse_inactive.svg │ │ ├── start_inactive.svg │ │ ├── reset_achse_normal.svg │ │ └── start_normal.svg ├── Fonts │ ├── Roboto-Condensed-webfont.woff │ └── Fonts.css ├── Themes │ ├── Base │ │ ├── Images │ │ │ ├── Background.png │ │ │ ├── Splash-320x534.png │ │ │ ├── Splash-420x200.png │ │ │ ├── Splash-800x600.png │ │ │ └── Placeholder │ │ │ │ ├── placeholder_pressed.svg │ │ │ │ ├── placeholder_active.svg │ │ │ │ └── placeholder_normal.svg │ │ ├── TcHmi.Controls.ResponsiveNavigation.TcHmiNavigationBar │ │ │ └── Images │ │ │ │ └── menu.png │ │ ├── Icons │ │ │ ├── icons_previous_normal.svg │ │ │ └── icons_previous_pressed.svg │ │ ├── TcHmi.Controls.BaseTemplate.TcHmiNavigation │ │ │ └── Icons │ │ │ │ ├── icons_previous_normal.svg │ │ │ │ └── icons_previous_pressed.svg │ │ └── CustomControlClasses.css │ ├── SPT-Base │ │ ├── Images │ │ │ ├── Background.png │ │ │ ├── Splash-320x534.png │ │ │ ├── Splash-420x200.png │ │ │ ├── Splash-800x600.png │ │ │ ├── Settings │ │ │ │ ├── SettingsOmacPackML_Active.png │ │ │ │ └── SettingsOmacPackML_Normal.png │ │ │ ├── Placeholder │ │ │ │ ├── placeholder_pressed.svg │ │ │ │ ├── placeholder_active.svg │ │ │ │ ├── placeholder_normal.svg │ │ │ │ ├── icons_home_active.svg │ │ │ │ ├── icons_home_normal.svg │ │ │ │ └── icons_home_pressed.svg │ │ │ └── Events │ │ │ │ ├── message_pressed.svg │ │ │ │ ├── message_active.svg │ │ │ │ └── message_normal.svg │ │ ├── TcHmi.Controls.ResponsiveNavigation.TcHmiNavigationBar │ │ │ └── Images │ │ │ │ └── menu.png │ │ ├── TcHmi.Controls.BaseTemplate.TcHmiNavigation │ │ │ └── Icons │ │ │ │ ├── icons_previous_normal.svg │ │ │ │ └── icons_previous_pressed.svg │ │ └── CustomControlClasses.css │ └── Base-Dark │ │ └── Images │ │ ├── Background.png │ │ ├── Splash-320x534.png │ │ ├── Splash-420x200.png │ │ ├── Splash-800x600.png │ │ ├── Placeholder │ │ ├── placeholder_active.svg │ │ ├── placeholder_normal.svg │ │ └── placeholder_pressed.svg │ │ └── Beckhoff_Logo.svg ├── .tfignore ├── Localization │ ├── de.localization │ ├── de.tpl.localization │ ├── en.localization │ └── en.tpl.localization ├── .eslintrc.json ├── UserControls │ ├── PackML │ │ ├── PackML_ModeDisplay.usercontrol.json │ │ ├── PackML_StateDisplay.usercontrol.json │ │ ├── PackML_MainCycleControl.usercontrol.json │ │ ├── PackML_BaseModule_Monitor.usercontrol.json │ │ ├── PackML_BaseSubModule_Monitor.usercontrol.json │ │ ├── PackML_StateDiagram.usercontrol.json │ │ ├── PackML_BaseSubModule_Buttons2_Monitor.usercontrol.json │ │ ├── PackML_BaseModule_Buttons_Monitor.usercontrol.json │ │ ├── PackML_BaseModule_Buttons2_Monitor.usercontrol.json │ │ ├── PackML_StateCommand.usercontrol.json │ │ └── PackML_ModeCommand.usercontrol.json │ ├── Components │ │ ├── AxisBase_Monitor.usercontrol.json │ │ ├── Cylinder_Monitor.usercontrol.json │ │ ├── ComponentBase_Monitor.usercontrol.json │ │ ├── DigitalSensor_Monitor.usercontrol.json │ │ ├── ComponentBase_Monitor_Navigation.usercontrol.json │ │ ├── AxisBase_Monitor_Navigation.usercontrol.json │ │ ├── Cylinder_Monitor_Navigation.usercontrol.json │ │ └── DigitalSensor_Monitor_Navigation.usercontrol.json │ └── Utilities │ │ ├── LabelWithIndicator.usercontrol.json │ │ ├── ErrorIDDisplay.usercontrol.json │ │ ├── LabelWithDataFeedback.usercontrol.json │ │ ├── LabelWithNoFeedback.usercontrol.json │ │ ├── LabelWithDataFeedback2Row.usercontrol.json │ │ ├── LabelWithNoFeedback.usercontrol │ │ ├── LabelWithDataFeedback.usercontrol │ │ ├── LabelWithDataFeedback2Row.usercontrol │ │ ├── LabelWithIndicator.usercontrol │ │ └── ButtonWithIndicator.usercontrol.json ├── packages.xsd ├── SetEventBarFilter.function.json ├── RecipeFunctions │ ├── UploadRecipe.function.json │ ├── DownloadRecipe.function.json │ ├── DeleteRecipe.function.json │ ├── ConvertRecipeToDatagrid.function.json │ ├── ListRecipesAsReferenceArray.function.json │ ├── ConvertDatagridToRecipe.function.json │ ├── UpdateDatagridFromTarget.function.json │ ├── DeleteRecipe.js │ ├── ListRecipesAsReferenceArray.js │ ├── ConvertDatagridToRecipe.js │ ├── ConvertRecipeToDatagrid.js │ └── DownloadRecipe.js ├── tsconfig.tpl.json ├── tsconfig.json ├── packages.config ├── TrimDecimalNumber.js ├── NavigateToDetailPage.js ├── VFFSDemo_HMI.sln ├── Pages │ ├── EquipmentModules │ │ ├── Sealer │ │ │ ├── Components │ │ │ │ └── SealerAxis.content │ │ │ └── Sealer_PackML.content │ │ ├── PullWheels │ │ │ ├── Components │ │ │ │ ├── PullWheel_Right.content │ │ │ │ ├── PullWheel_Left.content │ │ │ │ └── Cylinder.content │ │ │ └── PullWheels_PackML.content │ │ └── Unwind │ │ │ ├── Components │ │ │ ├── UnwindAxis.content │ │ │ └── Sensor.content │ │ │ └── Unwind_PackML.content │ ├── PackMLStateDiagram.content │ └── Recipe │ │ └── RecipeManagement.content ├── Properties │ ├── tchmimanifest.json │ ├── Default.tpl │ └── tchmipublish.config.json ├── NavigateToDetailPage.function.json ├── SetEventBarFilter.js ├── TrimDecimalNumber.function.json ├── SetEventLoggerFilters.function.json └── SetEventLoggerFilters.js ├── VFFS_HMI_Demo.pdf ├── README.md └── LICENSE /VFFSDemo_HMI/Server/TcHmiLua/TcHmiLua.Config.remote.json: -------------------------------------------------------------------------------- 1 | {} -------------------------------------------------------------------------------- /VFFSDemo_HMI/Server/TcHmiSqliteLogger/TcHmiSqliteLogger.Config.remote.json: -------------------------------------------------------------------------------- 1 | {} -------------------------------------------------------------------------------- /VFFSDemo_HMI/Server/TcHmiUserManagement/TcHmiUserManagement.Config.remote.json: -------------------------------------------------------------------------------- 1 | {} -------------------------------------------------------------------------------- /VFFSDemo_HMI/Server/TcHmiRecipeManagement/TcHmiRecipeManagement.Config.remote.json: -------------------------------------------------------------------------------- 1 | {} -------------------------------------------------------------------------------- /VFFS_HMI_Demo.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Beckhoff-USA-Community/PackML_HMI_Example/HEAD/VFFS_HMI_Demo.pdf -------------------------------------------------------------------------------- /VFFSDemo_HMI/Server/TcHmiLua/TcHmiLua.Config.default.json: -------------------------------------------------------------------------------- 1 | { 2 | "HTML_ERRORS": false, 3 | "SCRIPT_TIMEOUT": "PT10S" 4 | } -------------------------------------------------------------------------------- /VFFSDemo_HMI/Images/Favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Beckhoff-USA-Community/PackML_HMI_Example/HEAD/VFFSDemo_HMI/Images/Favicon.ico -------------------------------------------------------------------------------- /VFFSDemo_HMI/Server/ADS/ADS.Storage.json: -------------------------------------------------------------------------------- 1 | { 2 | "configVersion": "1.0.0.42", 3 | "guid": "5AE90DB9-B895-45AD-9B79-27A19FADCD86" 4 | } -------------------------------------------------------------------------------- /VFFSDemo_HMI/Server/TcHmiLua/TcHmiLua.Storage.json: -------------------------------------------------------------------------------- 1 | { 2 | "configVersion": "1.0.0.1", 3 | "guid": "EBCC019A-41B4-4ADA-9163-F9F34357B0B6" 4 | } -------------------------------------------------------------------------------- /VFFSDemo_HMI/Server/TcHmiSrv/TcHmiSrv.Storage.json: -------------------------------------------------------------------------------- 1 | { 2 | "configVersion": "1.0.0.118", 3 | "guid": "1EE8B733-8328-488E-A4BA-C287BF8302E7" 4 | } -------------------------------------------------------------------------------- /VFFSDemo_HMI/Imports/Images/Arrow-0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Beckhoff-USA-Community/PackML_HMI_Example/HEAD/VFFSDemo_HMI/Imports/Images/Arrow-0.png -------------------------------------------------------------------------------- /VFFSDemo_HMI/Imports/Images/ArrowDR.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Beckhoff-USA-Community/PackML_HMI_Example/HEAD/VFFSDemo_HMI/Imports/Images/ArrowDR.png -------------------------------------------------------------------------------- /VFFSDemo_HMI/Imports/Images/ArrowDn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Beckhoff-USA-Community/PackML_HMI_Example/HEAD/VFFSDemo_HMI/Imports/Images/ArrowDn.png -------------------------------------------------------------------------------- /VFFSDemo_HMI/Imports/Images/ArrowLt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Beckhoff-USA-Community/PackML_HMI_Example/HEAD/VFFSDemo_HMI/Imports/Images/ArrowLt.png -------------------------------------------------------------------------------- /VFFSDemo_HMI/Imports/Images/ArrowUR.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Beckhoff-USA-Community/PackML_HMI_Example/HEAD/VFFSDemo_HMI/Imports/Images/ArrowUR.png -------------------------------------------------------------------------------- /VFFSDemo_HMI/Imports/Images/ArrowUp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Beckhoff-USA-Community/PackML_HMI_Example/HEAD/VFFSDemo_HMI/Imports/Images/ArrowUp.png -------------------------------------------------------------------------------- /VFFSDemo_HMI/Server/TcHmiEventLogger/TcHmiEventLogger.Storage.json: -------------------------------------------------------------------------------- 1 | { 2 | "configVersion": "1.0.0.12", 3 | "guid": "63A51718-33F7-4F6B-851A-963E4F3F74BD" 4 | } -------------------------------------------------------------------------------- /VFFSDemo_HMI/Server/TcHmiSqliteLogger/TcHmiSqliteLogger.Storage.json: -------------------------------------------------------------------------------- 1 | { 2 | "configVersion": "1.0.0.12", 3 | "guid": "CD0B1D03-27D7-4904-BEFF-3882D751757A" 4 | } -------------------------------------------------------------------------------- /VFFSDemo_HMI/Fonts/Roboto-Condensed-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Beckhoff-USA-Community/PackML_HMI_Example/HEAD/VFFSDemo_HMI/Fonts/Roboto-Condensed-webfont.woff -------------------------------------------------------------------------------- /VFFSDemo_HMI/Server/.TcHmiEcDiagnostics/TcHmiEcDiagnostics.Storage.json: -------------------------------------------------------------------------------- 1 | { 2 | "configVersion": "1.0.0.54", 3 | "guid": "5DC96C56-5913-4dbb-92A5-8557E1B87658" 4 | } -------------------------------------------------------------------------------- /VFFSDemo_HMI/Server/TcHmiSqliteHistorize/TcHmiSqliteHistorize.Storage.json: -------------------------------------------------------------------------------- 1 | { 2 | "configVersion": "1.0.0.42", 3 | "guid": "EB1F70B7-D988-4EFE-8AB5-6D46DD4CED09" 4 | } -------------------------------------------------------------------------------- /VFFSDemo_HMI/Server/TcHmiUserManagement/TcHmiUserManagement.Storage.json: -------------------------------------------------------------------------------- 1 | { 2 | "configVersion": "1.0.0.8", 3 | "guid": "2E0817F0-DE05-42ED-BAFA-552D96B07127" 4 | } -------------------------------------------------------------------------------- /VFFSDemo_HMI/Themes/Base/Images/Background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Beckhoff-USA-Community/PackML_HMI_Example/HEAD/VFFSDemo_HMI/Themes/Base/Images/Background.png -------------------------------------------------------------------------------- /VFFSDemo_HMI/Images/Manifest/launcher-icon-1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Beckhoff-USA-Community/PackML_HMI_Example/HEAD/VFFSDemo_HMI/Images/Manifest/launcher-icon-1x.png -------------------------------------------------------------------------------- /VFFSDemo_HMI/Images/Manifest/launcher-icon-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Beckhoff-USA-Community/PackML_HMI_Example/HEAD/VFFSDemo_HMI/Images/Manifest/launcher-icon-2x.png -------------------------------------------------------------------------------- /VFFSDemo_HMI/Images/Manifest/launcher-icon-3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Beckhoff-USA-Community/PackML_HMI_Example/HEAD/VFFSDemo_HMI/Images/Manifest/launcher-icon-3x.png -------------------------------------------------------------------------------- /VFFSDemo_HMI/Images/Manifest/launcher-icon-4x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Beckhoff-USA-Community/PackML_HMI_Example/HEAD/VFFSDemo_HMI/Images/Manifest/launcher-icon-4x.png -------------------------------------------------------------------------------- /VFFSDemo_HMI/Imports/Images/ArrowLt_LongLong-0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Beckhoff-USA-Community/PackML_HMI_Example/HEAD/VFFSDemo_HMI/Imports/Images/ArrowLt_LongLong-0.png -------------------------------------------------------------------------------- /VFFSDemo_HMI/Server/TcHmiRecipeManagement/TcHmiRecipeManagement.Storage.json: -------------------------------------------------------------------------------- 1 | { 2 | "configVersion": "1.0.0.14", 3 | "guid": "202AA035-2258-492E-965D-DE1EA9D12D59" 4 | } -------------------------------------------------------------------------------- /VFFSDemo_HMI/Themes/Base/Images/Splash-320x534.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Beckhoff-USA-Community/PackML_HMI_Example/HEAD/VFFSDemo_HMI/Themes/Base/Images/Splash-320x534.png -------------------------------------------------------------------------------- /VFFSDemo_HMI/Themes/Base/Images/Splash-420x200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Beckhoff-USA-Community/PackML_HMI_Example/HEAD/VFFSDemo_HMI/Themes/Base/Images/Splash-420x200.png -------------------------------------------------------------------------------- /VFFSDemo_HMI/Themes/Base/Images/Splash-800x600.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Beckhoff-USA-Community/PackML_HMI_Example/HEAD/VFFSDemo_HMI/Themes/Base/Images/Splash-800x600.png -------------------------------------------------------------------------------- /VFFSDemo_HMI/Themes/SPT-Base/Images/Background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Beckhoff-USA-Community/PackML_HMI_Example/HEAD/VFFSDemo_HMI/Themes/SPT-Base/Images/Background.png -------------------------------------------------------------------------------- /VFFSDemo_HMI/Images/MachineOverviewImages/Unwind.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Beckhoff-USA-Community/PackML_HMI_Example/HEAD/VFFSDemo_HMI/Images/MachineOverviewImages/Unwind.png -------------------------------------------------------------------------------- /VFFSDemo_HMI/Images/Manifest/launcher-icon-0-75x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Beckhoff-USA-Community/PackML_HMI_Example/HEAD/VFFSDemo_HMI/Images/Manifest/launcher-icon-0-75x.png -------------------------------------------------------------------------------- /VFFSDemo_HMI/Images/Manifest/launcher-icon-1-5x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Beckhoff-USA-Community/PackML_HMI_Example/HEAD/VFFSDemo_HMI/Images/Manifest/launcher-icon-1-5x.png -------------------------------------------------------------------------------- /VFFSDemo_HMI/Themes/Base-Dark/Images/Background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Beckhoff-USA-Community/PackML_HMI_Example/HEAD/VFFSDemo_HMI/Themes/Base-Dark/Images/Background.png -------------------------------------------------------------------------------- /VFFSDemo_HMI/Images/MachineOverviewImages/Pullbelts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Beckhoff-USA-Community/PackML_HMI_Example/HEAD/VFFSDemo_HMI/Images/MachineOverviewImages/Pullbelts.png -------------------------------------------------------------------------------- /VFFSDemo_HMI/Themes/Base-Dark/Images/Splash-320x534.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Beckhoff-USA-Community/PackML_HMI_Example/HEAD/VFFSDemo_HMI/Themes/Base-Dark/Images/Splash-320x534.png -------------------------------------------------------------------------------- /VFFSDemo_HMI/Themes/Base-Dark/Images/Splash-420x200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Beckhoff-USA-Community/PackML_HMI_Example/HEAD/VFFSDemo_HMI/Themes/Base-Dark/Images/Splash-420x200.png -------------------------------------------------------------------------------- /VFFSDemo_HMI/Themes/Base-Dark/Images/Splash-800x600.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Beckhoff-USA-Community/PackML_HMI_Example/HEAD/VFFSDemo_HMI/Themes/Base-Dark/Images/Splash-800x600.png -------------------------------------------------------------------------------- /VFFSDemo_HMI/Themes/SPT-Base/Images/Splash-320x534.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Beckhoff-USA-Community/PackML_HMI_Example/HEAD/VFFSDemo_HMI/Themes/SPT-Base/Images/Splash-320x534.png -------------------------------------------------------------------------------- /VFFSDemo_HMI/Themes/SPT-Base/Images/Splash-420x200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Beckhoff-USA-Community/PackML_HMI_Example/HEAD/VFFSDemo_HMI/Themes/SPT-Base/Images/Splash-420x200.png -------------------------------------------------------------------------------- /VFFSDemo_HMI/Themes/SPT-Base/Images/Splash-800x600.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Beckhoff-USA-Community/PackML_HMI_Example/HEAD/VFFSDemo_HMI/Themes/SPT-Base/Images/Splash-800x600.png -------------------------------------------------------------------------------- /VFFSDemo_HMI/Images/MachineOverviewImages/CrossjawSeal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Beckhoff-USA-Community/PackML_HMI_Example/HEAD/VFFSDemo_HMI/Images/MachineOverviewImages/CrossjawSeal.png -------------------------------------------------------------------------------- /VFFSDemo_HMI/Images/MachineOverviewImages/VFFS_Overview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Beckhoff-USA-Community/PackML_HMI_Example/HEAD/VFFSDemo_HMI/Images/MachineOverviewImages/VFFS_Overview.png -------------------------------------------------------------------------------- /VFFSDemo_HMI/Themes/SPT-Base/Images/Settings/SettingsOmacPackML_Active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Beckhoff-USA-Community/PackML_HMI_Example/HEAD/VFFSDemo_HMI/Themes/SPT-Base/Images/Settings/SettingsOmacPackML_Active.png -------------------------------------------------------------------------------- /VFFSDemo_HMI/Themes/SPT-Base/Images/Settings/SettingsOmacPackML_Normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Beckhoff-USA-Community/PackML_HMI_Example/HEAD/VFFSDemo_HMI/Themes/SPT-Base/Images/Settings/SettingsOmacPackML_Normal.png -------------------------------------------------------------------------------- /VFFSDemo_HMI/Server/TcHmiEventLogger/TcHmiEventLogger.Config.remote.json: -------------------------------------------------------------------------------- 1 | { 2 | "TARGET_SYSTEMS": { 3 | "Local": { 4 | "ADDRESS": "127.0.0.1.1.1", 5 | "ENABLED": true 6 | } 7 | } 8 | } -------------------------------------------------------------------------------- /VFFSDemo_HMI/Server/TcHmiEventLogger/TcHmiEventLogger.Config.default.json: -------------------------------------------------------------------------------- 1 | { 2 | "LIMIT_EVENT_COUNT": 1000, 3 | "TARGET_SYSTEMS": { 4 | "Local": { 5 | "ADDRESS": "127.0.0.1.1.1", 6 | "ENABLED": true 7 | } 8 | } 9 | } -------------------------------------------------------------------------------- /VFFSDemo_HMI/Themes/Base/TcHmi.Controls.ResponsiveNavigation.TcHmiNavigationBar/Images/menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Beckhoff-USA-Community/PackML_HMI_Example/HEAD/VFFSDemo_HMI/Themes/Base/TcHmi.Controls.ResponsiveNavigation.TcHmiNavigationBar/Images/menu.png -------------------------------------------------------------------------------- /VFFSDemo_HMI/Server/.TcHmiEcDiagnostics/TcHmiEcDiagnostics.Config.remote.json: -------------------------------------------------------------------------------- 1 | { 2 | "devices": { 3 | "Device1": { 4 | "enabled": true, 5 | "masterNetId": "0.0.0.0.2.1", 6 | "targetNetId": "0.0.0.0.1.1" 7 | } 8 | } 9 | } -------------------------------------------------------------------------------- /VFFSDemo_HMI/Themes/SPT-Base/TcHmi.Controls.ResponsiveNavigation.TcHmiNavigationBar/Images/menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Beckhoff-USA-Community/PackML_HMI_Example/HEAD/VFFSDemo_HMI/Themes/SPT-Base/TcHmi.Controls.ResponsiveNavigation.TcHmiNavigationBar/Images/menu.png -------------------------------------------------------------------------------- /VFFSDemo_HMI/Server/TcHmiSqliteLogger/TcHmiSqliteLogger.Config.default.json: -------------------------------------------------------------------------------- 1 | { 2 | "DEFAULT_LIST_LIMIT": 1000, 3 | "MAXENTRIES": 15000, 4 | "MAXENTRYLENGTH": 1024, 5 | "MODE": 1, 6 | "REDIRECT_DIAGNOSTICS_MESSAGES_TO_FILE": true, 7 | "VACUUM_ON_STARTUP": false 8 | } -------------------------------------------------------------------------------- /VFFSDemo_HMI/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 | "SYMBOLS": {}, 8 | "USE_WHITELISTING": false 9 | } 10 | } 11 | } -------------------------------------------------------------------------------- /VFFSDemo_HMI/.tfignore: -------------------------------------------------------------------------------- 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 | -------------------------------------------------------------------------------- /VFFSDemo_HMI/Server/TcHmiSrv/TcHmiSrv.Config.remote.json: -------------------------------------------------------------------------------- 1 | { 2 | "CERTIFICATEEXPIRATION": "P14000D", 3 | "REQUIREAUTH": 2, 4 | "VIRTUALDIRECTORIES": { 5 | "/": "www", 6 | "/Beckhoff.TwinCAT.HMI.EcDiagnosticsControl": "..\\..\\VFFSDemo_HMI\\Packages\\Beckhoff.TwinCAT.HMI.EcDiagnosticsControl.12.756.1\\runtimes\\native1.12-tchmi" 7 | } 8 | } -------------------------------------------------------------------------------- /VFFSDemo_HMI/Imports/Images/arrow-bar-down-white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /VFFSDemo_HMI/Imports/Images/arrow-bar-up-white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /VFFSDemo_HMI/Themes/Base/Images/Placeholder/placeholder_pressed.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Placeholder 6 | 7 | 8 | -------------------------------------------------------------------------------- /VFFSDemo_HMI/Themes/SPT-Base/Images/Placeholder/placeholder_pressed.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Placeholder 6 | 7 | 8 | -------------------------------------------------------------------------------- /VFFSDemo_HMI/Themes/Base/Images/Placeholder/placeholder_active.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Placeholder 6 | 7 | 8 | -------------------------------------------------------------------------------- /VFFSDemo_HMI/Themes/Base/Images/Placeholder/placeholder_normal.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Placeholder 6 | 7 | 8 | -------------------------------------------------------------------------------- /VFFSDemo_HMI/Themes/Base-Dark/Images/Placeholder/placeholder_active.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Placeholder 6 | 7 | 8 | -------------------------------------------------------------------------------- /VFFSDemo_HMI/Themes/Base-Dark/Images/Placeholder/placeholder_normal.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Placeholder 6 | 7 | 8 | -------------------------------------------------------------------------------- /VFFSDemo_HMI/Themes/Base-Dark/Images/Placeholder/placeholder_pressed.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Placeholder 6 | 7 | 8 | -------------------------------------------------------------------------------- /VFFSDemo_HMI/Themes/SPT-Base/Images/Placeholder/placeholder_active.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Placeholder 6 | 7 | 8 | -------------------------------------------------------------------------------- /VFFSDemo_HMI/Themes/SPT-Base/Images/Placeholder/placeholder_normal.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Placeholder 6 | 7 | 8 | -------------------------------------------------------------------------------- /VFFSDemo_HMI/Localization/de.localization: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../Packages/Beckhoff.TwinCAT.HMI.Framework.12.756.1/runtimes/native1.12-tchmi/Schema/LocalizationDescription.Schema.json", 3 | "locale": "de", 4 | "localizedText": { 5 | "L_MachineOverview": "MachineOverview", 6 | "L_Events": "Meldungen", 7 | "L_Localization": "Lokalisierung", 8 | "L_Theme": "Farbschema", 9 | "L_Settings": "Einstellungen", 10 | "L_PullWheels": "Der Pull Wheels", 11 | "L_Sealer": "Die Sealer", 12 | "L_Sensor": "Das Sensor", 13 | "L_Unwind": "Das Unwind", 14 | "L_Blank": " " 15 | } 16 | } -------------------------------------------------------------------------------- /VFFSDemo_HMI/Localization/de.tpl.localization: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../Packages/Beckhoff.TwinCAT.HMI.Framework.12.756.1/runtimes/native1.12-tchmi/Schema/LocalizationDescription.Schema.json", 3 | "locale": "de", 4 | "localizedText": { 5 | "L_MachineOverview": "MachineOverview", 6 | "L_Events": "Meldungen", 7 | "L_Localization": "Lokalisierung", 8 | "L_Theme": "Farbschema", 9 | "L_Settings": "Einstellungen", 10 | "L_PullWheels": "Der Pull Wheels", 11 | "L_Sealer": "Die Sealer", 12 | "L_Sensor": "Das Sensor", 13 | "L_Unwind": "Das Unwind", 14 | "L_Blank": " " 15 | } 16 | } -------------------------------------------------------------------------------- /VFFSDemo_HMI/Localization/en.localization: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "./../../Packages/Beckhoff.TwinCAT.HMI.Framework.12.756.1/runtimes/native1.12-tchmi/Schema/LocalizationDescription.Schema.json", 3 | "locale": "en", 4 | "localizedText": { 5 | "L_MachineOverview": "Machine Overview", 6 | "L_Events": "Events", 7 | "L_Localization": "Localization", 8 | "L_Theme": "Theme", 9 | "L_Settings": "Settings", 10 | "L_PullWheels": "Pull Wheels", 11 | "L_Sealer": "Sealer", 12 | "L_Sensor": "Sensor", 13 | "L_Unwind": "Unwind", 14 | "L_Home": "Home", 15 | "L_Blank": " ", 16 | "L_SealBar": "Seal Bar" 17 | } 18 | } -------------------------------------------------------------------------------- /VFFSDemo_HMI/.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 | } -------------------------------------------------------------------------------- /VFFSDemo_HMI/Localization/en.tpl.localization: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "./../../Packages/Beckhoff.TwinCAT.HMI.Framework.12.756.1/runtimes/native1.12-tchmi/Schema/LocalizationDescription.Schema.json", 3 | "locale": "en", 4 | "localizedText": { 5 | "L_MachineOverview": "Machine Overview", 6 | "L_Events": "Events", 7 | "L_Localization": "Localization", 8 | "L_Theme": "Theme", 9 | "L_Settings": "Settings", 10 | "L_PullWheels": "Pull Wheels", 11 | "L_Sealer": "Sealer", 12 | "L_Sensor": "Sensor", 13 | "L_Unwind": "Unwind", 14 | "L_Home": "Home", 15 | "L_Blank": " ", 16 | "L_SealBar": "Seal Bar" 17 | } 18 | } -------------------------------------------------------------------------------- /VFFSDemo_HMI/Server/.TcHmiEcDiagnostics/TcHmiEcDiagnostics.Config.default.json: -------------------------------------------------------------------------------- 1 | { 2 | "devices": { 3 | "Device1": { 4 | "enabled": true, 5 | "masterNetId": "0.0.0.0.2.1", 6 | "targetNetId": "0.0.0.0.1.1" 7 | } 8 | }, 9 | "vendorsOverwrite": { 10 | "1": { 11 | "devices": [], 12 | "longName": "EtherCAT Technology Group", 13 | "shortName": "ETG" 14 | }, 15 | "2": { 16 | "devices": [], 17 | "longName": "Beckhoff Automation GmbH & Co. KG", 18 | "shortName": "Beckhoff" 19 | } 20 | } 21 | } -------------------------------------------------------------------------------- /VFFSDemo_HMI/Themes/Base/Icons/icons_previous_normal.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 8 | 9 | -------------------------------------------------------------------------------- /VFFSDemo_HMI/Themes/Base/Icons/icons_previous_pressed.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 8 | 9 | -------------------------------------------------------------------------------- /VFFSDemo_HMI/Themes/Base/TcHmi.Controls.BaseTemplate.TcHmiNavigation/Icons/icons_previous_normal.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 8 | 9 | -------------------------------------------------------------------------------- /VFFSDemo_HMI/Themes/Base/TcHmi.Controls.BaseTemplate.TcHmiNavigation/Icons/icons_previous_pressed.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 8 | 9 | -------------------------------------------------------------------------------- /VFFSDemo_HMI/Themes/SPT-Base/TcHmi.Controls.BaseTemplate.TcHmiNavigation/Icons/icons_previous_normal.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 8 | 9 | -------------------------------------------------------------------------------- /VFFSDemo_HMI/Themes/SPT-Base/TcHmi.Controls.BaseTemplate.TcHmiNavigation/Icons/icons_previous_pressed.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 8 | 9 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Introduction 2 | The purpose of this project is to serve as an example of how to setup a HMI project using the current PackML base framework it is provided publically under the License in the repository. 3 | 4 | This sample is created by Beckhoff Automation LLC., and is provided as-is under the MIT license. 5 | 6 | # Getting Started 7 | Once the Repository has been cloned the user will need to install project libraries. 8 | 9 | # Build and Test 10 | TwinCAT "Activate and restart". 11 | 12 | Deploy TwinCAT HMI Project 13 | 14 | If you want to learn more about creating good readme files then refer the following [guidelines](https://docs.microsoft.com/en-us/azure/devops/repos/git/create-a-readme?view=azure-devops). You can also seek inspiration from the below readme files: the contain VFFS_Demo.pdf contained in this repository. 15 | -------------------------------------------------------------------------------- /VFFSDemo_HMI/UserControls/PackML/PackML_ModeDisplay.usercontrol.json: -------------------------------------------------------------------------------- 1 | { 2 | "parameters": [ 3 | { 4 | "name": "data-tchmi-currentmode", 5 | "displayName": "CurrentMode", 6 | "visible": true, 7 | "type": "tchmi:server#/definitions/PLC1.SPT_PackMLBase.E_PMLUnitMode", 8 | "category": "", 9 | "description": "", 10 | "requiredOnCompile": false, 11 | "readOnly": false, 12 | "bindable": true, 13 | "heritable": true, 14 | "propertyName": "CurrentMode", 15 | "propertySetterName": "setCurrentMode", 16 | "propertyGetterName": "getCurrentMode", 17 | "refTo": "" 18 | } 19 | ], 20 | "virtualRights": [], 21 | "$schema": "./../../../../Packages/Beckhoff.TwinCAT.HMI.Framework.12.752.0/runtimes/native1.12-tchmi/Schema/UserControlConfig.Schema.json", 22 | "description": "" 23 | } -------------------------------------------------------------------------------- /VFFSDemo_HMI/UserControls/PackML/PackML_StateDisplay.usercontrol.json: -------------------------------------------------------------------------------- 1 | { 2 | "parameters": [ 3 | { 4 | "name": "data-tchmi-currentstate", 5 | "displayName": "CurrentState", 6 | "visible": true, 7 | "type": "tchmi:server#/definitions/PLC1.Tc3_PackML_V2.E_PMLState", 8 | "category": "", 9 | "description": "", 10 | "requiredOnCompile": false, 11 | "readOnly": false, 12 | "bindable": true, 13 | "heritable": true, 14 | "propertyName": "CurrentState", 15 | "propertySetterName": "setCurrentState", 16 | "propertyGetterName": "getCurrentState", 17 | "refTo": "" 18 | } 19 | ], 20 | "virtualRights": [], 21 | "$schema": "./../../../../Packages/Beckhoff.TwinCAT.HMI.Framework.12.752.0/runtimes/native1.12-tchmi/Schema/UserControlConfig.Schema.json", 22 | "description": "" 23 | } -------------------------------------------------------------------------------- /VFFSDemo_HMI/Server/TcHmiSqliteHistorize/TcHmiSqliteHistorize.Config.remote.json: -------------------------------------------------------------------------------- 1 | { 2 | "enableBackup": false, 3 | "historizedSymbolList": { 4 | "PLC1.MAIN.ProductionMonitor.ProductionData_HMI": { 5 | "interval": "PT1S", 6 | "maxEntries": 10000, 7 | "recordingEnabled": true, 8 | "rowLimit": 10000 9 | }, 10 | "PLC1.MAIN.VFFSDemo.ProductionRate": { 11 | "interval": "PT1S", 12 | "maxEntries": 10000, 13 | "recordingEnabled": true, 14 | "rowLimit": 10000 15 | }, 16 | "PLC1.MAIN.VFFSDemo.Sealer.SealBar._ActualTemperature": { 17 | "interval": "PT1S", 18 | "maxEntries": 10000, 19 | "recordingEnabled": true, 20 | "rowLimit": 100000 21 | } 22 | }, 23 | "maxBackups": 1 24 | } -------------------------------------------------------------------------------- /VFFSDemo_HMI/UserControls/PackML/PackML_MainCycleControl.usercontrol.json: -------------------------------------------------------------------------------- 1 | { 2 | "parameters": [ 3 | { 4 | "name": "data-tchmi-packmlmodule", 5 | "displayName": "PackMLModule", 6 | "visible": true, 7 | "type": "tchmi:server#/definitions/PLC1.ST_PackML_Control_Simplified", 8 | "category": "", 9 | "description": "", 10 | "requiredOnCompile": false, 11 | "readOnly": false, 12 | "bindable": true, 13 | "heritable": true, 14 | "propertyName": "PackMLModule", 15 | "propertySetterName": "setPackMLModule", 16 | "propertyGetterName": "getPackMLModule", 17 | "refTo": "" 18 | } 19 | ], 20 | "virtualRights": [], 21 | "$schema": "../../PackML/Packages/Beckhoff.TwinCAT.HMI.Framework.12.742.5/runtimes/native1.12-tchmi/Schema/UserControlConfig.Schema.json", 22 | "description": "" 23 | } -------------------------------------------------------------------------------- /VFFSDemo_HMI/packages.xsd: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /VFFSDemo_HMI/SetEventBarFilter.function.json: -------------------------------------------------------------------------------- 1 | { 2 | "function": { 3 | "name": "SetEventBarFilter", 4 | "namespace": "TcHmi.Functions.VFFSDemo_HMI", 5 | "displayName": "SetEventBarFilter", 6 | "description": "", 7 | "waitMode": "Synchronous", 8 | "category": "", 9 | "returnValue": { 10 | "type": "tchmi:general#/definitions/String" 11 | }, 12 | "visible": true, 13 | "injectContextObject": false, 14 | "arguments": [] 15 | }, 16 | "$schema": "Packages/Beckhoff.TwinCAT.HMI.Framework.12.758.8/runtimes/native1.12-tchmi/Schema/FunctionDescription.Schema.json", 17 | "apiVersion": 1, 18 | "version": { 19 | "full": "0.0.0.0", 20 | "major": 0, 21 | "minor": 0, 22 | "revision": 0, 23 | "build": 0 24 | }, 25 | "dependencyFiles": [ 26 | { 27 | "name": "SetEventBarFilter.js", 28 | "type": "JavaScript", 29 | "description": "" 30 | } 31 | ] 32 | } -------------------------------------------------------------------------------- /VFFSDemo_HMI/RecipeFunctions/UploadRecipe.function.json: -------------------------------------------------------------------------------- 1 | { 2 | "function": { 3 | "name": "UploadRecipe", 4 | "displayName": "UploadRecipe", 5 | "visible": true, 6 | "category": "Recipe", 7 | "waitMode": "Asynchronous", 8 | "injectContextObject": true, 9 | "description": "", 10 | "returnValue": { 11 | "type": "tchmi:general#/definitions/String" 12 | }, 13 | "arguments": [ 14 | { 15 | "name": "ctx", 16 | "displayName": "ctx", 17 | "type": "tchmi:framework#/definitions/ContextReference", 18 | "description": "Context Reference", 19 | "defaultValue": "", 20 | "required": true, 21 | "bindable": false, 22 | "restParameter": false, 23 | "asReference": false 24 | } 25 | ] 26 | }, 27 | "$schema": "../../Packages/Beckhoff.TwinCAT.HMI.Framework.12.742.5/runtimes/native1.12-tchmi/Schema/FunctionDescription.Schema.json" 28 | } -------------------------------------------------------------------------------- /VFFSDemo_HMI/Server/TcHmiSqliteHistorize/TcHmiSqliteHistorize.Config.default.json: -------------------------------------------------------------------------------- 1 | { 2 | "commitInterval": "PT10S", 3 | "enableBackup": false, 4 | "historizedSymbolList": { 5 | "PLC1.MAIN.ProductionMonitor.ProductionData_HMI": { 6 | "interval": "PT1S", 7 | "maxEntries": 10000, 8 | "recordingEnabled": true, 9 | "rowLimit": 10000 10 | }, 11 | "PLC1.MAIN.VFFSDemo.ProductionRate": { 12 | "interval": "PT1S", 13 | "maxEntries": 10000, 14 | "recordingEnabled": true, 15 | "rowLimit": 10000 16 | }, 17 | "PLC1.MAIN.VFFSDemo.Sealer.SealBar._ActualTemperature": { 18 | "interval": "PT1S", 19 | "maxEntries": 10000, 20 | "recordingEnabled": true, 21 | "rowLimit": 100000 22 | } 23 | }, 24 | "inMemory": false, 25 | "maxBackups": 1, 26 | "mode": 3, 27 | "vacuumOnStartup": false 28 | } -------------------------------------------------------------------------------- /VFFSDemo_HMI/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 | } -------------------------------------------------------------------------------- /VFFSDemo_HMI/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.758.8/runtimes/native1.12-tchmi/TcHmi.d.ts" 32 | ] 33 | } -------------------------------------------------------------------------------- /VFFSDemo_HMI/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 | */ -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 Beckhoff Automation LLC 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 | -------------------------------------------------------------------------------- /VFFSDemo_HMI/packages.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /VFFSDemo_HMI/TrimDecimalNumber.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 | var Functions; 6 | (function (/** @type {globalThis.TcHmi.Functions} */ Functions) { 7 | var VFFSDemo_HMI; 8 | (function (VFFSDemo_HMI) { 9 | function TrimDecimalNumber(NumberToTrim, DecimalPlaces) { 10 | let myFloat = parseFloat(NumberToTrim).toFixed(DecimalPlaces); 11 | return myFloat; 12 | //return Math.round((myFloat + Number.EPSILON) * 100) / 100 13 | //return Math.round((NumberToTrim + Number.EPSILON) * 100) / 100 14 | } 15 | VFFSDemo_HMI.TrimDecimalNumber = TrimDecimalNumber; 16 | })(VFFSDemo_HMI = Functions.VFFSDemo_HMI || (Functions.VFFSDemo_HMI = {})); 17 | Functions.registerFunctionEx('TrimDecimalNumber', 'TcHmi.Functions.VFFSDemo_HMI', VFFSDemo_HMI.TrimDecimalNumber); 18 | })(Functions = TcHmi.Functions || (TcHmi.Functions = {})); 19 | })(TcHmi); -------------------------------------------------------------------------------- /VFFSDemo_HMI/Themes/SPT-Base/Images/Events/message_pressed.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 10 | 11 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /VFFSDemo_HMI/NavigateToDetailPage.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 | var Functions; 6 | (function (/** @type {globalThis.TcHmi.Functions} */ Functions) { 7 | var VFFSDemo_HMI; 8 | (function (VFFSDemo_HMI) { 9 | function NavigateToDetailPage(ContentPath) { 10 | if (ContentPath) 11 | { 12 | var mainRegion = TcHmi.Controls.get('Region_Center'); 13 | if (mainRegion !== undefined) { 14 | mainRegion.setTargetContent(ContentPath); 15 | } 16 | } 17 | 18 | } 19 | VFFSDemo_HMI.NavigateToDetailPage = NavigateToDetailPage; 20 | })(VFFSDemo_HMI = Functions.VFFSDemo_HMI || (Functions.VFFSDemo_HMI = {})); 21 | Functions.registerFunctionEx('NavigateToDetailPage', 'TcHmi.Functions.VFFSDemo_HMI', VFFSDemo_HMI.NavigateToDetailPage); 22 | })(Functions = TcHmi.Functions || (TcHmi.Functions = {})); 23 | })(TcHmi); -------------------------------------------------------------------------------- /VFFSDemo_HMI/Themes/SPT-Base/Images/Events/message_active.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 10 | 11 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /VFFSDemo_HMI/Themes/SPT-Base/Images/Events/message_normal.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 10 | 11 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /VFFSDemo_HMI/Themes/Base/CustomControlClasses.css: -------------------------------------------------------------------------------- 1 | .tchmi-class-remove-disabled-greyout.tchmi-control-disabled.TcHmi_Controls_System_TcHmiControl-disabled::after { 2 | background-color: rgba(0, 0, 0, 0); 3 | /*gets rid of gray-out overlay on disabled control*/ 4 | } 5 | 6 | .tchmi-class-red-glowing { 7 | animation: 0.5s infinite alternate ease-out breathing-red-border; 8 | } 9 | 10 | .tchmi-class-blue-glowing { 11 | background-color: black; 12 | animation: 0.5s infinite alternate ease-out breathing-blue-border; 13 | } 14 | 15 | 16 | .tchmi-class-slideyboi { 17 | transition: all 0.2s ease; 18 | } 19 | 20 | @keyframes breathing-red-border { 21 | from { 22 | border-radius: 3px; 23 | box-shadow: 0 0 1px 1px red; 24 | box-shadow: 0 0 2px 2px red; 25 | box-shadow: 0 0 3px 3px red; 26 | } 27 | 28 | to { 29 | border-radius: 5px; 30 | box-shadow: 0 0 0px 0px red; 31 | } 32 | } 33 | 34 | @keyframes breathing-blue-border { 35 | from { 36 | border-radius: 3px; 37 | box-shadow: 0 0 1px 1px blue; 38 | box-shadow: 0 0 2px 2px blue; 39 | box-shadow: 0 0 3px 3px blue; 40 | } 41 | 42 | to { 43 | border-radius: 5px; 44 | box-shadow: 0 0 0px 0px blue; 45 | } 46 | } -------------------------------------------------------------------------------- /VFFSDemo_HMI/Themes/SPT-Base/CustomControlClasses.css: -------------------------------------------------------------------------------- 1 | .tchmi-class-remove-disabled-greyout.tchmi-control-disabled.TcHmi_Controls_System_TcHmiControl-disabled::after { 2 | background-color: rgba(0, 0, 0, 0); 3 | /*gets rid of gray-out overlay on disabled control*/ 4 | } 5 | 6 | .tchmi-class-red-glowing { 7 | animation: 0.5s infinite alternate ease-out breathing-red-border; 8 | } 9 | 10 | .tchmi-class-blue-glowing { 11 | background-color: black; 12 | animation: 0.5s infinite alternate ease-out breathing-blue-border; 13 | } 14 | 15 | 16 | .tchmi-class-slideyboi { 17 | transition: all 0.2s ease; 18 | } 19 | 20 | @keyframes breathing-red-border { 21 | from { 22 | border-radius: 3px; 23 | box-shadow: 0 0 1px 1px red; 24 | box-shadow: 0 0 2px 2px red; 25 | box-shadow: 0 0 3px 3px red; 26 | } 27 | 28 | to { 29 | border-radius: 5px; 30 | box-shadow: 0 0 0px 0px red; 31 | } 32 | } 33 | 34 | @keyframes breathing-blue-border { 35 | from { 36 | border-radius: 3px; 37 | box-shadow: 0 0 1px 1px blue; 38 | box-shadow: 0 0 2px 2px blue; 39 | box-shadow: 0 0 3px 3px blue; 40 | } 41 | 42 | to { 43 | border-radius: 5px; 44 | box-shadow: 0 0 0px 0px blue; 45 | } 46 | } -------------------------------------------------------------------------------- /VFFSDemo_HMI/Imports/Images/scope_start_active.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 10 | 11 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /VFFSDemo_HMI/Imports/Images/scope_start_normal.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 10 | 11 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /VFFSDemo_HMI/Imports/Images/scope_start_pressed.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 10 | 11 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /VFFSDemo_HMI/VFFSDemo_HMI.sln: -------------------------------------------------------------------------------- 1 | 2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # TcXaeShell Solution File, Format Version 11.00 4 | VisualStudioVersion = 15.0.28307.1300 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FE7A1B72-C5B7-4D7C-BB7D-76384D4DE8E1}") = "VFFSDemo_HMI", "VFFSDemo_HMI.hmiproj", "{FE722124-D66F-4247-B554-AC54128931F1}" 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 | {FE722124-D66F-4247-B554-AC54128931F1}.Debug|TwinCAT HMI.ActiveCfg = Debug|TwinCAT HMI 15 | {FE722124-D66F-4247-B554-AC54128931F1}.Debug|TwinCAT HMI.Build.0 = Debug|TwinCAT HMI 16 | {FE722124-D66F-4247-B554-AC54128931F1}.Release|TwinCAT HMI.ActiveCfg = Release|TwinCAT HMI 17 | {FE722124-D66F-4247-B554-AC54128931F1}.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 = {888C1D5F-9F24-437C-B014-B1EF5B095C79} 24 | EndGlobalSection 25 | EndGlobal 26 | -------------------------------------------------------------------------------- /VFFSDemo_HMI/RecipeFunctions/DownloadRecipe.function.json: -------------------------------------------------------------------------------- 1 | { 2 | "function": { 3 | "name": "DownloadRecipe", 4 | "displayName": "DownloadRecipe", 5 | "visible": true, 6 | "category": "Recipe", 7 | "waitMode": "Asynchronous", 8 | "injectContextObject": true, 9 | "description": "", 10 | "returnValue": { 11 | "type": "tchmi:general#/definitions/String" 12 | }, 13 | "arguments": [ 14 | { 15 | "name": "ctx", 16 | "displayName": "ctx", 17 | "type": "tchmi:framework#/definitions/ContextReference", 18 | "description": "Context Reference", 19 | "defaultValue": "", 20 | "required": true, 21 | "bindable": false, 22 | "restParameter": false, 23 | "asReference": false 24 | }, 25 | { 26 | "name": "recipeReference", 27 | "displayName": "recipeReference", 28 | "type": "tchmi:framework#/definitions/RecipeReference", 29 | "description": "Reference (path + '::' + name) of the recipe", 30 | "defaultValue": "", 31 | "required": true, 32 | "bindable": true, 33 | "restParameter": false, 34 | "asReference": false 35 | } 36 | ] 37 | }, 38 | "$schema": "../../Packages/Beckhoff.TwinCAT.HMI.Framework.12.742.5/runtimes/native1.12-tchmi/Schema/FunctionDescription.Schema.json" 39 | } -------------------------------------------------------------------------------- /VFFSDemo_HMI/UserControls/Components/AxisBase_Monitor.usercontrol.json: -------------------------------------------------------------------------------- 1 | { 2 | "parameters": [ 3 | { 4 | "name": "data-tchmi-axis", 5 | "displayName": "Axis", 6 | "visible": true, 7 | "type": "tchmi:server#/definitions/PLC1.SPT_Components.ST_AxisBase_HMI", 8 | "category": "", 9 | "description": "", 10 | "requiredOnCompile": false, 11 | "readOnly": false, 12 | "bindable": true, 13 | "heritable": true, 14 | "propertyName": "Axis", 15 | "propertySetterName": "setAxis", 16 | "propertyGetterName": "getAxis", 17 | "refTo": "" 18 | }, 19 | { 20 | "name": "data-tchmi-component", 21 | "displayName": "Component", 22 | "visible": true, 23 | "type": "tchmi:server#/definitions/PLC1.SPT_ComponentBase.ST_ComponentBase_HMI", 24 | "category": "", 25 | "description": "", 26 | "requiredOnCompile": false, 27 | "readOnly": false, 28 | "bindable": true, 29 | "heritable": true, 30 | "propertyName": "Component", 31 | "propertySetterName": "setComponent", 32 | "propertyGetterName": "getComponent", 33 | "refTo": "" 34 | } 35 | ], 36 | "virtualRights": [], 37 | "$schema": "./../../../../Packages/Beckhoff.TwinCAT.HMI.Framework.12.752.0/runtimes/native1.12-tchmi/Schema/UserControlConfig.Schema.json", 38 | "description": "" 39 | } -------------------------------------------------------------------------------- /VFFSDemo_HMI/UserControls/PackML/PackML_BaseModule_Monitor.usercontrol.json: -------------------------------------------------------------------------------- 1 | { 2 | "parameters": [ 3 | { 4 | "name": "data-tchmi-module", 5 | "displayName": "Module", 6 | "visible": true, 7 | "type": "tchmi:server#/definitions/PLC1.SPT_PackMLBase.ST_PackMLBaseModule_HMI", 8 | "category": "", 9 | "description": "", 10 | "requiredOnCompile": false, 11 | "readOnly": false, 12 | "bindable": true, 13 | "heritable": true, 14 | "propertyName": "Module", 15 | "propertySetterName": "setModule", 16 | "propertyGetterName": "getModule", 17 | "refTo": "" 18 | }, 19 | { 20 | "name": "data-tchmi-detailpage", 21 | "displayName": "DetailPage", 22 | "visible": true, 23 | "type": "tchmi:framework#/definitions/ContentPath", 24 | "category": "", 25 | "description": "", 26 | "requiredOnCompile": false, 27 | "readOnly": false, 28 | "bindable": true, 29 | "heritable": true, 30 | "propertyName": "DetailPage", 31 | "propertySetterName": "setDetailPage", 32 | "propertyGetterName": "getDetailPage", 33 | "refTo": "" 34 | } 35 | ], 36 | "virtualRights": [], 37 | "$schema": "./../../../../Packages/Beckhoff.TwinCAT.HMI.Framework.12.752.0/runtimes/native1.12-tchmi/Schema/UserControlConfig.Schema.json", 38 | "description": "" 39 | } -------------------------------------------------------------------------------- /VFFSDemo_HMI/UserControls/PackML/PackML_BaseSubModule_Monitor.usercontrol.json: -------------------------------------------------------------------------------- 1 | { 2 | "parameters": [ 3 | { 4 | "name": "data-tchmi-module", 5 | "displayName": "Module", 6 | "visible": true, 7 | "type": "tchmi:server#/definitions/PLC1.SPT_PackMLBase.ST_PackMLBaseModule_HMI", 8 | "category": "", 9 | "description": "", 10 | "requiredOnCompile": false, 11 | "readOnly": false, 12 | "bindable": true, 13 | "heritable": true, 14 | "propertyName": "Module", 15 | "propertySetterName": "setModule", 16 | "propertyGetterName": "getModule", 17 | "refTo": "" 18 | }, 19 | { 20 | "name": "data-tchmi-detailpage", 21 | "displayName": "DetailPage", 22 | "visible": true, 23 | "type": "tchmi:framework#/definitions/ContentPath", 24 | "category": "", 25 | "description": "", 26 | "requiredOnCompile": false, 27 | "readOnly": false, 28 | "bindable": true, 29 | "heritable": true, 30 | "propertyName": "DetailPage", 31 | "propertySetterName": "setDetailPage", 32 | "propertyGetterName": "getDetailPage", 33 | "refTo": "" 34 | } 35 | ], 36 | "virtualRights": [], 37 | "$schema": "./../../../../Packages/Beckhoff.TwinCAT.HMI.Framework.12.752.0/runtimes/native1.12-tchmi/Schema/UserControlConfig.Schema.json", 38 | "description": "" 39 | } -------------------------------------------------------------------------------- /VFFSDemo_HMI/Pages/EquipmentModules/Sealer/Components/SealerAxis.content: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 | 9 |
10 |
11 |
12 |
-------------------------------------------------------------------------------- /VFFSDemo_HMI/UserControls/Components/Cylinder_Monitor.usercontrol.json: -------------------------------------------------------------------------------- 1 | { 2 | "parameters": [ 3 | { 4 | "name": "data-tchmi-cylinder", 5 | "displayName": "Cylinder", 6 | "visible": true, 7 | "type": "tchmi:server#/definitions/PLC1.ST_Cylinder_HMI", 8 | "category": "", 9 | "description": "", 10 | "requiredOnCompile": false, 11 | "readOnly": false, 12 | "bindable": true, 13 | "heritable": true, 14 | "propertyName": "Cylinder", 15 | "propertySetterName": "setCylinder", 16 | "propertyGetterName": "getCylinder", 17 | "refTo": "" 18 | }, 19 | { 20 | "name": "data-tchmi-component", 21 | "displayName": "Component", 22 | "visible": true, 23 | "type": "tchmi:server#/definitions/PLC1.SPT_ComponentBase.ST_ComponentBase_HMI", 24 | "category": "", 25 | "description": "", 26 | "requiredOnCompile": false, 27 | "readOnly": false, 28 | "bindable": true, 29 | "heritable": true, 30 | "propertyName": "Component", 31 | "propertySetterName": "setComponent", 32 | "propertyGetterName": "getComponent", 33 | "refTo": "" 34 | } 35 | ], 36 | "virtualRights": [], 37 | "$schema": "./../../../../Packages/Beckhoff.TwinCAT.HMI.Framework.12.752.0/runtimes/native1.12-tchmi/Schema/UserControlConfig.Schema.json", 38 | "description": "" 39 | } -------------------------------------------------------------------------------- /VFFSDemo_HMI/UserControls/PackML/PackML_StateDiagram.usercontrol.json: -------------------------------------------------------------------------------- 1 | { 2 | "parameters": [ 3 | { 4 | "name": "data-tchmi-packmlmodule", 5 | "displayName": "PackMLModule", 6 | "visible": true, 7 | "type": "tchmi:server#/definitions/PLC1.ST_PackML_Control", 8 | "category": "", 9 | "description": "", 10 | "requiredOnCompile": false, 11 | "readOnly": false, 12 | "bindable": true, 13 | "heritable": true, 14 | "propertyName": "PackMLModule", 15 | "propertySetterName": "setPackMLModule", 16 | "propertyGetterName": "getPackMLModule", 17 | "refTo": "" 18 | }, 19 | { 20 | "name": "data-tchmi-enablecontrol", 21 | "displayName": "EnableControl", 22 | "visible": true, 23 | "type": "tchmi:general#/definitions/BOOL", 24 | "category": "", 25 | "description": "", 26 | "requiredOnCompile": false, 27 | "readOnly": false, 28 | "bindable": true, 29 | "heritable": true, 30 | "propertyName": "EnableControl", 31 | "propertySetterName": "setEnableControl", 32 | "propertyGetterName": "getEnableControl", 33 | "refTo": "" 34 | } 35 | ], 36 | "virtualRights": [], 37 | "$schema": "../../PackML/Packages/Beckhoff.TwinCAT.HMI.Framework.12.742.5/runtimes/native1.12-tchmi/Schema/UserControlConfig.Schema.json", 38 | "description": "" 39 | } -------------------------------------------------------------------------------- /VFFSDemo_HMI/Properties/tchmimanifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json.schemastore.org/web-manifest", 3 | "name": "VFFSDemo_HMI", 4 | "short_name": "VFFSDemo_HMI", 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": "/Pages/LoginPage.html", 46 | "display": "standalone", 47 | "orientation": "portrait" 48 | } 49 | -------------------------------------------------------------------------------- /VFFSDemo_HMI/UserControls/PackML/PackML_BaseSubModule_Buttons2_Monitor.usercontrol.json: -------------------------------------------------------------------------------- 1 | { 2 | "parameters": [ 3 | { 4 | "name": "data-tchmi-module", 5 | "displayName": "Module", 6 | "visible": true, 7 | "type": "tchmi:server#/definitions/PLC1.SPT_PackMLBase.ST_PackMLBaseModule_HMI", 8 | "category": "", 9 | "description": "", 10 | "requiredOnCompile": false, 11 | "readOnly": false, 12 | "bindable": true, 13 | "heritable": true, 14 | "propertyName": "Module", 15 | "propertySetterName": "setModule", 16 | "propertyGetterName": "getModule", 17 | "refTo": "" 18 | }, 19 | { 20 | "name": "data-tchmi-detailpage", 21 | "displayName": "DetailPage", 22 | "visible": true, 23 | "type": "tchmi:framework#/definitions/ContentPath", 24 | "category": "", 25 | "description": "", 26 | "requiredOnCompile": false, 27 | "readOnly": false, 28 | "bindable": true, 29 | "heritable": true, 30 | "propertyName": "DetailPage", 31 | "propertySetterName": "setDetailPage", 32 | "propertyGetterName": "getDetailPage", 33 | "refTo": "" 34 | } 35 | ], 36 | "virtualRights": [], 37 | "$schema": "./../../../../Packages/Beckhoff.TwinCAT.HMI.Framework.12.752.0/runtimes/native1.12-tchmi/Schema/UserControlConfig.Schema.json", 38 | "description": "" 39 | } -------------------------------------------------------------------------------- /VFFSDemo_HMI/UserControls/Components/ComponentBase_Monitor.usercontrol.json: -------------------------------------------------------------------------------- 1 | { 2 | "parameters": [ 3 | { 4 | "name": "data-tchmi-component", 5 | "displayName": "Component", 6 | "visible": true, 7 | "type": "tchmi:server#/definitions/PLC1.SPT_ComponentBase.ST_ComponentBase_HMI", 8 | "category": "", 9 | "description": "", 10 | "requiredOnCompile": false, 11 | "readOnly": false, 12 | "bindable": true, 13 | "heritable": true, 14 | "propertyName": "Component", 15 | "propertySetterName": "setComponent", 16 | "propertyGetterName": "getComponent", 17 | "refTo": "" 18 | }, 19 | { 20 | "name": "data-tchmi-detailpage", 21 | "displayName": "DetailPage", 22 | "visible": true, 23 | "type": "tchmi:framework#/definitions/ContentPath", 24 | "category": "", 25 | "description": "", 26 | "requiredOnCompile": false, 27 | "readOnly": false, 28 | "bindable": true, 29 | "heritable": true, 30 | "propertyName": "DetailPage", 31 | "propertySetterName": "setDetailPage", 32 | "propertyGetterName": "getDetailPage", 33 | "refTo": "" 34 | } 35 | ], 36 | "virtualRights": [], 37 | "$schema": "./../../../../Packages/Beckhoff.TwinCAT.HMI.Framework.12.752.0/runtimes/native1.12-tchmi/Schema/UserControlConfig.Schema.json", 38 | "description": "" 39 | } -------------------------------------------------------------------------------- /VFFSDemo_HMI/RecipeFunctions/DeleteRecipe.function.json: -------------------------------------------------------------------------------- 1 | { 2 | "function": { 3 | "name": "DeleteRecipe", 4 | "displayName": "DeleteRecipe", 5 | "visible": true, 6 | "category": "Recipe", 7 | "waitMode": "Asynchronous", 8 | "injectContextObject": true, 9 | "description": "Deletes a Recipe", 10 | "returnValue": { 11 | "type": "tchmi:general#/definitions/Number", 12 | "description": "" 13 | }, 14 | "arguments": [ 15 | { 16 | "name": "ctx", 17 | "displayName": "ctx", 18 | "type": "tchmi:framework#/definitions/ContextReference", 19 | "description": "Context Reference", 20 | "defaultValue": "", 21 | "required": true, 22 | "bindable": false, 23 | "restParameter": false, 24 | "asReference": false 25 | }, 26 | { 27 | "name": "recipeReference", 28 | "displayName": "recipeReference", 29 | "type": "tchmi:framework#/definitions/RecipeReference", 30 | "description": "Reference (path + '::' + name) of the recipe", 31 | "defaultValue": "", 32 | "required": true, 33 | "bindable": true, 34 | "restParameter": false, 35 | "asReference": false 36 | } 37 | ] 38 | }, 39 | "$schema": "../../Packages/Beckhoff.TwinCAT.HMI.Framework.12.742.5/runtimes/native1.12-tchmi/Schema/FunctionDescription.Schema.json" 40 | } -------------------------------------------------------------------------------- /VFFSDemo_HMI/UserControls/Components/DigitalSensor_Monitor.usercontrol.json: -------------------------------------------------------------------------------- 1 | { 2 | "parameters": [ 3 | { 4 | "name": "data-tchmi-component", 5 | "displayName": "Component", 6 | "visible": true, 7 | "type": "tchmi:server#/definitions/PLC1.SPT_ComponentBase.ST_ComponentBase_HMI", 8 | "category": "", 9 | "description": "", 10 | "requiredOnCompile": false, 11 | "readOnly": false, 12 | "bindable": true, 13 | "heritable": true, 14 | "propertyName": "Component", 15 | "propertySetterName": "setComponent", 16 | "propertyGetterName": "getComponent", 17 | "refTo": "" 18 | }, 19 | { 20 | "name": "data-tchmi-sensor", 21 | "displayName": "Sensor", 22 | "visible": true, 23 | "type": "tchmi:server#/definitions/PLC1.SPT_Components.ST_DigitalSensor_HMI", 24 | "category": "", 25 | "description": "", 26 | "requiredOnCompile": false, 27 | "readOnly": false, 28 | "bindable": true, 29 | "heritable": true, 30 | "propertyName": "Sensor", 31 | "propertySetterName": "setSensor", 32 | "propertyGetterName": "getSensor", 33 | "refTo": "" 34 | } 35 | ], 36 | "virtualRights": [], 37 | "$schema": "./../../../../Packages/Beckhoff.TwinCAT.HMI.Framework.12.752.0/runtimes/native1.12-tchmi/Schema/UserControlConfig.Schema.json", 38 | "description": "" 39 | } -------------------------------------------------------------------------------- /VFFSDemo_HMI/UserControls/Components/ComponentBase_Monitor_Navigation.usercontrol.json: -------------------------------------------------------------------------------- 1 | { 2 | "parameters": [ 3 | { 4 | "name": "data-tchmi-component", 5 | "displayName": "Component", 6 | "visible": true, 7 | "type": "tchmi:server#/definitions/PLC1.SPT_ComponentBase.ST_ComponentBase_HMI", 8 | "category": "", 9 | "description": "", 10 | "requiredOnCompile": false, 11 | "readOnly": false, 12 | "bindable": true, 13 | "heritable": true, 14 | "propertyName": "Component", 15 | "propertySetterName": "setComponent", 16 | "propertyGetterName": "getComponent", 17 | "refTo": "" 18 | }, 19 | { 20 | "name": "data-tchmi-detailpage", 21 | "displayName": "DetailPage", 22 | "visible": true, 23 | "type": "tchmi:framework#/definitions/ContentPath", 24 | "category": "", 25 | "description": "", 26 | "requiredOnCompile": false, 27 | "readOnly": false, 28 | "bindable": true, 29 | "heritable": true, 30 | "propertyName": "DetailPage", 31 | "propertySetterName": "setDetailPage", 32 | "propertyGetterName": "getDetailPage", 33 | "refTo": "" 34 | } 35 | ], 36 | "virtualRights": [], 37 | "$schema": "./../../../../Packages/Beckhoff.TwinCAT.HMI.Framework.12.752.0/runtimes/native1.12-tchmi/Schema/UserControlConfig.Schema.json", 38 | "description": "" 39 | } -------------------------------------------------------------------------------- /VFFSDemo_HMI/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 | "TcRpcEnable" 9 | ], 10 | "NEW_HANDLES_PER_SUM_REQUEST_LIMIT": 100, 11 | "RESPONSE_SIZE_LIMIT": 2097152, 12 | "RUNTIMES": { 13 | "PLC1": { 14 | "ENABLED": true, 15 | "NETID": "127.0.0.1.1.1", 16 | "PORT": 851, 17 | "SYMBOLS": {}, 18 | "USE_WHITELISTING": false 19 | }, 20 | "TcSysService": { 21 | "ENABLED": true, 22 | "NETID": "127.0.0.1.1.1", 23 | "PORT": 10000, 24 | "SYMBOLS": {}, 25 | "USE_WHITELISTING": false 26 | } 27 | }, 28 | "RUNTIME_STATE_CHECK_INTERVAL": "PT2S", 29 | "RUNTIME_STATE_CHECK_TIMEOUT": "PT5S", 30 | "SUM_REQUEST_LIMIT": 500, 31 | "TIMEOUT": "PT1S", 32 | "VISIBLE_RUNTIME_PORTS": [ 33 | 301, 34 | 302, 35 | 303, 36 | 304, 37 | 350, 38 | 351, 39 | 352, 40 | 353, 41 | 354, 42 | 355, 43 | 501, 44 | 801, 45 | 811, 46 | 821, 47 | 831, 48 | 851, 49 | 852, 50 | 853, 51 | 854, 52 | 10000, 53 | 19800 54 | ] 55 | } -------------------------------------------------------------------------------- /VFFSDemo_HMI/RecipeFunctions/ConvertRecipeToDatagrid.function.json: -------------------------------------------------------------------------------- 1 | { 2 | "function": { 3 | "name": "ConvertRecipeToDataGrid", 4 | "displayName": "ConvertRecipeToDataGrid", 5 | "visible": true, 6 | "category": "Recipe", 7 | "waitMode": "Asynchronous", 8 | "injectContextObject": true, 9 | "description": "Reads the recipe and fills the datagrid", 10 | "returnValue": { 11 | "type": "tchmi:general#/definitions/Array" 12 | }, 13 | "arguments": [ 14 | { 15 | "name": "ctx", 16 | "displayName": "ctx", 17 | "type": "tchmi:framework#/definitions/ContextReference", 18 | "description": "Context Reference", 19 | "defaultValue": "", 20 | "required": true, 21 | "bindable": false, 22 | "restParameter": false, 23 | "asReference": false 24 | }, 25 | { 26 | "name": "recipeReference", 27 | "displayName": "recipeReference", 28 | "type": "tchmi:framework#/definitions/RecipeReference", 29 | "description": "Reference (path + '::' + name) of the recipe", 30 | "defaultValue": "", 31 | "required": true, 32 | "bindable": true, 33 | "restParameter": false, 34 | "asReference": false 35 | } 36 | ] 37 | }, 38 | "$schema": "../../Packages/Beckhoff.TwinCAT.HMI.Framework.12.742.5/runtimes/native1.12-tchmi/Schema/FunctionDescription.Schema.json" 39 | } -------------------------------------------------------------------------------- /VFFSDemo_HMI/UserControls/Utilities/LabelWithIndicator.usercontrol.json: -------------------------------------------------------------------------------- 1 | { 2 | "parameters": [ 3 | { 4 | "name": "data-tchmi-label", 5 | "displayName": "Label", 6 | "visible": true, 7 | "type": "tchmi:general#/definitions/String", 8 | "category": "", 9 | "description": "", 10 | "defaultValue": "TEST", 11 | "requiredOnCompile": false, 12 | "readOnly": false, 13 | "bindable": true, 14 | "heritable": true, 15 | "propertyName": "Label", 16 | "propertySetterName": "setLabel", 17 | "propertyGetterName": "getLabel", 18 | "refTo": "" 19 | }, 20 | { 21 | "name": "data-tchmi-indicator", 22 | "displayName": "Indicator", 23 | "visible": true, 24 | "type": "tchmi:general#/definitions/Boolean", 25 | "category": "", 26 | "description": "", 27 | "defaultValue": false, 28 | "defaultValueInternal": false, 29 | "requiredOnCompile": false, 30 | "readOnly": false, 31 | "bindable": true, 32 | "heritable": true, 33 | "propertyName": "Indicator", 34 | "propertySetterName": "setIndicator", 35 | "propertyGetterName": "getIndicator", 36 | "refTo": "" 37 | } 38 | ], 39 | "virtualRights": [], 40 | "$schema": "./../../Packages/Beckhoff.TwinCAT.HMI.Framework.12.756.1/runtimes/native1.12-tchmi/Schema/UserControlConfig.Schema.json", 41 | "description": "" 42 | } -------------------------------------------------------------------------------- /VFFSDemo_HMI/Pages/EquipmentModules/PullWheels/Components/PullWheel_Right.content: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 | 9 |
10 |
11 |
12 |
-------------------------------------------------------------------------------- /VFFSDemo_HMI/Pages/EquipmentModules/Unwind/Components/UnwindAxis.content: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 | 9 |
10 |
11 |
12 |
-------------------------------------------------------------------------------- /VFFSDemo_HMI/NavigateToDetailPage.function.json: -------------------------------------------------------------------------------- 1 | { 2 | "function": { 3 | "name": "NavigateToDetailPage", 4 | "namespace": "TcHmi.Functions.VFFSDemo_HMI", 5 | "displayName": "NavigateToDetailPage", 6 | "description": "", 7 | "waitMode": "Synchronous", 8 | "category": "", 9 | "returnValue": { 10 | "type": "tchmi:general#/definitions/Null" 11 | }, 12 | "visible": true, 13 | "injectContextObject": false, 14 | "arguments": [ 15 | { 16 | "name": "ContentPath", 17 | "displayName": "ContentPath", 18 | "type": "tchmi:framework#/definitions/ContentPath", 19 | "description": "This is an important Parameter which does... This text is used in a tooltip.", 20 | "defaultValue": "", 21 | "required": true, 22 | "bindable": true, 23 | "restParameter": false, 24 | "asReference": false, 25 | "allowControlAttributeBindingOptions": false 26 | } 27 | ] 28 | }, 29 | "$schema": "Packages/Beckhoff.TwinCAT.HMI.Framework.12.756.1/runtimes/native1.12-tchmi/Schema/FunctionDescription.Schema.json", 30 | "apiVersion": 1, 31 | "version": { 32 | "full": "0.0.0.0", 33 | "major": 0, 34 | "minor": 0, 35 | "revision": 0, 36 | "build": 0 37 | }, 38 | "dependencyFiles": [ 39 | { 40 | "name": "NavigateToDetailPage.js", 41 | "type": "JavaScript", 42 | "description": "" 43 | } 44 | ] 45 | } -------------------------------------------------------------------------------- /VFFSDemo_HMI/Pages/EquipmentModules/PullWheels/Components/PullWheel_Left.content: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 | 9 |
10 |
11 |
12 |
-------------------------------------------------------------------------------- /VFFSDemo_HMI/Pages/EquipmentModules/Unwind/Components/Sensor.content: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 | 9 |
10 |
11 |
12 |
-------------------------------------------------------------------------------- /VFFSDemo_HMI/Pages/EquipmentModules/PullWheels/Components/Cylinder.content: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 | 9 |
10 |
11 |
12 |
-------------------------------------------------------------------------------- /VFFSDemo_HMI/SetEventBarFilter.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 | var Functions; 6 | (function (/** @type {globalThis.TcHmi.Functions} */ Functions) { 7 | var VFFSDemo_HMI; 8 | (function (VFFSDemo_HMI) { 9 | function SetEventBarFilter() { 10 | let eventGrid = TcHmi.Controls.get('TcHmiEventGrid_Events_1'); 11 | let header = TcHmi.Controls.get('Header_Top'); 12 | 13 | if (header) { 14 | let items = header.getHeaderItems(); 15 | items.forEach((item) => { 16 | if (item.itemType === 'EventLine') { 17 | let control = item.control; 18 | eventGrid.setFilter(control.getFilter()); 19 | } 20 | }); 21 | } 22 | 23 | 24 | } 25 | VFFSDemo_HMI.SetEventBarFilter = SetEventBarFilter; 26 | })(VFFSDemo_HMI = Functions.VFFSDemo_HMI || (Functions.VFFSDemo_HMI = {})); 27 | })(Functions = TcHmi.Functions || (TcHmi.Functions = {})); 28 | })(TcHmi); 29 | TcHmi.Functions.registerFunctionEx('SetEventBarFilter', 'TcHmi.Functions.VFFSDemo_HMI', TcHmi.Functions.VFFSDemo_HMI.SetEventBarFilter); 30 | -------------------------------------------------------------------------------- /VFFSDemo_HMI/Imports/Images/hand_operation_active.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 10 | 11 | 12 | 15 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /VFFSDemo_HMI/Imports/Images/hand_operation_normal.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 10 | 11 | 12 | 15 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /VFFSDemo_HMI/Imports/Images/hand_operation_pressed.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 10 | 11 | 12 | 15 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /VFFSDemo_HMI/RecipeFunctions/ListRecipesAsReferenceArray.function.json: -------------------------------------------------------------------------------- 1 | { 2 | "function": { 3 | "name": "ListRecipesAsReferenceArray", 4 | "displayName": "ListRecipesAsReferenceArray", 5 | "visible": true, 6 | "category": "Recipe", 7 | "waitMode": "Asynchronous", 8 | "injectContextObject": true, 9 | "description": "Parses a recipe folder and returns a string array with the RecipeReferences", 10 | "returnValue": { 11 | "type": "tchmi:general#/definitions/Array", 12 | "description": "" 13 | }, 14 | "arguments": [ 15 | { 16 | "name": "ctx", 17 | "displayName": "ctx", 18 | "type": "tchmi:framework#/definitions/ContextReference", 19 | "description": "Context Reference", 20 | "defaultValue": "", 21 | "required": true, 22 | "bindable": false, 23 | "restParameter": false, 24 | "asReference": false 25 | }, 26 | { 27 | "name": "recipeList", 28 | "displayName": "recipeList", 29 | "type": "tchmi:server#/definitions/folderRecipe", 30 | "description": "Recipe symbol so the function is updated again when recipe list is changed", 31 | "defaultValue": "%s%TcHmiRecipeManagement.Config::recipeList%/s%", 32 | "required": true, 33 | "bindable": true, 34 | "restParameter": false, 35 | "asReference": false 36 | } 37 | ] 38 | }, 39 | "$schema": "../../Packages/Beckhoff.TwinCAT.HMI.Framework.12.742.5/runtimes/native1.12-tchmi/Schema/FunctionDescription.Schema.json" 40 | } -------------------------------------------------------------------------------- /VFFSDemo_HMI/Pages/EquipmentModules/Unwind/Unwind_PackML.content: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 |
5 |
6 | 14 | 15 | 16 | 21 |
22 |
-------------------------------------------------------------------------------- /VFFSDemo_HMI/TrimDecimalNumber.function.json: -------------------------------------------------------------------------------- 1 | { 2 | "function": { 3 | "name": "TrimDecimalNumber", 4 | "namespace": "TcHmi.Functions.VFFSDemo_HMI", 5 | "displayName": "TrimDecimalNumber", 6 | "description": "", 7 | "waitMode": "Synchronous", 8 | "category": "", 9 | "returnValue": { 10 | "type": "tchmi:general#/definitions/Number" 11 | }, 12 | "visible": true, 13 | "injectContextObject": false, 14 | "arguments": [ 15 | { 16 | "name": "NumberToTrim", 17 | "displayName": "NumberToTrim", 18 | "type": "tchmi:general#/definitions/String", 19 | "description": "", 20 | "defaultValue": "", 21 | "required": true, 22 | "bindable": true, 23 | "restParameter": false, 24 | "asReference": false, 25 | "allowControlAttributeBindingOptions": false 26 | }, 27 | { 28 | "name": "DecimalPlaces", 29 | "displayName": "DecimalPlaces", 30 | "type": "tchmi:general#/definitions/Number", 31 | "description": "", 32 | "defaultValue": "", 33 | "required": true, 34 | "bindable": true, 35 | "restParameter": false, 36 | "asReference": false, 37 | "allowControlAttributeBindingOptions": false 38 | } 39 | ] 40 | }, 41 | "$schema": "Packages/Beckhoff.TwinCAT.HMI.Framework.12.756.1/runtimes/native1.12-tchmi/Schema/FunctionDescription.Schema.json", 42 | "apiVersion": 1, 43 | "version": { 44 | "full": "0.0.0.0", 45 | "major": 0, 46 | "minor": 0, 47 | "revision": 0, 48 | "build": 0 49 | }, 50 | "dependencyFiles": [ 51 | { 52 | "name": "TrimDecimalNumber.js", 53 | "type": "JavaScript", 54 | "description": "" 55 | } 56 | ] 57 | } -------------------------------------------------------------------------------- /VFFSDemo_HMI/Imports/Images/stop_inactive.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 18 | 21 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /VFFSDemo_HMI/SetEventLoggerFilters.function.json: -------------------------------------------------------------------------------- 1 | { 2 | "function": { 3 | "name": "SetEventLoggerFilters", 4 | "namespace": "TcHmi.Functions.ILBD_HMI", 5 | "displayName": "SetEventLoggerFilters", 6 | "description": "", 7 | "waitMode": "Synchronous", 8 | "category": "", 9 | "returnValue": { 10 | "type": "tchmi:general#/definitions/String" 11 | }, 12 | "visible": true, 13 | "injectContextObject": false, 14 | "arguments": [ 15 | { 16 | "name": "EventGrid", 17 | "displayName": "EventGrid", 18 | "type": "tchmi:framework#/definitions/TcHmi.Controls.Beckhoff.TcHmiEventGrid", 19 | "description": "", 20 | "defaultValue": "", 21 | "required": true, 22 | "bindable": true, 23 | "restParameter": false, 24 | "asReference": false, 25 | "allowControlAttributeBindingOptions": false 26 | }, 27 | { 28 | "name": "FilterPML", 29 | "displayName": "FilterPML", 30 | "type": "tchmi:general#/definitions/Boolean", 31 | "description": "", 32 | "defaultValue": false, 33 | "required": true, 34 | "bindable": true, 35 | "restParameter": false, 36 | "asReference": false, 37 | "allowControlAttributeBindingOptions": false 38 | } 39 | ] 40 | }, 41 | "$schema": "Packages/Beckhoff.TwinCAT.HMI.Framework.12.756.1/runtimes/native1.12-tchmi/Schema/FunctionDescription.Schema.json", 42 | "apiVersion": 1, 43 | "version": { 44 | "full": "0.0.0.0", 45 | "major": 0, 46 | "minor": 0, 47 | "revision": 0, 48 | "build": 0 49 | }, 50 | "dependencyFiles": [ 51 | { 52 | "name": "SetEventLoggerFilters.js", 53 | "type": "JavaScript", 54 | "description": "" 55 | } 56 | ] 57 | } -------------------------------------------------------------------------------- /VFFSDemo_HMI/RecipeFunctions/ConvertDatagridToRecipe.function.json: -------------------------------------------------------------------------------- 1 | { 2 | "function": { 3 | "name": "ConvertDatagridToRecipe", 4 | "displayName": "ConvertDatagridToRecipe", 5 | "visible": true, 6 | "category": "Recipe", 7 | "waitMode": "Asynchronous", 8 | "injectContextObject": true, 9 | "description": "Parses the datagrid and updates the recipe", 10 | "returnValue": { 11 | "type": "tchmi:general#/definitions/Number" 12 | }, 13 | "arguments": [ 14 | { 15 | "name": "ctx", 16 | "displayName": "ctx", 17 | "type": "tchmi:framework#/definitions/ContextReference", 18 | "description": "Context Reference", 19 | "defaultValue": "", 20 | "required": true, 21 | "bindable": false, 22 | "restParameter": false, 23 | "asReference": false 24 | }, 25 | { 26 | "name": "datagridControl", 27 | "displayName": "datagridControl", 28 | "type": "tchmi:framework#/definitions/Control", 29 | "description": "The datagrid to manipulate", 30 | "defaultValue": "", 31 | "required": true, 32 | "bindable": true, 33 | "restParameter": false, 34 | "asReference": false 35 | }, 36 | { 37 | "name": "recipeReference", 38 | "displayName": "recipeReference", 39 | "type": "tchmi:framework#/definitions/RecipeReference", 40 | "description": "Reference (path + '::' + name) of the recipe", 41 | "defaultValue": "", 42 | "required": true, 43 | "bindable": true, 44 | "restParameter": false, 45 | "asReference": false 46 | } 47 | ] 48 | }, 49 | "$schema": "../../Packages/Beckhoff.TwinCAT.HMI.Framework.12.742.5/runtimes/native1.12-tchmi/Schema/FunctionDescription.Schema.json" 50 | } -------------------------------------------------------------------------------- /VFFSDemo_HMI/UserControls/Utilities/ErrorIDDisplay.usercontrol.json: -------------------------------------------------------------------------------- 1 | { 2 | "parameters": [ 3 | { 4 | "name": "data-tchmi-string1", 5 | "displayName": "String1", 6 | "visible": true, 7 | "type": "tchmi:general#/definitions/String", 8 | "category": "", 9 | "description": "", 10 | "requiredOnCompile": false, 11 | "readOnly": false, 12 | "bindable": true, 13 | "heritable": true, 14 | "propertyName": "String1", 15 | "propertySetterName": "setString1", 16 | "propertyGetterName": "getString1", 17 | "refTo": "" 18 | }, 19 | { 20 | "name": "data-tchmi-string2", 21 | "displayName": "String2", 22 | "visible": true, 23 | "type": "tchmi:general#/definitions/String", 24 | "category": "", 25 | "description": "", 26 | "requiredOnCompile": false, 27 | "readOnly": false, 28 | "bindable": true, 29 | "heritable": true, 30 | "propertyName": "String2", 31 | "propertySetterName": "setString2", 32 | "propertyGetterName": "getString2", 33 | "refTo": "" 34 | }, 35 | { 36 | "name": "data-tchmi-selector", 37 | "displayName": "Selector", 38 | "visible": true, 39 | "type": "tchmi:general#/definitions/BOOL", 40 | "category": "", 41 | "description": "", 42 | "requiredOnCompile": false, 43 | "readOnly": false, 44 | "bindable": true, 45 | "heritable": true, 46 | "propertyName": "Selector", 47 | "propertySetterName": "setSelector", 48 | "propertyGetterName": "getSelector", 49 | "refTo": "" 50 | } 51 | ], 52 | "virtualRights": [], 53 | "$schema": "./../../../../Packages/Beckhoff.TwinCAT.HMI.Framework.12.752.0/runtimes/native1.12-tchmi/Schema/UserControlConfig.Schema.json", 54 | "description": "" 55 | } -------------------------------------------------------------------------------- /VFFSDemo_HMI/RecipeFunctions/UpdateDatagridFromTarget.function.json: -------------------------------------------------------------------------------- 1 | { 2 | "function": { 3 | "name": "UpdateDatagridFromTarget", 4 | "displayName": "UpdateDatagridFromTarget", 5 | "visible": true, 6 | "category": "Recipe", 7 | "waitMode": "Asynchronous", 8 | "injectContextObject": true, 9 | "description": "Reads the current values and fills the datagrid newValue column", 10 | "returnValue": { 11 | "type": "tchmi:general#/definitions/Number" 12 | }, 13 | "arguments": [ 14 | { 15 | "name": "ctx", 16 | "displayName": "ctx", 17 | "type": "tchmi:framework#/definitions/ContextReference", 18 | "description": "Context Reference", 19 | "defaultValue": "", 20 | "required": true, 21 | "bindable": false, 22 | "restParameter": false, 23 | "asReference": false 24 | }, 25 | { 26 | "name": "datagridControl", 27 | "displayName": "datagridControl", 28 | "type": "tchmi:framework#/definitions/Control", 29 | "description": "The datagrid to manipulate", 30 | "defaultValue": "", 31 | "required": true, 32 | "bindable": true, 33 | "restParameter": false, 34 | "asReference": false 35 | }, 36 | { 37 | "name": "recipeReference", 38 | "displayName": "recipeReference", 39 | "type": "tchmi:framework#/definitions/RecipeReference", 40 | "description": "Reference (path + '::' + name) of the recipe", 41 | "defaultValue": "", 42 | "required": true, 43 | "bindable": true, 44 | "restParameter": false, 45 | "asReference": false 46 | } 47 | ] 48 | }, 49 | "$schema": "../../Packages/Beckhoff.TwinCAT.HMI.Framework.12.742.5/runtimes/native1.12-tchmi/Schema/FunctionDescription.Schema.json" 50 | } -------------------------------------------------------------------------------- /VFFSDemo_HMI/SetEventLoggerFilters.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 | var Functions; 6 | (function (/** @type {globalThis.TcHmi.Functions} */ Functions) { 7 | var VFFSDemo_HMI; 8 | (function (VFFSDemo_HMI) { 9 | function SetEventLoggerFilters(EventGrid, FilterPML) { 10 | let currentFilter = EventGrid.getFilter(); 11 | 12 | let filterItems = []; 13 | let filterResult = []; 14 | 15 | let andOperator = { logic: 'AND' }; 16 | let eventRaisedFilter = { path: 'alarmState', comparator: '==', value: 0}; 17 | 18 | if (FilterPML) { 19 | let pmlFilter = {}; 20 | pmlFilter.path = 'params::eventClassName'; 21 | pmlFilter.comparator = '!='; 22 | pmlFilter.value = 'PackML'; 23 | filterItems.push(pmlFilter); 24 | } 25 | 26 | filterResult.push(eventRaisedFilter); 27 | 28 | filterItems.forEach(e => { 29 | filterResult.push(andOperator); 30 | filterResult.push(e); 31 | }); 32 | 33 | EventGrid.setFilter(filterResult); 34 | 35 | } 36 | ILBD_HMI.SetEventLoggerFilters = SetEventLoggerFilters; 37 | })(ILBD_HMI = Functions.ILBD_HMI || (Functions.ILBD_HMI = {})); 38 | Functions.registerFunctionEx('SetEventLoggerFilters', 'TcHmi.Functions.ILBD_HMI', ILBD_HMI.SetEventLoggerFilters); 39 | })(Functions = TcHmi.Functions || (TcHmi.Functions = {})); 40 | })(TcHmi); -------------------------------------------------------------------------------- /VFFSDemo_HMI/Pages/EquipmentModules/Sealer/Sealer_PackML.content: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 |
5 |
6 | 14 | 15 | 16 | 21 |
22 |
-------------------------------------------------------------------------------- /VFFSDemo_HMI/UserControls/Components/AxisBase_Monitor_Navigation.usercontrol.json: -------------------------------------------------------------------------------- 1 | { 2 | "parameters": [ 3 | { 4 | "name": "data-tchmi-axis", 5 | "displayName": "Axis", 6 | "visible": true, 7 | "type": "tchmi:server#/definitions/PLC1.SPT_Components.ST_AxisBase_HMI", 8 | "category": "", 9 | "description": "", 10 | "requiredOnCompile": false, 11 | "readOnly": false, 12 | "bindable": true, 13 | "heritable": true, 14 | "propertyName": "Axis", 15 | "propertySetterName": "setAxis", 16 | "propertyGetterName": "getAxis", 17 | "refTo": "" 18 | }, 19 | { 20 | "name": "data-tchmi-component", 21 | "displayName": "Component", 22 | "visible": true, 23 | "type": "tchmi:server#/definitions/PLC1.SPT_ComponentBase.ST_ComponentBase_HMI", 24 | "category": "", 25 | "description": "", 26 | "requiredOnCompile": false, 27 | "readOnly": false, 28 | "bindable": true, 29 | "heritable": true, 30 | "propertyName": "Component", 31 | "propertySetterName": "setComponent", 32 | "propertyGetterName": "getComponent", 33 | "refTo": "" 34 | }, 35 | { 36 | "name": "data-tchmi-detailpage", 37 | "displayName": "DetailPage", 38 | "visible": true, 39 | "type": "tchmi:framework#/definitions/ContentPath", 40 | "category": "", 41 | "description": "", 42 | "requiredOnCompile": false, 43 | "readOnly": false, 44 | "bindable": true, 45 | "heritable": true, 46 | "propertyName": "DetailPage", 47 | "propertySetterName": "setDetailPage", 48 | "propertyGetterName": "getDetailPage", 49 | "refTo": "" 50 | } 51 | ], 52 | "virtualRights": [], 53 | "$schema": "./../../../../Packages/Beckhoff.TwinCAT.HMI.Framework.12.752.0/runtimes/native1.12-tchmi/Schema/UserControlConfig.Schema.json", 54 | "description": "" 55 | } -------------------------------------------------------------------------------- /VFFSDemo_HMI/UserControls/Components/Cylinder_Monitor_Navigation.usercontrol.json: -------------------------------------------------------------------------------- 1 | { 2 | "parameters": [ 3 | { 4 | "name": "data-tchmi-cylinder", 5 | "displayName": "Cylinder", 6 | "visible": true, 7 | "type": "tchmi:server#/definitions/PLC1.ST_Cylinder_HMI", 8 | "category": "", 9 | "description": "", 10 | "requiredOnCompile": false, 11 | "readOnly": false, 12 | "bindable": true, 13 | "heritable": true, 14 | "propertyName": "Cylinder", 15 | "propertySetterName": "setCylinder", 16 | "propertyGetterName": "getCylinder", 17 | "refTo": "" 18 | }, 19 | { 20 | "name": "data-tchmi-component", 21 | "displayName": "Component", 22 | "visible": true, 23 | "type": "tchmi:server#/definitions/PLC1.SPT_ComponentBase.ST_ComponentBase_HMI", 24 | "category": "", 25 | "description": "", 26 | "requiredOnCompile": false, 27 | "readOnly": false, 28 | "bindable": true, 29 | "heritable": true, 30 | "propertyName": "Component", 31 | "propertySetterName": "setComponent", 32 | "propertyGetterName": "getComponent", 33 | "refTo": "" 34 | }, 35 | { 36 | "name": "data-tchmi-detailpage", 37 | "displayName": "DetailPage", 38 | "visible": true, 39 | "type": "tchmi:framework#/definitions/ContentPath", 40 | "category": "", 41 | "description": "", 42 | "requiredOnCompile": false, 43 | "readOnly": false, 44 | "bindable": true, 45 | "heritable": true, 46 | "propertyName": "DetailPage", 47 | "propertySetterName": "setDetailPage", 48 | "propertyGetterName": "getDetailPage", 49 | "refTo": "" 50 | } 51 | ], 52 | "virtualRights": [], 53 | "$schema": "./../../../../Packages/Beckhoff.TwinCAT.HMI.Framework.12.752.0/runtimes/native1.12-tchmi/Schema/UserControlConfig.Schema.json", 54 | "description": "" 55 | } -------------------------------------------------------------------------------- /VFFSDemo_HMI/Pages/PackMLStateDiagram.content: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 |
5 |
6 | 14 | 15 | 16 | 21 |
22 |
-------------------------------------------------------------------------------- /VFFSDemo_HMI/UserControls/Components/DigitalSensor_Monitor_Navigation.usercontrol.json: -------------------------------------------------------------------------------- 1 | { 2 | "parameters": [ 3 | { 4 | "name": "data-tchmi-component", 5 | "displayName": "Component", 6 | "visible": true, 7 | "type": "tchmi:server#/definitions/PLC1.SPT_ComponentBase.ST_ComponentBase_HMI", 8 | "category": "", 9 | "description": "", 10 | "requiredOnCompile": false, 11 | "readOnly": false, 12 | "bindable": true, 13 | "heritable": true, 14 | "propertyName": "Component", 15 | "propertySetterName": "setComponent", 16 | "propertyGetterName": "getComponent", 17 | "refTo": "" 18 | }, 19 | { 20 | "name": "data-tchmi-sensor", 21 | "displayName": "Sensor", 22 | "visible": true, 23 | "type": "tchmi:server#/definitions/PLC1.SPT_Components.ST_DigitalSensor_HMI", 24 | "category": "", 25 | "description": "", 26 | "requiredOnCompile": false, 27 | "readOnly": false, 28 | "bindable": true, 29 | "heritable": true, 30 | "propertyName": "Sensor", 31 | "propertySetterName": "setSensor", 32 | "propertyGetterName": "getSensor", 33 | "refTo": "" 34 | }, 35 | { 36 | "name": "data-tchmi-detailpage", 37 | "displayName": "DetailPage", 38 | "visible": true, 39 | "type": "tchmi:framework#/definitions/ContentPath", 40 | "category": "", 41 | "description": "", 42 | "requiredOnCompile": false, 43 | "readOnly": false, 44 | "bindable": true, 45 | "heritable": true, 46 | "propertyName": "DetailPage", 47 | "propertySetterName": "setDetailPage", 48 | "propertyGetterName": "getDetailPage", 49 | "refTo": "" 50 | } 51 | ], 52 | "virtualRights": [], 53 | "$schema": "./../../../../Packages/Beckhoff.TwinCAT.HMI.Framework.12.752.0/runtimes/native1.12-tchmi/Schema/UserControlConfig.Schema.json", 54 | "description": "" 55 | } -------------------------------------------------------------------------------- /VFFSDemo_HMI/UserControls/PackML/PackML_BaseModule_Buttons_Monitor.usercontrol.json: -------------------------------------------------------------------------------- 1 | { 2 | "parameters": [ 3 | { 4 | "name": "data-tchmi-module", 5 | "displayName": "Module", 6 | "visible": true, 7 | "type": "tchmi:server#/definitions/PLC1.SPT_PackMLBase.ST_PackMLBaseModule_HMI", 8 | "category": "", 9 | "description": "", 10 | "requiredOnCompile": false, 11 | "readOnly": false, 12 | "bindable": true, 13 | "heritable": true, 14 | "propertyName": "Module", 15 | "propertySetterName": "setModule", 16 | "propertyGetterName": "getModule", 17 | "refTo": "" 18 | }, 19 | { 20 | "name": "data-tchmi-detailpage", 21 | "displayName": "DetailPage", 22 | "visible": true, 23 | "type": "tchmi:framework#/definitions/ContentPath", 24 | "category": "", 25 | "description": "", 26 | "requiredOnCompile": false, 27 | "readOnly": false, 28 | "bindable": true, 29 | "heritable": true, 30 | "propertyName": "DetailPage", 31 | "propertySetterName": "setDetailPage", 32 | "propertyGetterName": "getDetailPage", 33 | "refTo": "" 34 | }, 35 | { 36 | "name": "data-tchmi-simplecontrol", 37 | "displayName": "SimpleControl", 38 | "visible": true, 39 | "type": "tchmi:server#/definitions/PLC1.ST_PackML_Control_Simplified", 40 | "category": "", 41 | "description": "", 42 | "requiredOnCompile": false, 43 | "readOnly": false, 44 | "bindable": true, 45 | "heritable": true, 46 | "propertyName": "SimpleControl", 47 | "propertySetterName": "setSimpleControl", 48 | "propertyGetterName": "getSimpleControl", 49 | "refTo": "" 50 | } 51 | ], 52 | "virtualRights": [], 53 | "$schema": "./../../../../Packages/Beckhoff.TwinCAT.HMI.Framework.12.752.0/runtimes/native1.12-tchmi/Schema/UserControlConfig.Schema.json", 54 | "description": "" 55 | } -------------------------------------------------------------------------------- /VFFSDemo_HMI/UserControls/PackML/PackML_BaseModule_Buttons2_Monitor.usercontrol.json: -------------------------------------------------------------------------------- 1 | { 2 | "parameters": [ 3 | { 4 | "name": "data-tchmi-module", 5 | "displayName": "Module", 6 | "visible": true, 7 | "type": "tchmi:server#/definitions/PLC1.SPT_PackMLBase.ST_PackMLBaseModule_HMI", 8 | "category": "", 9 | "description": "", 10 | "requiredOnCompile": false, 11 | "readOnly": false, 12 | "bindable": true, 13 | "heritable": true, 14 | "propertyName": "Module", 15 | "propertySetterName": "setModule", 16 | "propertyGetterName": "getModule", 17 | "refTo": "" 18 | }, 19 | { 20 | "name": "data-tchmi-detailpage", 21 | "displayName": "DetailPage", 22 | "visible": true, 23 | "type": "tchmi:framework#/definitions/ContentPath", 24 | "category": "", 25 | "description": "", 26 | "requiredOnCompile": false, 27 | "readOnly": false, 28 | "bindable": true, 29 | "heritable": true, 30 | "propertyName": "DetailPage", 31 | "propertySetterName": "setDetailPage", 32 | "propertyGetterName": "getDetailPage", 33 | "refTo": "" 34 | }, 35 | { 36 | "name": "data-tchmi-simplecontrol", 37 | "displayName": "SimpleControl", 38 | "visible": true, 39 | "type": "tchmi:server#/definitions/PLC1.ST_PackML_Control_Simplified", 40 | "category": "", 41 | "description": "", 42 | "requiredOnCompile": false, 43 | "readOnly": false, 44 | "bindable": true, 45 | "heritable": true, 46 | "propertyName": "SimpleControl", 47 | "propertySetterName": "setSimpleControl", 48 | "propertyGetterName": "getSimpleControl", 49 | "refTo": "" 50 | } 51 | ], 52 | "virtualRights": [], 53 | "$schema": "./../../../../Packages/Beckhoff.TwinCAT.HMI.Framework.12.752.0/runtimes/native1.12-tchmi/Schema/UserControlConfig.Schema.json", 54 | "description": "" 55 | } -------------------------------------------------------------------------------- /VFFSDemo_HMI/Pages/EquipmentModules/PullWheels/PullWheels_PackML.content: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 |
5 |
6 | 14 | 15 | 16 | 21 |
22 |
-------------------------------------------------------------------------------- /VFFSDemo_HMI/Imports/Images/reset_achse_inactive.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 18 | 20 | 21 | 22 | 24 | 25 | 27 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /VFFSDemo_HMI/Imports/Images/start_inactive.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 18 | 20 | 21 | 22 | 24 | 25 | 27 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /VFFSDemo_HMI/Properties/Default.tpl: -------------------------------------------------------------------------------- 1 | -- Designer -- 2 | 3 | 4 | 5 | {{TITLE}} 6 | 7 | 8 | 9 | 23 | {{GLOBAL_JS_INCLUDES}} 24 | 25 | 26 | {{VIEWLEVEL}} 27 | 28 | 29 | -- /Designer -- 30 | 31 | -- LiveView_and_Build -- 32 | 33 | 42 | 43 | 44 | {{TITLE}} 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | {{GLOBAL_JS_INCLUDES}} 54 | 55 | 56 | 60 | {{VIEWLEVEL}} 61 | 62 | 63 | -- /LiveView_and_Build -- -------------------------------------------------------------------------------- /VFFSDemo_HMI/UserControls/PackML/PackML_StateCommand.usercontrol.json: -------------------------------------------------------------------------------- 1 | { 2 | "parameters": [ 3 | { 4 | "name": "data-tchmi-currentstate", 5 | "displayName": "CurrentState", 6 | "visible": true, 7 | "type": "tchmi:server#/definitions/PLC1.Tc3_PackML_V2.E_PMLState", 8 | "category": "", 9 | "description": "", 10 | "requiredOnCompile": false, 11 | "readOnly": false, 12 | "bindable": true, 13 | "heritable": true, 14 | "propertyName": "CurrentState", 15 | "propertySetterName": "setCurrentState", 16 | "propertyGetterName": "getCurrentState", 17 | "refTo": "" 18 | }, 19 | { 20 | "name": "data-tchmi-enable", 21 | "displayName": "Enable", 22 | "visible": true, 23 | "type": "tchmi:general#/definitions/BOOL", 24 | "category": "", 25 | "description": "", 26 | "defaultValue": false, 27 | "defaultValueInternal": false, 28 | "requiredOnCompile": false, 29 | "readOnly": false, 30 | "bindable": true, 31 | "heritable": true, 32 | "propertyName": "Enable", 33 | "propertySetterName": "setEnable", 34 | "propertyGetterName": "getEnable", 35 | "refTo": "" 36 | }, 37 | { 38 | "name": "data-tchmi-statecommand", 39 | "displayName": "StateCommand", 40 | "visible": true, 41 | "type": "tchmi:server#/definitions/PLC1.Tc3_PackML_V2.E_PMLCommand", 42 | "category": "", 43 | "description": "", 44 | "requiredOnCompile": false, 45 | "readOnly": false, 46 | "bindable": true, 47 | "heritable": true, 48 | "propertyName": "StateCommand", 49 | "propertySetterName": "setStateCommand", 50 | "propertyGetterName": "getStateCommand", 51 | "refTo": "" 52 | } 53 | ], 54 | "virtualRights": [], 55 | "$schema": "./../../../../Packages/Beckhoff.TwinCAT.HMI.Framework.12.752.0/runtimes/native1.12-tchmi/Schema/UserControlConfig.Schema.json", 56 | "description": "" 57 | } -------------------------------------------------------------------------------- /VFFSDemo_HMI/Images/Beckhoff_Logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /VFFSDemo_HMI/Themes/Base-Dark/Images/Beckhoff_Logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /VFFSDemo_HMI/Properties/tchmipublish.config.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "serverExtensions": [ 4 | { 5 | "publishServerExtension": true, 6 | "name": "ADS" 7 | }, 8 | { 9 | "publishServerExtension": true, 10 | "name": "TcHmiEventLogger" 11 | }, 12 | { 13 | "publishServerExtension": true, 14 | "name": "TcHmiLua" 15 | }, 16 | { 17 | "publishServerExtension": true, 18 | "name": "TcHmiRecipeManagement" 19 | }, 20 | { 21 | "publishServerExtension": true, 22 | "name": "TcHmiSqliteHistorize" 23 | }, 24 | { 25 | "publishServerExtension": true, 26 | "name": "TcHmiSqliteLogger" 27 | }, 28 | { 29 | "publishServerExtension": true, 30 | "name": "TcHmiSrv" 31 | }, 32 | { 33 | "publishServerExtension": true, 34 | "name": "TcHmiUserManagement" 35 | } 36 | ], 37 | "isNew": false, 38 | "profileName": "Desktop", 39 | "publishMode": "TcHmi", 40 | "targetDirectory": "", 41 | "server": "", 42 | "sitePath": "", 43 | "destinationUrl": "", 44 | "passiveMode": true, 45 | "savePassword": true, 46 | "deleteAllFilesBeforePublish": false, 47 | "deleteExtensionDataBeforePublish": false, 48 | "alwaysPublishLocalServerConfiguration": true, 49 | "temporaryPublishWithoutServerConfiguration": false, 50 | "abortOnErrors": true, 51 | "createPublishLog": false, 52 | "userName": "", 53 | "encryptedPassword": "", 54 | "encryptedTcHmiServerPassword": "Jdu/cbveb5hLU2ByFZUSZg==", 55 | "tcHmiServerHost": "127.0.0.1", 56 | "tcHmiServerPort": "1010", 57 | "socketTimeout": "60", 58 | "clientCertificateCN": "", 59 | "tcHmiUseTLS": false, 60 | "useClientCertificate": false, 61 | "launchBrowserAfterPublish": true, 62 | "createVirtualDirectoriesOnTargetSystem": false, 63 | "tcHmiServerUserName": "__SystemAdministrator", 64 | "tcHmiDestinationUrl": "http://127.0.0.1:1010", 65 | "publishConfiguration": "remote", 66 | "tcHmiSavePassword": true, 67 | "tcHmiIgnoreCertificateErrors": true 68 | } 69 | ] -------------------------------------------------------------------------------- /VFFSDemo_HMI/Server/TcHmiUserManagement/TcHmiUserManagement.Config.default.json: -------------------------------------------------------------------------------- 1 | { 2 | "USERS": { 3 | "Admin1": { 4 | "ALGORITHM": 1, 5 | "ENABLED": true, 6 | "PASSWORD": "c5b8d2a05980ad0d38c4a0322eec2cfa05e7517e443cbbc982ae9f79b1ca111a32cfd97bd3ecad4cfb915151019f8ec6d3517165a992f2548e38f42c59cfdaa7", 7 | "SALT": "WvtGDD0nnzPrnzMBUWO6HqcmaPtOLk6n2U1Yjxq9YlRdWYLfY6V6DHjD62d5bvu5vwxED360nw1nM9RV8reNYA==" 8 | }, 9 | "Maintenance1": { 10 | "ALGORITHM": 1, 11 | "ENABLED": true, 12 | "PASSWORD": "2fd982af0f9d0577b2937849e0d0dbb48ca798327a35a590ba244e096aa6df68a0a5e6ae40a9a3b5dfb6f29008ea7aaaa57ac5a6dd96877e65eb5b57881231d4", 13 | "SALT": "Dx6tCQx1G3tVJjNY6irSI3bfOSMJltud1XpTOjdkKXhjw1xE+15nSCL2f3Oevzq/QfBlmgsr2nqS5E+ofGjDWg==" 14 | }, 15 | "Operator1": { 16 | "ALGORITHM": 1, 17 | "ENABLED": true, 18 | "PASSWORD": "f4c9ca4050cae2555cc89a5addaca96c2666a9f699cd31c194f8c5597af11ad32f04c795174bd514b0e1c6a5acfa5f16ad18e44df499f04c5cb4fcacfad2ddda", 19 | "SALT": "T0FWrC1bbwckFgWxn6+0gVSdmobjrb3QIGWSRM8GBxyFnhiLmwNSZt+llguMkly+A1x3ER3GtYGBdH39uRVR8Q==" 20 | }, 21 | "SetupTech1": { 22 | "ALGORITHM": 1, 23 | "ENABLED": true, 24 | "PASSWORD": "80f13f69fbc0279b1764d3cd89f303161f16c2830c37e3a1f86c9c9e82ae16d9f9f07d85191638add31bf92b35b8892fb3d3e0af30c82a62ed0cad3592fbeead", 25 | "SALT": "RcnblKO1PdjfYQ6wwSjxqqdlysLA0kKuAcQZKwSAhA/OxaqUIX09BF5ffH2fSnmj8G4kQDp3IcSoiXmEvViXTw==" 26 | }, 27 | "__SystemAdministrator": { 28 | "ALGORITHM": 1, 29 | "ENABLED": true, 30 | "PASSWORD": "e019d075706891c0e730ca84de9241ed6d66474fda4afe6d5f31b0ae3f673820a9938b9dcca90b8ea62e35e82de8fb7d7d09c67cc367ab563ddafea256a2f921", 31 | "SALT": "O13STettIuZIQnCLNstH5hEsbgGZ0fMon5yEzw5WvNNd0ElSxHKpHLhmMLgOGqnwgF2qtlhbc/8akgfBGlrDsg==" 32 | }, 33 | "__SystemGuest": { 34 | "ALGORITHM": 0, 35 | "ENABLED": true, 36 | "PASSWORD": "", 37 | "SALT": "" 38 | } 39 | } 40 | } -------------------------------------------------------------------------------- /VFFSDemo_HMI/RecipeFunctions/DeleteRecipe.js: -------------------------------------------------------------------------------- 1 | // Keep this lines for a best effort IntelliSense of Visual Studio 2017. 2 | /// 3 | /// 4 | /// 5 | 6 | // Keep this lines for a best effort IntelliSense of Visual Studio 2013/2015. 7 | /// 8 | /// 9 | 10 | (function (TcHmi) { 11 | 12 | var DeleteRecipe = function (ctx, recipeReference) { 13 | if (!recipeReference) { 14 | // Stop (not abort) with null (binding without a value) or empty string 15 | ctx.success(); 16 | 17 | return; // We are running async so the return value is not used 18 | } 19 | TcHmi.Server.RecipeManagement.deleteRecipe(recipeReference, null, function (data) { 20 | if (!data.error) { 21 | TcHmi.Log.info('Recipe ' + recipeReference + ' deleted successfull.'); 22 | // Inform the system that we are done 23 | ctx.success(); 24 | 25 | return; // We are running async so the return value is not used 26 | } else { 27 | // Inform the system that we are done but had an error 28 | ctx.error(data.error, { 29 | code: data.error, 30 | message: TcHmi.Errors[data.error], 31 | reason: 'Function: DeleteRecipe, Recipe ' + recipeReference + ' deletion failed', 32 | domain: 'Function', 33 | errors: (data.details ? [data.details] : undefined) 34 | }); 35 | return; // We are running async so the return value is not used 36 | } 37 | }); 38 | 39 | return; // We are running async so the return value is not used 40 | }; 41 | 42 | TcHmi.Functions.registerFunction('DeleteRecipe', DeleteRecipe); 43 | })(TcHmi); -------------------------------------------------------------------------------- /VFFSDemo_HMI/UserControls/Utilities/LabelWithDataFeedback.usercontrol.json: -------------------------------------------------------------------------------- 1 | { 2 | "parameters": [ 3 | { 4 | "name": "data-tchmi-label", 5 | "displayName": "Label", 6 | "visible": true, 7 | "type": "tchmi:general#/definitions/String", 8 | "category": "", 9 | "description": "", 10 | "requiredOnCompile": false, 11 | "readOnly": false, 12 | "bindable": true, 13 | "heritable": true, 14 | "propertyName": "Label", 15 | "propertySetterName": "setLabel", 16 | "propertyGetterName": "getLabel", 17 | "refTo": "" 18 | }, 19 | { 20 | "name": "data-tchmi-data", 21 | "displayName": "Data", 22 | "visible": true, 23 | "type": "tchmi:general#/definitions/String", 24 | "category": "", 25 | "description": "", 26 | "defaultValue": "", 27 | "defaultValueInternal": "", 28 | "requiredOnCompile": false, 29 | "readOnly": false, 30 | "bindable": true, 31 | "heritable": true, 32 | "propertyName": "Data", 33 | "propertySetterName": "setData", 34 | "propertyGetterName": "getData", 35 | "refTo": "" 36 | }, 37 | { 38 | "name": "data-tchmi-unit", 39 | "displayName": "Unit", 40 | "visible": true, 41 | "type": "tchmi:general#/definitions/String", 42 | "category": "", 43 | "description": "", 44 | "requiredOnCompile": false, 45 | "readOnly": false, 46 | "bindable": true, 47 | "heritable": true, 48 | "propertyName": "Unit", 49 | "propertySetterName": "setUnit", 50 | "propertyGetterName": "getUnit", 51 | "refTo": "" 52 | }, 53 | { 54 | "name": "data-tchmi-decimalplaces", 55 | "displayName": "DecimalPlaces", 56 | "visible": true, 57 | "type": "tchmi:general#/definitions/Number", 58 | "category": "", 59 | "description": "", 60 | "defaultValue": 1.0, 61 | "defaultValueInternal": 1.0, 62 | "requiredOnCompile": false, 63 | "readOnly": false, 64 | "bindable": true, 65 | "heritable": true, 66 | "propertyName": "DecimalPlaces", 67 | "propertySetterName": "setDecimalPlaces", 68 | "propertyGetterName": "getDecimalPlaces", 69 | "refTo": "" 70 | } 71 | ], 72 | "virtualRights": [], 73 | "$schema": "./../../Packages/Beckhoff.TwinCAT.HMI.Framework.12.756.1/runtimes/native1.12-tchmi/Schema/UserControlConfig.Schema.json", 74 | "description": "" 75 | } -------------------------------------------------------------------------------- /VFFSDemo_HMI/UserControls/Utilities/LabelWithNoFeedback.usercontrol.json: -------------------------------------------------------------------------------- 1 | { 2 | "parameters": [ 3 | { 4 | "name": "data-tchmi-label", 5 | "displayName": "Label", 6 | "visible": true, 7 | "type": "tchmi:general#/definitions/String", 8 | "category": "", 9 | "description": "", 10 | "requiredOnCompile": false, 11 | "readOnly": false, 12 | "bindable": true, 13 | "heritable": true, 14 | "propertyName": "Label", 15 | "propertySetterName": "setLabel", 16 | "propertyGetterName": "getLabel", 17 | "refTo": "" 18 | }, 19 | { 20 | "name": "data-tchmi-data", 21 | "displayName": "Data", 22 | "visible": true, 23 | "type": "tchmi:general#/definitions/String", 24 | "category": "", 25 | "description": "", 26 | "defaultValue": "", 27 | "defaultValueInternal": "", 28 | "requiredOnCompile": false, 29 | "readOnly": false, 30 | "bindable": true, 31 | "heritable": true, 32 | "propertyName": "Data", 33 | "propertySetterName": "setData", 34 | "propertyGetterName": "getData", 35 | "refTo": "" 36 | }, 37 | { 38 | "name": "data-tchmi-unit", 39 | "displayName": "Unit", 40 | "visible": true, 41 | "type": "tchmi:general#/definitions/String", 42 | "category": "", 43 | "description": "", 44 | "requiredOnCompile": false, 45 | "readOnly": false, 46 | "bindable": true, 47 | "heritable": true, 48 | "propertyName": "Unit", 49 | "propertySetterName": "setUnit", 50 | "propertyGetterName": "getUnit", 51 | "refTo": "" 52 | }, 53 | { 54 | "name": "data-tchmi-decimalplaces", 55 | "displayName": "DecimalPlaces", 56 | "visible": true, 57 | "type": "tchmi:general#/definitions/Number", 58 | "category": "", 59 | "description": "", 60 | "defaultValue": 1.0, 61 | "defaultValueInternal": 1.0, 62 | "requiredOnCompile": false, 63 | "readOnly": false, 64 | "bindable": true, 65 | "heritable": true, 66 | "propertyName": "DecimalPlaces", 67 | "propertySetterName": "setDecimalPlaces", 68 | "propertyGetterName": "getDecimalPlaces", 69 | "refTo": "" 70 | } 71 | ], 72 | "virtualRights": [], 73 | "$schema": "./../../Packages/Beckhoff.TwinCAT.HMI.Framework.12.756.1/runtimes/native1.12-tchmi/Schema/UserControlConfig.Schema.json", 74 | "description": "" 75 | } -------------------------------------------------------------------------------- /VFFSDemo_HMI/UserControls/Utilities/LabelWithDataFeedback2Row.usercontrol.json: -------------------------------------------------------------------------------- 1 | { 2 | "parameters": [ 3 | { 4 | "name": "data-tchmi-label", 5 | "displayName": "Label", 6 | "visible": true, 7 | "type": "tchmi:general#/definitions/String", 8 | "category": "", 9 | "description": "", 10 | "requiredOnCompile": false, 11 | "readOnly": false, 12 | "bindable": true, 13 | "heritable": true, 14 | "propertyName": "Label", 15 | "propertySetterName": "setLabel", 16 | "propertyGetterName": "getLabel", 17 | "refTo": "" 18 | }, 19 | { 20 | "name": "data-tchmi-data", 21 | "displayName": "Data", 22 | "visible": true, 23 | "type": "tchmi:general#/definitions/String", 24 | "category": "", 25 | "description": "", 26 | "defaultValue": "", 27 | "defaultValueInternal": "", 28 | "requiredOnCompile": false, 29 | "readOnly": false, 30 | "bindable": true, 31 | "heritable": true, 32 | "propertyName": "Data", 33 | "propertySetterName": "setData", 34 | "propertyGetterName": "getData", 35 | "refTo": "" 36 | }, 37 | { 38 | "name": "data-tchmi-unit", 39 | "displayName": "Unit", 40 | "visible": true, 41 | "type": "tchmi:general#/definitions/String", 42 | "category": "", 43 | "description": "", 44 | "requiredOnCompile": false, 45 | "readOnly": false, 46 | "bindable": true, 47 | "heritable": true, 48 | "propertyName": "Unit", 49 | "propertySetterName": "setUnit", 50 | "propertyGetterName": "getUnit", 51 | "refTo": "" 52 | }, 53 | { 54 | "name": "data-tchmi-decimalplaces", 55 | "displayName": "DecimalPlaces", 56 | "visible": true, 57 | "type": "tchmi:general#/definitions/Number", 58 | "category": "", 59 | "description": "", 60 | "defaultValue": 1.0, 61 | "defaultValueInternal": 1.0, 62 | "requiredOnCompile": false, 63 | "readOnly": false, 64 | "bindable": true, 65 | "heritable": true, 66 | "propertyName": "DecimalPlaces", 67 | "propertySetterName": "setDecimalPlaces", 68 | "propertyGetterName": "getDecimalPlaces", 69 | "refTo": "" 70 | } 71 | ], 72 | "virtualRights": [], 73 | "$schema": "./../../Packages/Beckhoff.TwinCAT.HMI.Framework.12.756.1/runtimes/native1.12-tchmi/Schema/UserControlConfig.Schema.json", 74 | "description": "" 75 | } -------------------------------------------------------------------------------- /VFFSDemo_HMI/Images/PLC/plc-fallback.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | icons/tc/plc-active 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /VFFSDemo_HMI/UserControls/PackML/PackML_ModeCommand.usercontrol.json: -------------------------------------------------------------------------------- 1 | { 2 | "parameters": [ 3 | { 4 | "name": "data-tchmi-currentmode", 5 | "displayName": "CurrentMode", 6 | "visible": true, 7 | "type": "tchmi:server#/definitions/PLC1.SPT_PackMLBase.E_PMLUnitMode", 8 | "category": "", 9 | "description": "", 10 | "requiredOnCompile": false, 11 | "readOnly": false, 12 | "bindable": true, 13 | "heritable": true, 14 | "propertyName": "CurrentMode", 15 | "propertySetterName": "setCurrentMode", 16 | "propertyGetterName": "getCurrentMode", 17 | "refTo": "" 18 | }, 19 | { 20 | "name": "data-tchmi-enable", 21 | "displayName": "Enable", 22 | "visible": true, 23 | "type": "tchmi:general#/definitions/BOOL", 24 | "category": "", 25 | "description": "", 26 | "defaultValue": false, 27 | "defaultValueInternal": false, 28 | "requiredOnCompile": false, 29 | "readOnly": false, 30 | "bindable": true, 31 | "heritable": true, 32 | "propertyName": "Enable", 33 | "propertySetterName": "setEnable", 34 | "propertyGetterName": "getEnable", 35 | "refTo": "" 36 | }, 37 | { 38 | "name": "data-tchmi-modecommand", 39 | "displayName": "ModeCommand", 40 | "visible": true, 41 | "type": "tchmi:server#/definitions/PLC1.SPT_PackMLBase.E_PMLUnitMode", 42 | "category": "", 43 | "description": "", 44 | "requiredOnCompile": false, 45 | "readOnly": false, 46 | "bindable": true, 47 | "heritable": true, 48 | "propertyName": "ModeCommand", 49 | "propertySetterName": "setModeCommand", 50 | "propertyGetterName": "getModeCommand", 51 | "refTo": "" 52 | }, 53 | { 54 | "name": "data-tchmi-modenames", 55 | "displayName": "ModeNames", 56 | "visible": true, 57 | "type": "tchmi:server#/definitions/PLC1.ARRAY_0..31_OF-STRING-80", 58 | "category": "", 59 | "description": "", 60 | "requiredOnCompile": false, 61 | "readOnly": false, 62 | "bindable": true, 63 | "heritable": true, 64 | "propertyName": "ModeNames", 65 | "propertySetterName": "setModeNames", 66 | "propertyGetterName": "getModeNames", 67 | "refTo": "" 68 | } 69 | ], 70 | "virtualRights": [], 71 | "$schema": "./../../../../Packages/Beckhoff.TwinCAT.HMI.Framework.12.752.0/runtimes/native1.12-tchmi/Schema/UserControlConfig.Schema.json", 72 | "description": "" 73 | } -------------------------------------------------------------------------------- /VFFSDemo_HMI/RecipeFunctions/ListRecipesAsReferenceArray.js: -------------------------------------------------------------------------------- 1 | // Keep this lines for a best effort IntelliSense of Visual Studio 2017. 2 | /// 3 | /// 4 | /// 5 | 6 | // Keep this lines for a best effort IntelliSense of Visual Studio 2013/2015. 7 | /// 8 | /// 9 | 10 | (function (TcHmi) { 11 | 12 | var ListRecipesAsReferenceArray = function (ctx, recipeList) { 13 | if (!recipeList) { 14 | // Inform the system that we are done and have a dummy result 15 | ctx.success([]); 16 | return; // We are running async so the return value is not used 17 | } 18 | // Build a flat array out of the recursive object 19 | var result = []; 20 | 21 | // Checks recursive all properties of the recipe folder and remember recipes 22 | var iterateRecipes = function (currentPath, recipeFolder) { 23 | for (var subPath in recipeFolder) { 24 | var currentName = (currentPath ? currentPath + '::' : '') + subPath; 25 | var recipeOrRecipeFolder = recipeFolder[subPath]; 26 | 27 | if ( 28 | typeof recipeOrRecipeFolder.recipeTypeName === 'string' 29 | && recipeOrRecipeFolder.values !== null 30 | && typeof recipeOrRecipeFolder.values === 'object' 31 | ) { 32 | // Add to array when we have reached an recipe (which has to contain a recipeTypeName and a values object) 33 | result.push(currentName); 34 | } else { 35 | // no recipe found, go deeper 36 | iterateRecipes(currentName, recipeOrRecipeFolder); 37 | } 38 | } 39 | } 40 | // Start iteration at the root of the object 41 | iterateRecipes('', recipeList); 42 | // Inform the system that we are done and have a result 43 | ctx.success(result); 44 | return; // We are running async so the return value is not used 45 | }; 46 | 47 | TcHmi.Functions.registerFunction('ListRecipesAsReferenceArray', ListRecipesAsReferenceArray); 48 | })(TcHmi); -------------------------------------------------------------------------------- /VFFSDemo_HMI/Images/PLC/plc-config.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | icons/tc/plc-active 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /VFFSDemo_HMI/Images/PLC/plc-run.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | icons/tc/plc-active 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /VFFSDemo_HMI/Images/PLC/plc-stop.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | icons/tc/plc-active 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /VFFSDemo_HMI/Images/PLC/plc-exeption.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | icons/tc/plc-active 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /VFFSDemo_HMI/Themes/SPT-Base/Images/Placeholder/icons_home_active.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /VFFSDemo_HMI/Themes/SPT-Base/Images/Placeholder/icons_home_normal.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /VFFSDemo_HMI/Themes/SPT-Base/Images/Placeholder/icons_home_pressed.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /VFFSDemo_HMI/UserControls/Utilities/LabelWithNoFeedback.usercontrol: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 |
5 | 6 | 11 | 12 | 24 |
25 | 26 | 46 |
47 | 52 | 53 | 65 |
66 |
67 |
-------------------------------------------------------------------------------- /VFFSDemo_HMI/UserControls/Utilities/LabelWithDataFeedback.usercontrol: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 |
5 | 6 | 11 | 12 | 24 |
25 | 26 | 46 |
47 | 52 | 53 | 65 |
66 |
67 |
-------------------------------------------------------------------------------- /VFFSDemo_HMI/UserControls/Utilities/LabelWithDataFeedback2Row.usercontrol: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 |
5 | 6 | 7 | 8 | 20 | 21 | 26 |
27 | 28 | 29 |
30 | 35 | 36 | 48 |
49 | 50 | 70 |
71 |
-------------------------------------------------------------------------------- /VFFSDemo_HMI/UserControls/Utilities/LabelWithIndicator.usercontrol: -------------------------------------------------------------------------------- 1 |
2 |
3 | 8 | 9 | 10 | 11 | 77 |
78 |
-------------------------------------------------------------------------------- /VFFSDemo_HMI/UserControls/Utilities/ButtonWithIndicator.usercontrol.json: -------------------------------------------------------------------------------- 1 | { 2 | "parameters": [ 3 | { 4 | "name": "data-tchmi-label", 5 | "displayName": "Label", 6 | "visible": true, 7 | "type": "tchmi:general#/definitions/String", 8 | "category": "", 9 | "description": "", 10 | "requiredOnCompile": false, 11 | "readOnly": false, 12 | "bindable": true, 13 | "heritable": true, 14 | "propertyName": "Label", 15 | "propertySetterName": "setLabel", 16 | "propertyGetterName": "getLabel", 17 | "refTo": "" 18 | }, 19 | { 20 | "name": "data-tchmi-enabled", 21 | "displayName": "Enabled", 22 | "visible": true, 23 | "type": "tchmi:general#/definitions/Boolean", 24 | "category": "", 25 | "description": "", 26 | "defaultValue": false, 27 | "defaultValueInternal": false, 28 | "requiredOnCompile": false, 29 | "readOnly": false, 30 | "bindable": true, 31 | "heritable": true, 32 | "propertyName": "Enabled", 33 | "propertySetterName": "setEnabled", 34 | "propertyGetterName": "getEnabled", 35 | "refTo": "" 36 | }, 37 | { 38 | "name": "data-tchmi-buttonstate", 39 | "displayName": "ButtonState", 40 | "visible": true, 41 | "type": "tchmi:general#/definitions/Boolean", 42 | "category": "", 43 | "description": "", 44 | "defaultValue": false, 45 | "defaultValueInternal": false, 46 | "requiredOnCompile": false, 47 | "readOnly": false, 48 | "bindable": true, 49 | "heritable": true, 50 | "propertyName": "ButtonState", 51 | "propertySetterName": "setButtonState", 52 | "propertyGetterName": "getButtonState", 53 | "refTo": "" 54 | }, 55 | { 56 | "name": "data-tchmi-indicatorstate", 57 | "displayName": "IndicatorState", 58 | "visible": true, 59 | "type": "tchmi:general#/definitions/Boolean", 60 | "category": "", 61 | "description": "", 62 | "defaultValue": false, 63 | "defaultValueInternal": false, 64 | "requiredOnCompile": false, 65 | "readOnly": false, 66 | "bindable": true, 67 | "heritable": true, 68 | "propertyName": "IndicatorState", 69 | "propertySetterName": "setIndicatorState", 70 | "propertyGetterName": "getIndicatorState", 71 | "refTo": "" 72 | }, 73 | { 74 | "name": "data-tchmi-indicatorcolor", 75 | "displayName": "IndicatorColor", 76 | "visible": true, 77 | "type": "tchmi:framework#/definitions/SolidColor", 78 | "category": "", 79 | "description": "", 80 | "defaultValue": null, 81 | "defaultValueInternal": null, 82 | "requiredOnCompile": false, 83 | "readOnly": false, 84 | "bindable": true, 85 | "heritable": true, 86 | "propertyName": "IndicatorColor", 87 | "propertySetterName": "setIndicatorColor", 88 | "propertyGetterName": "getIndicatorColor", 89 | "refTo": "" 90 | } 91 | ], 92 | "virtualRights": [], 93 | "$schema": "./../../Packages/Beckhoff.TwinCAT.HMI.Framework.12.756.1/runtimes/native1.12-tchmi/Schema/UserControlConfig.Schema.json", 94 | "description": "" 95 | } -------------------------------------------------------------------------------- /VFFSDemo_HMI/Pages/Recipe/RecipeManagement.content: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 | 6 | 12 | 13 | 75 |
76 |
-------------------------------------------------------------------------------- /VFFSDemo_HMI/RecipeFunctions/ConvertDatagridToRecipe.js: -------------------------------------------------------------------------------- 1 | // Keep this lines for a best effort IntelliSense of Visual Studio 2017. 2 | /// 3 | /// 4 | /// 5 | 6 | // Keep this lines for a best effort IntelliSense of Visual Studio 2013/2015. 7 | /// 8 | /// 9 | 10 | (function (TcHmi) { 11 | 12 | var ConvertDatagridToRecipe = function (ctx,datagridControl,recipeReference) { 13 | if (!recipeReference) { 14 | // Stop (not abort) with null (binding without a value) or empty string 15 | ctx.success(); 16 | 17 | return; // We are running async so the return value is not used 18 | } 19 | if (!datagridControl) { 20 | // Stop (not abort) with null (binding without a value) 21 | ctx.success(); 22 | 23 | return; // We are running async so the return value is not used 24 | } 25 | // Fetches the current datagrid data 26 | var srcData = datagridControl.getSrcData(); 27 | if (!srcData || !Array.isArray(srcData)) { 28 | // Inform the system that we are done 29 | ctx.success(); 30 | 31 | return; // We are running async so the return value is not used 32 | } 33 | // Build up the dictionary with the correct values 34 | let newValue = {}; 35 | for (let i = 0; i < srcData.length; i++) { 36 | if (!srcData[i].memberName) { 37 | continue; 38 | } 39 | newValue[srcData[i].memberName] = srcData[i].newValue; 40 | } 41 | // Call server to update recipe 42 | TcHmi.Server.RecipeManagement.updateRecipe(recipeReference, null, newValue, function (data) { 43 | if (data.error) { 44 | // Inform the system that we are done but had an error 45 | ctx.error(data.error, { 46 | code: data.error, 47 | message: TcHmi.Errors[data.error], 48 | reason: 'Function: ConvertDatagridToRecipe, Recipe ' + recipeReference + ' update failed', 49 | domain: 'Function', 50 | errors: (data.details ? [data.details] : undefined) 51 | }); 52 | 53 | return; // We are running async so the return value is not used 54 | } else { 55 | // Inform the system that we are done 56 | ctx.success(); 57 | 58 | return; // We are running async so the return value is not used 59 | } 60 | }); 61 | 62 | return; // We are running async so the return value is not used 63 | }; 64 | 65 | TcHmi.Functions.registerFunction('ConvertDatagridToRecipe', ConvertDatagridToRecipe); 66 | })(TcHmi); -------------------------------------------------------------------------------- /VFFSDemo_HMI/RecipeFunctions/ConvertRecipeToDatagrid.js: -------------------------------------------------------------------------------- 1 | // Keep this lines for a best effort IntelliSense of Visual Studio 2017. 2 | /// 3 | /// 4 | /// 5 | 6 | // Keep this lines for a best effort IntelliSense of Visual Studio 2013/2015. 7 | /// 8 | /// 9 | 10 | (function (TcHmi) { 11 | 12 | var ConvertRecipeToDataGrid = function (ctx,recipeReference) { 13 | if (!recipeReference) { 14 | // Stop (not abort) with null (binding without a value) or empty string 15 | ctx.success(null); // setting null, as the setter of the datagrid must be called with the default 16 | 17 | return; // We are running async so the return value is not used 18 | } 19 | 20 | // Call server to fetch recipe 21 | TcHmi.Server.RecipeManagement.getRecipe(recipeReference, null, function (data) { 22 | if (data.error) { 23 | // Inform the system that we are done but had an error 24 | ctx.error(data.error, { 25 | code: data.error, 26 | message: TcHmi.Errors[data.error], 27 | reason: 'Function: ConvertRecipeToDataGrid, Recipe ' + recipeReference + ' fetching failed', 28 | domain: 'Function', 29 | errors: (data.details ? [data.details] : undefined) 30 | }); 31 | 32 | return; // We are running async so the return value is not used 33 | } else { 34 | // Check if the format of the recipe is known 35 | if (!data.value || !data.value.values) { 36 | // Inform the system that we are done but had an error 37 | ctx.error(TcHmi.Errors.E_PARAMETER_INVALID, { 38 | code: TcHmi.Errors.E_PARAMETER_INVALID, 39 | message: TcHmi.Errors[TcHmi.Errors.E_PARAMETER_INVALID], 40 | reason: 'Function: ConvertRecipeToDataGrid, Recipe ' + recipeReference + ' had wrong data format', 41 | domain: 'Function' 42 | }); 43 | 44 | return; // We are running async so the return value is not used 45 | } 46 | // Build up an array for the datagrid data (must match the SrcColumn of the datagrid) 47 | var result = []; 48 | for (var memberName in data.value.values) { 49 | result.push({ 50 | memberName: memberName, 51 | value: data.value.values[memberName], 52 | newValue: data.value.values[memberName] 53 | }); 54 | } 55 | // Inform the system that we are done and have a result 56 | ctx.success(result); 57 | 58 | return; // We are running async so the return value is not used 59 | } 60 | }); 61 | 62 | return; // We are running async so the return value is not used 63 | }; 64 | 65 | TcHmi.Functions.registerFunction('ConvertRecipeToDataGrid', ConvertRecipeToDataGrid); 66 | })(TcHmi); -------------------------------------------------------------------------------- /VFFSDemo_HMI/Imports/Images/reset_achse_normal.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 43 | 45 | 46 | 47 | 49 | 50 | 52 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | -------------------------------------------------------------------------------- /VFFSDemo_HMI/Imports/Images/start_normal.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 43 | 45 | 46 | 47 | 49 | 50 | 52 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | -------------------------------------------------------------------------------- /VFFSDemo_HMI/RecipeFunctions/DownloadRecipe.js: -------------------------------------------------------------------------------- 1 | // Keep this lines for a best effort IntelliSense of Visual Studio 2017. 2 | /// 3 | /// 4 | /// 5 | 6 | // Keep this lines for a best effort IntelliSense of Visual Studio 2013/2015. 7 | /// 8 | /// 9 | 10 | (function (TcHmi) { 11 | 12 | /** 13 | * 14 | * @param {TcHmi.Context} ctx 15 | * @param {string} recipeReference 16 | */ 17 | var DownloadRecipe = function (ctx, recipeReference) { 18 | if (!recipeReference) { 19 | // Stop (not abort) with null (binding without a value) or empty string 20 | ctx.success(); 21 | 22 | return; // We are running async so the return value is not used 23 | } 24 | 25 | TcHmi.Server.readSymbol("TcHmiRecipeManagement.Config::recipeList::" + recipeReference, function (data) { 26 | if (data.error) { 27 | // Inform the system that we are done but had an error 28 | ctx.error(data.error, { 29 | code: data.error, 30 | message: TcHmi.Errors[data.error], 31 | reason: 'Function: DownloadRecipe, Recipe ' + recipeReference + ' fetching failed', 32 | domain: 'Function', 33 | errors: (data.details ? [data.details] : undefined) 34 | }); 35 | 36 | return; // We are running async so the return value is not used 37 | } else { 38 | // Create a dummy HTMLAnchorElement 39 | var downloaderAElement = document.createElement('a'); 40 | 41 | // Define a nice download name 42 | downloaderAElement.download = recipeReference.replace(/::/g, '_') + '.json'; 43 | 44 | // Do not manipulate the incoming object 45 | let jsonExport = tchmi_clone_object(data.response); 46 | 47 | // Convert to an export 48 | jsonExport.commands[0].writeValue = jsonExport.commands[0].readValue; 49 | delete jsonExport.commands[0].readValue; 50 | delete jsonExport.sessionId; 51 | delete jsonExport.id; 52 | 53 | // Prepare "download" content 54 | downloaderAElement.href = 'data:application/json;utf8,' + 55 | JSON.stringify(jsonExport, null, 2); 56 | // Hide dummy element to prevent visual impact 57 | downloaderAElement.style.display = 'none'; 58 | // Append dummy element, so even Firefox allows a simulated click. 59 | document.body.appendChild(downloaderAElement); 60 | // Simulate a click. Works probably only if this action is triggered by a user interaction (not on load or symbol change) 61 | downloaderAElement.click(); 62 | // Remove dummy element 63 | document.body.removeChild(downloaderAElement); 64 | 65 | // Inform the system that we are done 66 | ctx.success(); 67 | return; // We are running async so the return value is not used 68 | } 69 | }); 70 | 71 | return; // We are running async so the return value is not used 72 | }; 73 | 74 | TcHmi.Functions.registerFunction('DownloadRecipe', DownloadRecipe); 75 | })(TcHmi); --------------------------------------------------------------------------------