Merge remote-tracking branch 'MaD_CaT/master'
This commit is contained in:
@@ -44,11 +44,11 @@ func init_boards():
|
||||
$btn_connect.set_position(Vector2(posx + 590,posy - 25))
|
||||
$btn_disconnect.set_position(Vector2(posx + 587,posy + 675))
|
||||
|
||||
g_boards['КЭМС-Б'] = yemsboards.EmsBoard.new(0, 0x130, yemsconsts.INPUT_KEMS, yemsconsts.OUTPUT_KEMS, unit_ems)
|
||||
g_boards['ЭМС-Б1'] = yemsboards.EmsBoard.new(1, 0x110, yemsconsts.INPUT_EMS1, yemsconsts.OUTPUT_EMS1, unit_ems)
|
||||
g_boards['ЭМС-Б2'] = yemsboards.EmsBoard.new(2, 0x120, yemsconsts.INPUT_EMS2, yemsconsts.OUTPUT_EMS2, unit_ems)
|
||||
g_boards[yemsconsts.KEMS_BOARD_NAME] = yemsboards.EmsBoard.new(0, 0x130, yemsconsts.INPUT_KEMS, yemsconsts.OUTPUT_KEMS, unit_ems)
|
||||
g_boards[yemsconsts.EMS1_BOARD_NAME] = yemsboards.EmsBoard.new(1, 0x110, yemsconsts.INPUT_EMS1, yemsconsts.OUTPUT_EMS1, unit_ems)
|
||||
g_boards[yemsconsts.EMS2_BOARD_NAME] = yemsboards.EmsBoard.new(2, 0x120, yemsconsts.INPUT_EMS2, yemsconsts.OUTPUT_EMS2, unit_ems)
|
||||
|
||||
active_board = g_boards['КЭМС-Б']
|
||||
active_board = g_boards[yemsconsts.KEMS_BOARD_NAME]
|
||||
|
||||
init_tbl_in()
|
||||
$scrollin/tbl_in.pin_header($scrollin, self)
|
||||
@@ -61,6 +61,10 @@ func init_boards():
|
||||
|
||||
unit_ems.connect('data_received', Callable(self, 'on_data_ems_received'))
|
||||
unit_ems.connect('command_done', Callable(self, 'on_command_done'))
|
||||
unit_ems.connect('line_changed', Callable(self, 'on_line_changed'))
|
||||
for board in g_boards.values():
|
||||
board.connect('upd_delay_offset', Callable(self, 'on_upd_delay_offset'))
|
||||
board.connect('upd_o_state', Callable(self, 'on_upd_o_state'))
|
||||
$btn_connect.connect('pressed', Callable(self, 'on_btn_connect'))
|
||||
$btn_disconnect.connect('pressed', Callable(self, 'on_btn_disconnect'))
|
||||
$btn_flash_read.button_connect('pressed', Callable(self, 'on_btn_flash_read').bind($btn_flash_read))
|
||||
@@ -137,7 +141,15 @@ func init_tbl_in():
|
||||
for i in range(len(row_type)):
|
||||
if i < len(params):
|
||||
var node = $scrollin/tbl_in.get_node2(i, row_index)
|
||||
node.text = params[i]
|
||||
if i == 0:
|
||||
node.text = board + ': ' + params[i]
|
||||
elif i in TABLE_ENTRY_COLUMNS:
|
||||
if board == yemsconsts.EMS1_BOARD_NAME or board == yemsconsts.EMS2_BOARD_NAME:
|
||||
node.text = ''
|
||||
else:
|
||||
node.text = '%3.1f' % float(params[i])
|
||||
else:
|
||||
node.text = params[i]
|
||||
node.editable = false
|
||||
$scrollin/tbl_in.set_node_user_data(i, row_index, [in_dev, board])
|
||||
$scrollin/tbl_in.set_columns_alignments(yams_alligment_in)
|
||||
@@ -221,7 +233,15 @@ func init_tbl_out():
|
||||
for i in range(len(header_text)):
|
||||
var cell = $scrollout/tbl_out.get_node2(i, row_index)
|
||||
if i < len(params):
|
||||
cell.text = params[i]
|
||||
if i == 0:
|
||||
cell.text = board + ': ' + params[i]
|
||||
elif i in TABLE_ENTRY_COLUMNS:
|
||||
if board == yemsconsts.EMS1_BOARD_NAME or board == yemsconsts.EMS2_BOARD_NAME:
|
||||
cell.text = ''
|
||||
else:
|
||||
cell.text = '%3.1f' % float(params[i])
|
||||
else:
|
||||
cell.text = params[i]
|
||||
cell.editable = false
|
||||
$scrollout/tbl_out.set_node_user_data(i, row_index, [out_dev, board])
|
||||
if i in COLUMN_OPTS_BTN:
|
||||
@@ -298,14 +318,22 @@ func set_dev(tbl, dev, row_type, row_type_conn, lbl_text, row_size):
|
||||
tbl.set_columns_min_size(row_size)
|
||||
var le_name: LineEdit = tbl.get_node2(0, 0)
|
||||
le_name.editable = false
|
||||
le_name.text = dev.dev_name
|
||||
le_name.text = dev.board + ': ' + dev.dev_name
|
||||
var connector: LineEdit = tbl.get_node2(1, 0)
|
||||
connector.editable = false
|
||||
connector.text = dev.connector
|
||||
var delay: LineEdit = tbl.get_node2(2, 0)
|
||||
delay.text = '%4.2f'%dev.delay
|
||||
delay.text = '%3.1f'%dev.delay
|
||||
var offset: LineEdit = tbl.get_node2(3, 0)
|
||||
offset.text = '%4.2f'%dev.offset
|
||||
offset.text = '%3.1f'%dev.offset
|
||||
if dev.board == yemsconsts.EMS1_BOARD_NAME or dev.board == yemsconsts.EMS2_BOARD_NAME:
|
||||
delay.text = ''
|
||||
delay.editable = false
|
||||
offset.text = ''
|
||||
offset.editable = false
|
||||
else:
|
||||
delay.editable = true
|
||||
offset.editable = true
|
||||
var state = tbl.get_node2(4, 0)
|
||||
state.set_frame(dev.state)
|
||||
tbl.add_row(row_type_conn)
|
||||
@@ -336,27 +364,32 @@ func on_btn_connect():
|
||||
if len(in_row_index) and len(out_row_index):
|
||||
var in_user_data = $scrollin/tbl_in.get_node_user_data(0, in_row_index[0])
|
||||
var out_user_data = $scrollout/tbl_out.get_node_user_data(0, out_row_index[0])
|
||||
if in_user_data[1] != out_user_data[1] or not active_board.read_done:
|
||||
return
|
||||
var in_dev = in_user_data[0]
|
||||
var out_dev = out_user_data[0]
|
||||
add_connection_dev($scrl_out_set/tbl_out_set, in_dev, out_dev, OUT_SET_ROW, in_user_data)
|
||||
add_connection_dev($scrl_in_set/tbl_in_set, out_dev, in_dev, IN_SET_ROW, out_user_data)
|
||||
|
||||
|
||||
## Образовывает связь между выбранным входом и выходом.[br]
|
||||
## Образует связь между выбранным входом и выходом.[br]
|
||||
## [param tbl] - таблица,[br]
|
||||
## [param dev1] - устройство1,[br]
|
||||
## [param dev2] - устройство 2,[br]
|
||||
## [param set_row] - массив с пустыми LineEdit,[br]
|
||||
## [param user_data] - пользовательские данные устройства1.[br]
|
||||
func add_connection_dev(tbl, dev1, dev2, set_row, user_data):
|
||||
if not dev1.connector in dev2.connect_devs:
|
||||
if not dev1.dev_name in dev2.connect_devs:
|
||||
tbl.add_row(set_row)
|
||||
var node_index: Array = [0, tbl.get_rows_count() -1]
|
||||
var le_name: LineEdit = tbl.get_node2(node_index[0], node_index[1])
|
||||
le_name.text = dev1.connector
|
||||
le_name.text = dev1.dev_name
|
||||
disable_edit(tbl, len(set_row), node_index[1])
|
||||
tbl.set_node_user_data(node_index[0], node_index[1], user_data)
|
||||
dev2.connect_devs[dev1.connector] = user_data
|
||||
dev2.connect_devs[dev1.dev_name] = user_data
|
||||
if dev1 is yemsdevs.OutDev:
|
||||
active_board = g_boards[user_data[1]]
|
||||
active_board.set_connection(dev1.id, dev2.id, true)
|
||||
|
||||
|
||||
## Отключает возможность редактирования LineEdit в таблице.[br]
|
||||
@@ -376,11 +409,12 @@ func on_row_pressed(i_row: int, tbl):
|
||||
tbl.set_row_selected(i_row, not is_row_selected)
|
||||
|
||||
|
||||
func on_data_ems_received(unit):
|
||||
## Обработчик получения пакета от ячейки ЯУ-07Б
|
||||
func on_data_ems_received(unit_ems):
|
||||
for board in g_boards.values():
|
||||
board.set_status(unit.status)
|
||||
board.set_status(unit_ems.status)
|
||||
if active_board.state_read == active_board.WAIT:
|
||||
if board.online and not board.read_done:
|
||||
if board.online and not board.read_done and board.ems_load:
|
||||
active_board = board
|
||||
active_board.state_read = active_board.READ
|
||||
active_board.start_rw_kems(true)
|
||||
@@ -394,5 +428,37 @@ func on_data_ems_received(unit):
|
||||
state_pic.set_frame(dev.state)
|
||||
|
||||
|
||||
## Обработчик выполнения команды
|
||||
func on_command_done(unit_ems):
|
||||
active_board.on_command_done(unit_ems)
|
||||
|
||||
|
||||
## Вызывается по изменению статуса ячейки ЯУ-07Б
|
||||
func on_line_changed(unit_ems):
|
||||
if unit_ems.online:
|
||||
$lbl_online.text = 'Ячейка ЯУ-07 на связи'
|
||||
$lbl_online.modulate = Color.GREEN
|
||||
else:
|
||||
$lbl_online.text = 'Ячейка ЯУ-07 не на связи'
|
||||
$lbl_online.modulate = Color.RED
|
||||
for board in g_boards.values():
|
||||
board.state_read = board.WAIT
|
||||
board.read_done = false
|
||||
|
||||
|
||||
## Вызывается по обновлению информации от ячейки времянках входов/выходов
|
||||
func on_upd_delay_offset(_board, dev):
|
||||
if dev.board == yemsconsts.EMS1_BOARD_NAME or dev.board == yemsconsts.EMS2_BOARD_NAME:
|
||||
return
|
||||
var tbl = $scrollin/tbl_in
|
||||
if dev is yemsdevs.OutDev:
|
||||
tbl = $scrollout/tbl_out
|
||||
var le_delay = tbl.get_node2(2, dev.tbl_row_id)
|
||||
var le_offset = tbl.get_node2(3, dev.tbl_row_id)
|
||||
le_delay.set_text(str('%3.1f' % dev.delay))
|
||||
le_offset.set_text(str('%3.1f' % dev.offset))
|
||||
|
||||
|
||||
## Вызывается по обновлению информации о режиме выходов
|
||||
func on_upd_o_state(board, dev):
|
||||
pass
|
||||
|
||||
@@ -20,7 +20,6 @@ offset_left = 30.0
|
||||
offset_top = 4.0
|
||||
offset_right = 166.0
|
||||
offset_bottom = 30.0
|
||||
theme_override_colors/font_color = Color(0, 0.647059, 0.184314, 1)
|
||||
text = "Ячейка на связи"
|
||||
|
||||
[node name="btn_flash_read" parent="." instance=ExtResource("2_eju8r")]
|
||||
|
||||
@@ -134,15 +134,12 @@ func set_wordi(buf: PackedByteArray, index: int, val: int) -> void:
|
||||
buf[index + 1] = (val >> 8) & 0xff
|
||||
|
||||
|
||||
## Устанавливает бит в соответствии с маской
|
||||
## [param bits] - Прежние значения бит
|
||||
## [param index] - Индекс нового значения бита
|
||||
## [param val] - Новое значение бита
|
||||
## [param mask] - Маска изменяемых бит
|
||||
func set_bit(bits, index, val, mask = 0xfffffffffffffff):
|
||||
"""
|
||||
:param bits: прежние значения
|
||||
:param index: индекс бита
|
||||
:param val: новое значение бита
|
||||
:param mask:
|
||||
:return:
|
||||
мастер
|
||||
"""
|
||||
bits &= mask
|
||||
if val:
|
||||
bits |= 1 << index
|
||||
@@ -151,12 +148,9 @@ func set_bit(bits, index, val, mask = 0xfffffffffffffff):
|
||||
return (bits & mask)
|
||||
|
||||
|
||||
## Устанавливает биты в соответствии с маской
|
||||
## [param v] - Прежние значения бит
|
||||
## [param a] - Новые значения бит
|
||||
## [param m] - Маска изменяемых бит
|
||||
func set_bits(v, a, m):
|
||||
"""
|
||||
Устанавливает биты в соответствии с маской
|
||||
:param v: Прежние значения бит
|
||||
:param a: Новые значения бит
|
||||
:param m: Маска изменяемых бит
|
||||
:return: Изменённые значения бит
|
||||
"""
|
||||
return v & a & (~m) | (~v) & a & m | v & a & m | v & (~a) & (~m)
|
||||
return (~m) & v | a & m
|
||||
|
||||
@@ -75,7 +75,6 @@ LOAD_KEMS, WRITE_FLASH_END}
|
||||
|
||||
# Отправка команды на запись или чтение порта
|
||||
func on_wr_device(dev_number):
|
||||
print_debug([id_board, dev_number])
|
||||
if (state == WR_DEV_NUM_W) or (state == WR_DEV_NUM_R):
|
||||
unit_ems.send_isa(unit_ems.CmdCode.WRITE_ISA, [base_addr_isa + 2, dev_number])
|
||||
elif state == WRITE:
|
||||
@@ -183,3 +182,10 @@ LOAD_KEMS, WRITE_FLASH_END}
|
||||
else:
|
||||
state = WR_DEV_NUM_W
|
||||
on_wr_device(cur_dev_num)
|
||||
|
||||
func set_connection(o_dev, i_dev, val):
|
||||
cur_dev_num = o_dev
|
||||
if check_dev_number():
|
||||
cur_dev.set_dot(i_dev, val)
|
||||
state = WR_DEV_NUM_W
|
||||
on_wr_device(cur_dev_num)
|
||||
|
||||
@@ -7,6 +7,10 @@ const STATUS_OFFSET = { # Смещение статуса, ключ
|
||||
1: 26,
|
||||
2: 52 }
|
||||
|
||||
const KEMS_BOARD_NAME = 'КЭМС-Б'
|
||||
const EMS1_BOARD_NAME = 'ЭМС-Б1'
|
||||
const EMS2_BOARD_NAME = 'ЭМС-Б2'
|
||||
|
||||
## Таблица с данными для входов, первое значение - индекс устройства в ячейке КЭМС.
|
||||
const INPUT_KEMS = [
|
||||
[1 ,['УИЗП №1', 'Х7', '0.00', '0.00']],
|
||||
|
||||
@@ -10,7 +10,7 @@ class InDev:
|
||||
var state: int ## Состояние входа.
|
||||
var freq: int ## Предполагаемая частота на которой работает комплекс.
|
||||
var ports_data: Dictionary ## Словарь состояния портов устройства.
|
||||
var tbl_row_id: int ## Индекс устройства в таблице выходов.
|
||||
var tbl_row_id: int ## Индекс устройства в таблице.
|
||||
var out_dots: Array ## Список выходных устройств в порядке, как в таблице и точки матрицы.
|
||||
var connect_devs: Dictionary ## Список присоединённых устройств.
|
||||
var board: String ## Плата в которой находится устройство.
|
||||
@@ -64,9 +64,9 @@ class OutDev extends InDev:
|
||||
for i in range(yemsconsts.NUM_INPUT):
|
||||
btns_state[i+1] = bool((data >> i) & 1)
|
||||
|
||||
func set_dot(i_dev):
|
||||
func set_dot(i_dev, val):
|
||||
if btns_state.has(i_dev):
|
||||
btns_state[i_dev] = not btns_state[i_dev]
|
||||
btns_state[i_dev] = val
|
||||
var data = 0
|
||||
for i in range(yemsconsts.NUM_INPUT):
|
||||
data = data | (int(btns_state[i+1]) << i)
|
||||
|
||||
Reference in New Issue
Block a user