Merge branch 'master-prd' of http://169.254.27.70:3000/sasha80/uarep-ctl into master-prd
This commit is contained in:
@@ -11,12 +11,16 @@ const POWER_UKP_1: int = 31
|
||||
const POWER_UKP_2: int = 63
|
||||
const bit_dkm_3: int = 3
|
||||
const bit_dkm_4: int = 4
|
||||
const ADDR_UG_LITERA_1: int = 0x106
|
||||
const ADDR_UG_LITERA_2: int = 0x108
|
||||
|
||||
var count_packet_1:int = 0
|
||||
var power_array_1: Array = []
|
||||
var count_packet_2:int = 0
|
||||
var power_array_2: Array = []
|
||||
var currecnt_unit: String
|
||||
var ug_work_1: int
|
||||
var ug_work_2: int
|
||||
|
||||
enum STATE_VAL {
|
||||
NONE = 0,
|
||||
@@ -43,13 +47,25 @@ func _ready() -> void:
|
||||
control_timer.start()
|
||||
|
||||
|
||||
func _enter_tree() -> void:
|
||||
signaller.connect('режим_работа', Callable(self, 'on_mode_changed').bind(false))
|
||||
on_ug_setting()
|
||||
|
||||
|
||||
func _exit_tree() -> void:
|
||||
var unit_key = settings.get_unit_key(get_meta('unit_name')[0])
|
||||
var unit_prd = network.units[unit_key]
|
||||
var prd_module = prd.prd_dict[unit_prd.name]
|
||||
prd_module.cmd_array.append([unit_prd.CmdCode.WRITE_ISA, [ADDR_UG_LITERA_1, ug_work_1, ADDR_UG_LITERA_2, ug_work_2]])
|
||||
|
||||
|
||||
func set_default_state() -> void:
|
||||
$kasseta_P_1/ref_A19.state = STATE_VAL.NONE
|
||||
$kasseta_P_1/ref_A20.state = STATE_VAL.NONE
|
||||
$kasseta_P_1/ref_A21.state = STATE_VAL.NONE
|
||||
$maa2000_A23.state = STATE_VAL.NONE
|
||||
$maa2000_A22.state = STATE_VAL.NONE
|
||||
|
||||
|
||||
for group in get_tree().get_nodes_in_group('power_amplifier'):
|
||||
group.state = STATE_VAL.NONE
|
||||
|
||||
@@ -231,10 +247,9 @@ func _on_control_fs(mode: bool) -> void:
|
||||
|
||||
func on_stop_control() -> void:
|
||||
_on_control_fs(false)
|
||||
print('stop timer')
|
||||
|
||||
|
||||
func on_fs_update_state(packet_type_7: Dictionary):
|
||||
func on_fs_update_state(packet_type_7: Dictionary) -> void:
|
||||
var parts = currecnt_unit.split('-')
|
||||
var last_part = parts[-1] # Прибор
|
||||
for fs in packet_type_7:
|
||||
@@ -246,7 +261,7 @@ func on_fs_update_state(packet_type_7: Dictionary):
|
||||
$kasseta_FS_VD/ref_A3.state = STATE_VAL.GOOD if packet_type_7[fs].isg == 1 else STATE_VAL.ERROR if packet_type_7[fs].isg == 0 else STATE_VAL.NONE
|
||||
if fs == 15 and last_part == '2в':
|
||||
$kasseta_FS_VD/ref_A3.state = STATE_VAL.GOOD if packet_type_7[fs].isg == 1 else STATE_VAL.ERROR if packet_type_7[fs].isg == 0 else STATE_VAL.NONE
|
||||
|
||||
|
||||
if fs == 16 and last_part == '1в':
|
||||
$kasseta_FS_VD/ref_A4.state = STATE_VAL.GOOD if packet_type_7[fs].isg == 1 else STATE_VAL.ERROR if packet_type_7[fs].isg == 0 else STATE_VAL.NONE
|
||||
if fs == 17 and last_part == '4в':
|
||||
@@ -255,4 +270,25 @@ func on_fs_update_state(packet_type_7: Dictionary):
|
||||
$kasseta_FS_VD/ref_A4.state = STATE_VAL.GOOD if packet_type_7[fs].isg == 1 else STATE_VAL.ERROR if packet_type_7[fs].isg == 0 else STATE_VAL.NONE
|
||||
if fs == 19 and last_part == '2в':
|
||||
$kasseta_FS_VD/ref_A4.state = STATE_VAL.GOOD if packet_type_7[fs].isg == 1 else STATE_VAL.ERROR if packet_type_7[fs].isg == 0 else STATE_VAL.NONE
|
||||
|
||||
|
||||
|
||||
func on_ug_setting() -> void:
|
||||
var unit_key = settings.get_unit_key(get_meta('unit_name')[0])
|
||||
var unit_prd = network.units[unit_key]
|
||||
|
||||
if unit_prd.isa_ports.has(ADDR_UG_LITERA_1):
|
||||
ug_work_1 = unit_prd.isa_ports[ADDR_UG_LITERA_1]
|
||||
if unit_prd.isa_ports.has(ADDR_UG_LITERA_2):
|
||||
ug_work_2 = unit_prd.isa_ports[ADDR_UG_LITERA_2]
|
||||
|
||||
const dou = 0x3
|
||||
const att = 0x7
|
||||
var result = ((att & 0x07) << 3) | (dou & 0x07)
|
||||
|
||||
var prd_module = prd.prd_dict[unit_prd.name]
|
||||
prd_module.cmd_array.append([unit_prd.CmdCode.WRITE_ISA, [ADDR_UG_LITERA_1, result, ADDR_UG_LITERA_2, result]])
|
||||
|
||||
|
||||
func on_mode_changed(in_tree: bool) -> void:
|
||||
if not in_tree:
|
||||
queue_free()
|
||||
|
||||
@@ -77,15 +77,13 @@ func _enter_tree() -> void:
|
||||
unit_sch3.regs_input_count = regs_input_count
|
||||
unit_sch3.request_period = request_period
|
||||
unit_sch3.reconnect_period = reconnect_period
|
||||
unit_sch3.connect('read', on_read.bind(unit_sch3))
|
||||
unit_sch3.connect('read_input', on_input)
|
||||
unit_sch3.connect('read_input', on_input.bind(unit_sch3))
|
||||
unit_sch3.connect('error', on_error.bind(unit_sch3))
|
||||
unit_sch3.connect('line_changed', on_line_changed_sch3)
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
var unit_key = settings.get_unit_key(unit_name)
|
||||
var a = network.units
|
||||
var unit_sch3 = network.units[unit_key]
|
||||
var items = get_tree().get_nodes_in_group('bits_items_switch')
|
||||
for item in items:
|
||||
@@ -98,23 +96,34 @@ func _exit_tree() -> void:
|
||||
if Engine.is_editor_hint(): return
|
||||
var unit_key = settings.get_unit_key(unit_name)
|
||||
var unit_sch3 = network.units[unit_key]
|
||||
unit_sch3.disconnect('read', on_read.bind(unit_sch3))
|
||||
unit_sch3.disconnect('read_input', on_input.bind(unit_sch3))
|
||||
external_ctl = ProjectSettings.get_setting('application/config/Внешнее управление', false)
|
||||
unit_sch3.disconnect('error', on_error)
|
||||
unit_sch3.disconnect('line_changed', on_line_changed_sch3)
|
||||
|
||||
|
||||
## Вызывается по сигналу "приняты данные чтения регистров хранения"[br]
|
||||
## Вызывается по сигналу "приняты данные чтения регистров входов".[br]
|
||||
## [param base_addr] - Начальный адрес регистров.[br]
|
||||
## [param data] - Массив значений прочитанных из регистров.
|
||||
func on_read(base_addr: int, data: Array, unit_sch3):
|
||||
if (base_addr != base_holding_address) or (data.size() < regs_holding_count):
|
||||
## [param data] - Массив значений прочитанных из регистров.[br]
|
||||
func on_input(base_addr: int, data: Array, unit_sch3):
|
||||
if !is_inside_tree():
|
||||
return
|
||||
if (base_addr != base_input_address) or (data.size() < regs_input_count):
|
||||
return
|
||||
# "Для контроля состояния управляющего элемента подачи электроэнергии на приборы ..."
|
||||
# "Для контроля подачи электроэнергии на приборы ..."
|
||||
# Таблицы 3.13 и 3.14. Ecли значения соответствующих битов в этих
|
||||
# регистрах равны, то "исправно".
|
||||
var items = get_tree().get_nodes_in_group('bits_items_good')
|
||||
for i in data.size():
|
||||
regs_holding[base_addr + i] = data[i]
|
||||
regs_input[base_addr + i] = data[i]
|
||||
# Разрешить работу выключателей только когда прочитано их реальное состояние
|
||||
if not switches_sync:
|
||||
regs_holding[0] = regs_input[0]
|
||||
regs_holding[1] = regs_input[1]
|
||||
for i in 16:
|
||||
regs_holding[2] = tools.set_bit(regs_holding[0], i, not ((regs_holding[0] >> i) & 1))
|
||||
regs_holding[3] = tools.set_bit(regs_holding[1], i, not ((regs_holding[1] >> i) & 1))
|
||||
if not external_ctl:
|
||||
if regs_holding.has(0) and regs_holding.has(2):
|
||||
regs_holding[0] = regs_holding[0] | 1
|
||||
@@ -127,27 +136,10 @@ func on_read(base_addr: int, data: Array, unit_sch3):
|
||||
var byte1: int = bits[2] # Адрес регистра
|
||||
var bit1: int = bits[3] # Индекс бита
|
||||
var val0: bool = regs_holding[byte0] & (1 << bit0) > 0
|
||||
item.button_pressed = val0
|
||||
item.set_pressed_no_signal(val0)
|
||||
item.disabled = false
|
||||
regs_holding[byte1] = tools.set_bit(regs_holding[byte1], bit1, not val0)
|
||||
unit_sch3.push_write_holding(regs_holding)
|
||||
|
||||
|
||||
## Вызывается по сигналу "приняты данные чтения регистров входов".[br]
|
||||
## [param base_addr] - Начальный адрес регистров.[br]
|
||||
## [param data] - Массив значений прочитанных из регистров.[br]
|
||||
func on_input(base_addr: int, data: Array):
|
||||
if !is_inside_tree():
|
||||
return
|
||||
if (base_addr != base_input_address) or (data.size() < regs_input_count):
|
||||
return
|
||||
# "Для контроля состояния управляющего элемента подачи электроэнергии на приборы ..."
|
||||
# "Для контроля подачи электроэнергии на приборы ..."
|
||||
# Таблицы 3.13 и 3.14. Ecли значения соответствующих битов в этих
|
||||
# регистрах равны, то "исправно".
|
||||
var items = get_tree().get_nodes_in_group('bits_items_good')
|
||||
for i in data.size():
|
||||
regs_input[base_addr + i] = data[i]
|
||||
# Таблица 3.15, Регистр PowerState
|
||||
$margin/vbox/grid1/lbl_freq.text = '%d' % (regs_input[4] & 0x1ff)
|
||||
$margin/vbox/grid1/lbl_freq.self_modulate = Color.WHITE
|
||||
|
||||
@@ -136,6 +136,17 @@ theme_override_font_sizes/font_size = 17
|
||||
text = "УФ"
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="switch0" type="CheckButton" parent="margin/vbox/table" groups=["bits_items_switch", "c111"]]
|
||||
editor_description = "Питание УФ"
|
||||
material = SubResource("ShaderMaterial_c1mqk")
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 2
|
||||
tooltip_text = "Выключатель питания УФ"
|
||||
button_pressed = true
|
||||
action_mode = 0
|
||||
script = ExtResource("7_l6esm")
|
||||
metadata/bits = [0, 0, 2, 0]
|
||||
|
||||
[node name="state1" type="TextureRect" parent="margin/vbox/table" groups=["bits_items_good"]]
|
||||
custom_minimum_size = Vector2(24, 24)
|
||||
layout_mode = 2
|
||||
|
||||
@@ -194,7 +194,6 @@ class PRD:
|
||||
fs.um_code_rx = u.isa_ports[port] & 0x7
|
||||
|
||||
|
||||
|
||||
func on_line_changed(unit_ems):
|
||||
if not unit_ems.online:
|
||||
yemsg_board.ems_load = yemsg_board.LoadState.NOT_DEFINED
|
||||
@@ -203,8 +202,6 @@ class PRD:
|
||||
|
||||
func on_data_received(_u):
|
||||
set_prd_status()
|
||||
if state != PrdState.WORK:
|
||||
return
|
||||
if yemsg_board.state_board != yemsg_board.WAIT or yemsg_board.state_cmd != yemsg_board.WAIT:
|
||||
return
|
||||
if yemsg_board.online:
|
||||
@@ -280,6 +277,8 @@ func _ready() -> void:
|
||||
var unit_caps_key = settings.get_unit_key('уарэп-капсрпб')
|
||||
var unit_caps = network.units[unit_caps_key]
|
||||
unit_caps.connect('data_received', Callable(self, 'on_data_capsrpb_received'))
|
||||
signaller.connect('режим_контроль', Callable(self, 'on_mode_changed').bind(PrdState.CONTROL))
|
||||
signaller.connect('режим_работа', Callable(self, 'on_mode_changed').bind(PrdState.WORK))
|
||||
|
||||
|
||||
func get_fs_param(index: int) -> Array:
|
||||
@@ -347,7 +346,7 @@ func on_data_capsrpb_received(unit0: capsrpb.CapsRpb):
|
||||
if not unit0.json_dic.has('ts'): return
|
||||
if unit0.json_dic['ts'] != 7: return
|
||||
if not unit0.json_dic.has('msfs'): return
|
||||
|
||||
|
||||
var msfs = unit0.json_dic['msfs']
|
||||
for fs in msfs:
|
||||
if fs is Dictionary:
|
||||
@@ -369,3 +368,9 @@ func on_data_capsrpb_received(unit0: capsrpb.CapsRpb):
|
||||
if fs.has('width'):
|
||||
fs_module.width_caps_rx = int(fs['width'])
|
||||
signaller.emit_signal('fs_update_state', fs_dict)
|
||||
|
||||
|
||||
## Вызывается при переходе в режим работа/контроль
|
||||
func on_mode_changed(changed_mode: int) -> void:
|
||||
for pdr in prd.prd_dict.values():
|
||||
pdr.state = changed_mode
|
||||
|
||||
@@ -70,11 +70,6 @@ class Sch3 extends unit.Unit:
|
||||
mbc.request_read_input(base_input_address, regs_input_count)
|
||||
cmd_state = CmdState.WAIT
|
||||
tx_tick = tick
|
||||
step_fsm = Sch3Fsm.READ_HOLDING
|
||||
elif step_fsm == Sch3Fsm.READ_HOLDING:
|
||||
mbc.request_read(base_holding_address, regs_holding_count)
|
||||
cmd_state = CmdState.WAIT
|
||||
tx_tick = tick
|
||||
step_fsm = Sch3Fsm.WRITE
|
||||
elif step_fsm == Sch3Fsm.CONNECT:
|
||||
try_disconnect()
|
||||
|
||||
Reference in New Issue
Block a user