diff --git a/scenes/pribor-prd-k/pribor-prd-k.gd b/scenes/pribor-prd-k/pribor-prd-k.gd index c4ef34c0..a185a989 100644 --- a/scenes/pribor-prd-k/pribor-prd-k.gd +++ b/scenes/pribor-prd-k/pribor-prd-k.gd @@ -80,9 +80,9 @@ static func power_fill(pow_dic: Dictionary, fs_result: Dictionary, power_amplifi if pow_dic[powamp_meta].size() < 6: status = STATE_VAL.ERROR else: - if powamp_meta == 'um_7' and not fs_result.fs_1: return + if powamp_meta == 'um_8' and not fs_result.fs_1: return if powamp_meta in ['um_1', 'um_2', 'um_3', 'um_4', 'um_5', 'um_6'] and not fs_result.fs_6: return - if powamp_meta in ['um_8', 'um_9', 'um_10', 'um_11', 'um_12', 'um_13'] and not fs_result.fs_7: return + if powamp_meta in ['um_9', 'um_10', 'um_11', 'um_12', 'um_13', 'um_14'] and not fs_result.fs_7: return i_powapm.value0 = pow_dic[powamp_meta] for i_p in pow_dic[powamp_meta]: if i_p < POWER_THRESHOLD: diff --git a/scenes/pribor-prd-n/pribor-prd-n.gd b/scenes/pribor-prd-n/pribor-prd-n.gd index 8f7ad06c..c8b7fd74 100644 --- a/scenes/pribor-prd-n/pribor-prd-n.gd +++ b/scenes/pribor-prd-n/pribor-prd-n.gd @@ -75,7 +75,7 @@ static func power_fill(pow_dic: Dictionary, fs_result: Dictionary, power_amplifi var status = STATE_VAL.GOOD if pow_dic else STATE_VAL.NONE if not pow_dic.has(powamp_meta): return if powamp_meta in ['um_1', 'um_2', 'um_3', 'um_4', 'um_5', 'um_6'] and not fs_result.fs_2: return - if powamp_meta in ['um_7', 'um_8', 'um_9', 'um_10', 'um_11', 'um_12'] and not fs_result.fs_3: return + if powamp_meta in ['um_9', 'um_10', 'um_11', 'um_12', 'um_13', 'um_14'] and not fs_result.fs_3: return i_node_powapm.value0 = pow_dic[powamp_meta] for i_p in pow_dic[powamp_meta]: if i_p < POWER_THRESHOLD: diff --git a/scenes/pribor-prd-v/pribor-prd-v.gd b/scenes/pribor-prd-v/pribor-prd-v.gd index b932aa20..6c32f5ac 100644 --- a/scenes/pribor-prd-v/pribor-prd-v.gd +++ b/scenes/pribor-prd-v/pribor-prd-v.gd @@ -75,7 +75,7 @@ static func power_fill(pow_dic: Dictionary, fs_result: Dictionary, power_amplifi status = STATE_VAL.ERROR else: if powamp_meta in ['um_1', 'um_2', 'um_3', 'um_4', 'um_5', 'um_6'] and not fs_result.fs_4: return - if powamp_meta in ['um_7', 'um_8', 'um_9', 'um_10', 'um_11', 'um_12'] and not fs_result.fs_5: return + if powamp_meta in ['um_9', 'um_10', 'um_11', 'um_12', 'um_13', 'um_14'] and not fs_result.fs_5: return i_powapm.value0 = pow_dic[powamp_meta] for i_p in pow_dic[powamp_meta]: if i_p < POWER_THRESHOLD: diff --git a/scenes/pribor-prd-v/pribor-prd-v.tscn b/scenes/pribor-prd-v/pribor-prd-v.tscn index 3d9bd2e6..1910aa16 100644 --- a/scenes/pribor-prd-v/pribor-prd-v.tscn +++ b/scenes/pribor-prd-v/pribor-prd-v.tscn @@ -323,7 +323,7 @@ fname = "УМ1535А" rname = "A13" value0_info = "Мощность, Вт" value1_info = "Температура,°C" -metadata/um = "um_7" +metadata/um = "um_9" [node name="um1535_A14" parent="." groups=["power_amplifier"] instance=ExtResource("8_4e87c")] layout_mode = 0 @@ -335,7 +335,7 @@ fname = "УМ1535А" rname = "A14" value0_info = "Мощность, Вт" value1_info = "Температура,°C" -metadata/um = "um_8" +metadata/um = "um_10" [node name="um1535_A15" parent="." groups=["power_amplifier"] instance=ExtResource("8_4e87c")] layout_mode = 0 @@ -347,7 +347,7 @@ fname = "УМ1535А" rname = "A15" value0_info = "Мощность, Вт" value1_info = "Температура,°C" -metadata/um = "um_9" +metadata/um = "um_11" [node name="um1535_A16" parent="." groups=["power_amplifier"] instance=ExtResource("8_4e87c")] layout_mode = 0 @@ -359,7 +359,7 @@ fname = "УМ1535А" rname = "A16" value0_info = "Мощность, Вт" value1_info = "Температура,°C" -metadata/um = "um_10" +metadata/um = "um_12" [node name="um1535_A17" parent="." groups=["power_amplifier"] instance=ExtResource("8_4e87c")] layout_mode = 0 @@ -371,7 +371,7 @@ fname = "УМ1535А" rname = "A17" value0_info = "Мощность, Вт" value1_info = "Температура,°C" -metadata/um = "um_11" +metadata/um = "um_13" [node name="um1535_A18" parent="." groups=["power_amplifier"] instance=ExtResource("8_4e87c")] layout_mode = 0 @@ -383,7 +383,7 @@ fname = "УМ1535А" rname = "A18" value0_info = "Мощность, Вт" value1_info = "Температура,°C" -metadata/um = "um_12" +metadata/um = "um_14" [node name="control_result" type="Label" parent="."] layout_mode = 0 diff --git a/scenes/контроль/контроль.tscn b/scenes/контроль/контроль.tscn index 5a3a92e3..0b8d870a 100644 --- a/scenes/контроль/контроль.tscn +++ b/scenes/контроль/контроль.tscn @@ -1689,6 +1689,7 @@ offset_bottom = 104.0 focus_mode = 0 text = "Запуск контроля" script = ExtResource("18_lbx5w") +metadata/_edit_lock_ = true [connection signal="toggled" from="pribor_prd_n_1" to="pribor_prd_n_1" method="_on_toggled"] [connection signal="toggled" from="pribor_uf" to="pribor_uf" method="_on_toggled"] diff --git a/scripts/pribor-prd.gd b/scripts/pribor-prd.gd index 23865d78..23c64768 100644 --- a/scripts/pribor-prd.gd +++ b/scripts/pribor-prd.gd @@ -11,6 +11,26 @@ const RAY_35: String = "RAY_35" const RAY_45: String = "RAY_45" const RAY_TYPES := [RAY_m5, RAY_5, RAY_15, RAY_25, RAY_35, RAY_45] +enum STATE_MACHINE { + INIT, + FS_TURN_ON, + FS_WORK, + WRITE_ISA, + READ_ISA, + CHEK_KASSETA_Y5, + UG_SET_RAY, + UG_SET_RAY_0, + UG_SET_RAY_1, + UG_SET_RAY_2, + UG_SET_RAY_3, + UG_SET_RAY_4, + UG_SET_RAY_5, + IN_EMS_RUN, + IN_EMS_STOP, + FS_TURN_OFF, + STOP_CONTROL, + AWAIT + } # Загруженные конфигурации var config_data: Dictionary @@ -18,7 +38,6 @@ var device_constants: Dictionary var base_configs: Dictionary var device_configs: Dictionary var data_indices: Dictionary -var state_machine_enum: Dictionary var fs_keys: Dictionary var temperature_constants: Dictionary var ems_input_bits_config: Dictionary @@ -35,7 +54,7 @@ var temperature_um: Dictionary var control_results: Dictionary var power_result: Dictionary var self_name: String -var state: int = 0 +var state: int = STATE_MACHINE.INIT var current_litera: int var flag_write_isa: bool = false var flag_fs_status_ok: bool = false @@ -108,25 +127,44 @@ func _load_configuration() -> void: func _parse_config_data() -> void: - device_constants = config_data.get("device_constants", {}) - base_configs = config_data.get("base_configs", {}) - device_configs = config_data.get("device_configs", {}) - data_indices = config_data.get("data_indices", {}) - state_machine_enum = config_data.get("state_machine", {}) - fs_keys = config_data.get("fs_keys", {}) - temperature_constants = config_data.get("temperature_constants", {}) - ems_input_bits_config = config_data.get("ems_input_bits_config", {}) - fs_rules = config_data.get("fs_rules", []) + device_constants = _convert_numbers(config_data.get("device_constants", {})) + base_configs = _convert_numbers(config_data.get("base_configs", {})) + device_configs = _convert_numbers(config_data.get("device_configs", {})) + data_indices = _convert_numbers(config_data.get("data_indices", {})) + fs_keys = _convert_numbers(config_data.get("fs_keys", {})) + temperature_constants = _convert_numbers(config_data.get("temperature_constants", {})) + ems_input_bits_config = _convert_numbers(config_data.get("ems_input_bits_config", {})) + fs_rules = _convert_numbers(config_data.get("fs_rules", [])) + + +static func _convert_numbers(value): + if value is float: + # Если float без дробной части - конвертируем в int + if value == int(value): + return int(value) + return value + elif value is Dictionary: + var result = {} + for key in value: + result[key] = _convert_numbers(value[key]) + return result + elif value is Array: + var result = [] + for item in value: + result.append(_convert_numbers(item)) + return result + else: + return value func _initialize_ray_mapping() -> void: _ray_state_mapping = { - state_machine_enum.get("UG_SET_RAY_0", 7): RAY_m5, - state_machine_enum.get("UG_SET_RAY_1", 8): RAY_5, - state_machine_enum.get("UG_SET_RAY_2", 9): RAY_15, - state_machine_enum.get("UG_SET_RAY_3", 10): RAY_25, - state_machine_enum.get("UG_SET_RAY_4", 11): RAY_35, - state_machine_enum.get("UG_SET_RAY_5", 12): RAY_45 + STATE_MACHINE.UG_SET_RAY_0: "RAY_m5", + STATE_MACHINE.UG_SET_RAY_1: "RAY_5", + STATE_MACHINE.UG_SET_RAY_2: "RAY_15", + STATE_MACHINE.UG_SET_RAY_3: "RAY_25", + STATE_MACHINE.UG_SET_RAY_4: "RAY_35", + STATE_MACHINE.UG_SET_RAY_5: "RAY_45", } @@ -208,13 +246,13 @@ func on_fs_update_state(packet_type_7: Dictionary, fs_mapping: Dictionary) -> vo ## func state_control_machine() -> void: match state: - state_machine_enum.INIT: + STATE_MACHINE.INIT: print("Start control for %s device %s litera" % [self_name, current_litera]) _handle_init_state() - state_machine_enum.FS_TURN_ON: + STATE_MACHINE.FS_TURN_ON: _handle_fs_turn_on_state() - state = state_machine_enum.FS_WORK - state_machine_enum.FS_WORK: + state = STATE_MACHINE.FS_WORK + STATE_MACHINE.FS_WORK: var flag_ecm: bool = false for key in ecms: var params = ecms[key].params.freq @@ -225,74 +263,76 @@ func state_control_machine() -> void: if flag_ecm and flag_fs_status_ok: ems_6666_timer.start() _handle_fs_work_state() - state_machine_enum.CHEK_KASSETA_Y5: + STATE_MACHINE.CHEK_KASSETA_Y5: if block_kasseta_y5_config['yau07']: - state = state_machine_enum.WRITE_ISA - state_machine_enum.WRITE_ISA: + state = STATE_MACHINE.WRITE_ISA + STATE_MACHINE.WRITE_ISA: if not flag_write_isa: _handle_ug_set_state(0x6) - state = state_machine_enum.READ_ISA - state_machine_enum.READ_ISA: + state = STATE_MACHINE.READ_ISA + STATE_MACHINE.READ_ISA: if (unit_prd.cmd_state == unit_prd.CmdState.DONE) or (unit_prd.cmd_state == unit_prd.CmdState.FAIL): _handle_read_isa(unit_prd, [constants.ADDR_UG_LITERA_1, constants.ADDR_UG_LITERA_2, constants.ADDR_UG_LITERA_3], cmd_array) flag_write_isa = false - state = state_machine_enum.UG_SET_RAY - state_machine_enum.UG_SET_RAY: + state = STATE_MACHINE.UG_SET_RAY + STATE_MACHINE.UG_SET_RAY: var addr: int = constants.ADDR_UG_LITERA_1 if current_litera == 3 or current_litera == 5 or current_litera == 7: addr = constants.ADDR_UG_LITERA_2 if unit_prd.isa_ports.has(addr) and (unit_prd.cmd_state == unit_prd.CmdState.DONE): if unit_prd.isa_ports[addr] & 0x07 == 0: - state = state_machine_enum.UG_SET_RAY_1 + state = STATE_MACHINE.UG_SET_RAY_1 elif unit_prd.isa_ports[addr] & 0x07 == 1: - state = state_machine_enum.UG_SET_RAY_2 + state = STATE_MACHINE.UG_SET_RAY_2 elif unit_prd.isa_ports[addr] & 0x07 == 2: - state = state_machine_enum.UG_SET_RAY_3 + state = STATE_MACHINE.UG_SET_RAY_3 elif unit_prd.isa_ports[addr] & 0x07 == 3: - state = state_machine_enum.UG_SET_RAY_4 + state = STATE_MACHINE.UG_SET_RAY_4 elif unit_prd.isa_ports[addr] & 0x07 == 4: - state = state_machine_enum.UG_SET_RAY_5 + state = STATE_MACHINE.UG_SET_RAY_5 elif unit_prd.isa_ports[addr] & 0x07 == 5: if not current_litera == 1: control_results = check_dou_result(control_results, power_for_litera, self_name, current_litera, constants) - state = state_machine_enum.IN_EMS_STOP + state = STATE_MACHINE.IN_EMS_STOP elif unit_prd.isa_ports[addr] & 0x07 == 6: - state = state_machine_enum.UG_SET_RAY_0 + state = STATE_MACHINE.UG_SET_RAY_0 + if current_litera == 1: + state = STATE_MACHINE.UG_SET_RAY_5 - state_machine_enum.UG_SET_RAY_0: + STATE_MACHINE.UG_SET_RAY_0: if flag_si_fs_input and not flag_write_isa: control_timer.stop() _handle_ug_set_state(0x0) await get_tree().create_timer(0.5).timeout - state = state_machine_enum.READ_ISA - state_machine_enum.UG_SET_RAY_1: + state = STATE_MACHINE.READ_ISA + STATE_MACHINE.UG_SET_RAY_1: if not flag_write_isa: _handle_ug_set_state(0x1) - state = state_machine_enum.READ_ISA - state_machine_enum.UG_SET_RAY_2: + state = STATE_MACHINE.READ_ISA + STATE_MACHINE.UG_SET_RAY_2: if not flag_write_isa: _handle_ug_set_state(0x2) - state = state_machine_enum.READ_ISA - state_machine_enum.UG_SET_RAY_3: + state = STATE_MACHINE.READ_ISA + STATE_MACHINE.UG_SET_RAY_3: if not flag_write_isa: _handle_ug_set_state(0x3) - state = state_machine_enum.READ_ISA - state_machine_enum.UG_SET_RAY_4: + state = STATE_MACHINE.READ_ISA + STATE_MACHINE.UG_SET_RAY_4: if not flag_write_isa: _handle_ug_set_state(0x4) - state = state_machine_enum.READ_ISA - state_machine_enum.UG_SET_RAY_5: + state = STATE_MACHINE.READ_ISA + STATE_MACHINE.UG_SET_RAY_5: if not flag_write_isa: _handle_ug_set_state(0x5) - state = state_machine_enum.READ_ISA - state_machine_enum.IN_EMS_STOP: + state = STATE_MACHINE.READ_ISA + STATE_MACHINE.IN_EMS_STOP: ems_6666_timer.stop() - state = state_machine_enum.FS_TURN_OFF - state_machine_enum.FS_TURN_OFF: + state = STATE_MACHINE.FS_TURN_OFF + STATE_MACHINE.FS_TURN_OFF: ems_6666_timer.stop() _handle_fs_turn_off_state() - state = state_machine_enum.STOP_CONTROL - state_machine_enum.STOP_CONTROL: + state = STATE_MACHINE.STOP_CONTROL + STATE_MACHINE.STOP_CONTROL: _handle_stop_control_state() ## В машине состояний вызов изменения состояния прогресс бара контроля progressbar_status() @@ -302,7 +342,7 @@ func state_control_machine() -> void: func _handle_init_state() -> void: if current_litera in [1, 2, 3, 4, 5, 6, 7]: if not ecms.size(): - state = state_machine_enum.FS_TURN_ON + state = STATE_MACHINE.FS_TURN_ON else: control_results = on_control_result(block_ip_config, control_results) power_result = prep_power(power_for_litera, self_name) @@ -326,7 +366,7 @@ func _handle_fs_work_state() -> void: (current_litera == 6 and control_results.fs_6) or \ (current_litera == 7 and control_results.fs_7) or \ (current_litera == 1 and control_results.fs_1): - state = state_machine_enum.CHEK_KASSETA_Y5 + state = STATE_MACHINE.CHEK_KASSETA_Y5 func _handle_ug_set_state(RAY_DOU_NUM: int) -> void: @@ -363,7 +403,7 @@ func on_state_mashine(): func progressbar_status() -> void: match state: - state_machine_enum.INIT: + STATE_MACHINE.INIT: cc += 10 if current_litera in [3, 5, 6, 7] else 0 if control_timer.get_time_left() > 0: progress_value = cc + control_timer.get_wait_time() - control_timer.get_time_left() @@ -380,7 +420,7 @@ func _handle_fs_turn_off_state() -> void: ##'Выполняется завершение проверки ФС-%s' % current_litera func _handle_stop_control_state() -> void: _advance_to_next_fs() - state = state_machine_enum.INIT + state = STATE_MACHINE.INIT func _advance_to_next_fs() -> void: @@ -420,7 +460,7 @@ func _on_start_contol_device()-> void: func _determine_self_name() -> void: cc = 0 - state = state_machine_enum.get("INIT", 0) + state = STATE_MACHINE.get("INIT", 0) var current_unit = unit_prd.name var parts = current_unit.split('-') self_name = parts[-1] @@ -486,7 +526,7 @@ func on_mode_changed(in_tree: bool) -> void: if not in_tree: ## TODO: Дополнительная проверка если контроль идет, если нет, то смысла вызывать нет progress_value = 0 machine_timer.stop() - state = state_machine_enum.INIT + state = STATE_MACHINE.INIT _handle_fs_turn_off_state() #prd_v_module.cmd_array.append([unit_prd_v.CmdCode.WRITE_ISA, [constants_v.ADDR_UG_LITERA_1, ug_work_1, constants_v.ADDR_UG_LITERA_2, ug_work_2]]) @@ -538,7 +578,7 @@ static func _get_dkm_bit_for_current_fs(litera: int, constants_dic: Dictionary) func on_stop_control() -> void: _handle_fs_turn_off_state() - state = state_machine_enum.FS_TURN_OFF + state = STATE_MACHINE.FS_TURN_OFF static func on_control_result(ip_config: Dictionary, ctrl_results: Dictionary) -> Dictionary: @@ -813,13 +853,13 @@ static func prep_power(power_dic: Dictionary, prd_name: String)-> Dictionary: if arr_litera.size() != 3: um_names = [ ['um_1', 'um_2', 'um_3', 'um_4', 'um_5', 'um_6'], - ['um_7', 'um_8', 'um_9', 'um_10', 'um_11', 'um_12'] + ['um_9', 'um_10', 'um_11', 'um_12', 'um_13', 'um_14'] ] else: um_names = [ ['um_1', 'um_2', 'um_3', 'um_4', 'um_5', 'um_6'], - ['um_8', 'um_9', 'um_10', 'um_11', 'um_12', 'um_13'], - ['um_7'] # Особый случай для третьего элемента + ['um_9', 'um_10', 'um_11', 'um_12', 'um_13', 'um_14'], + ['um_8'] ] for litera_index in arr_litera.size():