Files
PRD_TU_MP550/ems_g.gd
2024-12-18 21:47:34 +03:00

202 lines
9.0 KiB
GDScript

extends Panel
var node_select1: Node
var shift: int = 2
var button_link_meta: Dictionary = {}
func _on_read_ems_g():
$load_boadr.visible = true
Constants.EMS_G_PORT_DATA_HOLDER.clear()
for i in 16:
Network.send_array.append(['wr', {Constants.EMS_G_BASE_ADDR+2: 1+i}])
Network.send_array.append(['rd', [Constants.EMS_G_BASE_ADDR+0xA]])
for i in range(46, 62):
Network.send_array.append(['wr', {Constants.EMS_G_BASE_ADDR+2: 1+i}])
Network.send_array.append(['rd', [Constants.EMS_G_BASE_ADDR+4, Constants.EMS_G_BASE_ADDR+8]])
func _on_sync():
for index in 32:
var tmp_device_mode = Constants.EMS_G_PORT_DATA_HOLDER[index][0]
if tmp_device_mode > 46:
var port0x124: int
var port0x128: int
for key in Constants.EMS_G_PORT_DATA_HOLDER[index][1].keys():
if key == 0x124:
port0x124 = Constants.EMS_G_PORT_DATA_HOLDER[index][1][key]
for row in 16:
if (port0x124 & (1 << row)) != 0:
var chk_btn = node_select1.get_node2(tmp_device_mode-45, row+3).get_child(1, false)
chk_btn.button_pressed =true
if key == 0x128:
port0x128 = Constants.EMS_G_PORT_DATA_HOLDER[index][1][key]
var list = node_select1.get_node2(tmp_device_mode-45, 0)
var select = 0 if port0x128 == 0 else 1 if port0x128 == 0x2000 else 2 if port0x128 == 0x4000 else 3
list.select(select)
$load_boadr.visible = false
func _ready() -> void:
node_select1 = $table1
var EMS_G_TABLE: Array
for i_row in Constants.INPUT_EMS_G.size() + shift + 1:
var column: Array
for out_colum in Constants.OUT_EMS_G.size()+shift:
if out_colum > 1 and i_row ==0:
column.append(Constants.TableList)
elif out_colum > 1 and i_row > 2:
column.append(Constants.Switch)
elif (out_colum == 1 and i_row > 2) or (out_colum > 1 and i_row == 2):
column.append(Constants.SocketStatus)
else:
column.append(Constants.TableNode)
EMS_G_TABLE.append(column)
draw_tabl(node_select1, EMS_G_TABLE, EMS_G_TABLE.size())
node_select1.get_node2(1, 1).text = 'x3_OUT:GND'
node_select1.get_node2(0, 2).text = 'x3_IN :GND'
for i in Constants.INPUT_EMS_G.size():
node_select1.get_node2(0, i+shift+1).text = Constants.INPUT_EMS_G[i]
for i in Constants.OUT_EMS_G.size():
node_select1.get_node2(i+shift, 1).text = Constants.OUT_EMS_G[i][1]
for i in EMS_G_TABLE[0].size()-shift:
var list = node_select1.get_node2(i+shift, 0)
list.set_meta('device', Constants.OUT_EMS_G[i][0])
list.connect('item_selected', Callable(self, 'on_mode_link').bind(list))
for k in Constants.OUT_x128.size():
list.add_item(Constants.OUT_x128[k])
var columns_min_size: Array
for i in EMS_G_TABLE[0].size():
if i < 2:
columns_min_size.append(110)
else:
columns_min_size.append(80)
node_select1.set_columns_min_size(columns_min_size)
var parrent_NODE2 = get_parent().get_parent()
parrent_NODE2.connect('read_ems_g_start', Callable(self, '_on_read_ems_g'))
parrent_NODE2.connect('read_ems_g_finish', Callable(self, '_on_sync'))
Network.connect('yau_receive', Callable(self, '_on_data_received'))
create_link_button(node_select1, shift+1, 16+shift+1, shift, 16+shift)
func draw_tabl(tbl, row: Array, count_row: int):
for i_row in count_row:
tbl.add_row(row[i_row])
func _on_data_received(data_from_yau_07):
var in_blank: int = data_from_yau_07.decode_u16(Constants.DataIndices.IN_BLANK_PRD)
var in_imp: int = data_from_yau_07.decode_u16(Constants.DataIndices.IN_IMPULS_PRD)
var out_blank: int = data_from_yau_07.decode_u16(Constants.DataIndices.OUT_BLANK_PRD)
var out_imp: int = data_from_yau_07.decode_u16(Constants.DataIndices.OUT_IMPULS_PRD)
var parent_node2 = get_parent().get_parent()
for i_in in 16:
var socket_status = node_select1.get_node2(1, i_in+shift+1).get_child(0, false)
if (in_blank & (1 << i_in) != 0):
if i_in == 1:
set_frame(parent_node2.get_child(3, false).get_child(1).get_child(5).get_child(1).get_child(3), Constants.Frame.CONSTANT)
if i_in == 9:
set_frame(parent_node2.get_child(3, false).get_child(1).get_child(5).get_child(2).get_child(3), Constants.Frame.CONSTANT)
set_frame(socket_status, Constants.Frame.CONSTANT)
elif (in_imp & (1 << i_in) != 0):
set_frame(socket_status, Constants.Frame.VARIABLE)
else:
if i_in == 1:
set_frame(parent_node2.get_child(3, false).get_child(1).get_child(5).get_child(1).get_child(3), Constants.Frame.WORK)
if i_in == 9:
set_frame(parent_node2.get_child(3, false).get_child(1).get_child(5).get_child(2).get_child(3), Constants.Frame.WORK)
set_frame(socket_status, Constants.Frame.WORK)
#
for i_out in 16:
var socket_status = node_select1.get_node2(i_out+shift, 2).get_child(0, false)
if (out_blank & (1 << i_out) != 0):
if i_out == 1:
set_frame(parent_node2.get_child(3, false).get_child(1).get_child(5).get_child(3).get_child(3), Constants.Frame.CONSTANT)
if i_out == 4:
set_frame(parent_node2.get_child(3, false).get_child(1).get_child(5).get_child(4).get_child(3), Constants.Frame.CONSTANT)
if i_out == 9:
set_frame(parent_node2.get_child(3, false).get_child(1).get_child(5).get_child(5).get_child(3), Constants.Frame.CONSTANT)
set_frame(socket_status, Constants.Frame.CONSTANT)
elif (out_imp & (1 << i_out) != 0):
set_frame(socket_status, Constants.Frame.VARIABLE)
else:
if i_out == 1:
set_frame(parent_node2.get_child(3, false).get_child(1).get_child(5).get_child(3).get_child(3), Constants.Frame.WORK)
if i_out == 4:
set_frame(parent_node2.get_child(3, false).get_child(1).get_child(5).get_child(4).get_child(3), Constants.Frame.WORK)
if i_out == 9:
set_frame(parent_node2.get_child(3, false).get_child(1).get_child(5).get_child(5).get_child(3), Constants.Frame.WORK)
set_frame(socket_status, Constants.Frame.WORK)
func _process(_delta: float) -> void:
pass
func set_frame(node: Node, val: int): node.set_frame(val)
func set_init():
pass
## Создает связь между кнопками
func create_link_button(node, count_rows_sart: int, count_rows_end: int, coln_start: int, coln_end: int):
## META_EMS_G[[Номер входа, Номер выхода]]
var META_EMS_G: Array = []
for i_row in 16:
var INPUT = 1
var OUTPUT = 47
for i_colum in 16:
META_EMS_G.append([INPUT+i_row, OUTPUT+i_colum])
button_link_meta[OUTPUT+i_colum] = 0
var count_register = 0
for i_row in range(count_rows_sart, count_rows_end):
for i_col in range (coln_start, coln_end):
var chk_node = node.get_node2(i_col, i_row)
var chk_btn = chk_node.get_child(1, false)
chk_btn.connect('toggled', Callable(self, '_on_btn_connect').bind(chk_btn))
chk_btn.set_meta('device', META_EMS_G[count_register])
count_register += 1
func on_mode_link(mode, list):
## Формирование команды для выбора устройства
var meta = list.get_meta('device')
var address_port_wr = Constants.EMS_G_BASE_ADDR+2
var ports_wr: Dictionary = {address_port_wr : meta}
Network.send_array.append(['wr', ports_wr]) # Отправка команды
## Формирование команды для отправкы команды на устройство
ports_wr = {}
address_port_wr = Constants.EMS_G_BASE_ADDR+8
ports_wr[address_port_wr] = 0x0000 if mode == 0 else 0x2000 if mode == 1 else 0x4000 if mode == 2 else 0x8000
Network.send_array.append(['wr', ports_wr])
func _on_btn_connect(toggled_on: bool, chk_btn: Node):
## Формирование команды для выбора устройства
var meta = chk_btn.get_meta('device')
var address_port_wr = Constants.EMS_G_BASE_ADDR+2
var ports_wr: Dictionary = {address_port_wr : meta[1]}
Network.send_array.append(['wr', ports_wr]) # Отправка команды
## Формирование команды для отправкы команды на устройство
if toggled_on:
button_link_meta[meta[1]] += 1 << meta[0]-1
else:
button_link_meta[meta[1]] -= 1 << meta[0]-1
ports_wr = {}
address_port_wr = Constants.EMS_G_BASE_ADDR+4
ports_wr[address_port_wr] = button_link_meta[meta[1]]
Network.send_array.append(['wr', ports_wr])