From 4a4d638e5a1922ed108c4d26cdaa11400fbd5f2a Mon Sep 17 00:00:00 2001 From: "b.makharadze" <55makharadze@gmail.com> Date: Wed, 30 Jul 2025 18:20:33 +0400 Subject: [PATCH] Update MCM --- PLC/Simulations/MCM/OIP/MCM.tscn | 177 ------------- .../MCM/PLC/AOIs/AOI_FLIP_FLOP_AOI.L5X | 2 +- PLC/Simulations/MCM/PLC/AOIs/AOI_MCM_AOI.L5X | 238 ++++++++++++----- PLC/Simulations/MCM/PLC/MCM.L5X | 247 +++++++++++++----- .../MCM/PLC/UDTs/UDT_MCM_DataType.L5X | 238 ++++++++++++----- 5 files changed, 525 insertions(+), 377 deletions(-) delete mode 100644 PLC/Simulations/MCM/OIP/MCM.tscn diff --git a/PLC/Simulations/MCM/OIP/MCM.tscn b/PLC/Simulations/MCM/OIP/MCM.tscn deleted file mode 100644 index ea5403a..0000000 --- a/PLC/Simulations/MCM/OIP/MCM.tscn +++ /dev/null @@ -1,177 +0,0 @@ -[gd_scene load_steps=9 format=4 uid="uid://7ipehu333jij"] - -[ext_resource type="PackedScene" uid="uid://dyhvoundu2kqc" path="res://parts/Building.tscn" id="1_2vilj"] -[ext_resource type="PackedScene" uid="uid://dvjrx5crpqs5f" path="res://parts/SideGuard.tscn" id="3_3lj72"] -[ext_resource type="Shader" uid="uid://wtu5yyfpdcgl" path="res://assets/3DModels/Shaders/MetalShaderSideGuard.tres" id="4_02owk"] -[ext_resource type="PackedScene" uid="uid://gddgyvex6gdj" path="res://parts/PushButton.tscn" id="5_02owk"] -[ext_resource type="Script" uid="uid://bympdptikwp6f" path="res://MCM.gd" id="5_2u643"] - -[sub_resource type="ShaderMaterial" id="ShaderMaterial_02owk"] -render_priority = 0 -shader = ExtResource("4_02owk") -shader_parameter/Scale = 1.9343237 -shader_parameter/Metallic = 0.94 -shader_parameter/Roughness = 0.5 -shader_parameter/Specular = 0.5 - -[sub_resource type="ArrayMesh" id="ArrayMesh_gn6s2"] -_surfaces = [{ -"aabb": AABB(-0.5, -0.00427932, -1.12983, 1, 0.604281, 0.169856), -"format": 34896613377, -"index_count": 204, -"index_data": PackedByteArray("AAACAAEAAAADAAIADQACAAwADQABAAIAAwAJAAoAAwAAAAkACAAKAAkACAALAAoACAAHAAsACAAGAAcADgAMAA8ADgANAAwABAAPAAUABAAOAA8ABAARABAABAAFABEAEgAUABUAEgATABQAHwAUABMAHwAeABQAFQAbABIAFQAcABsAGgAcAB0AGgAbABwAGgAZABgAGgAdABkAIAAeAB8AIAAhAB4AFgAhACAAFgAXACEAFgAjABcAFgAiACMAAQASAAAAAQATABIAAwAUAAIAAwAVABQAAgAeAAwAAgAUAB4ACgAVAAMACgAcABUAAAAbAAkAAAASABsACQAaAAgACQAbABoACwAcAAoACwAdABwABwAdAAsABwAZAB0ACAAYAAYACAAaABgADAAhAA8ADAAeACEADQATAAEADQAfABMADgAfAA0ADgAgAB8ADwAXAAUADwAhABcAEAAWAAQAEAAiABYABAAgAA4ABAAWACAABQAjABEABQAXACMABgAZAAcABgAYABkAEQAiABAAEQAjACIA"), -"name": "BeltTopDown", -"primitive": 3, -"uv_scale": Vector4(0, 0, 0, 0), -"vertex_count": 36, -"vertex_data": PackedByteArray("AADMEI2IAAAAAPkeREsAAP//+R5ESwAA///MEI2IAAAAAIX3ukoAAP//hfe6SgAAAAASAEDhAAD//xIAQOEAAAAAKxC/4QAAAADNEIvfAAD//80Qi98AAP//KxC/4QAA//+KVhxLAAAAAIpWHEsAAAAAHfTESgAA//8d9MRKAAAAAIX3AAAAAP//hfcAAAAAAABFGVuTAAAAAPoiZmkAAP//+iJmaQAA//9FGVuTAAAAAP//yGgAAP///v/IaAAAAAAAAGX/AAD//wAAZf8AAAAAlhP+/wAAAABGGT7sAAD//0YZPuwAAP//lhP//wAA//+MVkFpAAAAAIxWQWkAAAAAIfToaAAA//8g9OhoAAAAAP//AAAAAP///v8AAAAA") -}] -blend_shape_mode = 0 - -[sub_resource type="ArrayMesh" id="ArrayMesh_2u643"] -resource_name = "RCSideGuard_RCSideGuard" -_surfaces = [{ -"aabb": AABB(-0.5, -0.00427932, -1.12983, 1, 0.604281, 0.169856), -"attribute_data": PackedByteArray("lm///5Zv//+Wb///lm///110//8AABfVAAAX1V10//8AAHopXXRhVAAAeilddGFUlm9hVJZvYVSWb2FUiFkX1YhZF9WIWRfViFl6KYhZeimIWXopiFl6KV10//9ddP//XXT//110YVRddGFUXXRhVEx8//9MfP//d2X//5t+//93Zf//m37//3dlYVSafmFUd2VhVJp+YVRMfGFUTHxhVOQUeinkFHop5BR6KeQUF9XkFBfV5BQX1bpUF9W6VBfVulQX1bpUeim6VHopulR6KXdlF9V3ZRfVd2UX1Xdleil3ZXopd2V6KZZv//+Wb///lm///5Zv//9ddP//AAAX1QAAF9VddP//XXRhVAAAeikAAHopXXRhVJZvYVSWb2FUlm9hVJZvYVSIWRfViFkX1YhZF9WIWRfViFl6KYhZeimIWXopiFl6KV10//9ddP//XXT//110YVRddGFUXXRhVEx8//9MfP//THz//0x8//93Zf//m37//3dl//+bfv//mn5hVHdlYVSafmFUd2VhVEx8YVRMfGFUTHxhVEx8YVTkFHop5BR6KeQUeinkFBfV5BQX1eQUF9W6VBfVulQX1bpUF9W6VBfVulR6KbpUeim6VHopulR6KXdlF9V3ZRfVd2UX1Xdleil3ZXopd2V6KQ=="), -"format": 34896613399, -"index_count": 204, -"index_data": PackedByteArray("AgAJAAcAAgAMAAkALAAIACgALAAGAAgADAAgACIADAADACAAHQAjACEAHQAmACMAHQAaACYAHQAYABoALwApADEALwAtACkAEQAyABMAEQAwADIAEAA3ADUAEAASADcAPQBCAEYAPQBBAEIAbQBDAEAAbQBpAEMARwBeADwARwBhAF4AWgBgAGUAWgBfAGAAWwBWAFQAWwBkAFYAcQBoAGwAcQByAGgATABzAHAATABPAHMATQB6AE4ATQB4AHoABAA7AAAABAA+ADsADgBFAAsADgBIAEUACgBqACoACgBEAGoAJABJAA0AJABjAEkAAQBcAB4AAQA6AFwAHwBYABwAHwBdAFgAJwBiACUAJwBnAGIAGwBmACcAGwBXAGYAHABSABYAHABZAFIAKgB0ADMAKgBqAHQAKwA/AAUAKwBrAD8ALgBrACsALgBuAGsAMwBQABQAMwB1AFAANABKAA8ANAB2AEoADwBvAC4ADwBLAG8AFQB7ADkAFQBRAHsAFwBVABkAFwBTAFUAOAB3ADYAOAB5AHcA"), -"material": SubResource("ShaderMaterial_02owk"), -"name": "BeltTopDown", -"primitive": 3, -"uv_scale": Vector4(0, 0, 0, 0), -"vertex_count": 124, -"vertex_data": PackedByteArray("AADMEI2IH88AAMwQjYgdwwAAzBCNiNjdAADMEI2I1t0AAPkeREu11gAA+R5ES+jfAAD5HkRLVPMAAPkeREtU8///+R5ES1Tz///5HkRLVPP///keREvo3///+R5ES7XW///MEI2I1t3//8wQjYgdw///zBCNiCHPAACF97pKqaUAAIX3ukqf6QAAhfe6SqDp//+F97pKn+n//4X3ukqg6f//hfe6Sqml//+F97pKqaUAABIAQOH/vwAAEgBA4VjAAAASAEDhv////xIAQOFYwP//EgBA4b////8SAEDh/78AACsQv+GqowAAKxC/4QP1AADNEIvf4rQAAM0Qi9/itAAAzRCL30DfAADNEIvfQN///80Qi99A3///zRCL30Df///NEIvf4rT//80Qi9/itP//KxC/4QP1//8rEL/hqqP//4pWHEv5////ilYcS/v///+KVhxL/78AAIpWHEv/vwAAilYcS/n/AACKVhxL+/8AAB30xEqiqgAAHfTESvH/AAAd9MRK8v///x30xErx////HfTESvL///8d9MRKoqoAAIX3AAD/vwAAhfcAAFTVAACF9wAA/////4X3AABU1f//hfcAAP////+F9wAA/78AAEUZW5Pk3AAARRlbk8ulAABFGVuT2d0AAEUZW5PBzQAA+iJmaZXQAAD6ImZpfrcAAPoiZmnzwQAA+iJmacPP///6ImZp88H///oiZmnwwf//+iJmaX63///6ImZpldD//0UZW5Pgwv//RRlbk8HN//9FGVuTzaX//0UZW5Pk3AAA///IaJ/pAAD//8ho5L8AAP//yGjrxQAA///IaALG///+/8hon+n///7/yGgBxv///v/IaOS////+/8hon+kAAAAAZf//vwAAAABl/1jAAAAAAGX//7///wAAZf9YwP//AABl//+///8AAGX//78AAJYT/v+B1AAAlhP+/z3AAACWE/7/d8EAAJYT/v+awQAARhk+7EHfAABGGT7sX6sAAEYZPuyqzAAARhk+7GjB//9GGT7sqcz//0YZPuxD3///Rhk+7F6r//9GGT7sQd///5YT//93wf//lhP//4LM//+WE///PcD//5YT//+B1P//jFZBaf+///+MVkFp/7///4xWQWn/vwAAjFZBaf+/AACMVkFp/78AAIxWQWn/vwAAIfToaP+/AAAh9Oho/78AACH06Gj/vwAAIfToaP+///8g9Oho/7///yD06Gj/v///IPToaP+///8g9Oho/78AAP//AAD/vwAA//8AAP//AAD//wAAVNX///7/AAD//////v8AAFTV///+/wAA/79YOle6EjUStalQqVCoUKhQMD4wvuBn4Od0RnRGdEZ0RnRGdEZ0RnRG4GceGDA+zkGoUKhQEjXsSlo6pEWx0Eyv/0r/Sv9K/0r/Sv9K/0r/SrHQslCx0LJQ/3///wAA/3/cv9y/AAD/f9y/3L//fwAAzq0v0qVFpUVoypa1aMqWtfNP80/yT/JP80/zT/JP8k9oymhKaMpoSqVFpUXOrc8tAkACQAFAAUD/fwAA/3///wJAAkABQAFA/3///wdAB0AGQAZAB0AHQAZABkD/fwAA/3///1RVVFX///9/VFVUVf///3//fwAAPZ/B4JROk86t3lcvKO3NKKHIXLcCMwGzO+wp7IDwdyuHz0YR1hPEEwIz/UyhyKJIltOAFNPKayWJTnUxPZ89H/9///+MJYulEx3eHA+6CB3+6f80JuPw4owlc1r/fwAA/3///wAA/3+LAHP/AAD/f4sAc///fwAAIcLdvVMzUrNQ03APwBGKEvJ/8v+XPZa9AMmBJPnSJw8o8h4pGOANMJg9Z0LyfwwAb+057t7x4ChTM6xMIcIhQvX/CQDx/w0A/38AAP9////1/wkA8f8NAPU/9L8JwPS/uP8bAB8ACwDz/9//4/9GAPU/CkAJwApA/3///////39U1aoq////f1TVqir/fwAA") -}] -blend_shape_mode = 0 -shadow_mesh = SubResource("ArrayMesh_gn6s2") - -[node name="Simulation" type="Node3D"] - -[node name="Building" parent="." instance=ExtResource("1_2vilj")] -metadata/edit_lock = true -metadata/edit_group = true - -[node name="SideGuard" parent="." instance=ExtResource("3_3lj72")] -transform = Transform3D(1.9343237, 0, 0, 0, 5.1363015, 0, 0, 0, 15.127822, -2.098621, -3.0168223, 22.859678) -mesh = SubResource("ArrayMesh_2u643") -length = 1.9343237 - -[node name="POWER_ON" parent="." instance=ExtResource("5_02owk")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.9744997, -0.38508332, 6.6063375) -text = "POWER ON" -toggle = true -pressed = true -lamp = true -button_color = Color(1, 1, 1, 1) -enable_comms = true -pushbutton_tag_name = "POWER_ON_PB" -lamp_tag_name = "POWER_ON_PB_LT" - -[node name="MOTOR_FAULT" parent="." instance=ExtResource("5_02owk")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.3379102, -0.38508332, 6.6063375) -text = "MOTOR FAULT" -button_color = Color(0.9666667, 1, 0, 1) -enable_comms = true -pushbutton_tag_name = "MOTOR_FAULT_RESET_PB" -lamp_tag_name = "MOTOR_FAULT_RESET_PB_LT" - -[node name="POWER_BRANCH_FAULT_RESET" parent="." instance=ExtResource("5_02owk")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.7244716, -0.38508332, 6.6063375) -text = "POWER BRANCH FAULT RESET" -button_color = Color(0.96862745, 1, 0, 1) -enable_comms = true -pushbutton_tag_name = "POWER_BRANCH_FAULT_RESET_PB" -lamp_tag_name = "POWER_BRANCH_FAULT_RESET_PB_LT" - -[node name="LOW_AIR_PRESSURE" parent="." instance=ExtResource("5_02owk")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.1599557, -0.38508332, 6.6063375) -text = "LOW AIR PRESSURE" -button_color = Color(0, 0.049999706, 1, 1) -enable_comms = true -pushbutton_tag_name = "LOW_AIR_PRESSURE_RESET_PB" -lamp_tag_name = "LOW_AIR_PRESSURE_RESET_PB_LT" - -[node name="E-STOP_ACTUATED" parent="." instance=ExtResource("5_02owk")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.9744997, -0.9958613, 6.6063375) -text = "E-STOP ACTUATED" -enable_comms = true -pushbutton_tag_name = "E_STOP_ACTUATED_PB" -lamp_tag_name = "E_STOP_ACTUATED_PB_LT" - -[node name="START" parent="." instance=ExtResource("5_02owk")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.3379102, -0.9958613, 6.6063375) -text = "START" -button_color = Color(5.7997554e-06, 0.68136346, 0.058624905, 1) -enable_comms = true -pushbutton_tag_name = "START_PB" -lamp_tag_name = "START_PB_LT" - -[node name="JAM_RESTART" parent="." instance=ExtResource("5_02owk")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.1599557, -0.9958613, 6.6063375) -text = "JAM RESTART" -button_color = Color(1, 1, 1, 1) -enable_comms = true -pushbutton_tag_name = "JAM_RESTART_PB" -lamp_tag_name = "JAM_RESTART_PB_LT" - -[node name="EMERGENCY_STOP" parent="." instance=ExtResource("5_02owk")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.9744997, -1.6067358, 6.6063375) -text = "EMERGENCY STOP" -toggle = true -normally_closed = true -enable_comms = true -pushbutton_tag_name = "EMERGENCY_STOP_PB" -lamp_tag_name = "EMERGENCY_STOP_PB_LT" - -[node name="STOP" parent="." instance=ExtResource("5_02owk")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.3379102, -1.6067358, 6.6063375) -normally_closed = true -enable_comms = true -pushbutton_tag_name = "STOP_PB" -lamp_tag_name = "STOP_PB_LT" - -[node name="BATTERY_FAULT" parent="." instance=ExtResource("5_02owk")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, -1.6423613, -0.67535853, 6.487621) -text = "BATTERY FAULT" -toggle = true -enable_comms = true -pushbutton_tag_name = "UPS_BATTERY_FAULT_PB" -lamp_tag_name = "UPS_BATTERY_FAULT_PB_LT" - -[node name="ON_BATTERY" parent="." instance=ExtResource("5_02owk")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, -2.1884327, -1.5352063, 6.487621) -text = "ON BATTERY" -toggle = true -enable_comms = true -pushbutton_tag_name = "ON_BATTERY_PB" -lamp_tag_name = "ON_BATTERY_PB_LT" - -[node name="UPS_BATTARY_LOW" parent="." instance=ExtResource("5_02owk")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, -2.4660864, -0.5395664, 6.487621) -text = "UPS BATTERY LOW" -toggle = true -enable_comms = true -pushbutton_tag_name = "UPS_BATTERY_LOW_PB" -lamp_tag_name = "UPS_BATTERY_LOW_PB_LT" - -[node name="NAT_SWITCH" parent="." instance=ExtResource("5_02owk")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, -3.0257194, -1.6492424, 6.487621) -text = "NAT SWITCH" -toggle = true -enable_comms = true -pushbutton_tag_name = "NAT_SWITCH_PB" -lamp_tag_name = "NAT_SWITCH_PB_LT" - -[node name="FIRE_INTERFACE" parent="." instance=ExtResource("5_02owk")] -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, -1.2769504, -1.3426788, 6.487621) -text = "FIRE INTERFACE" -toggle = true -normally_closed = true -lamp = true -enable_comms = true -pushbutton_tag_name = "FIRE_INTERFACE_PB" -lamp_tag_name = "FIRE_INTERFACE_PB_LT" - -[node name="Node" type="Node" parent="."] -script = ExtResource("5_2u643") diff --git a/PLC/Simulations/MCM/PLC/AOIs/AOI_FLIP_FLOP_AOI.L5X b/PLC/Simulations/MCM/PLC/AOIs/AOI_FLIP_FLOP_AOI.L5X index e9a1c29..5424c99 100644 --- a/PLC/Simulations/MCM/PLC/AOIs/AOI_FLIP_FLOP_AOI.L5X +++ b/PLC/Simulations/MCM/PLC/AOIs/AOI_FLIP_FLOP_AOI.L5X @@ -1,5 +1,5 @@  - + diff --git a/PLC/Simulations/MCM/PLC/AOIs/AOI_MCM_AOI.L5X b/PLC/Simulations/MCM/PLC/AOIs/AOI_MCM_AOI.L5X index fdee5cc..1716001 100644 --- a/PLC/Simulations/MCM/PLC/AOIs/AOI_MCM_AOI.L5X +++ b/PLC/Simulations/MCM/PLC/AOIs/AOI_MCM_AOI.L5X @@ -1,6 +1,6 @@  - + @@ -122,6 +122,11 @@ Faulted]]> @@ -264,7 +269,7 @@ Faulted]]> - @@ -342,10 +347,10 @@ Faulted]]> - + - + @@ -353,10 +358,10 @@ Faulted]]> - + - + @@ -680,6 +685,104 @@ Faulted]]> + +” ) and pushes it into the MCM control log. The log word CTRL.CMD.Log carries the message, while CTRL.CMD.Log_Quantity increments the running count. The MCM mirrors both values to CTRL.STS.Log and CTRL.STS.Log_Quantity so the operator panel can display them. +At the same time, the MCM keeps an internal Acknowledge latch: each AOI pulses Un-acknowledge so that any new or persisting fault keeps resurfacing until the operator cycles through and acknowledges it. This ensures that fresh problems never scroll off the list unnoticed. + +The module asserts System_Started whenever a start command is present and all interlocks—Stop command, every E-Stop, and the fire relay—are healthy; both coils drop the instant any interlock fails. + +Indicator lamps behave as follows: +• Motor_Fault_Reset_PB_LT_O flashes while CTRL.CMD.VFD_Faulted is active and turns solid once the fault clears but Motor_Was_Faulted is still set. +• Jam_Restart_PB_LT_O is solid during a jam fault and flashes when an encoder fault is present. +• EStop_Actuated_LT_O flashes during a live remote E-Stop and stays solid until EStop_Was_Actuated is cleared. +• Low_Air_Pressure_Reset_PB_LT_O flashes for a live low-air fault and remains solid while Low_Air_Pressure_Fault_Was_Present is true. +• Power_Branch_Fault_Reset_PB_LT_O flashes during an active branch fault and remains solid while Power_Branch_Was_Faulted is set. + +Each push-button transmits a four-state value to the HMI: state 1 idle/dark, state 2 lit, state 3 pressed-lit, and state 4 pressed-dark. +Start_PB_LT_O lights whenever the system is running. + +HMI.STATE cascade – the lower move wins: +• System_Started true writes 9. +• System_Started false writes 0. +• Motor_Was_Faulted writes 1. +• Power_Branch_Was_Faulted writes 2. +• Low_Air_Pressure_Fault_Was_Present writes 3. +• Encoder_Fault writes 4. +• Jam_Fault writes 5. +• Communication_Faulted writes 6. +• EStop_Was_Actuated writes 7. +• EStopped_Locally writes 8 and has the highest priority. + +When HMI.Setup_Motor_Speeds is asserted, the module broadcasts the configured speed set-points to every drive in the system. + +A housekeeping section clears the command word each scan and unlatches all momentary HMI bits, making every press a clean one-shot. + +Command bits +The module receives CTRL.CMD.Log. +The module receives CTRL.CMD.Log_Quantity. +The module receives CTRL.CMD.Acknowledge_Log. +The module receives CTRL.CMD.Unacknowledge_All_Logs. +The module receives CTRL.CMD.VFD_Was_Faulted. +The module receives CTRL.CMD.Power_Branch_Was_Faulted. +The module receives CTRL.CMD.Low_Air_Pressure_Fault_Was_Present. +The module receives CTRL.CMD.Encoder_Fault. +The module receives CTRL.CMD.Jam_Fault. +The module receives CTRL.CMD.Communication_Faulted. +The module receives CTRL.CMD.EStop_Was_Actuated. +The module receives CTRL.CMD.VFD_Faulted. +The module receives CTRL.CMD.EStop_Actuated. +The module receives CTRL.CMD.Low_Air_Pressure_Fault. +The module receives CTRL.CMD.Power_Branch_Fault. + +Status bits +The module sets CTRL.STS.Log. +The module sets CTRL.STS.Log_Quantity. +The module sets CTRL.STS.Acknowledge_Log. +The module sets CTRL.STS.Unacknowledge_All_Logs. +The module sets CTRL.STS.Communication_Faulted. +The module sets CTRL.STS.System_Started. +The module sets CTRL.STS.System_Start_Requested. +The module sets CTRL.STS.Setup_Motor_Speeds. +The module sets CTRL.STS.VFD_Fault_Reset_Requested. +The module sets CTRL.STS.Power_Branch_Fault_Reset_Requested. +The module sets CTRL.STS.Low_Air_Pressure_Fault_Reset_Requested. +The module sets CTRL.STS.Jam_Reset_Requested. + +HMI bits +The HMI exchanges HMI.Start_PB. +The HMI exchanges HMI.Stop_PB. +The HMI exchanges HMI.Setup_Motor_Speeds. +The HMI exchanges HMI.Motor_Fault_Reset_PB. +The HMI exchanges HMI.Power_Branch_Fault_Reset_PB. +The HMI exchanges HMI.Low_Air_Pressure_Reset_PB. +The HMI exchanges HMI.Jam_Restart_PB. +The HMI displays HMI.STATE. +The HMI displays HMI.Start_PB_STATE. +The HMI displays HMI.Motor_Fault_Reset_PB_STATE. +The HMI displays HMI.Power_Branch_Fault_Reset_PB_STATE. +The HMI displays HMI.Low_Air_Pressure_Reset_PB_STATE. +The HMI displays HMI.Jam_Restart_PB_STATE. +The HMI displays HMI.EStop_Actuated_LT. +The HMI displays HMI.Local_Estop_LT. + +Alarm bits +The system raises HMI.Alarm.Start_PB_Pressed. +The system raises HMI.Alarm.Stop_PB_Pressed. +The system raises HMI.Alarm.Motor_Fault_Reset_PB_Pressed. +The system raises HMI.Alarm.Jam_Restart_PB_Pressed. +The system raises HMI.Alarm.Low_Air_Pressure_Reset_PB_Pressed. +The system raises HMI.Alarm.Power_Branch_Fault_Reset_PB_Pressed. +The system raises HMI.Alarm.UPS_Battery_Fault. +The system raises HMI.Alarm.On_UPS_Battery. +The system raises HMI.Alarm.UPS_Battery_Low. +The system raises HMI.Alarm.NAT_Switch_Fault. +The system raises HMI.Alarm.Fire_Relay_De_Energized. +The system raises HMI.Alarm.EStopped_Locally. +]]> + @@ -756,60 +859,65 @@ Faulted]]> - + - + - + - + - + - + - + - + - + - + - + + + + + + @@ -818,172 +926,172 @@ Faulted]]> - + - + - + - + - + - + - + - + - + - - - - - - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + - + - + - + - + - + - + - + - + - + - + - + diff --git a/PLC/Simulations/MCM/PLC/MCM.L5X b/PLC/Simulations/MCM/PLC/MCM.L5X index 93f2dac..d12e30b 100644 --- a/PLC/Simulations/MCM/PLC/MCM.L5X +++ b/PLC/Simulations/MCM/PLC/MCM.L5X @@ -1,6 +1,6 @@  - - + @@ -128,6 +128,11 @@ Faulted]]> @@ -278,7 +283,7 @@ Faulted]]> - @@ -356,10 +361,10 @@ Faulted]]> - + - + @@ -367,10 +372,10 @@ Faulted]]> - + - + @@ -694,6 +699,104 @@ Faulted]]> + +” ) and pushes it into the MCM control log. The log word CTRL.CMD.Log carries the message, while CTRL.CMD.Log_Quantity increments the running count. The MCM mirrors both values to CTRL.STS.Log and CTRL.STS.Log_Quantity so the operator panel can display them. +At the same time, the MCM keeps an internal Acknowledge latch: each AOI pulses Un-acknowledge so that any new or persisting fault keeps resurfacing until the operator cycles through and acknowledges it. This ensures that fresh problems never scroll off the list unnoticed. + +The module asserts System_Started whenever a start command is present and all interlocks—Stop command, every E-Stop, and the fire relay—are healthy; both coils drop the instant any interlock fails. + +Indicator lamps behave as follows: +• Motor_Fault_Reset_PB_LT_O flashes while CTRL.CMD.VFD_Faulted is active and turns solid once the fault clears but Motor_Was_Faulted is still set. +• Jam_Restart_PB_LT_O is solid during a jam fault and flashes when an encoder fault is present. +• EStop_Actuated_LT_O flashes during a live remote E-Stop and stays solid until EStop_Was_Actuated is cleared. +• Low_Air_Pressure_Reset_PB_LT_O flashes for a live low-air fault and remains solid while Low_Air_Pressure_Fault_Was_Present is true. +• Power_Branch_Fault_Reset_PB_LT_O flashes during an active branch fault and remains solid while Power_Branch_Was_Faulted is set. + +Each push-button transmits a four-state value to the HMI: state 1 idle/dark, state 2 lit, state 3 pressed-lit, and state 4 pressed-dark. +Start_PB_LT_O lights whenever the system is running. + +HMI.STATE cascade – the lower move wins: +• System_Started true writes 9. +• System_Started false writes 0. +• Motor_Was_Faulted writes 1. +• Power_Branch_Was_Faulted writes 2. +• Low_Air_Pressure_Fault_Was_Present writes 3. +• Encoder_Fault writes 4. +• Jam_Fault writes 5. +• Communication_Faulted writes 6. +• EStop_Was_Actuated writes 7. +• EStopped_Locally writes 8 and has the highest priority. + +When HMI.Setup_Motor_Speeds is asserted, the module broadcasts the configured speed set-points to every drive in the system. + +A housekeeping section clears the command word each scan and unlatches all momentary HMI bits, making every press a clean one-shot. + +Command bits +The module receives CTRL.CMD.Log. +The module receives CTRL.CMD.Log_Quantity. +The module receives CTRL.CMD.Acknowledge_Log. +The module receives CTRL.CMD.Unacknowledge_All_Logs. +The module receives CTRL.CMD.VFD_Was_Faulted. +The module receives CTRL.CMD.Power_Branch_Was_Faulted. +The module receives CTRL.CMD.Low_Air_Pressure_Fault_Was_Present. +The module receives CTRL.CMD.Encoder_Fault. +The module receives CTRL.CMD.Jam_Fault. +The module receives CTRL.CMD.Communication_Faulted. +The module receives CTRL.CMD.EStop_Was_Actuated. +The module receives CTRL.CMD.VFD_Faulted. +The module receives CTRL.CMD.EStop_Actuated. +The module receives CTRL.CMD.Low_Air_Pressure_Fault. +The module receives CTRL.CMD.Power_Branch_Fault. + +Status bits +The module sets CTRL.STS.Log. +The module sets CTRL.STS.Log_Quantity. +The module sets CTRL.STS.Acknowledge_Log. +The module sets CTRL.STS.Unacknowledge_All_Logs. +The module sets CTRL.STS.Communication_Faulted. +The module sets CTRL.STS.System_Started. +The module sets CTRL.STS.System_Start_Requested. +The module sets CTRL.STS.Setup_Motor_Speeds. +The module sets CTRL.STS.VFD_Fault_Reset_Requested. +The module sets CTRL.STS.Power_Branch_Fault_Reset_Requested. +The module sets CTRL.STS.Low_Air_Pressure_Fault_Reset_Requested. +The module sets CTRL.STS.Jam_Reset_Requested. + +HMI bits +The HMI exchanges HMI.Start_PB. +The HMI exchanges HMI.Stop_PB. +The HMI exchanges HMI.Setup_Motor_Speeds. +The HMI exchanges HMI.Motor_Fault_Reset_PB. +The HMI exchanges HMI.Power_Branch_Fault_Reset_PB. +The HMI exchanges HMI.Low_Air_Pressure_Reset_PB. +The HMI exchanges HMI.Jam_Restart_PB. +The HMI displays HMI.STATE. +The HMI displays HMI.Start_PB_STATE. +The HMI displays HMI.Motor_Fault_Reset_PB_STATE. +The HMI displays HMI.Power_Branch_Fault_Reset_PB_STATE. +The HMI displays HMI.Low_Air_Pressure_Reset_PB_STATE. +The HMI displays HMI.Jam_Restart_PB_STATE. +The HMI displays HMI.EStop_Actuated_LT. +The HMI displays HMI.Local_Estop_LT. + +Alarm bits +The system raises HMI.Alarm.Start_PB_Pressed. +The system raises HMI.Alarm.Stop_PB_Pressed. +The system raises HMI.Alarm.Motor_Fault_Reset_PB_Pressed. +The system raises HMI.Alarm.Jam_Restart_PB_Pressed. +The system raises HMI.Alarm.Low_Air_Pressure_Reset_PB_Pressed. +The system raises HMI.Alarm.Power_Branch_Fault_Reset_PB_Pressed. +The system raises HMI.Alarm.UPS_Battery_Fault. +The system raises HMI.Alarm.On_UPS_Battery. +The system raises HMI.Alarm.UPS_Battery_Low. +The system raises HMI.Alarm.NAT_Switch_Fault. +The system raises HMI.Alarm.Fire_Relay_De_Energized. +The system raises HMI.Alarm.EStopped_Locally. +]]> + @@ -770,60 +873,65 @@ Faulted]]> - + - + - + - + - + - + - + - + - + - + - + + + + + + @@ -832,172 +940,172 @@ Faulted]]> - + - + - + - + - + - + - + - + - + - - - - - - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + - + - + - + - + - + - + - + - + - + - + - + @@ -1183,8 +1291,8 @@ Faulted]]> - @@ -1234,7 +1342,7 @@ Faulted]]> - + @@ -1318,6 +1426,7 @@ Faulted]]> + diff --git a/PLC/Simulations/MCM/PLC/UDTs/UDT_MCM_DataType.L5X b/PLC/Simulations/MCM/PLC/UDTs/UDT_MCM_DataType.L5X index 50c7fa1..3dc5097 100644 --- a/PLC/Simulations/MCM/PLC/UDTs/UDT_MCM_DataType.L5X +++ b/PLC/Simulations/MCM/PLC/UDTs/UDT_MCM_DataType.L5X @@ -1,5 +1,5 @@  - + @@ -133,6 +133,11 @@ Faulted]]> @@ -275,7 +280,7 @@ Faulted]]> - @@ -353,10 +358,10 @@ Faulted]]> - + - + @@ -364,10 +369,10 @@ Faulted]]> - + - + @@ -691,6 +696,104 @@ Faulted]]> + +” ) and pushes it into the MCM control log. The log word CTRL.CMD.Log carries the message, while CTRL.CMD.Log_Quantity increments the running count. The MCM mirrors both values to CTRL.STS.Log and CTRL.STS.Log_Quantity so the operator panel can display them. +At the same time, the MCM keeps an internal Acknowledge latch: each AOI pulses Un-acknowledge so that any new or persisting fault keeps resurfacing until the operator cycles through and acknowledges it. This ensures that fresh problems never scroll off the list unnoticed. + +The module asserts System_Started whenever a start command is present and all interlocks—Stop command, every E-Stop, and the fire relay—are healthy; both coils drop the instant any interlock fails. + +Indicator lamps behave as follows: +• Motor_Fault_Reset_PB_LT_O flashes while CTRL.CMD.VFD_Faulted is active and turns solid once the fault clears but Motor_Was_Faulted is still set. +• Jam_Restart_PB_LT_O is solid during a jam fault and flashes when an encoder fault is present. +• EStop_Actuated_LT_O flashes during a live remote E-Stop and stays solid until EStop_Was_Actuated is cleared. +• Low_Air_Pressure_Reset_PB_LT_O flashes for a live low-air fault and remains solid while Low_Air_Pressure_Fault_Was_Present is true. +• Power_Branch_Fault_Reset_PB_LT_O flashes during an active branch fault and remains solid while Power_Branch_Was_Faulted is set. + +Each push-button transmits a four-state value to the HMI: state 1 idle/dark, state 2 lit, state 3 pressed-lit, and state 4 pressed-dark. +Start_PB_LT_O lights whenever the system is running. + +HMI.STATE cascade – the lower move wins: +• System_Started true writes 9. +• System_Started false writes 0. +• Motor_Was_Faulted writes 1. +• Power_Branch_Was_Faulted writes 2. +• Low_Air_Pressure_Fault_Was_Present writes 3. +• Encoder_Fault writes 4. +• Jam_Fault writes 5. +• Communication_Faulted writes 6. +• EStop_Was_Actuated writes 7. +• EStopped_Locally writes 8 and has the highest priority. + +When HMI.Setup_Motor_Speeds is asserted, the module broadcasts the configured speed set-points to every drive in the system. + +A housekeeping section clears the command word each scan and unlatches all momentary HMI bits, making every press a clean one-shot. + +Command bits +The module receives CTRL.CMD.Log. +The module receives CTRL.CMD.Log_Quantity. +The module receives CTRL.CMD.Acknowledge_Log. +The module receives CTRL.CMD.Unacknowledge_All_Logs. +The module receives CTRL.CMD.VFD_Was_Faulted. +The module receives CTRL.CMD.Power_Branch_Was_Faulted. +The module receives CTRL.CMD.Low_Air_Pressure_Fault_Was_Present. +The module receives CTRL.CMD.Encoder_Fault. +The module receives CTRL.CMD.Jam_Fault. +The module receives CTRL.CMD.Communication_Faulted. +The module receives CTRL.CMD.EStop_Was_Actuated. +The module receives CTRL.CMD.VFD_Faulted. +The module receives CTRL.CMD.EStop_Actuated. +The module receives CTRL.CMD.Low_Air_Pressure_Fault. +The module receives CTRL.CMD.Power_Branch_Fault. + +Status bits +The module sets CTRL.STS.Log. +The module sets CTRL.STS.Log_Quantity. +The module sets CTRL.STS.Acknowledge_Log. +The module sets CTRL.STS.Unacknowledge_All_Logs. +The module sets CTRL.STS.Communication_Faulted. +The module sets CTRL.STS.System_Started. +The module sets CTRL.STS.System_Start_Requested. +The module sets CTRL.STS.Setup_Motor_Speeds. +The module sets CTRL.STS.VFD_Fault_Reset_Requested. +The module sets CTRL.STS.Power_Branch_Fault_Reset_Requested. +The module sets CTRL.STS.Low_Air_Pressure_Fault_Reset_Requested. +The module sets CTRL.STS.Jam_Reset_Requested. + +HMI bits +The HMI exchanges HMI.Start_PB. +The HMI exchanges HMI.Stop_PB. +The HMI exchanges HMI.Setup_Motor_Speeds. +The HMI exchanges HMI.Motor_Fault_Reset_PB. +The HMI exchanges HMI.Power_Branch_Fault_Reset_PB. +The HMI exchanges HMI.Low_Air_Pressure_Reset_PB. +The HMI exchanges HMI.Jam_Restart_PB. +The HMI displays HMI.STATE. +The HMI displays HMI.Start_PB_STATE. +The HMI displays HMI.Motor_Fault_Reset_PB_STATE. +The HMI displays HMI.Power_Branch_Fault_Reset_PB_STATE. +The HMI displays HMI.Low_Air_Pressure_Reset_PB_STATE. +The HMI displays HMI.Jam_Restart_PB_STATE. +The HMI displays HMI.EStop_Actuated_LT. +The HMI displays HMI.Local_Estop_LT. + +Alarm bits +The system raises HMI.Alarm.Start_PB_Pressed. +The system raises HMI.Alarm.Stop_PB_Pressed. +The system raises HMI.Alarm.Motor_Fault_Reset_PB_Pressed. +The system raises HMI.Alarm.Jam_Restart_PB_Pressed. +The system raises HMI.Alarm.Low_Air_Pressure_Reset_PB_Pressed. +The system raises HMI.Alarm.Power_Branch_Fault_Reset_PB_Pressed. +The system raises HMI.Alarm.UPS_Battery_Fault. +The system raises HMI.Alarm.On_UPS_Battery. +The system raises HMI.Alarm.UPS_Battery_Low. +The system raises HMI.Alarm.NAT_Switch_Fault. +The system raises HMI.Alarm.Fire_Relay_De_Energized. +The system raises HMI.Alarm.EStopped_Locally. +]]> + @@ -767,60 +870,65 @@ Faulted]]> - + - + - + - + - + - + - + - + - + - + - + + + + + + @@ -829,172 +937,172 @@ Faulted]]> - + - + - + - + - + - + - + - + - + - - - - - - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + - + - + - + - + - + - + - + - + - + - + - +