diff --git a/BlenderCtrl__Main_simplified.json b/BlenderCtrl__Main_simplified.json
index eaa9973..b261235 100644
--- a/BlenderCtrl__Main_simplified.json
+++ b/BlenderCtrl__Main_simplified.json
@@ -60,7 +60,8 @@
},
"outputs": {}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "1A",
@@ -80,7 +81,8 @@
},
"outputs": {}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "2B",
@@ -147,7 +149,8 @@
]
}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "3C",
@@ -217,7 +220,8 @@
},
"outputs": {}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "4D",
@@ -448,7 +452,8 @@
},
"outputs": {}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "5E",
@@ -464,15 +469,15 @@
},
"negated_pins": {},
"inputs": {
- "en": {
- "type": "powerrail"
- },
"in": {
"uid": "21",
"scope": "LiteralConstant",
"type": "constant",
"datatype": "Int",
"value": 0
+ },
+ "en": {
+ "type": "powerrail"
}
},
"outputs": {
@@ -486,7 +491,8 @@
]
}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "6F",
@@ -519,6 +525,12 @@
"template_values": {},
"negated_pins": {},
"inputs": {
+ "s": {
+ "type": "connection",
+ "source_instruction_type": "Contact",
+ "source_instruction_uid": "24",
+ "source_pin": "out"
+ },
"tv": {
"uid": "23",
"scope": "TypedConstant",
@@ -526,12 +538,6 @@
"datatype": "TypedConstant",
"value": "S5T#2S"
},
- "s": {
- "type": "connection",
- "source_instruction_type": "Contact",
- "source_instruction_uid": "24",
- "source_pin": "out"
- },
"en": {
"type": "connection",
"source_instruction_uid": "24",
@@ -541,7 +547,8 @@
},
"outputs": {}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "80",
@@ -589,7 +596,8 @@
},
"outputs": {}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "91",
@@ -648,18 +656,18 @@
},
"negated_pins": {},
"inputs": {
- "en": {
- "type": "connection",
- "source_instruction_type": "Contact",
- "source_instruction_uid": "25",
- "source_pin": "out"
- },
"in": {
"uid": "23",
"scope": "LiteralConstant",
"type": "constant",
"datatype": "Int",
"value": 19
+ },
+ "en": {
+ "type": "connection",
+ "source_instruction_type": "Contact",
+ "source_instruction_uid": "25",
+ "source_pin": "out"
}
},
"outputs": {
@@ -673,7 +681,8 @@
]
}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "A2",
@@ -789,7 +798,8 @@
},
"outputs": {}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "B3",
@@ -839,7 +849,8 @@
},
"outputs": {}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "C4",
@@ -1000,7 +1011,8 @@
},
"outputs": {}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "D5",
@@ -1116,7 +1128,8 @@
},
"outputs": {}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "E6",
@@ -1348,7 +1361,8 @@
},
"outputs": {}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "F7",
@@ -1381,6 +1395,12 @@
"template_values": {},
"negated_pins": {},
"inputs": {
+ "s": {
+ "type": "connection",
+ "source_instruction_type": "Contact",
+ "source_instruction_uid": "25",
+ "source_pin": "out"
+ },
"tv": {
"uid": "22",
"scope": "TypedConstant",
@@ -1388,12 +1408,6 @@
"datatype": "TypedConstant",
"value": "S5T#1S"
},
- "s": {
- "type": "connection",
- "source_instruction_type": "Contact",
- "source_instruction_uid": "25",
- "source_pin": "out"
- },
"en": {
"type": "connection",
"source_instruction_uid": "25",
@@ -1425,7 +1439,8 @@
},
"outputs": {}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "108",
@@ -1498,7 +1513,8 @@
},
"outputs": {}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "119",
@@ -1571,7 +1587,8 @@
},
"outputs": {}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "12A",
@@ -1613,7 +1630,8 @@
},
"outputs": {}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "13B",
@@ -1686,7 +1704,8 @@
},
"outputs": {}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "14C",
@@ -1706,7 +1725,8 @@
},
"outputs": {}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "15D",
@@ -1728,7 +1748,8 @@
},
"outputs": {}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "16E",
@@ -1748,7 +1769,8 @@
},
"outputs": {}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "17F",
@@ -1790,7 +1812,8 @@
},
"outputs": {}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "190",
@@ -1810,7 +1833,8 @@
},
"outputs": {}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "1A1",
@@ -1904,7 +1928,8 @@
},
"outputs": {}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "1B2",
@@ -2013,7 +2038,8 @@
},
"outputs": {}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "1C3",
@@ -2107,7 +2133,8 @@
},
"outputs": {}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "1D4",
@@ -2201,7 +2228,8 @@
},
"outputs": {}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "1E5",
@@ -2243,7 +2271,8 @@
},
"outputs": {}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "1F6",
@@ -2263,7 +2292,8 @@
},
"outputs": {}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "207",
@@ -2283,7 +2313,8 @@
},
"outputs": {}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "218",
@@ -2303,7 +2334,8 @@
},
"outputs": {}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "229",
@@ -2323,7 +2355,8 @@
},
"outputs": {}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "23A",
@@ -2345,7 +2378,8 @@
},
"outputs": {}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "24B",
@@ -2365,7 +2399,8 @@
},
"outputs": {}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "25C",
@@ -2385,7 +2420,8 @@
},
"outputs": {}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "26D",
@@ -2405,7 +2441,8 @@
},
"outputs": {}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "27E",
@@ -2425,7 +2462,8 @@
},
"outputs": {}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "28F",
@@ -2445,7 +2483,8 @@
},
"outputs": {}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "2A0",
@@ -2465,7 +2504,8 @@
},
"outputs": {}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "2B1",
@@ -2511,7 +2551,8 @@
},
"outputs": {}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "2C2",
@@ -2531,7 +2572,8 @@
},
"outputs": {}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "2D3",
@@ -2551,7 +2593,8 @@
},
"outputs": {}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "2E4",
@@ -2593,7 +2636,8 @@
},
"outputs": {}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "2F5",
@@ -2613,7 +2657,8 @@
},
"outputs": {}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "306",
@@ -2633,7 +2678,8 @@
},
"outputs": {}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "317",
@@ -2653,7 +2699,8 @@
},
"outputs": {}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "328",
@@ -2673,7 +2720,8 @@
},
"outputs": {}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "339",
@@ -2693,7 +2741,8 @@
},
"outputs": {}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "34A",
@@ -2726,6 +2775,12 @@
"template_values": {},
"negated_pins": {},
"inputs": {
+ "s": {
+ "type": "connection",
+ "source_instruction_type": "Contact",
+ "source_instruction_uid": "24",
+ "source_pin": "out"
+ },
"tv": {
"uid": "22",
"scope": "TypedConstant",
@@ -2733,12 +2788,6 @@
"datatype": "TypedConstant",
"value": "S5T#2S"
},
- "s": {
- "type": "connection",
- "source_instruction_type": "Contact",
- "source_instruction_uid": "24",
- "source_pin": "out"
- },
"en": {
"type": "connection",
"source_instruction_uid": "24",
@@ -2748,7 +2797,8 @@
},
"outputs": {}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "35B",
@@ -2824,6 +2874,12 @@
"template_values": {},
"negated_pins": {},
"inputs": {
+ "s": {
+ "type": "connection",
+ "source_instruction_type": "O",
+ "source_instruction_uid": "28",
+ "source_pin": "out"
+ },
"tv": {
"uid": "24",
"scope": "TypedConstant",
@@ -2831,12 +2887,6 @@
"datatype": "TypedConstant",
"value": "S5T#2S"
},
- "s": {
- "type": "connection",
- "source_instruction_type": "O",
- "source_instruction_uid": "28",
- "source_pin": "out"
- },
"en": {
"type": "connection",
"source_instruction_uid": "28",
@@ -2868,7 +2918,8 @@
},
"outputs": {}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "36C",
@@ -2916,7 +2967,8 @@
},
"outputs": {}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "37D",
@@ -2992,6 +3044,12 @@
"template_values": {},
"negated_pins": {},
"inputs": {
+ "s": {
+ "type": "connection",
+ "source_instruction_type": "O",
+ "source_instruction_uid": "29",
+ "source_pin": "out"
+ },
"tv": {
"uid": "24",
"scope": "TypedConstant",
@@ -2999,12 +3057,6 @@
"datatype": "TypedConstant",
"value": "S5T#2S"
},
- "s": {
- "type": "connection",
- "source_instruction_type": "O",
- "source_instruction_uid": "29",
- "source_pin": "out"
- },
"en": {
"type": "connection",
"source_instruction_uid": "29",
@@ -3058,7 +3110,8 @@
},
"outputs": {}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "38E",
@@ -3106,7 +3159,8 @@
},
"outputs": {}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "39F",
@@ -3182,6 +3236,12 @@
"template_values": {},
"negated_pins": {},
"inputs": {
+ "s": {
+ "type": "connection",
+ "source_instruction_type": "O",
+ "source_instruction_uid": "28",
+ "source_pin": "out"
+ },
"tv": {
"uid": "24",
"scope": "TypedConstant",
@@ -3189,12 +3249,6 @@
"datatype": "TypedConstant",
"value": "S5T#2S"
},
- "s": {
- "type": "connection",
- "source_instruction_type": "O",
- "source_instruction_uid": "28",
- "source_pin": "out"
- },
"en": {
"type": "connection",
"source_instruction_uid": "28",
@@ -3226,7 +3280,8 @@
},
"outputs": {}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "3B0",
@@ -3274,7 +3329,8 @@
},
"outputs": {}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "3C1",
@@ -3350,6 +3406,12 @@
"template_values": {},
"negated_pins": {},
"inputs": {
+ "s": {
+ "type": "connection",
+ "source_instruction_type": "O",
+ "source_instruction_uid": "28",
+ "source_pin": "out"
+ },
"tv": {
"uid": "24",
"scope": "TypedConstant",
@@ -3357,12 +3419,6 @@
"datatype": "TypedConstant",
"value": "S5T#2S"
},
- "s": {
- "type": "connection",
- "source_instruction_type": "O",
- "source_instruction_uid": "28",
- "source_pin": "out"
- },
"en": {
"type": "connection",
"source_instruction_uid": "28",
@@ -3394,7 +3450,8 @@
},
"outputs": {}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "3D2",
@@ -3442,7 +3499,8 @@
},
"outputs": {}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "3E3",
@@ -3490,7 +3548,8 @@
},
"outputs": {}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "3F4",
@@ -3534,7 +3593,8 @@
},
"outputs": {}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "405",
@@ -3554,7 +3614,8 @@
},
"outputs": {}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "416",
@@ -3574,7 +3635,8 @@
},
"outputs": {}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "427",
@@ -3594,7 +3656,8 @@
},
"outputs": {}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "438",
@@ -3702,7 +3765,8 @@
},
"outputs": {}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "449",
@@ -3722,7 +3786,8 @@
},
"outputs": {}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "45A",
@@ -3964,7 +4029,8 @@
},
"outputs": {}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "46B",
@@ -4008,7 +4074,8 @@
},
"outputs": {}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "47C",
@@ -4028,7 +4095,8 @@
},
"outputs": {}
}
- ]
+ ],
+ "language": "LAD"
}
]
}
\ No newline at end of file
diff --git a/BlenderCtrl__Main_simplified_processed.json b/BlenderCtrl__Main_simplified_processed.json
index eb63373..247fb6d 100644
--- a/BlenderCtrl__Main_simplified_processed.json
+++ b/BlenderCtrl__Main_simplified_processed.json
@@ -61,7 +61,8 @@
"outputs": {},
"scl": "Clock_Signal();"
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "1A",
@@ -82,7 +83,8 @@
"outputs": {},
"scl": "BlenderCtrl_MachineInit();"
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "2B",
@@ -151,7 +153,8 @@
},
"scl": "IF \"AUX FALSE\" THEN\n \"Block_Move_Err\" := BLKMOV(SRCBLK := \"HMI_PID\".\"PPM303\", DSTBLK => \"Filler_Head_Variables\".\"FillerHead\"); // ADVERTENCIA: BLKMOV usado directamente, probablemente no compile!\nEND_IF;"
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "3C",
@@ -225,7 +228,8 @@
"outputs": {},
"scl": "\"gEmergencyPressed\" := NOT \"gIN_VoltageOk\" AND \"M19000\";\n\"M19000\" := \"gIN_VoltageOk\"; // N_TRIG(\"gIN_VoltageOk\")"
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "4D",
@@ -466,7 +470,8 @@
"outputs": {},
"scl": "\"gBlenderSuppliesOk\" := ((\"gIN_LinePressCO2Ok\" OR (\"gWorkshopTest\" AND (NOT \"gWorkshop_Co2_Presence\")) AND (NOT \"gWorkshop_CIP_Signals\")) AND \"HMI_Digital\".\"_PAL_S11\".\"Filtered\") OR (\"gIN_LinePressCO2Ok\" OR (\"gWorkshopTest\" AND (NOT \"gWorkshop_Co2_Presence\")) AND (NOT \"gWorkshop_CIP_Signals\")) AND (NOT \"Disable_Bit\") AND \"gIN_VoltageOk\";"
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "5E",
@@ -482,15 +487,15 @@
},
"negated_pins": {},
"inputs": {
- "en": {
- "type": "powerrail"
- },
"in": {
"uid": "21",
"scope": "LiteralConstant",
"type": "constant",
"datatype": "Int",
"value": 0
+ },
+ "en": {
+ "type": "powerrail"
}
},
"outputs": {
@@ -505,7 +510,8 @@
},
"scl": "\"HMI_Variables_Status\".\"Procedures\".\"BlenderStateNum\" := 0;"
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "6F",
@@ -539,6 +545,12 @@
"template_values": {},
"negated_pins": {},
"inputs": {
+ "s": {
+ "type": "connection",
+ "source_instruction_type": "Contact",
+ "source_instruction_uid": "24",
+ "source_pin": "out"
+ },
"tv": {
"uid": "23",
"scope": "TypedConstant",
@@ -546,12 +558,6 @@
"datatype": "TypedConstant",
"value": "S5T#2S"
},
- "s": {
- "type": "connection",
- "source_instruction_type": "Contact",
- "source_instruction_uid": "24",
- "source_pin": "out"
- },
"en": {
"type": "connection",
"source_instruction_uid": "24",
@@ -561,7 +567,8 @@
},
"outputs": {}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "80",
@@ -611,7 +618,8 @@
"outputs": {},
"scl": "\"gBlenderProdMode\" := \"HMI_Variables_Status\".\"System\".\"Blender_Prod_CIP\";"
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "91",
@@ -672,18 +680,18 @@
},
"negated_pins": {},
"inputs": {
- "en": {
- "type": "connection",
- "source_instruction_type": "Contact",
- "source_instruction_uid": "25",
- "source_pin": "out"
- },
"in": {
"uid": "23",
"scope": "LiteralConstant",
"type": "constant",
"datatype": "Int",
"value": 19
+ },
+ "en": {
+ "type": "connection",
+ "source_instruction_type": "Contact",
+ "source_instruction_uid": "25",
+ "source_pin": "out"
}
},
"outputs": {
@@ -698,7 +706,8 @@
},
"scl": "IF (NOT \"HMI_Variables_Status\".\"System\".\"Blender_Prod_CIP\") THEN\n \"HMI_Variables_Status\".\"Procedures\".\"BlenderStateNum\" := 19;\nEND_IF;"
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "A2",
@@ -730,7 +739,7 @@
{
"instruction_uid": "27",
"uid": "27",
- "type": "RCoil",
+ "type": "RCoil_scl",
"template_values": {},
"negated_pins": {},
"inputs": {
@@ -747,12 +756,13 @@
"name": "\"HMI_Variables_Status\".\"Meters\".\"QTM3012_PRD_Fault\""
}
},
- "outputs": {}
+ "outputs": {},
+ "scl": "IF (NOT \"AUX FALSE\") THEN\n \"HMI_Variables_Status\".\"Meters\".\"QTM3012_PRD_Fault\" := FALSE;\nEND_IF;"
},
{
"instruction_uid": "28",
"uid": "28",
- "type": "RCoil",
+ "type": "RCoil_scl",
"template_values": {},
"negated_pins": {},
"inputs": {
@@ -769,12 +779,13 @@
"name": "\"gmPDS2000_Error_Fault\""
}
},
- "outputs": {}
+ "outputs": {},
+ "scl": "IF (NOT \"AUX FALSE\") THEN\n \"gmPDS2000_Error_Fault\" := FALSE;\nEND_IF;"
},
{
"instruction_uid": "29",
"uid": "29",
- "type": "RCoil",
+ "type": "RCoil_scl",
"template_values": {},
"negated_pins": {},
"inputs": {
@@ -791,12 +802,13 @@
"name": "\"HMI_Variables_Status\".\"Meters\".\"QTM3012_PRD_Run\""
}
},
- "outputs": {}
+ "outputs": {},
+ "scl": "IF (NOT \"AUX FALSE\") THEN\n \"HMI_Variables_Status\".\"Meters\".\"QTM3012_PRD_Run\" := FALSE;\nEND_IF;"
},
{
"instruction_uid": "30",
"uid": "30",
- "type": "RCoil",
+ "type": "RCoil_scl",
"template_values": {},
"negated_pins": {},
"inputs": {
@@ -813,9 +825,11 @@
"name": "\"gNoFreezeProductMeter\""
}
},
- "outputs": {}
+ "outputs": {},
+ "scl": "IF (NOT \"AUX FALSE\") THEN\n \"gNoFreezeProductMeter\" := FALSE;\nEND_IF;"
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "B3",
@@ -867,7 +881,8 @@
"outputs": {},
"scl": "\"System_RunOut_Variables\".\"ProdPipeRunOutFillerBott\" := (NOT \"System_RunOut_Variables\".\"ProdPipeRunOutWaterCount\");"
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "C4",
@@ -1035,7 +1050,8 @@
"outputs": {},
"scl": "\"gStillWaterByPassEn\" := ((\"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_StillWaterByPass\" OR (\"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_ByPassDeair\" AND (NOT \"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_Deaireation\"))) AND \"Blender_Variables_Pers\".\"gWaterRecipe\") AND (NOT \"Blender_Variables_Pers\".\"gCarboStillRecipe\");"
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "D5",
@@ -1156,7 +1172,8 @@
"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 (NOT \"Blender_Variables_Pers\".\"gCarboStillRecipe\");"
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "E6",
@@ -1398,7 +1415,8 @@
"outputs": {},
"scl": "\"gHVP301_Open\" := ((\"gSyrupRoomEn\" AND (NOT \"gIN_HVP301_Aux\")) AND (NOT \"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_FastChangeOverEnabled\") AND \"Procedure_Variables\".\"FTP302Line_Preparation\".\"Done\") AND (NOT \"Procedure_Variables\".\"Syr_RunOut\".\"Done\") OR ((((\"gSyrupRoomEn\" AND (NOT \"gIN_HVP301_Aux\")) AND \"gBlenderCIPMode\") AND \"gIN_CIP_CIPRunning\") AND \"Procedure_Variables\".\"Blender_Run\".\"Running\");"
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "F7",
@@ -1432,6 +1450,12 @@
"template_values": {},
"negated_pins": {},
"inputs": {
+ "s": {
+ "type": "connection",
+ "source_instruction_type": "Contact",
+ "source_instruction_uid": "25",
+ "source_pin": "out"
+ },
"tv": {
"uid": "22",
"scope": "TypedConstant",
@@ -1439,12 +1463,6 @@
"datatype": "TypedConstant",
"value": "S5T#1S"
},
- "s": {
- "type": "connection",
- "source_instruction_type": "Contact",
- "source_instruction_uid": "25",
- "source_pin": "out"
- },
"en": {
"type": "connection",
"source_instruction_uid": "25",
@@ -1476,7 +1494,8 @@
},
"outputs": {}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "108",
@@ -1552,7 +1571,8 @@
"outputs": {},
"scl": "IF \"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_MeterType\" = 6 THEN\n Maselli_PA_Control();\nEND_IF;"
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "119",
@@ -1628,7 +1648,8 @@
"outputs": {},
"scl": "IF \"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_MeterType\" = 5 THEN\n mPDS_PA_Control();\nEND_IF;"
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "12A",
@@ -1672,7 +1693,8 @@
"outputs": {},
"scl": "IF \"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_SyrBrixMeter\" THEN\n mPDS_SYR_PA_Control();\nEND_IF;"
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "13B",
@@ -1748,7 +1770,8 @@
"outputs": {},
"scl": "IF \"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_MeterType\" = 3 THEN\n GetProdBrixCO2_Anal_Inpt();\nEND_IF;"
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "14C",
@@ -1769,7 +1792,8 @@
"outputs": {},
"scl": "ProductQuality();"
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "15D",
@@ -1792,7 +1816,8 @@
"outputs": {},
"scl": "\"Input_Data\"();"
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "16E",
@@ -1813,7 +1838,8 @@
"outputs": {},
"scl": "SelCheckBrixSource();"
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "17F",
@@ -1857,7 +1883,8 @@
"outputs": {},
"scl": "IF \"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_InverterRecirPumpPPM306\" THEN\n CTRLCoolingSystem();\nEND_IF;"
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "190",
@@ -1878,7 +1905,8 @@
"outputs": {},
"scl": "TankLevel();"
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "1A1",
@@ -1977,7 +2005,8 @@
"outputs": {},
"scl": "\"gProductionONS\" := (\"gBlenderProdMode\" AND NOT \"M19001\") AND (NOT \"mDelayPowerOnTmr\");"
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "1B2",
@@ -2091,7 +2120,8 @@
"outputs": {},
"scl": "IF (\"gProductionONS\" OR \"Procedure_Variables\".\"Blender_Rinse\".\"ONS_Done\") AND (NOT \"Blender_Variables_Pers\".\"gBlenderStarted\") THEN\n BlenderCtrl_ProdModeInit();\nEND_IF;"
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "1C3",
@@ -2190,7 +2220,8 @@
"outputs": {},
"scl": "\"gRinseONS\" := (\"HMI_Variables_Status\".\"System\".\"Blender_Prod_CIP\" AND NOT \"M19002\") AND (NOT \"mDelayPowerOnTmr\");"
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "1D4",
@@ -2289,7 +2320,8 @@
"outputs": {},
"scl": "\"gCIPONS\" := (\"gBlenderCIPMode\" AND NOT \"M19003\") AND (NOT \"mDelayPowerOnTmr\");"
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "1E5",
@@ -2333,7 +2365,8 @@
"outputs": {},
"scl": "IF \"gCIPONS\" THEN\n BlenderCtrl_CIPModeInit();\nEND_IF;"
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "1F6",
@@ -2354,7 +2387,8 @@
"outputs": {},
"scl": "BlenderCtrl_ResetSPWord();"
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "207",
@@ -2375,7 +2409,8 @@
"outputs": {},
"scl": "BlenderRun__Control();"
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "218",
@@ -2396,7 +2431,8 @@
"outputs": {},
"scl": "Prod_Tank_PressCtrl();"
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "229",
@@ -2417,7 +2453,8 @@
"outputs": {},
"scl": "Baialage();"
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "23A",
@@ -2440,7 +2477,8 @@
"outputs": {},
"scl": "\"FirstProduction_Data\"();"
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "24B",
@@ -2461,7 +2499,8 @@
"outputs": {},
"scl": "CIPMain();"
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "25C",
@@ -2482,7 +2521,8 @@
"outputs": {},
"scl": "BlenderRinse();"
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "26D",
@@ -2503,7 +2543,8 @@
"outputs": {},
"scl": "Safeties();"
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "27E",
@@ -2524,7 +2565,8 @@
"outputs": {},
"scl": "Instrument_Scanner();"
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "28F",
@@ -2545,7 +2587,8 @@
"outputs": {},
"scl": "VacuumCtrl();"
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "2A0",
@@ -2566,7 +2609,8 @@
"outputs": {},
"scl": "SyrupRoomCtrl();"
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "2B1",
@@ -2614,7 +2658,8 @@
"outputs": {},
"scl": "IF (NOT \"mDelayPowerOnTmr\") THEN\n \"Blender_Procedure Data\"();\nEND_IF;"
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "2C2",
@@ -2635,7 +2680,8 @@
"outputs": {},
"scl": "Pneumatic_Valve_Ctrl();"
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "2D3",
@@ -2656,7 +2702,8 @@
"outputs": {},
"scl": "PumpsControl();"
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "2E4",
@@ -2700,7 +2747,8 @@
"outputs": {},
"scl": "IF \"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_Report\" THEN\n ProdReportManager();\nEND_IF;"
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "2F5",
@@ -2721,7 +2769,8 @@
"outputs": {},
"scl": "Output();"
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "306",
@@ -2742,7 +2791,8 @@
"outputs": {},
"scl": "SLIM_Block();"
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "317",
@@ -2763,7 +2813,8 @@
"outputs": {},
"scl": "Interlocking_Panel_1();"
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "328",
@@ -2784,7 +2835,8 @@
"outputs": {},
"scl": "FillerControl();"
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "339",
@@ -2805,7 +2857,8 @@
"outputs": {},
"scl": "BlenderCtrl_UpdatePWord();"
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "34A",
@@ -2839,6 +2892,12 @@
"template_values": {},
"negated_pins": {},
"inputs": {
+ "s": {
+ "type": "connection",
+ "source_instruction_type": "Contact",
+ "source_instruction_uid": "24",
+ "source_pin": "out"
+ },
"tv": {
"uid": "22",
"scope": "TypedConstant",
@@ -2846,12 +2905,6 @@
"datatype": "TypedConstant",
"value": "S5T#2S"
},
- "s": {
- "type": "connection",
- "source_instruction_type": "Contact",
- "source_instruction_uid": "24",
- "source_pin": "out"
- },
"en": {
"type": "connection",
"source_instruction_uid": "24",
@@ -2861,7 +2914,8 @@
},
"outputs": {}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "35B",
@@ -2940,6 +2994,12 @@
"template_values": {},
"negated_pins": {},
"inputs": {
+ "s": {
+ "type": "connection",
+ "source_instruction_type": "O",
+ "source_instruction_uid": "28",
+ "source_pin": "out"
+ },
"tv": {
"uid": "24",
"scope": "TypedConstant",
@@ -2947,12 +3007,6 @@
"datatype": "TypedConstant",
"value": "S5T#2S"
},
- "s": {
- "type": "connection",
- "source_instruction_type": "O",
- "source_instruction_uid": "28",
- "source_pin": "out"
- },
"en": {
"type": "connection",
"source_instruction_uid": "28",
@@ -2984,7 +3038,8 @@
},
"outputs": {}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "36C",
@@ -3014,7 +3069,7 @@
{
"instruction_uid": "24",
"uid": "24",
- "type": "RCoil",
+ "type": "RCoil_scl",
"template_values": {},
"negated_pins": {},
"inputs": {
@@ -3031,9 +3086,11 @@
"name": "\"gFTN301_ResetTot\""
}
},
- "outputs": {}
+ "outputs": {},
+ "scl": "IF \"gFTN301_ResetTot\" THEN\n \"gFTN301_ResetTot\" := FALSE;\nEND_IF;"
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "37D",
@@ -3112,6 +3169,12 @@
"template_values": {},
"negated_pins": {},
"inputs": {
+ "s": {
+ "type": "connection",
+ "source_instruction_type": "O",
+ "source_instruction_uid": "29",
+ "source_pin": "out"
+ },
"tv": {
"uid": "24",
"scope": "TypedConstant",
@@ -3119,12 +3182,6 @@
"datatype": "TypedConstant",
"value": "S5T#2S"
},
- "s": {
- "type": "connection",
- "source_instruction_type": "O",
- "source_instruction_uid": "29",
- "source_pin": "out"
- },
"en": {
"type": "connection",
"source_instruction_uid": "29",
@@ -3178,7 +3235,8 @@
},
"outputs": {}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "38E",
@@ -3208,7 +3266,7 @@
{
"instruction_uid": "24",
"uid": "24",
- "type": "RCoil",
+ "type": "RCoil_scl",
"template_values": {},
"negated_pins": {},
"inputs": {
@@ -3225,9 +3283,11 @@
"name": "\"gFTP302_ResetTot\""
}
},
- "outputs": {}
+ "outputs": {},
+ "scl": "IF \"gFTP302_ResetTot\" THEN\n \"gFTP302_ResetTot\" := FALSE;\nEND_IF;"
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "39F",
@@ -3306,6 +3366,12 @@
"template_values": {},
"negated_pins": {},
"inputs": {
+ "s": {
+ "type": "connection",
+ "source_instruction_type": "O",
+ "source_instruction_uid": "28",
+ "source_pin": "out"
+ },
"tv": {
"uid": "24",
"scope": "TypedConstant",
@@ -3313,12 +3379,6 @@
"datatype": "TypedConstant",
"value": "S5T#2S"
},
- "s": {
- "type": "connection",
- "source_instruction_type": "O",
- "source_instruction_uid": "28",
- "source_pin": "out"
- },
"en": {
"type": "connection",
"source_instruction_uid": "28",
@@ -3350,7 +3410,8 @@
},
"outputs": {}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "3B0",
@@ -3380,7 +3441,7 @@
{
"instruction_uid": "24",
"uid": "24",
- "type": "RCoil",
+ "type": "RCoil_scl",
"template_values": {},
"negated_pins": {},
"inputs": {
@@ -3397,9 +3458,11 @@
"name": "\"gFTM303_ResetTot\""
}
},
- "outputs": {}
+ "outputs": {},
+ "scl": "IF \"gFTM303_ResetTot\" THEN\n \"gFTM303_ResetTot\" := FALSE;\nEND_IF;"
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "3C1",
@@ -3478,6 +3541,12 @@
"template_values": {},
"negated_pins": {},
"inputs": {
+ "s": {
+ "type": "connection",
+ "source_instruction_type": "O",
+ "source_instruction_uid": "28",
+ "source_pin": "out"
+ },
"tv": {
"uid": "24",
"scope": "TypedConstant",
@@ -3485,12 +3554,6 @@
"datatype": "TypedConstant",
"value": "S5T#2S"
},
- "s": {
- "type": "connection",
- "source_instruction_type": "O",
- "source_instruction_uid": "28",
- "source_pin": "out"
- },
"en": {
"type": "connection",
"source_instruction_uid": "28",
@@ -3522,7 +3585,8 @@
},
"outputs": {}
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "3D2",
@@ -3552,7 +3616,7 @@
{
"instruction_uid": "24",
"uid": "24",
- "type": "RCoil",
+ "type": "RCoil_scl",
"template_values": {},
"negated_pins": {},
"inputs": {
@@ -3569,9 +3633,11 @@
"name": "\"gProductMFMResetTot\""
}
},
- "outputs": {}
+ "outputs": {},
+ "scl": "IF \"gProductMFMResetTot\" THEN\n \"gProductMFMResetTot\" := FALSE;\nEND_IF;"
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "3E3",
@@ -3601,7 +3667,7 @@
{
"instruction_uid": "24",
"uid": "24",
- "type": "RCoil",
+ "type": "RCoil_scl",
"template_values": {},
"negated_pins": {},
"inputs": {
@@ -3618,9 +3684,11 @@
"name": "\"gBlendResetTotalizer\""
}
},
- "outputs": {}
+ "outputs": {},
+ "scl": "IF \"gBlendResetTotalizer\" THEN\n \"gBlendResetTotalizer\" := FALSE;\nEND_IF;"
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "3F4",
@@ -3666,7 +3734,8 @@
"outputs": {},
"scl": "IF (NOT \"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_Simulation\") THEN\n BlenderCtrl_MFM_Command();\nEND_IF;"
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "405",
@@ -3687,7 +3756,8 @@
"outputs": {},
"scl": "CPU_DP_Global_Diag();"
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "416",
@@ -3708,7 +3778,8 @@
"outputs": {},
"scl": "Profibus_Network();"
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "427",
@@ -3729,7 +3800,8 @@
"outputs": {},
"scl": "ModValveFault();"
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "438",
@@ -3843,7 +3915,8 @@
"outputs": {},
"scl": "\"HMI_Variables_Cmd\".\"Commands_From_HMI\".\"F7_DeviceControl\".\"Light\" := \"HMI_Variables_Cmd\".\"Commands_From_HMI\".\"F7_DeviceControl\".\"Command\" AND \"HMI_Variables_Cmd\".\"Commands_From_HMI\".\"F7_DeviceControl\".\"Enable\";"
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "449",
@@ -3864,7 +3937,8 @@
"outputs": {},
"scl": "BlenderCtrl_ManualActive();"
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "45A",
@@ -4094,7 +4168,7 @@
{
"instruction_uid": "43",
"uid": "43",
- "type": "SCoil",
+ "type": "SCoil_scl",
"template_values": {},
"negated_pins": {},
"inputs": {
@@ -4111,9 +4185,11 @@
"name": "\"HMI_Variables_Cmd\".\"Recipe\".\"Edit\""
}
},
- "outputs": {}
+ "outputs": {},
+ "scl": "IF \"mAux_FP_M700_1\" THEN\n \"HMI_Variables_Cmd\".\"Recipe\".\"Edit\" := TRUE;\nEND_IF;"
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "46B",
@@ -4159,7 +4235,8 @@
"outputs": {},
"scl": "IF \"AUX TRUE\" THEN\n \"RecipeManagement_Data\"();\nEND_IF;"
}
- ]
+ ],
+ "language": "LAD"
},
{
"id": "47C",
@@ -4180,7 +4257,8 @@
"outputs": {},
"scl": "RecipeCalculation();"
}
- ]
+ ],
+ "language": "LAD"
}
]
}
\ No newline at end of file
diff --git a/BlenderCtrl__Main_simplified_processed.scl b/BlenderCtrl__Main_simplified_processed.scl
index d96e2fe..5276434 100644
--- a/BlenderCtrl__Main_simplified_processed.scl
+++ b/BlenderCtrl__Main_simplified_processed.scl
@@ -27,374 +27,339 @@ END_VAR
BEGIN
- // Network 1: Clock Generation
+ // Network 1: Clock Generation (Original Language: LAD)
Clock_Signal();
- // Network 2: Machine Init
+ // Network 2: Machine Init (Original Language: LAD)
BlenderCtrl_MachineInit();
- // Network 3: Filler Head
+ // Network 3: Filler Head (Original Language: LAD)
- // RLO: "AUX FALSE"
IF "AUX FALSE" THEN
"Block_Move_Err" := BLKMOV(SRCBLK := "HMI_PID"."PPM303", DSTBLK => "Filler_Head_Variables"."FillerHead"); // ADVERTENCIA: BLKMOV usado directamente, probablemente no compile!
END_IF;
- // Network 4: Emergency Pressed
+ // Network 4: Emergency Pressed (Original Language: LAD)
- // RLO: "gIN_VoltageOk"
// Logic moved to Coil 26
"gEmergencyPressed" := NOT "gIN_VoltageOk" AND "M19000";
"M19000" := "gIN_VoltageOk"; // N_TRIG("gIN_VoltageOk")
- // Network 5: Air and CO2 pressure ok and auxiliary ok
+ // Network 5: Air and CO2 pressure ok and auxiliary ok (Original Language: LAD)
- // RLO: "gIN_LinePressCO2Ok"
- // RLO: "gWorkshopTest"
- // RLO: "gWorkshopTest" AND (NOT "gWorkshop_Co2_Presence")
- // RLO: ("gWorkshopTest" AND (NOT "gWorkshop_Co2_Presence")) AND (NOT "gWorkshop_CIP_Signals")
- // RLO: ("gIN_LinePressCO2Ok" OR ("gWorkshopTest" AND (NOT "gWorkshop_Co2_Presence")) AND (NOT "gWorkshop_CIP_Signals")) AND "HMI_Digital"."_PAL_S11"."Filtered"
- // RLO: ("gIN_LinePressCO2Ok" OR ("gWorkshopTest" AND (NOT "gWorkshop_Co2_Presence")) AND (NOT "gWorkshop_CIP_Signals")) AND (NOT "Disable_Bit")
- // RLO: (("gIN_LinePressCO2Ok" OR ("gWorkshopTest" AND (NOT "gWorkshop_Co2_Presence")) AND (NOT "gWorkshop_CIP_Signals")) AND "HMI_Digital"."_PAL_S11"."Filtered") OR ("gIN_LinePressCO2Ok" OR ("gWorkshopTest" AND (NOT "gWorkshop_Co2_Presence")) AND (NOT "gWorkshop_CIP_Signals")) AND (NOT "Disable_Bit") AND "gIN_VoltageOk"
"gBlenderSuppliesOk" := (("gIN_LinePressCO2Ok" OR ("gWorkshopTest" AND (NOT "gWorkshop_Co2_Presence")) AND (NOT "gWorkshop_CIP_Signals")) AND "HMI_Digital"."_PAL_S11"."Filtered") OR ("gIN_LinePressCO2Ok" OR ("gWorkshopTest" AND (NOT "gWorkshop_Co2_Presence")) AND (NOT "gWorkshop_CIP_Signals")) AND (NOT "Disable_Bit") AND "gIN_VoltageOk";
- // Network 6: Blender State Num
+ // Network 6: Blender State Num (Original Language: LAD)
"HMI_Variables_Status"."Procedures"."BlenderStateNum" := 0;
- // Network 7: Delay Power On
+ // Network 7: Delay Power On (Original Language: LAD)
- // RLO: "FirstScan"
+ // Network did not produce printable SCL code.
- // Network 8: Production Mode
+ // Network 8: Production Mode (Original Language: LAD)
- // RLO: "HMI_Variables_Status"."System"."Blender_Prod_CIP"
"gBlenderProdMode" := "HMI_Variables_Status"."System"."Blender_Prod_CIP";
- // Network 9: CIp Mode
+ // Network 9: CIp Mode (Original Language: LAD)
- // RLO: (NOT "HMI_Variables_Status"."System"."Blender_Prod_CIP")
"gBlenderCIPMode" := (NOT "HMI_Variables_Status"."System"."Blender_Prod_CIP");
IF (NOT "HMI_Variables_Status"."System"."Blender_Prod_CIP") THEN
"HMI_Variables_Status"."Procedures"."BlenderStateNum" := 19;
END_IF;
- // Network 10: Error Faults
+ // Network 10: Error Faults (Original Language: LAD)
- // RLO: (NOT "AUX FALSE")
+ IF (NOT "AUX FALSE") THEN
+ "HMI_Variables_Status"."Meters"."QTM3012_PRD_Fault" := FALSE;
+ END_IF;
+ IF (NOT "AUX FALSE") THEN
+ "gmPDS2000_Error_Fault" := FALSE;
+ END_IF;
+ IF (NOT "AUX FALSE") THEN
+ "HMI_Variables_Status"."Meters"."QTM3012_PRD_Run" := FALSE;
+ END_IF;
+ IF (NOT "AUX FALSE") THEN
+ "gNoFreezeProductMeter" := FALSE;
+ END_IF;
- // Network 11: Filler Bottle Count Used to push Product
+ // Network 11: Filler Bottle Count Used to push Product (Original Language: LAD)
- // RLO: (NOT "System_RunOut_Variables"."ProdPipeRunOutWaterCount")
"System_RunOut_Variables"."ProdPipeRunOutFillerBott" := (NOT "System_RunOut_Variables"."ProdPipeRunOutWaterCount");
- // Network 12: Water Bypass Enable
+ // Network 12: Water Bypass Enable (Original Language: LAD)
- // 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 (NOT "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 (NOT "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 (NOT "HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_Deaireation"))) AND "Blender_Variables_Pers"."gWaterRecipe") AND (NOT "Blender_Variables_Pers"."gCarboStillRecipe")
"gStillWaterByPassEn" := (("HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_StillWaterByPass" OR ("HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_ByPassDeair" AND (NOT "HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_Deaireation"))) AND "Blender_Variables_Pers"."gWaterRecipe") AND (NOT "Blender_Variables_Pers"."gCarboStillRecipe");
- // Network 13: Still Water Bypass
+ // Network 13: Still Water Bypass (Original Language: LAD)
- // 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 (NOT "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 (NOT "Blender_Variables_Pers"."gCarboStillRecipe");
- // Network 14: Manual Syrup Drain Valve Open - Operator Alarm
+ // Network 14: Manual Syrup Drain Valve Open - Operator Alarm (Original Language: LAD)
- // RLO: "gSyrupRoomEn"
- // RLO: "gSyrupRoomEn" AND (NOT "gIN_HVP301_Aux")
- // RLO: ("gSyrupRoomEn" AND (NOT "gIN_HVP301_Aux")) AND (NOT "HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_FastChangeOverEnabled")
- // RLO: ("gSyrupRoomEn" AND (NOT "gIN_HVP301_Aux")) AND (NOT "HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_FastChangeOverEnabled") AND "Procedure_Variables"."FTP302Line_Preparation"."Done"
- // RLO: (("gSyrupRoomEn" AND (NOT "gIN_HVP301_Aux")) AND (NOT "HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_FastChangeOverEnabled") AND "Procedure_Variables"."FTP302Line_Preparation"."Done") AND (NOT "Procedure_Variables"."Syr_RunOut"."Done")
- // RLO: ("gSyrupRoomEn" AND (NOT "gIN_HVP301_Aux")) AND "gBlenderCIPMode"
- // RLO: (("gSyrupRoomEn" AND (NOT "gIN_HVP301_Aux")) AND "gBlenderCIPMode") AND "gIN_CIP_CIPRunning"
- // RLO: ((("gSyrupRoomEn" AND (NOT "gIN_HVP301_Aux")) AND "gBlenderCIPMode") AND "gIN_CIP_CIPRunning") AND "Procedure_Variables"."Blender_Run"."Running"
"gHVP301_Open" := (("gSyrupRoomEn" AND (NOT "gIN_HVP301_Aux")) AND (NOT "HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_FastChangeOverEnabled") AND "Procedure_Variables"."FTP302Line_Preparation"."Done") AND (NOT "Procedure_Variables"."Syr_RunOut"."Done") OR (((("gSyrupRoomEn" AND (NOT "gIN_HVP301_Aux")) AND "gBlenderCIPMode") AND "gIN_CIP_CIPRunning") AND "Procedure_Variables"."Blender_Run"."Running");
- // Network 15: Manual Syrup Drain Valve Open - Operator Alarm
+ // Network 15: Manual Syrup Drain Valve Open - Operator Alarm (Original Language: LAD)
- // RLO: "gIN_HVM302_Aux"
+ // Network did not produce printable SCL code.
- // Network 16: Maselli Control
+ // Network 16: Maselli Control (Original Language: LAD)
- // RLO: "HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_BrixMeter"
IF "HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_MeterType" = 6 THEN
Maselli_PA_Control();
END_IF;
- // Network 17: mPDS Control
+ // Network 17: mPDS Control (Original Language: LAD)
- // RLO: "HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_BrixMeter"
IF "HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_MeterType" = 5 THEN
mPDS_PA_Control();
END_IF;
- // Network 18: mPDS Syrup Control
+ // Network 18: mPDS Syrup Control (Original Language: LAD)
- // 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
+ // Network 19: Co2 Analog Input (Original Language: LAD)
// GetProdBrixCO2_FromAnalogIn
// CALL "GetProdBrixCO2_FromAn"
// NOP 0
- // RLO: "HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_BrixMeter"
IF "HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_MeterType" = 3 THEN
GetProdBrixCO2_Anal_Inpt();
END_IF;
- // Network 20: Quality
+ // Network 20: Quality (Original Language: LAD)
ProductQuality();
- // Network 21: Input Data
+ // Network 21: Input Data (Original Language: LAD)
"Input_Data"();
- // Network 22: Sel Brix Source Check
+ // Network 22: Sel Brix Source Check (Original Language: LAD)
SelCheckBrixSource();
- // Network 23: Check Water Cooling System Temperature
+ // Network 23: Check Water Cooling System Temperature (Original Language: LAD)
- // 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
+ // Network 24: Tank Level (Original Language: LAD)
TankLevel();
- // Network 25: Production ONS
+ // Network 25: Production ONS (Original Language: LAD)
- // RLO: "gBlenderProdMode"
// PBox Logic moved to consumer Coil
- // RLO: ("gBlenderProdMode" AND NOT "M19001") AND (NOT "mDelayPowerOnTmr")
"gProductionONS" := ("gBlenderProdMode" AND NOT "M19001") AND (NOT "mDelayPowerOnTmr");
- // Network 26: Blender Prod Mode Init
+ // Network 26: Blender Prod Mode Init (Original Language: LAD)
- // RLO: "gProductionONS"
- // RLO: "Procedure_Variables"."Blender_Rinse"."ONS_Done"
- // RLO: ("gProductionONS" OR "Procedure_Variables"."Blender_Rinse"."ONS_Done") AND (NOT "Blender_Variables_Pers"."gBlenderStarted")
IF ("gProductionONS" OR "Procedure_Variables"."Blender_Rinse"."ONS_Done") AND (NOT "Blender_Variables_Pers"."gBlenderStarted") THEN
BlenderCtrl_ProdModeInit();
END_IF;
- // Network 27: Rinse ONS
+ // Network 27: Rinse ONS (Original Language: LAD)
- // RLO: "HMI_Variables_Status"."System"."Blender_Prod_CIP"
// PBox Logic moved to consumer Coil
- // RLO: ("HMI_Variables_Status"."System"."Blender_Prod_CIP" AND NOT "M19002") AND (NOT "mDelayPowerOnTmr")
"gRinseONS" := ("HMI_Variables_Status"."System"."Blender_Prod_CIP" AND NOT "M19002") AND (NOT "mDelayPowerOnTmr");
- // Network 28: CIP ONS
+ // Network 28: CIP ONS (Original Language: LAD)
- // RLO: "gBlenderCIPMode"
// PBox Logic moved to consumer Coil
- // RLO: ("gBlenderCIPMode" AND NOT "M19003") AND (NOT "mDelayPowerOnTmr")
"gCIPONS" := ("gBlenderCIPMode" AND NOT "M19003") AND (NOT "mDelayPowerOnTmr");
- // Network 29: CIp Mode Init
+ // Network 29: CIp Mode Init (Original Language: LAD)
- // RLO: "gCIPONS"
IF "gCIPONS" THEN
BlenderCtrl_CIPModeInit();
END_IF;
- // Network 30: Reset SPWords
+ // Network 30: Reset SPWords (Original Language: LAD)
BlenderCtrl_ResetSPWord();
- // Network 31: Blender Run Control
+ // Network 31: Blender Run Control (Original Language: LAD)
BlenderRun__Control();
- // Network 32: Tank Pressure Control
+ // Network 32: Tank Pressure Control (Original Language: LAD)
Prod_Tank_PressCtrl();
- // Network 33: Balaiage
+ // Network 33: Balaiage (Original Language: LAD)
Baialage();
- // Network 34: First Production
+ // Network 34: First Production (Original Language: LAD)
"FirstProduction_Data"();
- // Network 35: CIP MAIN Calling
+ // Network 35: CIP MAIN Calling (Original Language: LAD)
CIPMain();
- // Network 36: Blender Rinse
+ // Network 36: Blender Rinse (Original Language: LAD)
BlenderRinse();
- // Network 37: Safeties
+ // Network 37: Safeties (Original Language: LAD)
Safeties();
- // Network 38: Instrument Scanner
+ // Network 38: Instrument Scanner (Original Language: LAD)
Instrument_Scanner();
- // Network 39: Vacuum Control
+ // Network 39: Vacuum Control (Original Language: LAD)
VacuumCtrl();
- // Network 40: Syrup Room Control
+ // Network 40: Syrup Room Control (Original Language: LAD)
SyrupRoomCtrl();
- // Network 41: Blend Procedure Data
+ // Network 41: Blend Procedure Data (Original Language: LAD)
- // RLO: (NOT "mDelayPowerOnTmr")
IF (NOT "mDelayPowerOnTmr") THEN
"Blender_Procedure Data"();
END_IF;
- // Network 42: Pneumatic Valve Control
+ // Network 42: Pneumatic Valve Control (Original Language: LAD)
Pneumatic_Valve_Ctrl();
- // Network 43: Pumps Control
+ // Network 43: Pumps Control (Original Language: LAD)
PumpsControl();
- // Network 44: Prod Report Manager
+ // Network 44: Prod Report Manager (Original Language: LAD)
- // 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
+ // Network 45: Outputs (Original Language: LAD)
Output();
- // Network 46: SLIM BLOCK
+ // Network 46: SLIM BLOCK (Original Language: LAD)
SLIM_Block();
- // Network 47: Interlocking Panel 1
+ // Network 47: Interlocking Panel 1 (Original Language: LAD)
Interlocking_Panel_1();
- // Network 48: Filler Control
+ // Network 48: Filler Control (Original Language: LAD)
FillerControl();
- // Network 49: Blender Ctrl Update PWORD
+ // Network 49: Blender Ctrl Update PWORD (Original Language: LAD)
BlenderCtrl_UpdatePWord();
- // Network 50: ResetTotalizer
+ // Network 50: ResetTotalizer (Original Language: LAD)
- // RLO: "gBlendResetTotalizer"
+ // Network did not produce printable SCL code.
- // Network 51: ResetWaterTot
+ // Network 51: ResetWaterTot (Original Language: LAD)
- // RLO: "gFTN301_ResetTot"
- // RLO: "mResetTotalizerTmr"
+ // Network did not produce printable SCL code.
- // Network 52: Water VFM Reset Totalizer
+ // Network 52: Water VFM Reset Totalizer (Original Language: LAD)
- // RLO: "gFTN301_ResetTot"
+ IF "gFTN301_ResetTot" THEN
+ "gFTN301_ResetTot" := FALSE;
+ END_IF;
- // Network 53: ResetCO2Tot
+ // Network 53: ResetCO2Tot (Original Language: LAD)
- // RLO: "gFTP302_ResetTot"
- // RLO: "mResetTotalizerTmr"
+ // Network did not produce printable SCL code.
- // Network 54: Syrup MFM Reset Totalizer
+ // Network 54: Syrup MFM Reset Totalizer (Original Language: LAD)
- // RLO: "gFTP302_ResetTot"
+ IF "gFTP302_ResetTot" THEN
+ "gFTP302_ResetTot" := FALSE;
+ END_IF;
- // Network 55: ResetProductTot
+ // Network 55: ResetProductTot (Original Language: LAD)
- // RLO: "gFTM303_ResetTot"
- // RLO: "mResetTotalizerTmr"
+ // Network did not produce printable SCL code.
- // Network 56: CO2 MFM Reset Tot
+ // Network 56: CO2 MFM Reset Tot (Original Language: LAD)
- // RLO: "gFTM303_ResetTot"
+ IF "gFTM303_ResetTot" THEN
+ "gFTM303_ResetTot" := FALSE;
+ END_IF;
- // Network 57: ResetCO2Tot
+ // Network 57: ResetCO2Tot (Original Language: LAD)
- // RLO: "gProductMFMResetTot"
- // RLO: "mResetTotalizerTmr"
+ // Network did not produce printable SCL code.
- // Network 58: Reset Totalizer
+ // Network 58: Reset Totalizer (Original Language: LAD)
- // RLO: "gProductMFMResetTot"
+ IF "gProductMFMResetTot" THEN
+ "gProductMFMResetTot" := FALSE;
+ END_IF;
- // Network 59: Reset Totalizer
+ // Network 59: Reset Totalizer (Original Language: LAD)
- // RLO: "gBlendResetTotalizer"
+ IF "gBlendResetTotalizer" THEN
+ "gBlendResetTotalizer" := FALSE;
+ END_IF;
- // Network 60: Blender Ctrl Command
+ // Network 60: Blender Ctrl Command (Original Language: LAD)
- // RLO: (NOT "HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_Simulation")
IF (NOT "HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_Simulation") THEN
BlenderCtrl_MFM_Command();
END_IF;
- // Network 61: DP Global Diag
+ // Network 61: DP Global Diag (Original Language: LAD)
CPU_DP_Global_Diag();
- // Network 62: Profibus
+ // Network 62: Profibus (Original Language: LAD)
Profibus_Network();
- // Network 63: Valve Fault
+ // Network 63: Valve Fault (Original Language: LAD)
ModValveFault();
- // Network 64: All Auto
+ // Network 64: All Auto (Original Language: LAD)
- // 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"
// NBox Logic moved to consumer Coil
IF NOT ("HMI_Variables_Cmd"."Commands_From_HMI"."F7_DeviceControl"."Command" AND "HMI_Variables_Cmd"."Commands_From_HMI"."F7_DeviceControl"."Enable") AND "M19011" THEN
BlenderCtrl_All_Auto();
END_IF;
"HMI_Variables_Cmd"."Commands_From_HMI"."F7_DeviceControl"."Light" := "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
+ // Network 65: Ctrl HMI Manual Active (Original Language: LAD)
BlenderCtrl_ManualActive();
- // Network 66: Mod Copy Recipe
+ // Network 66: Mod Copy Recipe (Original Language: LAD)
- // RLO: "HMI_Variables_Cmd"."Recipe"."Main_Page"
- // RLO: "HMI_Variables_Cmd"."Recipe"."Main_Page" AND (NOT "mFP_Recip_Main_Page")
"mAux_FP_M700_1" := "HMI_Variables_Cmd"."Recipe"."Main_Page" AND (NOT "mFP_Recip_Main_Page");
"mFP_Recip_Main_Page" := "HMI_Variables_Cmd"."Recipe"."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"
+ IF "mAux_FP_M700_1" THEN
+ "HMI_Variables_Cmd"."Recipe"."Edit" := TRUE;
+ END_IF;
- // Network 67: to HMI - Recipe Management
+ // Network 67: to HMI - Recipe Management (Original Language: LAD)
- // RLO: "AUX TRUE"
IF "AUX TRUE" THEN
"RecipeManagement_Data"();
END_IF;
- // Network 68: Recipe Calculation
+ // Network 68: Recipe Calculation (Original Language: LAD)
RecipeCalculation();
diff --git a/TestLAD.xml b/TestLAD.xml
index 5c3eeea..3fe7fd2 100644
--- a/TestLAD.xml
+++ b/TestLAD.xml
@@ -77,7 +77,161 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
LAD
@@ -132,7 +286,7 @@
it-IT
-
+ Manual Syrup Drain Valve Open - Operator Alarm
@@ -181,55 +335,68 @@
-
+
-
-
+
-
-
-
-
+
+
+ S5T#1S
+
-
-
+
-
- Variant
-
+
+
-
+
-
+
-
+
-
+
-
-
-
-
-
-
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -287,7 +454,7 @@
it-IT
- Filler Head
+ Manual Syrup Drain Valve Open - Operator Alarm
@@ -332,68 +499,62 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- true
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- true
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- SCL
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ S5T#2S
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LAD
@@ -447,7 +608,7 @@
it-IT
-
+ ResetTotalizer
@@ -496,63 +657,90 @@
-
+
-
-
-
+
-
+
-
+
+
+ S5T#2S
+
+
+
-
-
-
+
-
-
+
+
+
+ 2
-
-
-
-
-
+
+
-
+
-
-
-
-
-
-
-
-
-
-
-
+
+
-
-
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -610,7 +798,7 @@
it-IT
- Error Faults
+ ResetWaterTot
@@ -653,45 +841,900 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
+
+
+
+
+
+
+
+
+
+
it-IT
-
+
de-DE
-
+
en-US
-
+
es-ES
-
+
fr-FR
-
+
zh-CN
-
+
ja-JP
diff --git a/TestLAD_simplified.json b/TestLAD_simplified.json
index 0dcad1d..5116ea7 100644
--- a/TestLAD_simplified.json
+++ b/TestLAD_simplified.json
@@ -43,13 +43,13 @@
},
"networks": [
{
- "id": "1A",
- "title": "Filler Head",
+ "id": "9",
+ "title": "Manual Syrup Drain Valve Open - Operator Alarm",
"comment": "",
"logic": [
{
- "instruction_uid": "25",
- "uid": "25",
+ "instruction_uid": "30",
+ "uid": "30",
"type": "Contact",
"template_values": {},
"negated_pins": {},
@@ -58,7 +58,7 @@
"uid": "21",
"scope": "GlobalVariable",
"type": "variable",
- "name": "\"AUX FALSE\""
+ "name": "\"gSyrupRoomEn\""
},
"in": {
"type": "powerrail"
@@ -67,67 +67,231 @@
"outputs": {}
},
{
- "instruction_uid": "26",
- "uid": "26",
- "type": "BLKMOV",
- "template_values": {
- "blk_type": "Type"
- },
- "negated_pins": {},
- "inputs": {
- "SRCBLK": {
- "uid": "22",
- "scope": "GlobalVariable",
- "type": "variable",
- "name": "\"HMI_PID\".\"PPM303\""
- },
- "en": {
- "type": "connection",
- "source_instruction_type": "Contact",
- "source_instruction_uid": "25",
- "source_pin": "out"
- }
- },
- "outputs": {
- "RET_VAL": [
- {
- "uid": "23",
- "scope": "LocalVariable",
- "type": "variable",
- "name": "\"Block_Move_Err\""
- }
- ],
- "DSTBLK": [
- {
- "uid": "24",
- "scope": "GlobalVariable",
- "type": "variable",
- "name": "\"Filler_Head_Variables\".\"FillerHead\""
- }
- ]
- }
- }
- ]
- },
- {
- "id": "3C",
- "title": "Error Faults",
- "comment": "",
- "logic": [
- {
- "instruction_uid": "25",
- "uid": "25",
+ "instruction_uid": "31",
+ "uid": "31",
"type": "Contact",
"template_values": {},
"negated_pins": {
"operand": true
},
+ "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": {},
+ "negated_pins": {
+ "operand": true
+ },
+ "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": {},
+ "negated_pins": {},
+ "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": {},
+ "negated_pins": {
+ "operand": true
+ },
+ "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": {},
+ "negated_pins": {},
+ "inputs": {
+ "operand": {
+ "uid": "26",
+ "scope": "GlobalVariable",
+ "type": "variable",
+ "name": "\"gBlenderCIPMode\""
+ },
+ "in": {
+ "type": "connection",
+ "source_instruction_type": "Contact",
+ "source_instruction_uid": "31",
+ "source_pin": "out"
+ }
+ },
+ "outputs": {}
+ },
+ {
+ "instruction_uid": "36",
+ "uid": "36",
+ "type": "Contact",
+ "template_values": {},
+ "negated_pins": {},
+ "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": {},
+ "negated_pins": {},
+ "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"
+ },
+ "negated_pins": {},
+ "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": {},
+ "negated_pins": {},
+ "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": {}
+ }
+ ],
+ "language": "LAD"
+ },
+ {
+ "id": "1A",
+ "title": "Manual Syrup Drain Valve Open - Operator Alarm",
+ "comment": "",
+ "logic": [
+ {
+ "instruction_uid": "25",
+ "uid": "25",
+ "type": "Contact",
+ "template_values": {},
+ "negated_pins": {},
"inputs": {
"operand": {
"uid": "21",
"scope": "GlobalVariable",
"type": "variable",
- "name": "\"AUX FALSE\""
+ "name": "\"gIN_HVM302_Aux\""
},
"in": {
"type": "powerrail"
@@ -138,21 +302,28 @@
{
"instruction_uid": "26",
"uid": "26",
- "type": "SCoil",
+ "type": "Sd",
"template_values": {},
"negated_pins": {},
"inputs": {
- "operand": {
- "uid": "22",
- "scope": "GlobalVariable",
- "type": "variable",
- "name": "\"HMI_Variables_Status\".\"Meters\".\"QTM3012_PRD_Fault\""
- },
- "in": {
+ "s": {
"type": "connection",
"source_instruction_type": "Contact",
"source_instruction_uid": "25",
"source_pin": "out"
+ },
+ "tv": {
+ "uid": "23",
+ "scope": "TypedConstant",
+ "type": "constant",
+ "datatype": "TypedConstant",
+ "value": "S5T#1S"
+ },
+ "en": {
+ "type": "connection",
+ "source_instruction_uid": "25",
+ "source_instruction_type": "Contact",
+ "source_pin": "out"
}
},
"outputs": {}
@@ -162,21 +333,121 @@
"uid": "27",
"type": "Coil",
"template_values": {},
- "negated_pins": {
- "operand": true
- },
+ "negated_pins": {},
"inputs": {
"operand": {
- "uid": "23",
+ "uid": "24",
"scope": "GlobalVariable",
"type": "variable",
- "name": "\"gmPDS2000_Error_Fault\""
+ "name": "\"gHVM302_Open\""
},
"in": {
+ "type": "connection",
+ "source_instruction_type": "Sd",
+ "source_instruction_uid": "26",
+ "source_pin": "q"
+ }
+ },
+ "outputs": {}
+ }
+ ],
+ "language": "LAD"
+ },
+ {
+ "id": "2B",
+ "title": "ResetTotalizer",
+ "comment": "",
+ "logic": [
+ {
+ "instruction_uid": "24",
+ "uid": "24",
+ "type": "Contact",
+ "template_values": {},
+ "negated_pins": {},
+ "inputs": {
+ "operand": {
+ "uid": "21",
+ "scope": "GlobalVariable",
+ "type": "variable",
+ "name": "\"gBlendResetTotalizer\""
+ },
+ "in": {
+ "type": "powerrail"
+ }
+ },
+ "outputs": {}
+ },
+ {
+ "instruction_uid": "25",
+ "uid": "25",
+ "type": "Se",
+ "template_values": {},
+ "negated_pins": {},
+ "inputs": {
+ "s": {
"type": "connection",
"source_instruction_type": "Contact",
- "source_instruction_uid": "25",
+ "source_instruction_uid": "24",
"source_pin": "out"
+ },
+ "tv": {
+ "uid": "23",
+ "scope": "TypedConstant",
+ "type": "constant",
+ "datatype": "TypedConstant",
+ "value": "S5T#2S"
+ },
+ "en": {
+ "type": "connection",
+ "source_instruction_uid": "24",
+ "source_instruction_type": "Contact",
+ "source_pin": "out"
+ }
+ },
+ "outputs": {}
+ }
+ ],
+ "language": "LAD"
+ },
+ {
+ "id": "3C",
+ "title": "ResetWaterTot",
+ "comment": "",
+ "logic": [
+ {
+ "instruction_uid": "26",
+ "uid": "26",
+ "type": "Contact",
+ "template_values": {},
+ "negated_pins": {},
+ "inputs": {
+ "operand": {
+ "uid": "21",
+ "scope": "GlobalVariable",
+ "type": "variable",
+ "name": "\"gFTN301_ResetTot\""
+ },
+ "in": {
+ "type": "powerrail"
+ }
+ },
+ "outputs": {}
+ },
+ {
+ "instruction_uid": "27",
+ "uid": "27",
+ "type": "Contact",
+ "template_values": {},
+ "negated_pins": {},
+ "inputs": {
+ "operand": {
+ "uid": "22",
+ "scope": "GlobalVariable",
+ "type": "variable",
+ "name": "\"mResetTotalizerTmr\""
+ },
+ "in": {
+ "type": "powerrail"
}
},
"outputs": {}
@@ -184,7 +455,540 @@
{
"instruction_uid": "28",
"uid": "28",
- "type": "RCoil",
+ "type": "O",
+ "template_values": {
+ "Card": "Cardinality"
+ },
+ "negated_pins": {},
+ "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": {},
+ "negated_pins": {},
+ "inputs": {
+ "s": {
+ "type": "connection",
+ "source_instruction_type": "O",
+ "source_instruction_uid": "28",
+ "source_pin": "out"
+ },
+ "tv": {
+ "uid": "24",
+ "scope": "TypedConstant",
+ "type": "constant",
+ "datatype": "TypedConstant",
+ "value": "S5T#2S"
+ },
+ "en": {
+ "type": "connection",
+ "source_instruction_uid": "28",
+ "source_instruction_type": "O",
+ "source_pin": "out"
+ }
+ },
+ "outputs": {}
+ },
+ {
+ "instruction_uid": "30",
+ "uid": "30",
+ "type": "Coil",
+ "template_values": {},
+ "negated_pins": {},
+ "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": {}
+ }
+ ],
+ "language": "LAD"
+ },
+ {
+ "id": "4D",
+ "title": "ResetCO2Tot",
+ "comment": "",
+ "logic": [
+ {
+ "instruction_uid": "27",
+ "uid": "27",
+ "type": "Contact",
+ "template_values": {},
+ "negated_pins": {},
+ "inputs": {
+ "operand": {
+ "uid": "21",
+ "scope": "GlobalVariable",
+ "type": "variable",
+ "name": "\"gFTP302_ResetTot\""
+ },
+ "in": {
+ "type": "powerrail"
+ }
+ },
+ "outputs": {}
+ },
+ {
+ "instruction_uid": "28",
+ "uid": "28",
+ "type": "Contact",
+ "template_values": {},
+ "negated_pins": {},
+ "inputs": {
+ "operand": {
+ "uid": "22",
+ "scope": "GlobalVariable",
+ "type": "variable",
+ "name": "\"mResetTotalizerTmr\""
+ },
+ "in": {
+ "type": "powerrail"
+ }
+ },
+ "outputs": {}
+ },
+ {
+ "instruction_uid": "29",
+ "uid": "29",
+ "type": "O",
+ "template_values": {
+ "Card": "Cardinality"
+ },
+ "negated_pins": {},
+ "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": {},
+ "negated_pins": {},
+ "inputs": {
+ "s": {
+ "type": "connection",
+ "source_instruction_type": "O",
+ "source_instruction_uid": "29",
+ "source_pin": "out"
+ },
+ "tv": {
+ "uid": "24",
+ "scope": "TypedConstant",
+ "type": "constant",
+ "datatype": "TypedConstant",
+ "value": "S5T#2S"
+ },
+ "en": {
+ "type": "connection",
+ "source_instruction_uid": "29",
+ "source_instruction_type": "O",
+ "source_pin": "out"
+ }
+ },
+ "outputs": {}
+ },
+ {
+ "instruction_uid": "31",
+ "uid": "31",
+ "type": "Contact",
+ "template_values": {},
+ "negated_pins": {},
+ "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": {},
+ "negated_pins": {},
+ "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": {}
+ }
+ ],
+ "language": "LAD"
+ },
+ {
+ "id": "5E",
+ "title": "ResetProductTot",
+ "comment": "",
+ "logic": [
+ {
+ "instruction_uid": "26",
+ "uid": "26",
+ "type": "Contact",
+ "template_values": {},
+ "negated_pins": {},
+ "inputs": {
+ "operand": {
+ "uid": "21",
+ "scope": "GlobalVariable",
+ "type": "variable",
+ "name": "\"gFTM303_ResetTot\""
+ },
+ "in": {
+ "type": "powerrail"
+ }
+ },
+ "outputs": {}
+ },
+ {
+ "instruction_uid": "27",
+ "uid": "27",
+ "type": "Contact",
+ "template_values": {},
+ "negated_pins": {},
+ "inputs": {
+ "operand": {
+ "uid": "22",
+ "scope": "GlobalVariable",
+ "type": "variable",
+ "name": "\"mResetTotalizerTmr\""
+ },
+ "in": {
+ "type": "powerrail"
+ }
+ },
+ "outputs": {}
+ },
+ {
+ "instruction_uid": "28",
+ "uid": "28",
+ "type": "O",
+ "template_values": {
+ "Card": "Cardinality"
+ },
+ "negated_pins": {},
+ "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": {},
+ "negated_pins": {},
+ "inputs": {
+ "s": {
+ "type": "connection",
+ "source_instruction_type": "O",
+ "source_instruction_uid": "28",
+ "source_pin": "out"
+ },
+ "tv": {
+ "uid": "24",
+ "scope": "TypedConstant",
+ "type": "constant",
+ "datatype": "TypedConstant",
+ "value": "S5T#2S"
+ },
+ "en": {
+ "type": "connection",
+ "source_instruction_uid": "28",
+ "source_instruction_type": "O",
+ "source_pin": "out"
+ }
+ },
+ "outputs": {}
+ },
+ {
+ "instruction_uid": "30",
+ "uid": "30",
+ "type": "Coil",
+ "template_values": {},
+ "negated_pins": {},
+ "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": {}
+ }
+ ],
+ "language": "LAD"
+ },
+ {
+ "id": "6F",
+ "title": "ResetCO2Tot",
+ "comment": "",
+ "logic": [
+ {
+ "instruction_uid": "26",
+ "uid": "26",
+ "type": "Contact",
+ "template_values": {},
+ "negated_pins": {},
+ "inputs": {
+ "operand": {
+ "uid": "21",
+ "scope": "GlobalVariable",
+ "type": "variable",
+ "name": "\"gProductMFMResetTot\""
+ },
+ "in": {
+ "type": "powerrail"
+ }
+ },
+ "outputs": {}
+ },
+ {
+ "instruction_uid": "27",
+ "uid": "27",
+ "type": "Contact",
+ "template_values": {},
+ "negated_pins": {},
+ "inputs": {
+ "operand": {
+ "uid": "22",
+ "scope": "GlobalVariable",
+ "type": "variable",
+ "name": "\"mResetTotalizerTmr\""
+ },
+ "in": {
+ "type": "powerrail"
+ }
+ },
+ "outputs": {}
+ },
+ {
+ "instruction_uid": "28",
+ "uid": "28",
+ "type": "O",
+ "template_values": {
+ "Card": "Cardinality"
+ },
+ "negated_pins": {},
+ "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": {},
+ "negated_pins": {},
+ "inputs": {
+ "s": {
+ "type": "connection",
+ "source_instruction_type": "O",
+ "source_instruction_uid": "28",
+ "source_pin": "out"
+ },
+ "tv": {
+ "uid": "24",
+ "scope": "TypedConstant",
+ "type": "constant",
+ "datatype": "TypedConstant",
+ "value": "S5T#2S"
+ },
+ "en": {
+ "type": "connection",
+ "source_instruction_uid": "28",
+ "source_instruction_type": "O",
+ "source_pin": "out"
+ }
+ },
+ "outputs": {}
+ },
+ {
+ "instruction_uid": "30",
+ "uid": "30",
+ "type": "Coil",
+ "template_values": {},
+ "negated_pins": {},
+ "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": {}
+ }
+ ],
+ "language": "LAD"
+ },
+ {
+ "id": "80",
+ "title": "Mod Copy Recipe",
+ "comment": "",
+ "logic": [
+ {
+ "instruction_uid": "33",
+ "uid": "33",
+ "type": "Contact",
+ "template_values": {},
+ "negated_pins": {},
+ "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": {},
+ "negated_pins": {
+ "operand": true
+ },
+ "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": {},
+ "negated_pins": {},
+ "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": {},
"negated_pins": {},
"inputs": {
@@ -192,18 +996,167 @@
"uid": "24",
"scope": "GlobalVariable",
"type": "variable",
- "name": "\"HMI_Variables_Status\".\"Meters\".\"QTM3012_PRD_Run\""
+ "name": "\"mFP_Recip_Main_Page\""
},
"in": {
"type": "connection",
"source_instruction_type": "Contact",
- "source_instruction_uid": "25",
+ "source_instruction_uid": "33",
+ "source_pin": "out"
+ }
+ },
+ "outputs": {}
+ },
+ {
+ "instruction_uid": "37",
+ "uid": "37",
+ "type": "Contact",
+ "template_values": {},
+ "negated_pins": {},
+ "inputs": {
+ "operand": {
+ "uid": "25",
+ "scope": "GlobalVariable",
+ "type": "variable",
+ "name": "\"HMI_Variables_Cmd\".\"Recipe\".\"Main_Page\""
+ },
+ "in": {
+ "type": "powerrail"
+ }
+ },
+ "outputs": {}
+ },
+ {
+ "instruction_uid": "38",
+ "uid": "38",
+ "type": "Contact",
+ "template_values": {},
+ "negated_pins": {},
+ "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": {},
+ "negated_pins": {},
+ "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": {},
+ "negated_pins": {},
+ "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": {},
+ "negated_pins": {},
+ "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": {},
+ "negated_pins": {},
+ "inputs": {
+ "operand": {
+ "uid": "31",
+ "scope": "GlobalVariable",
+ "type": "variable",
+ "name": "\"mAux_FP_M700_1\""
+ },
+ "in": {
+ "type": "powerrail"
+ }
+ },
+ "outputs": {}
+ },
+ {
+ "instruction_uid": "43",
+ "uid": "43",
+ "type": "SCoil",
+ "template_values": {},
+ "negated_pins": {},
+ "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": {}
}
- ]
+ ],
+ "language": "LAD"
}
]
}
\ No newline at end of file
diff --git a/TestLAD_simplified_processed.json b/TestLAD_simplified_processed.json
index 1efaaac..4680364 100644
--- a/TestLAD_simplified_processed.json
+++ b/TestLAD_simplified_processed.json
@@ -43,13 +43,13 @@
},
"networks": [
{
- "id": "1A",
- "title": "Filler Head",
+ "id": "9",
+ "title": "Manual Syrup Drain Valve Open - Operator Alarm",
"comment": "",
"logic": [
{
- "instruction_uid": "25",
- "uid": "25",
+ "instruction_uid": "30",
+ "uid": "30",
"type": "Contact_scl",
"template_values": {},
"negated_pins": {},
@@ -58,113 +58,44 @@
"uid": "21",
"scope": "GlobalVariable",
"type": "variable",
- "name": "\"AUX FALSE\""
+ "name": "\"gSyrupRoomEn\""
},
"in": {
"type": "powerrail"
}
},
"outputs": {},
- "scl": "// RLO: \"AUX FALSE\""
+ "scl": "// RLO: \"gSyrupRoomEn\""
},
{
- "instruction_uid": "26",
- "uid": "26",
- "type": "BLKMOV_scl",
- "template_values": {
- "blk_type": "Type"
- },
- "negated_pins": {},
- "inputs": {
- "SRCBLK": {
- "uid": "22",
- "scope": "GlobalVariable",
- "type": "variable",
- "name": "\"HMI_PID\".\"PPM303\""
- },
- "en": {
- "type": "connection",
- "source_instruction_type": "Contact",
- "source_instruction_uid": "25",
- "source_pin": "out"
- }
- },
- "outputs": {
- "RET_VAL": [
- {
- "uid": "23",
- "scope": "LocalVariable",
- "type": "variable",
- "name": "\"Block_Move_Err\""
- }
- ],
- "DSTBLK": [
- {
- "uid": "24",
- "scope": "GlobalVariable",
- "type": "variable",
- "name": "\"Filler_Head_Variables\".\"FillerHead\""
- }
- ]
- },
- "scl": "IF \"AUX FALSE\" THEN\n \"Block_Move_Err\" := BLKMOV(SRCBLK := \"HMI_PID\".\"PPM303\", DSTBLK => \"Filler_Head_Variables\".\"FillerHead\"); // ADVERTENCIA: BLKMOV usado directamente, probablemente no compile!\nEND_IF;"
- }
- ]
- },
- {
- "id": "3C",
- "title": "Error Faults",
- "comment": "",
- "logic": [
- {
- "instruction_uid": "25",
- "uid": "25",
+ "instruction_uid": "31",
+ "uid": "31",
"type": "Contact_scl",
"template_values": {},
"negated_pins": {
"operand": true
},
- "inputs": {
- "operand": {
- "uid": "21",
- "scope": "GlobalVariable",
- "type": "variable",
- "name": "\"AUX FALSE\""
- },
- "in": {
- "type": "powerrail"
- }
- },
- "outputs": {},
- "scl": "// RLO: (NOT \"AUX FALSE\")"
- },
- {
- "instruction_uid": "26",
- "uid": "26",
- "type": "SCoil_scl",
- "template_values": {},
- "negated_pins": {},
"inputs": {
"operand": {
"uid": "22",
"scope": "GlobalVariable",
"type": "variable",
- "name": "\"HMI_Variables_Status\".\"Meters\".\"QTM3012_PRD_Fault\""
+ "name": "\"gIN_HVP301_Aux\""
},
"in": {
"type": "connection",
"source_instruction_type": "Contact",
- "source_instruction_uid": "25",
+ "source_instruction_uid": "30",
"source_pin": "out"
}
},
"outputs": {},
- "scl": "IF (NOT \"AUX FALSE\") THEN\n \"HMI_Variables_Status\".\"Meters\".\"QTM3012_PRD_Fault\" := TRUE;\nEND_IF;"
+ "scl": "// RLO: \"gSyrupRoomEn\" AND (NOT \"gIN_HVP301_Aux\")"
},
{
- "instruction_uid": "27",
- "uid": "27",
- "type": "Coil_scl",
+ "instruction_uid": "32",
+ "uid": "32",
+ "type": "Contact_scl",
"template_values": {},
"negated_pins": {
"operand": true
@@ -174,22 +105,22 @@
"uid": "23",
"scope": "GlobalVariable",
"type": "variable",
- "name": "\"gmPDS2000_Error_Fault\""
+ "name": "\"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_FastChangeOverEnabled\""
},
"in": {
"type": "connection",
"source_instruction_type": "Contact",
- "source_instruction_uid": "25",
+ "source_instruction_uid": "31",
"source_pin": "out"
}
},
"outputs": {},
- "scl": "\"gmPDS2000_Error_Fault\" := (NOT \"AUX FALSE\");"
+ "scl": "// RLO: (\"gSyrupRoomEn\" AND (NOT \"gIN_HVP301_Aux\")) AND (NOT \"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_FastChangeOverEnabled\")"
},
{
- "instruction_uid": "28",
- "uid": "28",
- "type": "RCoil_scl",
+ "instruction_uid": "33",
+ "uid": "33",
+ "type": "Contact_scl",
"template_values": {},
"negated_pins": {},
"inputs": {
@@ -197,19 +128,1067 @@
"uid": "24",
"scope": "GlobalVariable",
"type": "variable",
- "name": "\"HMI_Variables_Status\".\"Meters\".\"QTM3012_PRD_Run\""
+ "name": "\"Procedure_Variables\".\"FTP302Line_Preparation\".\"Done\""
},
"in": {
"type": "connection",
"source_instruction_type": "Contact",
- "source_instruction_uid": "25",
+ "source_instruction_uid": "32",
"source_pin": "out"
}
},
"outputs": {},
- "scl": "IF (NOT \"AUX FALSE\") THEN\n \"HMI_Variables_Status\".\"Meters\".\"QTM3012_PRD_Run\" := FALSE;\nEND_IF;"
+ "scl": "// RLO: (\"gSyrupRoomEn\" AND (NOT \"gIN_HVP301_Aux\")) AND (NOT \"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_FastChangeOverEnabled\") AND \"Procedure_Variables\".\"FTP302Line_Preparation\".\"Done\""
+ },
+ {
+ "instruction_uid": "34",
+ "uid": "34",
+ "type": "Contact_scl",
+ "template_values": {},
+ "negated_pins": {
+ "operand": true
+ },
+ "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 (NOT \"gIN_HVP301_Aux\")) AND (NOT \"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_FastChangeOverEnabled\") AND \"Procedure_Variables\".\"FTP302Line_Preparation\".\"Done\") AND (NOT \"Procedure_Variables\".\"Syr_RunOut\".\"Done\")"
+ },
+ {
+ "instruction_uid": "35",
+ "uid": "35",
+ "type": "Contact_scl",
+ "template_values": {},
+ "negated_pins": {},
+ "inputs": {
+ "operand": {
+ "uid": "26",
+ "scope": "GlobalVariable",
+ "type": "variable",
+ "name": "\"gBlenderCIPMode\""
+ },
+ "in": {
+ "type": "connection",
+ "source_instruction_type": "Contact",
+ "source_instruction_uid": "31",
+ "source_pin": "out"
+ }
+ },
+ "outputs": {},
+ "scl": "// RLO: (\"gSyrupRoomEn\" AND (NOT \"gIN_HVP301_Aux\")) AND \"gBlenderCIPMode\""
+ },
+ {
+ "instruction_uid": "36",
+ "uid": "36",
+ "type": "Contact_scl",
+ "template_values": {},
+ "negated_pins": {},
+ "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: ((\"gSyrupRoomEn\" AND (NOT \"gIN_HVP301_Aux\")) AND \"gBlenderCIPMode\") AND \"gIN_CIP_CIPRunning\""
+ },
+ {
+ "instruction_uid": "37",
+ "uid": "37",
+ "type": "Contact_scl",
+ "template_values": {},
+ "negated_pins": {},
+ "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: (((\"gSyrupRoomEn\" AND (NOT \"gIN_HVP301_Aux\")) AND \"gBlenderCIPMode\") AND \"gIN_CIP_CIPRunning\") AND \"Procedure_Variables\".\"Blender_Run\".\"Running\""
+ },
+ {
+ "instruction_uid": "38",
+ "uid": "38",
+ "type": "O_scl",
+ "template_values": {
+ "Card": "Cardinality"
+ },
+ "negated_pins": {},
+ "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 (NOT \"gIN_HVP301_Aux\")) AND (NOT \"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_FastChangeOverEnabled\") AND \"Procedure_Variables\".\"FTP302Line_Preparation\".\"Done\") AND (NOT \"Procedure_Variables\".\"Syr_RunOut\".\"Done\") OR ((((\"gSyrupRoomEn\" AND (NOT \"gIN_HVP301_Aux\")) AND \"gBlenderCIPMode\") AND \"gIN_CIP_CIPRunning\") AND \"Procedure_Variables\".\"Blender_Run\".\"Running\")"
+ },
+ {
+ "instruction_uid": "39",
+ "uid": "39",
+ "type": "Coil_scl",
+ "template_values": {},
+ "negated_pins": {},
+ "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 (NOT \"gIN_HVP301_Aux\")) AND (NOT \"HMI_Blender_Parameters\".\"Processor_Options\".\"Blender_OPT\".\"_FastChangeOverEnabled\") AND \"Procedure_Variables\".\"FTP302Line_Preparation\".\"Done\") AND (NOT \"Procedure_Variables\".\"Syr_RunOut\".\"Done\") OR ((((\"gSyrupRoomEn\" AND (NOT \"gIN_HVP301_Aux\")) AND \"gBlenderCIPMode\") AND \"gIN_CIP_CIPRunning\") AND \"Procedure_Variables\".\"Blender_Run\".\"Running\");"
}
- ]
+ ],
+ "language": "LAD"
+ },
+ {
+ "id": "1A",
+ "title": "Manual Syrup Drain Valve Open - Operator Alarm",
+ "comment": "",
+ "logic": [
+ {
+ "instruction_uid": "25",
+ "uid": "25",
+ "type": "Contact_scl",
+ "template_values": {},
+ "negated_pins": {},
+ "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": {},
+ "negated_pins": {},
+ "inputs": {
+ "s": {
+ "type": "connection",
+ "source_instruction_type": "Contact",
+ "source_instruction_uid": "25",
+ "source_pin": "out"
+ },
+ "tv": {
+ "uid": "23",
+ "scope": "TypedConstant",
+ "type": "constant",
+ "datatype": "TypedConstant",
+ "value": "S5T#1S"
+ },
+ "en": {
+ "type": "connection",
+ "source_instruction_uid": "25",
+ "source_instruction_type": "Contact",
+ "source_pin": "out"
+ }
+ },
+ "outputs": {}
+ },
+ {
+ "instruction_uid": "27",
+ "uid": "27",
+ "type": "Coil",
+ "template_values": {},
+ "negated_pins": {},
+ "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": {}
+ }
+ ],
+ "language": "LAD"
+ },
+ {
+ "id": "2B",
+ "title": "ResetTotalizer",
+ "comment": "",
+ "logic": [
+ {
+ "instruction_uid": "24",
+ "uid": "24",
+ "type": "Contact_scl",
+ "template_values": {},
+ "negated_pins": {},
+ "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": {},
+ "negated_pins": {},
+ "inputs": {
+ "s": {
+ "type": "connection",
+ "source_instruction_type": "Contact",
+ "source_instruction_uid": "24",
+ "source_pin": "out"
+ },
+ "tv": {
+ "uid": "23",
+ "scope": "TypedConstant",
+ "type": "constant",
+ "datatype": "TypedConstant",
+ "value": "S5T#2S"
+ },
+ "en": {
+ "type": "connection",
+ "source_instruction_uid": "24",
+ "source_instruction_type": "Contact",
+ "source_pin": "out"
+ }
+ },
+ "outputs": {}
+ }
+ ],
+ "language": "LAD"
+ },
+ {
+ "id": "3C",
+ "title": "ResetWaterTot",
+ "comment": "",
+ "logic": [
+ {
+ "instruction_uid": "26",
+ "uid": "26",
+ "type": "Contact_scl",
+ "template_values": {},
+ "negated_pins": {},
+ "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": {},
+ "negated_pins": {},
+ "inputs": {
+ "operand": {
+ "uid": "22",
+ "scope": "GlobalVariable",
+ "type": "variable",
+ "name": "\"mResetTotalizerTmr\""
+ },
+ "in": {
+ "type": "powerrail"
+ }
+ },
+ "outputs": {},
+ "scl": "// RLO: \"mResetTotalizerTmr\""
+ },
+ {
+ "instruction_uid": "28",
+ "uid": "28",
+ "type": "O_scl",
+ "template_values": {
+ "Card": "Cardinality"
+ },
+ "negated_pins": {},
+ "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": {},
+ "negated_pins": {},
+ "inputs": {
+ "s": {
+ "type": "connection",
+ "source_instruction_type": "O",
+ "source_instruction_uid": "28",
+ "source_pin": "out"
+ },
+ "tv": {
+ "uid": "24",
+ "scope": "TypedConstant",
+ "type": "constant",
+ "datatype": "TypedConstant",
+ "value": "S5T#2S"
+ },
+ "en": {
+ "type": "connection",
+ "source_instruction_uid": "28",
+ "source_instruction_type": "O",
+ "source_pin": "out"
+ }
+ },
+ "outputs": {}
+ },
+ {
+ "instruction_uid": "30",
+ "uid": "30",
+ "type": "Coil",
+ "template_values": {},
+ "negated_pins": {},
+ "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": {}
+ }
+ ],
+ "language": "LAD"
+ },
+ {
+ "id": "4D",
+ "title": "ResetCO2Tot",
+ "comment": "",
+ "logic": [
+ {
+ "instruction_uid": "27",
+ "uid": "27",
+ "type": "Contact_scl",
+ "template_values": {},
+ "negated_pins": {},
+ "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": {},
+ "negated_pins": {},
+ "inputs": {
+ "operand": {
+ "uid": "22",
+ "scope": "GlobalVariable",
+ "type": "variable",
+ "name": "\"mResetTotalizerTmr\""
+ },
+ "in": {
+ "type": "powerrail"
+ }
+ },
+ "outputs": {},
+ "scl": "// RLO: \"mResetTotalizerTmr\""
+ },
+ {
+ "instruction_uid": "29",
+ "uid": "29",
+ "type": "O_scl",
+ "template_values": {
+ "Card": "Cardinality"
+ },
+ "negated_pins": {},
+ "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": {},
+ "negated_pins": {},
+ "inputs": {
+ "s": {
+ "type": "connection",
+ "source_instruction_type": "O",
+ "source_instruction_uid": "29",
+ "source_pin": "out"
+ },
+ "tv": {
+ "uid": "24",
+ "scope": "TypedConstant",
+ "type": "constant",
+ "datatype": "TypedConstant",
+ "value": "S5T#2S"
+ },
+ "en": {
+ "type": "connection",
+ "source_instruction_uid": "29",
+ "source_instruction_type": "O",
+ "source_pin": "out"
+ }
+ },
+ "outputs": {}
+ },
+ {
+ "instruction_uid": "31",
+ "uid": "31",
+ "type": "Contact",
+ "template_values": {},
+ "negated_pins": {},
+ "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": {},
+ "negated_pins": {},
+ "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": {}
+ }
+ ],
+ "language": "LAD"
+ },
+ {
+ "id": "5E",
+ "title": "ResetProductTot",
+ "comment": "",
+ "logic": [
+ {
+ "instruction_uid": "26",
+ "uid": "26",
+ "type": "Contact_scl",
+ "template_values": {},
+ "negated_pins": {},
+ "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": {},
+ "negated_pins": {},
+ "inputs": {
+ "operand": {
+ "uid": "22",
+ "scope": "GlobalVariable",
+ "type": "variable",
+ "name": "\"mResetTotalizerTmr\""
+ },
+ "in": {
+ "type": "powerrail"
+ }
+ },
+ "outputs": {},
+ "scl": "// RLO: \"mResetTotalizerTmr\""
+ },
+ {
+ "instruction_uid": "28",
+ "uid": "28",
+ "type": "O_scl",
+ "template_values": {
+ "Card": "Cardinality"
+ },
+ "negated_pins": {},
+ "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": {},
+ "negated_pins": {},
+ "inputs": {
+ "s": {
+ "type": "connection",
+ "source_instruction_type": "O",
+ "source_instruction_uid": "28",
+ "source_pin": "out"
+ },
+ "tv": {
+ "uid": "24",
+ "scope": "TypedConstant",
+ "type": "constant",
+ "datatype": "TypedConstant",
+ "value": "S5T#2S"
+ },
+ "en": {
+ "type": "connection",
+ "source_instruction_uid": "28",
+ "source_instruction_type": "O",
+ "source_pin": "out"
+ }
+ },
+ "outputs": {}
+ },
+ {
+ "instruction_uid": "30",
+ "uid": "30",
+ "type": "Coil",
+ "template_values": {},
+ "negated_pins": {},
+ "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": {}
+ }
+ ],
+ "language": "LAD"
+ },
+ {
+ "id": "6F",
+ "title": "ResetCO2Tot",
+ "comment": "",
+ "logic": [
+ {
+ "instruction_uid": "26",
+ "uid": "26",
+ "type": "Contact_scl",
+ "template_values": {},
+ "negated_pins": {},
+ "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": {},
+ "negated_pins": {},
+ "inputs": {
+ "operand": {
+ "uid": "22",
+ "scope": "GlobalVariable",
+ "type": "variable",
+ "name": "\"mResetTotalizerTmr\""
+ },
+ "in": {
+ "type": "powerrail"
+ }
+ },
+ "outputs": {},
+ "scl": "// RLO: \"mResetTotalizerTmr\""
+ },
+ {
+ "instruction_uid": "28",
+ "uid": "28",
+ "type": "O_scl",
+ "template_values": {
+ "Card": "Cardinality"
+ },
+ "negated_pins": {},
+ "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": {},
+ "negated_pins": {},
+ "inputs": {
+ "s": {
+ "type": "connection",
+ "source_instruction_type": "O",
+ "source_instruction_uid": "28",
+ "source_pin": "out"
+ },
+ "tv": {
+ "uid": "24",
+ "scope": "TypedConstant",
+ "type": "constant",
+ "datatype": "TypedConstant",
+ "value": "S5T#2S"
+ },
+ "en": {
+ "type": "connection",
+ "source_instruction_uid": "28",
+ "source_instruction_type": "O",
+ "source_pin": "out"
+ }
+ },
+ "outputs": {}
+ },
+ {
+ "instruction_uid": "30",
+ "uid": "30",
+ "type": "Coil",
+ "template_values": {},
+ "negated_pins": {},
+ "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": {}
+ }
+ ],
+ "language": "LAD"
+ },
+ {
+ "id": "80",
+ "title": "Mod Copy Recipe",
+ "comment": "",
+ "logic": [
+ {
+ "instruction_uid": "33",
+ "uid": "33",
+ "type": "Contact_scl",
+ "template_values": {},
+ "negated_pins": {},
+ "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": {},
+ "negated_pins": {
+ "operand": true
+ },
+ "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 (NOT \"mFP_Recip_Main_Page\")"
+ },
+ {
+ "instruction_uid": "35",
+ "uid": "35",
+ "type": "Coil_scl",
+ "template_values": {},
+ "negated_pins": {},
+ "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 (NOT \"mFP_Recip_Main_Page\");"
+ },
+ {
+ "instruction_uid": "36",
+ "uid": "36",
+ "type": "Coil_scl",
+ "template_values": {},
+ "negated_pins": {},
+ "inputs": {
+ "operand": {
+ "uid": "24",
+ "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": "\"mFP_Recip_Main_Page\" := \"HMI_Variables_Cmd\".\"Recipe\".\"Main_Page\";"
+ },
+ {
+ "instruction_uid": "37",
+ "uid": "37",
+ "type": "Contact_scl",
+ "template_values": {},
+ "negated_pins": {},
+ "inputs": {
+ "operand": {
+ "uid": "25",
+ "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": "38",
+ "uid": "38",
+ "type": "Contact_scl",
+ "template_values": {},
+ "negated_pins": {},
+ "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": {},
+ "negated_pins": {},
+ "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": {},
+ "negated_pins": {},
+ "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": {},
+ "negated_pins": {},
+ "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": {},
+ "negated_pins": {},
+ "inputs": {
+ "operand": {
+ "uid": "31",
+ "scope": "GlobalVariable",
+ "type": "variable",
+ "name": "\"mAux_FP_M700_1\""
+ },
+ "in": {
+ "type": "powerrail"
+ }
+ },
+ "outputs": {},
+ "scl": "// RLO: \"mAux_FP_M700_1\""
+ },
+ {
+ "instruction_uid": "43",
+ "uid": "43",
+ "type": "SCoil_scl",
+ "template_values": {},
+ "negated_pins": {},
+ "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": {},
+ "scl": "IF \"mAux_FP_M700_1\" THEN\n \"HMI_Variables_Cmd\".\"Recipe\".\"Edit\" := TRUE;\nEND_IF;"
+ }
+ ],
+ "language": "LAD"
}
]
}
\ No newline at end of file
diff --git a/TestLAD_simplified_processed.scl b/TestLAD_simplified_processed.scl
index ba90e2a..c4dc244 100644
--- a/TestLAD_simplified_processed.scl
+++ b/TestLAD_simplified_processed.scl
@@ -27,22 +27,40 @@ END_VAR
BEGIN
- // Network 1: Filler Head
+ // Network 1: Manual Syrup Drain Valve Open - Operator Alarm (Original Language: LAD)
- // RLO: "AUX FALSE"
- IF "AUX FALSE" THEN
- "Block_Move_Err" := BLKMOV(SRCBLK := "HMI_PID"."PPM303", DSTBLK => "Filler_Head_Variables"."FillerHead"); // ADVERTENCIA: BLKMOV usado directamente, probablemente no compile!
- END_IF;
+ "gHVP301_Open" := (("gSyrupRoomEn" AND (NOT "gIN_HVP301_Aux")) AND (NOT "HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_FastChangeOverEnabled") AND "Procedure_Variables"."FTP302Line_Preparation"."Done") AND (NOT "Procedure_Variables"."Syr_RunOut"."Done") OR (((("gSyrupRoomEn" AND (NOT "gIN_HVP301_Aux")) AND "gBlenderCIPMode") AND "gIN_CIP_CIPRunning") AND "Procedure_Variables"."Blender_Run"."Running");
- // Network 2: Error Faults
+ // Network 2: Manual Syrup Drain Valve Open - Operator Alarm (Original Language: LAD)
- // RLO: (NOT "AUX FALSE")
- IF (NOT "AUX FALSE") THEN
- "HMI_Variables_Status"."Meters"."QTM3012_PRD_Fault" := TRUE;
- END_IF;
- "gmPDS2000_Error_Fault" := (NOT "AUX FALSE");
- IF (NOT "AUX FALSE") THEN
- "HMI_Variables_Status"."Meters"."QTM3012_PRD_Run" := FALSE;
+ // Network did not produce printable SCL code.
+
+ // Network 3: ResetTotalizer (Original Language: LAD)
+
+ // Network did not produce printable SCL code.
+
+ // Network 4: ResetWaterTot (Original Language: LAD)
+
+ // Network did not produce printable SCL code.
+
+ // Network 5: ResetCO2Tot (Original Language: LAD)
+
+ // Network did not produce printable SCL code.
+
+ // Network 6: ResetProductTot (Original Language: LAD)
+
+ // Network did not produce printable SCL code.
+
+ // Network 7: ResetCO2Tot (Original Language: LAD)
+
+ // Network did not produce printable SCL code.
+
+ // Network 8: Mod Copy Recipe (Original Language: LAD)
+
+ "mAux_FP_M700_1" := "HMI_Variables_Cmd"."Recipe"."Main_Page" AND (NOT "mFP_Recip_Main_Page");
+ "mFP_Recip_Main_Page" := "HMI_Variables_Cmd"."Recipe"."Main_Page";
+ IF "mAux_FP_M700_1" THEN
+ "HMI_Variables_Cmd"."Recipe"."Edit" := TRUE;
END_IF;
END_FUNCTION_BLOCK
diff --git a/x1_to_json.py b/x1_to_json.py
index 1acd06c..1e99f63 100644
--- a/x1_to_json.py
+++ b/x1_to_json.py
@@ -7,9 +7,11 @@ import traceback
from collections import defaultdict
# --- Namespaces ---
+# Se añade el namespace 'st' para Structured Text
ns = {
"iface": "http://www.siemens.com/automation/Openness/SW/Interface/v5",
"flg": "http://www.siemens.com/automation/Openness/SW/NetworkSource/FlgNet/v4",
+ "st": "http://www.siemens.com/automation/Openness/SW/NetworkSource/StructuredText/v3" # <--- Added SCL namespace
}
@@ -141,6 +143,95 @@ def parse_call(call_element):
if instance_scope: call_data["instance_scope"] = instance_scope
return call_data
+# EN x1_to_json.py, junto a otras funciones auxiliares
+
+def reconstruct_scl_from_tokens(st_node):
+ """
+ Intenta reconstruir una cadena SCL a partir de los elementos hijos
+ de un nodo . Es una aproximación y puede no ser perfecta.
+ """
+ if st_node is None:
+ return "// Error: StructuredText node not found.\n"
+
+ scl_parts = []
+ # Obtener todos los elementos hijos directos en orden
+ children = st_node.xpath("./st:*", namespaces=ns)
+
+ for elem in children:
+ tag = etree.QName(elem.tag).localname
+
+ if tag == "Token":
+ scl_parts.append(elem.get("Text", ""))
+ elif tag == "Blank":
+ scl_parts.append(" " * int(elem.get("Num", 1)))
+ elif tag == "NewLine":
+ # Añadir un salto de línea real. strip() al final de la línea actual
+ # para evitar espacios extra antes del salto.
+ scl_parts.append("\n")
+ elif tag == "Access":
+ # Reconstruir acceso (simplificado)
+ symbol_parts = []
+ # Buscar componentes y puntos dentro del símbolo de este acceso
+ symbol_children = elem.xpath(".//st:Component | .//st:Token[@Text='.']", namespaces=ns)
+ for sym_child in symbol_children:
+ sym_tag = etree.QName(sym_child.tag).localname
+ if sym_tag == "Component":
+ comp_name = sym_child.get("Name", "_ERR_")
+ # Comprobar si necesita comillas (podríamos necesitar parsear BooleanAttribute)
+ # Simplificación: Añadir comillas si el nombre original parece tenerlas (o siempre para DBs?)
+ # Aquí usamos el nombre tal cual viene en el XML por ahora
+ # Si el XML tiene true podríamos usarlo
+ has_quotes_elem = sym_child.xpath("../st:BooleanAttribute[@Name='HasQuotes']/text()", namespaces=ns)
+ has_quotes = has_quotes_elem and has_quotes_elem[0].lower() == 'true'
+
+ # Reconstrucción básica: poner comillas si HasQuotes es true o si es el primer componente (posible DB)
+ # Esto es heurístico y puede fallar.
+ # if has_quotes or (len(symbol_parts) == 0 and '.' not in comp_name): # Asumir primer componente es DB
+ # symbol_parts.append(f'"{comp_name}"')
+ # else:
+ # symbol_parts.append(comp_name)
+
+ # Versión más simple: usar nombre tal cual del XML
+ symbol_parts.append(comp_name)
+
+ elif sym_tag == "Token": # Solo nos interesa el punto aquí
+ symbol_parts.append(".")
+ access_str = "".join(symbol_parts)
+
+ # Manejar llamadas a funciones/FB dentro de Access Scope="Call"
+ if elem.get("Scope") == "Call":
+ instruction_elem = elem.xpath("./st:Instruction", namespaces=ns)
+ if instruction_elem:
+ instr_name = instruction_elem[0].get("Name", "_UNKNOWN_CALL_")
+ # Reconstrucción básica de parámetros (muy simplificada)
+ # Necesitaría parsear Parameters, Tokens '(', ')', ':=', '=>', etc.
+ # Por ahora, solo añadimos el nombre y paréntesis vacíos
+ access_str = f"{instr_name}()" # Placeholder muy básico
+
+ scl_parts.append(access_str)
+
+ elif tag == "Comment" or tag == "LineComment":
+ # Añadir comentarios
+ comment_text = elem.text if elem.text else ""
+ if tag == "Comment" and "\n" in comment_text: # Comentario multi-línea
+ scl_parts.append(f"(*{comment_text}*)")
+ else: # Comentario de una línea
+ scl_parts.append(f"// {comment_text}")
+ else:
+ # Ignorar otros tipos de nodos por ahora o añadir manejo específico
+ pass
+
+ # Unir todas las partes, limpiar espacios extra alrededor de saltos de línea
+ full_scl = "".join(scl_parts)
+ # Limpieza básica de formato
+ lines = [line.rstrip() for line in full_scl.split('\n')]
+ # Re-ensamblar, asegurando que líneas vacías (solo espacios previos) se mantengan
+ cleaned_scl = "\n".join(lines)
+ # Eliminar múltiples líneas vacías consecutivas (opcional)
+ # import re
+ # cleaned_scl = re.sub(r'\n\s*\n', '\n\n', cleaned_scl)
+
+ return cleaned_scl.strip() # Quitar espacios/saltos al inicio/final
# --- Función parse_network con XPath corregido para Title/Comment ---
# --- Función parse_network MODIFICADA (maneja multi-destino en Wire) ---
def parse_network(network_element):
@@ -308,136 +399,6 @@ def parse_network(network_element):
# 6. Ordenar y Devolver (sin cambios)
network_logic_final = [all_logic_steps[uid] for uid in sorted_uids_for_en if uid in all_logic_steps]
return {"id": network_id, "title": network_title, "comment": network_comment, "logic": network_logic_final}
- """
- Parsea una red, extrae lógica y añade conexiones EN implícitas.
- """
- if network_element is None:
- return {"id": "ERROR", "title": "Invalid Network Element", "comment": "", "logic": [], "error": "Input element was None"}
-
- network_id = network_element.get("ID")
-
- # --- CORRECCIÓN XPath para Title y Comment ---
- # Usar local-name() como en la versión original que funcionaba para esto
- title_element = network_element.xpath(
- ".//*[local-name()='MultilingualText'][@CompositionName='Title']" # Busca en cualquier nivel descendiente
- )
- network_title = get_multilingual_text(title_element[0]) if title_element else f"Network {network_id}"
-
- comment_element = network_element.xpath(
- "./*[local-name()='ObjectList']/*[local-name()='MultilingualText'][@CompositionName='Comment']" # Busca directamente bajo ObjectList
- )
- network_comment = get_multilingual_text(comment_element[0]) if comment_element else ""
- # --- FIN CORRECCIÓN XPath ---
-
- flgnet_list = network_element.xpath(".//flg:FlgNet", namespaces=ns)
- if not flgnet_list:
- return {"id": network_id, "title": network_title, "comment": network_comment, "logic": [], "error": "FlgNet not found"}
- flgnet = flgnet_list[0]
-
- # 1. Parsear Access, Parts y Calls (usando parse_call corregido)
- access_map = {acc_info["uid"]: acc_info for acc in flgnet.xpath(".//flg:Access", namespaces=ns) if (acc_info := parse_access(acc)) and acc_info['type'] != 'unknown'}
- parts_and_calls_map = {}
- instruction_elements = flgnet.xpath(".//flg:Part | .//flg:Call", namespaces=ns)
- for element in instruction_elements:
- parsed_info = None
- if element.tag == etree.QName(ns["flg"], "Part"): parsed_info = parse_part(element)
- elif element.tag == etree.QName(ns["flg"], "Call"): parsed_info = parse_call(element) # Usa la versión con fix DB
- 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}")
-
- # 2. Parsear Wires (sin cambios)
- 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
- source_elem, dest_elem = children[0], children[1]
- 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 source_uid is not None and source_pin is not None and dest_uid is not None and dest_pin is not None:
- dest_key = (dest_uid, dest_pin); source_info = (source_uid, source_pin)
- if source_info not in wire_connections[dest_key]: wire_connections[dest_key].append(source_info)
- source_key = (source_uid, source_pin); dest_info = (dest_uid, dest_pin)
- 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:
- if dest_info not in eno_outputs[source_uid]: eno_outputs[source_uid].append(dest_info)
-
- # 3. Construcción Lógica Inicial (sin cambios)
- all_logic_steps = {}
- functional_block_types = ['Move', 'Add', 'Sub', 'Mul', 'Div', 'Mod', 'Convert', 'Call', 'Se', 'Sd', 'BLKMOV']
- rlo_generators = ['Contact', 'O', 'Eq', 'Ne', 'Gt', 'Lt', 'Ge', 'Le', 'And', 'Xor', 'PBox', 'NBox']
- for instruction_uid, instruction_info in parts_and_calls_map.items():
- instruction_repr = {"instruction_uid": instruction_uid, **instruction_info}; instruction_repr["inputs"] = {}; instruction_repr["outputs"] = {}
- possible_input_pins = set(['en', 'in', 'in1', 'in2', 'in3', 'in4', 's', 'r', 'clk', 'cu', 'cd', 'ld', 'pv', 'tv', 'bit', 'operand', 'pre', 'SRCBLK'])
- for dest_pin_name in possible_input_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: input_sources_repr.append({"type": "connection", "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
- possible_output_pins = set(['out', 'out1', 'Q', 'eno', 'RET_VAL', 'DSTBLK', 'q', 'rt', 'rtbcd', 'cv', 'cvbcd'])
- for source_pin_name in possible_output_pins:
- 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[instruction_uid] = instruction_repr
-
- # 4. Inferencia EN (sin cambios)
- processed_blocks_en_inference = set(); something_changed = True; inference_passes = 0; max_inference_passes = len(all_logic_steps) + 5
- try: sorted_uids_for_en = sorted(all_logic_steps.keys(), key=lambda x: int(x) if x.isdigit() else float('inf'))
- except ValueError: sorted_uids_for_en = sorted(all_logic_steps.keys())
- ordered_logic_list_for_en = [all_logic_steps[uid] for uid in sorted_uids_for_en if uid in all_logic_steps]
- while something_changed and inference_passes < max_inference_passes:
- something_changed = False; inference_passes += 1
- for i, instruction in enumerate(ordered_logic_list_for_en):
- part_uid = instruction["instruction_uid"]; part_type_original = instruction["type"].replace('_scl', '').replace('_error', '')
- if (part_type_original in functional_block_types and "en" not in instruction["inputs"] and part_uid not in processed_blocks_en_inference):
- inferred_en_source = None
- if i > 0:
- for j in range(i - 1, -1, -1):
- prev_instr = ordered_logic_list_for_en[j]; prev_uid = prev_instr["instruction_uid"]; prev_type_original = prev_instr["type"].replace('_scl', '').replace('_error', '')
- if prev_type_original in rlo_generators: inferred_en_source = {"type": "connection", "source_instruction_uid": prev_uid, "source_instruction_type": prev_type_original, "source_pin": "out"}; break
- elif prev_type_original 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_original, "source_pin": "eno"}; break
- else: continue
- elif prev_type_original in ['Coil', 'SCoil', 'RCoil', 'SetCoil', 'ResetCoil', 'SdCoil']: break
- if inferred_en_source: all_logic_steps[part_uid]["inputs"]["en"] = inferred_en_source; processed_blocks_en_inference.add(part_uid); something_changed = True
-
- # 5. Añadir lógica ENO interesante (sin cambios)
- for source_instr_uid, eno_destinations in eno_outputs.items():
- 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 = False
- if dest_uid in parts_and_calls_map and dest_pin == 'en':
- try:
- source_idx = sorted_uids_for_en.index(source_instr_uid); dest_idx = sorted_uids_for_en.index(dest_uid)
- if dest_idx == source_idx + 1 and parts_and_calls_map[dest_uid]['type'] in functional_block_types: is_direct_en_connection = True
- except ValueError: pass
- if not is_direct_en_connection:
- 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"))})
- 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
-
- # 6. Ordenar y Devolver (sin cambios)
- network_logic_final = [all_logic_steps[uid] for uid in sorted_uids_for_en if uid in all_logic_steps]
- return {"id": network_id, "title": network_title, "comment": network_comment, "logic": network_logic_final}
# --- Función Principal convert_xml_to_json (sin cambios en su flujo general) ---
def convert_xml_to_json(xml_filepath, json_filepath):
@@ -494,20 +455,110 @@ def convert_xml_to_json(xml_filepath, json_filepath):
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
+ result["networks"] = [] # Initialize networks list here
object_list_node = the_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.")
+
for network_elem in compile_units:
networks_processed_count += 1
- parsed_network = parse_network(network_elem) # Llamada a la función de parseo de red
- 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')}")
- else: print(f"Error Fatal: 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 para el bloque.")
+ network_id = network_elem.get("ID")
+ if not network_id:
+ print(" Advertencia: Se encontró CompileUnit sin ID. Saltando.")
+ continue
+
+ # --- Detectar lenguaje de la red ---
+ attribute_list = network_elem.xpath("./*[local-name()='AttributeList']")
+ programming_language = "LAD" # Default a LAD si no se especifica
+ network_source_node = None # Nodo
+
+ if attribute_list:
+ lang_node = attribute_list[0].xpath("./*[local-name()='ProgrammingLanguage']/text()")
+ if lang_node:
+ programming_language = lang_node[0].strip()
+ # Obtener el nodo NetworkSource para pasarlo a los parsers
+ network_source_list = attribute_list[0].xpath("./*[local-name()='NetworkSource']")
+ if network_source_list:
+ network_source_node = network_source_list[0]
+
+ print(f" - Procesando Red ID={network_id}, Lenguaje={programming_language}")
+
+ # --- Extraer título y comentario (común) ---
+ title_element = network_elem.xpath(
+ ".//*[local-name()='MultilingualText'][@CompositionName='Title']"
+ )
+ network_title = get_multilingual_text(title_element[0]) if title_element else f"Network {network_id}"
+
+ comment_element = network_elem.xpath(
+ "./*[local-name()='ObjectList']/*[local-name()='MultilingualText'][@CompositionName='Comment']"
+ )
+ network_comment = get_multilingual_text(comment_element[0]) if comment_element else ""
+
+ # --- Procesar según el lenguaje ---
+ parsed_network_data = None
+ if programming_language == "SCL":
+ structured_text_node = network_source_node.xpath("./st:StructuredText", namespaces=ns) if network_source_node is not None else None
+
+ reconstructed_scl = f"// SCL extraction failed for Network {network_id}: StructuredText node not found.\n"
+ if structured_text_node:
+ print(f" Reconstruyendo SCL desde tokens para red {network_id}...")
+ reconstructed_scl = reconstruct_scl_from_tokens(structured_text_node[0])
+ # print(f" ... SCL reconstruido (parcial):\n{reconstructed_scl[:200]}...") # Preview opcional
+ else:
+ print(f" Advertencia: No se encontró nodo para red SCL {network_id}.")
+
+ parsed_network_data = {
+ "id": network_id,
+ "title": network_title,
+ "comment": network_comment,
+ "language": "SCL",
+ "logic": [{
+ "instruction_uid": f"SCL_{network_id}", # UID inventado
+ "type": "RAW_SCL_CHUNK",
+ "scl": reconstructed_scl
+ }]
+ }
+
+ elif programming_language in ["LAD", "FBD"]:
+ # Para LAD/FBD, llamar a parse_network (que espera FlgNet dentro de NetworkSource)
+ # parse_network ya maneja su propio título/comentario si es necesario, pero podemos pasar los extraídos
+ # Nota: parse_network espera el *CompileUnit* element, no el NetworkSource
+ parsed_network_data = parse_network(network_elem)
+ if parsed_network_data:
+ parsed_network_data["language"] = programming_language # Asegurar que el lenguaje se guarda
+ if parsed_network_data.get("error"):
+ print(f" Error al parsear red {programming_language} ID={network_id}: {parsed_network_data['error']}")
+ # parsed_network_data = None # Descomentar para omitir redes con error
+ else:
+ print(f" Error: parse_network devolvió None para red {programming_language} ID={network_id}")
+
+ else:
+ # Manejar otros lenguajes o casos inesperados
+ print(f" Advertencia: Lenguaje no soportado '{programming_language}' en red ID={network_id}. Creando placeholder.")
+ parsed_network_data = {
+ "id": network_id,
+ "title": network_title,
+ "comment": network_comment,
+ "language": programming_language,
+ "logic": [{"instruction_uid": f"UNS_{network_id}", "type": "UNSUPPORTED_LANG", "scl": f"// Network {network_id} uses unsupported language: {programming_language}\n"}]
+ }
+
+ # Añadir la red procesada (si es válida) al resultado
+ if parsed_network_data:
+ result["networks"].append(parsed_network_data)
+
+ # --- Fin del bucle for network_elem ---
+
+ if networks_processed_count == 0:
+ print("Advertencia: ObjectList no contenía elementos SW.Blocks.CompileUnit.")
+ else:
+ print("Advertencia: No se encontró ObjectList para el bloque.")
+
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.")
diff --git a/x3_generate_scl.py b/x3_generate_scl.py
index ae9d662..50df658 100644
--- a/x3_generate_scl.py
+++ b/x3_generate_scl.py
@@ -156,32 +156,73 @@ def generate_scl(processed_json_filepath, output_scl_filepath):
for i, network in enumerate(data.get('networks', [])):
network_title = network.get('title', f'Network {network.get("id")}')
network_comment = network.get('comment', '')
- scl_output.append(f" // Network {i+1}: {network_title}")
+ # Obtener lenguaje original de la red, default a LAD si no está
+ network_lang = network.get('language', 'LAD')
+
+ scl_output.append(f" // Network {i+1}: {network_title} (Original Language: {network_lang})")
if network_comment:
- # Añadir comentario de red indentado
for line in network_comment.splitlines():
scl_output.append(f" // {line}")
scl_output.append("") # Línea en blanco antes del código de la red
network_has_code = False
+ # Iterar sobre la 'logica' de la red
for instruction in network.get('logic', []):
+ instruction_type = instruction.get("type", "")
scl_code = instruction.get('scl')
- if scl_code:
- network_has_code = True
- # Indentar y añadir el código SCL de la instrucción
- # Quitar comentarios "// RLO updated..." o "// Comparison..."
- # ya que el código SCL resultante es la representación final.
- # Mantener comentarios de PBox por claridad.
- is_rlo_update_comment = scl_code.strip().startswith("// RLO updated")
- is_comparison_comment = scl_code.strip().startswith("// Comparison")
- is_logic_o_comment = scl_code.strip().startswith("// Logic O")
- if not (is_rlo_update_comment or is_comparison_comment or is_logic_o_comment) or "PBox" in scl_code :
- for line in scl_code.splitlines():
- scl_output.append(f" {line}") # Indentación de 2 espacios
+ # --- INICIO: Manejar RAW_SCL_CHUNK y otros tipos ---
+ if instruction_type == "RAW_SCL_CHUNK" and scl_code:
+ network_has_code = True
+ # Imprimir el SCL reconstruido directamente
+ for line in scl_code.splitlines():
+ scl_output.append(f" {line}") # Añadir indentación
+ elif instruction_type == "UNSUPPORTED_LANG" and scl_code:
+ network_has_code = True
+ # Imprimir comentario para lenguajes no soportados
+ for line in scl_code.splitlines():
+ scl_output.append(f" {line}")
+ elif instruction_type.endswith("_scl") and scl_code:
+ # Código SCL generado por x2_process.py para LAD/FBD
+ if instruction.get("grouped", False): # Ignorar si fue agrupado
+ continue
+
+ # Lógica mejorada para omitir comentarios internos si no aportan
+ lines = scl_code.splitlines()
+ is_internal_comment_only = (len(lines) == 1 and
+ (lines[0].strip().startswith("// RLO") or
+ lines[0].strip().startswith("// Comparison") or
+ lines[0].strip().startswith("// Logic O") or
+ lines[0].strip().startswith("// Logic included in grouped IF") or # Usar GROUPED_COMMENT si lo importas
+ lines[0].strip().startswith("// P_TRIG") or
+ lines[0].strip().startswith("// N_TRIG") ))
+
+ if not is_internal_comment_only:
+ network_has_code = True
+ for line in lines:
+ clean_line = line.strip()
+ # Omitir comentarios autogenerados específicos
+ if not (clean_line.startswith("// RLO:") or \
+ clean_line.startswith("// Comparison") or \
+ clean_line.startswith("// Logic O") or \
+ clean_line == "// Logic included in grouped IF" or \
+ clean_line.startswith("// P_TRIG(") or \
+ clean_line.startswith("// N_TRIG(")):
+ scl_output.append(f" {line}") # Indentación
+ # Ignorar instrucciones no procesadas (sin _scl) o con error
+ # elif "_error" in instruction_type:
+ # scl_output.append(f" // Error processing instruction {instruction.get('instruction_uid')}: {scl_code}")
+ # network_has_code = True
+
+
+ # --- FIN: Manejar RAW_SCL_CHUNK y otros tipos ---
if network_has_code:
- scl_output.append("") # Añadir línea en blanco después del código de la red
+ scl_output.append("") # Añadir línea en blanco después del código de la red si hubo algo
+ else:
+ # Añadir comentario si la red estaba vacía o no generó código imprimible
+ scl_output.append(f" // Network did not produce printable SCL code.")
+ scl_output.append("")
scl_output.append("END_FUNCTION_BLOCK")