From 2230d1eecc3d426db187dbf1a8b4cb729ff4203f Mon Sep 17 00:00:00 2001 From: gigi mamaladze Date: Wed, 16 Jul 2025 17:13:43 +0400 Subject: [PATCH] MTN6-49 --- PLC/AOIs/AOI_STATION_SS_PB_AOI.L5X | 595 +-- PLC/Simulations/STATION_SS_PB/OIP/SS_PB.tscn | 68 + PLC/Simulations/STATION_SS_PB/OIP/ss.gd | 8 + .../STATION_SS_PB/PLC/AOIs/AOI_DPM_AOI.L5X | 197 + .../PLC/AOIs/AOI_FLIP_FLOP_AOI.L5X | 93 + .../PLC/AOIs/AOI_IO_BLOCK_AOI.L5X | 180 + .../STATION_SS_PB/PLC/AOIs/AOI_MCM_AOI.L5X | 807 ++++ .../PLC/AOIs/AOI_STATION_SS_PB_AOI.L5X | 250 + .../STATION_SS_PB/PLC/AOIs/AOI_VFD_AOI.L5X | 930 ++++ .../STATION_SS_PB/PLC/STATION_SS_PB.L5X | 4194 +++++++++++++++++ .../PLC/UDTs/UDT_DPM_BLOCK_DataType.L5X | 103 + .../PLC/UDTs/UDT_IO_BLOCK_DataType.L5X | 103 + .../PLC/UDTs/UDT_MCM_DataType.L5X | 183 + .../PLC/UDTs/UDT_STATION_DataType.L5X | 144 + .../PLC/UDTs/UDT_VFD_DataType.L5X | 264 ++ PLC/UDTs/STATION_SS_DataTypes.L5X | 815 +--- 16 files changed, 7624 insertions(+), 1310 deletions(-) create mode 100644 PLC/Simulations/STATION_SS_PB/OIP/SS_PB.tscn create mode 100644 PLC/Simulations/STATION_SS_PB/OIP/ss.gd create mode 100644 PLC/Simulations/STATION_SS_PB/PLC/AOIs/AOI_DPM_AOI.L5X create mode 100644 PLC/Simulations/STATION_SS_PB/PLC/AOIs/AOI_FLIP_FLOP_AOI.L5X create mode 100644 PLC/Simulations/STATION_SS_PB/PLC/AOIs/AOI_IO_BLOCK_AOI.L5X create mode 100644 PLC/Simulations/STATION_SS_PB/PLC/AOIs/AOI_MCM_AOI.L5X create mode 100644 PLC/Simulations/STATION_SS_PB/PLC/AOIs/AOI_STATION_SS_PB_AOI.L5X create mode 100644 PLC/Simulations/STATION_SS_PB/PLC/AOIs/AOI_VFD_AOI.L5X create mode 100644 PLC/Simulations/STATION_SS_PB/PLC/STATION_SS_PB.L5X create mode 100644 PLC/Simulations/STATION_SS_PB/PLC/UDTs/UDT_DPM_BLOCK_DataType.L5X create mode 100644 PLC/Simulations/STATION_SS_PB/PLC/UDTs/UDT_IO_BLOCK_DataType.L5X create mode 100644 PLC/Simulations/STATION_SS_PB/PLC/UDTs/UDT_MCM_DataType.L5X create mode 100644 PLC/Simulations/STATION_SS_PB/PLC/UDTs/UDT_STATION_DataType.L5X create mode 100644 PLC/Simulations/STATION_SS_PB/PLC/UDTs/UDT_VFD_DataType.L5X diff --git a/PLC/AOIs/AOI_STATION_SS_PB_AOI.L5X b/PLC/AOIs/AOI_STATION_SS_PB_AOI.L5X index c2b0c57..4ed6316 100644 --- a/PLC/AOIs/AOI_STATION_SS_PB_AOI.L5X +++ b/PLC/AOIs/AOI_STATION_SS_PB_AOI.L5X @@ -1,463 +1,10 @@  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -467,48 +14,33 @@ Stopped by Station Stop PushButton]]> - - - + + + - + - - - - + - + - - - - + - + - - - - - - - - - - + @@ -519,9 +51,6 @@ Stopped by Station Stop PushButton]]> - - - @@ -536,9 +65,6 @@ Stopped by Station Stop PushButton]]> - - - @@ -547,9 +73,6 @@ Stopped by Station Stop PushButton]]> - - - @@ -558,20 +81,27 @@ Stopped by Station Stop PushButton]]> - - - + + + + + + + + + + - + @@ -581,20 +111,15 @@ Stopped by Station Stop PushButton]]> - + - + - - - - - @@ -602,77 +127,97 @@ Stopped by Station Stop PushButton]]> + + + + + - + - + + + + - + + + + + + + + + + + - + - - - - - - - - - - - + - + - + - + - + - + - + - + + + + + + + + + + + @@ -686,7 +231,7 @@ Stopped by Station Stop PushButton]]> - + @@ -696,8 +241,8 @@ Stopped by Station Stop PushButton]]> + - diff --git a/PLC/Simulations/STATION_SS_PB/OIP/SS_PB.tscn b/PLC/Simulations/STATION_SS_PB/OIP/SS_PB.tscn new file mode 100644 index 0000000..5de6b95 --- /dev/null +++ b/PLC/Simulations/STATION_SS_PB/OIP/SS_PB.tscn @@ -0,0 +1,68 @@ +[gd_scene load_steps=7 format=3 uid="uid://c4kgom7yx8f16"] + +[ext_resource type="PackedScene" uid="uid://dyhvoundu2kqc" path="res://parts/Building.tscn" id="1_epuwt"] +[ext_resource type="PackedScene" uid="uid://bqlkj4ar8q1ws" path="res://parts/assemblies/BeltConveyorAssembly.tscn" id="2_b0qny"] +[ext_resource type="PackedScene" uid="uid://gddgyvex6gdj" path="res://parts/PushButton.tscn" id="3_cd3ti"] +[ext_resource type="PackedScene" uid="uid://co2mqmdwpn57w" path="res://parts/BoxSpawner.tscn" id="4_cd3ti"] +[ext_resource type="PackedScene" uid="uid://bl73u0rvt2orv" path="res://parts/Despawner.tscn" id="5_hkffj"] +[ext_resource type="Script" uid="uid://c6x5oj28kwykf" path="res://ss.gd" id="6_hkffj"] + +[node name="SS_PB" type="Node3D"] + +[node name="Building" parent="." instance=ExtResource("1_epuwt")] + +[node name="BeltConveyorAssembly" parent="." instance=ExtResource("2_b0qny")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5890018, 7.1525574e-07, -0.08902788) +local_floor_plane = Plane(0, 1, 0, -2.0000007) +enable_comms = true +speed_tag_name = "UL1_3_OIP" +running_tag_name = "" +size = Vector3(7.417364, 0.5, 1.524) + +[node name="PushButton" parent="." instance=ExtResource("3_cd3ti")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3.5, 0.1, 0.77) +normally_closed = true +enable_comms = true +pushbutton_tag_name = "Stop_PB1_OIP" + +[node name="PushButton2" parent="." instance=ExtResource("3_cd3ti")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -4, 0.1, 0.77) +text = "START" +button_color = Color(0.29411766, 1, 0, 1) +enable_comms = true +pushbutton_tag_name = "Start_PB1_OIP" +lamp_tag_name = "Start_PB1_LT_OIP" + +[node name="PushButton5" parent="." instance=ExtResource("3_cd3ti")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.4305305, 0.084308386, 0.8092465) +text = "Estop" +normally_closed = true +enable_comms = true +pushbutton_tag_name = "Estop_OIP" + +[node name="BoxSpawner" parent="." instance=ExtResource("4_cd3ti")] +transform = Transform3D(1, 2.30012e-09, -9.31322e-10, -2.30012e-09, 1, 8.84756e-09, 9.31322e-10, -8.84756e-09, 1, -3.1998703, 0.39105368, -0.02427274) + +[node name="Despawner" parent="." instance=ExtResource("5_hkffj")] +transform = Transform3D(2, 0, 0, 0, 1, 0, 0, 0, 2, 4.229763, -1.0272341, -0.12836409) + +[node name="PushButton3" parent="." instance=ExtResource("3_cd3ti")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -4.933234, 0.104790986, 0.63294005) +text = "MCM_START" +toggle = true +pressed = true +button_color = Color(0, 1, 0, 1) +enable_comms = true +pushbutton_tag_name = "MCM_START_OIP" + +[node name="Node" type="Node" parent="."] +script = ExtResource("6_hkffj") + +[node name="PushButton6" parent="." instance=ExtResource("3_cd3ti")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -4.9547615, -0.38836774, 0.55311906) +text = "Power_Saving_Mode" +toggle = true +pressed = true +button_color = Color(0.51421684, 0.41968456, 1, 1) +enable_comms = true +pushbutton_tag_name = "Power_Saving_Mode_OIP" diff --git a/PLC/Simulations/STATION_SS_PB/OIP/ss.gd b/PLC/Simulations/STATION_SS_PB/OIP/ss.gd new file mode 100644 index 0000000..097a8d2 --- /dev/null +++ b/PLC/Simulations/STATION_SS_PB/OIP/ss.gd @@ -0,0 +1,8 @@ +@tool +extends Node +@onready var box_spawner: BoxSpawner = $"../BoxSpawner" +@onready var belt_conveyor_assembly: BeltConveyorAssembly = $"../BeltConveyorAssembly" + + +func _physics_process(delta: float) -> void: + box_spawner.disable = belt_conveyor_assembly.speed == 0 diff --git a/PLC/Simulations/STATION_SS_PB/PLC/AOIs/AOI_DPM_AOI.L5X b/PLC/Simulations/STATION_SS_PB/PLC/AOIs/AOI_DPM_AOI.L5X new file mode 100644 index 0000000..00bbeb6 --- /dev/null +++ b/PLC/Simulations/STATION_SS_PB/PLC/AOIs/AOI_DPM_AOI.L5X @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + — Lost Communication”, places it in MCM.CMD.Log, and increments MCM.CMD.Log_Quantity. +If the same line later appears in MCM.STS.Acknowledge_Log, the routine latches Acknowledge and clears the entry so the log stays current. + +The command bit MCM.STS.Unacknowledge_All_Logs resets the Acknowledge latch, guaranteeing that the next loss of communication will produce a fresh message. + +Command bits +The routine receives Communication_Fault from its own port monitor. +The routine receives EN4TR_Communication_Fault from the rack adapter. +The routine receives MCM.STS.Unacknowledge_All_Logs to clear the acknowledge latch. + +Status bits +The routine sets Communication_Faulted when either link is down. +The routine sets CTRL.STS.Communication_Faulted with the same value. + +HMI bits +The HMI displays HMI.STATE as 0 for healthy and 1 for faulted. +The HMI raises HMI.Alarm.Communication_Faulted only while Communication_Faulted is true and EN4TR_Communication_Fault is false. + +Alarm bits +The system raises HMI.Alarm.Communication_Faulted whenever the switch itself loses communication and the EN4TR adapter is still online. +]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PLC/Simulations/STATION_SS_PB/PLC/AOIs/AOI_FLIP_FLOP_AOI.L5X b/PLC/Simulations/STATION_SS_PB/PLC/AOIs/AOI_FLIP_FLOP_AOI.L5X new file mode 100644 index 0000000..24b3626 --- /dev/null +++ b/PLC/Simulations/STATION_SS_PB/PLC/AOIs/AOI_FLIP_FLOP_AOI.L5X @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PLC/Simulations/STATION_SS_PB/PLC/AOIs/AOI_IO_BLOCK_AOI.L5X b/PLC/Simulations/STATION_SS_PB/PLC/AOIs/AOI_IO_BLOCK_AOI.L5X new file mode 100644 index 0000000..716c421 --- /dev/null +++ b/PLC/Simulations/STATION_SS_PB/PLC/AOIs/AOI_IO_BLOCK_AOI.L5X @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + — Lost Communication”, places it in MCM.CMD.Log, and increments MCM.CMD.Log_Quantity. +If that exact line later appears in MCM.STS.Acknowledge_Log, IOBlock latches Acknowledge and clears the entry to keep the log concise. +The command MCM.STS.Unacknowledge_All_Logs resets the latch so the next fault generates a fresh message. + +Command bits +The routine receives Communication_Fault from its own interface monitor. +The routine receives Parent.STS.Communication_Faulted from the immediate upstream device. +The routine receives MCM.STS.Unacknowledge_All_Logs to clear the acknowledge latch. + +Status bits +The routine sets Communication_Faulted when either the local or parent link is down. +The routine sets CTRL.STS.Communication_Faulted with the same value. + +HMI bits +The HMI displays HMI.STATE as 0 while links are healthy and 1 while any link is lost. +The HMI raises HMI.Alarm.Communication_Faulted only while Communication_Faulted is true and Parent.STS.Communication_Faulted is false. + +Alarm bits +The system raises HMI.Alarm.Communication_Faulted whenever IOBlock itself loses communication and the parent link is still online. +]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PLC/Simulations/STATION_SS_PB/PLC/AOIs/AOI_MCM_AOI.L5X b/PLC/Simulations/STATION_SS_PB/PLC/AOIs/AOI_MCM_AOI.L5X new file mode 100644 index 0000000..7962ae4 --- /dev/null +++ b/PLC/Simulations/STATION_SS_PB/PLC/AOIs/AOI_MCM_AOI.L5X @@ -0,0 +1,807 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +” ) 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. +]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PLC/Simulations/STATION_SS_PB/PLC/AOIs/AOI_STATION_SS_PB_AOI.L5X b/PLC/Simulations/STATION_SS_PB/PLC/AOIs/AOI_STATION_SS_PB_AOI.L5X new file mode 100644 index 0000000..4ed6316 --- /dev/null +++ b/PLC/Simulations/STATION_SS_PB/PLC/AOIs/AOI_STATION_SS_PB_AOI.L5X @@ -0,0 +1,250 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PLC/Simulations/STATION_SS_PB/PLC/AOIs/AOI_VFD_AOI.L5X b/PLC/Simulations/STATION_SS_PB/PLC/AOIs/AOI_VFD_AOI.L5X new file mode 100644 index 0000000..f2932f9 --- /dev/null +++ b/PLC/Simulations/STATION_SS_PB/PLC/AOIs/AOI_VFD_AOI.L5X @@ -0,0 +1,930 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PLC/Simulations/STATION_SS_PB/PLC/STATION_SS_PB.L5X b/PLC/Simulations/STATION_SS_PB/PLC/STATION_SS_PB.L5X new file mode 100644 index 0000000..e702b15 --- /dev/null +++ b/PLC/Simulations/STATION_SS_PB/PLC/STATION_SS_PB.L5X @@ -0,0 +1,4194 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Rockwell Automation/Allen-Bradley1756-EN2T4325481 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Rockwell Automation/Allen-BradleyPowerFlex 525-EENET3615.1.1.458200PF525_A115201<DataTypes><DataType Name="AB:PowerFlex525V_E_142E84CE:I:0" Class="IO"><Members><Member Name="pad" DataType="DINT" Hidden="1" /><Member Name="DriveStatus" DataType="INT" Radix="Binary" /><Member Name="Ready" DataType="BIT" BitNumber="0" Target="DriveStatus"></Member><Member Name="Active" DataType="BIT" BitNumber="1" Target="DriveStatus"></Member><Member Name="CommandDir" DataType="BIT" BitNumber="2" Target="DriveStatus"></Member><Member Name="ActualDir" DataType="BIT" BitNumber="3" Target="DriveStatus"></Member><Member Name="Accelerating" DataType="BIT" BitNumber="4" Target="DriveStatus"></Member><Member Name="Decelerating" DataType="BIT" BitNumber="5" Target="DriveStatus"></Member><Member Name="Faulted" DataType="BIT" BitNumber="7" Target="DriveStatus"></Member><Member Name="AtReference" DataType="BIT" BitNumber="8" Target="DriveStatus"></Member><Member Name="CommFreqCnt" DataType="BIT" BitNumber="9" Target="DriveStatus"></Member><Member Name="CommLogicCnt" DataType="BIT" BitNumber="10" Target="DriveStatus"></Member><Member Name="ParmsLocked" DataType="BIT" BitNumber="11" Target="DriveStatus"></Member><Member Name="DigIn1Active" DataType="BIT" BitNumber="12" Target="DriveStatus"></Member><Member Name="DigIn2Active" DataType="BIT" BitNumber="13" Target="DriveStatus"></Member><Member Name="DigIn3Active" DataType="BIT" BitNumber="14" Target="DriveStatus"></Member><Member Name="DigIn4Active" DataType="BIT" BitNumber="15" Target="DriveStatus"></Member><Member Name="OutputFreq" DataType="INT" Radix="Decimal" /><Member Name="Fault1Code" DataType="INT" Radix="Decimal" /><Member Name="DriveStatus_param" DataType="INT" Radix="Binary" /><Member Name="DriveStatus_param_Running" DataType="BIT" BitNumber="0" Target="DriveStatus_param"></Member><Member Name="DriveStatus_param_Forward" DataType="BIT" BitNumber="1" Target="DriveStatus_param"></Member><Member Name="DriveStatus_param_Accelerating" DataType="BIT" BitNumber="2" Target="DriveStatus_param"></Member><Member Name="DriveStatus_param_Decelerating" DataType="BIT" BitNumber="3" Target="DriveStatus_param"></Member><Member Name="DriveStatus_param_SafetyActive" DataType="BIT" BitNumber="4" Target="DriveStatus_param"></Member><Member Name="OutputCurrent" DataType="INT" Radix="Decimal" /><Member Name="OutputVoltage" DataType="INT" Radix="Decimal" /></Members></DataType></DataTypes> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + — Lost Communication”, places it in MCM.CMD.Log, and increments MCM.CMD.Log_Quantity. +If the same line later appears in MCM.STS.Acknowledge_Log, the routine latches Acknowledge and clears the entry so the log stays current. + +The command bit MCM.STS.Unacknowledge_All_Logs resets the Acknowledge latch, guaranteeing that the next loss of communication will produce a fresh message. + +Command bits +The routine receives Communication_Fault from its own port monitor. +The routine receives EN4TR_Communication_Fault from the rack adapter. +The routine receives MCM.STS.Unacknowledge_All_Logs to clear the acknowledge latch. + +Status bits +The routine sets Communication_Faulted when either link is down. +The routine sets CTRL.STS.Communication_Faulted with the same value. + +HMI bits +The HMI displays HMI.STATE as 0 for healthy and 1 for faulted. +The HMI raises HMI.Alarm.Communication_Faulted only while Communication_Faulted is true and EN4TR_Communication_Fault is false. + +Alarm bits +The system raises HMI.Alarm.Communication_Faulted whenever the switch itself loses communication and the EN4TR adapter is still online. +]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +” ) 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. +]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + — Lost Communication”, places it in MCM.CMD.Log, and increments MCM.CMD.Log_Quantity. +If that exact line later appears in MCM.STS.Acknowledge_Log, IOBlock latches Acknowledge and clears the entry to keep the log concise. +The command MCM.STS.Unacknowledge_All_Logs resets the latch so the next fault generates a fresh message. + +Command bits +The routine receives Communication_Fault from its own interface monitor. +The routine receives Parent.STS.Communication_Faulted from the immediate upstream device. +The routine receives MCM.STS.Unacknowledge_All_Logs to clear the acknowledge latch. + +Status bits +The routine sets Communication_Faulted when either the local or parent link is down. +The routine sets CTRL.STS.Communication_Faulted with the same value. + +HMI bits +The HMI displays HMI.STATE as 0 while links are healthy and 1 while any link is lost. +The HMI raises HMI.Alarm.Communication_Faulted only while Communication_Faulted is true and Parent.STS.Communication_Faulted is false. + +Alarm bits +The system raises HMI.Alarm.Communication_Faulted whenever IOBlock itself loses communication and the parent link is still online. +]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PLC/Simulations/STATION_SS_PB/PLC/UDTs/UDT_DPM_BLOCK_DataType.L5X b/PLC/Simulations/STATION_SS_PB/PLC/UDTs/UDT_DPM_BLOCK_DataType.L5X new file mode 100644 index 0000000..f96edbb --- /dev/null +++ b/PLC/Simulations/STATION_SS_PB/PLC/UDTs/UDT_DPM_BLOCK_DataType.L5X @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PLC/Simulations/STATION_SS_PB/PLC/UDTs/UDT_IO_BLOCK_DataType.L5X b/PLC/Simulations/STATION_SS_PB/PLC/UDTs/UDT_IO_BLOCK_DataType.L5X new file mode 100644 index 0000000..ba25a9c --- /dev/null +++ b/PLC/Simulations/STATION_SS_PB/PLC/UDTs/UDT_IO_BLOCK_DataType.L5X @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PLC/Simulations/STATION_SS_PB/PLC/UDTs/UDT_MCM_DataType.L5X b/PLC/Simulations/STATION_SS_PB/PLC/UDTs/UDT_MCM_DataType.L5X new file mode 100644 index 0000000..6c923ff --- /dev/null +++ b/PLC/Simulations/STATION_SS_PB/PLC/UDTs/UDT_MCM_DataType.L5X @@ -0,0 +1,183 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PLC/Simulations/STATION_SS_PB/PLC/UDTs/UDT_STATION_DataType.L5X b/PLC/Simulations/STATION_SS_PB/PLC/UDTs/UDT_STATION_DataType.L5X new file mode 100644 index 0000000..47bf0b5 --- /dev/null +++ b/PLC/Simulations/STATION_SS_PB/PLC/UDTs/UDT_STATION_DataType.L5X @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PLC/Simulations/STATION_SS_PB/PLC/UDTs/UDT_VFD_DataType.L5X b/PLC/Simulations/STATION_SS_PB/PLC/UDTs/UDT_VFD_DataType.L5X new file mode 100644 index 0000000..da497eb --- /dev/null +++ b/PLC/Simulations/STATION_SS_PB/PLC/UDTs/UDT_VFD_DataType.L5X @@ -0,0 +1,264 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PLC/UDTs/STATION_SS_DataTypes.L5X b/PLC/UDTs/STATION_SS_DataTypes.L5X index 43b5aeb..47bf0b5 100644 --- a/PLC/UDTs/STATION_SS_DataTypes.L5X +++ b/PLC/UDTs/STATION_SS_DataTypes.L5X @@ -1,311 +1,7 @@  - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + @@ -387,9 +88,9 @@ Stopped by Station Stop PushButton]]> - + - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -