рефактор машины состояний контроля

This commit is contained in:
Maxim
2025-09-01 13:21:33 +03:00
parent 9cc9b834d8
commit cd23da9a2d
9 changed files with 89 additions and 102 deletions

View File

@@ -343,29 +343,32 @@ func check_dir():
## Производит приём состояния модулей ФС.
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
if not unit0.json_dic['ts'] == 7 and not unit0.json_dic['ts'] == 5: return
if unit0.json_dic.has('msvk'):
for nfs in fs_caps_id:
fs_dict[fs_caps_id[nfs]].msvk = unit0.json_dic['msvk'] if unit0.json_dic['msvk'].size()>0 else []
var msfs = unit0.json_dic['msfs']
for fs in msfs:
if fs is Dictionary:
if not fs.has('nmfs'):
return
var nmfs = int(fs['nmfs'])
if not fs_caps_id.has(nmfs):
continue
var ii = fs_caps_id[nmfs]
if not fs_dict.has(ii):
continue
var fs_module = fs_dict[ii]
if fs.has('isg'):
fs_module.isg = int(fs['isg'])
if fs.has('pow'):
fs_module.pow_caps_rx = int(fs['pow'])
if fs.has('freq'):
fs_module.freq_caps_rx = int(fs['freq'])
if fs.has('width'):
fs_module.width_caps_rx = int(fs['width'])
if unit0.json_dic.has('msfs'):
var msfs = unit0.json_dic['msfs']
for fs in msfs:
if fs is Dictionary:
if not fs.has('nmfs'):
return
var nmfs = int(fs['nmfs'])
if not fs_caps_id.has(nmfs):
continue
var ii = fs_caps_id[nmfs]
if not fs_dict.has(ii):
continue
var fs_module = fs_dict[ii]
if fs.has('isg'):
fs_module.isg = int(fs['isg'])
if fs.has('pow'):
fs_module.pow_caps_rx = int(fs['pow'])
if fs.has('freq'):
fs_module.freq_caps_rx = int(fs['freq'])
if fs.has('width'):
fs_module.width_caps_rx = int(fs['width'])
signaller.emit_signal('fs_update_state', fs_dict)

View File

