Update queries, alarms, detailed views, tags, sorter, carriers, main overview and more.
@ -4,6 +4,38 @@
|
||||
"title": "",
|
||||
"viewPath": "Main-Views/Home"
|
||||
},
|
||||
"/CarrierSection1": {
|
||||
"title": "",
|
||||
"viewPath": "Additional-Home-View/CarrierSections/CarrierSection1"
|
||||
},
|
||||
"/CarrierSection2": {
|
||||
"title": "",
|
||||
"viewPath": "Additional-Home-View/CarrierSections/CarrierSection2"
|
||||
},
|
||||
"/CarrierSection3": {
|
||||
"title": "",
|
||||
"viewPath": "Additional-Home-View/CarrierSections/CarrierSection3"
|
||||
},
|
||||
"/CarrierSection4": {
|
||||
"title": "",
|
||||
"viewPath": "Additional-Home-View/CarrierSections/CarrierSection4"
|
||||
},
|
||||
"/CarrierSection5": {
|
||||
"title": "",
|
||||
"viewPath": "Additional-Home-View/CarrierSections/CarrierSection5"
|
||||
},
|
||||
"/CarrierSection6": {
|
||||
"title": "",
|
||||
"viewPath": "Additional-Home-View/CarrierSections/CarrierSection6"
|
||||
},
|
||||
"/CarrierSection7": {
|
||||
"title": "",
|
||||
"viewPath": "Additional-Home-View/CarrierSections/CarrierSection7"
|
||||
},
|
||||
"/CarrierSection8": {
|
||||
"title": "",
|
||||
"viewPath": "Additional-Home-View/CarrierSections/CarrierSection8"
|
||||
},
|
||||
"/Command": {
|
||||
"title": "",
|
||||
"viewPath": "Main-Views/CommandControl"
|
||||
@ -112,7 +144,7 @@
|
||||
"content": "cover",
|
||||
"handle": "hide",
|
||||
"iconUrl": "",
|
||||
"id": "Docked-East-TPR",
|
||||
"id": "Docked-Eas-TPR",
|
||||
"modal": false,
|
||||
"resizable": false,
|
||||
"show": "onDemand",
|
||||
|
||||
@ -0,0 +1,17 @@
|
||||
{
|
||||
"scope": "G",
|
||||
"version": 1,
|
||||
"restricted": false,
|
||||
"overridable": true,
|
||||
"files": [
|
||||
"view.json",
|
||||
"thumbnail.png"
|
||||
],
|
||||
"attributes": {
|
||||
"lastModification": {
|
||||
"actor": "admin",
|
||||
"timestamp": "2025-09-15T13:08:43Z"
|
||||
},
|
||||
"lastModificationSignature": "e45047d0b89a87dfe3ec4ef8b946cc6a44e5bb604a9f999a2eaa34e8c7c44826"
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 17 KiB |
@ -0,0 +1,17 @@
|
||||
{
|
||||
"scope": "G",
|
||||
"version": 1,
|
||||
"restricted": false,
|
||||
"overridable": true,
|
||||
"files": [
|
||||
"view.json",
|
||||
"thumbnail.png"
|
||||
],
|
||||
"attributes": {
|
||||
"lastModification": {
|
||||
"actor": "admin",
|
||||
"timestamp": "2025-09-15T12:18:04Z"
|
||||
},
|
||||
"lastModificationSignature": "d73d21cf7e1a814b1a47816f332cbb3b5b6d36670d532a878623376a68b9b5e1"
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 17 KiB |
@ -0,0 +1,17 @@
|
||||
{
|
||||
"scope": "G",
|
||||
"version": 1,
|
||||
"restricted": false,
|
||||
"overridable": true,
|
||||
"files": [
|
||||
"view.json",
|
||||
"thumbnail.png"
|
||||
],
|
||||
"attributes": {
|
||||
"lastModification": {
|
||||
"actor": "admin",
|
||||
"timestamp": "2025-09-15T12:18:13Z"
|
||||
},
|
||||
"lastModificationSignature": "3099b5a83c625737be45ef97e5e02aac2daeb3b58e4eea52894ef98ccb4a4f0c"
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 17 KiB |
@ -0,0 +1,17 @@
|
||||
{
|
||||
"scope": "G",
|
||||
"version": 1,
|
||||
"restricted": false,
|
||||
"overridable": true,
|
||||
"files": [
|
||||
"view.json",
|
||||
"thumbnail.png"
|
||||
],
|
||||
"attributes": {
|
||||
"lastModification": {
|
||||
"actor": "admin",
|
||||
"timestamp": "2025-09-15T12:22:51Z"
|
||||
},
|
||||
"lastModificationSignature": "569c7024ecb3f73cc726cc68564aac040aee878963db30c74d3297d5ab282593"
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 51 KiB |
@ -0,0 +1,17 @@
|
||||
{
|
||||
"scope": "G",
|
||||
"version": 1,
|
||||
"restricted": false,
|
||||
"overridable": true,
|
||||
"files": [
|
||||
"view.json",
|
||||
"thumbnail.png"
|
||||
],
|
||||
"attributes": {
|
||||
"lastModification": {
|
||||
"actor": "admin",
|
||||
"timestamp": "2025-09-15T12:19:17Z"
|
||||
},
|
||||
"lastModificationSignature": "972bd2606116b45ac3ff4289e2436d388d1d97c7b568715b8d15a729013b4b45"
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 17 KiB |
@ -0,0 +1,17 @@
|
||||
{
|
||||
"scope": "G",
|
||||
"version": 1,
|
||||
"restricted": false,
|
||||
"overridable": true,
|
||||
"files": [
|
||||
"view.json",
|
||||
"thumbnail.png"
|
||||
],
|
||||
"attributes": {
|
||||
"lastModification": {
|
||||
"actor": "admin",
|
||||
"timestamp": "2025-09-15T12:19:25Z"
|
||||
},
|
||||
"lastModificationSignature": "454bce302042d347bb4d839246d84c3e0caa9797f4efd8af56178a37f9cea539"
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 17 KiB |
@ -0,0 +1,17 @@
|
||||
{
|
||||
"scope": "G",
|
||||
"version": 1,
|
||||
"restricted": false,
|
||||
"overridable": true,
|
||||
"files": [
|
||||
"view.json",
|
||||
"thumbnail.png"
|
||||
],
|
||||
"attributes": {
|
||||
"lastModification": {
|
||||
"actor": "admin",
|
||||
"timestamp": "2025-09-15T12:21:45Z"
|
||||
},
|
||||
"lastModificationSignature": "f0f438778fb61c461248ccd1300a5d4033e1a97c43e2f0974d81ce27e4c3a9ce"
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 17 KiB |
@ -0,0 +1,17 @@
|
||||
{
|
||||
"scope": "G",
|
||||
"version": 1,
|
||||
"restricted": false,
|
||||
"overridable": true,
|
||||
"files": [
|
||||
"view.json",
|
||||
"thumbnail.png"
|
||||
],
|
||||
"attributes": {
|
||||
"lastModification": {
|
||||
"actor": "admin",
|
||||
"timestamp": "2025-09-15T12:25:04Z"
|
||||
},
|
||||
"lastModificationSignature": "e8ea43b198fac24e52c6842bbfed3755be0f473db32d8384c6b2ea38f2b9eb56"
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 42 KiB |
@ -0,0 +1,17 @@
|
||||
{
|
||||
"scope": "G",
|
||||
"version": 1,
|
||||
"restricted": false,
|
||||
"overridable": true,
|
||||
"files": [
|
||||
"view.json",
|
||||
"thumbnail.png"
|
||||
],
|
||||
"attributes": {
|
||||
"lastModification": {
|
||||
"actor": "admin",
|
||||
"timestamp": "2025-09-15T12:19:47Z"
|
||||
},
|
||||
"lastModificationSignature": "4993989dbd5cbc09af50a43cac6becc062adea8c175cc80659ea23a0a5b99289"
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 99 KiB |
@ -1,7 +1,7 @@
|
||||
{
|
||||
"custom": {},
|
||||
"params": {
|
||||
"Tab_ID": 1,
|
||||
"Tab_ID": 0,
|
||||
"Table": "Statistics"
|
||||
},
|
||||
"propConfig": {
|
||||
@ -2133,26 +2133,26 @@
|
||||
"$": [
|
||||
"ds",
|
||||
192,
|
||||
1757517367414
|
||||
1758187720791
|
||||
],
|
||||
"$columns": [
|
||||
{
|
||||
"data": [
|
||||
"2025-09-10 19:00"
|
||||
"2025-09-18 12:00"
|
||||
],
|
||||
"name": "Start Timestamp",
|
||||
"type": "String"
|
||||
},
|
||||
{
|
||||
"data": [
|
||||
"H0"
|
||||
"H1"
|
||||
],
|
||||
"name": "Hour",
|
||||
"type": "String"
|
||||
},
|
||||
{
|
||||
"data": [
|
||||
1
|
||||
0
|
||||
],
|
||||
"name": "Cycles of ULGL1",
|
||||
"type": "Double"
|
||||
@ -2166,14 +2166,14 @@
|
||||
},
|
||||
{
|
||||
"data": [
|
||||
1
|
||||
0
|
||||
],
|
||||
"name": "Cycles of ULGL3",
|
||||
"type": "Double"
|
||||
},
|
||||
{
|
||||
"data": [
|
||||
2
|
||||
0
|
||||
],
|
||||
"name": "Cycles of ULGL4",
|
||||
"type": "Double"
|
||||
@ -2212,11 +2212,11 @@
|
||||
"dataSources": {
|
||||
"example": [
|
||||
{
|
||||
"Hour": "H0",
|
||||
"ULGL1": 1,
|
||||
"Hour": "H1",
|
||||
"ULGL1": 0,
|
||||
"ULGL2": 0,
|
||||
"ULGL3": 1,
|
||||
"ULGL4": 2
|
||||
"ULGL3": 0,
|
||||
"ULGL4": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
@ -3421,7 +3421,6 @@
|
||||
}
|
||||
},
|
||||
"props": {
|
||||
"currentTabIndex": 1,
|
||||
"menuStyle": {
|
||||
"backgroundColor": "#FFFFFFBD",
|
||||
"fontSize": "1.0vmin",
|
||||
@ -3433,21 +3432,21 @@
|
||||
"width": "100%"
|
||||
},
|
||||
"tabSize": {
|
||||
"width": 160
|
||||
"width": 150
|
||||
},
|
||||
"tabStyle": {
|
||||
"active": {
|
||||
"flexBasis": 0,
|
||||
"flexGrow": 1,
|
||||
"fontSize": "1.0vmin"
|
||||
"fontSize": "1.5vmin"
|
||||
},
|
||||
"disabled": {
|
||||
"fontSize": "1.0vmin"
|
||||
"fontSize": "1.5vmin"
|
||||
},
|
||||
"inactive": {
|
||||
"flexBasis": 0,
|
||||
"flexGrow": 1,
|
||||
"fontSize": "1.0vmin"
|
||||
"fontSize": "1.5vmin"
|
||||
}
|
||||
},
|
||||
"tabs": [
|
||||
@ -5967,7 +5966,7 @@
|
||||
},
|
||||
"props": {
|
||||
"dismissOnSelect": false,
|
||||
"formattedValue": "Sep 10, 2025 6:16 PM",
|
||||
"formattedValue": "Sep 18, 2025 12:28 PM",
|
||||
"formattedValues": {
|
||||
"date": "Mar 26, 2021",
|
||||
"datetime": "Mar 26, 2021 12:00 AM",
|
||||
@ -5985,9 +5984,9 @@
|
||||
"$": [
|
||||
"ts",
|
||||
192,
|
||||
1757517367408
|
||||
1758187720789
|
||||
],
|
||||
"$ts": 1757513767000
|
||||
"$ts": 1758184120000
|
||||
}
|
||||
},
|
||||
"type": "ia.input.date-time-input"
|
||||
@ -6138,7 +6137,7 @@
|
||||
},
|
||||
"props": {
|
||||
"dismissOnSelect": false,
|
||||
"formattedValue": "Sep 10, 2025 7:16 PM",
|
||||
"formattedValue": "Sep 18, 2025 1:28 PM",
|
||||
"formattedValues": {
|
||||
"date": "Mar 29, 2021",
|
||||
"datetime": "Mar 29, 2021 1:37 PM",
|
||||
@ -6156,9 +6155,9 @@
|
||||
"$": [
|
||||
"ts",
|
||||
192,
|
||||
1757517367408
|
||||
1758187720789
|
||||
],
|
||||
"$ts": 1757517367000
|
||||
"$ts": 1758187720000
|
||||
}
|
||||
},
|
||||
"type": "ia.input.date-time-input"
|
||||
|
||||
@ -3,8 +3,8 @@
|
||||
"currentTab": null
|
||||
},
|
||||
"params": {
|
||||
"Tab_ID": 0,
|
||||
"Table": "Status_tab"
|
||||
"Tab_ID": null,
|
||||
"Table": null
|
||||
},
|
||||
"propConfig": {
|
||||
"custom.currentTab": {
|
||||
@ -151,7 +151,7 @@
|
||||
"component": {
|
||||
"onActionPerformed": {
|
||||
"config": {
|
||||
"script": "\tif self.parent.custom.TabName \u003d\u003d \"DPMs\":\n\t\tself.session.custom.show_dpm_view \u003d False\n\t\tself.session.custom.show_dpm_device_view \u003d False\n\tif self.parent.custom.TabName \u003d\u003d \"Devices\":\n\t\tself.session.custom.show_dpm_device_view \u003d False\n\t\tself.session.custom.show_dpm_view \u003d False"
|
||||
"script": "\tif self.parent.custom.TabName \u003d\u003d \"DPMs\":\n\t\tself.session.custom.show_dpm_view \u003d False\n\t\tself.session.custom.show_dpm_device_view \u003d False\n\tif self.parent.custom.TabName \u003d\u003d \"Devices\":\n\t\tself.session.custom.show_dpm_device_view \u003d False\n\t\tself.session.custom.show_dpm_view \u003d False\n\tsystem.perspective.closeDock(\u0027Docked-East-VFD\u0027)\n\tsystem.perspective.closeDock(\u0027Docked-East-DS\u0027)\n\tsystem.perspective.closeDock(\u0027Docked-East-TPR\u0027)\n\tsystem.perspective.closeDock(\u0027Docked-East-Extendo\u0027)\n\tsystem.perspective.closeDock(\u0027Docked-East-MCM\u0027)"
|
||||
},
|
||||
"scope": "G",
|
||||
"type": "script"
|
||||
|
||||
@ -17,65 +17,6 @@
|
||||
},
|
||||
"root": {
|
||||
"children": [
|
||||
{
|
||||
"children": [
|
||||
{
|
||||
"meta": {
|
||||
"name": "Label"
|
||||
},
|
||||
"position": {
|
||||
"height": 0.6613,
|
||||
"width": 0.9999,
|
||||
"y": 0.3387
|
||||
},
|
||||
"propConfig": {
|
||||
"props.text": {
|
||||
"binding": {
|
||||
"config": {
|
||||
"path": "view.params.MCM"
|
||||
},
|
||||
"type": "property"
|
||||
}
|
||||
}
|
||||
},
|
||||
"props": {
|
||||
"style": {
|
||||
"borderColor": "#1A1A1A",
|
||||
"borderStyle": "solid",
|
||||
"overflow": "visible",
|
||||
"whiteSpace": "normal",
|
||||
"wordBreak": "break-all"
|
||||
},
|
||||
"textStyle": {
|
||||
"fontFamily": "inherit",
|
||||
"fontSize": "1vmin",
|
||||
"textAlign": "center"
|
||||
}
|
||||
},
|
||||
"type": "ia.display.label"
|
||||
}
|
||||
],
|
||||
"meta": {
|
||||
"name": "CoordinateContainer"
|
||||
},
|
||||
"position": {
|
||||
"height": 0.1211,
|
||||
"rotate": {
|
||||
"anchor": "-132% -413%"
|
||||
},
|
||||
"width": 0.7094,
|
||||
"x": 0.1452,
|
||||
"y": 0.065
|
||||
},
|
||||
"props": {
|
||||
"mode": "percent",
|
||||
"style": {
|
||||
"overflow": "hidden",
|
||||
"transform": "scale(1)"
|
||||
}
|
||||
},
|
||||
"type": "ia.container.coord"
|
||||
},
|
||||
{
|
||||
"meta": {
|
||||
"name": "EN4TR"
|
||||
@ -3717,13 +3658,53 @@
|
||||
"viewBox": "0 0 64.847 270.00001"
|
||||
},
|
||||
"type": "ia.shapes.svg"
|
||||
},
|
||||
{
|
||||
"meta": {
|
||||
"name": "Label"
|
||||
},
|
||||
"position": {
|
||||
"height": 0.074,
|
||||
"width": 0.7028,
|
||||
"x": 0.1444,
|
||||
"y": 0.1245
|
||||
},
|
||||
"propConfig": {
|
||||
"props.text": {
|
||||
"binding": {
|
||||
"config": {
|
||||
"path": "view.params.MCM"
|
||||
},
|
||||
"type": "property"
|
||||
}
|
||||
}
|
||||
},
|
||||
"props": {
|
||||
"style": {
|
||||
"borderColor": "#1A1A1A",
|
||||
"borderStyle": "solid",
|
||||
"whiteSpace": "normal",
|
||||
"wordBreak": "break-all"
|
||||
},
|
||||
"textStyle": {
|
||||
"fontFamily": "inherit",
|
||||
"fontSize": "1vmin",
|
||||
"textAlign": "center"
|
||||
}
|
||||
},
|
||||
"type": "ia.display.label"
|
||||
}
|
||||
],
|
||||
"meta": {
|
||||
"name": "root"
|
||||
},
|
||||
"props": {
|
||||
"mode": "percent"
|
||||
"mode": "percent",
|
||||
"style": {
|
||||
"borderStyle": "solid",
|
||||
"borderWidth": 3,
|
||||
"overflow": "hidden"
|
||||
}
|
||||
},
|
||||
"type": "ia.container.coord"
|
||||
}
|
||||
|
||||
@ -32,9 +32,9 @@
|
||||
"name": "MCM01_PLC"
|
||||
},
|
||||
"position": {
|
||||
"height": 0.5649,
|
||||
"width": 0.063,
|
||||
"x": 0.1353,
|
||||
"height": 0.5727,
|
||||
"width": 0.08,
|
||||
"x": 0.1354,
|
||||
"y": 0.0313
|
||||
},
|
||||
"props": {
|
||||
@ -42,7 +42,12 @@
|
||||
"MCM": "MCM01",
|
||||
"view": "Windows/Tabs/Enternet Windows/DPMs/MCM01-DPM"
|
||||
},
|
||||
"path": "Windows/Tabs/Enternet Windows/Components/PLC"
|
||||
"path": "Windows/Tabs/Enternet Windows/Components/PLC",
|
||||
"style": {
|
||||
"overflow": "hidden"
|
||||
},
|
||||
"useDefaultViewHeight": true,
|
||||
"useDefaultViewWidth": true
|
||||
},
|
||||
"type": "ia.display.view"
|
||||
},
|
||||
@ -62,17 +67,22 @@
|
||||
"name": "MCM02_PLC"
|
||||
},
|
||||
"position": {
|
||||
"height": 0.5649,
|
||||
"width": 0.063,
|
||||
"x": 0.3019,
|
||||
"y": 0.382
|
||||
"height": 0.5727,
|
||||
"width": 0.08,
|
||||
"x": 0.3021,
|
||||
"y": 0.3826
|
||||
},
|
||||
"props": {
|
||||
"params": {
|
||||
"MCM": "MCM02",
|
||||
"view": "Windows/Tabs/Enternet Windows/DPMs/MCM02-DPM"
|
||||
},
|
||||
"path": "Windows/Tabs/Enternet Windows/Components/PLC"
|
||||
"path": "Windows/Tabs/Enternet Windows/Components/PLC",
|
||||
"style": {
|
||||
"overflow": "hidden"
|
||||
},
|
||||
"useDefaultViewHeight": true,
|
||||
"useDefaultViewWidth": true
|
||||
},
|
||||
"type": "ia.display.view"
|
||||
},
|
||||
@ -92,9 +102,9 @@
|
||||
"name": "MCM03_PLC"
|
||||
},
|
||||
"position": {
|
||||
"height": 0.5649,
|
||||
"width": 0.063,
|
||||
"x": 0.4686,
|
||||
"height": 0.5727,
|
||||
"width": 0.08,
|
||||
"x": 0.4688,
|
||||
"y": 0.0638
|
||||
},
|
||||
"props": {
|
||||
@ -102,7 +112,12 @@
|
||||
"MCM": "MCM03",
|
||||
"view": "Windows/Tabs/Enternet Windows/DPMs/MCM03-DPM"
|
||||
},
|
||||
"path": "Windows/Tabs/Enternet Windows/Components/PLC"
|
||||
"path": "Windows/Tabs/Enternet Windows/Components/PLC",
|
||||
"style": {
|
||||
"overflow": "hidden"
|
||||
},
|
||||
"useDefaultViewHeight": true,
|
||||
"useDefaultViewWidth": true
|
||||
},
|
||||
"type": "ia.display.view"
|
||||
},
|
||||
@ -122,8 +137,8 @@
|
||||
"name": "MCM04_PLC"
|
||||
},
|
||||
"position": {
|
||||
"height": 0.5649,
|
||||
"width": 0.063,
|
||||
"height": 0.5727,
|
||||
"width": 0.08,
|
||||
"x": 0.6359,
|
||||
"y": 0.3926
|
||||
},
|
||||
@ -132,7 +147,12 @@
|
||||
"MCM": "MCM04",
|
||||
"view": "Windows/Tabs/Enternet Windows/DPMs/MCM04-DPM"
|
||||
},
|
||||
"path": "Windows/Tabs/Enternet Windows/Components/PLC"
|
||||
"path": "Windows/Tabs/Enternet Windows/Components/PLC",
|
||||
"style": {
|
||||
"overflow": "hidden"
|
||||
},
|
||||
"useDefaultViewHeight": true,
|
||||
"useDefaultViewWidth": true
|
||||
},
|
||||
"type": "ia.display.view"
|
||||
},
|
||||
@ -152,17 +172,22 @@
|
||||
"name": "MCM05_PLC"
|
||||
},
|
||||
"position": {
|
||||
"height": 0.5649,
|
||||
"width": 0.063,
|
||||
"x": 0.8017,
|
||||
"y": 0.0766
|
||||
"height": 0.5727,
|
||||
"width": 0.08,
|
||||
"x": 0.8016,
|
||||
"y": 0.0761
|
||||
},
|
||||
"props": {
|
||||
"params": {
|
||||
"MCM": "MCM05",
|
||||
"view": "Windows/Tabs/Enternet Windows/DPMs/MCM05-DPM"
|
||||
},
|
||||
"path": "Windows/Tabs/Enternet Windows/Components/PLC"
|
||||
"path": "Windows/Tabs/Enternet Windows/Components/PLC",
|
||||
"style": {
|
||||
"overflow": "hidden"
|
||||
},
|
||||
"useDefaultViewHeight": true,
|
||||
"useDefaultViewWidth": true
|
||||
},
|
||||
"type": "ia.display.view"
|
||||
},
|
||||
@ -173,16 +198,24 @@
|
||||
"name": "Communication_Faulted_Text"
|
||||
},
|
||||
"position": {
|
||||
"height": 6.88,
|
||||
"width": 432,
|
||||
"x": 131.69440649414062,
|
||||
"y": 65.8918
|
||||
"height": 0.4836,
|
||||
"width": 0.8826,
|
||||
"x": 0.0701,
|
||||
"y": -0.0785
|
||||
},
|
||||
"props": {
|
||||
"style": {
|
||||
"fontSize": 30
|
||||
"borderColor": "#1A1A1A",
|
||||
"overflow": "hidden",
|
||||
"whiteSpace": "normal",
|
||||
"wordBreak": "break-all"
|
||||
},
|
||||
"text": "Communication Faulted"
|
||||
"text": "Communication Faulted",
|
||||
"textStyle": {
|
||||
"fontFamily": "inherit",
|
||||
"fontSize": "2vmin",
|
||||
"textAlign": "start"
|
||||
}
|
||||
},
|
||||
"type": "ia.display.label"
|
||||
},
|
||||
@ -191,16 +224,24 @@
|
||||
"name": "Communication_Not_Faulted_Text"
|
||||
},
|
||||
"position": {
|
||||
"height": 6.88,
|
||||
"width": 483,
|
||||
"x": 131.84,
|
||||
"y": 126.29181274414066
|
||||
"height": 0.6066,
|
||||
"width": 0.9032,
|
||||
"x": 0.0698,
|
||||
"y": 0.247
|
||||
},
|
||||
"props": {
|
||||
"style": {
|
||||
"fontSize": 30
|
||||
"borderColor": "#1A1A1A",
|
||||
"overflow": "hidden",
|
||||
"whiteSpace": "normal",
|
||||
"wordBreak": "break-all"
|
||||
},
|
||||
"text": "Communication Not Faulted"
|
||||
"text": "Communication Not Faulted",
|
||||
"textStyle": {
|
||||
"fontFamily": "inherit",
|
||||
"fontSize": "2vmin",
|
||||
"textAlign": "start"
|
||||
}
|
||||
},
|
||||
"type": "ia.display.label"
|
||||
},
|
||||
@ -209,10 +250,10 @@
|
||||
"name": "CoordinateContainer_0"
|
||||
},
|
||||
"position": {
|
||||
"height": 6,
|
||||
"width": 94,
|
||||
"x": 22.48,
|
||||
"y": 68.06
|
||||
"height": 0.0242,
|
||||
"width": 0.0508,
|
||||
"x": 0.0122,
|
||||
"y": 0.176
|
||||
},
|
||||
"props": {
|
||||
"style": {
|
||||
@ -226,10 +267,10 @@
|
||||
"name": "CoordinateContainer_1"
|
||||
},
|
||||
"position": {
|
||||
"height": 6,
|
||||
"width": 94,
|
||||
"x": 22.48,
|
||||
"y": 128.06
|
||||
"height": 0.0242,
|
||||
"width": 0.0508,
|
||||
"x": 0.0122,
|
||||
"y": 0.5164
|
||||
},
|
||||
"props": {
|
||||
"style": {
|
||||
@ -243,10 +284,13 @@
|
||||
"name": "CoordinateContainer"
|
||||
},
|
||||
"position": {
|
||||
"height": 0.2151,
|
||||
"width": 0.3464,
|
||||
"height": 0.1365,
|
||||
"width": 0.9635,
|
||||
"x": 0.0083,
|
||||
"y": 0.7129
|
||||
"y": 0.7752
|
||||
},
|
||||
"props": {
|
||||
"mode": "percent"
|
||||
},
|
||||
"type": "ia.container.coord"
|
||||
}
|
||||
|
||||
194352
SAT9_TAGS.json
Normal file
@ -1,7 +1,7 @@
|
||||
{
|
||||
"custom": {
|
||||
"MCM": 1,
|
||||
"currentTable": "ACTIVE",
|
||||
"MCM": "",
|
||||
"currentTable": "HISTORY",
|
||||
"page": "",
|
||||
"view": ""
|
||||
},
|
||||
@ -91,6 +91,14 @@
|
||||
{
|
||||
"children": [
|
||||
{
|
||||
"custom": {
|
||||
"priority": {
|
||||
"diagnostic": true,
|
||||
"high": true,
|
||||
"low": true,
|
||||
"medium": true
|
||||
}
|
||||
},
|
||||
"events": {
|
||||
"component": {
|
||||
"onRowDoubleClick": {
|
||||
@ -110,6 +118,20 @@
|
||||
"grow": 1
|
||||
},
|
||||
"propConfig": {
|
||||
"custom.priorities": {
|
||||
"binding": {
|
||||
"config": {
|
||||
"path": "this.custom.priority"
|
||||
},
|
||||
"transforms": [
|
||||
{
|
||||
"code": "\t# value looks like: {\"diagnostic\": True, \"high\": True, \"low\": False, ...}\n\tfrom system.util import jsonEncode, jsonDecode\n\t\n\tprio_map \u003d {\u0027diagnostic\u0027:0,\u0027low\u0027:1,\u0027medium\u0027:2,\u0027high\u0027:3,\u0027critical\u0027:4}\n\t\n\t# Coerce Perspective objects (PyDictionary/Java Map) to a plain Python dict\n\ttry:\n\t d \u003d value if isinstance(value, dict) else jsonDecode(jsonEncode(value))\n\texcept:\n\t d \u003d {}\n\t\n\t# Normalize keys and build CSV (\u0027\u0027 means \"all\")\n\tenabled \u003d [str(prio_map[k]) for k in prio_map if bool(d.get(k, False))]\n\treturn \",\".join(enabled) if enabled else \"\"",
|
||||
"type": "script"
|
||||
}
|
||||
],
|
||||
"type": "property"
|
||||
}
|
||||
},
|
||||
"position.display": {
|
||||
"binding": {
|
||||
"config": {
|
||||
@ -2047,6 +2069,11 @@
|
||||
"props.data": {
|
||||
"binding": {
|
||||
"config": {
|
||||
"parameters": {
|
||||
"endtime": "dateArithmetic(now(1000), 1, \"days\")",
|
||||
"offset": "100",
|
||||
"starttime": "now(1000)"
|
||||
},
|
||||
"polling": {
|
||||
"enabled": true,
|
||||
"rate": "3"
|
||||
@ -2524,7 +2551,7 @@
|
||||
},
|
||||
"render": "auto",
|
||||
"resizable": true,
|
||||
"sort": "none",
|
||||
"sort": "ascending",
|
||||
"sortable": true,
|
||||
"strictWidth": false,
|
||||
"style": {
|
||||
@ -3019,7 +3046,10 @@
|
||||
},
|
||||
"pager": {
|
||||
"bottom": false
|
||||
}
|
||||
},
|
||||
"sortOrder": [
|
||||
"Description"
|
||||
]
|
||||
},
|
||||
"scripts": {
|
||||
"customMethods": [],
|
||||
@ -3204,13 +3234,18 @@
|
||||
},
|
||||
{
|
||||
"meta": {
|
||||
"name": "Label"
|
||||
"name": "FlexContainer"
|
||||
},
|
||||
"position": {
|
||||
"basis": "50px",
|
||||
"basis": "852px",
|
||||
"grow": 1
|
||||
},
|
||||
"type": "ia.display.label"
|
||||
"props": {
|
||||
"style": {
|
||||
"backgroundColor": "#FFFFFF"
|
||||
}
|
||||
},
|
||||
"type": "ia.container.flex"
|
||||
}
|
||||
],
|
||||
"meta": {
|
||||
|
||||
@ -5,9 +5,7 @@
|
||||
"MCM02",
|
||||
"MCM03",
|
||||
"MCM04",
|
||||
"MCM05",
|
||||
"MCM06",
|
||||
"MCM07"
|
||||
"MCM05"
|
||||
],
|
||||
"button_type": "UNKNOWN",
|
||||
"type": 0
|
||||
@ -212,6 +210,11 @@
|
||||
"basis": "30px",
|
||||
"shrink": 0
|
||||
},
|
||||
"props": {
|
||||
"style": {
|
||||
"overflow": "hidden"
|
||||
}
|
||||
},
|
||||
"type": "ia.container.flex"
|
||||
},
|
||||
{
|
||||
@ -1844,7 +1847,6 @@
|
||||
}
|
||||
},
|
||||
"props": {
|
||||
"currentTabIndex": 1,
|
||||
"menuType": "modern",
|
||||
"tabSize": {
|
||||
"width": 1000
|
||||
|
||||
@ -5,9 +5,7 @@
|
||||
"MCM02",
|
||||
"MCM03",
|
||||
"MCM04",
|
||||
"MCM05",
|
||||
"MCM06",
|
||||
"MCM07"
|
||||
"MCM05"
|
||||
],
|
||||
"color": "#C2C2C2",
|
||||
"state": "Closed"
|
||||
@ -475,6 +473,11 @@
|
||||
"basis": "30px",
|
||||
"shrink": 0
|
||||
},
|
||||
"props": {
|
||||
"style": {
|
||||
"overflow": "hidden"
|
||||
}
|
||||
},
|
||||
"type": "ia.container.flex"
|
||||
},
|
||||
{
|
||||
@ -773,20 +776,15 @@
|
||||
},
|
||||
"type": "expr"
|
||||
}
|
||||
},
|
||||
"props.textStyle.color": {
|
||||
"binding": {
|
||||
"config": {
|
||||
"expression": "if({view.custom.state}\u003d\"Closed\", \"#000000\", {view.custom.color})"
|
||||
},
|
||||
"type": "expr"
|
||||
}
|
||||
}
|
||||
},
|
||||
"props": {
|
||||
"style": {
|
||||
"classes": "Text-Styles/Ariel-Bold-12pt",
|
||||
"paddingLeft": 10
|
||||
},
|
||||
"textStyle": {
|
||||
"color": "#000000"
|
||||
}
|
||||
},
|
||||
"type": "ia.display.label"
|
||||
|
||||
@ -7,11 +7,12 @@
|
||||
"$": [
|
||||
"ts",
|
||||
192,
|
||||
1754393666432
|
||||
1758189672504
|
||||
],
|
||||
"$ts": 1754393666432
|
||||
"$ts": 1758189672504
|
||||
}
|
||||
}
|
||||
},
|
||||
"deviceMapping": {}
|
||||
},
|
||||
"events": {
|
||||
"system": {
|
||||
@ -104,7 +105,7 @@
|
||||
"component": {
|
||||
"onRowDoubleClick": {
|
||||
"config": {
|
||||
"script": "\trow \u003d event.value\n\tsource_id \u003d row.get(\"SourceId\") \n\tconfig.project_config.source_id_lookup(self, source_id)\n\tsystem.perspective.closePopup(id \u003d \"Search\")"
|
||||
"script": "\trow \u003d event.value\n\tdevice_name \u003d row.get(\"SourceId\")\n\t\n\t# Find the full path from the original data\n\tids \u003d config.project_config.global_project_page_ids\n\tfull_source_id \u003d None\n\t\n\tfor k, v in ids.items():\n\t if str(k).endswith(\"/\" + device_name) or str(k) \u003d\u003d device_name:\n\t full_source_id \u003d str(k)\n\t break\n\t\n\tif full_source_id:\n\t config.project_config.source_id_lookup(self, full_source_id)\n\telse:\n\t config.project_config.source_id_lookup(self, device_name)\n\t\n\tsystem.perspective.closePopup(id \u003d \"Search\")"
|
||||
},
|
||||
"scope": "G",
|
||||
"type": "script"
|
||||
@ -130,6 +131,26 @@
|
||||
"dateFormat": "MM/DD/YYYY",
|
||||
"editable": false,
|
||||
"field": "SourceId",
|
||||
"filter": {
|
||||
"boolean": {
|
||||
"condition": "",
|
||||
"value": ""
|
||||
},
|
||||
"date": {
|
||||
"condition": "",
|
||||
"value": ""
|
||||
},
|
||||
"enabled": true,
|
||||
"number": {
|
||||
"condition": "",
|
||||
"value": ""
|
||||
},
|
||||
"string": {
|
||||
"condition": "",
|
||||
"value": ""
|
||||
},
|
||||
"visible": "never"
|
||||
},
|
||||
"footer": {
|
||||
"align": "center",
|
||||
"justify": "left",
|
||||
@ -289,7 +310,7 @@
|
||||
"$": [
|
||||
"ds",
|
||||
192,
|
||||
1754393747032
|
||||
1758189672544
|
||||
],
|
||||
"$columns": [
|
||||
{
|
||||
@ -312,13 +333,12 @@
|
||||
}
|
||||
},
|
||||
"headerStyle": {
|
||||
"backgroundColor": "#2B2B2B",
|
||||
"color": "#FFFFFF",
|
||||
"backgroundColor": "#D3D3D3",
|
||||
"textIndent": "15px"
|
||||
},
|
||||
"pager": {
|
||||
"style": {
|
||||
"backgroundColor": "#2B2B2B",
|
||||
"backgroundColor": "#D3D3D3",
|
||||
"color": "#FFFFFF",
|
||||
"fontWeight": "bold"
|
||||
}
|
||||
@ -353,7 +373,7 @@
|
||||
"system": {
|
||||
"onStartup": {
|
||||
"config": {
|
||||
"script": "\tids \u003d config.project_config.global_project_page_ids\n\tdata \u003d []\n\t\n\tfor k, v in ids.items():\n\t short_page \u003d str(v)[:5]\n\t data.append([str(k), short_page])\n\t\n\theader \u003d [\"SourceId\", \"Page\"]\n\tdataset \u003d system.dataset.toDataSet(header, data)\n\t\n\t# Assign to the Table component\n\tself.getChild(\"Table\").props.data \u003d dataset"
|
||||
"script": "\tids \u003d config.project_config.global_project_page_ids\n\tdata \u003d []\n\t\n\tfor k, v in ids.items():\n\t # Extract device name from full path (last part after final slash)\n\t device_name \u003d str(k)\n\t if \"/\" in device_name:\n\t device_name \u003d device_name.split(\"/\")[-1]\n\t \n\t short_page \u003d str(v)[:5]\n\t data.append([device_name, short_page])\n\t\n\theader \u003d [\"SourceId\", \"Page\"]\n\tdataset \u003d system.dataset.toDataSet(header, data)\n\t\n\t# Assign to the Table component\n\tself.getChild(\"Table\").props.data \u003d dataset"
|
||||
},
|
||||
"scope": "G",
|
||||
"type": "script"
|
||||
|
||||
@ -1,17 +0,0 @@
|
||||
{
|
||||
"scope": "G",
|
||||
"version": 1,
|
||||
"restricted": false,
|
||||
"overridable": false,
|
||||
"files": [
|
||||
"view.json",
|
||||
"thumbnail.png"
|
||||
],
|
||||
"attributes": {
|
||||
"lastModification": {
|
||||
"actor": "external",
|
||||
"timestamp": "2025-04-08T09:28:16Z"
|
||||
},
|
||||
"lastModificationSignature": "a1770ccc873f6bbdc4c11e4654fdfd398e653678deddf6ff2c6d5854df9a029c"
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 5.1 KiB |
@ -1,592 +0,0 @@
|
||||
{
|
||||
"custom": {},
|
||||
"params": {
|
||||
"tagProps": [
|
||||
"",
|
||||
"value",
|
||||
"value",
|
||||
"value",
|
||||
"value",
|
||||
"value",
|
||||
"value",
|
||||
"value",
|
||||
"value",
|
||||
"value"
|
||||
]
|
||||
},
|
||||
"propConfig": {
|
||||
"params.tagProps": {
|
||||
"paramDirection": "input",
|
||||
"persistent": true
|
||||
}
|
||||
},
|
||||
"props": {
|
||||
"defaultSize": {
|
||||
"height": 212,
|
||||
"width": 336
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"children": [
|
||||
{
|
||||
"meta": {
|
||||
"name": "Label_0"
|
||||
},
|
||||
"position": {
|
||||
"basis": "60px"
|
||||
},
|
||||
"propConfig": {
|
||||
"props.text": {
|
||||
"binding": {
|
||||
"config": {
|
||||
"path": "view.params.tagProps[0]"
|
||||
},
|
||||
"type": "property"
|
||||
}
|
||||
}
|
||||
},
|
||||
"props": {
|
||||
"style": {
|
||||
"backgroundColor": "#555555",
|
||||
"borderBottomLeftRadius": 5,
|
||||
"borderBottomRightRadius": 5,
|
||||
"borderTopLeftRadius": 5,
|
||||
"borderTopRightRadius": 5,
|
||||
"marginLeft": 0,
|
||||
"marginRight": 0,
|
||||
"marginTop": 0
|
||||
},
|
||||
"textStyle": {
|
||||
"textAlign": "start",
|
||||
"textIndent": 10
|
||||
}
|
||||
},
|
||||
"type": "ia.display.label"
|
||||
},
|
||||
{
|
||||
"children": [
|
||||
{
|
||||
"meta": {
|
||||
"name": "Label_0"
|
||||
},
|
||||
"position": {
|
||||
"basis": "50px"
|
||||
},
|
||||
"props": {
|
||||
"style": {
|
||||
"marginLeft": 10
|
||||
},
|
||||
"text": "AREA",
|
||||
"textStyle": {
|
||||
"fontFamily": "Roboto",
|
||||
"fontSize": 12
|
||||
}
|
||||
},
|
||||
"type": "ia.display.label"
|
||||
},
|
||||
{
|
||||
"meta": {
|
||||
"name": "Label"
|
||||
},
|
||||
"position": {
|
||||
"basis": "195px"
|
||||
},
|
||||
"propConfig": {
|
||||
"props.text": {
|
||||
"binding": {
|
||||
"config": {
|
||||
"fallbackDelay": 2.5,
|
||||
"mode": "indirect",
|
||||
"references": {
|
||||
"0": "{view.params.tagProps[0]}"
|
||||
},
|
||||
"tagPath": "{0}/Config/cfg"
|
||||
},
|
||||
"transforms": [
|
||||
{
|
||||
"code": " decode \u003d system.util.jsonDecode(value)\n area \u003d decode.get(\"Area\")\n sub_area \u003d decode.get(\"SubArea\")\n area_label \u003d str(area) + \"/\" + str(sub_area)\n return area_label\n\t",
|
||||
"type": "script"
|
||||
}
|
||||
],
|
||||
"type": "tag"
|
||||
}
|
||||
}
|
||||
},
|
||||
"props": {
|
||||
"style": {
|
||||
"marginLeft": 50
|
||||
},
|
||||
"textStyle": {
|
||||
"fontSize": 12
|
||||
}
|
||||
},
|
||||
"type": "ia.display.label"
|
||||
}
|
||||
],
|
||||
"meta": {
|
||||
"name": "FlexContainer_0"
|
||||
},
|
||||
"position": {
|
||||
"basis": "80px"
|
||||
},
|
||||
"props": {
|
||||
"style": {
|
||||
"borderBottomColor": "#555555",
|
||||
"borderBottomStyle": "solid",
|
||||
"borderBottomWidth": 0.5,
|
||||
"borderLeftColor": "#555555",
|
||||
"borderLeftStyle": "none",
|
||||
"borderLeftWidth": 0.5,
|
||||
"borderRightColor": "#555555",
|
||||
"borderRightStyle": "none",
|
||||
"borderRightWidth": 0.5,
|
||||
"borderTopColor": "#555555",
|
||||
"borderTopStyle": "solid",
|
||||
"borderTopWidth": 0.5
|
||||
}
|
||||
},
|
||||
"type": "ia.container.flex"
|
||||
},
|
||||
{
|
||||
"children": [
|
||||
{
|
||||
"meta": {
|
||||
"name": "Label_0"
|
||||
},
|
||||
"position": {
|
||||
"basis": "50px"
|
||||
},
|
||||
"props": {
|
||||
"style": {
|
||||
"marginLeft": 10
|
||||
},
|
||||
"text": "STATUS",
|
||||
"textStyle": {
|
||||
"fontFamily": "Roboto",
|
||||
"fontSize": 12
|
||||
}
|
||||
},
|
||||
"type": "ia.display.label"
|
||||
},
|
||||
{
|
||||
"events": {
|
||||
"dom": {
|
||||
"onClick": {
|
||||
"config": {
|
||||
"script": "\tself.session.custom.covert \u003d False\n\tnavigation.navigate_to_page.detailed_view(self, self.view.params.tagProps[0],self.view.params.tagProps[0], self.view.params.tagProps[3])"
|
||||
},
|
||||
"scope": "G",
|
||||
"type": "script"
|
||||
}
|
||||
}
|
||||
},
|
||||
"meta": {
|
||||
"name": "Label"
|
||||
},
|
||||
"position": {
|
||||
"basis": "236px"
|
||||
},
|
||||
"propConfig": {
|
||||
"custom.status": {
|
||||
"binding": {
|
||||
"config": {
|
||||
"path": "/root.custom.status"
|
||||
},
|
||||
"type": "property"
|
||||
}
|
||||
},
|
||||
"props.style.classes": {
|
||||
"binding": {
|
||||
"config": {
|
||||
"path": "this.custom.status"
|
||||
},
|
||||
"transforms": [
|
||||
{
|
||||
"fallback": "State-Styles/State0",
|
||||
"inputType": "scalar",
|
||||
"mappings": [
|
||||
{
|
||||
"input": 1,
|
||||
"output": "State-Styles/Background-Fill/State1"
|
||||
},
|
||||
{
|
||||
"input": 2,
|
||||
"output": "State-Styles/Background-Fill/State2"
|
||||
},
|
||||
{
|
||||
"input": 3,
|
||||
"output": "State-Styles/Background-Fill/State3"
|
||||
},
|
||||
{
|
||||
"input": 4,
|
||||
"output": "State-Styles/Background-Fill/State4"
|
||||
},
|
||||
{
|
||||
"input": 5,
|
||||
"output": "State-Styles/Background-Fill/State5"
|
||||
},
|
||||
{
|
||||
"input": 6,
|
||||
"output": "State-Styles/Background-Fill/State6"
|
||||
},
|
||||
{
|
||||
"input": 0,
|
||||
"output": "State-Styles/State0"
|
||||
}
|
||||
],
|
||||
"outputType": "style-list",
|
||||
"type": "map"
|
||||
}
|
||||
],
|
||||
"type": "property"
|
||||
}
|
||||
},
|
||||
"props.text": {
|
||||
"binding": {
|
||||
"config": {
|
||||
"path": "this.custom.status"
|
||||
},
|
||||
"transforms": [
|
||||
{
|
||||
"fallback": null,
|
||||
"inputType": "scalar",
|
||||
"mappings": [
|
||||
{
|
||||
"input": 5,
|
||||
"output": "HEALTHY"
|
||||
},
|
||||
{
|
||||
"input": 4,
|
||||
"output": "DIAGNOSTIC"
|
||||
},
|
||||
{
|
||||
"input": 3,
|
||||
"output": "PROCESS"
|
||||
},
|
||||
{
|
||||
"input": 2,
|
||||
"output": "STOPPED"
|
||||
},
|
||||
{
|
||||
"input": 1,
|
||||
"output": "FAULTED"
|
||||
},
|
||||
{
|
||||
"input": 6,
|
||||
"output": null
|
||||
}
|
||||
],
|
||||
"outputType": "scalar",
|
||||
"type": "map"
|
||||
}
|
||||
],
|
||||
"type": "property"
|
||||
}
|
||||
}
|
||||
},
|
||||
"props": {
|
||||
"style": {
|
||||
"borderBottomLeftRadius": 5,
|
||||
"borderBottomRightRadius": 5,
|
||||
"borderColor": "#555555",
|
||||
"borderStyle": "solid",
|
||||
"borderTopLeftRadius": 5,
|
||||
"borderTopRightRadius": 5,
|
||||
"borderWidth": 2,
|
||||
"marginBottom": 10,
|
||||
"marginLeft": 50,
|
||||
"marginRight": 10,
|
||||
"marginTop": 10
|
||||
},
|
||||
"textStyle": {
|
||||
"fontSize": 12,
|
||||
"textAlign": "center"
|
||||
}
|
||||
},
|
||||
"type": "ia.display.label"
|
||||
}
|
||||
],
|
||||
"meta": {
|
||||
"name": "FlexContainer_1"
|
||||
},
|
||||
"position": {
|
||||
"basis": "80px"
|
||||
},
|
||||
"props": {
|
||||
"style": {
|
||||
"borderBottomColor": "#555555",
|
||||
"borderBottomStyle": "solid",
|
||||
"borderBottomWidth": 0.5
|
||||
}
|
||||
},
|
||||
"type": "ia.container.flex"
|
||||
},
|
||||
{
|
||||
"children": [
|
||||
{
|
||||
"children": [
|
||||
{
|
||||
"events": {
|
||||
"component": {
|
||||
"onActionPerformed": {
|
||||
"config": {
|
||||
"script": "\ttags_to_read \u003d system.tag.readBlocking([\"Configuration/FC\"])\n\twhid \u003d tags_to_read[0].value\n\tcommandTarget\u003dself.view.params.tagProps[0]\n\tCommands.button_commands.send_request(whid, id, action)\n\tactionCode \u003d 1 #Start\n\tfunctionParameters\u003d{}\n\tfunctionParameters[\"commandTarget\"] \u003d commandTarget\n\tfunctionParameters[\"commandCode\"] \u003d actionCode\n\tfunctionParameters[\"commandParams\"] \u003d \"\"\n\tCommands.button_commands.send_request(whid,actionCode,functionParameters)"
|
||||
},
|
||||
"scope": "G",
|
||||
"type": "script"
|
||||
}
|
||||
}
|
||||
},
|
||||
"meta": {
|
||||
"name": "Start"
|
||||
},
|
||||
"position": {
|
||||
"basis": "80px"
|
||||
},
|
||||
"props": {
|
||||
"image": {
|
||||
"height": 32,
|
||||
"icon": {
|
||||
"path": "material/not_started"
|
||||
},
|
||||
"position": "top",
|
||||
"width": 32
|
||||
},
|
||||
"style": {
|
||||
"classes": "Background-Styles/Controller",
|
||||
"marginBottom": 15,
|
||||
"marginLeft": 5,
|
||||
"marginRight": 5,
|
||||
"marginTop": 15
|
||||
},
|
||||
"text": "",
|
||||
"textStyle": {
|
||||
"fontSize": 12,
|
||||
"fontWeight": "bold",
|
||||
"textAlign": "center"
|
||||
}
|
||||
},
|
||||
"type": "ia.input.button"
|
||||
},
|
||||
{
|
||||
"events": {
|
||||
"component": {
|
||||
"onActionPerformed": {
|
||||
"config": {
|
||||
"script": "\ttags_to_read \u003d system.tag.readBlocking([\"Configuration/FC\"])\n\twhid \u003d tags_to_read[0].value\n\tcommandTarget\u003dself.view.params.tagProps[0]\n\tCommands.button_commands.send_request(whid, id, action)\n\tactionCode \u003d 2 #Stop\n\tfunctionParameters\u003d{}\n\tfunctionParameters[\"commandTarget\"] \u003d commandTarget\n\tfunctionParameters[\"commandCode\"] \u003d actionCode\n\tfunctionParameters[\"commandParams\"] \u003d \"\"\n\tCommands.button_commands.send_request(whid,actionCode,functionParameters)"
|
||||
},
|
||||
"scope": "G",
|
||||
"type": "script"
|
||||
}
|
||||
}
|
||||
},
|
||||
"meta": {
|
||||
"name": "Stop"
|
||||
},
|
||||
"position": {
|
||||
"basis": "80px"
|
||||
},
|
||||
"props": {
|
||||
"image": {
|
||||
"height": 32,
|
||||
"icon": {
|
||||
"path": "material/stop_circle"
|
||||
},
|
||||
"position": "top",
|
||||
"width": 32
|
||||
},
|
||||
"style": {
|
||||
"classes": "Background-Styles/Controller",
|
||||
"marginBottom": 15,
|
||||
"marginLeft": 5,
|
||||
"marginRight": 5,
|
||||
"marginTop": 15
|
||||
},
|
||||
"text": "",
|
||||
"textStyle": {
|
||||
"fontSize": 12,
|
||||
"fontWeight": "bold",
|
||||
"textAlign": "center"
|
||||
}
|
||||
},
|
||||
"type": "ia.input.button"
|
||||
},
|
||||
{
|
||||
"events": {
|
||||
"component": {
|
||||
"onActionPerformed": {
|
||||
"config": {
|
||||
"script": "\ttags_to_read \u003d system.tag.readBlocking([\"Configuration/FC\"])\n\twhid \u003d tags_to_read[0].value\n\tcommandTarget\u003dself.view.params.tagProps[0]\n\tCommands.button_commands.send_request(whid, id, action)\n\tactionCode \u003d 3 #Reset\n\tfunctionParameters\u003d{}\n\tfunctionParameters[\"commandTarget\"] \u003d commandTarget\n\tfunctionParameters[\"commandCode\"] \u003d actionCode\n\tfunctionParameters[\"commandParams\"] \u003d \"\"\n\tCommands.button_commands.send_request(whid,actionCode,functionParameters)"
|
||||
},
|
||||
"scope": "G",
|
||||
"type": "script"
|
||||
}
|
||||
}
|
||||
},
|
||||
"meta": {
|
||||
"name": "Reset"
|
||||
},
|
||||
"position": {
|
||||
"basis": "80px"
|
||||
},
|
||||
"props": {
|
||||
"image": {
|
||||
"height": 32,
|
||||
"icon": {
|
||||
"path": "material/refresh"
|
||||
},
|
||||
"position": "top",
|
||||
"width": 32
|
||||
},
|
||||
"style": {
|
||||
"classes": "Background-Styles/Controller",
|
||||
"marginBottom": 15,
|
||||
"marginLeft": 5,
|
||||
"marginRight": 5,
|
||||
"marginTop": 15
|
||||
},
|
||||
"text": "",
|
||||
"textStyle": {
|
||||
"fontSize": 12,
|
||||
"fontWeight": "bold",
|
||||
"textAlign": "center"
|
||||
}
|
||||
},
|
||||
"type": "ia.input.button"
|
||||
},
|
||||
{
|
||||
"meta": {
|
||||
"name": "JAM_Reset"
|
||||
},
|
||||
"position": {
|
||||
"basis": "80px"
|
||||
},
|
||||
"props": {
|
||||
"enabled": false,
|
||||
"image": {
|
||||
"height": 32,
|
||||
"icon": {
|
||||
"path": "material/sync_problem"
|
||||
},
|
||||
"position": "top",
|
||||
"width": 32
|
||||
},
|
||||
"style": {
|
||||
"classes": "Background-Styles/Controller",
|
||||
"marginBottom": 15,
|
||||
"marginLeft": 5,
|
||||
"marginRight": 5,
|
||||
"marginTop": 15
|
||||
},
|
||||
"text": "",
|
||||
"textStyle": {
|
||||
"fontSize": 12,
|
||||
"fontWeight": "bold",
|
||||
"textAlign": "center"
|
||||
}
|
||||
},
|
||||
"type": "ia.input.button"
|
||||
}
|
||||
],
|
||||
"meta": {
|
||||
"name": "FlexContainer"
|
||||
},
|
||||
"position": {
|
||||
"basis": "333px"
|
||||
},
|
||||
"type": "ia.container.flex"
|
||||
}
|
||||
],
|
||||
"meta": {
|
||||
"name": "FlexContainer_3"
|
||||
},
|
||||
"position": {
|
||||
"basis": "160px"
|
||||
},
|
||||
"type": "ia.container.flex"
|
||||
}
|
||||
],
|
||||
"meta": {
|
||||
"name": "root"
|
||||
},
|
||||
"propConfig": {
|
||||
"custom.has_role": {
|
||||
"binding": {
|
||||
"config": {
|
||||
"expression": "{session.custom.fc}"
|
||||
},
|
||||
"transforms": [
|
||||
{
|
||||
"code": "\trme_role \u003d value +\"-rme-all\"\n\troles \u003d (self.session.props.auth.user.roles)\n\tif (rme_role.lower() in roles \n\tor rme_role.upper() in roles):\n\t\treturn True\n\telse:\n\t\treturn False",
|
||||
"type": "script"
|
||||
}
|
||||
],
|
||||
"type": "expr"
|
||||
}
|
||||
},
|
||||
"custom.status": {
|
||||
"binding": {
|
||||
"config": {
|
||||
"fallbackDelay": 2.5,
|
||||
"mode": "indirect",
|
||||
"references": {
|
||||
"0": "{view.params.tagProps[0]}",
|
||||
"fc": "{session.custom.fc}"
|
||||
},
|
||||
"tagPath": "[{fc}_SCADA_TAG_PROVIDER]{0}/ALARMST"
|
||||
},
|
||||
"transforms": [
|
||||
{
|
||||
"expression": "if(isNull({value}), 0, {value})",
|
||||
"type": "expression"
|
||||
},
|
||||
{
|
||||
"fallback": null,
|
||||
"inputType": "scalar",
|
||||
"mappings": [
|
||||
{
|
||||
"input": 4,
|
||||
"output": 1
|
||||
},
|
||||
{
|
||||
"input": 3,
|
||||
"output": 2
|
||||
},
|
||||
{
|
||||
"input": 2,
|
||||
"output": 3
|
||||
},
|
||||
{
|
||||
"input": 1,
|
||||
"output": 4
|
||||
},
|
||||
{
|
||||
"input": 0,
|
||||
"output": 5
|
||||
}
|
||||
],
|
||||
"outputType": "scalar",
|
||||
"type": "map"
|
||||
}
|
||||
],
|
||||
"type": "tag"
|
||||
}
|
||||
}
|
||||
},
|
||||
"props": {
|
||||
"direction": "column",
|
||||
"style": {
|
||||
"animationFillMode": "both",
|
||||
"borderBottomLeftRadius": 10,
|
||||
"borderBottomRightRadius": 10,
|
||||
"borderColor": "#555555",
|
||||
"borderStyle": "solid",
|
||||
"borderTopLeftRadius": 10,
|
||||
"borderTopRightRadius": 10,
|
||||
"borderWidth": 1,
|
||||
"classes": "Background-Styles/Controller"
|
||||
}
|
||||
},
|
||||
"type": "ia.container.flex"
|
||||
}
|
||||
}
|
||||
@ -3,8 +3,8 @@
|
||||
"counts": {
|
||||
"Critical": 0,
|
||||
"Diagnostic": 0,
|
||||
"High": 1,
|
||||
"Low": 1,
|
||||
"High": 2,
|
||||
"Low": 0,
|
||||
"Medium": 0,
|
||||
"Total": 2
|
||||
},
|
||||
@ -12,13 +12,14 @@
|
||||
"$": [
|
||||
"ds",
|
||||
192,
|
||||
1752066852881
|
||||
1758118474993
|
||||
],
|
||||
"$columns": [
|
||||
{
|
||||
"data": [
|
||||
null,
|
||||
"MCM01",
|
||||
null,
|
||||
null,
|
||||
"MCM01"
|
||||
],
|
||||
"name": "Location",
|
||||
@ -26,18 +27,20 @@
|
||||
},
|
||||
{
|
||||
"data": [
|
||||
"Low",
|
||||
"High",
|
||||
"Low"
|
||||
"Low",
|
||||
"Medium",
|
||||
"High"
|
||||
],
|
||||
"name": "Priority",
|
||||
"type": "String"
|
||||
},
|
||||
{
|
||||
"data": [
|
||||
1,
|
||||
1,
|
||||
1
|
||||
294,
|
||||
257,
|
||||
230,
|
||||
2
|
||||
],
|
||||
"name": "Count",
|
||||
"type": "Long"
|
||||
|
||||
@ -4,26 +4,35 @@
|
||||
"$": [
|
||||
"ds",
|
||||
192,
|
||||
1751989861336
|
||||
1758118477540
|
||||
],
|
||||
"$columns": [
|
||||
{
|
||||
"data": [
|
||||
null
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
"MCM01"
|
||||
],
|
||||
"name": "Location",
|
||||
"type": "String"
|
||||
},
|
||||
{
|
||||
"data": [
|
||||
"Low"
|
||||
"High",
|
||||
"Low",
|
||||
"Medium",
|
||||
"High"
|
||||
],
|
||||
"name": "Priority",
|
||||
"type": "String"
|
||||
},
|
||||
{
|
||||
"data": [
|
||||
1
|
||||
294,
|
||||
257,
|
||||
230,
|
||||
2
|
||||
],
|
||||
"name": "Count",
|
||||
"type": "Long"
|
||||
|
||||
@ -86,7 +86,7 @@
|
||||
"textStyle": {
|
||||
"color": "#000000",
|
||||
"fontFamily": "inherit",
|
||||
"fontSize": "1vmin",
|
||||
"fontSize": "1.5vmin",
|
||||
"fontWeight": "bold"
|
||||
}
|
||||
},
|
||||
|
||||
@ -0,0 +1,16 @@
|
||||
{
|
||||
"scope": "G",
|
||||
"version": 1,
|
||||
"restricted": false,
|
||||
"overridable": true,
|
||||
"files": [
|
||||
"view.json"
|
||||
],
|
||||
"attributes": {
|
||||
"lastModification": {
|
||||
"actor": "admin",
|
||||
"timestamp": "2025-09-15T13:41:52Z"
|
||||
},
|
||||
"lastModificationSignature": "c49ada461b77f40368b786472b7a5c93fddbfa08079a17405b65ea630d56b66b"
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 74 B |
@ -0,0 +1,297 @@
|
||||
{
|
||||
"custom": {
|
||||
"State": "#FFFFFF",
|
||||
"Status": "#808080",
|
||||
"state_string": "Empty/Idle",
|
||||
"status_string": "Unknown Status"
|
||||
},
|
||||
"params": {
|
||||
"tagProps": [
|
||||
"Status/Carriers/Carrier_100",
|
||||
"value",
|
||||
"value",
|
||||
"value",
|
||||
"value",
|
||||
"value",
|
||||
"value",
|
||||
"value",
|
||||
"value",
|
||||
"value"
|
||||
]
|
||||
},
|
||||
"propConfig": {
|
||||
"custom.State": {
|
||||
"binding": {
|
||||
"config": {
|
||||
"fallbackDelay": 2.5,
|
||||
"mode": "indirect",
|
||||
"references": {
|
||||
"0": "{view.params.tagProps[0]}",
|
||||
"fc": "{session.custom.fc}"
|
||||
},
|
||||
"tagPath": "[{fc}_SCADA_TAG_PROVIDER]{0}"
|
||||
},
|
||||
"transforms": [
|
||||
{
|
||||
"code": "\tif value is None:\n\t\treturn \u0027#808080\u0027 # Grey - No Data\n\t\n\t# Priority 2 - Critical Faults - Red\n\tif (value.get(\u0027bCommonFault\u0027, False) or value.get(\u0027bTCBMCBError\u0027, False) or\n\t value.get(\u0027bNotCheckedCTBCRB\u0027, False) or value.get(\u0027bCommunicationError\u0027, False) or\n\t value.get(\u0027bCurrentLimitExceeded\u0027, False) or value.get(\u0027bCalibrationError\u0027, False) or\n\t value.get(\u0027bItemOverhangingBeltFault\u0027, False) or value.get(\u0027bCurrentCollectorFault\u0027, False) or\n\t value.get(\u0027bItemTooHigh\u0027, False) or value.get(\u0027bItemTooWide\u0027, False) or\n\t value.get(\u0027bItemOnActivatedCarrier\u0027, False) or value.get(\u0027bDeflectedBellowsFault\u0027, False) or\n\t value.get(\u0027bItemOnBellowsWarning\u0027, False) or value.get(\u0027bItemOnBellowsActive\u0027, False)):\n\t\treturn \u0027#FF0000\u0027 # Red - E-Stop/Unit Faulted\n\t\n\t# Critical State Faults - Red\n\tif value.get(\u0027bDisabledOrFaulted\u0027, False):\n\t\treturn \u0027#FF0000\u0027 # Red - E-Stop/Unit Faulted\n\t\n\t# Priority 5 - Test/Maintenance - Brown\n\tif (value.get(\u0027bNeedsUpdate\u0027, False) or value.get(\u0027bCCTCommunication\u0027, False) or\n\t value.get(\u0027bDefaultConfiguration\u0027, False) or value.get(\u0027bProgrammingMode\u0027, False) or\n\t value.get(\u0027bCCTDownloadDone\u0027, False) or value.get(\u0027bAssignedToTiltTest\u0027, False)):\n\t\treturn \u0027#AC5F00\u0027 # Brown - Manual/Maintenance Mode\n\t\n\t# Priority 8 - Occupied - Green\n\tif value.get(\u0027bOccupied\u0027, False):\n\t\treturn \u0027#008000\u0027 # Green - Running or ON\n\t\n\t# Priority 9 - Operational Status - Green or Light Green\n\tif value.get(\u0027bStatusOK\u0027, False):\n\t\treturn \u0027#008000\u0027 # Green - Running or ON\n\tif value.get(\u0027bItemDischarged\u0027, False):\n\t\treturn \u0027#CCFFCC\u0027 # Light green - Enabled, not running\n\tif value.get(\u0027bMotorNotRunning\u0027, False):\n\t\treturn \u0027#CCFFCC\u0027 # Light green - Enabled, not running\n\t\n\t# Priority 10 - Energy Management - Light Sky Blue\n\tif value.get(\u0027bDoubleMaxRecirculation\u0027, False):\n\t\treturn \u0027#87CEFA\u0027 # Light Sky Blue - Energy management\n\t\n\t# Priority 11 - High Priority Issues\n\tif value.get(\u0027bDisabled\u0027, False):\n\t\treturn \u0027#D3D3D3\u0027 # Light grey - OFF/Inactive\n\tif value.get(\u0027bBlocked\u0027, False):\n\t\treturn \u0027#D900D9\u0027 # Purple - Gridlock Prevention Mode\n\t\n\t# Active Processing States - Yellow\n\tif (value.get(\u0027bItemBeingScannedBarcode\u0027, False) or value.get(\u0027bItemScannedWaitingRedirect\u0027, False) or\n\t value.get(\u0027bItemBeingScannedVolume\u0027, False) or value.get(\u0027bSPSCheckingCarrier\u0027, False)):\n\t\treturn \u0027#FFFF00\u0027 # Yellow - 75%/50%/25% Full\n\t\n\t# System/Communication States - Light Sky Blue\n\tif (value.get(\u0027bInfoReceivedFromCSC\u0027, False) or value.get(\u0027bReceivedFromCCB\u0027, False) or\n\t value.get(\u0027bReservedForInductionTakeover\u0027, False) or value.get(\u0027bNotActivatedForProfile\u0027, False)):\n\t\treturn \u0027#87CEFA\u0027 # Light Sky Blue - Energy management\n\t\n\t# Multi-carrier Operations - Blue\n\tif (value.get(\u0027bSecondThirdCarrierInRow\u0027, False) or value.get(\u0027bPartOfMultiCarrierItem\u0027, False)):\n\t\treturn \u0027#0000FF\u0027 # Blue - 100% Full\n\t\n\t# Check distance data\n\tif value.get(\u0027iRelativeDistance\u0027, 0) \u003e 0:\n\t\treturn \u0027#FFA500\u0027 # Orange - JAM (item positioning)\n\t\n\t# Default state - White (Empty/Idle)\n\treturn \u0027#FFFFFF\u0027 # White - Gravity/not motorized MHE",
|
||||
"type": "script"
|
||||
}
|
||||
],
|
||||
"type": "tag"
|
||||
},
|
||||
"persistent": true
|
||||
},
|
||||
"custom.Status": {
|
||||
"binding": {
|
||||
"config": {
|
||||
"fallbackDelay": 2.5,
|
||||
"mode": "indirect",
|
||||
"references": {
|
||||
"0": "{view.params.tagProps[0]}",
|
||||
"fc": "{session.custom.fc}"
|
||||
},
|
||||
"tagPath": "[{fc}_SCADA_TAG_PROVIDER]{0}"
|
||||
},
|
||||
"transforms": [
|
||||
{
|
||||
"code": "\tif value is None:\n\t\treturn \u0027#808080\u0027\n\t\n\t# Priority-based status determination (lower number \u003d higher priority)\n\tactive_status \u003d \u0027default\u0027\n\t\n\t# Check in priority order (highest to lowest)\n\t# Priority 2 - Critical\n\tif (value.get(\u0027bCommonFault\u0027, False) or value.get(\u0027bTCBMCBError\u0027, False) or \n\t value.get(\u0027bNotCheckedCTBCRB\u0027, False) or value.get(\u0027bCommunicationError\u0027, False) or\n\t value.get(\u0027bCurrentLimitExceeded\u0027, False) or value.get(\u0027bCalibrationError\u0027, False) or\n\t value.get(\u0027bItemOverhangingBeltFault\u0027, False) or value.get(\u0027bCurrentCollectorFault\u0027, False) or\n\t value.get(\u0027bItemTooHigh\u0027, False) or value.get(\u0027bItemTooWide\u0027, False) or\n\t value.get(\u0027bItemOnActivatedCarrier\u0027, False) or value.get(\u0027bDeflectedBellowsFault\u0027, False) or\n\t value.get(\u0027bItemOnBellowsWarning\u0027, False) or value.get(\u0027bItemOnBellowsActive\u0027, False)):\n\t\tactive_status \u003d \u0027critical_fault\u0027\n\t# Priority 5 - Low/Maintenance\n\telif (value.get(\u0027bNeedsUpdate\u0027, False) or value.get(\u0027bCCTCommunication\u0027, False) or\n\t value.get(\u0027bDefaultConfiguration\u0027, False) or value.get(\u0027bProgrammingMode\u0027, False) or\n\t value.get(\u0027bCCTDownloadDone\u0027, False)):\n\t\tactive_status \u003d \u0027maintenance_mode\u0027\n\t# Priority 9 - Medium-High\n\telif value.get(\u0027bStatusOK\u0027, False):\n\t\tactive_status \u003d \u0027status_ok\u0027\n\telif value.get(\u0027bMotorNotRunning\u0027, False):\n\t\tactive_status \u003d \u0027motor_not_running\u0027\n\t# Priority 10 - Medium\n\telif value.get(\u0027bDoubleMaxRecirculation\u0027, False):\n\t\tactive_status \u003d \u0027recirculation\u0027\n\t# Priority 11 - High\n\telif value.get(\u0027bDisabled\u0027, False):\n\t\tactive_status \u003d \u0027disabled\u0027\n\telif value.get(\u0027bBlocked\u0027, False):\n\t\tactive_status \u003d \u0027blocked\u0027\n\t\n\t# Dictionary-based switch for color mapping\n\tcolor_map \u003d {\n\t\t\u0027critical_fault\u0027: \u0027#FF0000\u0027, # Red - Critical errors/faults\n\t\t\u0027maintenance_mode\u0027: \u0027#AC5F00\u0027, # Brown - Manual/Maintenance mode\n\t\t\u0027status_ok\u0027: \u0027#008000\u0027, # Green - Running or ON\n\t\t\u0027motor_not_running\u0027: \u0027#CCFFCC\u0027, # Light Green - Enabled, not running\n\t\t\u0027recirculation\u0027: \u0027#87CEFA\u0027, # Light Sky Blue - Energy management\n\t\t\u0027disabled\u0027: \u0027#D3D3D3\u0027, # Light Grey - OFF/Inactive\n\t\t\u0027blocked\u0027: \u0027#D900D9\u0027, # Purple - Gridlock Prevention\n\t\t\u0027default\u0027: \u0027#808080\u0027 # Grey - Default/Invalid\n\t}\n\t\n\t# Return color using dictionary lookup\n\treturn color_map.get(active_status, \u0027#808080\u0027)",
|
||||
"type": "script"
|
||||
}
|
||||
],
|
||||
"type": "tag"
|
||||
},
|
||||
"persistent": true
|
||||
},
|
||||
"custom.state_string": {
|
||||
"binding": {
|
||||
"config": {
|
||||
"fallbackDelay": 2.5,
|
||||
"mode": "indirect",
|
||||
"references": {
|
||||
"0": "{view.params.tagProps[0]}",
|
||||
"fc": "{session.custom.fc}"
|
||||
},
|
||||
"tagPath": "[{fc}_SCADA_TAG_PROVIDER]{0}/dwState"
|
||||
},
|
||||
"transforms": [
|
||||
{
|
||||
"expression": "coalesce({value},{view.params.forceFaultStatus},0)",
|
||||
"type": "expression"
|
||||
},
|
||||
{
|
||||
"code": "\tif value is None:\n\t\treturn \u0027No Data\u0027\n\t\n\t# Check bits in priority order (highest priority first)\n\t\n\t# Priority 5 - Test/Maintenance\n\tif value \u0026 128: # Bit 7: Assigned to do a tilttest\n\t\treturn \u0027Tilt Test Mode\u0027\n\t\n\t# Priority 8 - Operational Status\n\tif value \u0026 256: # Bit 8: Occupied\n\t\treturn \u0027Occupied\u0027\n\t\n\t# Priority 9 - Discharge Status\n\tif value \u0026 8: # Bit 3: Item has been discharged\n\t\treturn \u0027Item Discharged\u0027\n\t\n\t# Other operational states (no specific priority)\n\tif value \u0026 1: # Bit 0: Disabled or faulted\n\t\treturn \u0027Disabled/Faulted\u0027\n\tif value \u0026 2: # Bit 1: Item being scanned by Barcode/OCR\n\t\treturn \u0027Barcode Scanning\u0027\n\tif value \u0026 4: # Bit 2: Scanned, waiting for redirect\n\t\treturn \u0027Awaiting Redirect\u0027\n\tif value \u0026 16: # Bit 4: Second or third carrier in row\n\t\treturn \u0027Multi-Carrier Row\u0027\n\tif value \u0026 32: # Bit 5: Used at flipper door chutes\n\t\treturn \u0027Flipper Door Mode\u0027\n\tif value \u0026 64: # Bit 6: Part of multi-carrier item\n\t\treturn \u0027Multi-Carrier Item\u0027\n\tif value \u0026 512: # Bit 9: Information received from CSC/host\n\t\treturn \u0027Host Data Received\u0027\n\tif value \u0026 1024: # Bit 10: Received from CCB\n\t\treturn \u0027CCB Received\u0027\n\tif value \u0026 2048: # Bit 11: Occupied but disabled\n\t\treturn \u0027Occupied/Disabled\u0027\n\tif value \u0026 4096: # Bit 12: Reserved for induction takeover\n\t\treturn \u0027Induction Reserved\u0027\n\tif value \u0026 8192: # Bit 13: Not activated for profile execution\n\t\treturn \u0027Profile Inactive\u0027\n\tif value \u0026 16384: # Bit 14: Item being scanned by volume scanner\n\t\treturn \u0027Volume Scanning\u0027\n\tif value \u0026 32768: # Bit 15: SPS checking carrier\n\t\treturn \u0027SPS Checking\u0027\n\t\n\t# Check if bits 16-31 contain distance data\n\tdistance_bits \u003d (value \u003e\u003e 16) \u0026 0xFFFF # Extract upper 16 bits\n\tif distance_bits \u003e 0:\n\t\treturn \u0027Item Distance: \u0027 + str(distance_bits)\n\t\n\t# Default state\n\tif value \u003d\u003d 0:\n\t\treturn \u0027Empty/Idle\u0027\n\telse:\n\t\treturn \u0027State: \u0027 + str(value)",
|
||||
"type": "script"
|
||||
}
|
||||
],
|
||||
"type": "tag"
|
||||
},
|
||||
"persistent": true
|
||||
},
|
||||
"custom.status_string": {
|
||||
"binding": {
|
||||
"config": {
|
||||
"fallbackDelay": 2.5,
|
||||
"mode": "indirect",
|
||||
"references": {
|
||||
"0": "{view.params.tagProps[0]}",
|
||||
"fc": "{session.custom.fc}"
|
||||
},
|
||||
"tagPath": "[{fc}_SCADA_TAG_PROVIDER]{0}/dwStatus"
|
||||
},
|
||||
"transforms": [
|
||||
{
|
||||
"expression": "coalesce({value},{view.params.forceFaultStatus},0)",
|
||||
"type": "expression"
|
||||
},
|
||||
{
|
||||
"code": "\tif value is None:\n\t\treturn \u0027No Data\u0027\n\t\n\t# Critical Priority (2) - Errors and Faults\n\tif value \u0026 8: # Bit 3: Common fault\n\t\treturn \u0027Common fault\u0027\n\tif value \u0026 32: # Bit 5: Possible TCB/MCB error\n\t\treturn \u0027Possible TCB/MCB error\u0027\n\tif value \u0026 64: # Bit 6: Not checked at last CTB/CRB\n\t\treturn \u0027Not checked at last CTB/CRB\u0027\n\tif value \u0026 128: # Bit 7: Communication error\n\t\treturn \u0027Communication error\u0027\n\tif value \u0026 512: # Bit 9: Current limit exceeded\n\t\treturn \u0027Current limit exceeded\u0027\n\tif value \u0026 2048: # Bit 11: Calibration error\n\t\treturn \u0027Calibration error\u0027\n\tif value \u0026 4194304: # Bit 22: Item overhanging belt fault\n\t\treturn \u0027Item overhanging belt fault\u0027\n\tif value \u0026 8388608: # Bit 23: Current collector fault\n\t\treturn \u0027Current collector fault\u0027\n\tif value \u0026 16777216: # Bit 24: Item too high\n\t\treturn \u0027Item too high\u0027\n\tif value \u0026 33554432: # Bit 25: Item too wide\n\t\treturn \u0027Item too wide\u0027\n\tif value \u0026 67108864: # Bit 26: Item on activated carrier\n\t\treturn \u0027Item on activated carrier\u0027\n\tif value \u0026 134217728: # Bit 27: Deflected bellows fault\n\t\treturn \u0027Deflected bellows fault\u0027\n\tif value \u0026 1073741824: # Bit 30: Item on bellows warning\n\t\treturn \u0027Item on bellows warning\u0027\n\tif value \u0026 2147483648: # Bit 31: Item on bellows is active\n\t\treturn \u0027Item on bellows is active\u0027\n\t\n\t# High Priority (11) - Disabled/Blocked States\n\tif value \u0026 1: # Bit 0: Disabled\n\t\treturn \u0027Disabled\u0027\n\tif value \u0026 4: # Bit 2: Blocked\n\t\treturn \u0027Blocked\u0027\n\t\n\t# Medium Priority (9-10) - Normal Operations\n\tif value \u0026 256: # Bit 8: Status OK\n\t\treturn \u0027Status OK\u0027\n\tif value \u0026 1024: # Bit 10: Motor not running\n\t\treturn \u0027Motor not running\u0027\n\tif value \u0026 268435456: # Bit 28: Double maximum recirculation\n\t\treturn \u0027Double maximum recirculation\u0027\n\t\n\t# Low Priority (5) - Maintenance/Configuration\n\tif value \u0026 2: # Bit 1: Needs update\n\t\treturn \u0027Needs update\u0027\n\tif value \u0026 16: # Bit 4: CCT communication to carrier\n\t\treturn \u0027CCT communication to carrier\u0027\n\tif value \u0026 8192: # Bit 13: Default configuration\n\t\treturn \u0027Default configuration\u0027\n\tif value \u0026 16384: # Bit 14: Programming mode\n\t\treturn \u0027Programming mode\u0027\n\tif value \u0026 536870912: # Bit 29: CCT download done\n\t\treturn \u0027CCT download done\u0027\n\t\n\t# Default - No active status\n\treturn \u0027Unknown Status\u0027",
|
||||
"type": "script"
|
||||
}
|
||||
],
|
||||
"type": "tag"
|
||||
},
|
||||
"persistent": true
|
||||
},
|
||||
"params.tagProps": {
|
||||
"paramDirection": "inout",
|
||||
"persistent": true
|
||||
}
|
||||
},
|
||||
"props": {
|
||||
"defaultSize": {
|
||||
"height": 50,
|
||||
"width": 20
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"children": [
|
||||
{
|
||||
"meta": {
|
||||
"name": "RunningStatus"
|
||||
},
|
||||
"position": {
|
||||
"grow": 1
|
||||
},
|
||||
"props": {
|
||||
"elements": [
|
||||
{
|
||||
"d": "M 1 5 L 17 5 L 17 55 L 1 55 Z ",
|
||||
"fill": {
|
||||
"paint": "#2C3E50"
|
||||
},
|
||||
"name": "carrierFrame",
|
||||
"stroke": {
|
||||
"paint": "#34495E",
|
||||
"width": "0.5"
|
||||
},
|
||||
"type": "path"
|
||||
},
|
||||
{
|
||||
"d": "M 2 7 L 16 7 L 16 53 L 2 53 Z ",
|
||||
"fill": {
|
||||
"paint": "#3498DB"
|
||||
},
|
||||
"name": "carrierTray",
|
||||
"type": "path"
|
||||
},
|
||||
{
|
||||
"cx": "9",
|
||||
"cy": "12",
|
||||
"fill": {
|
||||
"paint": "#E74C3C"
|
||||
},
|
||||
"name": "topSensor",
|
||||
"r": "1.5",
|
||||
"type": "circle"
|
||||
},
|
||||
{
|
||||
"cx": "9",
|
||||
"cy": "48",
|
||||
"fill": {
|
||||
"paint": "#E74C3C"
|
||||
},
|
||||
"name": "bottomSensor",
|
||||
"r": "1.5",
|
||||
"type": "circle"
|
||||
},
|
||||
{
|
||||
"fill": {
|
||||
"paint": "#95A5A6"
|
||||
},
|
||||
"height": "20",
|
||||
"name": "package",
|
||||
"rx": "1",
|
||||
"type": "rect",
|
||||
"width": "10",
|
||||
"x": "4",
|
||||
"y": "20"
|
||||
},
|
||||
{
|
||||
"cx": "3",
|
||||
"cy": "10",
|
||||
"fill": {
|
||||
"paint": "#1ABC9C"
|
||||
},
|
||||
"name": "topLeftWheel",
|
||||
"r": "1",
|
||||
"type": "circle"
|
||||
},
|
||||
{
|
||||
"cx": "15",
|
||||
"cy": "10",
|
||||
"fill": {
|
||||
"paint": "#1ABC9C"
|
||||
},
|
||||
"name": "topRightWheel",
|
||||
"r": "1",
|
||||
"type": "circle"
|
||||
},
|
||||
{
|
||||
"cx": "3",
|
||||
"cy": "50",
|
||||
"fill": {
|
||||
"paint": "#1ABC9C"
|
||||
},
|
||||
"name": "bottomLeftWheel",
|
||||
"r": "1",
|
||||
"type": "circle"
|
||||
},
|
||||
{
|
||||
"cx": "15",
|
||||
"cy": "50",
|
||||
"fill": {
|
||||
"paint": "#1ABC9C"
|
||||
},
|
||||
"name": "bottomRightWheel",
|
||||
"r": "1",
|
||||
"type": "circle"
|
||||
}
|
||||
],
|
||||
"preserveAspectRatio": "none",
|
||||
"style": {
|
||||
"overflow": "hidden",
|
||||
"transform": ""
|
||||
},
|
||||
"viewBox": "-1.5 -1.5 20 60"
|
||||
},
|
||||
"type": "ia.shapes.svg"
|
||||
}
|
||||
],
|
||||
"events": {
|
||||
"dom": {
|
||||
"onClick": {
|
||||
"config": {
|
||||
"script": "\tsystem.perspective.openDock(\u0027Docked-East-VFD\u0027,params\u003d{\u0027tagProps\u0027:self.view.params.tagProps})"
|
||||
},
|
||||
"scope": "G",
|
||||
"type": "script"
|
||||
},
|
||||
"onDoubleClick": {
|
||||
"config": {
|
||||
"script": "\ttagProps \u003d self.view.params.tagProps\n\tsystem.perspective.openPopup(\"StatusPopUP\", \"PopUp-Views/Controller-Equipment/Information\", params \u003d{\"tagProps\":tagProps})\n\t"
|
||||
},
|
||||
"enabled": false,
|
||||
"scope": "G",
|
||||
"type": "script"
|
||||
},
|
||||
"onMouseEnter": {
|
||||
"config": {
|
||||
"script": "\tfrom time import sleep\n\t\n\talarm \u003d []\n\tmessage \u003d None\n\t\n\tsleep(0.5)\n\t\n\tif system.tag.exists(\"System/aws_data\"):\n\t\tif self.view.params.tagProps[0] !\u003d \"\":\n\t\t\ttags_to_read \u003d system.tag.readBlocking(\"System/aws_data\")\n\t\t\tdecode_alarm_data \u003d system.util.jsonDecode(tags_to_read[0].value)\n\t\t\talarm \u003d [decode_alarm_data[i] for i in decode_alarm_data\n\t\t\t\t\tif decode_alarm_data[i][\u0027sourceId\u0027].startswith(self.view.params.tagProps[0])]\n\t\tif alarm:\n\t\t\talarm \u003d sorted(alarm, key \u003d lambda t:t[\u0027timestamp\u0027], reverse\u003dTrue)\n\t\t\tmessage \u003d max(alarm, key \u003d lambda p:p[\u0027priority\u0027]).get(\u0027message\u0027)\n\t\t\tif len(alarm) \u003e 1:\n\t\t\t\tmessage +\u003d \" (+\" + str(len(alarm)-1) + \")\"\n\tself.view.custom.alarm_message \u003d message"
|
||||
},
|
||||
"scope": "G",
|
||||
"type": "script"
|
||||
}
|
||||
}
|
||||
},
|
||||
"meta": {
|
||||
"name": "root",
|
||||
"tooltip": {
|
||||
"enabled": true,
|
||||
"location": "top-left",
|
||||
"style": {
|
||||
"classes": "Alarms-Styles/NoAlarm"
|
||||
}
|
||||
}
|
||||
},
|
||||
"propConfig": {
|
||||
"meta.tooltip.text": {
|
||||
"binding": {
|
||||
"config": {
|
||||
"expression": "if(\n {view.custom.status_string} !\u003d \"Unknown Status\",\n \"Source Id: \" + {view.params.tagProps[0]} + \" Status: \" + {view.custom.status_string} + \" State: \" + {view.custom.state_string},\n \"Device Disconnected\"\n)\n"
|
||||
},
|
||||
"type": "expr"
|
||||
}
|
||||
}
|
||||
},
|
||||
"props": {
|
||||
"justify": "center",
|
||||
"style": {
|
||||
"borderColor": "#FF0000",
|
||||
"borderStyle": "none",
|
||||
"borderWidth": "2px",
|
||||
"cursor": "pointer"
|
||||
}
|
||||
},
|
||||
"type": "ia.container.flex"
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,16 @@
|
||||
{
|
||||
"scope": "G",
|
||||
"version": 1,
|
||||
"restricted": false,
|
||||
"overridable": true,
|
||||
"files": [
|
||||
"view.json"
|
||||
],
|
||||
"attributes": {
|
||||
"lastModification": {
|
||||
"actor": "admin",
|
||||
"timestamp": "2025-09-15T10:11:46Z"
|
||||
},
|
||||
"lastModificationSignature": "1ea907490a726aa6daed1b814177992dd580d4eb9eee8a1a0d9131ad041d8cdf"
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 74 B |
@ -0,0 +1,323 @@
|
||||
{
|
||||
"custom": {
|
||||
"State": "#FFFFFF",
|
||||
"Status": "#808080",
|
||||
"state_string": "Empty/Idle",
|
||||
"status_string": "Unknown Status"
|
||||
},
|
||||
"params": {
|
||||
"angle": 0,
|
||||
"directionLeft": false,
|
||||
"tagProps": [
|
||||
"System/MCM01/Conveyor/VFD/UL1_3_VFD1",
|
||||
"value",
|
||||
"value",
|
||||
"value",
|
||||
"value",
|
||||
"value",
|
||||
"value",
|
||||
"value",
|
||||
"value",
|
||||
"value"
|
||||
]
|
||||
},
|
||||
"propConfig": {
|
||||
"custom.State": {
|
||||
"binding": {
|
||||
"config": {
|
||||
"fallbackDelay": 2.5,
|
||||
"mode": "indirect",
|
||||
"references": {
|
||||
"0": "{view.params.tagProps[0]}",
|
||||
"fc": "{session.custom.fc}"
|
||||
},
|
||||
"tagPath": "[{fc}_SCADA_TAG_PROVIDER]{0}/dwState"
|
||||
},
|
||||
"transforms": [
|
||||
{
|
||||
"expression": "coalesce({value},{view.params.forceFaultStatus},0)",
|
||||
"type": "expression"
|
||||
},
|
||||
{
|
||||
"code": "\tif value is None:\n\t\treturn \u0027#808080\u0027 # Grey - No Data\n\t\n\t# Check bits in priority order (highest priority first)\n\t\n\t# Priority 5 - Test/Maintenance - Brown\n\tif value \u0026 128: # Bit 7: Assigned to do a tilttest\n\t\treturn \u0027#AC5F00\u0027 # Brown - Manual/Maintenance Mode\n\t\n\t# Priority 8 - Operational Status - Green\n\tif value \u0026 256: # Bit 8: Occupied\n\t\treturn \u0027#008000\u0027 # Green - Running or ON\n\t\n\t# Priority 9 - Discharge Status - Light Green\n\tif value \u0026 8: # Bit 3: Item has been discharged\n\t\treturn \u0027#CCFFCC\u0027 # Light green - Enabled, not running\n\t\n\t# Critical/Error States - Red\n\tif value \u0026 1: # Bit 0: Disabled or faulted\n\t\treturn \u0027#FF0000\u0027 # Red - E-Stop/Unit Faulted\n\tif value \u0026 2048: # Bit 11: Occupied but disabled\n\t\treturn \u0027#FF0000\u0027 # Red - E-Stop/Unit Faulted\n\t\n\t# Active Processing States - Yellow\n\tif value \u0026 2: # Bit 1: Item being scanned by Barcode/OCR\n\t\treturn \u0027#FFFF00\u0027 # Yellow - 75% Full/50% Full/25% Full\n\tif value \u0026 4: # Bit 2: Scanned, waiting for redirect\n\t\treturn \u0027#FFFF00\u0027 # Yellow - 75% Full/50% Full/25% Full\n\tif value \u0026 16384: # Bit 14: Item being scanned by volume scanner\n\t\treturn \u0027#FFFF00\u0027 # Yellow - 75% Full/50% Full/25% Full\n\tif value \u0026 32768: # Bit 15: SPS checking carrier\n\t\treturn \u0027#FFFF00\u0027 # Yellow - 75% Full/50% Full/25% Full\n\t\n\t# Multi-carrier Operations - Blue\n\tif value \u0026 16: # Bit 4: Second or third carrier in row\n\t\treturn \u0027#0000FF\u0027 # Blue - 100% Full\n\tif value \u0026 64: # Bit 6: Part of multi-carrier item\n\t\treturn \u0027#0000FF\u0027 # Blue - 100% Full\n\t\n\t# System/Communication States - Light Sky Blue\n\tif value \u0026 512: # Bit 9: Information received from CSC/host\n\t\treturn \u0027#87CEFA\u0027 # Light Sky Blue - Energy management\n\tif value \u0026 1024: # Bit 10: Received from CCB\n\t\treturn \u0027#87CEFA\u0027 # Light Sky Blue - Energy management\n\tif value \u0026 4096: # Bit 12: Reserved for induction takeover\n\t\treturn \u0027#87CEFA\u0027 # Light Sky Blue - Energy management\n\tif value \u0026 8192: # Bit 13: Not activated for profile execution\n\t\treturn \u0027#87CEFA\u0027 # Light Sky Blue - Energy management\n\t\n\t# Special Equipment States - Light Grey\n\tif value \u0026 32: # Bit 5: Used at flipper door chutes\n\t\treturn \u0027#D3D3D3\u0027 # Light grey - OFF/Inactive\n\t\n\t# Check if bits 16-31 contain distance data\n\tdistance_bits \u003d (value \u003e\u003e 16) \u0026 0xFFFF # Extract upper 16 bits\n\tif distance_bits \u003e 0:\n\t\treturn \u0027#FFA500\u0027 # Orange - JAM (item positioning)\n\t\n\t# Default state\n\tif value \u003d\u003d 0:\n\t\treturn \u0027#FFFFFF\u0027 # White - Gravity/not motorized MHE\n\telse:\n\t\treturn \u0027#808080\u0027 # Grey - Invalid/Unavailable",
|
||||
"type": "script"
|
||||
}
|
||||
],
|
||||
"type": "tag"
|
||||
},
|
||||
"persistent": true
|
||||
},
|
||||
"custom.Status": {
|
||||
"binding": {
|
||||
"config": {
|
||||
"fallbackDelay": 2.5,
|
||||
"mode": "indirect",
|
||||
"references": {
|
||||
"0": "{view.params.tagProps[0]}",
|
||||
"fc": "{session.custom.fc}"
|
||||
},
|
||||
"tagPath": "[{fc}_SCADA_TAG_PROVIDER]{0}/dwStatus"
|
||||
},
|
||||
"transforms": [
|
||||
{
|
||||
"expression": "coalesce({value},{view.params.forceFaultStatus},0)",
|
||||
"type": "expression"
|
||||
},
|
||||
{
|
||||
"code": "\tif value is None:\n\t\treturn \u0027#808080\u0027\n\t\n\t# Critical Priority (2) - Red\n\tif value \u0026 8: # Bit 3: Common fault\n\t\treturn \u0027#FF0000\u0027\n\tif value \u0026 32: # Bit 5: Possible TCB/MCB error\n\t\treturn \u0027#FF0000\u0027\n\tif value \u0026 64: # Bit 6: Not checked at last CTB/CRB\n\t\treturn \u0027#FF0000\u0027\n\tif value \u0026 128: # Bit 7: Communication error\n\t\treturn \u0027#FF0000\u0027\n\tif value \u0026 512: # Bit 9: Current limit exceeded\n\t\treturn \u0027#FF0000\u0027\n\tif value \u0026 2048: # Bit 11: Calibration error\n\t\treturn \u0027#FF0000\u0027\n\tif value \u0026 4194304: # Bit 22: Item overhanging belt fault\n\t\treturn \u0027#FF0000\u0027\n\tif value \u0026 8388608: # Bit 23: Current collector fault\n\t\treturn \u0027#FF0000\u0027\n\tif value \u0026 16777216: # Bit 24: Item too high\n\t\treturn \u0027#FF0000\u0027\n\tif value \u0026 33554432: # Bit 25: Item too wide\n\t\treturn \u0027#FF0000\u0027\n\tif value \u0026 67108864: # Bit 26: Item on activated carrier\n\t\treturn \u0027#FF0000\u0027\n\tif value \u0026 134217728: # Bit 27: Deflected bellows fault\n\t\treturn \u0027#FF0000\u0027\n\tif value \u0026 1073741824: # Bit 30: Item on bellows warning\n\t\treturn \u0027#FF0000\u0027\n\tif value \u0026 2147483648: # Bit 31: Item on bellows is active\n\t\treturn \u0027#FF0000\u0027\n\t\n\t# High Priority (11) - Light Grey (OFF/Inactive)\n\tif value \u0026 1: # Bit 0: Disabled\n\t\treturn \u0027#D3D3D3\u0027\n\tif value \u0026 4: # Bit 2: Blocked\n\t\treturn \u0027#D900D9\u0027 # Purple - Gridlock Prevention Mode\n\t\n\t# Medium Priority (9-10) - Status OK, Motor not running\n\tif value \u0026 256: # Bit 8: Status OK\n\t\treturn \u0027#008000\u0027 # Green - Running or ON\n\tif value \u0026 1024: # Bit 10: Motor not running\n\t\treturn \u0027#CCFFCC\u0027 # Light green - Enabled, not running\n\tif value \u0026 268435456: # Bit 28: Double maximum recirculation\n\t\treturn \u0027#87CEFA\u0027 # Light Sky Blue - Energy management\n\t\n\t# Low Priority (5) - Brown (Manual/Maintenance Mode)\n\tif value \u0026 2: # Bit 1: Needs update\n\t\treturn \u0027#AC5F00\u0027\n\tif value \u0026 16: # Bit 4: CCT communication to carrier\n\t\treturn \u0027#AC5F00\u0027\n\tif value \u0026 8192: # Bit 13: Default configuration\n\t\treturn \u0027#AC5F00\u0027\n\tif value \u0026 16384: # Bit 14: Programming mode\n\t\treturn \u0027#AC5F00\u0027\n\tif value \u0026 536870912: # Bit 29: CCT download done\n\t\treturn \u0027#AC5F00\u0027\n\t\n\t# Default - Grey\n\treturn \u0027#808080\u0027",
|
||||
"type": "script"
|
||||
}
|
||||
],
|
||||
"type": "tag"
|
||||
},
|
||||
"persistent": true
|
||||
},
|
||||
"custom.state_string": {
|
||||
"binding": {
|
||||
"config": {
|
||||
"fallbackDelay": 2.5,
|
||||
"mode": "indirect",
|
||||
"references": {
|
||||
"0": "{view.params.tagProps[0]}",
|
||||
"fc": "{session.custom.fc}"
|
||||
},
|
||||
"tagPath": "[{fc}_SCADA_TAG_PROVIDER]{0}/dwState"
|
||||
},
|
||||
"transforms": [
|
||||
{
|
||||
"expression": "coalesce({value},{view.params.forceFaultStatus},0)",
|
||||
"type": "expression"
|
||||
},
|
||||
{
|
||||
"code": "\tif value is None:\n\t\treturn \u0027No Data\u0027\n\t\n\t# Check bits in priority order (highest priority first)\n\t\n\t# Priority 5 - Test/Maintenance\n\tif value \u0026 128: # Bit 7: Assigned to do a tilttest\n\t\treturn \u0027Tilt Test Mode\u0027\n\t\n\t# Priority 8 - Operational Status\n\tif value \u0026 256: # Bit 8: Occupied\n\t\treturn \u0027Occupied\u0027\n\t\n\t# Priority 9 - Discharge Status\n\tif value \u0026 8: # Bit 3: Item has been discharged\n\t\treturn \u0027Item Discharged\u0027\n\t\n\t# Other operational states (no specific priority)\n\tif value \u0026 1: # Bit 0: Disabled or faulted\n\t\treturn \u0027Disabled/Faulted\u0027\n\tif value \u0026 2: # Bit 1: Item being scanned by Barcode/OCR\n\t\treturn \u0027Barcode Scanning\u0027\n\tif value \u0026 4: # Bit 2: Scanned, waiting for redirect\n\t\treturn \u0027Awaiting Redirect\u0027\n\tif value \u0026 16: # Bit 4: Second or third carrier in row\n\t\treturn \u0027Multi-Carrier Row\u0027\n\tif value \u0026 32: # Bit 5: Used at flipper door chutes\n\t\treturn \u0027Flipper Door Mode\u0027\n\tif value \u0026 64: # Bit 6: Part of multi-carrier item\n\t\treturn \u0027Multi-Carrier Item\u0027\n\tif value \u0026 512: # Bit 9: Information received from CSC/host\n\t\treturn \u0027Host Data Received\u0027\n\tif value \u0026 1024: # Bit 10: Received from CCB\n\t\treturn \u0027CCB Received\u0027\n\tif value \u0026 2048: # Bit 11: Occupied but disabled\n\t\treturn \u0027Occupied/Disabled\u0027\n\tif value \u0026 4096: # Bit 12: Reserved for induction takeover\n\t\treturn \u0027Induction Reserved\u0027\n\tif value \u0026 8192: # Bit 13: Not activated for profile execution\n\t\treturn \u0027Profile Inactive\u0027\n\tif value \u0026 16384: # Bit 14: Item being scanned by volume scanner\n\t\treturn \u0027Volume Scanning\u0027\n\tif value \u0026 32768: # Bit 15: SPS checking carrier\n\t\treturn \u0027SPS Checking\u0027\n\t\n\t# Check if bits 16-31 contain distance data\n\tdistance_bits \u003d (value \u003e\u003e 16) \u0026 0xFFFF # Extract upper 16 bits\n\tif distance_bits \u003e 0:\n\t\treturn \u0027Item Distance: \u0027 + str(distance_bits)\n\t\n\t# Default state\n\tif value \u003d\u003d 0:\n\t\treturn \u0027Empty/Idle\u0027\n\telse:\n\t\treturn \u0027State: \u0027 + str(value)",
|
||||
"type": "script"
|
||||
}
|
||||
],
|
||||
"type": "tag"
|
||||
},
|
||||
"persistent": true
|
||||
},
|
||||
"custom.status_string": {
|
||||
"binding": {
|
||||
"config": {
|
||||
"fallbackDelay": 2.5,
|
||||
"mode": "indirect",
|
||||
"references": {
|
||||
"0": "{view.params.tagProps[0]}",
|
||||
"fc": "{session.custom.fc}"
|
||||
},
|
||||
"tagPath": "[{fc}_SCADA_TAG_PROVIDER]{0}/dwStatus"
|
||||
},
|
||||
"transforms": [
|
||||
{
|
||||
"expression": "coalesce({value},{view.params.forceFaultStatus},0)",
|
||||
"type": "expression"
|
||||
},
|
||||
{
|
||||
"code": "\tif value is None:\n\t\treturn \u0027No Data\u0027\n\t\n\t# Critical Priority (2) - Errors and Faults\n\tif value \u0026 8: # Bit 3: Common fault\n\t\treturn \u0027Common fault\u0027\n\tif value \u0026 32: # Bit 5: Possible TCB/MCB error\n\t\treturn \u0027Possible TCB/MCB error\u0027\n\tif value \u0026 64: # Bit 6: Not checked at last CTB/CRB\n\t\treturn \u0027Not checked at last CTB/CRB\u0027\n\tif value \u0026 128: # Bit 7: Communication error\n\t\treturn \u0027Communication error\u0027\n\tif value \u0026 512: # Bit 9: Current limit exceeded\n\t\treturn \u0027Current limit exceeded\u0027\n\tif value \u0026 2048: # Bit 11: Calibration error\n\t\treturn \u0027Calibration error\u0027\n\tif value \u0026 4194304: # Bit 22: Item overhanging belt fault\n\t\treturn \u0027Item overhanging belt fault\u0027\n\tif value \u0026 8388608: # Bit 23: Current collector fault\n\t\treturn \u0027Current collector fault\u0027\n\tif value \u0026 16777216: # Bit 24: Item too high\n\t\treturn \u0027Item too high\u0027\n\tif value \u0026 33554432: # Bit 25: Item too wide\n\t\treturn \u0027Item too wide\u0027\n\tif value \u0026 67108864: # Bit 26: Item on activated carrier\n\t\treturn \u0027Item on activated carrier\u0027\n\tif value \u0026 134217728: # Bit 27: Deflected bellows fault\n\t\treturn \u0027Deflected bellows fault\u0027\n\tif value \u0026 1073741824: # Bit 30: Item on bellows warning\n\t\treturn \u0027Item on bellows warning\u0027\n\tif value \u0026 2147483648: # Bit 31: Item on bellows is active\n\t\treturn \u0027Item on bellows is active\u0027\n\t\n\t# High Priority (11) - Disabled/Blocked States\n\tif value \u0026 1: # Bit 0: Disabled\n\t\treturn \u0027Disabled\u0027\n\tif value \u0026 4: # Bit 2: Blocked\n\t\treturn \u0027Blocked\u0027\n\t\n\t# Medium Priority (9-10) - Normal Operations\n\tif value \u0026 256: # Bit 8: Status OK\n\t\treturn \u0027Status OK\u0027\n\tif value \u0026 1024: # Bit 10: Motor not running\n\t\treturn \u0027Motor not running\u0027\n\tif value \u0026 268435456: # Bit 28: Double maximum recirculation\n\t\treturn \u0027Double maximum recirculation\u0027\n\t\n\t# Low Priority (5) - Maintenance/Configuration\n\tif value \u0026 2: # Bit 1: Needs update\n\t\treturn \u0027Needs update\u0027\n\tif value \u0026 16: # Bit 4: CCT communication to carrier\n\t\treturn \u0027CCT communication to carrier\u0027\n\tif value \u0026 8192: # Bit 13: Default configuration\n\t\treturn \u0027Default configuration\u0027\n\tif value \u0026 16384: # Bit 14: Programming mode\n\t\treturn \u0027Programming mode\u0027\n\tif value \u0026 536870912: # Bit 29: CCT download done\n\t\treturn \u0027CCT download done\u0027\n\t\n\t# Default - No active status\n\treturn \u0027Unknown Status\u0027",
|
||||
"type": "script"
|
||||
}
|
||||
],
|
||||
"type": "tag"
|
||||
},
|
||||
"persistent": true
|
||||
},
|
||||
"params.angle": {
|
||||
"paramDirection": "input",
|
||||
"persistent": true
|
||||
},
|
||||
"params.directionLeft": {
|
||||
"paramDirection": "input",
|
||||
"persistent": true
|
||||
},
|
||||
"params.tagProps": {
|
||||
"paramDirection": "inout",
|
||||
"persistent": true
|
||||
}
|
||||
},
|
||||
"props": {
|
||||
"defaultSize": {
|
||||
"height": 20,
|
||||
"width": 50
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"children": [
|
||||
{
|
||||
"meta": {
|
||||
"name": "RunningStatus"
|
||||
},
|
||||
"position": {
|
||||
"grow": 1
|
||||
},
|
||||
"propConfig": {
|
||||
"props.elements[0].fill.paint": {
|
||||
"binding": {
|
||||
"config": {
|
||||
"path": "view.custom.Status"
|
||||
},
|
||||
"type": "property"
|
||||
}
|
||||
}
|
||||
},
|
||||
"props": {
|
||||
"elements": [
|
||||
{
|
||||
"d": "M 5 1 L 55 1 L 55 17 L 5 17 Z ",
|
||||
"fill": {},
|
||||
"name": "carrierFrame",
|
||||
"stroke": {
|
||||
"paint": "#34495E",
|
||||
"width": "0.5"
|
||||
},
|
||||
"type": "path"
|
||||
},
|
||||
{
|
||||
"d": "M 7 2 L 53 2 L 53 16 L 7 16 Z ",
|
||||
"fill": {
|
||||
"paint": "#3498DB"
|
||||
},
|
||||
"name": "carrierTray",
|
||||
"type": "path"
|
||||
},
|
||||
{
|
||||
"cx": "12",
|
||||
"cy": "9",
|
||||
"fill": {
|
||||
"paint": "#E74C3C"
|
||||
},
|
||||
"name": "leftSensor",
|
||||
"r": "1.5",
|
||||
"type": "circle"
|
||||
},
|
||||
{
|
||||
"cx": "48",
|
||||
"cy": "9",
|
||||
"fill": {
|
||||
"paint": "#E74C3C"
|
||||
},
|
||||
"name": "rightSensor",
|
||||
"r": "1.5",
|
||||
"type": "circle"
|
||||
},
|
||||
{
|
||||
"fill": {
|
||||
"paint": "#95A5A6"
|
||||
},
|
||||
"height": "10",
|
||||
"name": "package",
|
||||
"rx": "1",
|
||||
"type": "rect",
|
||||
"width": "20",
|
||||
"x": "20",
|
||||
"y": "4"
|
||||
},
|
||||
{
|
||||
"cx": "10",
|
||||
"cy": "3",
|
||||
"fill": {
|
||||
"paint": "#1ABC9C"
|
||||
},
|
||||
"name": "topLeftWheel",
|
||||
"r": "1",
|
||||
"type": "circle"
|
||||
},
|
||||
{
|
||||
"cx": "10",
|
||||
"cy": "15",
|
||||
"fill": {
|
||||
"paint": "#1ABC9C"
|
||||
},
|
||||
"name": "bottomLeftWheel",
|
||||
"r": "1",
|
||||
"type": "circle"
|
||||
},
|
||||
{
|
||||
"cx": "50",
|
||||
"cy": "3",
|
||||
"fill": {
|
||||
"paint": "#1ABC9C"
|
||||
},
|
||||
"name": "topRightWheel",
|
||||
"r": "1",
|
||||
"type": "circle"
|
||||
},
|
||||
{
|
||||
"cx": "50",
|
||||
"cy": "15",
|
||||
"fill": {
|
||||
"paint": "#1ABC9C"
|
||||
},
|
||||
"name": "bottomRightWheel",
|
||||
"r": "1",
|
||||
"type": "circle"
|
||||
}
|
||||
],
|
||||
"preserveAspectRatio": "none",
|
||||
"style": {
|
||||
"overflow": "hidden",
|
||||
"transform": ""
|
||||
},
|
||||
"viewBox": "-1.5 -1.5 60 20"
|
||||
},
|
||||
"type": "ia.shapes.svg"
|
||||
}
|
||||
],
|
||||
"events": {
|
||||
"dom": {
|
||||
"onClick": {
|
||||
"config": {
|
||||
"script": "\tsystem.perspective.openDock(\u0027Docked-East-VFD\u0027,params\u003d{\u0027tagProps\u0027:self.view.params.tagProps})"
|
||||
},
|
||||
"scope": "G",
|
||||
"type": "script"
|
||||
},
|
||||
"onDoubleClick": {
|
||||
"config": {
|
||||
"script": "\ttagProps \u003d self.view.params.tagProps\n\tsystem.perspective.openPopup(\"StatusPopUP\", \"PopUp-Views/Controller-Equipment/Information\", params \u003d{\"tagProps\":tagProps})\n\t"
|
||||
},
|
||||
"enabled": false,
|
||||
"scope": "G",
|
||||
"type": "script"
|
||||
},
|
||||
"onMouseEnter": {
|
||||
"config": {
|
||||
"script": "\tfrom time import sleep\n\t\n\talarm \u003d []\n\tmessage \u003d None\n\t\n\tsleep(0.5)\n\t\n\tif system.tag.exists(\"System/aws_data\"):\n\t\tif self.view.params.tagProps[0] !\u003d \"\":\n\t\t\ttags_to_read \u003d system.tag.readBlocking(\"System/aws_data\")\n\t\t\tdecode_alarm_data \u003d system.util.jsonDecode(tags_to_read[0].value)\n\t\t\talarm \u003d [decode_alarm_data[i] for i in decode_alarm_data\n\t\t\t\t\tif decode_alarm_data[i][\u0027sourceId\u0027].startswith(self.view.params.tagProps[0])]\n\t\tif alarm:\n\t\t\talarm \u003d sorted(alarm, key \u003d lambda t:t[\u0027timestamp\u0027], reverse\u003dTrue)\n\t\t\tmessage \u003d max(alarm, key \u003d lambda p:p[\u0027priority\u0027]).get(\u0027message\u0027)\n\t\t\tif len(alarm) \u003e 1:\n\t\t\t\tmessage +\u003d \" (+\" + str(len(alarm)-1) + \")\"\n\tself.view.custom.alarm_message \u003d message"
|
||||
},
|
||||
"scope": "G",
|
||||
"type": "script"
|
||||
}
|
||||
}
|
||||
},
|
||||
"meta": {
|
||||
"name": "root",
|
||||
"tooltip": {
|
||||
"enabled": true,
|
||||
"location": "top-left",
|
||||
"style": {
|
||||
"classes": "Alarms-Styles/NoAlarm"
|
||||
}
|
||||
}
|
||||
},
|
||||
"propConfig": {
|
||||
"meta.tooltip.text": {
|
||||
"binding": {
|
||||
"config": {
|
||||
"expression": "if(\n {view.custom.status_string} !\u003d \"Unknown Status\",\n \"Source Id: \" + {view.params.tagProps[0]} + \" Status: \" + {view.custom.status_string} + \" State: \" + {view.custom.state_string},\n \"Device Disconnected\"\n)\n"
|
||||
},
|
||||
"type": "expr"
|
||||
}
|
||||
}
|
||||
},
|
||||
"props": {
|
||||
"justify": "center",
|
||||
"style": {
|
||||
"borderColor": "#FF0000",
|
||||
"borderStyle": "none",
|
||||
"borderWidth": "2px",
|
||||
"cursor": "pointer"
|
||||
}
|
||||
},
|
||||
"type": "ia.container.flex"
|
||||
}
|
||||
}
|
||||
@ -566,6 +566,14 @@
|
||||
},
|
||||
"type": "expr"
|
||||
}
|
||||
},
|
||||
"meta.visible": {
|
||||
"binding": {
|
||||
"config": {
|
||||
"path": "session.custom.alarm_filter.show_gateways"
|
||||
},
|
||||
"type": "property"
|
||||
}
|
||||
}
|
||||
},
|
||||
"props": {
|
||||
|
||||
@ -1,62 +1,28 @@
|
||||
SELECT
|
||||
Active.id AS ID,
|
||||
Active.eventtime AS StartTimestamp,
|
||||
NULL AS EndTimestamp, -- still active
|
||||
SELECT
|
||||
ae.id AS ID,
|
||||
ae.eventtime AS StartTimestamp,
|
||||
CONCAT(
|
||||
LPAD(FLOOR(Active.duration_seconds / 3600), 2, '0'), ':',
|
||||
LPAD(FLOOR((Active.duration_seconds % 3600) / 60), 2, '0'), ':',
|
||||
LPAD(Active.duration_seconds % 60, 2, '0')
|
||||
LPAD(FLOOR(TIMESTAMPDIFF(SECOND, ae.eventtime, NOW())/3600), 2, '0'), ':',
|
||||
LPAD(FLOOR((TIMESTAMPDIFF(SECOND, ae.eventtime, NOW())%3600)/60), 2, '0'), ':',
|
||||
LPAD( (TIMESTAMPDIFF(SECOND, ae.eventtime, NOW())%60), 2, '0')
|
||||
) AS Duration,
|
||||
CONCAT(REPLACE(Active.displaypath, '_', '-'), ' ', SUBSTRING_INDEX(Active.source, ':/alm:', -1)) AS Description,
|
||||
CASE Active.priority
|
||||
WHEN 0 THEN 'Diagnostic'
|
||||
WHEN 1 THEN 'Low'
|
||||
WHEN 2 THEN 'Medium'
|
||||
WHEN 3 THEN 'High'
|
||||
WHEN 4 THEN 'Critical'
|
||||
ELSE 'Unknown'
|
||||
CONCAT(REPLACE(ae.displaypath,'_','-'),' ', SUBSTRING_INDEX(ae.source,':/alm:',-1)) AS Description,
|
||||
CASE ae.priority
|
||||
WHEN 0 THEN 'Diagnostic' WHEN 1 THEN 'Low' WHEN 2 THEN 'Medium'
|
||||
WHEN 3 THEN 'High' WHEN 4 THEN 'Critical' ELSE 'Unknown'
|
||||
END AS Priority,
|
||||
CONCAT(
|
||||
Active.displaypath,
|
||||
'.HMI.Alarm.',
|
||||
SUBSTRING_INDEX(aed.strValue, '/', -1)
|
||||
) AS Tag,
|
||||
SUBSTRING_INDEX(SUBSTRING_INDEX(aed.strValue, '/', 2), '/', -1) AS Location,
|
||||
CONCAT(ae.displaypath,'.HMI.Alarm.', SUBSTRING_INDEX(aed.strValue,'/',-1)) AS Tag,
|
||||
SUBSTRING_INDEX(SUBSTRING_INDEX(aed.strValue,'/',2),'/',-1) AS Location,
|
||||
aed.strValue AS FullTag,
|
||||
Active.displaypath as Device
|
||||
FROM
|
||||
(
|
||||
SELECT
|
||||
ae.id,
|
||||
ae.eventtime,
|
||||
ae.eventid,
|
||||
ae.source,
|
||||
ae.priority,
|
||||
ae.displaypath,
|
||||
TIMESTAMPDIFF(SECOND, ae.eventtime, NOW()) AS duration_seconds
|
||||
FROM alarm_events ae
|
||||
WHERE ae.eventtype = 0
|
||||
AND NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM alarm_events ae_clear
|
||||
WHERE ae_clear.eventid = ae.eventid
|
||||
AND ae_clear.eventtype = 1
|
||||
)
|
||||
AND ae.displaypath NOT LIKE '%System Startup%'
|
||||
AND ae.source NOT LIKE '%System Startup%'
|
||||
AND (
|
||||
:priorityList IS NULL
|
||||
OR :priorityList = ''
|
||||
OR FIND_IN_SET(ae.priority, :priorityList) > 0
|
||||
)
|
||||
GROUP BY ae.id
|
||||
) AS Active
|
||||
LEFT JOIN
|
||||
(
|
||||
SELECT aed.id, aed.strValue
|
||||
FROM alarm_event_data aed
|
||||
WHERE aed.propname = 'myTag'
|
||||
GROUP BY aed.id
|
||||
) AS aed
|
||||
ON aed.id = Active.id
|
||||
ORDER BY Active.eventtime DESC;
|
||||
ae.displaypath AS Device
|
||||
FROM alarm_events ae
|
||||
LEFT JOIN alarm_events clr
|
||||
ON clr.eventid = ae.eventid AND clr.eventtype = 1
|
||||
LEFT JOIN alarm_event_data aed
|
||||
ON aed.id = ae.id AND aed.propname = 'myTag'
|
||||
WHERE ae.eventtype = 0
|
||||
AND clr.eventid IS NULL
|
||||
AND ae.displaypath NOT LIKE '%System Startup%'
|
||||
AND ae.source NOT LIKE '%System Startup%'
|
||||
AND (:priorityList = '' OR FIND_IN_SET(CAST(ae.priority AS CHAR), :priorityList) > 0)
|
||||
ORDER BY ae.eventtime DESC;
|
||||
|
||||
@ -1,17 +1,20 @@
|
||||
SELECT
|
||||
Active.id AS ID,
|
||||
Active.eventtime AS StartTimestamp,
|
||||
Clear.eventtime AS EndTimestamp,
|
||||
|
||||
a.id AS ID,
|
||||
a.eventtime AS StartTimestamp,
|
||||
clr.eventtime AS EndTimestamp,
|
||||
|
||||
-- Duration calculation (HH:MM:SS format)
|
||||
CONCAT(
|
||||
LPAD(FLOOR(Active.duration_seconds / 3600), 2, '0'), ':',
|
||||
LPAD(FLOOR((Active.duration_seconds % 3600) / 60), 2, '0'), ':',
|
||||
LPAD(Active.duration_seconds % 60, 2, '0')
|
||||
LPAD(FLOOR(TIMESTAMPDIFF(SECOND, a.eventtime, COALESCE(clr.eventtime, NOW())) / 3600), 2, '0'), ':',
|
||||
LPAD(FLOOR((TIMESTAMPDIFF(SECOND, a.eventtime, COALESCE(clr.eventtime, NOW())) % 3600) / 60), 2, '0'), ':',
|
||||
LPAD( (TIMESTAMPDIFF(SECOND, a.eventtime, COALESCE(clr.eventtime, NOW())) % 60) , 2, '0')
|
||||
) AS Duration,
|
||||
|
||||
CONCAT(REPLACE(Active.displaypath, '_', '-'), ' ', SUBSTRING_INDEX(Active.source, ':/alm:', -1)) AS Description,
|
||||
|
||||
CASE Active.priority
|
||||
|
||||
-- Description combining display path and alarm name
|
||||
CONCAT(REPLACE(a.displaypath, '_', '-'), ' ', SUBSTRING_INDEX(a.source, ':/alm:', -1)) AS Description,
|
||||
|
||||
-- Priority mapping
|
||||
CASE a.priority
|
||||
WHEN 0 THEN 'Diagnostic'
|
||||
WHEN 1 THEN 'Low'
|
||||
WHEN 2 THEN 'Medium'
|
||||
@ -19,49 +22,50 @@ SELECT
|
||||
WHEN 4 THEN 'Critical'
|
||||
ELSE 'Unknown'
|
||||
END AS Priority,
|
||||
|
||||
-- Tag information
|
||||
CONCAT(a.displaypath, '.HMI.Alarm.', SUBSTRING_INDEX(aed.strValue, '/', -1)) AS Tag,
|
||||
SUBSTRING_INDEX(SUBSTRING_INDEX(aed.strValue, '/', 2), '/', -1) AS Location,
|
||||
aed.strValue AS FullTag,
|
||||
a.displaypath AS Device
|
||||
|
||||
CONCAT(
|
||||
Active.displaypath,
|
||||
'.HMI.Alarm.',
|
||||
SUBSTRING_INDEX(aed.strValue, '/', -1)
|
||||
) AS Tag,
|
||||
|
||||
SUBSTRING_INDEX(SUBSTRING_INDEX(aed.strValue, '/', 2), '/', -1) AS Location, aed.strValue AS FullTag,
|
||||
Active.displaypath AS Device
|
||||
|
||||
FROM (
|
||||
SELECT
|
||||
ae.id,
|
||||
ae.eventtime,
|
||||
ae.eventid,
|
||||
ae.source,
|
||||
ae.priority,
|
||||
ae.displaypath,
|
||||
TIMESTAMPDIFF(SECOND, ae.eventtime, COALESCE(ae_clear.eventtime, NOW())) AS duration_seconds
|
||||
FROM alarm_events ae
|
||||
LEFT JOIN alarm_events ae_clear
|
||||
ON ae.eventid = ae_clear.eventid
|
||||
AND ae_clear.eventtype = 1
|
||||
WHERE ae.eventtype = 0
|
||||
AND ae.displaypath NOT LIKE '%System Startup%'
|
||||
AND ae.source NOT LIKE '%System Startup%'
|
||||
GROUP BY ae.id
|
||||
) AS Active
|
||||
FROM alarm_events a
|
||||
|
||||
-- Join to get the earliest clear event for each alarm
|
||||
LEFT JOIN (
|
||||
SELECT eventid, MIN(eventtime) AS eventtime
|
||||
FROM alarm_events
|
||||
WHERE eventtype = 1
|
||||
GROUP BY eventid
|
||||
) AS Clear
|
||||
ON Active.eventid = Clear.eventid
|
||||
SELECT eventid, MIN(eventtime) AS eventtime
|
||||
FROM alarm_events
|
||||
WHERE eventtype = 1
|
||||
GROUP BY eventid
|
||||
) AS clr ON clr.eventid = a.eventid
|
||||
|
||||
-- Join to get additional tag data
|
||||
LEFT JOIN (
|
||||
SELECT aed.id, aed.strValue
|
||||
FROM alarm_event_data aed
|
||||
WHERE aed.propname = 'myTag'
|
||||
GROUP BY aed.id
|
||||
) AS aed
|
||||
ON aed.id = Active.id
|
||||
SELECT id, strValue
|
||||
FROM alarm_event_data
|
||||
WHERE propname = 'myTag'
|
||||
GROUP BY id
|
||||
) AS aed ON aed.id = a.id
|
||||
|
||||
ORDER BY Active.eventtime DESC;
|
||||
WHERE
|
||||
-- Only active alarm events (not clear events)
|
||||
a.eventtype = 0
|
||||
|
||||
-- Exclude system startup alarms
|
||||
AND a.displaypath NOT LIKE '%System Startup%'
|
||||
AND a.source NOT LIKE '%System Startup%'
|
||||
|
||||
-- Simple date filtering using named parameters
|
||||
AND (
|
||||
-- Case 1: Alarm was cleared within the specified time range
|
||||
(clr.eventtime IS NOT NULL AND clr.eventtime >= :starttime AND clr.eventtime < :endtime)
|
||||
OR
|
||||
-- Case 2: Alarm is still active (no clear time) and started within or before the range
|
||||
(clr.eventtime IS NULL AND a.eventtime < :endtime)
|
||||
)
|
||||
|
||||
-- Order by end time (most recent clears first), active alarms (NULL) at top, then by ID
|
||||
ORDER BY clr.eventtime IS NULL DESC, clr.eventtime DESC, a.id DESC
|
||||
|
||||
-- Pagination support (100 records per page)
|
||||
LIMIT 100 OFFSET :offset;
|
||||
|
||||
@ -1,63 +1,42 @@
|
||||
SELECT
|
||||
CONCAT(REPLACE(Active.displaypath, '_', '-'), ' ', SUBSTRING_INDEX(Active.source, ':/alm:', -1)) AS Description,
|
||||
SELECT
|
||||
CONCAT(COALESCE(ae.displaypath,'Unknown'), ' - ',
|
||||
SUBSTRING_INDEX(COALESCE(ae.source,''), ':/alm:', -1)) AS Description,
|
||||
SUBSTRING_INDEX(SUBSTRING_INDEX(COALESCE(aed.strValue,''), '/', 2), '/', -1) AS Location,
|
||||
CONCAT(COALESCE(ae.displaypath,'Unknown'), '.HMI.',
|
||||
SUBSTRING_INDEX(COALESCE(aed.strValue,''),'/',-1)) AS Tag,
|
||||
CASE ae.priority
|
||||
WHEN 0 THEN 'Diagnostic' WHEN 1 THEN 'Low' WHEN 2 THEN 'Medium'
|
||||
WHEN 3 THEN 'High' WHEN 4 THEN 'Critical' ELSE 'Unknown'
|
||||
END AS Priority,
|
||||
|
||||
SUBSTRING_INDEX(SUBSTRING_INDEX(aed.strValue, '/', 2), '/', -1) AS Location,
|
||||
MIN(ae.eventtime) AS FirstTimestamp,
|
||||
MAX(ae.eventtime) AS LastTimestamp,
|
||||
|
||||
CONCAT(
|
||||
Active.displaypath,
|
||||
'.HMI.Alarm.',
|
||||
SUBSTRING_INDEX(aed.strValue, '/', -1)
|
||||
) AS Tag,
|
||||
|
||||
CASE Active.priority
|
||||
WHEN 0 THEN 'Diagnostic'
|
||||
WHEN 1 THEN 'Low'
|
||||
WHEN 2 THEN 'Medium'
|
||||
WHEN 3 THEN 'High'
|
||||
WHEN 4 THEN 'Critical'
|
||||
ELSE 'Unknown'
|
||||
END AS Priority,
|
||||
-- total duration, formatted HH:MM:SS
|
||||
DATE_FORMAT(
|
||||
SEC_TO_TIME(SUM(TIMESTAMPDIFF(SECOND, ae.eventtime, COALESCE(clr.clear_time, NOW())))),
|
||||
'%H:%i:%s'
|
||||
) AS Duration,
|
||||
|
||||
-- First and last seen times for this alarm
|
||||
MIN(Active.eventtime) AS FirstTimestamp,
|
||||
MAX(Active.eventtime) AS LastTimestamp,
|
||||
COUNT(*) AS Count,
|
||||
|
||||
-- Total duration summed from each active-clear pair
|
||||
CONCAT(
|
||||
LPAD(FLOOR(SUM(Active.duration_seconds) / 3600), 2, '0'), ':',
|
||||
LPAD(FLOOR((SUM(Active.duration_seconds) % 3600) / 60), 2, '0'), ':',
|
||||
LPAD(SUM(Active.duration_seconds) % 60, 2, '0')
|
||||
) AS Duration,
|
||||
aed.strValue AS FullTag,
|
||||
ae.displaypath AS Device
|
||||
|
||||
-- Total number of activations
|
||||
COUNT(*) AS Count,
|
||||
|
||||
-- Newly added columns
|
||||
aed.strValue AS FullTag,
|
||||
Active.displaypath AS Device
|
||||
|
||||
FROM (
|
||||
SELECT
|
||||
ae.id,
|
||||
ae.source,
|
||||
ae.eventid,
|
||||
ae.eventtime,
|
||||
ae.priority,
|
||||
ae.displaypath,
|
||||
TIMESTAMPDIFF(SECOND, ae.eventtime, COALESCE(ae_clear.eventtime, NOW())) AS duration_seconds
|
||||
FROM alarm_events ae
|
||||
LEFT JOIN alarm_events ae_clear
|
||||
ON ae.eventid = ae_clear.eventid AND ae_clear.eventtype = 1
|
||||
WHERE ae.eventtype = 0
|
||||
AND ae.displaypath NOT LIKE '%System Startup%'
|
||||
AND ae.source NOT LIKE '%System Startup%'
|
||||
) AS Active
|
||||
|
||||
-- OPC tag path for building .hmi.Tag output
|
||||
LEFT JOIN alarm_event_data aed
|
||||
ON aed.id = Active.id AND aed.propname = 'myTag'
|
||||
|
||||
-- 🔹 Group by the full unique alarm key (tag + alarm name)
|
||||
GROUP BY Active.source, Active.displaypath, aed.strValue
|
||||
|
||||
ORDER BY FirstTimestamp DESC;
|
||||
FROM alarm_events ae
|
||||
LEFT JOIN (
|
||||
-- get earliest clear per event
|
||||
SELECT eventid, MIN(eventtime) AS clear_time
|
||||
FROM alarm_events
|
||||
WHERE eventtype = 1
|
||||
GROUP BY eventid
|
||||
) clr ON clr.eventid = ae.eventid
|
||||
LEFT JOIN alarm_event_data aed
|
||||
ON aed.id = ae.id AND aed.propname = 'myTag'
|
||||
WHERE ae.eventtype = 0
|
||||
AND COALESCE(ae.displaypath,'') NOT LIKE '%System Startup%'
|
||||
AND COALESCE(ae.source,'') NOT LIKE '%System Startup%'
|
||||
GROUP BY
|
||||
ae.source, ae.displaypath, aed.strValue
|
||||
ORDER BY
|
||||
FirstTimestamp DESC, MIN(ae.id) DESC;
|
||||
|
||||