90 lines
2.6 KiB
GDScript
90 lines
2.6 KiB
GDScript
@tool
|
|
extends Node
|
|
@onready var box_spawner: BoxSpawner = $"../BoxSpawner"
|
|
@onready var ul_1_3: BeltConveyorAssembly = $"../UL1_3"
|
|
@onready var hmi_start_pb: PushButton = $"../HMI_UL1_3_JR_PB1"
|
|
@onready var hmi_ul_1_3_jr_pb_2: PushButton = $"../HMI_UL1_3_JR_PB2"
|
|
var color_1
|
|
var color_2
|
|
var tag_group = "TagGroup0"
|
|
var hmi_start_color_1 = "UL1_3_JR_PB1.HMI.Start_Color"
|
|
var hmi_start_color_2 = "UL1_3_JR_PB2.HMI.Start_Color"
|
|
var display_color_1
|
|
var display_color_2
|
|
|
|
func _ready() -> void:
|
|
SimulationEvents.simulation_started.connect(_on_simulation_started)
|
|
|
|
func _on_simulation_started() -> void:
|
|
OIPComms.register_tag(tag_group,hmi_start_color_1,1)
|
|
OIPComms.register_tag(tag_group,hmi_start_color_2,1)
|
|
OIPComms.register_tag(tag_group, "UL1_3_JR_PB1.CTRL.STS.Log.LEN", 1)
|
|
|
|
# Register all 82 DATA tags
|
|
for i in range(82):
|
|
var data_tag = "UL1_3_JR_PB1.CTRL.STS.Log.DATA[" + str(i) + "]"
|
|
OIPComms.register_tag(tag_group, data_tag, 1)
|
|
|
|
func read_string(tag_group_name: String, base_tag_name: String) -> String:
|
|
"""Reads the log string from PLC DATA array"""
|
|
var result = ""
|
|
|
|
# Construct the length and data tag names
|
|
var len_tag = base_tag_name + ".LEN"
|
|
var data_tag = base_tag_name + ".DATA"
|
|
|
|
# Read the actual string length from PLC (if available)
|
|
var string_length = OIPComms.read_int32(tag_group_name, len_tag)
|
|
|
|
# Limit to 82 max and ensure it's valid
|
|
if string_length <= 0 or string_length > 82:
|
|
string_length = 82
|
|
|
|
# Read each character
|
|
for i in range(string_length):
|
|
var data_tag_indexed = data_tag + "[" + str(i) + "]"
|
|
var char_value = OIPComms.read_int8(tag_group_name, data_tag_indexed)
|
|
|
|
# Check for null terminator or invalid ASCII
|
|
|
|
|
|
# Convert SINT to ASCII character
|
|
if char_value > 0 and char_value < 128: # Valid ASCII range
|
|
result += char(char_value)
|
|
|
|
return result
|
|
|
|
func _physics_process(delta: float) -> void:
|
|
|
|
box_spawner.disable = ul_1_3.speed == 0
|
|
color_1 = OIPComms.read_int32(tag_group,hmi_start_color_1)
|
|
color_2 = OIPComms.read_int32(tag_group,hmi_start_color_2)
|
|
|
|
#print("Log String: ", read_string(tag_group, "UL1_3_JR_PB1.CTRL.STS.Log"))
|
|
|
|
match color_1:
|
|
1:
|
|
display_color_1 = Color.CHOCOLATE
|
|
2:
|
|
display_color_1 = Color.GRAY
|
|
3:
|
|
display_color_1 = Color.GREEN
|
|
4:
|
|
display_color_1 = Color.BLACK
|
|
_:
|
|
display_color_1 = Color.WHITE
|
|
match color_2:
|
|
1:
|
|
display_color_2 = Color.CHOCOLATE
|
|
2:
|
|
display_color_2 = Color.GRAY
|
|
3:
|
|
display_color_2 = Color.GREEN
|
|
4:
|
|
display_color_2 = Color.BLACK
|
|
_:
|
|
display_color_2 = Color.WHITE
|
|
hmi_start_pb.button_color = display_color_1
|
|
hmi_ul_1_3_jr_pb_2.button_color = display_color_2
|
|
|