@@ -68,7 +68,8 @@ class TestPRD extends Node:
var control_timer: Timer = Timer.new()
var ems_6666_timer: Timer = Timer.new()
signal control_is_over(control_results, power_result)
var flag_fs_turn_on: bool = false
var flag_fs_turn_off: bool = false
## Инициализация аргуметнов
func _init(init_data: Dictionary) -> void:
@@ -118,9 +119,15 @@ class TestPRD extends Node:
if fs_key.is_empty():
return
var fs_result := {fs_key: 0}
var fs_result := {fs_key: 0, 'fs_modulation': 'none'}
fs_result = on_fs_state(packet_type_7, fs_mapping, fs_result)
control_results[fs_key] = fs_result[fs_key]
if fs_result.fs_modulation and not flag_fs_turn_on:
print_debug('Помеха "Включено"')
flag_fs_turn_on = true
if not fs_result.fs_modulation and not flag_fs_turn_off:
print('Помеха "Откючено"')
flag_fs_turn_off = true
##
@@ -132,7 +139,7 @@ class TestPRD extends Node:
_handle_fs_turn_on_state()
state = STATE_MASHINE.FS_WORK
STATE_MASHINE.FS_WORK:
if not flag_timer_started:
if flag_fs_turn_on:
_handle_fs_work_state()
STATE_MASHINE.CHEK_KASSETA_Y5:
if block_kasseta_y5_config['yau07']:
@@ -146,7 +153,7 @@ class TestPRD extends Node:
#ems_6666_timer.start()
#state = STATE_MASHINE.READ_ISA
STATE_MASHINE.READ_ISA:
if (unit_prd.cmd_state == unit_prd.CmdState.DONE) or (unit_prd.cmd_state == unit_prd.CmdState.FALSE):
if (unit_prd.cmd_state == unit_prd.CmdState.DONE) or (unit_prd.cmd_state == unit_prd.CmdState.FAIL):
_handle_read_isa(module_prd, unit_prd, [constants.ADDR_UG_LITERA_1, constants.ADDR_UG_LITERA_2, constants.ADDR_UG_LITERA_3])
state = STATE_MASHINE.UG_SET_RAY
STATE_MASHINE.UG_SET_RAY:
@@ -196,6 +203,7 @@ class TestPRD extends Node:
state = STATE_MASHINE.FS_TURN_OFF
STATE_MASHINE.FS_TURN_OFF:
_handle_fs_turn_off_state()
state = STATE_MASHINE.STOP_CONTROL
STATE_MASHINE.STOP_CONTROL:
_handle_stop_control_state()
@@ -203,8 +211,8 @@ class TestPRD extends Node:
func _handle_init_state() -> void:
control_label.text = 'Выполняется инициализация ФС-%s' % current_litera
if current_litera in [1, 2, 3, 4, 5, 6, 7]:
state = STATE_MASHINE.FS_TURN_ON
#state = STATE_MASHINE.STOP_CONTROL
if flag_fs_turn_off:
state = STATE_MASHINE.FS_TURN_ON
else:
control_results = on_control_result(block_ip_config, control_results)
var send_power_pack = prep_power(power_result, self_name)
@@ -221,8 +229,6 @@ class TestPRD extends Node:
func _handle_fs_work_state() -> void:
control_label.text = 'Выполняется проверка ФС-%s' % current_litera
if not module_prd.unit_yau07.online:
return
if (current_litera == 2 and control_results.fs_2) or \
(current_litera == 3 and control_results.fs_3) or \
(current_litera == 4 and control_results.fs_4) or \
@@ -268,8 +274,8 @@ class TestPRD extends Node:
func _handle_fs_turn_off_state() -> void:
control_label.text = 'Выполняется отключение ФС-%s' % current_litera
flag_fs_turn_off = false
manage_fs(false, self_name, pribor_config, fs_parameters, current_litera, constants.POWER_UM)
state = STATE_MASHINE.STOP_CONTROL
func _handle_stop_control_state() -> void:
@@ -364,6 +370,7 @@ class TestPRD extends Node:
func on_stop_control() -> void:
_handle_fs_turn_off_state()
state = STATE_MASHINE.FS_TURN_OFF
@@ -374,7 +381,6 @@ class TestPRD extends Node:
if not ip_config[block][1]:
all_blocks_ip_ok = false
ctrl_results['block_ip'] = all_blocks_ip_ok
return ctrl_results
@@ -522,6 +528,7 @@ class TestPRD extends Node:
var rule: Dictionary = FS_RULES[rule_key]
if _should_apply_rule(fs_num, rule, updated_results):
updated_results[rule.key] = fs_data.isg
updated_results['fs_modulation'] = fs_data.msvk.size() > 0
break
return updated_results
@@ -611,7 +618,7 @@ class TestPRD extends Node:
if pribor == '' or pribor == '' or pribor == '' or pribor == '':
dou = 'dou_6' if litera == 6 else 'dou_7'
elif pribor == '' or pribor == '' or pribor == '' or pribor == '':
dou = 'dou_4' if litera == 5 else 'dou_5'
dou = 'dou_4' if litera == 4 else 'dou_5'
var ray_dic: Dictionary = power_dic[litera]
if ray_dic[RAY_m5].size() == 0 or \
@@ -626,7 +633,7 @@ class TestPRD extends Node:
for i_pow_arr in ray_dic.values():
for i_pow in i_pow_arr.size():
if i_pow_arr[i_pow] < cnst.POWER_THRESHOLD:
print_debug('dou_%s: false' % litera)
#print_debug('dou_%s: false' % litera)
all_dou_ok = false
control_dic[dou] = all_dou_ok