diff --git a/BlenderCtrl_ProdModeInit_simplified.json.txt b/BlenderCtrl_ProdModeInit_simplified.json similarity index 60% rename from BlenderCtrl_ProdModeInit_simplified.json.txt rename to BlenderCtrl_ProdModeInit_simplified.json index 8481c8a..c9c59bd 100644 --- a/BlenderCtrl_ProdModeInit_simplified.json.txt +++ b/BlenderCtrl_ProdModeInit_simplified.json @@ -16,13 +16,41 @@ "id": "9", "title": "PID Reset Integral", "comment": "", - "logic": [] + "logic": [ + { + "instruction_uid": "21", + "uid": "21", + "type": "Call", + "block_name": "BlenderPID_PIDResInteg", + "block_type": "FC", + "inputs": { + "en": { + "type": "powerrail" + } + }, + "outputs": {} + } + ] }, { "id": "1A", "title": "Ctrl Init Errors", "comment": "", - "logic": [] + "logic": [ + { + "instruction_uid": "21", + "uid": "21", + "type": "Call", + "block_name": "BlenderCtrl_InitErrors", + "block_type": "FC", + "inputs": { + "en": { + "type": "powerrail" + } + }, + "outputs": {} + } + ] }, { "id": "2B", @@ -31,7 +59,11 @@ "logic": [ { "instruction_uid": "23", + "uid": "23", "type": "Move", + "template_values": { + "Card": "Cardinality" + }, "inputs": { "en": { "type": "powerrail" diff --git a/BlenderCtrl_ProdModeInit_simplified_processed.json b/BlenderCtrl_ProdModeInit_simplified_processed.json new file mode 100644 index 0000000..25721a0 --- /dev/null +++ b/BlenderCtrl_ProdModeInit_simplified_processed.json @@ -0,0 +1,96 @@ +{ + "block_name": "BlenderCtrl_ProdModeInit", + "block_number": 2012, + "language": "LAD", + "block_comment": "", + "interface": { + "Return": [ + { + "name": "Ret_Val", + "datatype": "Void" + } + ] + }, + "networks": [ + { + "id": "9", + "title": "PID Reset Integral", + "comment": "", + "logic": [ + { + "instruction_uid": "21", + "uid": "21", + "type": "Call_FC_scl", + "block_name": "BlenderPID_PIDResInteg", + "block_type": "FC", + "inputs": { + "en": { + "type": "powerrail" + } + }, + "outputs": {}, + "scl": "BlenderPID_PIDResInteg();" + } + ] + }, + { + "id": "1A", + "title": "Ctrl Init Errors", + "comment": "", + "logic": [ + { + "instruction_uid": "21", + "uid": "21", + "type": "Call_FC_scl", + "block_name": "BlenderCtrl_InitErrors", + "block_type": "FC", + "inputs": { + "en": { + "type": "powerrail" + } + }, + "outputs": {}, + "scl": "BlenderCtrl_InitErrors();" + } + ] + }, + { + "id": "2B", + "title": "RunOut Counter", + "comment": "", + "logic": [ + { + "instruction_uid": "23", + "uid": "23", + "type": "Move_scl", + "template_values": { + "Card": "Cardinality" + }, + "inputs": { + "en": { + "type": "powerrail" + }, + "in": { + "uid": "21", + "scope": "LiteralConstant", + "type": "constant", + "datatype": "Real", + "value": 0.0 + } + }, + "outputs": { + "out1": [ + { + "uid": "22", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"HMI_Variables_Status\".\"Analog_Values\".\"TP301RunOutCount\"" + } + ] + }, + "scl": "\"HMI_Variables_Status\".\"Analog_Values\".\"TP301RunOutCount\" := 0.0;" + } + ] + } + ] +} \ No newline at end of file diff --git a/BlenderCtrl_ProdModeInit_simplified_processed.scl b/BlenderCtrl_ProdModeInit_simplified_processed.scl new file mode 100644 index 0000000..427db6f --- /dev/null +++ b/BlenderCtrl_ProdModeInit_simplified_processed.scl @@ -0,0 +1,35 @@ +// Block Name (Original): BlenderCtrl_ProdModeInit +// Block Number: 2012 +// Original Language: LAD + +FUNCTION_BLOCK "BlenderCtrl_ProdModeInit" +{ S7_Optimized_Access := 'TRUE' } +VERSION : 0.1 + +VAR_INPUT +END_VAR + +VAR_OUTPUT +END_VAR + +VAR_IN_OUT +END_VAR + +VAR_TEMP +END_VAR + +BEGIN + + // Network 1: PID Reset Integral + + BlenderPID_PIDResInteg(); + + // Network 2: Ctrl Init Errors + + BlenderCtrl_InitErrors(); + + // Network 3: RunOut Counter + + "HMI_Variables_Status"."Analog_Values"."TP301RunOutCount" := 0.0; + +END_FUNCTION_BLOCK diff --git a/BlenderCtrl__Main.xml b/BlenderCtrl__Main.xml new file mode 100644 index 0000000..ad4869b --- /dev/null +++ b/BlenderCtrl__Main.xml @@ -0,0 +1,10030 @@ + + + + + + false + TASK2 + +
+
+
+
+ + + + + + + +
+
+
+ +
+ + Standard + BlenderCtrl__Main + + 2000 + LAD + false + + + + + + + it-IT + + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + + + + + + + + + + + + LAD + + + + + + + it-IT + + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + it-IT + Clock Generation + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + + + + + + + + + + + + + + LAD + + + + + + + it-IT + + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + it-IT + Machine Init + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Variant + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LAD + + + + + + + it-IT + + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + it-IT + Filler Head + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LAD + + + + + + + it-IT + + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + it-IT + Emergency Pressed + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 2 + + + + + + + 2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LAD + + + + + + + it-IT + + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + it-IT + Air and CO2 pressure ok and auxiliary ok + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + + + + + Int + 0 + + + + + + + + + + + 1 + + + + + + + + + + + + + + + + + + LAD + + + + + + + it-IT + + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + it-IT + Blender State Num + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + + + + + + + + + + + + + + + S5T#2S + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LAD + + + + + + + it-IT + + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + it-IT + Delay Power On + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LAD + + + + + + + it-IT + + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + it-IT + Production Mode + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + + + + + + + + + + + + + + + + + Int + 19 + + + + + + + + + + + + + + + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LAD + + + + + + + it-IT + + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + it-IT + CIp Mode + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LAD + + + + + + + it-IT + + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + it-IT + Error Faults + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LAD + + + + + + + it-IT + + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + it-IT + Filler Bottle Count Used to push Product + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LAD + + + + + + + it-IT + + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + it-IT + Water Bypass Enable + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LAD + + + + + + + it-IT + + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + it-IT + Still Water Bypass + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LAD + + + + + + + it-IT + + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + it-IT + Manual Syrup Drain Valve Open - Operator Alarm + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + + + + + + + + + + S5T#1S + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LAD + + + + + + + it-IT + + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + it-IT + Manual Syrup Drain Valve Open - Operator Alarm + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Int + 6 + + + + + Int + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LAD + + + + + + + it-IT + + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + it-IT + Maselli Control + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Int + 5 + + + + + Int + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LAD + + + + + + + it-IT + + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + it-IT + mPDS Control + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LAD + + + + + + + it-IT + + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + it-IT + mPDS Syrup Control + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Int + 3 + + + + + Int + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LAD + + + + + + + it-IT + GetProdBrixCO2_FromAnalogIn + CALL "GetProdBrixCO2_FromAn" + NOP 0 + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + it-IT + Co2 Analog Input + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + + + + + + + + + + + + + + LAD + + + + + + + it-IT + + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + it-IT + Quality + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + + + + + + + + + + + + + + + + + + LAD + + + + + + + it-IT + + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + it-IT + Input Data + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + + + + + + + + + + + + + + LAD + + + + + + + it-IT + + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + it-IT + Sel Brix Source Check + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LAD + + + + + + + it-IT + + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + it-IT + Check Water Cooling System Temperature + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + + + + + + + + + + + + + + LAD + + + + + + + it-IT + + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + it-IT + Tank Level + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LAD + + + + + + + it-IT + + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + it-IT + Production ONS + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LAD + + + + + + + it-IT + + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + it-IT + Blender Prod Mode Init + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LAD + + + + + + + it-IT + + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + it-IT + Rinse ONS + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LAD + + + + + + + it-IT + + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + it-IT + CIP ONS + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LAD + + + + + + + it-IT + + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + it-IT + CIp Mode Init + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + + + + + + + + + + + + + + LAD + + + + + + + it-IT + + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + it-IT + Reset SPWords + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + + + + + + + + + + + + + + LAD + + + + + + + it-IT + + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + it-IT + Blender Run Control + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + + + + + + + + + + + + + + LAD + + + + + + + it-IT + + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + it-IT + Tank Pressure Control + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + + + + + + + + + + + + + + LAD + + + + + + + it-IT + + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + it-IT + Balaiage + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + + + + + + + + + + + + + + + + + + LAD + + + + + + + it-IT + + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + it-IT + First Production + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + + + + + + + + + + + + + + LAD + + + + + + + it-IT + + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + it-IT + CIP MAIN Calling + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + + + + + + + + + + + + + + LAD + + + + + + + it-IT + + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + it-IT + Blender Rinse + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + + + + + + + + + + + + + + LAD + + + + + + + it-IT + + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + it-IT + Safeties + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + + + + + + + + + + + + + + LAD + + + + + + + it-IT + + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + it-IT + Instrument Scanner + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + + + + + + + + + + + + + + LAD + + + + + + + it-IT + + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + it-IT + Vacuum Control + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + + + + + + + + + + + + + + LAD + + + + + + + it-IT + + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + it-IT + Syrup Room Control + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LAD + + + + + + + it-IT + + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + it-IT + Blend Procedure Data + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + + + + + + + + + + + + + + LAD + + + + + + + it-IT + + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + it-IT + Pneumatic Valve Control + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + + + + + + + + + + + + + + LAD + + + + + + + it-IT + + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + it-IT + Pumps Control + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LAD + + + + + + + it-IT + + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + it-IT + Prod Report Manager + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + + + + + + + + + + + + + + LAD + + + + + + + it-IT + + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + it-IT + Outputs + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + + + + + + + + + + + + + + LAD + + + + + + + it-IT + + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + it-IT + SLIM BLOCK + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + + + + + + + + + + + + + + LAD + + + + + + + it-IT + + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + it-IT + Interlocking Panel 1 + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + + + + + + + + + + + + + + LAD + + + + + + + it-IT + + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + it-IT + Filler Control + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + + + + + + + + + + + + + + LAD + + + + + + + it-IT + + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + it-IT + Blender Ctrl Update PWORD + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + + + + + + + + + + S5T#2S + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LAD + + + + + + + it-IT + + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + it-IT + ResetTotalizer + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + S5T#2S + + + + + + + + + + + 2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LAD + + + + + + + it-IT + + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + it-IT + ResetWaterTot + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LAD + + + + + + + it-IT + + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + it-IT + Water VFM Reset Totalizer + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + S5T#2S + + + + + + + + + + + + + + + + 2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LAD + + + + + + + it-IT + + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + it-IT + ResetCO2Tot + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LAD + + + + + + + it-IT + + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + it-IT + Syrup MFM Reset Totalizer + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + S5T#2S + + + + + + + + + + + 2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LAD + + + + + + + it-IT + + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + it-IT + ResetProductTot + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LAD + + + + + + + it-IT + + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + it-IT + CO2 MFM Reset Tot + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + S5T#2S + + + + + + + + + + + 2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LAD + + + + + + + it-IT + + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + it-IT + ResetCO2Tot + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LAD + + + + + + + it-IT + + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + it-IT + Reset Totalizer + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LAD + + + + + + + it-IT + + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + it-IT + Reset Totalizer + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LAD + + + + + + + it-IT + + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + it-IT + Blender Ctrl Command + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + + + + + + + + + + + + + + LAD + + + + + + + it-IT + + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + it-IT + DP Global Diag + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + + + + + + + + + + + + + + LAD + + + + + + + it-IT + + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + it-IT + Profibus + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + + + + + + + + + + + + + + LAD + + + + + + + it-IT + + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + it-IT + Valve Fault + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LAD + + + + + + + it-IT + + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + it-IT + All Auto + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + + + + + + + + + + + + + + LAD + + + + + + + it-IT + + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + it-IT + Ctrl HMI Manual Active + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + S5T#500ms + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LAD + + + + + + + it-IT + + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + it-IT + Mod Copy Recipe + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Int + 50 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LAD + + + + + + + it-IT + + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + it-IT + to HMI - Recipe Management + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + + + + + + + + + + + + + + LAD + + + + + + + it-IT + + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + it-IT + Recipe Calculation + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + + + + + it-IT + Blender Main + + + + + de-DE + + + + + + en-US + + + + + + es-ES + + + + + + fr-FR + + + + + + zh-CN + + + + + + ja-JP + + + + + + + + \ No newline at end of file diff --git a/BlenderCtrl__Main_simplified.json b/BlenderCtrl__Main_simplified.json new file mode 100644 index 0000000..45f937b --- /dev/null +++ b/BlenderCtrl__Main_simplified.json @@ -0,0 +1,3628 @@ +{ + "block_name": "BlenderCtrl__Main", + "block_number": 2000, + "language": "LAD", + "block_comment": "", + "interface": { + "Temp": [ + { + "name": "All_Auto_RETVAL", + "datatype": "Int" + }, + { + "name": "Reset_SP_Word_RETVAL", + "datatype": "Int" + }, + { + "name": "mResetWaterTot", + "datatype": "Bool" + }, + { + "name": "mResetSyrupTot", + "datatype": "Bool" + }, + { + "name": "mResetCO2Tot", + "datatype": "Bool" + }, + { + "name": "mResetProductTot", + "datatype": "Bool" + }, + { + "name": "Block_Move_Err", + "datatype": "Int" + } + ], + "Return": [ + { + "name": "Ret_Val", + "datatype": "Void" + } + ] + }, + "networks": [ + { + "id": "9", + "title": "Clock Generation", + "comment": "", + "logic": [ + { + "instruction_uid": "21", + "uid": "21", + "type": "Call", + "block_name": "Clock Signal", + "block_type": "FC", + "inputs": { + "en": { + "type": "powerrail" + } + }, + "outputs": {} + } + ] + }, + { + "id": "1A", + "title": "Machine Init", + "comment": "", + "logic": [ + { + "instruction_uid": "21", + "uid": "21", + "type": "Call", + "block_name": "BlenderCtrl_MachineInit", + "block_type": "FC", + "inputs": { + "en": { + "type": "powerrail" + } + }, + "outputs": {} + } + ] + }, + { + "id": "2B", + "title": "Filler Head", + "comment": "", + "logic": [ + { + "instruction_uid": "25", + "uid": "25", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"AUX FALSE\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {} + }, + { + "instruction_uid": "26", + "uid": "26", + "type": "BLKMOV", + "template_values": { + "blk_type": "Type" + }, + "inputs": { + "en": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "25", + "source_pin": "out" + } + }, + "outputs": {} + } + ] + }, + { + "id": "3C", + "title": "Emergency Pressed", + "comment": "", + "logic": [ + { + "instruction_uid": "24", + "uid": "24", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gIN_VoltageOk\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {} + }, + { + "instruction_uid": "25", + "uid": "25", + "type": "NBox", + "template_values": {}, + "inputs": { + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "24", + "source_pin": "out" + }, + "bit": { + "uid": "22", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"M19000\"" + } + }, + "outputs": {} + }, + { + "instruction_uid": "26", + "uid": "26", + "type": "Coil", + "template_values": {}, + "inputs": { + "operand": { + "uid": "23", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gEmergencyPressed\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "NBox", + "source_instruction_uid": "25", + "source_pin": "out" + } + }, + "outputs": {} + } + ] + }, + { + "id": "4D", + "title": "Air and CO2 pressure ok and auxiliary ok", + "comment": "", + "logic": [ + { + "instruction_uid": "29", + "uid": "29", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gIN_LinePressCO2Ok\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {} + }, + { + "instruction_uid": "30", + "uid": "30", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "22", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gWorkshopTest\"" + } + }, + "outputs": {} + }, + { + "instruction_uid": "31", + "uid": "31", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "23", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gWorkshop_Co2_Presence\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "30", + "source_pin": "out" + } + }, + "outputs": {} + }, + { + "instruction_uid": "32", + "uid": "32", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "24", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gWorkshop_CIP_Signals\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "31", + "source_pin": "out" + } + }, + "outputs": {} + }, + { + "instruction_uid": "33", + "uid": "33", + "type": "O", + "template_values": { + "Card": "Cardinality" + }, + "inputs": { + "in2": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "32", + "source_pin": "out" + }, + "in1": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "29", + "source_pin": "out" + } + }, + "outputs": {} + }, + { + "instruction_uid": "34", + "uid": "34", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "25", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"HMI_Digital\".\"_PAL_S11\".\"Filtered\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "O", + "source_instruction_uid": "33", + "source_pin": "out" + } + }, + "outputs": {} + }, + { + "instruction_uid": "35", + "uid": "35", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "26", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"Disable_Bit\"" + } + }, + "outputs": {} + }, + { + "instruction_uid": "36", + "uid": "36", + "type": "O", + "template_values": { + "Card": "Cardinality" + }, + "inputs": { + "in2": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "35", + "source_pin": "out" + }, + "in1": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "34", + "source_pin": "out" + } + }, + "outputs": {} + }, + { + "instruction_uid": "37", + "uid": "37", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "27", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gIN_VoltageOk\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "O", + "source_instruction_uid": "36", + "source_pin": "out" + } + }, + "outputs": {} + }, + { + "instruction_uid": "38", + "uid": "38", + "type": "Coil", + "template_values": {}, + "inputs": { + "operand": { + "uid": "28", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gBlenderSuppliesOk\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "37", + "source_pin": "out" + } + }, + "outputs": {} + } + ] + }, + { + "id": "5E", + "title": "Blender State Num", + "comment": "", + "logic": [ + { + "instruction_uid": "23", + "uid": "23", + "type": "Move", + "template_values": { + "Card": "Cardinality" + }, + "inputs": { + "in": { + "uid": "21", + "scope": "LiteralConstant", + "type": "constant", + "datatype": "Int", + "value": 0 + }, + "en": { + "type": "powerrail" + } + }, + "outputs": { + "out1": [ + { + "uid": "22", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"HMI_Variables_Status\".\"Procedures\".\"BlenderStateNum\"" + } + ] + } + } + ] + }, + { + "id": "6F", + "title": "Delay Power On", + "comment": "", + "logic": [ + { + "instruction_uid": "24", + "uid": "24", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"FirstScan\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {} + }, + { + "instruction_uid": "25", + "uid": "25", + "type": "Se", + "template_values": {}, + "inputs": {}, + "outputs": {} + } + ] + }, + { + "id": "80", + "title": "Production Mode", + "comment": "", + "logic": [ + { + "instruction_uid": "23", + "uid": "23", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"HMI_Variables_Status\".\"System\".\"Blender_Prod_CIP\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {} + }, + { + "instruction_uid": "24", + "uid": "24", + "type": "Coil", + "template_values": {}, + "inputs": { + "operand": { + "uid": "22", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gBlenderProdMode\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "23", + "source_pin": "out" + } + }, + "outputs": {} + } + ] + }, + { + "id": "91", + "title": "CIp Mode", + "comment": "", + "logic": [ + { + "instruction_uid": "25", + "uid": "25", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"HMI_Variables_Status\".\"System\".\"Blender_Prod_CIP\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {} + }, + { + "instruction_uid": "26", + "uid": "26", + "type": "Coil", + "template_values": {}, + "inputs": { + "operand": { + "uid": "22", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gBlenderCIPMode\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "25", + "source_pin": "out" + } + }, + "outputs": {} + }, + { + "instruction_uid": "27", + "uid": "27", + "type": "Move", + "template_values": { + "Card": "Cardinality" + }, + "inputs": { + "in": { + "uid": "23", + "scope": "LiteralConstant", + "type": "constant", + "datatype": "Int", + "value": 19 + }, + "en": { + "type": "connection", + "source_instruction_uid": "25", + "source_instruction_type": "Contact", + "source_pin": "out" + } + }, + "outputs": { + "out1": [ + { + "uid": "24", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"HMI_Variables_Status\".\"Procedures\".\"BlenderStateNum\"" + } + ] + } + } + ] + }, + { + "id": "A2", + "title": "Error Faults", + "comment": "", + "logic": [ + { + "instruction_uid": "26", + "uid": "26", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"AUX FALSE\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {} + }, + { + "instruction_uid": "27", + "uid": "27", + "type": "RCoil", + "template_values": {}, + "inputs": { + "operand": { + "uid": "22", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"HMI_Variables_Status\".\"Meters\".\"QTM3012_PRD_Fault\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "26", + "source_pin": "out" + } + }, + "outputs": {} + }, + { + "instruction_uid": "28", + "uid": "28", + "type": "RCoil", + "template_values": {}, + "inputs": { + "operand": { + "uid": "23", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gmPDS2000_Error_Fault\"" + } + }, + "outputs": {} + }, + { + "instruction_uid": "29", + "uid": "29", + "type": "RCoil", + "template_values": {}, + "inputs": { + "operand": { + "uid": "24", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"HMI_Variables_Status\".\"Meters\".\"QTM3012_PRD_Run\"" + } + }, + "outputs": {} + }, + { + "instruction_uid": "30", + "uid": "30", + "type": "RCoil", + "template_values": {}, + "inputs": { + "operand": { + "uid": "25", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gNoFreezeProductMeter\"" + } + }, + "outputs": {} + } + ] + }, + { + "id": "B3", + "title": "Filler Bottle Count Used to push Product", + "comment": "", + "logic": [ + { + "instruction_uid": "23", + "uid": "23", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"System_RunOut_Variables\".\"ProdPipeRunOutWaterCount\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {} + }, + { + "instruction_uid": "24", + "uid": "24", + "type": "Coil", + "template_values": {}, + "inputs": { + "operand": { + "uid": "22", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"System_RunOut_Variables\".\"ProdPipeRunOutFillerBott\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "23", + "source_pin": "out" + } + }, + "outputs": {} + } + ] + }, + { + "id": "C4", + "title": "Water Bypass Enable", + "comment": "", + "logic": [ + { + "instruction_uid": "27", + "uid": "27", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_StillWaterByPass\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {} + }, + { + "instruction_uid": "28", + "uid": "28", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "22", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_ByPassDeair\"" + } + }, + "outputs": {} + }, + { + "instruction_uid": "29", + "uid": "29", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "23", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_Deaireation\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "28", + "source_pin": "out" + } + }, + "outputs": {} + }, + { + "instruction_uid": "30", + "uid": "30", + "type": "O", + "template_values": { + "Card": "Cardinality" + }, + "inputs": { + "in2": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "29", + "source_pin": "out" + }, + "in1": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "27", + "source_pin": "out" + } + }, + "outputs": {} + }, + { + "instruction_uid": "31", + "uid": "31", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "24", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"Blender_Variables_Pers\".\"gWaterRecipe\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "O", + "source_instruction_uid": "30", + "source_pin": "out" + } + }, + "outputs": {} + }, + { + "instruction_uid": "32", + "uid": "32", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "25", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"Blender_Variables_Pers\".\"gCarboStillRecipe\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "31", + "source_pin": "out" + } + }, + "outputs": {} + }, + { + "instruction_uid": "33", + "uid": "33", + "type": "Coil", + "template_values": {}, + "inputs": { + "operand": { + "uid": "26", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gStillWaterByPassEn\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "32", + "source_pin": "out" + } + }, + "outputs": {} + } + ] + }, + { + "id": "D5", + "title": "Still Water Bypass", + "comment": "", + "logic": [ + { + "instruction_uid": "26", + "uid": "26", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_BlendFillSystem\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {} + }, + { + "instruction_uid": "27", + "uid": "27", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "22", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_StillWaterByPass\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "26", + "source_pin": "out" + } + }, + "outputs": {} + }, + { + "instruction_uid": "28", + "uid": "28", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "23", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"Blender_Variables_Pers\".\"gWaterRecipe\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "27", + "source_pin": "out" + } + }, + "outputs": {} + }, + { + "instruction_uid": "29", + "uid": "29", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "24", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"Blender_Variables_Pers\".\"gCarboStillRecipe\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "28", + "source_pin": "out" + } + }, + "outputs": {} + }, + { + "instruction_uid": "30", + "uid": "30", + "type": "Coil", + "template_values": {}, + "inputs": { + "operand": { + "uid": "25", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gBlendFiStillWaterByPass\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "29", + "source_pin": "out" + } + }, + "outputs": {} + } + ] + }, + { + "id": "E6", + "title": "Manual Syrup Drain Valve Open - Operator Alarm", + "comment": "", + "logic": [ + { + "instruction_uid": "30", + "uid": "30", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gSyrupRoomEn\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {} + }, + { + "instruction_uid": "31", + "uid": "31", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "22", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gIN_HVP301_Aux\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "30", + "source_pin": "out" + } + }, + "outputs": {} + }, + { + "instruction_uid": "32", + "uid": "32", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "23", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_FastChangeOverEnabled\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "31", + "source_pin": "out" + } + }, + "outputs": {} + }, + { + "instruction_uid": "33", + "uid": "33", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "24", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"Procedure_Variables\".\"FTP302Line_Preparation\".\"Done\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "32", + "source_pin": "out" + } + }, + "outputs": {} + }, + { + "instruction_uid": "34", + "uid": "34", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "25", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"Procedure_Variables\".\"Syr_RunOut\".\"Done\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "33", + "source_pin": "out" + } + }, + "outputs": {} + }, + { + "instruction_uid": "35", + "uid": "35", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "26", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gBlenderCIPMode\"" + } + }, + "outputs": {} + }, + { + "instruction_uid": "36", + "uid": "36", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "27", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gIN_CIP_CIPRunning\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "35", + "source_pin": "out" + } + }, + "outputs": {} + }, + { + "instruction_uid": "37", + "uid": "37", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "28", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"Procedure_Variables\".\"Blender_Run\".\"Running\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "36", + "source_pin": "out" + } + }, + "outputs": {} + }, + { + "instruction_uid": "38", + "uid": "38", + "type": "O", + "template_values": { + "Card": "Cardinality" + }, + "inputs": { + "in2": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "37", + "source_pin": "out" + }, + "in1": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "34", + "source_pin": "out" + } + }, + "outputs": {} + }, + { + "instruction_uid": "39", + "uid": "39", + "type": "Coil", + "template_values": {}, + "inputs": { + "operand": { + "uid": "29", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gHVP301_Open\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "O", + "source_instruction_uid": "38", + "source_pin": "out" + } + }, + "outputs": {} + } + ] + }, + { + "id": "F7", + "title": "Manual Syrup Drain Valve Open - Operator Alarm", + "comment": "", + "logic": [ + { + "instruction_uid": "25", + "uid": "25", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gIN_HVM302_Aux\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {} + }, + { + "instruction_uid": "26", + "uid": "26", + "type": "Sd", + "template_values": {}, + "inputs": {}, + "outputs": {} + }, + { + "instruction_uid": "27", + "uid": "27", + "type": "Coil", + "template_values": {}, + "inputs": { + "operand": { + "uid": "24", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gHVM302_Open\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Sd", + "source_instruction_uid": "26", + "source_pin": "q" + } + }, + "outputs": {} + } + ] + }, + { + "id": "108", + "title": "Maselli Control", + "comment": "", + "logic": [ + { + "instruction_uid": "24", + "uid": "24", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_BrixMeter\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {} + }, + { + "instruction_uid": "25", + "uid": "25", + "type": "Eq", + "template_values": { + "SrcType": "Type" + }, + "inputs": { + "pre": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "24", + "source_pin": "out" + }, + "in2": { + "uid": "23", + "scope": "LiteralConstant", + "type": "constant", + "datatype": "Int", + "value": 6 + }, + "in1": { + "uid": "22", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_MeterType\"" + } + }, + "outputs": {} + }, + { + "instruction_uid": "26", + "uid": "26", + "type": "Call", + "block_name": "Maselli_PA_Control", + "block_type": "FC", + "inputs": { + "en": { + "type": "connection", + "source_instruction_type": "Eq", + "source_instruction_uid": "25", + "source_pin": "out" + } + }, + "outputs": {} + } + ] + }, + { + "id": "119", + "title": "mPDS Control", + "comment": "", + "logic": [ + { + "instruction_uid": "24", + "uid": "24", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_BrixMeter\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {} + }, + { + "instruction_uid": "25", + "uid": "25", + "type": "Eq", + "template_values": { + "SrcType": "Type" + }, + "inputs": { + "pre": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "24", + "source_pin": "out" + }, + "in2": { + "uid": "23", + "scope": "LiteralConstant", + "type": "constant", + "datatype": "Int", + "value": 5 + }, + "in1": { + "uid": "22", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_MeterType\"" + } + }, + "outputs": {} + }, + { + "instruction_uid": "26", + "uid": "26", + "type": "Call", + "block_name": "mPDS_PA_Control", + "block_type": "FC", + "inputs": { + "en": { + "type": "connection", + "source_instruction_type": "Eq", + "source_instruction_uid": "25", + "source_pin": "out" + } + }, + "outputs": {} + } + ] + }, + { + "id": "12A", + "title": "mPDS Syrup Control", + "comment": "", + "logic": [ + { + "instruction_uid": "22", + "uid": "22", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_SyrBrixMeter\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {} + }, + { + "instruction_uid": "23", + "uid": "23", + "type": "Call", + "block_name": "mPDS_SYR_PA_Control", + "block_type": "FC", + "inputs": { + "en": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "22", + "source_pin": "out" + } + }, + "outputs": {} + } + ] + }, + { + "id": "13B", + "title": "Co2 Analog Input", + "comment": "GetProdBrixCO2_FromAnalogIn\n CALL \"GetProdBrixCO2_FromAn\"\n NOP 0", + "logic": [ + { + "instruction_uid": "24", + "uid": "24", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_BrixMeter\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {} + }, + { + "instruction_uid": "25", + "uid": "25", + "type": "Eq", + "template_values": { + "SrcType": "Type" + }, + "inputs": { + "pre": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "24", + "source_pin": "out" + }, + "in2": { + "uid": "23", + "scope": "LiteralConstant", + "type": "constant", + "datatype": "Int", + "value": 3 + }, + "in1": { + "uid": "22", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_MeterType\"" + } + }, + "outputs": {} + }, + { + "instruction_uid": "26", + "uid": "26", + "type": "Call", + "block_name": "GetProdBrixCO2_Anal_Inpt", + "block_type": "FC", + "inputs": { + "en": { + "type": "connection", + "source_instruction_type": "Eq", + "source_instruction_uid": "25", + "source_pin": "out" + } + }, + "outputs": {} + } + ] + }, + { + "id": "14C", + "title": "Quality", + "comment": "", + "logic": [ + { + "instruction_uid": "21", + "uid": "21", + "type": "Call", + "block_name": "ProductQuality", + "block_type": "FC", + "inputs": { + "en": { + "type": "powerrail" + } + }, + "outputs": {} + } + ] + }, + { + "id": "15D", + "title": "Input Data", + "comment": "", + "logic": [ + { + "instruction_uid": "21", + "uid": "21", + "type": "Call", + "block_name": "Input", + "block_type": "FB", + "instance_scope": "GlobalVariable", + "inputs": { + "en": { + "type": "powerrail" + } + }, + "outputs": {} + } + ] + }, + { + "id": "16E", + "title": "Sel Brix Source Check", + "comment": "", + "logic": [ + { + "instruction_uid": "21", + "uid": "21", + "type": "Call", + "block_name": "SelCheckBrixSource", + "block_type": "FC", + "inputs": { + "en": { + "type": "powerrail" + } + }, + "outputs": {} + } + ] + }, + { + "id": "17F", + "title": "Check Water Cooling System Temperature", + "comment": "", + "logic": [ + { + "instruction_uid": "22", + "uid": "22", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_InverterRecirPumpPPM306\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {} + }, + { + "instruction_uid": "23", + "uid": "23", + "type": "Call", + "block_name": "CTRLCoolingSystem", + "block_type": "FC", + "inputs": { + "en": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "22", + "source_pin": "out" + } + }, + "outputs": {} + } + ] + }, + { + "id": "190", + "title": "Tank Level", + "comment": "", + "logic": [ + { + "instruction_uid": "21", + "uid": "21", + "type": "Call", + "block_name": "TankLevel", + "block_type": "FC", + "inputs": { + "en": { + "type": "powerrail" + } + }, + "outputs": {} + } + ] + }, + { + "id": "1A1", + "title": "Production ONS", + "comment": "", + "logic": [ + { + "instruction_uid": "25", + "uid": "25", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gBlenderProdMode\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {} + }, + { + "instruction_uid": "26", + "uid": "26", + "type": "PBox", + "template_values": {}, + "inputs": { + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "25", + "source_pin": "out" + }, + "bit": { + "uid": "22", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"M19001\"" + } + }, + "outputs": {} + }, + { + "instruction_uid": "27", + "uid": "27", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "23", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"mDelayPowerOnTmr\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "PBox", + "source_instruction_uid": "26", + "source_pin": "out" + } + }, + "outputs": {} + }, + { + "instruction_uid": "28", + "uid": "28", + "type": "Coil", + "template_values": {}, + "inputs": { + "operand": { + "uid": "24", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gProductionONS\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "27", + "source_pin": "out" + } + }, + "outputs": {} + } + ] + }, + { + "id": "1B2", + "title": "Blender Prod Mode Init", + "comment": "", + "logic": [ + { + "instruction_uid": "24", + "uid": "24", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gProductionONS\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {} + }, + { + "instruction_uid": "25", + "uid": "25", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "22", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"Procedure_Variables\".\"Blender_Rinse\".\"ONS_Done\"" + } + }, + "outputs": {} + }, + { + "instruction_uid": "26", + "uid": "26", + "type": "O", + "template_values": { + "Card": "Cardinality" + }, + "inputs": { + "in2": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "25", + "source_pin": "out" + }, + "in1": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "24", + "source_pin": "out" + } + }, + "outputs": {} + }, + { + "instruction_uid": "27", + "uid": "27", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "23", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"Blender_Variables_Pers\".\"gBlenderStarted\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "O", + "source_instruction_uid": "26", + "source_pin": "out" + } + }, + "outputs": {} + }, + { + "instruction_uid": "28", + "uid": "28", + "type": "Call", + "block_name": "BlenderCtrl_ProdModeInit", + "block_type": "FC", + "inputs": { + "en": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "27", + "source_pin": "out" + } + }, + "outputs": {} + } + ] + }, + { + "id": "1C3", + "title": "Rinse ONS", + "comment": "", + "logic": [ + { + "instruction_uid": "25", + "uid": "25", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"HMI_Variables_Status\".\"System\".\"Blender_Prod_CIP\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {} + }, + { + "instruction_uid": "26", + "uid": "26", + "type": "PBox", + "template_values": {}, + "inputs": { + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "25", + "source_pin": "out" + }, + "bit": { + "uid": "22", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"M19002\"" + } + }, + "outputs": {} + }, + { + "instruction_uid": "27", + "uid": "27", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "23", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"mDelayPowerOnTmr\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "PBox", + "source_instruction_uid": "26", + "source_pin": "out" + } + }, + "outputs": {} + }, + { + "instruction_uid": "28", + "uid": "28", + "type": "Coil", + "template_values": {}, + "inputs": { + "operand": { + "uid": "24", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gRinseONS\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "27", + "source_pin": "out" + } + }, + "outputs": {} + } + ] + }, + { + "id": "1D4", + "title": "CIP ONS", + "comment": "", + "logic": [ + { + "instruction_uid": "25", + "uid": "25", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gBlenderCIPMode\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {} + }, + { + "instruction_uid": "26", + "uid": "26", + "type": "PBox", + "template_values": {}, + "inputs": { + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "25", + "source_pin": "out" + }, + "bit": { + "uid": "22", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"M19003\"" + } + }, + "outputs": {} + }, + { + "instruction_uid": "27", + "uid": "27", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "23", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"mDelayPowerOnTmr\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "PBox", + "source_instruction_uid": "26", + "source_pin": "out" + } + }, + "outputs": {} + }, + { + "instruction_uid": "28", + "uid": "28", + "type": "Coil", + "template_values": {}, + "inputs": { + "operand": { + "uid": "24", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gCIPONS\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "27", + "source_pin": "out" + } + }, + "outputs": {} + } + ] + }, + { + "id": "1E5", + "title": "CIp Mode Init", + "comment": "", + "logic": [ + { + "instruction_uid": "22", + "uid": "22", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gCIPONS\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {} + }, + { + "instruction_uid": "23", + "uid": "23", + "type": "Call", + "block_name": "BlenderCtrl_CIPModeInit", + "block_type": "FC", + "inputs": { + "en": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "22", + "source_pin": "out" + } + }, + "outputs": {} + } + ] + }, + { + "id": "1F6", + "title": "Reset SPWords", + "comment": "", + "logic": [ + { + "instruction_uid": "21", + "uid": "21", + "type": "Call", + "block_name": "BlenderCtrl_ResetSPWord", + "block_type": "FC", + "inputs": { + "en": { + "type": "powerrail" + } + }, + "outputs": {} + } + ] + }, + { + "id": "207", + "title": "Blender Run Control", + "comment": "", + "logic": [ + { + "instruction_uid": "21", + "uid": "21", + "type": "Call", + "block_name": "BlenderRun__Control", + "block_type": "FC", + "inputs": { + "en": { + "type": "powerrail" + } + }, + "outputs": {} + } + ] + }, + { + "id": "218", + "title": "Tank Pressure Control", + "comment": "", + "logic": [ + { + "instruction_uid": "21", + "uid": "21", + "type": "Call", + "block_name": "Prod Tank PressCtrl", + "block_type": "FC", + "inputs": { + "en": { + "type": "powerrail" + } + }, + "outputs": {} + } + ] + }, + { + "id": "229", + "title": "Balaiage", + "comment": "", + "logic": [ + { + "instruction_uid": "21", + "uid": "21", + "type": "Call", + "block_name": "Baialage", + "block_type": "FC", + "inputs": { + "en": { + "type": "powerrail" + } + }, + "outputs": {} + } + ] + }, + { + "id": "23A", + "title": "First Production", + "comment": "", + "logic": [ + { + "instruction_uid": "21", + "uid": "21", + "type": "Call", + "block_name": "ProcedureFirstProduction", + "block_type": "FB", + "instance_scope": "GlobalVariable", + "inputs": { + "en": { + "type": "powerrail" + } + }, + "outputs": {} + } + ] + }, + { + "id": "24B", + "title": "CIP MAIN Calling", + "comment": "", + "logic": [ + { + "instruction_uid": "21", + "uid": "21", + "type": "Call", + "block_name": "CIPMain", + "block_type": "FC", + "inputs": { + "en": { + "type": "powerrail" + } + }, + "outputs": {} + } + ] + }, + { + "id": "25C", + "title": "Blender Rinse", + "comment": "", + "logic": [ + { + "instruction_uid": "21", + "uid": "21", + "type": "Call", + "block_name": "BlenderRinse", + "block_type": "FC", + "inputs": { + "en": { + "type": "powerrail" + } + }, + "outputs": {} + } + ] + }, + { + "id": "26D", + "title": "Safeties", + "comment": "", + "logic": [ + { + "instruction_uid": "21", + "uid": "21", + "type": "Call", + "block_name": "Safeties", + "block_type": "FC", + "inputs": { + "en": { + "type": "powerrail" + } + }, + "outputs": {} + } + ] + }, + { + "id": "27E", + "title": "Instrument Scanner", + "comment": "", + "logic": [ + { + "instruction_uid": "21", + "uid": "21", + "type": "Call", + "block_name": "Instrument_Scanner", + "block_type": "FC", + "inputs": { + "en": { + "type": "powerrail" + } + }, + "outputs": {} + } + ] + }, + { + "id": "28F", + "title": "Vacuum Control", + "comment": "", + "logic": [ + { + "instruction_uid": "21", + "uid": "21", + "type": "Call", + "block_name": "VacuumCtrl", + "block_type": "FC", + "inputs": { + "en": { + "type": "powerrail" + } + }, + "outputs": {} + } + ] + }, + { + "id": "2A0", + "title": "Syrup Room Control", + "comment": "", + "logic": [ + { + "instruction_uid": "21", + "uid": "21", + "type": "Call", + "block_name": "SyrupRoomCtrl", + "block_type": "FC", + "inputs": { + "en": { + "type": "powerrail" + } + }, + "outputs": {} + } + ] + }, + { + "id": "2B1", + "title": "Blend Procedure Data", + "comment": "", + "logic": [ + { + "instruction_uid": "22", + "uid": "22", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"mDelayPowerOnTmr\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {} + }, + { + "instruction_uid": "23", + "uid": "23", + "type": "Call", + "block_name": "Procedure", + "block_type": "FB", + "instance_scope": "GlobalVariable", + "inputs": { + "en": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "22", + "source_pin": "out" + } + }, + "outputs": {} + } + ] + }, + { + "id": "2C2", + "title": "Pneumatic Valve Control", + "comment": "", + "logic": [ + { + "instruction_uid": "21", + "uid": "21", + "type": "Call", + "block_name": "Pneumatic Valve Ctrl", + "block_type": "FC", + "inputs": { + "en": { + "type": "powerrail" + } + }, + "outputs": {} + } + ] + }, + { + "id": "2D3", + "title": "Pumps Control", + "comment": "", + "logic": [ + { + "instruction_uid": "21", + "uid": "21", + "type": "Call", + "block_name": "PumpsControl", + "block_type": "FC", + "inputs": { + "en": { + "type": "powerrail" + } + }, + "outputs": {} + } + ] + }, + { + "id": "2E4", + "title": "Prod Report Manager", + "comment": "", + "logic": [ + { + "instruction_uid": "22", + "uid": "22", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_Report\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {} + }, + { + "instruction_uid": "23", + "uid": "23", + "type": "Call", + "block_name": "ProdReportManager", + "block_type": "FC", + "inputs": { + "en": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "22", + "source_pin": "out" + } + }, + "outputs": {} + } + ] + }, + { + "id": "2F5", + "title": "Outputs", + "comment": "", + "logic": [ + { + "instruction_uid": "21", + "uid": "21", + "type": "Call", + "block_name": "Output", + "block_type": "FC", + "inputs": { + "en": { + "type": "powerrail" + } + }, + "outputs": {} + } + ] + }, + { + "id": "306", + "title": "SLIM BLOCK", + "comment": "", + "logic": [ + { + "instruction_uid": "21", + "uid": "21", + "type": "Call", + "block_name": "SLIM_Block", + "block_type": "FC", + "inputs": { + "en": { + "type": "powerrail" + } + }, + "outputs": {} + } + ] + }, + { + "id": "317", + "title": "Interlocking Panel 1", + "comment": "", + "logic": [ + { + "instruction_uid": "21", + "uid": "21", + "type": "Call", + "block_name": "Interlocking_Panel_1", + "block_type": "FC", + "inputs": { + "en": { + "type": "powerrail" + } + }, + "outputs": {} + } + ] + }, + { + "id": "328", + "title": "Filler Control", + "comment": "", + "logic": [ + { + "instruction_uid": "21", + "uid": "21", + "type": "Call", + "block_name": "FillerControl", + "block_type": "FC", + "inputs": { + "en": { + "type": "powerrail" + } + }, + "outputs": {} + } + ] + }, + { + "id": "339", + "title": "Blender Ctrl Update PWORD", + "comment": "", + "logic": [ + { + "instruction_uid": "21", + "uid": "21", + "type": "Call", + "block_name": "BlenderCtrl_UpdatePWord", + "block_type": "FC", + "inputs": { + "en": { + "type": "powerrail" + } + }, + "outputs": {} + } + ] + }, + { + "id": "34A", + "title": "ResetTotalizer", + "comment": "", + "logic": [ + { + "instruction_uid": "24", + "uid": "24", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gBlendResetTotalizer\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {} + }, + { + "instruction_uid": "25", + "uid": "25", + "type": "Se", + "template_values": {}, + "inputs": {}, + "outputs": {} + } + ] + }, + { + "id": "35B", + "title": "ResetWaterTot", + "comment": "", + "logic": [ + { + "instruction_uid": "26", + "uid": "26", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gFTN301_ResetTot\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {} + }, + { + "instruction_uid": "27", + "uid": "27", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "22", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"mResetTotalizerTmr\"" + } + }, + "outputs": {} + }, + { + "instruction_uid": "28", + "uid": "28", + "type": "O", + "template_values": { + "Card": "Cardinality" + }, + "inputs": { + "in2": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "27", + "source_pin": "out" + }, + "in1": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "26", + "source_pin": "out" + } + }, + "outputs": {} + }, + { + "instruction_uid": "29", + "uid": "29", + "type": "Se", + "template_values": {}, + "inputs": {}, + "outputs": {} + }, + { + "instruction_uid": "30", + "uid": "30", + "type": "Coil", + "template_values": {}, + "inputs": { + "operand": { + "uid": "25", + "scope": "LocalVariable", + "type": "variable", + "name": "\"mResetWaterTot\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Se", + "source_instruction_uid": "29", + "source_pin": "q" + } + }, + "outputs": {} + } + ] + }, + { + "id": "36C", + "title": "Water VFM Reset Totalizer", + "comment": "", + "logic": [ + { + "instruction_uid": "23", + "uid": "23", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gFTN301_ResetTot\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {} + }, + { + "instruction_uid": "24", + "uid": "24", + "type": "RCoil", + "template_values": {}, + "inputs": { + "operand": { + "uid": "22", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gFTN301_ResetTot\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "23", + "source_pin": "out" + } + }, + "outputs": {} + } + ] + }, + { + "id": "37D", + "title": "ResetCO2Tot", + "comment": "", + "logic": [ + { + "instruction_uid": "27", + "uid": "27", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gFTP302_ResetTot\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {} + }, + { + "instruction_uid": "28", + "uid": "28", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "22", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"mResetTotalizerTmr\"" + } + }, + "outputs": {} + }, + { + "instruction_uid": "29", + "uid": "29", + "type": "O", + "template_values": { + "Card": "Cardinality" + }, + "inputs": { + "in2": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "28", + "source_pin": "out" + }, + "in1": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "27", + "source_pin": "out" + } + }, + "outputs": {} + }, + { + "instruction_uid": "30", + "uid": "30", + "type": "Se", + "template_values": {}, + "inputs": {}, + "outputs": {} + }, + { + "instruction_uid": "31", + "uid": "31", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "25", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gSyrupRoomEn\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Se", + "source_instruction_uid": "30", + "source_pin": "q" + } + }, + "outputs": {} + }, + { + "instruction_uid": "32", + "uid": "32", + "type": "Coil", + "template_values": {}, + "inputs": { + "operand": { + "uid": "26", + "scope": "LocalVariable", + "type": "variable", + "name": "\"mResetSyrupTot\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "31", + "source_pin": "out" + } + }, + "outputs": {} + } + ] + }, + { + "id": "38E", + "title": "Syrup MFM Reset Totalizer", + "comment": "", + "logic": [ + { + "instruction_uid": "23", + "uid": "23", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gFTP302_ResetTot\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {} + }, + { + "instruction_uid": "24", + "uid": "24", + "type": "RCoil", + "template_values": {}, + "inputs": { + "operand": { + "uid": "22", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gFTP302_ResetTot\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "23", + "source_pin": "out" + } + }, + "outputs": {} + } + ] + }, + { + "id": "39F", + "title": "ResetProductTot", + "comment": "", + "logic": [ + { + "instruction_uid": "26", + "uid": "26", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gFTM303_ResetTot\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {} + }, + { + "instruction_uid": "27", + "uid": "27", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "22", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"mResetTotalizerTmr\"" + } + }, + "outputs": {} + }, + { + "instruction_uid": "28", + "uid": "28", + "type": "O", + "template_values": { + "Card": "Cardinality" + }, + "inputs": { + "in2": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "27", + "source_pin": "out" + }, + "in1": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "26", + "source_pin": "out" + } + }, + "outputs": {} + }, + { + "instruction_uid": "29", + "uid": "29", + "type": "Se", + "template_values": {}, + "inputs": {}, + "outputs": {} + }, + { + "instruction_uid": "30", + "uid": "30", + "type": "Coil", + "template_values": {}, + "inputs": { + "operand": { + "uid": "25", + "scope": "LocalVariable", + "type": "variable", + "name": "\"mResetCO2Tot\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Se", + "source_instruction_uid": "29", + "source_pin": "q" + } + }, + "outputs": {} + } + ] + }, + { + "id": "3B0", + "title": "CO2 MFM Reset Tot", + "comment": "", + "logic": [ + { + "instruction_uid": "23", + "uid": "23", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gFTM303_ResetTot\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {} + }, + { + "instruction_uid": "24", + "uid": "24", + "type": "RCoil", + "template_values": {}, + "inputs": { + "operand": { + "uid": "22", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gFTM303_ResetTot\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "23", + "source_pin": "out" + } + }, + "outputs": {} + } + ] + }, + { + "id": "3C1", + "title": "ResetCO2Tot", + "comment": "", + "logic": [ + { + "instruction_uid": "26", + "uid": "26", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gProductMFMResetTot\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {} + }, + { + "instruction_uid": "27", + "uid": "27", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "22", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"mResetTotalizerTmr\"" + } + }, + "outputs": {} + }, + { + "instruction_uid": "28", + "uid": "28", + "type": "O", + "template_values": { + "Card": "Cardinality" + }, + "inputs": { + "in2": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "27", + "source_pin": "out" + }, + "in1": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "26", + "source_pin": "out" + } + }, + "outputs": {} + }, + { + "instruction_uid": "29", + "uid": "29", + "type": "Se", + "template_values": {}, + "inputs": {}, + "outputs": {} + }, + { + "instruction_uid": "30", + "uid": "30", + "type": "Coil", + "template_values": {}, + "inputs": { + "operand": { + "uid": "25", + "scope": "LocalVariable", + "type": "variable", + "name": "\"mResetProductTot\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Se", + "source_instruction_uid": "29", + "source_pin": "q" + } + }, + "outputs": {} + } + ] + }, + { + "id": "3D2", + "title": "Reset Totalizer", + "comment": "", + "logic": [ + { + "instruction_uid": "23", + "uid": "23", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gProductMFMResetTot\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {} + }, + { + "instruction_uid": "24", + "uid": "24", + "type": "RCoil", + "template_values": {}, + "inputs": { + "operand": { + "uid": "22", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gProductMFMResetTot\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "23", + "source_pin": "out" + } + }, + "outputs": {} + } + ] + }, + { + "id": "3E3", + "title": "Reset Totalizer", + "comment": "", + "logic": [ + { + "instruction_uid": "23", + "uid": "23", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gBlendResetTotalizer\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {} + }, + { + "instruction_uid": "24", + "uid": "24", + "type": "RCoil", + "template_values": {}, + "inputs": { + "operand": { + "uid": "22", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gBlendResetTotalizer\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "23", + "source_pin": "out" + } + }, + "outputs": {} + } + ] + }, + { + "id": "3F4", + "title": "Blender Ctrl Command", + "comment": "", + "logic": [ + { + "instruction_uid": "26", + "uid": "26", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_Simulation\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {} + }, + { + "instruction_uid": "27", + "uid": "27", + "type": "Call", + "block_name": "BlenderCtrl_MFM Command", + "block_type": "FC", + "inputs": { + "en": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "26", + "source_pin": "out" + } + }, + "outputs": {} + } + ] + }, + { + "id": "405", + "title": "DP Global Diag", + "comment": "", + "logic": [ + { + "instruction_uid": "21", + "uid": "21", + "type": "Call", + "block_name": "CPU_DP Global Diag", + "block_type": "FC", + "inputs": { + "en": { + "type": "powerrail" + } + }, + "outputs": {} + } + ] + }, + { + "id": "416", + "title": "Profibus", + "comment": "", + "logic": [ + { + "instruction_uid": "21", + "uid": "21", + "type": "Call", + "block_name": "Profibus Network", + "block_type": "FC", + "inputs": { + "en": { + "type": "powerrail" + } + }, + "outputs": {} + } + ] + }, + { + "id": "427", + "title": "Valve Fault", + "comment": "", + "logic": [ + { + "instruction_uid": "21", + "uid": "21", + "type": "Call", + "block_name": "ModValveFault", + "block_type": "FC", + "inputs": { + "en": { + "type": "powerrail" + } + }, + "outputs": {} + } + ] + }, + { + "id": "438", + "title": "All Auto", + "comment": "", + "logic": [ + { + "instruction_uid": "25", + "uid": "25", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"HMI_Variables_Cmd\".\"Commands_From_HMI\".\"F7_DeviceControl\".\"Command\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {} + }, + { + "instruction_uid": "26", + "uid": "26", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "22", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"HMI_Variables_Cmd\".\"Commands_From_HMI\".\"F7_DeviceControl\".\"Enable\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "25", + "source_pin": "out" + } + }, + "outputs": {} + }, + { + "instruction_uid": "27", + "uid": "27", + "type": "NBox", + "template_values": {}, + "inputs": { + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "26", + "source_pin": "out" + }, + "bit": { + "uid": "23", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"M19011\"" + } + }, + "outputs": {} + }, + { + "instruction_uid": "28", + "uid": "28", + "type": "Call", + "block_name": "BlenderCtrl_All Auto", + "block_type": "FC", + "inputs": { + "en": { + "type": "connection", + "source_instruction_type": "NBox", + "source_instruction_uid": "27", + "source_pin": "out" + } + }, + "outputs": {} + }, + { + "instruction_uid": "29", + "uid": "29", + "type": "Coil", + "template_values": {}, + "inputs": { + "operand": { + "uid": "24", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"HMI_Variables_Cmd\".\"Commands_From_HMI\".\"F7_DeviceControl\".\"Light\"" + } + }, + "outputs": {} + } + ] + }, + { + "id": "449", + "title": "Ctrl HMI Manual Active", + "comment": "", + "logic": [ + { + "instruction_uid": "21", + "uid": "21", + "type": "Call", + "block_name": "BlenderCtrl_ManualActive", + "block_type": "FC", + "inputs": { + "en": { + "type": "powerrail" + } + }, + "outputs": {} + } + ] + }, + { + "id": "45A", + "title": "Mod Copy Recipe", + "comment": "", + "logic": [ + { + "instruction_uid": "33", + "uid": "33", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"HMI_Variables_Cmd\".\"Recipe\".\"Main_Page\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {} + }, + { + "instruction_uid": "34", + "uid": "34", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "22", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"mFP_Recip_Main_Page\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "33", + "source_pin": "out" + } + }, + "outputs": {} + }, + { + "instruction_uid": "35", + "uid": "35", + "type": "Coil", + "template_values": {}, + "inputs": { + "operand": { + "uid": "23", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"mAux_FP_M700_1\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "34", + "source_pin": "out" + } + }, + "outputs": {} + }, + { + "instruction_uid": "36", + "uid": "36", + "type": "Coil", + "template_values": {}, + "inputs": { + "operand": { + "uid": "24", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"mFP_Recip_Main_Page\"" + } + }, + "outputs": {} + }, + { + "instruction_uid": "37", + "uid": "37", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "25", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"HMI_Variables_Cmd\".\"Recipe\".\"Main_Page\"" + } + }, + "outputs": {} + }, + { + "instruction_uid": "38", + "uid": "38", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "26", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"HMI_Variables_Cmd\".\"Recipe\".\"Edit\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "37", + "source_pin": "out" + } + }, + "outputs": {} + }, + { + "instruction_uid": "39", + "uid": "39", + "type": "SdCoil", + "template_values": {}, + "inputs": { + "operand": { + "uid": "27", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"T_Pulse_Recipe_Edit\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "38", + "source_pin": "out" + } + }, + "outputs": {} + }, + { + "instruction_uid": "40", + "uid": "40", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "29", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"T_Pulse_Recipe_Edit\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "SdCoil", + "source_instruction_uid": "39", + "source_pin": "out" + } + }, + "outputs": {} + }, + { + "instruction_uid": "41", + "uid": "41", + "type": "RCoil", + "template_values": {}, + "inputs": { + "operand": { + "uid": "30", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"HMI_Variables_Cmd\".\"Recipe\".\"Edit\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "40", + "source_pin": "out" + } + }, + "outputs": {} + }, + { + "instruction_uid": "42", + "uid": "42", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "31", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"mAux_FP_M700_1\"" + } + }, + "outputs": {} + }, + { + "instruction_uid": "43", + "uid": "43", + "type": "SCoil", + "template_values": {}, + "inputs": { + "operand": { + "uid": "32", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"HMI_Variables_Cmd\".\"Recipe\".\"Edit\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "42", + "source_pin": "out" + } + }, + "outputs": {} + } + ] + }, + { + "id": "46B", + "title": "to HMI - Recipe Management", + "comment": "", + "logic": [ + { + "instruction_uid": "42", + "uid": "42", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"AUX TRUE\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {} + }, + { + "instruction_uid": "43", + "uid": "43", + "type": "Call", + "block_name": "RecipeManagement - Prod", + "block_type": "FB", + "instance_scope": "GlobalVariable", + "inputs": { + "en": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "42", + "source_pin": "out" + } + }, + "outputs": {} + } + ] + }, + { + "id": "47C", + "title": "Recipe Calculation", + "comment": "", + "logic": [ + { + "instruction_uid": "21", + "uid": "21", + "type": "Call", + "block_name": "RecipeCalculation", + "block_type": "FC", + "inputs": { + "en": { + "type": "powerrail" + } + }, + "outputs": {} + } + ] + } + ] +} \ No newline at end of file diff --git a/BlenderCtrl__Main_simplified_processed.json b/BlenderCtrl__Main_simplified_processed.json new file mode 100644 index 0000000..5cb12f9 --- /dev/null +++ b/BlenderCtrl__Main_simplified_processed.json @@ -0,0 +1,3768 @@ +{ + "block_name": "BlenderCtrl__Main", + "block_number": 2000, + "language": "LAD", + "block_comment": "", + "interface": { + "Temp": [ + { + "name": "All_Auto_RETVAL", + "datatype": "Int" + }, + { + "name": "Reset_SP_Word_RETVAL", + "datatype": "Int" + }, + { + "name": "mResetWaterTot", + "datatype": "Bool" + }, + { + "name": "mResetSyrupTot", + "datatype": "Bool" + }, + { + "name": "mResetCO2Tot", + "datatype": "Bool" + }, + { + "name": "mResetProductTot", + "datatype": "Bool" + }, + { + "name": "Block_Move_Err", + "datatype": "Int" + } + ], + "Return": [ + { + "name": "Ret_Val", + "datatype": "Void" + } + ] + }, + "networks": [ + { + "id": "9", + "title": "Clock Generation", + "comment": "", + "logic": [ + { + "instruction_uid": "21", + "uid": "21", + "type": "Call_FC_scl", + "block_name": "Clock Signal", + "block_type": "FC", + "inputs": { + "en": { + "type": "powerrail" + } + }, + "outputs": {}, + "scl": "Clock Signal();" + } + ] + }, + { + "id": "1A", + "title": "Machine Init", + "comment": "", + "logic": [ + { + "instruction_uid": "21", + "uid": "21", + "type": "Call_FC_scl", + "block_name": "BlenderCtrl_MachineInit", + "block_type": "FC", + "inputs": { + "en": { + "type": "powerrail" + } + }, + "outputs": {}, + "scl": "BlenderCtrl_MachineInit();" + } + ] + }, + { + "id": "2B", + "title": "Filler Head", + "comment": "", + "logic": [ + { + "instruction_uid": "25", + "uid": "25", + "type": "Contact_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"AUX FALSE\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {}, + "scl": "// RLO: \"AUX FALSE\"" + }, + { + "instruction_uid": "26", + "uid": "26", + "type": "BLKMOV", + "template_values": { + "blk_type": "Type" + }, + "inputs": { + "en": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "25", + "source_pin": "out" + } + }, + "outputs": {} + } + ] + }, + { + "id": "3C", + "title": "Emergency Pressed", + "comment": "", + "logic": [ + { + "instruction_uid": "24", + "uid": "24", + "type": "Contact_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gIN_VoltageOk\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {}, + "scl": "// RLO: \"gIN_VoltageOk\"" + }, + { + "instruction_uid": "25", + "uid": "25", + "type": "NBox", + "template_values": {}, + "inputs": { + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "24", + "source_pin": "out" + }, + "bit": { + "uid": "22", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"M19000\"" + } + }, + "outputs": {} + }, + { + "instruction_uid": "26", + "uid": "26", + "type": "Coil", + "template_values": {}, + "inputs": { + "operand": { + "uid": "23", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gEmergencyPressed\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "NBox", + "source_instruction_uid": "25", + "source_pin": "out" + } + }, + "outputs": {} + } + ] + }, + { + "id": "4D", + "title": "Air and CO2 pressure ok and auxiliary ok", + "comment": "", + "logic": [ + { + "instruction_uid": "29", + "uid": "29", + "type": "Contact_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gIN_LinePressCO2Ok\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {}, + "scl": "// RLO: \"gIN_LinePressCO2Ok\"" + }, + { + "instruction_uid": "30", + "uid": "30", + "type": "Contact_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "22", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gWorkshopTest\"" + } + }, + "outputs": {}, + "scl": "// RLO: \"gWorkshopTest\"" + }, + { + "instruction_uid": "31", + "uid": "31", + "type": "Contact_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "23", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gWorkshop_Co2_Presence\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "30", + "source_pin": "out" + } + }, + "outputs": {}, + "scl": "// RLO: \"gWorkshopTest\" AND \"gWorkshop_Co2_Presence\"" + }, + { + "instruction_uid": "32", + "uid": "32", + "type": "Contact_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "24", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gWorkshop_CIP_Signals\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "31", + "source_pin": "out" + } + }, + "outputs": {}, + "scl": "// RLO: (\"gWorkshopTest\" AND \"gWorkshop_Co2_Presence\") AND \"gWorkshop_CIP_Signals\"" + }, + { + "instruction_uid": "33", + "uid": "33", + "type": "O_scl", + "template_values": { + "Card": "Cardinality" + }, + "inputs": { + "in2": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "32", + "source_pin": "out" + }, + "in1": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "29", + "source_pin": "out" + } + }, + "outputs": {}, + "scl": "// Logic O 33: \"gIN_LinePressCO2Ok\" OR ((\"gWorkshopTest\" AND \"gWorkshop_Co2_Presence\") AND \"gWorkshop_CIP_Signals\")" + }, + { + "instruction_uid": "34", + "uid": "34", + "type": "Contact_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "25", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"HMI_Digital\".\"_PAL_S11\".\"Filtered\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "O", + "source_instruction_uid": "33", + "source_pin": "out" + } + }, + "outputs": {}, + "scl": "// RLO: (\"gIN_LinePressCO2Ok\" OR ((\"gWorkshopTest\" AND \"gWorkshop_Co2_Presence\") AND \"gWorkshop_CIP_Signals\")) AND \"HMI_Digital\".\"_PAL_S11\".\"Filtered\"" + }, + { + "instruction_uid": "35", + "uid": "35", + "type": "Contact_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "26", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"Disable_Bit\"" + } + }, + "outputs": {}, + "scl": "// RLO: \"Disable_Bit\"" + }, + { + "instruction_uid": "36", + "uid": "36", + "type": "O_scl", + "template_values": { + "Card": "Cardinality" + }, + "inputs": { + "in2": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "35", + "source_pin": "out" + }, + "in1": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "34", + "source_pin": "out" + } + }, + "outputs": {}, + "scl": "// Logic O 36: ((\"gIN_LinePressCO2Ok\" OR ((\"gWorkshopTest\" AND \"gWorkshop_Co2_Presence\") AND \"gWorkshop_CIP_Signals\")) AND \"HMI_Digital\".\"_PAL_S11\".\"Filtered\") OR \"Disable_Bit\"" + }, + { + "instruction_uid": "37", + "uid": "37", + "type": "Contact_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "27", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gIN_VoltageOk\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "O", + "source_instruction_uid": "36", + "source_pin": "out" + } + }, + "outputs": {}, + "scl": "// RLO: (((\"gIN_LinePressCO2Ok\" OR ((\"gWorkshopTest\" AND \"gWorkshop_Co2_Presence\") AND \"gWorkshop_CIP_Signals\")) AND \"HMI_Digital\".\"_PAL_S11\".\"Filtered\") OR \"Disable_Bit\") AND \"gIN_VoltageOk\"" + }, + { + "instruction_uid": "38", + "uid": "38", + "type": "Coil_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "28", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gBlenderSuppliesOk\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "37", + "source_pin": "out" + } + }, + "outputs": {}, + "scl": "\"gBlenderSuppliesOk\" := (((\"gIN_LinePressCO2Ok\" OR ((\"gWorkshopTest\" AND \"gWorkshop_Co2_Presence\") AND \"gWorkshop_CIP_Signals\")) AND \"HMI_Digital\".\"_PAL_S11\".\"Filtered\") OR \"Disable_Bit\") AND \"gIN_VoltageOk\";" + } + ] + }, + { + "id": "5E", + "title": "Blender State Num", + "comment": "", + "logic": [ + { + "instruction_uid": "23", + "uid": "23", + "type": "Move_scl", + "template_values": { + "Card": "Cardinality" + }, + "inputs": { + "in": { + "uid": "21", + "scope": "LiteralConstant", + "type": "constant", + "datatype": "Int", + "value": 0 + }, + "en": { + "type": "powerrail" + } + }, + "outputs": { + "out1": [ + { + "uid": "22", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"HMI_Variables_Status\".\"Procedures\".\"BlenderStateNum\"" + } + ] + }, + "scl": "\"HMI_Variables_Status\".\"Procedures\".\"BlenderStateNum\" := 0;" + } + ] + }, + { + "id": "6F", + "title": "Delay Power On", + "comment": "", + "logic": [ + { + "instruction_uid": "24", + "uid": "24", + "type": "Contact_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"FirstScan\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {}, + "scl": "// RLO: \"FirstScan\"" + }, + { + "instruction_uid": "25", + "uid": "25", + "type": "Se", + "template_values": {}, + "inputs": {}, + "outputs": {} + } + ] + }, + { + "id": "80", + "title": "Production Mode", + "comment": "", + "logic": [ + { + "instruction_uid": "23", + "uid": "23", + "type": "Contact_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"HMI_Variables_Status\".\"System\".\"Blender_Prod_CIP\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {}, + "scl": "// RLO: \"HMI_Variables_Status\".\"System\".\"Blender_Prod_CIP\"" + }, + { + "instruction_uid": "24", + "uid": "24", + "type": "Coil_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "22", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gBlenderProdMode\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "23", + "source_pin": "out" + } + }, + "outputs": {}, + "scl": "\"gBlenderProdMode\" := \"HMI_Variables_Status\".\"System\".\"Blender_Prod_CIP\";" + } + ] + }, + { + "id": "91", + "title": "CIp Mode", + "comment": "", + "logic": [ + { + "instruction_uid": "25", + "uid": "25", + "type": "Contact_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"HMI_Variables_Status\".\"System\".\"Blender_Prod_CIP\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {}, + "scl": "// RLO: \"HMI_Variables_Status\".\"System\".\"Blender_Prod_CIP\"" + }, + { + "instruction_uid": "26", + "uid": "26", + "type": "Coil_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "22", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gBlenderCIPMode\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "25", + "source_pin": "out" + } + }, + "outputs": {}, + "scl": "\"gBlenderCIPMode\" := \"HMI_Variables_Status\".\"System\".\"Blender_Prod_CIP\";" + }, + { + "instruction_uid": "27", + "uid": "27", + "type": "Move_scl", + "template_values": { + "Card": "Cardinality" + }, + "inputs": { + "in": { + "uid": "23", + "scope": "LiteralConstant", + "type": "constant", + "datatype": "Int", + "value": 19 + }, + "en": { + "type": "connection", + "source_instruction_uid": "25", + "source_instruction_type": "Contact", + "source_pin": "out" + } + }, + "outputs": { + "out1": [ + { + "uid": "24", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"HMI_Variables_Status\".\"Procedures\".\"BlenderStateNum\"" + } + ] + }, + "scl": "IF \"HMI_Variables_Status\".\"System\".\"Blender_Prod_CIP\" THEN\n \"HMI_Variables_Status\".\"Procedures\".\"BlenderStateNum\" := 19;\nEND_IF;" + } + ] + }, + { + "id": "A2", + "title": "Error Faults", + "comment": "", + "logic": [ + { + "instruction_uid": "26", + "uid": "26", + "type": "Contact_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"AUX FALSE\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {}, + "scl": "// RLO: \"AUX FALSE\"" + }, + { + "instruction_uid": "27", + "uid": "27", + "type": "RCoil", + "template_values": {}, + "inputs": { + "operand": { + "uid": "22", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"HMI_Variables_Status\".\"Meters\".\"QTM3012_PRD_Fault\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "26", + "source_pin": "out" + } + }, + "outputs": {} + }, + { + "instruction_uid": "28", + "uid": "28", + "type": "RCoil", + "template_values": {}, + "inputs": { + "operand": { + "uid": "23", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gmPDS2000_Error_Fault\"" + } + }, + "outputs": {} + }, + { + "instruction_uid": "29", + "uid": "29", + "type": "RCoil", + "template_values": {}, + "inputs": { + "operand": { + "uid": "24", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"HMI_Variables_Status\".\"Meters\".\"QTM3012_PRD_Run\"" + } + }, + "outputs": {} + }, + { + "instruction_uid": "30", + "uid": "30", + "type": "RCoil", + "template_values": {}, + "inputs": { + "operand": { + "uid": "25", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gNoFreezeProductMeter\"" + } + }, + "outputs": {} + } + ] + }, + { + "id": "B3", + "title": "Filler Bottle Count Used to push Product", + "comment": "", + "logic": [ + { + "instruction_uid": "23", + "uid": "23", + "type": "Contact_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"System_RunOut_Variables\".\"ProdPipeRunOutWaterCount\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {}, + "scl": "// RLO: \"System_RunOut_Variables\".\"ProdPipeRunOutWaterCount\"" + }, + { + "instruction_uid": "24", + "uid": "24", + "type": "Coil_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "22", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"System_RunOut_Variables\".\"ProdPipeRunOutFillerBott\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "23", + "source_pin": "out" + } + }, + "outputs": {}, + "scl": "\"System_RunOut_Variables\".\"ProdPipeRunOutFillerBott\" := \"System_RunOut_Variables\".\"ProdPipeRunOutWaterCount\";" + } + ] + }, + { + "id": "C4", + "title": "Water Bypass Enable", + "comment": "", + "logic": [ + { + "instruction_uid": "27", + "uid": "27", + "type": "Contact_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_StillWaterByPass\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {}, + "scl": "// RLO: \"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_StillWaterByPass\"" + }, + { + "instruction_uid": "28", + "uid": "28", + "type": "Contact_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "22", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_ByPassDeair\"" + } + }, + "outputs": {}, + "scl": "// RLO: \"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_ByPassDeair\"" + }, + { + "instruction_uid": "29", + "uid": "29", + "type": "Contact_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "23", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_Deaireation\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "28", + "source_pin": "out" + } + }, + "outputs": {}, + "scl": "// RLO: \"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_ByPassDeair\" AND \"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_Deaireation\"" + }, + { + "instruction_uid": "30", + "uid": "30", + "type": "O_scl", + "template_values": { + "Card": "Cardinality" + }, + "inputs": { + "in2": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "29", + "source_pin": "out" + }, + "in1": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "27", + "source_pin": "out" + } + }, + "outputs": {}, + "scl": "// Logic O 30: \"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_StillWaterByPass\" OR (\"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_ByPassDeair\" AND \"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_Deaireation\")" + }, + { + "instruction_uid": "31", + "uid": "31", + "type": "Contact_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "24", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"Blender_Variables_Pers\".\"gWaterRecipe\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "O", + "source_instruction_uid": "30", + "source_pin": "out" + } + }, + "outputs": {}, + "scl": "// RLO: (\"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_StillWaterByPass\" OR (\"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_ByPassDeair\" AND \"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_Deaireation\")) AND \"Blender_Variables_Pers\".\"gWaterRecipe\"" + }, + { + "instruction_uid": "32", + "uid": "32", + "type": "Contact_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "25", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"Blender_Variables_Pers\".\"gCarboStillRecipe\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "31", + "source_pin": "out" + } + }, + "outputs": {}, + "scl": "// RLO: ((\"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_StillWaterByPass\" OR (\"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_ByPassDeair\" AND \"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_Deaireation\")) AND \"Blender_Variables_Pers\".\"gWaterRecipe\") AND \"Blender_Variables_Pers\".\"gCarboStillRecipe\"" + }, + { + "instruction_uid": "33", + "uid": "33", + "type": "Coil_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "26", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gStillWaterByPassEn\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "32", + "source_pin": "out" + } + }, + "outputs": {}, + "scl": "\"gStillWaterByPassEn\" := ((\"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_StillWaterByPass\" OR (\"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_ByPassDeair\" AND \"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_Deaireation\")) AND \"Blender_Variables_Pers\".\"gWaterRecipe\") AND \"Blender_Variables_Pers\".\"gCarboStillRecipe\";" + } + ] + }, + { + "id": "D5", + "title": "Still Water Bypass", + "comment": "", + "logic": [ + { + "instruction_uid": "26", + "uid": "26", + "type": "Contact_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_BlendFillSystem\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {}, + "scl": "// RLO: \"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_BlendFillSystem\"" + }, + { + "instruction_uid": "27", + "uid": "27", + "type": "Contact_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "22", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_StillWaterByPass\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "26", + "source_pin": "out" + } + }, + "outputs": {}, + "scl": "// RLO: \"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_BlendFillSystem\" AND \"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_StillWaterByPass\"" + }, + { + "instruction_uid": "28", + "uid": "28", + "type": "Contact_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "23", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"Blender_Variables_Pers\".\"gWaterRecipe\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "27", + "source_pin": "out" + } + }, + "outputs": {}, + "scl": "// RLO: (\"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_BlendFillSystem\" AND \"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_StillWaterByPass\") AND \"Blender_Variables_Pers\".\"gWaterRecipe\"" + }, + { + "instruction_uid": "29", + "uid": "29", + "type": "Contact_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "24", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"Blender_Variables_Pers\".\"gCarboStillRecipe\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "28", + "source_pin": "out" + } + }, + "outputs": {}, + "scl": "// RLO: ((\"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_BlendFillSystem\" AND \"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_StillWaterByPass\") AND \"Blender_Variables_Pers\".\"gWaterRecipe\") AND \"Blender_Variables_Pers\".\"gCarboStillRecipe\"" + }, + { + "instruction_uid": "30", + "uid": "30", + "type": "Coil_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "25", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gBlendFiStillWaterByPass\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "29", + "source_pin": "out" + } + }, + "outputs": {}, + "scl": "\"gBlendFiStillWaterByPass\" := ((\"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_BlendFillSystem\" AND \"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_StillWaterByPass\") AND \"Blender_Variables_Pers\".\"gWaterRecipe\") AND \"Blender_Variables_Pers\".\"gCarboStillRecipe\";" + } + ] + }, + { + "id": "E6", + "title": "Manual Syrup Drain Valve Open - Operator Alarm", + "comment": "", + "logic": [ + { + "instruction_uid": "30", + "uid": "30", + "type": "Contact_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gSyrupRoomEn\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {}, + "scl": "// RLO: \"gSyrupRoomEn\"" + }, + { + "instruction_uid": "31", + "uid": "31", + "type": "Contact_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "22", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gIN_HVP301_Aux\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "30", + "source_pin": "out" + } + }, + "outputs": {}, + "scl": "// RLO: \"gSyrupRoomEn\" AND \"gIN_HVP301_Aux\"" + }, + { + "instruction_uid": "32", + "uid": "32", + "type": "Contact_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "23", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_FastChangeOverEnabled\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "31", + "source_pin": "out" + } + }, + "outputs": {}, + "scl": "// RLO: (\"gSyrupRoomEn\" AND \"gIN_HVP301_Aux\") AND \"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_FastChangeOverEnabled\"" + }, + { + "instruction_uid": "33", + "uid": "33", + "type": "Contact_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "24", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"Procedure_Variables\".\"FTP302Line_Preparation\".\"Done\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "32", + "source_pin": "out" + } + }, + "outputs": {}, + "scl": "// RLO: ((\"gSyrupRoomEn\" AND \"gIN_HVP301_Aux\") AND \"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_FastChangeOverEnabled\") AND \"Procedure_Variables\".\"FTP302Line_Preparation\".\"Done\"" + }, + { + "instruction_uid": "34", + "uid": "34", + "type": "Contact_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "25", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"Procedure_Variables\".\"Syr_RunOut\".\"Done\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "33", + "source_pin": "out" + } + }, + "outputs": {}, + "scl": "// RLO: (((\"gSyrupRoomEn\" AND \"gIN_HVP301_Aux\") AND \"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_FastChangeOverEnabled\") AND \"Procedure_Variables\".\"FTP302Line_Preparation\".\"Done\") AND \"Procedure_Variables\".\"Syr_RunOut\".\"Done\"" + }, + { + "instruction_uid": "35", + "uid": "35", + "type": "Contact_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "26", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gBlenderCIPMode\"" + } + }, + "outputs": {}, + "scl": "// RLO: \"gBlenderCIPMode\"" + }, + { + "instruction_uid": "36", + "uid": "36", + "type": "Contact_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "27", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gIN_CIP_CIPRunning\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "35", + "source_pin": "out" + } + }, + "outputs": {}, + "scl": "// RLO: \"gBlenderCIPMode\" AND \"gIN_CIP_CIPRunning\"" + }, + { + "instruction_uid": "37", + "uid": "37", + "type": "Contact_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "28", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"Procedure_Variables\".\"Blender_Run\".\"Running\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "36", + "source_pin": "out" + } + }, + "outputs": {}, + "scl": "// RLO: (\"gBlenderCIPMode\" AND \"gIN_CIP_CIPRunning\") AND \"Procedure_Variables\".\"Blender_Run\".\"Running\"" + }, + { + "instruction_uid": "38", + "uid": "38", + "type": "O_scl", + "template_values": { + "Card": "Cardinality" + }, + "inputs": { + "in2": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "37", + "source_pin": "out" + }, + "in1": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "34", + "source_pin": "out" + } + }, + "outputs": {}, + "scl": "// Logic O 38: ((((\"gSyrupRoomEn\" AND \"gIN_HVP301_Aux\") AND \"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_FastChangeOverEnabled\") AND \"Procedure_Variables\".\"FTP302Line_Preparation\".\"Done\") AND \"Procedure_Variables\".\"Syr_RunOut\".\"Done\") OR ((\"gBlenderCIPMode\" AND \"gIN_CIP_CIPRunning\") AND \"Procedure_Variables\".\"Blender_Run\".\"Running\")" + }, + { + "instruction_uid": "39", + "uid": "39", + "type": "Coil_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "29", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gHVP301_Open\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "O", + "source_instruction_uid": "38", + "source_pin": "out" + } + }, + "outputs": {}, + "scl": "\"gHVP301_Open\" := ((((\"gSyrupRoomEn\" AND \"gIN_HVP301_Aux\") AND \"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_FastChangeOverEnabled\") AND \"Procedure_Variables\".\"FTP302Line_Preparation\".\"Done\") AND \"Procedure_Variables\".\"Syr_RunOut\".\"Done\") OR ((\"gBlenderCIPMode\" AND \"gIN_CIP_CIPRunning\") AND \"Procedure_Variables\".\"Blender_Run\".\"Running\");" + } + ] + }, + { + "id": "F7", + "title": "Manual Syrup Drain Valve Open - Operator Alarm", + "comment": "", + "logic": [ + { + "instruction_uid": "25", + "uid": "25", + "type": "Contact_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gIN_HVM302_Aux\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {}, + "scl": "// RLO: \"gIN_HVM302_Aux\"" + }, + { + "instruction_uid": "26", + "uid": "26", + "type": "Sd", + "template_values": {}, + "inputs": {}, + "outputs": {} + }, + { + "instruction_uid": "27", + "uid": "27", + "type": "Coil", + "template_values": {}, + "inputs": { + "operand": { + "uid": "24", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gHVM302_Open\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Sd", + "source_instruction_uid": "26", + "source_pin": "q" + } + }, + "outputs": {} + } + ] + }, + { + "id": "108", + "title": "Maselli Control", + "comment": "", + "logic": [ + { + "instruction_uid": "24", + "uid": "24", + "type": "Contact_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_BrixMeter\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {}, + "scl": "// RLO: \"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_BrixMeter\"" + }, + { + "instruction_uid": "25", + "uid": "25", + "type": "Eq_scl", + "template_values": { + "SrcType": "Type" + }, + "inputs": { + "pre": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "24", + "source_pin": "out" + }, + "in2": { + "uid": "23", + "scope": "LiteralConstant", + "type": "constant", + "datatype": "Int", + "value": 6 + }, + "in1": { + "uid": "22", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_MeterType\"" + } + }, + "outputs": {}, + "scl": "// Cond: \"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_MeterType\" = 6" + }, + { + "instruction_uid": "26", + "uid": "26", + "type": "Call_FC_scl", + "block_name": "Maselli_PA_Control", + "block_type": "FC", + "inputs": { + "en": { + "type": "connection", + "source_instruction_type": "Eq", + "source_instruction_uid": "25", + "source_pin": "out" + } + }, + "outputs": {}, + "scl": "IF \"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_MeterType\" = 6 THEN\n Maselli_PA_Control();\nEND_IF;" + } + ] + }, + { + "id": "119", + "title": "mPDS Control", + "comment": "", + "logic": [ + { + "instruction_uid": "24", + "uid": "24", + "type": "Contact_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_BrixMeter\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {}, + "scl": "// RLO: \"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_BrixMeter\"" + }, + { + "instruction_uid": "25", + "uid": "25", + "type": "Eq_scl", + "template_values": { + "SrcType": "Type" + }, + "inputs": { + "pre": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "24", + "source_pin": "out" + }, + "in2": { + "uid": "23", + "scope": "LiteralConstant", + "type": "constant", + "datatype": "Int", + "value": 5 + }, + "in1": { + "uid": "22", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_MeterType\"" + } + }, + "outputs": {}, + "scl": "// Cond: \"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_MeterType\" = 5" + }, + { + "instruction_uid": "26", + "uid": "26", + "type": "Call_FC_scl", + "block_name": "mPDS_PA_Control", + "block_type": "FC", + "inputs": { + "en": { + "type": "connection", + "source_instruction_type": "Eq", + "source_instruction_uid": "25", + "source_pin": "out" + } + }, + "outputs": {}, + "scl": "IF \"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_MeterType\" = 5 THEN\n mPDS_PA_Control();\nEND_IF;" + } + ] + }, + { + "id": "12A", + "title": "mPDS Syrup Control", + "comment": "", + "logic": [ + { + "instruction_uid": "22", + "uid": "22", + "type": "Contact_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_SyrBrixMeter\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {}, + "scl": "// RLO: \"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_SyrBrixMeter\"" + }, + { + "instruction_uid": "23", + "uid": "23", + "type": "Call_FC_scl", + "block_name": "mPDS_SYR_PA_Control", + "block_type": "FC", + "inputs": { + "en": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "22", + "source_pin": "out" + } + }, + "outputs": {}, + "scl": "IF \"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_SyrBrixMeter\" THEN\n mPDS_SYR_PA_Control();\nEND_IF;" + } + ] + }, + { + "id": "13B", + "title": "Co2 Analog Input", + "comment": "GetProdBrixCO2_FromAnalogIn\n CALL \"GetProdBrixCO2_FromAn\"\n NOP 0", + "logic": [ + { + "instruction_uid": "24", + "uid": "24", + "type": "Contact_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_BrixMeter\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {}, + "scl": "// RLO: \"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_BrixMeter\"" + }, + { + "instruction_uid": "25", + "uid": "25", + "type": "Eq_scl", + "template_values": { + "SrcType": "Type" + }, + "inputs": { + "pre": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "24", + "source_pin": "out" + }, + "in2": { + "uid": "23", + "scope": "LiteralConstant", + "type": "constant", + "datatype": "Int", + "value": 3 + }, + "in1": { + "uid": "22", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_MeterType\"" + } + }, + "outputs": {}, + "scl": "// Cond: \"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_MeterType\" = 3" + }, + { + "instruction_uid": "26", + "uid": "26", + "type": "Call_FC_scl", + "block_name": "GetProdBrixCO2_Anal_Inpt", + "block_type": "FC", + "inputs": { + "en": { + "type": "connection", + "source_instruction_type": "Eq", + "source_instruction_uid": "25", + "source_pin": "out" + } + }, + "outputs": {}, + "scl": "IF \"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_MeterType\" = 3 THEN\n GetProdBrixCO2_Anal_Inpt();\nEND_IF;" + } + ] + }, + { + "id": "14C", + "title": "Quality", + "comment": "", + "logic": [ + { + "instruction_uid": "21", + "uid": "21", + "type": "Call_FC_scl", + "block_name": "ProductQuality", + "block_type": "FC", + "inputs": { + "en": { + "type": "powerrail" + } + }, + "outputs": {}, + "scl": "ProductQuality();" + } + ] + }, + { + "id": "15D", + "title": "Input Data", + "comment": "", + "logic": [ + { + "instruction_uid": "21", + "uid": "21", + "type": "Call_FB_scl", + "block_name": "Input", + "block_type": "FB", + "instance_scope": "GlobalVariable", + "inputs": { + "en": { + "type": "powerrail" + } + }, + "outputs": {}, + "scl": "// ERROR: Call a bloque no soportado: Input" + } + ] + }, + { + "id": "16E", + "title": "Sel Brix Source Check", + "comment": "", + "logic": [ + { + "instruction_uid": "21", + "uid": "21", + "type": "Call_FC_scl", + "block_name": "SelCheckBrixSource", + "block_type": "FC", + "inputs": { + "en": { + "type": "powerrail" + } + }, + "outputs": {}, + "scl": "SelCheckBrixSource();" + } + ] + }, + { + "id": "17F", + "title": "Check Water Cooling System Temperature", + "comment": "", + "logic": [ + { + "instruction_uid": "22", + "uid": "22", + "type": "Contact_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_InverterRecirPumpPPM306\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {}, + "scl": "// RLO: \"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_InverterRecirPumpPPM306\"" + }, + { + "instruction_uid": "23", + "uid": "23", + "type": "Call_FC_scl", + "block_name": "CTRLCoolingSystem", + "block_type": "FC", + "inputs": { + "en": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "22", + "source_pin": "out" + } + }, + "outputs": {}, + "scl": "IF \"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_InverterRecirPumpPPM306\" THEN\n CTRLCoolingSystem();\nEND_IF;" + } + ] + }, + { + "id": "190", + "title": "Tank Level", + "comment": "", + "logic": [ + { + "instruction_uid": "21", + "uid": "21", + "type": "Call_FC_scl", + "block_name": "TankLevel", + "block_type": "FC", + "inputs": { + "en": { + "type": "powerrail" + } + }, + "outputs": {}, + "scl": "TankLevel();" + } + ] + }, + { + "id": "1A1", + "title": "Production ONS", + "comment": "", + "logic": [ + { + "instruction_uid": "25", + "uid": "25", + "type": "Contact_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gBlenderProdMode\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {}, + "scl": "// RLO: \"gBlenderProdMode\"" + }, + { + "instruction_uid": "26", + "uid": "26", + "type": "PBox_scl", + "template_values": {}, + "inputs": { + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "25", + "source_pin": "out" + }, + "bit": { + "uid": "22", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"M19001\"" + } + }, + "outputs": {}, + "scl": "// PBox 26 - Passing bit: \"M19001\"" + }, + { + "instruction_uid": "27", + "uid": "27", + "type": "Contact_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "23", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"mDelayPowerOnTmr\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "PBox", + "source_instruction_uid": "26", + "source_pin": "out" + } + }, + "outputs": {}, + "scl": "// RLO: \"M19001\" AND \"mDelayPowerOnTmr\"" + }, + { + "instruction_uid": "28", + "uid": "28", + "type": "Coil_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "24", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gProductionONS\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "27", + "source_pin": "out" + } + }, + "outputs": {}, + "scl": "\"gProductionONS\" := \"M19001\" AND \"mDelayPowerOnTmr\";" + } + ] + }, + { + "id": "1B2", + "title": "Blender Prod Mode Init", + "comment": "", + "logic": [ + { + "instruction_uid": "24", + "uid": "24", + "type": "Contact_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gProductionONS\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {}, + "scl": "// RLO: \"gProductionONS\"" + }, + { + "instruction_uid": "25", + "uid": "25", + "type": "Contact_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "22", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"Procedure_Variables\".\"Blender_Rinse\".\"ONS_Done\"" + } + }, + "outputs": {}, + "scl": "// RLO: \"Procedure_Variables\".\"Blender_Rinse\".\"ONS_Done\"" + }, + { + "instruction_uid": "26", + "uid": "26", + "type": "O_scl", + "template_values": { + "Card": "Cardinality" + }, + "inputs": { + "in2": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "25", + "source_pin": "out" + }, + "in1": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "24", + "source_pin": "out" + } + }, + "outputs": {}, + "scl": "// Logic O 26: \"gProductionONS\" OR \"Procedure_Variables\".\"Blender_Rinse\".\"ONS_Done\"" + }, + { + "instruction_uid": "27", + "uid": "27", + "type": "Contact_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "23", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"Blender_Variables_Pers\".\"gBlenderStarted\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "O", + "source_instruction_uid": "26", + "source_pin": "out" + } + }, + "outputs": {}, + "scl": "// RLO: (\"gProductionONS\" OR \"Procedure_Variables\".\"Blender_Rinse\".\"ONS_Done\") AND \"Blender_Variables_Pers\".\"gBlenderStarted\"" + }, + { + "instruction_uid": "28", + "uid": "28", + "type": "Call_FC_scl", + "block_name": "BlenderCtrl_ProdModeInit", + "block_type": "FC", + "inputs": { + "en": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "27", + "source_pin": "out" + } + }, + "outputs": {}, + "scl": "IF (\"gProductionONS\" OR \"Procedure_Variables\".\"Blender_Rinse\".\"ONS_Done\") AND \"Blender_Variables_Pers\".\"gBlenderStarted\" THEN\n BlenderCtrl_ProdModeInit();\nEND_IF;" + } + ] + }, + { + "id": "1C3", + "title": "Rinse ONS", + "comment": "", + "logic": [ + { + "instruction_uid": "25", + "uid": "25", + "type": "Contact_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"HMI_Variables_Status\".\"System\".\"Blender_Prod_CIP\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {}, + "scl": "// RLO: \"HMI_Variables_Status\".\"System\".\"Blender_Prod_CIP\"" + }, + { + "instruction_uid": "26", + "uid": "26", + "type": "PBox_scl", + "template_values": {}, + "inputs": { + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "25", + "source_pin": "out" + }, + "bit": { + "uid": "22", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"M19002\"" + } + }, + "outputs": {}, + "scl": "// PBox 26 - Passing bit: \"M19002\"" + }, + { + "instruction_uid": "27", + "uid": "27", + "type": "Contact_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "23", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"mDelayPowerOnTmr\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "PBox", + "source_instruction_uid": "26", + "source_pin": "out" + } + }, + "outputs": {}, + "scl": "// RLO: \"M19002\" AND \"mDelayPowerOnTmr\"" + }, + { + "instruction_uid": "28", + "uid": "28", + "type": "Coil_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "24", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gRinseONS\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "27", + "source_pin": "out" + } + }, + "outputs": {}, + "scl": "\"gRinseONS\" := \"M19002\" AND \"mDelayPowerOnTmr\";" + } + ] + }, + { + "id": "1D4", + "title": "CIP ONS", + "comment": "", + "logic": [ + { + "instruction_uid": "25", + "uid": "25", + "type": "Contact_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gBlenderCIPMode\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {}, + "scl": "// RLO: \"gBlenderCIPMode\"" + }, + { + "instruction_uid": "26", + "uid": "26", + "type": "PBox_scl", + "template_values": {}, + "inputs": { + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "25", + "source_pin": "out" + }, + "bit": { + "uid": "22", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"M19003\"" + } + }, + "outputs": {}, + "scl": "// PBox 26 - Passing bit: \"M19003\"" + }, + { + "instruction_uid": "27", + "uid": "27", + "type": "Contact_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "23", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"mDelayPowerOnTmr\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "PBox", + "source_instruction_uid": "26", + "source_pin": "out" + } + }, + "outputs": {}, + "scl": "// RLO: \"M19003\" AND \"mDelayPowerOnTmr\"" + }, + { + "instruction_uid": "28", + "uid": "28", + "type": "Coil_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "24", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gCIPONS\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "27", + "source_pin": "out" + } + }, + "outputs": {}, + "scl": "\"gCIPONS\" := \"M19003\" AND \"mDelayPowerOnTmr\";" + } + ] + }, + { + "id": "1E5", + "title": "CIp Mode Init", + "comment": "", + "logic": [ + { + "instruction_uid": "22", + "uid": "22", + "type": "Contact_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gCIPONS\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {}, + "scl": "// RLO: \"gCIPONS\"" + }, + { + "instruction_uid": "23", + "uid": "23", + "type": "Call_FC_scl", + "block_name": "BlenderCtrl_CIPModeInit", + "block_type": "FC", + "inputs": { + "en": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "22", + "source_pin": "out" + } + }, + "outputs": {}, + "scl": "IF \"gCIPONS\" THEN\n BlenderCtrl_CIPModeInit();\nEND_IF;" + } + ] + }, + { + "id": "1F6", + "title": "Reset SPWords", + "comment": "", + "logic": [ + { + "instruction_uid": "21", + "uid": "21", + "type": "Call_FC_scl", + "block_name": "BlenderCtrl_ResetSPWord", + "block_type": "FC", + "inputs": { + "en": { + "type": "powerrail" + } + }, + "outputs": {}, + "scl": "BlenderCtrl_ResetSPWord();" + } + ] + }, + { + "id": "207", + "title": "Blender Run Control", + "comment": "", + "logic": [ + { + "instruction_uid": "21", + "uid": "21", + "type": "Call_FC_scl", + "block_name": "BlenderRun__Control", + "block_type": "FC", + "inputs": { + "en": { + "type": "powerrail" + } + }, + "outputs": {}, + "scl": "BlenderRun__Control();" + } + ] + }, + { + "id": "218", + "title": "Tank Pressure Control", + "comment": "", + "logic": [ + { + "instruction_uid": "21", + "uid": "21", + "type": "Call_FC_scl", + "block_name": "Prod Tank PressCtrl", + "block_type": "FC", + "inputs": { + "en": { + "type": "powerrail" + } + }, + "outputs": {}, + "scl": "Prod Tank PressCtrl();" + } + ] + }, + { + "id": "229", + "title": "Balaiage", + "comment": "", + "logic": [ + { + "instruction_uid": "21", + "uid": "21", + "type": "Call_FC_scl", + "block_name": "Baialage", + "block_type": "FC", + "inputs": { + "en": { + "type": "powerrail" + } + }, + "outputs": {}, + "scl": "Baialage();" + } + ] + }, + { + "id": "23A", + "title": "First Production", + "comment": "", + "logic": [ + { + "instruction_uid": "21", + "uid": "21", + "type": "Call_FB_scl", + "block_name": "ProcedureFirstProduction", + "block_type": "FB", + "instance_scope": "GlobalVariable", + "inputs": { + "en": { + "type": "powerrail" + } + }, + "outputs": {}, + "scl": "// ERROR: Call a bloque no soportado: ProcedureFirstProduction" + } + ] + }, + { + "id": "24B", + "title": "CIP MAIN Calling", + "comment": "", + "logic": [ + { + "instruction_uid": "21", + "uid": "21", + "type": "Call_FC_scl", + "block_name": "CIPMain", + "block_type": "FC", + "inputs": { + "en": { + "type": "powerrail" + } + }, + "outputs": {}, + "scl": "CIPMain();" + } + ] + }, + { + "id": "25C", + "title": "Blender Rinse", + "comment": "", + "logic": [ + { + "instruction_uid": "21", + "uid": "21", + "type": "Call_FC_scl", + "block_name": "BlenderRinse", + "block_type": "FC", + "inputs": { + "en": { + "type": "powerrail" + } + }, + "outputs": {}, + "scl": "BlenderRinse();" + } + ] + }, + { + "id": "26D", + "title": "Safeties", + "comment": "", + "logic": [ + { + "instruction_uid": "21", + "uid": "21", + "type": "Call_FC_scl", + "block_name": "Safeties", + "block_type": "FC", + "inputs": { + "en": { + "type": "powerrail" + } + }, + "outputs": {}, + "scl": "Safeties();" + } + ] + }, + { + "id": "27E", + "title": "Instrument Scanner", + "comment": "", + "logic": [ + { + "instruction_uid": "21", + "uid": "21", + "type": "Call_FC_scl", + "block_name": "Instrument_Scanner", + "block_type": "FC", + "inputs": { + "en": { + "type": "powerrail" + } + }, + "outputs": {}, + "scl": "Instrument_Scanner();" + } + ] + }, + { + "id": "28F", + "title": "Vacuum Control", + "comment": "", + "logic": [ + { + "instruction_uid": "21", + "uid": "21", + "type": "Call_FC_scl", + "block_name": "VacuumCtrl", + "block_type": "FC", + "inputs": { + "en": { + "type": "powerrail" + } + }, + "outputs": {}, + "scl": "VacuumCtrl();" + } + ] + }, + { + "id": "2A0", + "title": "Syrup Room Control", + "comment": "", + "logic": [ + { + "instruction_uid": "21", + "uid": "21", + "type": "Call_FC_scl", + "block_name": "SyrupRoomCtrl", + "block_type": "FC", + "inputs": { + "en": { + "type": "powerrail" + } + }, + "outputs": {}, + "scl": "SyrupRoomCtrl();" + } + ] + }, + { + "id": "2B1", + "title": "Blend Procedure Data", + "comment": "", + "logic": [ + { + "instruction_uid": "22", + "uid": "22", + "type": "Contact_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"mDelayPowerOnTmr\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {}, + "scl": "// RLO: \"mDelayPowerOnTmr\"" + }, + { + "instruction_uid": "23", + "uid": "23", + "type": "Call_FB_scl", + "block_name": "Procedure", + "block_type": "FB", + "instance_scope": "GlobalVariable", + "inputs": { + "en": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "22", + "source_pin": "out" + } + }, + "outputs": {}, + "scl": "IF \"mDelayPowerOnTmr\" THEN\n // ERROR: Call a bloque no soportado: Procedure\nEND_IF;" + } + ] + }, + { + "id": "2C2", + "title": "Pneumatic Valve Control", + "comment": "", + "logic": [ + { + "instruction_uid": "21", + "uid": "21", + "type": "Call_FC_scl", + "block_name": "Pneumatic Valve Ctrl", + "block_type": "FC", + "inputs": { + "en": { + "type": "powerrail" + } + }, + "outputs": {}, + "scl": "Pneumatic Valve Ctrl();" + } + ] + }, + { + "id": "2D3", + "title": "Pumps Control", + "comment": "", + "logic": [ + { + "instruction_uid": "21", + "uid": "21", + "type": "Call_FC_scl", + "block_name": "PumpsControl", + "block_type": "FC", + "inputs": { + "en": { + "type": "powerrail" + } + }, + "outputs": {}, + "scl": "PumpsControl();" + } + ] + }, + { + "id": "2E4", + "title": "Prod Report Manager", + "comment": "", + "logic": [ + { + "instruction_uid": "22", + "uid": "22", + "type": "Contact_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_Report\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {}, + "scl": "// RLO: \"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_Report\"" + }, + { + "instruction_uid": "23", + "uid": "23", + "type": "Call_FC_scl", + "block_name": "ProdReportManager", + "block_type": "FC", + "inputs": { + "en": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "22", + "source_pin": "out" + } + }, + "outputs": {}, + "scl": "IF \"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_Report\" THEN\n ProdReportManager();\nEND_IF;" + } + ] + }, + { + "id": "2F5", + "title": "Outputs", + "comment": "", + "logic": [ + { + "instruction_uid": "21", + "uid": "21", + "type": "Call_FC_scl", + "block_name": "Output", + "block_type": "FC", + "inputs": { + "en": { + "type": "powerrail" + } + }, + "outputs": {}, + "scl": "Output();" + } + ] + }, + { + "id": "306", + "title": "SLIM BLOCK", + "comment": "", + "logic": [ + { + "instruction_uid": "21", + "uid": "21", + "type": "Call_FC_scl", + "block_name": "SLIM_Block", + "block_type": "FC", + "inputs": { + "en": { + "type": "powerrail" + } + }, + "outputs": {}, + "scl": "SLIM_Block();" + } + ] + }, + { + "id": "317", + "title": "Interlocking Panel 1", + "comment": "", + "logic": [ + { + "instruction_uid": "21", + "uid": "21", + "type": "Call_FC_scl", + "block_name": "Interlocking_Panel_1", + "block_type": "FC", + "inputs": { + "en": { + "type": "powerrail" + } + }, + "outputs": {}, + "scl": "Interlocking_Panel_1();" + } + ] + }, + { + "id": "328", + "title": "Filler Control", + "comment": "", + "logic": [ + { + "instruction_uid": "21", + "uid": "21", + "type": "Call_FC_scl", + "block_name": "FillerControl", + "block_type": "FC", + "inputs": { + "en": { + "type": "powerrail" + } + }, + "outputs": {}, + "scl": "FillerControl();" + } + ] + }, + { + "id": "339", + "title": "Blender Ctrl Update PWORD", + "comment": "", + "logic": [ + { + "instruction_uid": "21", + "uid": "21", + "type": "Call_FC_scl", + "block_name": "BlenderCtrl_UpdatePWord", + "block_type": "FC", + "inputs": { + "en": { + "type": "powerrail" + } + }, + "outputs": {}, + "scl": "BlenderCtrl_UpdatePWord();" + } + ] + }, + { + "id": "34A", + "title": "ResetTotalizer", + "comment": "", + "logic": [ + { + "instruction_uid": "24", + "uid": "24", + "type": "Contact_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gBlendResetTotalizer\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {}, + "scl": "// RLO: \"gBlendResetTotalizer\"" + }, + { + "instruction_uid": "25", + "uid": "25", + "type": "Se", + "template_values": {}, + "inputs": {}, + "outputs": {} + } + ] + }, + { + "id": "35B", + "title": "ResetWaterTot", + "comment": "", + "logic": [ + { + "instruction_uid": "26", + "uid": "26", + "type": "Contact_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gFTN301_ResetTot\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {}, + "scl": "// RLO: \"gFTN301_ResetTot\"" + }, + { + "instruction_uid": "27", + "uid": "27", + "type": "Contact_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "22", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"mResetTotalizerTmr\"" + } + }, + "outputs": {}, + "scl": "// RLO: \"mResetTotalizerTmr\"" + }, + { + "instruction_uid": "28", + "uid": "28", + "type": "O_scl", + "template_values": { + "Card": "Cardinality" + }, + "inputs": { + "in2": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "27", + "source_pin": "out" + }, + "in1": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "26", + "source_pin": "out" + } + }, + "outputs": {}, + "scl": "// Logic O 28: \"gFTN301_ResetTot\" OR \"mResetTotalizerTmr\"" + }, + { + "instruction_uid": "29", + "uid": "29", + "type": "Se", + "template_values": {}, + "inputs": {}, + "outputs": {} + }, + { + "instruction_uid": "30", + "uid": "30", + "type": "Coil", + "template_values": {}, + "inputs": { + "operand": { + "uid": "25", + "scope": "LocalVariable", + "type": "variable", + "name": "\"mResetWaterTot\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Se", + "source_instruction_uid": "29", + "source_pin": "q" + } + }, + "outputs": {} + } + ] + }, + { + "id": "36C", + "title": "Water VFM Reset Totalizer", + "comment": "", + "logic": [ + { + "instruction_uid": "23", + "uid": "23", + "type": "Contact_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gFTN301_ResetTot\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {}, + "scl": "// RLO: \"gFTN301_ResetTot\"" + }, + { + "instruction_uid": "24", + "uid": "24", + "type": "RCoil", + "template_values": {}, + "inputs": { + "operand": { + "uid": "22", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gFTN301_ResetTot\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "23", + "source_pin": "out" + } + }, + "outputs": {} + } + ] + }, + { + "id": "37D", + "title": "ResetCO2Tot", + "comment": "", + "logic": [ + { + "instruction_uid": "27", + "uid": "27", + "type": "Contact_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gFTP302_ResetTot\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {}, + "scl": "// RLO: \"gFTP302_ResetTot\"" + }, + { + "instruction_uid": "28", + "uid": "28", + "type": "Contact_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "22", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"mResetTotalizerTmr\"" + } + }, + "outputs": {}, + "scl": "// RLO: \"mResetTotalizerTmr\"" + }, + { + "instruction_uid": "29", + "uid": "29", + "type": "O_scl", + "template_values": { + "Card": "Cardinality" + }, + "inputs": { + "in2": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "28", + "source_pin": "out" + }, + "in1": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "27", + "source_pin": "out" + } + }, + "outputs": {}, + "scl": "// Logic O 29: \"gFTP302_ResetTot\" OR \"mResetTotalizerTmr\"" + }, + { + "instruction_uid": "30", + "uid": "30", + "type": "Se", + "template_values": {}, + "inputs": {}, + "outputs": {} + }, + { + "instruction_uid": "31", + "uid": "31", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "25", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gSyrupRoomEn\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Se", + "source_instruction_uid": "30", + "source_pin": "q" + } + }, + "outputs": {} + }, + { + "instruction_uid": "32", + "uid": "32", + "type": "Coil", + "template_values": {}, + "inputs": { + "operand": { + "uid": "26", + "scope": "LocalVariable", + "type": "variable", + "name": "\"mResetSyrupTot\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "31", + "source_pin": "out" + } + }, + "outputs": {} + } + ] + }, + { + "id": "38E", + "title": "Syrup MFM Reset Totalizer", + "comment": "", + "logic": [ + { + "instruction_uid": "23", + "uid": "23", + "type": "Contact_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gFTP302_ResetTot\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {}, + "scl": "// RLO: \"gFTP302_ResetTot\"" + }, + { + "instruction_uid": "24", + "uid": "24", + "type": "RCoil", + "template_values": {}, + "inputs": { + "operand": { + "uid": "22", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gFTP302_ResetTot\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "23", + "source_pin": "out" + } + }, + "outputs": {} + } + ] + }, + { + "id": "39F", + "title": "ResetProductTot", + "comment": "", + "logic": [ + { + "instruction_uid": "26", + "uid": "26", + "type": "Contact_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gFTM303_ResetTot\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {}, + "scl": "// RLO: \"gFTM303_ResetTot\"" + }, + { + "instruction_uid": "27", + "uid": "27", + "type": "Contact_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "22", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"mResetTotalizerTmr\"" + } + }, + "outputs": {}, + "scl": "// RLO: \"mResetTotalizerTmr\"" + }, + { + "instruction_uid": "28", + "uid": "28", + "type": "O_scl", + "template_values": { + "Card": "Cardinality" + }, + "inputs": { + "in2": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "27", + "source_pin": "out" + }, + "in1": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "26", + "source_pin": "out" + } + }, + "outputs": {}, + "scl": "// Logic O 28: \"gFTM303_ResetTot\" OR \"mResetTotalizerTmr\"" + }, + { + "instruction_uid": "29", + "uid": "29", + "type": "Se", + "template_values": {}, + "inputs": {}, + "outputs": {} + }, + { + "instruction_uid": "30", + "uid": "30", + "type": "Coil", + "template_values": {}, + "inputs": { + "operand": { + "uid": "25", + "scope": "LocalVariable", + "type": "variable", + "name": "\"mResetCO2Tot\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Se", + "source_instruction_uid": "29", + "source_pin": "q" + } + }, + "outputs": {} + } + ] + }, + { + "id": "3B0", + "title": "CO2 MFM Reset Tot", + "comment": "", + "logic": [ + { + "instruction_uid": "23", + "uid": "23", + "type": "Contact_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gFTM303_ResetTot\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {}, + "scl": "// RLO: \"gFTM303_ResetTot\"" + }, + { + "instruction_uid": "24", + "uid": "24", + "type": "RCoil", + "template_values": {}, + "inputs": { + "operand": { + "uid": "22", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gFTM303_ResetTot\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "23", + "source_pin": "out" + } + }, + "outputs": {} + } + ] + }, + { + "id": "3C1", + "title": "ResetCO2Tot", + "comment": "", + "logic": [ + { + "instruction_uid": "26", + "uid": "26", + "type": "Contact_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gProductMFMResetTot\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {}, + "scl": "// RLO: \"gProductMFMResetTot\"" + }, + { + "instruction_uid": "27", + "uid": "27", + "type": "Contact_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "22", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"mResetTotalizerTmr\"" + } + }, + "outputs": {}, + "scl": "// RLO: \"mResetTotalizerTmr\"" + }, + { + "instruction_uid": "28", + "uid": "28", + "type": "O_scl", + "template_values": { + "Card": "Cardinality" + }, + "inputs": { + "in2": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "27", + "source_pin": "out" + }, + "in1": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "26", + "source_pin": "out" + } + }, + "outputs": {}, + "scl": "// Logic O 28: \"gProductMFMResetTot\" OR \"mResetTotalizerTmr\"" + }, + { + "instruction_uid": "29", + "uid": "29", + "type": "Se", + "template_values": {}, + "inputs": {}, + "outputs": {} + }, + { + "instruction_uid": "30", + "uid": "30", + "type": "Coil", + "template_values": {}, + "inputs": { + "operand": { + "uid": "25", + "scope": "LocalVariable", + "type": "variable", + "name": "\"mResetProductTot\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Se", + "source_instruction_uid": "29", + "source_pin": "q" + } + }, + "outputs": {} + } + ] + }, + { + "id": "3D2", + "title": "Reset Totalizer", + "comment": "", + "logic": [ + { + "instruction_uid": "23", + "uid": "23", + "type": "Contact_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gProductMFMResetTot\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {}, + "scl": "// RLO: \"gProductMFMResetTot\"" + }, + { + "instruction_uid": "24", + "uid": "24", + "type": "RCoil", + "template_values": {}, + "inputs": { + "operand": { + "uid": "22", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gProductMFMResetTot\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "23", + "source_pin": "out" + } + }, + "outputs": {} + } + ] + }, + { + "id": "3E3", + "title": "Reset Totalizer", + "comment": "", + "logic": [ + { + "instruction_uid": "23", + "uid": "23", + "type": "Contact_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gBlendResetTotalizer\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {}, + "scl": "// RLO: \"gBlendResetTotalizer\"" + }, + { + "instruction_uid": "24", + "uid": "24", + "type": "RCoil", + "template_values": {}, + "inputs": { + "operand": { + "uid": "22", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"gBlendResetTotalizer\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "23", + "source_pin": "out" + } + }, + "outputs": {} + } + ] + }, + { + "id": "3F4", + "title": "Blender Ctrl Command", + "comment": "", + "logic": [ + { + "instruction_uid": "26", + "uid": "26", + "type": "Contact_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_Simulation\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {}, + "scl": "// RLO: \"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_Simulation\"" + }, + { + "instruction_uid": "27", + "uid": "27", + "type": "Call_FC_scl", + "block_name": "BlenderCtrl_MFM Command", + "block_type": "FC", + "inputs": { + "en": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "26", + "source_pin": "out" + } + }, + "outputs": {}, + "scl": "IF \"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_Simulation\" THEN\n BlenderCtrl_MFM Command();\nEND_IF;" + } + ] + }, + { + "id": "405", + "title": "DP Global Diag", + "comment": "", + "logic": [ + { + "instruction_uid": "21", + "uid": "21", + "type": "Call_FC_scl", + "block_name": "CPU_DP Global Diag", + "block_type": "FC", + "inputs": { + "en": { + "type": "powerrail" + } + }, + "outputs": {}, + "scl": "CPU_DP Global Diag();" + } + ] + }, + { + "id": "416", + "title": "Profibus", + "comment": "", + "logic": [ + { + "instruction_uid": "21", + "uid": "21", + "type": "Call_FC_scl", + "block_name": "Profibus Network", + "block_type": "FC", + "inputs": { + "en": { + "type": "powerrail" + } + }, + "outputs": {}, + "scl": "Profibus Network();" + } + ] + }, + { + "id": "427", + "title": "Valve Fault", + "comment": "", + "logic": [ + { + "instruction_uid": "21", + "uid": "21", + "type": "Call_FC_scl", + "block_name": "ModValveFault", + "block_type": "FC", + "inputs": { + "en": { + "type": "powerrail" + } + }, + "outputs": {}, + "scl": "ModValveFault();" + } + ] + }, + { + "id": "438", + "title": "All Auto", + "comment": "", + "logic": [ + { + "instruction_uid": "25", + "uid": "25", + "type": "Contact_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"HMI_Variables_Cmd\".\"Commands_From_HMI\".\"F7_DeviceControl\".\"Command\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {}, + "scl": "// RLO: \"HMI_Variables_Cmd\".\"Commands_From_HMI\".\"F7_DeviceControl\".\"Command\"" + }, + { + "instruction_uid": "26", + "uid": "26", + "type": "Contact_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "22", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"HMI_Variables_Cmd\".\"Commands_From_HMI\".\"F7_DeviceControl\".\"Enable\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "25", + "source_pin": "out" + } + }, + "outputs": {}, + "scl": "// RLO: \"HMI_Variables_Cmd\".\"Commands_From_HMI\".\"F7_DeviceControl\".\"Command\" AND \"HMI_Variables_Cmd\".\"Commands_From_HMI\".\"F7_DeviceControl\".\"Enable\"" + }, + { + "instruction_uid": "27", + "uid": "27", + "type": "NBox", + "template_values": {}, + "inputs": { + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "26", + "source_pin": "out" + }, + "bit": { + "uid": "23", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"M19011\"" + } + }, + "outputs": {} + }, + { + "instruction_uid": "28", + "uid": "28", + "type": "Call", + "block_name": "BlenderCtrl_All Auto", + "block_type": "FC", + "inputs": { + "en": { + "type": "connection", + "source_instruction_type": "NBox", + "source_instruction_uid": "27", + "source_pin": "out" + } + }, + "outputs": {} + }, + { + "instruction_uid": "29", + "uid": "29", + "type": "Coil", + "template_values": {}, + "inputs": { + "operand": { + "uid": "24", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"HMI_Variables_Cmd\".\"Commands_From_HMI\".\"F7_DeviceControl\".\"Light\"" + } + }, + "outputs": {} + } + ] + }, + { + "id": "449", + "title": "Ctrl HMI Manual Active", + "comment": "", + "logic": [ + { + "instruction_uid": "21", + "uid": "21", + "type": "Call_FC_scl", + "block_name": "BlenderCtrl_ManualActive", + "block_type": "FC", + "inputs": { + "en": { + "type": "powerrail" + } + }, + "outputs": {}, + "scl": "BlenderCtrl_ManualActive();" + } + ] + }, + { + "id": "45A", + "title": "Mod Copy Recipe", + "comment": "", + "logic": [ + { + "instruction_uid": "33", + "uid": "33", + "type": "Contact_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"HMI_Variables_Cmd\".\"Recipe\".\"Main_Page\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {}, + "scl": "// RLO: \"HMI_Variables_Cmd\".\"Recipe\".\"Main_Page\"" + }, + { + "instruction_uid": "34", + "uid": "34", + "type": "Contact_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "22", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"mFP_Recip_Main_Page\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "33", + "source_pin": "out" + } + }, + "outputs": {}, + "scl": "// RLO: \"HMI_Variables_Cmd\".\"Recipe\".\"Main_Page\" AND \"mFP_Recip_Main_Page\"" + }, + { + "instruction_uid": "35", + "uid": "35", + "type": "Coil_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "23", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"mAux_FP_M700_1\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "34", + "source_pin": "out" + } + }, + "outputs": {}, + "scl": "\"mAux_FP_M700_1\" := \"HMI_Variables_Cmd\".\"Recipe\".\"Main_Page\" AND \"mFP_Recip_Main_Page\";" + }, + { + "instruction_uid": "36", + "uid": "36", + "type": "Coil", + "template_values": {}, + "inputs": { + "operand": { + "uid": "24", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"mFP_Recip_Main_Page\"" + } + }, + "outputs": {} + }, + { + "instruction_uid": "37", + "uid": "37", + "type": "Contact_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "25", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"HMI_Variables_Cmd\".\"Recipe\".\"Main_Page\"" + } + }, + "outputs": {}, + "scl": "// RLO: \"HMI_Variables_Cmd\".\"Recipe\".\"Main_Page\"" + }, + { + "instruction_uid": "38", + "uid": "38", + "type": "Contact_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "26", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"HMI_Variables_Cmd\".\"Recipe\".\"Edit\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "37", + "source_pin": "out" + } + }, + "outputs": {}, + "scl": "// RLO: \"HMI_Variables_Cmd\".\"Recipe\".\"Main_Page\" AND \"HMI_Variables_Cmd\".\"Recipe\".\"Edit\"" + }, + { + "instruction_uid": "39", + "uid": "39", + "type": "SdCoil", + "template_values": {}, + "inputs": { + "operand": { + "uid": "27", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"T_Pulse_Recipe_Edit\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "38", + "source_pin": "out" + } + }, + "outputs": {} + }, + { + "instruction_uid": "40", + "uid": "40", + "type": "Contact", + "template_values": {}, + "inputs": { + "operand": { + "uid": "29", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"T_Pulse_Recipe_Edit\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "SdCoil", + "source_instruction_uid": "39", + "source_pin": "out" + } + }, + "outputs": {} + }, + { + "instruction_uid": "41", + "uid": "41", + "type": "RCoil", + "template_values": {}, + "inputs": { + "operand": { + "uid": "30", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"HMI_Variables_Cmd\".\"Recipe\".\"Edit\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "40", + "source_pin": "out" + } + }, + "outputs": {} + }, + { + "instruction_uid": "42", + "uid": "42", + "type": "Contact_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "31", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"mAux_FP_M700_1\"" + } + }, + "outputs": {}, + "scl": "// RLO: \"mAux_FP_M700_1\"" + }, + { + "instruction_uid": "43", + "uid": "43", + "type": "SCoil", + "template_values": {}, + "inputs": { + "operand": { + "uid": "32", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"HMI_Variables_Cmd\".\"Recipe\".\"Edit\"" + }, + "in": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "42", + "source_pin": "out" + } + }, + "outputs": {} + } + ] + }, + { + "id": "46B", + "title": "to HMI - Recipe Management", + "comment": "", + "logic": [ + { + "instruction_uid": "42", + "uid": "42", + "type": "Contact_scl", + "template_values": {}, + "inputs": { + "operand": { + "uid": "21", + "scope": "GlobalVariable", + "type": "variable", + "name": "\"AUX TRUE\"" + }, + "in": { + "type": "powerrail" + } + }, + "outputs": {}, + "scl": "// RLO: \"AUX TRUE\"" + }, + { + "instruction_uid": "43", + "uid": "43", + "type": "Call_FB_scl", + "block_name": "RecipeManagement - Prod", + "block_type": "FB", + "instance_scope": "GlobalVariable", + "inputs": { + "en": { + "type": "connection", + "source_instruction_type": "Contact", + "source_instruction_uid": "42", + "source_pin": "out" + } + }, + "outputs": {}, + "scl": "IF \"AUX TRUE\" THEN\n // ERROR: Call a bloque no soportado: RecipeManagement - Prod\nEND_IF;" + } + ] + }, + { + "id": "47C", + "title": "Recipe Calculation", + "comment": "", + "logic": [ + { + "instruction_uid": "21", + "uid": "21", + "type": "Call_FC_scl", + "block_name": "RecipeCalculation", + "block_type": "FC", + "inputs": { + "en": { + "type": "powerrail" + } + }, + "outputs": {}, + "scl": "RecipeCalculation();" + } + ] + } + ] +} \ No newline at end of file diff --git a/BlenderCtrl__Main_simplified_processed.scl b/BlenderCtrl__Main_simplified_processed.scl new file mode 100644 index 0000000..babaa13 --- /dev/null +++ b/BlenderCtrl__Main_simplified_processed.scl @@ -0,0 +1,392 @@ +// Block Name (Original): BlenderCtrl__Main +// Block Number: 2000 +// Original Language: LAD + +FUNCTION_BLOCK "BlenderCtrl__Main" +{ S7_Optimized_Access := 'TRUE' } +VERSION : 0.1 + +VAR_INPUT +END_VAR + +VAR_OUTPUT +END_VAR + +VAR_IN_OUT +END_VAR + +VAR_TEMP + All_Auto_RETVAL : Int; + Reset_SP_Word_RETVAL : Int; + mResetWaterTot : Bool; + mResetSyrupTot : Bool; + mResetCO2Tot : Bool; + mResetProductTot : Bool; + Block_Move_Err : Int; +END_VAR + +BEGIN + + // Network 1: Clock Generation + + Clock Signal(); + + // Network 2: Machine Init + + BlenderCtrl_MachineInit(); + + // Network 3: Filler Head + + // RLO: "AUX FALSE" + + // Network 4: Emergency Pressed + + // RLO: "gIN_VoltageOk" + + // Network 5: Air and CO2 pressure ok and auxiliary ok + + // RLO: "gIN_LinePressCO2Ok" + // RLO: "gWorkshopTest" + // RLO: "gWorkshopTest" AND "gWorkshop_Co2_Presence" + // RLO: ("gWorkshopTest" AND "gWorkshop_Co2_Presence") AND "gWorkshop_CIP_Signals" + // RLO: ("gIN_LinePressCO2Ok" OR (("gWorkshopTest" AND "gWorkshop_Co2_Presence") AND "gWorkshop_CIP_Signals")) AND "HMI_Digital"."_PAL_S11"."Filtered" + // RLO: "Disable_Bit" + // RLO: ((("gIN_LinePressCO2Ok" OR (("gWorkshopTest" AND "gWorkshop_Co2_Presence") AND "gWorkshop_CIP_Signals")) AND "HMI_Digital"."_PAL_S11"."Filtered") OR "Disable_Bit") AND "gIN_VoltageOk" + "gBlenderSuppliesOk" := ((("gIN_LinePressCO2Ok" OR (("gWorkshopTest" AND "gWorkshop_Co2_Presence") AND "gWorkshop_CIP_Signals")) AND "HMI_Digital"."_PAL_S11"."Filtered") OR "Disable_Bit") AND "gIN_VoltageOk"; + + // Network 6: Blender State Num + + "HMI_Variables_Status"."Procedures"."BlenderStateNum" := 0; + + // Network 7: Delay Power On + + // RLO: "FirstScan" + + // Network 8: Production Mode + + // RLO: "HMI_Variables_Status"."System"."Blender_Prod_CIP" + "gBlenderProdMode" := "HMI_Variables_Status"."System"."Blender_Prod_CIP"; + + // Network 9: CIp Mode + + // RLO: "HMI_Variables_Status"."System"."Blender_Prod_CIP" + "gBlenderCIPMode" := "HMI_Variables_Status"."System"."Blender_Prod_CIP"; + IF "HMI_Variables_Status"."System"."Blender_Prod_CIP" THEN + "HMI_Variables_Status"."Procedures"."BlenderStateNum" := 19; + END_IF; + + // Network 10: Error Faults + + // RLO: "AUX FALSE" + + // Network 11: Filler Bottle Count Used to push Product + + // RLO: "System_RunOut_Variables"."ProdPipeRunOutWaterCount" + "System_RunOut_Variables"."ProdPipeRunOutFillerBott" := "System_RunOut_Variables"."ProdPipeRunOutWaterCount"; + + // Network 12: Water Bypass Enable + + // RLO: "HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_StillWaterByPass" + // RLO: "HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_ByPassDeair" + // RLO: "HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_ByPassDeair" AND "HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_Deaireation" + // RLO: ("HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_StillWaterByPass" OR ("HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_ByPassDeair" AND "HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_Deaireation")) AND "Blender_Variables_Pers"."gWaterRecipe" + // RLO: (("HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_StillWaterByPass" OR ("HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_ByPassDeair" AND "HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_Deaireation")) AND "Blender_Variables_Pers"."gWaterRecipe") AND "Blender_Variables_Pers"."gCarboStillRecipe" + "gStillWaterByPassEn" := (("HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_StillWaterByPass" OR ("HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_ByPassDeair" AND "HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_Deaireation")) AND "Blender_Variables_Pers"."gWaterRecipe") AND "Blender_Variables_Pers"."gCarboStillRecipe"; + + // Network 13: Still Water Bypass + + // RLO: "HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_BlendFillSystem" + // RLO: "HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_BlendFillSystem" AND "HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_StillWaterByPass" + // RLO: ("HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_BlendFillSystem" AND "HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_StillWaterByPass") AND "Blender_Variables_Pers"."gWaterRecipe" + // RLO: (("HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_BlendFillSystem" AND "HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_StillWaterByPass") AND "Blender_Variables_Pers"."gWaterRecipe") AND "Blender_Variables_Pers"."gCarboStillRecipe" + "gBlendFiStillWaterByPass" := (("HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_BlendFillSystem" AND "HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_StillWaterByPass") AND "Blender_Variables_Pers"."gWaterRecipe") AND "Blender_Variables_Pers"."gCarboStillRecipe"; + + // Network 14: Manual Syrup Drain Valve Open - Operator Alarm + + // RLO: "gSyrupRoomEn" + // RLO: "gSyrupRoomEn" AND "gIN_HVP301_Aux" + // RLO: ("gSyrupRoomEn" AND "gIN_HVP301_Aux") AND "HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_FastChangeOverEnabled" + // RLO: (("gSyrupRoomEn" AND "gIN_HVP301_Aux") AND "HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_FastChangeOverEnabled") AND "Procedure_Variables"."FTP302Line_Preparation"."Done" + // RLO: ((("gSyrupRoomEn" AND "gIN_HVP301_Aux") AND "HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_FastChangeOverEnabled") AND "Procedure_Variables"."FTP302Line_Preparation"."Done") AND "Procedure_Variables"."Syr_RunOut"."Done" + // RLO: "gBlenderCIPMode" + // RLO: "gBlenderCIPMode" AND "gIN_CIP_CIPRunning" + // RLO: ("gBlenderCIPMode" AND "gIN_CIP_CIPRunning") AND "Procedure_Variables"."Blender_Run"."Running" + "gHVP301_Open" := (((("gSyrupRoomEn" AND "gIN_HVP301_Aux") AND "HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_FastChangeOverEnabled") AND "Procedure_Variables"."FTP302Line_Preparation"."Done") AND "Procedure_Variables"."Syr_RunOut"."Done") OR (("gBlenderCIPMode" AND "gIN_CIP_CIPRunning") AND "Procedure_Variables"."Blender_Run"."Running"); + + // Network 15: Manual Syrup Drain Valve Open - Operator Alarm + + // RLO: "gIN_HVM302_Aux" + + // Network 16: Maselli Control + + // RLO: "HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_BrixMeter" + // Cond: "HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_MeterType" = 6 + IF "HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_MeterType" = 6 THEN + Maselli_PA_Control(); + END_IF; + + // Network 17: mPDS Control + + // RLO: "HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_BrixMeter" + // Cond: "HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_MeterType" = 5 + IF "HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_MeterType" = 5 THEN + mPDS_PA_Control(); + END_IF; + + // Network 18: mPDS Syrup Control + + // RLO: "HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_SyrBrixMeter" + IF "HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_SyrBrixMeter" THEN + mPDS_SYR_PA_Control(); + END_IF; + + // Network 19: Co2 Analog Input + // GetProdBrixCO2_FromAnalogIn + // CALL "GetProdBrixCO2_FromAn" + // NOP 0 + + // RLO: "HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_BrixMeter" + // Cond: "HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_MeterType" = 3 + IF "HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_MeterType" = 3 THEN + GetProdBrixCO2_Anal_Inpt(); + END_IF; + + // Network 20: Quality + + ProductQuality(); + + // Network 21: Input Data + + // ERROR: Call a bloque no soportado: Input + + // Network 22: Sel Brix Source Check + + SelCheckBrixSource(); + + // Network 23: Check Water Cooling System Temperature + + // RLO: "HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_InverterRecirPumpPPM306" + IF "HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_InverterRecirPumpPPM306" THEN + CTRLCoolingSystem(); + END_IF; + + // Network 24: Tank Level + + TankLevel(); + + // Network 25: Production ONS + + // RLO: "gBlenderProdMode" + // PBox 26 - Passing bit: "M19001" + // RLO: "M19001" AND "mDelayPowerOnTmr" + "gProductionONS" := "M19001" AND "mDelayPowerOnTmr"; + + // Network 26: Blender Prod Mode Init + + // RLO: "gProductionONS" + // RLO: "Procedure_Variables"."Blender_Rinse"."ONS_Done" + // RLO: ("gProductionONS" OR "Procedure_Variables"."Blender_Rinse"."ONS_Done") AND "Blender_Variables_Pers"."gBlenderStarted" + IF ("gProductionONS" OR "Procedure_Variables"."Blender_Rinse"."ONS_Done") AND "Blender_Variables_Pers"."gBlenderStarted" THEN + BlenderCtrl_ProdModeInit(); + END_IF; + + // Network 27: Rinse ONS + + // RLO: "HMI_Variables_Status"."System"."Blender_Prod_CIP" + // PBox 26 - Passing bit: "M19002" + // RLO: "M19002" AND "mDelayPowerOnTmr" + "gRinseONS" := "M19002" AND "mDelayPowerOnTmr"; + + // Network 28: CIP ONS + + // RLO: "gBlenderCIPMode" + // PBox 26 - Passing bit: "M19003" + // RLO: "M19003" AND "mDelayPowerOnTmr" + "gCIPONS" := "M19003" AND "mDelayPowerOnTmr"; + + // Network 29: CIp Mode Init + + // RLO: "gCIPONS" + IF "gCIPONS" THEN + BlenderCtrl_CIPModeInit(); + END_IF; + + // Network 30: Reset SPWords + + BlenderCtrl_ResetSPWord(); + + // Network 31: Blender Run Control + + BlenderRun__Control(); + + // Network 32: Tank Pressure Control + + Prod Tank PressCtrl(); + + // Network 33: Balaiage + + Baialage(); + + // Network 34: First Production + + // ERROR: Call a bloque no soportado: ProcedureFirstProduction + + // Network 35: CIP MAIN Calling + + CIPMain(); + + // Network 36: Blender Rinse + + BlenderRinse(); + + // Network 37: Safeties + + Safeties(); + + // Network 38: Instrument Scanner + + Instrument_Scanner(); + + // Network 39: Vacuum Control + + VacuumCtrl(); + + // Network 40: Syrup Room Control + + SyrupRoomCtrl(); + + // Network 41: Blend Procedure Data + + // RLO: "mDelayPowerOnTmr" + IF "mDelayPowerOnTmr" THEN + // ERROR: Call a bloque no soportado: Procedure + END_IF; + + // Network 42: Pneumatic Valve Control + + Pneumatic Valve Ctrl(); + + // Network 43: Pumps Control + + PumpsControl(); + + // Network 44: Prod Report Manager + + // RLO: "HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_Report" + IF "HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_Report" THEN + ProdReportManager(); + END_IF; + + // Network 45: Outputs + + Output(); + + // Network 46: SLIM BLOCK + + SLIM_Block(); + + // Network 47: Interlocking Panel 1 + + Interlocking_Panel_1(); + + // Network 48: Filler Control + + FillerControl(); + + // Network 49: Blender Ctrl Update PWORD + + BlenderCtrl_UpdatePWord(); + + // Network 50: ResetTotalizer + + // RLO: "gBlendResetTotalizer" + + // Network 51: ResetWaterTot + + // RLO: "gFTN301_ResetTot" + // RLO: "mResetTotalizerTmr" + + // Network 52: Water VFM Reset Totalizer + + // RLO: "gFTN301_ResetTot" + + // Network 53: ResetCO2Tot + + // RLO: "gFTP302_ResetTot" + // RLO: "mResetTotalizerTmr" + + // Network 54: Syrup MFM Reset Totalizer + + // RLO: "gFTP302_ResetTot" + + // Network 55: ResetProductTot + + // RLO: "gFTM303_ResetTot" + // RLO: "mResetTotalizerTmr" + + // Network 56: CO2 MFM Reset Tot + + // RLO: "gFTM303_ResetTot" + + // Network 57: ResetCO2Tot + + // RLO: "gProductMFMResetTot" + // RLO: "mResetTotalizerTmr" + + // Network 58: Reset Totalizer + + // RLO: "gProductMFMResetTot" + + // Network 59: Reset Totalizer + + // RLO: "gBlendResetTotalizer" + + // Network 60: Blender Ctrl Command + + // RLO: "HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_Simulation" + IF "HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_Simulation" THEN + BlenderCtrl_MFM Command(); + END_IF; + + // Network 61: DP Global Diag + + CPU_DP Global Diag(); + + // Network 62: Profibus + + Profibus Network(); + + // Network 63: Valve Fault + + ModValveFault(); + + // Network 64: All Auto + + // RLO: "HMI_Variables_Cmd"."Commands_From_HMI"."F7_DeviceControl"."Command" + // RLO: "HMI_Variables_Cmd"."Commands_From_HMI"."F7_DeviceControl"."Command" AND "HMI_Variables_Cmd"."Commands_From_HMI"."F7_DeviceControl"."Enable" + + // Network 65: Ctrl HMI Manual Active + + BlenderCtrl_ManualActive(); + + // Network 66: Mod Copy Recipe + + // RLO: "HMI_Variables_Cmd"."Recipe"."Main_Page" + // RLO: "HMI_Variables_Cmd"."Recipe"."Main_Page" AND "mFP_Recip_Main_Page" + "mAux_FP_M700_1" := "HMI_Variables_Cmd"."Recipe"."Main_Page" AND "mFP_Recip_Main_Page"; + // RLO: "HMI_Variables_Cmd"."Recipe"."Main_Page" + // RLO: "HMI_Variables_Cmd"."Recipe"."Main_Page" AND "HMI_Variables_Cmd"."Recipe"."Edit" + // RLO: "mAux_FP_M700_1" + + // Network 67: to HMI - Recipe Management + + // RLO: "AUX TRUE" + IF "AUX TRUE" THEN + // ERROR: Call a bloque no soportado: RecipeManagement - Prod + END_IF; + + // Network 68: Recipe Calculation + + RecipeCalculation(); + +END_FUNCTION_BLOCK diff --git a/BlenderRun_ProdTime_simplified.json b/BlenderRun_ProdTime_simplified.json deleted file mode 100644 index dd19691..0000000 --- a/BlenderRun_ProdTime_simplified.json +++ /dev/null @@ -1,1175 +0,0 @@ -{ - "block_name": "BlenderRun_ProdTime", - "block_number": 2040, - "language": "LAD", - "block_comment": "", - "interface": { - "Temp": [ - { - "name": "m1MinONS", - "datatype": "Bool" - }, - { - "name": "m1HourONS", - "datatype": "Bool" - }, - { - "name": "Buffer", - "datatype": "Bool" - }, - { - "name": "mRunMin", - "datatype": "Bool" - }, - { - "name": "mRunHr", - "datatype": "Bool" - }, - { - "name": "I_DIRunning_sec", - "datatype": "DInt" - }, - { - "name": "I_DIRunning_min", - "datatype": "DInt" - }, - { - "name": "MOD60", - "datatype": "DInt" - } - ], - "Return": [ - { - "name": "Ret_Val", - "datatype": "Void" - } - ] - }, - "networks": [ - { - "id": "9", - "title": "Seconds", - "comment": "", - "logic": [ - { - "instruction_uid": "26", - "type": "Contact", - "inputs": { - "in": { - "type": "powerrail" - }, - "operand": { - "uid": "21", - "scope": "GlobalVariable", - "type": "variable", - "name": "\"Procedure_Variables\".\"Blender_Run\".\"Running\"" - } - }, - "outputs": {} - }, - { - "instruction_uid": "27", - "type": "Contact", - "inputs": { - "in": { - "type": "connection", - "source_instruction_uid": "26", - "source_instruction_type": "Contact", - "source_pin": "out" - }, - "operand": { - "uid": "22", - "scope": "GlobalVariable", - "type": "variable", - "name": "\"CLK_1.0S\"" - } - }, - "outputs": {} - }, - { - "instruction_uid": "28", - "type": "Add", - "inputs": { - "en": { - "type": "connection", - "source_instruction_uid": "27", - "source_instruction_type": "Contact", - "source_pin": "out" - }, - "in1": { - "uid": "23", - "scope": "GlobalVariable", - "type": "variable", - "name": "\"Blender_Variables_Pers\".\"gSLIM_Sec\"" - }, - "in2": { - "uid": "24", - "scope": "LiteralConstant", - "type": "constant", - "datatype": "Int", - "value": 1 - } - }, - "outputs": { - "out": [ - { - "uid": "25", - "scope": "GlobalVariable", - "type": "variable", - "name": "\"Blender_Variables_Pers\".\"gSLIM_Sec\"" - } - ] - } - } - ] - }, - { - "id": "1A", - "title": "Reset Hours", - "comment": "", - "logic": [ - { - "instruction_uid": "24", - "type": "Contact", - "inputs": { - "in": { - "type": "powerrail" - }, - "operand": { - "uid": "21", - "scope": "GlobalVariable", - "type": "variable", - "name": "\"SLIM_Variables\".\"ResetHour\"" - } - }, - "outputs": {} - }, - { - "instruction_uid": "25", - "type": "Move", - "inputs": { - "en": { - "type": "connection", - "source_instruction_uid": "24", - "source_instruction_type": "Contact", - "source_pin": "out" - }, - "in": { - "uid": "22", - "scope": "LiteralConstant", - "type": "constant", - "datatype": "Int", - "value": 0 - } - }, - "outputs": { - "out1": [ - { - "uid": "23", - "scope": "GlobalVariable", - "type": "variable", - "name": "\"Blender_Variables_Pers\".\"gSLIM_Sec\"" - } - ] - } - } - ] - }, - { - "id": "2B", - "title": "Seconds Counter", - "comment": "", - "logic": [ - { - "instruction_uid": "26", - "type": "Contact", - "inputs": { - "in": { - "type": "powerrail" - }, - "operand": { - "uid": "21", - "scope": "GlobalVariable", - "type": "variable", - "name": "\"gBlenderBlending\"" - } - }, - "outputs": {} - }, - { - "instruction_uid": "27", - "type": "Contact", - "inputs": { - "in": { - "type": "connection", - "source_instruction_uid": "26", - "source_instruction_type": "Contact", - "source_pin": "out" - }, - "operand": { - "uid": "22", - "scope": "GlobalVariable", - "type": "variable", - "name": "\"CLK_1.0S\"" - } - }, - "outputs": {} - }, - { - "instruction_uid": "28", - "type": "Add", - "inputs": { - "en": { - "type": "connection", - "source_instruction_uid": "27", - "source_instruction_type": "Contact", - "source_pin": "out" - }, - "in1": { - "uid": "23", - "scope": "GlobalVariable", - "type": "variable", - "name": "\"Blender_Variables_Pers\".\"gProdSec\"" - }, - "in2": { - "uid": "24", - "scope": "LiteralConstant", - "type": "constant", - "datatype": "Int", - "value": 1 - } - }, - "outputs": { - "out": [ - { - "uid": "25", - "scope": "GlobalVariable", - "type": "variable", - "name": "\"Blender_Variables_Pers\".\"gProdSec\"" - } - ] - } - } - ] - }, - { - "id": "3C", - "title": "Minute", - "comment": "", - "logic": [ - { - "instruction_uid": "24", - "type": "Eq", - "inputs": { - "in1": { - "uid": "21", - "scope": "GlobalVariable", - "type": "variable", - "name": "\"Blender_Variables_Pers\".\"gProdSec\"" - }, - "in2": { - "uid": "22", - "scope": "LiteralConstant", - "type": "constant", - "datatype": "Int", - "value": 60 - }, - "pre": { - "type": "powerrail" - } - }, - "outputs": {} - }, - { - "instruction_uid": "25", - "type": "Coil", - "inputs": { - "in": { - "type": "connection", - "source_instruction_uid": "24", - "source_instruction_type": "Eq", - "source_pin": "out" - }, - "operand": { - "uid": "23", - "scope": "LocalVariable", - "type": "variable", - "name": "\"m1MinONS\"" - } - }, - "outputs": {} - } - ] - }, - { - "id": "4D", - "title": "Minute Counter", - "comment": "", - "logic": [ - { - "instruction_uid": "27", - "type": "Contact", - "inputs": { - "in": { - "type": "powerrail" - }, - "operand": { - "uid": "21", - "scope": "LocalVariable", - "type": "variable", - "name": "\"m1MinONS\"" - } - }, - "outputs": {} - }, - { - "instruction_uid": "28", - "type": "Move", - "inputs": { - "en": { - "type": "connection", - "source_instruction_uid": "27", - "source_instruction_type": "Contact", - "source_pin": "out" - }, - "in": { - "uid": "22", - "scope": "LiteralConstant", - "type": "constant", - "datatype": "Int", - "value": 0 - } - }, - "outputs": { - "out1": [ - { - "uid": "23", - "scope": "GlobalVariable", - "type": "variable", - "name": "\"Blender_Variables_Pers\".\"gProdSec\"" - } - ] - } - }, - { - "instruction_uid": "29", - "type": "Add", - "inputs": { - "in1": { - "uid": "24", - "scope": "GlobalVariable", - "type": "variable", - "name": "\"Blender_Variables_Pers\".\"gProdMin\"" - }, - "in2": { - "uid": "25", - "scope": "LiteralConstant", - "type": "constant", - "datatype": "Int", - "value": 1 - }, - "en": { - "type": "connection", - "source_instruction_uid": "27", - "source_instruction_type": "Contact", - "source_pin": "out" - } - }, - "outputs": { - "out": [ - { - "uid": "26", - "scope": "GlobalVariable", - "type": "variable", - "name": "\"Blender_Variables_Pers\".\"gProdMin\"" - } - ] - } - } - ] - }, - { - "id": "5E", - "title": "Hour", - "comment": "", - "logic": [ - { - "instruction_uid": "24", - "type": "Eq", - "inputs": { - "in1": { - "uid": "21", - "scope": "GlobalVariable", - "type": "variable", - "name": "\"Blender_Variables_Pers\".\"gProdMin\"" - }, - "in2": { - "uid": "22", - "scope": "LiteralConstant", - "type": "constant", - "datatype": "Int", - "value": 60 - }, - "pre": { - "type": "powerrail" - } - }, - "outputs": {} - }, - { - "instruction_uid": "25", - "type": "Coil", - "inputs": { - "in": { - "type": "connection", - "source_instruction_uid": "24", - "source_instruction_type": "Eq", - "source_pin": "out" - }, - "operand": { - "uid": "23", - "scope": "LocalVariable", - "type": "variable", - "name": "\"m1HourONS\"" - } - }, - "outputs": {} - } - ] - }, - { - "id": "6F", - "title": "Hour Counter", - "comment": "", - "logic": [ - { - "instruction_uid": "30", - "type": "Contact", - "inputs": { - "in": { - "type": "powerrail" - }, - "operand": { - "uid": "21", - "scope": "LocalVariable", - "type": "variable", - "name": "\"m1HourONS\"" - } - }, - "outputs": {} - }, - { - "instruction_uid": "31", - "type": "Move", - "inputs": { - "en": { - "type": "connection", - "source_instruction_uid": "30", - "source_instruction_type": "Contact", - "source_pin": "out" - }, - "in": { - "uid": "22", - "scope": "LiteralConstant", - "type": "constant", - "datatype": "Int", - "value": 0 - } - }, - "outputs": { - "out1": [ - { - "uid": "23", - "scope": "GlobalVariable", - "type": "variable", - "name": "\"Blender_Variables_Pers\".\"gProdMin\"" - } - ] - } - }, - { - "instruction_uid": "32", - "type": "Add", - "inputs": { - "in1": { - "uid": "24", - "scope": "GlobalVariable", - "type": "variable", - "name": "\"Blender_Variables_Pers\".\"gProdHour\"" - }, - "in2": { - "uid": "25", - "scope": "LiteralConstant", - "type": "constant", - "datatype": "Int", - "value": 1 - }, - "en": { - "type": "connection", - "source_instruction_uid": "30", - "source_instruction_type": "Contact", - "source_pin": "out" - } - }, - "outputs": { - "out": [ - { - "uid": "26", - "scope": "GlobalVariable", - "type": "variable", - "name": "\"Blender_Variables_Pers\".\"gProdHour\"" - } - ] - } - }, - { - "instruction_uid": "33", - "type": "Add", - "inputs": { - "in1": { - "uid": "27", - "scope": "GlobalVariable", - "type": "variable", - "name": "\"Blender_Variables_Pers\".\"gBlendingMaintHour\"" - }, - "in2": { - "uid": "28", - "scope": "LiteralConstant", - "type": "constant", - "datatype": "Int", - "value": 1 - }, - "en": { - "type": "connection", - "source_instruction_uid": "30", - "source_instruction_type": "Contact", - "source_pin": "out" - } - }, - "outputs": { - "out": [ - { - "uid": "29", - "scope": "GlobalVariable", - "type": "variable", - "name": "\"Blender_Variables_Pers\".\"gBlendingMaintHour\"" - } - ] - } - } - ] - }, - { - "id": "80", - "title": "Counter reset", - "comment": "", - "logic": [ - { - "instruction_uid": "29", - "type": "Contact", - "inputs": { - "in": { - "type": "powerrail" - }, - "operand": { - "uid": "21", - "scope": "GlobalVariable", - "type": "variable", - "name": "\"gBlenderCIPMode\"" - } - }, - "outputs": {} - }, - { - "instruction_uid": "30", - "type": "Contact", - "inputs": { - "operand": { - "uid": "22", - "scope": "GlobalVariable", - "type": "variable", - "name": "\"gBlenderRinseMode\"" - } - }, - "outputs": {} - }, - { - "instruction_uid": "31", - "type": "O", - "inputs": { - "in1": { - "type": "connection", - "source_instruction_uid": "29", - "source_instruction_type": "Contact", - "source_pin": "out" - }, - "in2": { - "type": "connection", - "source_instruction_uid": "30", - "source_instruction_type": "Contact", - "source_pin": "out" - } - }, - "outputs": {} - }, - { - "instruction_uid": "32", - "type": "Move", - "inputs": { - "en": { - "type": "connection", - "source_instruction_uid": "31", - "source_instruction_type": "O", - "source_pin": "out" - }, - "in": { - "uid": "23", - "scope": "LiteralConstant", - "type": "constant", - "datatype": "Int", - "value": 0 - } - }, - "outputs": { - "out1": [ - { - "uid": "24", - "scope": "GlobalVariable", - "type": "variable", - "name": "\"Blender_Variables_Pers\".\"gProdSec\"" - } - ] - } - }, - { - "instruction_uid": "33", - "type": "Move", - "inputs": { - "in": { - "uid": "25", - "scope": "LiteralConstant", - "type": "constant", - "datatype": "Int", - "value": 0 - }, - "en": { - "type": "connection", - "source_instruction_uid": "31", - "source_instruction_type": "O", - "source_pin": "out" - } - }, - "outputs": { - "out1": [ - { - "uid": "26", - "scope": "GlobalVariable", - "type": "variable", - "name": "\"Blender_Variables_Pers\".\"gProdMin\"" - } - ] - } - }, - { - "instruction_uid": "34", - "type": "Move", - "inputs": { - "in": { - "uid": "27", - "scope": "LiteralConstant", - "type": "constant", - "datatype": "Int", - "value": 0 - }, - "en": { - "type": "connection", - "source_instruction_uid": "31", - "source_instruction_type": "O", - "source_pin": "out" - } - }, - "outputs": { - "out1": [ - { - "uid": "28", - "scope": "GlobalVariable", - "type": "variable", - "name": "\"Blender_Variables_Pers\".\"gProdHour\"" - } - ] - } - } - ] - }, - { - "id": "91", - "title": "Running Seconds", - "comment": "", - "logic": [ - { - "instruction_uid": "26", - "type": "Contact", - "inputs": { - "in": { - "type": "powerrail" - }, - "operand": { - "uid": "21", - "scope": "GlobalVariable", - "type": "variable", - "name": "\"Procedure_Variables\".\"Blender_Run\".\"Running\"" - } - }, - "outputs": {} - }, - { - "instruction_uid": "27", - "type": "Contact", - "inputs": { - "in": { - "type": "connection", - "source_instruction_uid": "26", - "source_instruction_type": "Contact", - "source_pin": "out" - }, - "operand": { - "uid": "22", - "scope": "GlobalVariable", - "type": "variable", - "name": "\"CLK_1.0S\"" - } - }, - "outputs": {} - }, - { - "instruction_uid": "28", - "type": "Add", - "inputs": { - "en": { - "type": "connection", - "source_instruction_uid": "27", - "source_instruction_type": "Contact", - "source_pin": "out" - }, - "in1": { - "uid": "23", - "scope": "GlobalVariable", - "type": "variable", - "name": "\"Blender_Variables_Pers\".\"gRunningSeconds\"" - }, - "in2": { - "uid": "24", - "scope": "LiteralConstant", - "type": "constant", - "datatype": "Int", - "value": 1 - } - }, - "outputs": { - "out": [ - { - "uid": "25", - "scope": "GlobalVariable", - "type": "variable", - "name": "\"Blender_Variables_Pers\".\"gRunningSeconds\"" - } - ] - } - } - ] - }, - { - "id": "A2", - "title": "Running Minutes", - "comment": "", - "logic": [ - { - "instruction_uid": "35", - "type": "Convert", - "inputs": { - "en": { - "type": "powerrail" - }, - "in": { - "uid": "21", - "scope": "GlobalVariable", - "type": "variable", - "name": "\"Blender_Variables_Pers\".\"gRunningSeconds\"" - } - }, - "outputs": { - "out": [ - { - "uid": "22", - "scope": "LocalVariable", - "type": "variable", - "name": "\"I_DIRunning_sec\"" - } - ] - } - }, - { - "instruction_uid": "36", - "type": "Mod", - "inputs": { - "en": { - "type": "connection", - "source_instruction_uid": "35", - "source_instruction_type": "Convert", - "source_pin": "eno" - }, - "in1": { - "uid": "23", - "scope": "LocalVariable", - "type": "variable", - "name": "\"I_DIRunning_sec\"" - }, - "in2": { - "uid": "24", - "scope": "TypedConstant", - "type": "constant", - "datatype": "TypedConstant", - "value": "DINT#60" - } - }, - "outputs": { - "out": [ - { - "uid": "25", - "scope": "LocalVariable", - "type": "variable", - "name": "\"MOD60\"" - } - ] - }, - "eno_logic": [ - { - "target_pin": "pre", - "target_type": "instruction", - "target_uid": "37", - "target_name": "Eq" - } - ] - }, - { - "instruction_uid": "37", - "type": "Eq", - "inputs": { - "in1": { - "uid": "26", - "scope": "LocalVariable", - "type": "variable", - "name": "\"MOD60\"" - }, - "in2": { - "uid": "27", - "scope": "TypedConstant", - "type": "constant", - "datatype": "TypedConstant", - "value": "DINT#0" - }, - "pre": { - "type": "connection", - "source_instruction_uid": "36", - "source_instruction_type": "Mod", - "source_pin": "eno" - } - }, - "outputs": {} - }, - { - "instruction_uid": "38", - "type": "Contact", - "inputs": { - "in": { - "type": "connection", - "source_instruction_uid": "37", - "source_instruction_type": "Eq", - "source_pin": "out" - }, - "operand": { - "uid": "28", - "scope": "GlobalVariable", - "type": "variable", - "name": "\"Procedure_Variables\".\"Blender_Run\".\"Running\"" - } - }, - "outputs": {} - }, - { - "instruction_uid": "39", - "type": "Contact", - "inputs": { - "in": { - "type": "connection", - "source_instruction_uid": "38", - "source_instruction_type": "Contact", - "source_pin": "out" - }, - "operand": { - "uid": "29", - "scope": "GlobalVariable", - "type": "variable", - "name": "\"CLK_1.0S\"" - } - }, - "outputs": {} - }, - { - "instruction_uid": "40", - "type": "Add", - "inputs": { - "en": { - "type": "connection", - "source_instruction_uid": "39", - "source_instruction_type": "Contact", - "source_pin": "out" - }, - "in1": { - "uid": "30", - "scope": "GlobalVariable", - "type": "variable", - "name": "\"Blender_Variables_Pers\".\"gRunningMinutes\"" - }, - "in2": { - "uid": "31", - "scope": "LiteralConstant", - "type": "constant", - "datatype": "Int", - "value": 1 - } - }, - "outputs": { - "out": [ - { - "uid": "32", - "scope": "GlobalVariable", - "type": "variable", - "name": "\"Blender_Variables_Pers\".\"gRunningMinutes\"" - } - ] - } - }, - { - "instruction_uid": "41", - "type": "PBox", - "inputs": { - "bit": { - "uid": "33", - "scope": "GlobalVariable", - "type": "variable", - "name": "\"M19012\"" - } - }, - "outputs": {} - }, - { - "instruction_uid": "42", - "type": "Coil", - "inputs": { - "in": { - "type": "connection", - "source_instruction_uid": "41", - "source_instruction_type": "PBox", - "source_pin": "out" - }, - "operand": { - "uid": "34", - "scope": "LocalVariable", - "type": "variable", - "name": "\"mRunMin\"" - } - }, - "outputs": {} - } - ] - }, - { - "id": "B3", - "title": "Running Hours for Maintenance", - "comment": "", - "logic": [ - { - "instruction_uid": "32", - "type": "Contact", - "inputs": { - "in": { - "type": "powerrail" - }, - "operand": { - "uid": "21", - "scope": "LocalVariable", - "type": "variable", - "name": "\"mRunMin\"" - } - }, - "outputs": {} - }, - { - "instruction_uid": "33", - "type": "Convert", - "inputs": { - "en": { - "type": "connection", - "source_instruction_uid": "32", - "source_instruction_type": "Contact", - "source_pin": "out" - }, - "in": { - "uid": "22", - "scope": "GlobalVariable", - "type": "variable", - "name": "\"Blender_Variables_Pers\".\"gRunningMinutes\"" - } - }, - "outputs": { - "out": [ - { - "uid": "23", - "scope": "LocalVariable", - "type": "variable", - "name": "\"I_DIRunning_min\"" - } - ] - } - }, - { - "instruction_uid": "34", - "type": "Mod", - "inputs": { - "en": { - "type": "connection", - "source_instruction_uid": "33", - "source_instruction_type": "Convert", - "source_pin": "eno" - }, - "in1": { - "uid": "24", - "scope": "LocalVariable", - "type": "variable", - "name": "\"I_DIRunning_min\"" - }, - "in2": { - "uid": "25", - "scope": "TypedConstant", - "type": "constant", - "datatype": "TypedConstant", - "value": "DINT#60" - } - }, - "outputs": { - "out": [ - { - "uid": "26", - "scope": "LocalVariable", - "type": "variable", - "name": "\"MOD60\"" - } - ] - }, - "eno_logic": [ - { - "target_pin": "pre", - "target_type": "instruction", - "target_uid": "35", - "target_name": "Eq" - } - ] - }, - { - "instruction_uid": "35", - "type": "Eq", - "inputs": { - "in1": { - "uid": "27", - "scope": "LocalVariable", - "type": "variable", - "name": "\"MOD60\"" - }, - "in2": { - "uid": "28", - "scope": "TypedConstant", - "type": "constant", - "datatype": "TypedConstant", - "value": "DINT#0" - }, - "pre": { - "type": "connection", - "source_instruction_uid": "34", - "source_instruction_type": "Mod", - "source_pin": "eno" - } - }, - "outputs": {} - }, - { - "instruction_uid": "36", - "type": "Add", - "inputs": { - "en": { - "type": "connection", - "source_instruction_uid": "35", - "source_instruction_type": "Eq", - "source_pin": "out" - }, - "in1": { - "uid": "29", - "scope": "GlobalVariable", - "type": "variable", - "name": "\"Blender_Variables_Pers\".\"gRunningMaintHour\"" - }, - "in2": { - "uid": "30", - "scope": "LiteralConstant", - "type": "constant", - "datatype": "Int", - "value": 1 - } - }, - "outputs": { - "out": [ - { - "uid": "31", - "scope": "GlobalVariable", - "type": "variable", - "name": "\"Blender_Variables_Pers\".\"gRunningMaintHour\"" - } - ] - } - } - ] - }, - { - "id": "C4", - "title": "Running Hours for Maintenance", - "comment": "", - "logic": [ - { - "instruction_uid": "23", - "type": "Move", - "inputs": { - "en": { - "type": "powerrail" - }, - "in": { - "uid": "21", - "scope": "GlobalVariable", - "type": "variable", - "name": "\"Blender_Variables_Pers\".\"gRunningMaintHour\"" - } - }, - "outputs": { - "out1": [ - { - "uid": "22", - "scope": "GlobalVariable", - "type": "variable", - "name": "\"HMI_Variables_Status\".\"System\".\"BlendingMaintHour\"" - } - ] - } - } - ] - } - ] -} \ No newline at end of file diff --git a/x1_to_json.py b/x1_to_json.py index 92cc6e8..fa13257 100644 --- a/x1_to_json.py +++ b/x1_to_json.py @@ -3,7 +3,7 @@ import json import os from lxml import etree import traceback -from collections import defaultdict # Para facilitar el manejo de conexiones +from collections import defaultdict # --- Namespaces --- ns = { @@ -14,6 +14,7 @@ ns = { # --- Helper Functions --- # (get_multilingual_text, get_symbol_name, parse_access, parse_part - sin cambios) +# ... (código de estas funciones aquí) ... def get_multilingual_text(element, default_lang="en-US", fallback_lang="it-IT"): if element is None: return "" @@ -100,7 +101,7 @@ def parse_access(access_element): float(value_str) info["datatype"] = "Real" except ValueError: - pass # Si no es float, sigue siendo Unknown (o lo que fuera antes) + pass elif "#" in value_str: info["datatype"] = "TypedConstant" info["value"] = value_str @@ -164,276 +165,549 @@ def parse_part(part_element): template_values[tv_name] = tv_type except Exception as e: print(f"Advertencia: Error extrayendo TemplateValues Part UID={uid}: {e}") - return {"uid": uid, "name": name, "template_values": template_values} + return { + "uid": uid, + "type": name, + "template_values": template_values, + } # Cambiado Name a type +# --- NUEVA FUNCIÓN parse_call --- +def parse_call(call_element): + """ + Parsea un elemento Call (llamada a FC/FB) y extrae su información. + """ + if call_element is None: + return None + uid = call_element.get("UId") + if not uid: + print( + f"Error: Call encontrado sin UID: {etree.tostring(call_element, encoding='unicode')}" + ) + return None + + call_info_elem = call_element.xpath("./*[local-name()='CallInfo']") + if not call_info_elem: + print(f"Error: Call UID {uid} sin elemento CallInfo.") + return None + call_info = call_info_elem[0] + + block_name = call_info.get("Name") + block_type = call_info.get("BlockType") # FC, FB, etc. + instance_name = None + instance_scope = None + + # Si es una llamada a FB, puede tener información de instancia + instance_elem = call_info.xpath("./*[local-name()='Instance']") + if instance_elem: + instance = instance_elem[0] + instance_scope = instance.get("Scope") # Ej: GlobalVariable, InstanceDB + # El nombre de la instancia DB suele estar en Component dentro de Symbol + symbol_elem = instance.xpath("./*[local-name()='Symbol']") + if symbol_elem: + instance_name = get_symbol_name(symbol_elem[0]) + + if not block_name or not block_type: + print(f"Error: CallInfo para UID {uid} sin Name o BlockType.") + return None + + call_data = { + "uid": uid, + "type": "Call", # Tipo genérico para nuestra estructura JSON + "block_name": block_name, + "block_type": block_type, + } + if instance_name: + call_data["instance_db"] = instance_name + if instance_scope: + call_data["instance_scope"] = instance_scope + + return call_data + + +# --- FIN NUEVA FUNCIÓN --- + + +# --- Función parse_network MODIFICADA --- def parse_network(network_element): """ - Parsea una red (CompileUnit), extrae lógica, infiere conexiones EN implícitas, - y añade lógica ENO interesante. + Parsea una red, extrae lógica (incluyendo Calls) y añade conexiones EN implícitas. """ if network_element is None: - print("Error: parse_network llamado con network_element=None") - return {'id': 'ERROR', 'title': 'Invalid Network Element', 'comment': '', 'logic': [], 'error': 'Input element was None'} + return { + "id": "ERROR", + "title": "Invalid Network Element", + "comment": "", + "logic": [], + "error": "Input element was None", + } + network_id = network_element.get("ID") + title_element = network_element.xpath( + ".//*[local-name()='MultilingualText'][@CompositionName='Title']" + ) + network_title = ( + get_multilingual_text(title_element[0]) + if title_element + else f"Network {network_id}" + ) + comment_title_element = network_element.xpath( + "./*[local-name()='ObjectList']/*[local-name()='MultilingualText'][@CompositionName='Comment']" + ) + network_comment = ( + get_multilingual_text(comment_title_element[0]) if comment_title_element else "" + ) - network_id = network_element.get('ID') - # print(f"--- Parseando Red ID={network_id} ---") # Descomentar para depuración detallada - - # Extrae el título de la red - title_element = network_element.xpath(".//*[local-name()='MultilingualText'][@CompositionName='Title']") - network_title = get_multilingual_text(title_element[0]) if title_element else f"Network {network_id}" - - # Extrae el comentario de la red - network_comment = "" - comment_title_element = network_element.xpath("./*[local-name()='ObjectList']/*[local-name()='MultilingualText'][@CompositionName='Comment']") - if comment_title_element: - network_comment = get_multilingual_text(comment_title_element[0]) - - # Encuentra FlgNet flgnet_list = network_element.xpath(".//flg:FlgNet", namespaces=ns) if not flgnet_list: - print(f"Error: No se encontró FlgNet en la red ID={network_id}") - return {'id': network_id, 'title': network_title, 'comment': network_comment, 'logic': [], 'error': 'FlgNet not found'} + return { + "id": network_id, + "title": network_title, + "comment": network_comment, + "logic": [], + "error": "FlgNet not found", + } flgnet = flgnet_list[0] - # 1. Parsear Access y Parts - access_map = {acc_info['uid']: acc_info for acc in flgnet.xpath(".//flg:Access", namespaces=ns) if (acc_info := parse_access(acc))} - parts_map = {part_info['uid']: part_info for part in flgnet.xpath(".//flg:Part", namespaces=ns) if (part_info := parse_part(part))} - # print(f"DEBUG: Red {network_id} - Access={len(access_map)}, Parts={len(parts_map)}") # Debug + # 1. Parsear Access, Parts y Calls + access_map = { + acc_info["uid"]: acc_info + for acc in flgnet.xpath(".//flg:Access", namespaces=ns) + if (acc_info := parse_access(acc)) + } + + # --- MODIFICADO: Unir Parts y Calls en un solo mapa --- + parts_and_calls_map = {} + instruction_elements = flgnet.xpath( + ".//flg:Part | .//flg:Call", namespaces=ns + ) # Buscar ambos tipos + + for element in instruction_elements: + parsed_info = None + if element.tag.endswith("Part"): + parsed_info = parse_part(element) + elif element.tag.endswith("Call"): + parsed_info = parse_call(element) + + if parsed_info and "uid" in parsed_info: + parts_and_calls_map[parsed_info["uid"]] = parsed_info + else: + print( + f"Advertencia: Se ignoró un Part/Call inválido en la red {network_id}" + ) + # --- FIN MODIFICADO --- # 2. Parsear Wires y construir mapas de conexiones - wire_connections = defaultdict(list) # key=(dest_uid, dest_pin), value=list of (src_uid, src_pin) - source_connections = defaultdict(list) # key=(src_uid, src_pin), value=list of (dest_uid, dest_pin) - eno_outputs = defaultdict(list) # key=src_uid, value=list of (dest_uid, dest_pin) from ENO - flg_ns_uri = ns['flg'] - + wire_connections = defaultdict(list) + source_connections = defaultdict(list) + eno_outputs = defaultdict(list) + flg_ns_uri = ns["flg"] for wire in flgnet.xpath(".//flg:Wire", namespaces=ns): source_uid, source_pin, dest_uid, dest_pin = None, None, None, None children = wire.getchildren() - if len(children) < 2: continue + if len(children) < 2: + continue source_elem, dest_elem = children[0], children[1] - - # Determina la fuente - if source_elem.tag == etree.QName(flg_ns_uri, 'Powerrail'): source_uid, source_pin = 'POWERRAIL', 'out' - elif source_elem.tag == etree.QName(flg_ns_uri, 'IdentCon'): source_uid, source_pin = source_elem.get('UId'), 'value' - elif source_elem.tag == etree.QName(flg_ns_uri, 'NameCon'): source_uid, source_pin = source_elem.get('UId'), source_elem.get('Name') - - # Determina el destino - if dest_elem.tag == etree.QName(flg_ns_uri, 'IdentCon'): dest_uid, dest_pin = dest_elem.get('UId'), 'value' - elif dest_elem.tag == etree.QName(flg_ns_uri, 'NameCon'): dest_uid, dest_pin = dest_elem.get('UId'), dest_elem.get('Name') - - # Registrar conexiones si son válidas + if source_elem.tag == etree.QName(flg_ns_uri, "Powerrail"): + source_uid, source_pin = "POWERRAIL", "out" + elif source_elem.tag == etree.QName(flg_ns_uri, "IdentCon"): + source_uid, source_pin = source_elem.get("UId"), "value" + elif source_elem.tag == etree.QName(flg_ns_uri, "NameCon"): + source_uid, source_pin = source_elem.get("UId"), source_elem.get("Name") + if dest_elem.tag == etree.QName(flg_ns_uri, "IdentCon"): + dest_uid, dest_pin = dest_elem.get("UId"), "value" + elif dest_elem.tag == etree.QName(flg_ns_uri, "NameCon"): + dest_uid, dest_pin = dest_elem.get("UId"), dest_elem.get("Name") if dest_uid and dest_pin and source_uid is not None: - dest_key = (dest_uid, dest_pin); source_key = (source_uid, source_pin) - source_info = (source_uid, source_pin); dest_info = (dest_uid, dest_pin) - - if source_info not in wire_connections[dest_key]: wire_connections[dest_key].append(source_info) - if dest_info not in source_connections[source_key]: source_connections[source_key].append(dest_info) - - # Registrar conexiones que SALEN de un pin ENO - if source_pin == 'eno' and source_uid in parts_map: - if dest_info not in eno_outputs[source_uid]: - eno_outputs[source_uid].append(dest_info) + dest_key = (dest_uid, dest_pin) + source_key = (source_uid, source_pin) + source_info = (source_uid, source_pin) + dest_info = (dest_uid, dest_pin) + if source_info not in wire_connections[dest_key]: + wire_connections[dest_key].append(source_info) + if dest_info not in source_connections[source_key]: + source_connections[source_key].append(dest_info) + if ( + source_pin == "eno" and source_uid in parts_and_calls_map + ): # Usar mapa combinado + if dest_info not in eno_outputs[source_uid]: + eno_outputs[source_uid].append(dest_info) # 3. Construir la representación lógica INICIAL all_logic_steps = {} - functional_block_types = ['Move', 'Add', 'Sub', 'Mul', 'Div', 'Mod', 'Convert'] # Ampliar si es necesario - rlo_generators = ['Contact', 'O', 'Eq', 'Ne', 'Gt', 'Lt', 'Ge', 'Le', 'And', 'Xor', 'PBox'] # Ampliar si es necesario + functional_block_types = [ + "Move", + "Add", + "Sub", + "Mul", + "Div", + "Mod", + "Convert", + "Call", + ] # Añadir Call + rlo_generators = [ + "Contact", + "O", + "Eq", + "Ne", + "Gt", + "Lt", + "Ge", + "Le", + "And", + "Xor", + "PBox", + ] + + # --- MODIFICADO: Iterar sobre el mapa combinado --- + for instruction_uid, instruction_info in parts_and_calls_map.items(): + # Usar directamente la info parseada (part_info o call_info) + instruction_repr = { + "instruction_uid": instruction_uid, + **instruction_info, + } # Copiar datos base + instruction_repr["inputs"] = {} + instruction_repr["outputs"] = {} + # --- FIN MODIFICADO --- - for part_uid, part_info in parts_map.items(): - instruction_repr = {'instruction_uid': part_uid, 'type': part_info['name'], 'inputs': {}, 'outputs': {}} # Rellenar inputs explícitos - for dest_pin_name in ['en', 'in', 'in1', 'in2', 'in3', 'in4', 'bit', 'operand', 'pre', 'clk']: # Añadir pines comunes - dest_key = (part_uid, dest_pin_name) - if dest_key in wire_connections: - sources_list = wire_connections[dest_key] - input_sources_repr = [] - for source_uid, source_pin in sources_list: - if source_uid == 'POWERRAIL': input_sources_repr.append({'type': 'powerrail'}) - elif source_uid in access_map: input_sources_repr.append(access_map[source_uid]) - elif source_uid in parts_map: - input_sources_repr.append({'type': 'connection', 'source_instruction_uid': source_uid, - 'source_instruction_type': parts_map[source_uid]['name'], 'source_pin': source_pin}) - else: input_sources_repr.append({'type': 'unknown_source', 'uid': source_uid}) - if len(input_sources_repr) == 1: instruction_repr['inputs'][dest_pin_name] = input_sources_repr[0] - elif len(input_sources_repr) > 1: instruction_repr['inputs'][dest_pin_name] = input_sources_repr # Rama OR/Multiple + # Añadir más pines si las llamadas a FB los usan (ej: parámetros FC/FB) + possible_pins = set( + ["en", "in", "in1", "in2", "in3", "in4", "bit", "operand", "pre", "clk"] + ) + # Añadir pines específicos de la llamada si es un FB? Más complejo. + for dest_pin_name in possible_pins: + dest_key = (instruction_uid, dest_pin_name) + if dest_key in wire_connections: + sources_list = wire_connections[dest_key] + input_sources_repr = [] + for source_uid, source_pin in sources_list: + if source_uid == "POWERRAIL": + input_sources_repr.append({"type": "powerrail"}) + elif source_uid in access_map: + input_sources_repr.append(access_map[source_uid]) + elif source_uid in parts_and_calls_map: # Usar mapa combinado + input_sources_repr.append( + { + "type": "connection", + # Usar el tipo del mapa combinado + "source_instruction_type": parts_and_calls_map[ + source_uid + ]["type"], + "source_instruction_uid": source_uid, + "source_pin": source_pin, + } + ) + else: + input_sources_repr.append( + {"type": "unknown_source", "uid": source_uid} + ) + if len(input_sources_repr) == 1: + instruction_repr["inputs"][dest_pin_name] = input_sources_repr[0] + elif len(input_sources_repr) > 1: + instruction_repr["inputs"][dest_pin_name] = input_sources_repr # Rellenar outputs explícitos (hacia Access) - for source_pin_name in ['out', 'out1', 'Q', 'eno']: # Añadir pines comunes - source_key = (part_uid, source_pin_name) - if source_key in source_connections: - for dest_uid, dest_pin in source_connections[source_key]: - if dest_uid in access_map: - if source_pin_name not in instruction_repr['outputs']: instruction_repr['outputs'][source_pin_name] = [] - if access_map[dest_uid] not in instruction_repr['outputs'][source_pin_name]: - instruction_repr['outputs'][source_pin_name].append(access_map[dest_uid]) + for source_pin_name in [ + "out", + "out1", + "Q", + "eno", + ]: # Añadir salidas comunes de FC/FB si es necesario + source_key = (instruction_uid, source_pin_name) + if source_key in source_connections: + for dest_uid, dest_pin in source_connections[source_key]: + if dest_uid in access_map: + if source_pin_name not in instruction_repr["outputs"]: + instruction_repr["outputs"][source_pin_name] = [] + if ( + access_map[dest_uid] + not in instruction_repr["outputs"][source_pin_name] + ): + instruction_repr["outputs"][source_pin_name].append( + access_map[dest_uid] + ) - all_logic_steps[part_uid] = instruction_repr + all_logic_steps[instruction_uid] = instruction_repr # --- 4. INFERENCIA Y PROPAGACIÓN DE CONEXIONES 'EN' IMPLÍCITAS --- - # print(f"DEBUG: Iniciando inferencia EN para Red {network_id}...") # Debug - processed_blocks_en_inference = set() # Evitar procesar el mismo bloque múltiples veces en inferencia EN + # (Esta lógica probablemente necesite ajustes para considerar 'Call' como bloque funcional) + # print(f"DEBUG: Iniciando inferencia EN para Red {network_id}...") + processed_blocks_en_inference = set() something_changed = True inference_passes = 0 max_inference_passes = len(all_logic_steps) + 5 - while something_changed and inference_passes < max_inference_passes: something_changed = False inference_passes += 1 - # print(f"DEBUG: Pase de inferencia EN {inference_passes}...") # Debug - - # Ordenar por UID para intentar procesar en orden lógico try: - sorted_uids_for_pass = sorted(all_logic_steps.keys(), key=lambda x: int(x) if x.isdigit() else float('inf')) + sorted_uids_for_pass = sorted( + all_logic_steps.keys(), + key=lambda x: int(x) if x.isdigit() else float("inf"), + ) except ValueError: - sorted_uids_for_pass = sorted(all_logic_steps.keys()) + sorted_uids_for_pass = sorted(all_logic_steps.keys()) - for part_uid in sorted_uids_for_pass: - if part_uid not in all_logic_steps: continue # Seguridad - instruction = all_logic_steps[part_uid] - part_type = instruction['type'] + current_logic_list = [ + all_logic_steps[uid] + for uid in sorted_uids_for_pass + if uid in all_logic_steps + ] - if part_type in functional_block_types and 'en' not in instruction['inputs'] and part_uid not in processed_blocks_en_inference: - # print(f"DEBUG: Intentando inferir EN para {part_type} UID {part_uid}") # Debug + for i, instruction in enumerate( + current_logic_list + ): # Usar enumerate para obtener índice + part_uid = instruction["instruction_uid"] + part_type = instruction["type"] # Ahora puede ser 'Call' + + # Si es un bloque funcional (incluyendo Call) sin 'en' explícito + if ( + part_type in functional_block_types + and "en" not in instruction["inputs"] + and part_uid not in processed_blocks_en_inference + ): inferred_en_source = None - # Usar la lista ordenada por UID para buscar atrás - my_index = -1 - current_logic_list = [all_logic_steps[uid] for uid in sorted_uids_for_pass if uid in all_logic_steps] # Lista actual ordenada - for i, instr in enumerate(current_logic_list): - if instr['instruction_uid'] == part_uid: - my_index = i - break + my_index = i # Ya tenemos el índice if my_index > 0: - for i in range(my_index - 1, -1, -1): - prev_instr = current_logic_list[i] - prev_uid = prev_instr['instruction_uid'] - prev_type = prev_instr['type'] - if prev_type in rlo_generators: - inferred_en_source = {'type': 'connection', 'source_instruction_uid': prev_uid, 'source_instruction_type': prev_type, 'source_pin': 'out'} - # print(f"DEBUG: Inferido EN para {part_uid} desde RLO de {prev_type} {prev_uid}.out") # Debug - break - elif prev_type in functional_block_types: - source_key_eno = (prev_uid, 'eno') - # Verificar si el ENO del bloque anterior está conectado a *algo* - if source_key_eno in source_connections: - inferred_en_source = {'type': 'connection', 'source_instruction_uid': prev_uid, 'source_instruction_type': prev_type, 'source_pin': 'eno'} - # print(f"DEBUG: Inferido EN para {part_uid} desde ENO de {prev_type} {prev_uid}.eno") # Debug - break - # Si no hay conexión ENO explícita, podríamos asumir que sigue el RLO del EN de ese bloque? Más complejo. - # Por ahora, solo usamos ENO si está conectado. + for j in range(my_index - 1, -1, -1): # Buscar hacia atrás + prev_instr = current_logic_list[j] + prev_uid = prev_instr["instruction_uid"] + prev_type = prev_instr["type"] + if prev_type in rlo_generators: + inferred_en_source = { + "type": "connection", + "source_instruction_uid": prev_uid, + "source_instruction_type": prev_type, + "source_pin": "out", + } + break + elif prev_type in functional_block_types: + source_key_eno = (prev_uid, "eno") + if source_key_eno in source_connections: + inferred_en_source = { + "type": "connection", + "source_instruction_uid": prev_uid, + "source_instruction_type": prev_type, + "source_pin": "eno", + } + break if inferred_en_source: - instruction['inputs']['en'] = inferred_en_source - # print(f"INFO: Conexión EN inferida añadida a {part_type} UID {part_uid}") # Info + # Asegurarse de que 'instruction' se refiera al diccionario original + all_logic_steps[part_uid]["inputs"]["en"] = inferred_en_source processed_blocks_en_inference.add(part_uid) something_changed = True - # else: - # print(f"DEBUG: No se pudo inferir EN para {part_type} UID {part_uid}") # Debug - # --- 5. Añadir lógica ENO interesante --- + # (Necesita usar parts_and_calls_map ahora) for source_instr_uid, eno_destinations in eno_outputs.items(): - if source_instr_uid not in all_logic_steps: continue + if source_instr_uid not in all_logic_steps: + continue interesting_eno_logic = [] for dest_uid, dest_pin in eno_destinations: - is_direct_en_connection = (dest_uid in parts_map and dest_pin == 'en') + is_direct_en_connection = ( + dest_uid in parts_and_calls_map and dest_pin == "en" + ) # Check en mapa combinado if not is_direct_en_connection: - target_info = {'target_pin': dest_pin} - if dest_uid in parts_map: target_info.update({'target_type': 'instruction', 'target_uid': dest_uid, 'target_name': parts_map[dest_uid]['name']}) - elif dest_uid in access_map: target_info.update({'target_type': 'operand', 'target_details': access_map[dest_uid]}) - else: target_info.update({'target_type': 'unknown', 'target_uid': dest_uid}) + target_info = {"target_pin": dest_pin} + if dest_uid in parts_and_calls_map: + target_info.update( + { + "target_type": "instruction", + "target_uid": dest_uid, + "target_name": parts_and_calls_map[dest_uid].get( + "name", parts_and_calls_map[dest_uid].get("type") + ), + } + ) # Usar 'name' si existe (Part) o 'type' (Call) + elif dest_uid in access_map: + target_info.update( + { + "target_type": "operand", + "target_details": access_map[dest_uid], + } + ) + else: + target_info.update( + {"target_type": "unknown", "target_uid": dest_uid} + ) interesting_eno_logic.append(target_info) if interesting_eno_logic: - all_logic_steps[source_instr_uid]['eno_logic'] = interesting_eno_logic - # print(f"DEBUG: Red {network_id} - Añadida lógica ENO interesante para {source_instr_uid}") # Debug + all_logic_steps[source_instr_uid]["eno_logic"] = interesting_eno_logic # --- 6. Ordenar Lógica Final y Devolver --- - try: sorted_uids = sorted(all_logic_steps.keys(), key=lambda x: int(x) if x.isdigit() else float('inf')) - except ValueError: print(f"Advertencia: UIDs no numéricos red {network_id}. Orden alfabético."); sorted_uids = sorted(all_logic_steps.keys()) - network_logic = [all_logic_steps[uid] for uid in sorted_uids if uid in all_logic_steps] - - # print(f"--- Fin Parseo Red ID={network_id} ---") # Debug - return {'id': network_id, 'title': network_title, 'comment': network_comment, 'logic': network_logic} - - -# --- Función Principal convert_xml_to_json (sin cambios respecto a la versión anterior) --- -def convert_xml_to_json(xml_filepath, json_filepath): - """ - Función principal que orquesta la conversión del archivo XML de Openness - a un archivo JSON simplificado que representa la estructura del bloque FC, - incluyendo comentarios, inferencia EN y lógica ENO no trivial. - """ - print(f"Iniciando conversión de '{xml_filepath}' a '{json_filepath}'...") - if not os.path.exists(xml_filepath): print(f"Error Crítico: Archivo XML no encontrado: '{xml_filepath}'"); return - try: - print("Paso 1: Parseando archivo XML..."); parser = etree.XMLParser(remove_blank_text=True); tree = etree.parse(xml_filepath, parser); root = tree.getroot(); print("Paso 1: Parseo XML completado.") - print("Paso 2: Buscando el bloque SW.Blocks.FC..."); fc_block_list = root.xpath("//*[local-name()='SW.Blocks.FC']"); - if not fc_block_list: print("Error Crítico: No se encontró ."); return - fc_block = fc_block_list[0]; print(f"Paso 2: Bloque SW.Blocks.FC encontrado (ID={fc_block.get('ID')}).") - print("Paso 3: Extrayendo atributos del bloque..."); attribute_list_node = fc_block.xpath("./*[local-name()='AttributeList']") + sorted_uids = sorted( + all_logic_steps.keys(), + key=lambda x: int(x) if x.isdigit() else float("inf"), + ) + except ValueError: + print(f"Advertencia: UIDs no numéricos red {network_id}. Orden alfabético.") + sorted_uids = sorted(all_logic_steps.keys()) + network_logic = [ + all_logic_steps[uid] for uid in sorted_uids if uid in all_logic_steps + ] + + return { + "id": network_id, + "title": network_title, + "comment": network_comment, + "logic": network_logic, + } + + +# --- Función Principal convert_xml_to_json (sin cambios) --- +def convert_xml_to_json(xml_filepath, json_filepath): + print(f"Iniciando conversión de '{xml_filepath}' a '{json_filepath}'...") + if not os.path.exists(xml_filepath): + print(f"Error Crítico: Archivo XML no encontrado: '{xml_filepath}'") + return + try: + print("Paso 1: Parseando archivo XML...") + parser = etree.XMLParser(remove_blank_text=True) + tree = etree.parse(xml_filepath, parser) + root = tree.getroot() + print("Paso 1: Parseo XML completado.") + print("Paso 2: Buscando el bloque SW.Blocks.FC...") + fc_block_list = root.xpath("//*[local-name()='SW.Blocks.FC']") + if not fc_block_list: + print("Error Crítico: No se encontró .") + return + fc_block = fc_block_list[0] + print(f"Paso 2: Bloque SW.Blocks.FC encontrado (ID={fc_block.get('ID')}).") + print("Paso 3: Extrayendo atributos del bloque...") + attribute_list_node = fc_block.xpath("./*[local-name()='AttributeList']") block_name_val, block_number_val, block_lang_val = "Unknown", None, "Unknown" if attribute_list_node: - attr_list = attribute_list_node[0] - name_node = attr_list.xpath("./*[local-name()='Name']/text()"); block_name_val = name_node[0].strip() if name_node else block_name_val - num_node = attr_list.xpath("./*[local-name()='Number']/text()"); block_number_val = int(num_node[0]) if num_node and num_node[0].isdigit() else block_number_val - lang_node = attr_list.xpath("./*[local-name()='ProgrammingLanguage']/text()"); block_lang_val = lang_node[0].strip() if lang_node else block_lang_val - print(f"Paso 3: Atributos: Nombre='{block_name_val}', Número={block_number_val}, Lenguaje='{block_lang_val}'") - else: print("Advertencia: No se encontró AttributeList para el bloque FC.") - block_comment_val = ""; comment_node_list = fc_block.xpath("./*[local-name()='ObjectList']/*[local-name()='MultilingualText'][@CompositionName='Comment']") - if comment_node_list: block_comment_val = get_multilingual_text(comment_node_list[0]); print(f"Paso 3b: Comentario bloque: '{block_comment_val[:50]}...'") - result = {"block_name": block_name_val, "block_number": block_number_val, "language": block_lang_val, "block_comment": block_comment_val, "interface": {}, "networks": []} + attr_list = attribute_list_node[0] + name_node = attr_list.xpath("./*[local-name()='Name']/text()") + block_name_val = name_node[0].strip() if name_node else block_name_val + num_node = attr_list.xpath("./*[local-name()='Number']/text()") + block_number_val = ( + int(num_node[0]) + if num_node and num_node[0].isdigit() + else block_number_val + ) + lang_node = attr_list.xpath( + "./*[local-name()='ProgrammingLanguage']/text()" + ) + block_lang_val = lang_node[0].strip() if lang_node else block_lang_val + print( + f"Paso 3: Atributos: Nombre='{block_name_val}', Número={block_number_val}, Lenguaje='{block_lang_val}'" + ) + else: + print("Advertencia: No se encontró AttributeList para el bloque FC.") + block_comment_val = "" + comment_node_list = fc_block.xpath( + "./*[local-name()='ObjectList']/*[local-name()='MultilingualText'][@CompositionName='Comment']" + ) + if comment_node_list: + block_comment_val = get_multilingual_text(comment_node_list[0]) + print(f"Paso 3b: Comentario bloque: '{block_comment_val[:50]}...'") + result = { + "block_name": block_name_val, + "block_number": block_number_val, + "language": block_lang_val, + "block_comment": block_comment_val, + "interface": {}, + "networks": [], + } print("Paso 4: Extrayendo la interfaz del bloque...") if attribute_list_node: - interface_node_list = attribute_list_node[0].xpath("./*[local-name()='Interface']") - if interface_node_list: - interface_node = interface_node_list[0]; print("Paso 4: Nodo Interface encontrado.") - for section in interface_node.xpath(".//iface:Section", namespaces=ns): - section_name = section.get('Name'); members = [] - for member in section.xpath("./iface:Member", namespaces=ns): - member_name = member.get('Name'); member_dtype = member.get('Datatype') - if member_name and member_dtype: members.append({"name": member_name, "datatype": member_dtype}) - if members: result["interface"][section_name] = members - if not result["interface"]: print("Advertencia: Interface sin secciones iface:Section válidas.") - else: print("Advertencia: No se encontró DENTRO de .") - if not result["interface"]: print("Advertencia: No se pudo extraer información de la interfaz.") + interface_node_list = attribute_list_node[0].xpath( + "./*[local-name()='Interface']" + ) + if interface_node_list: + interface_node = interface_node_list[0] + print("Paso 4: Nodo Interface encontrado.") + for section in interface_node.xpath(".//iface:Section", namespaces=ns): + section_name = section.get("Name") + members = [] + for member in section.xpath("./iface:Member", namespaces=ns): + member_name = member.get("Name") + member_dtype = member.get("Datatype") + if member_name and member_dtype: + members.append( + {"name": member_name, "datatype": member_dtype} + ) + if members: + result["interface"][section_name] = members + if not result["interface"]: + print("Advertencia: Interface sin secciones iface:Section válidas.") + else: + print( + "Advertencia: No se encontró DENTRO de ." + ) + if not result["interface"]: + print("Advertencia: No se pudo extraer información de la interfaz.") print("Paso 5: Extrayendo y PROCESANDO lógica de redes (CompileUnits)...") networks_processed_count = 0 object_list_node = fc_block.xpath("./*[local-name()='ObjectList']") if object_list_node: - compile_units = object_list_node[0].xpath("./*[local-name()='SW.Blocks.CompileUnit']") - print(f"Paso 5: Se encontraron {len(compile_units)} elementos SW.Blocks.CompileUnit.") + compile_units = object_list_node[0].xpath( + "./*[local-name()='SW.Blocks.CompileUnit']" + ) + print( + f"Paso 5: Se encontraron {len(compile_units)} elementos SW.Blocks.CompileUnit." + ) for network_elem in compile_units: - networks_processed_count += 1 - # print(f"DEBUG: Procesando red #{networks_processed_count} (ID={network_elem.get('ID')})...") - parsed_network = parse_network(network_elem) # Llamada a la función modificada - if parsed_network and parsed_network.get('error') is None: result["networks"].append(parsed_network) - elif parsed_network: print(f"Error: Falló parseo red ID={parsed_network.get('id')}: {parsed_network.get('error')}"); result["networks"].append(parsed_network) - else: print(f"Error: parse_network devolvió None para CompileUnit (ID={network_elem.get('ID')}).") - if networks_processed_count == 0: print("Advertencia: ObjectList sin SW.Blocks.CompileUnit.") - else: print("Advertencia: No se encontró ObjectList.") + networks_processed_count += 1 + # print(f"DEBUG: Procesando red #{networks_processed_count} (ID={network_elem.get('ID')})...") + parsed_network = parse_network( + network_elem + ) # Llamada a la función modificada + if parsed_network and parsed_network.get("error") is None: + result["networks"].append(parsed_network) + elif parsed_network: + print( + f"Error: Falló parseo red ID={parsed_network.get('id')}: {parsed_network.get('error')}" + ) + result["networks"].append(parsed_network) + else: + print( + f"Error: parse_network devolvió None para CompileUnit (ID={network_elem.get('ID')})." + ) + if networks_processed_count == 0: + print("Advertencia: ObjectList sin SW.Blocks.CompileUnit.") + else: + print("Advertencia: No se encontró ObjectList.") print("Paso 6: Escribiendo el resultado en el archivo JSON...") - if not result["interface"]: print("ADVERTENCIA FINAL: 'interface' está vacía.") - if not result["networks"]: print("ADVERTENCIA FINAL: 'networks' está vacía.") + if not result["interface"]: + print("ADVERTENCIA FINAL: 'interface' está vacía.") + if not result["networks"]: + print("ADVERTENCIA FINAL: 'networks' está vacía.") # else: # Chequeo ENO logic # eno_logic_found = any(instr.get('eno_logic') for net in result.get('networks', []) if net.get('error') is None for instr in net.get('logic', [])) # if eno_logic_found: print("INFO FINAL: Lógica ENO interesante detectada.") # else: print("INFO FINAL: No se detectó lógica ENO interesante.") try: - with open(json_filepath, 'w', encoding='utf-8') as f: json.dump(result, f, indent=4, ensure_ascii=False) - print(f"Paso 6: Escritura completada."); print(f"Conversión finalizada. JSON guardado en: '{json_filepath}'") - except IOError as e: print(f"Error Crítico: No se pudo escribir JSON en '{json_filepath}'. Error: {e}") - except TypeError as e: print(f"Error Crítico: Problema al serializar a JSON. Error: {e}") + with open(json_filepath, "w", encoding="utf-8") as f: + json.dump(result, f, indent=4, ensure_ascii=False) + print(f"Paso 6: Escritura completada.") + print(f"Conversión finalizada. JSON guardado en: '{json_filepath}'") + except IOError as e: + print( + f"Error Crítico: No se pudo escribir JSON en '{json_filepath}'. Error: {e}" + ) + except TypeError as e: + print(f"Error Crítico: Problema al serializar a JSON. Error: {e}") + + except etree.XMLSyntaxError as e: + print(f"Error Crítico: Sintaxis XML en '{xml_filepath}'. Detalles: {e}") + except Exception as e: + print(f"Error Crítico: Error inesperado: {e}") + print("--- Traceback ---") + traceback.print_exc() + print("--- Fin Traceback ---") - except etree.XMLSyntaxError as e: print(f"Error Crítico: Sintaxis XML en '{xml_filepath}'. Detalles: {e}") - except Exception as e: print(f"Error Crítico: Error inesperado: {e}"); print("--- Traceback ---"); traceback.print_exc(); print("--- Fin Traceback ---") # --- Punto de Entrada Principal --- if __name__ == "__main__": - xml_file = 'BlenderCtrl_ProdModeInit.xml' - json_file = 'BlenderCtrl_ProdModeInit_simplified.json' - convert_xml_to_json(xml_file, json_file) \ No newline at end of file + xml_file = "BlenderCtrl__Main.xml" # CAMBIAR AL NUEVO ARCHIVO XML + json_file = xml_file.replace( + ".xml", "_simplified.json" + ) # Nombre de salida dinámico + convert_xml_to_json(xml_file, json_file) diff --git a/x2_process.py b/x2_process.py index 1da9fa5..f76418c 100644 --- a/x2_process.py +++ b/x2_process.py @@ -98,6 +98,29 @@ def get_scl_representation(source_info, network_id, scl_map, access_map): return f"_ERR_INVALID_SRC_TYPE_" +def format_variable_name(name): + """Limpia el nombre de la variable quitando comillas y espacios.""" + if not name: + return "_INVALID_NAME_" + # Quita comillas dobles iniciales/finales + name = name.strip('"') + # Reemplaza comillas dobles internas y puntos por guión bajo + # ¡Cuidado! Reemplazar '.' puede ser problemático para accesos a DBs/UDTs + # Quizás solo reemplazar si está dentro de comillas? Más complejo. + # Por ahora, mantenemos el reemplazo simple, asumiendo nombres de bloque limpios. + name = name.replace('"."', "_").replace( + ".", "_" + ) # <-- REVISAR SI ESTO ES SEGURO PARA TODOS LOS NOMBRES + # Quita comillas restantes (si las hubiera) + name = name.replace('"', "") + # Asegurarse de que no empiece con número + if name and name[0].isdigit(): + name = "_" + name + # Devolver entre comillas si el nombre original las tenía o contiene caracteres no estándar + # (Simplificación: por ahora no añadimos comillas automáticas aquí) + return name + + def generate_temp_var_name(network_id, instr_uid, pin_name): net_id_clean = str(network_id).replace("-", "_") instr_uid_clean = str(instr_uid).replace("-", "_") @@ -566,6 +589,82 @@ def process_o(instruction, network_id, scl_map, access_map): return True +def process_call(instruction, network_id, scl_map, access_map): + """Traduce una llamada a FC/FB a SCL.""" + instr_uid = instruction["instruction_uid"] + instr_type = instruction["type"] # Será 'Call' + if instruction.get("type", "").endswith(SCL_SUFFIX) or "_error" in instruction.get( + "type", "" + ): + return False # Usar get con default + + block_name_scl = format_variable_name( + instruction.get("block_name", "UnknownCall") + ) # Limpiar nombre + block_type = instruction.get("block_type") + instance_db = instruction.get("instance_db") # Será None para FCs + + # print(f"DEBUG: Intentando procesar CALL - UID: {instr_uid} Block: {block_name_scl}") + + # --- Manejo de EN --- + en_input = instruction["inputs"].get("en") + en_scl = ( + get_scl_representation(en_input, network_id, scl_map, access_map) + if en_input + else "TRUE" + ) + + if en_scl is None: + # print(f"DEBUG: Dependencia EN no resuelta para CALL UID: {instr_uid}") + return False + # --- Fin Manejo de EN --- + + # --- Construcción de la Llamada SCL --- + scl_call_params = [] + # TODO: Procesar otros parámetros de entrada/salida si existieran + # para FC/FB con parámetros, se necesitaría iterar sobre instruction['inputs'] + # y instruction['outputs'] buscando conexiones a pines específicos de la llamada. + + scl_final_call = "" + if block_type == "FB" and instance_db: + # Llamada a FB con DB de instancia + scl_final_call = ( + f"{instance_db}();" # Simplificado, añadir parámetros si los hay + ) + elif block_type == "FC": + # Llamada a FC + scl_final_call = ( + f"{block_name_scl}();" # Simplificado, añadir parámetros si los hay + ) + else: + print( + f"Advertencia: Tipo de bloque no soportado para Call UID {instr_uid}: {block_type}" + ) + scl_final_call = f"// ERROR: Call a bloque no soportado: {block_name_scl}" + instruction["type"] += "_error" # Marcar como error parcial + + # --- Aplicar Condición EN --- + scl_final = "" + if en_scl != "TRUE": + # Indentar la llamada dentro del IF + indented_call = "\n".join([f" {line}" for line in scl_final_call.splitlines()]) + scl_final = f"IF {en_scl} THEN\n{indented_call}\nEND_IF;" + else: + scl_final = scl_final_call + + # --- Actualizar JSON y Mapa SCL --- + instruction["scl"] = scl_final + # Cambiar el tipo para marcar como procesado + instruction["type"] = f"Call_{block_type}_scl" # Ej: Call_FC_scl + + # Actualizar scl_map con el estado ENO (igual a EN para llamadas simples) + map_key_eno = (network_id, instr_uid, "eno") + scl_map[map_key_eno] = en_scl + + # print(f"INFO: Call UID: {instr_uid} procesado. SCL: {scl_final.splitlines()[0]}...") + return True + + # --- NUEVO: Procesador de Agrupación (Refinado) --- def process_group_ifs(instruction, network_id, scl_map, access_map): """ @@ -753,6 +852,7 @@ def process_json_to_scl(json_filepath): process_pbox, process_add, process_move, + process_call, process_coil, ] processor_map = { @@ -842,7 +942,7 @@ def process_json_to_scl(json_filepath): print(f"\n--- Límite de {max_passes} pases alcanzado. ---") # --- Guardar JSON Final --- - output_filename = json_filepath.replace(".json", "_scl_processed.json") + output_filename = json_filepath.replace(".json", "_processed.json") print(f"\nGuardando JSON procesado en: {output_filename}") try: with open(output_filename, "w", encoding="utf-8") as f: @@ -854,5 +954,8 @@ def process_json_to_scl(json_filepath): # --- Ejecución --- if __name__ == "__main__": - input_json_file = "BlenderCtrl_ProdModeInit_simplified.json" # Asegúrate que este es el generado por x1_to_json.py MODIFICADO + xml_file = "BlenderCtrl__Main.xml" # CAMBIAR AL NUEVO ARCHIVO XML + input_json_file = xml_file.replace( + ".xml", "_simplified.json" + ) # Nombre de salida dinámico process_json_to_scl(input_json_file) diff --git a/x3_generate_scl.py b/x3_generate_scl.py index 6b49738..2c986a5 100644 --- a/x3_generate_scl.py +++ b/x3_generate_scl.py @@ -196,7 +196,13 @@ def generate_scl(processed_json_filepath, output_scl_filepath): # --- Ejecución --- if __name__ == "__main__": - input_json_file = 'BlenderRun_ProdTime_simplified_scl_processed.json' # Usar el JSON procesado - output_scl_file = input_json_file.replace('_simplified_scl_processed.json', '.scl') # Nombre de salida + + xml_file = "BlenderCtrl__Main.xml" # CAMBIAR AL NUEVO ARCHIVO XML + input_json_file = xml_file.replace( + ".xml", "_simplified_processed.json" + ) # Nombre de salida dinámico + output_scl_file = input_json_file.replace( + ".json", ".scl" + ) # Nombre de salida dinámico generate_scl(input_json_file, output_scl_file) \ No newline at end of file