Compare commits
5 Commits
master
...
a9bd975cb1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a9bd975cb1 | ||
|
|
568f0d1357 | ||
|
|
0bf79c7f6b | ||
|
|
3aaff6faa1 | ||
|
|
8b28ca7714 |
@@ -119,13 +119,9 @@ func on_interfer_new(ecm, table_index):
|
||||
$table.set_row_editable(i_row, false)
|
||||
$table.set_node_user_data(0, i_row, ecm)
|
||||
table_index[ecm.ispp] = i_row
|
||||
$table.cleanup_invalid_selectors()
|
||||
# Будем надеяться, что отложенные вызовы производятся в том же порядке
|
||||
var selected_rows = []
|
||||
$table.get_selected_rows(selected_rows)
|
||||
for old_row in selected_rows:
|
||||
$table.set_row_selected(old_row, false)
|
||||
$table.set_row_selected(i_row, true)
|
||||
$table.call_deferred('clear_rows_selected')
|
||||
$table.call_deferred('set_row_selected', i_row, true)
|
||||
if not interfer.auto_enabled:
|
||||
signaller.emit_signal('interfer_selected', ecm)
|
||||
|
||||
|
||||
@@ -166,7 +166,7 @@ static func on_control_result(for_result_dic: Dictionary) -> void:
|
||||
f.state = result_dic[fs_meta]
|
||||
|
||||
if not all_y5_good: return
|
||||
if result_dic.fs_2 == 1 and block_kasseta_y5_prd_config_n['yau07']:
|
||||
if result_dic.fs_2 == 1 and block_kasseta_y5_prd_config_n['yau07']:
|
||||
for_result_dic.module_fs_2.state = STATE_VAL.GOOD if result_dic.dkm_2 else STATE_VAL.ERROR
|
||||
for_result_dic.dou_2.state = STATE_VAL.GOOD if result_dic.dou_2 else STATE_VAL.ERROR
|
||||
|
||||
|
||||
@@ -32,29 +32,29 @@ func disable_all():
|
||||
func on_data_received(data: PackedByteArray):
|
||||
|
||||
# Сеть 1. Использование
|
||||
$block_input1.state = STATE_VAL.GOOD if data[4] & (1 << 5) else STATE_VAL.ERROR
|
||||
$block_input1.state = STATE_VAL.GOOD if data[3] & (1 << 5) else STATE_VAL.ERROR
|
||||
# Сеть 1. Вход
|
||||
$block_input1.state0 = STATE_VAL.GOOD if ((data[4] & (1 << 1)) == 0) and ((data[4] & (1 << 3)) == 0) else STATE_VAL.ERROR
|
||||
$block_input1.state0 = STATE_VAL.GOOD if ((data[3] & (1 << 1)) == 0) and ((data[3] & (1 << 3)) == 0) else STATE_VAL.ERROR
|
||||
# Сеть 1. Неисправность блока инвертора 1 канала
|
||||
$block_input1.state1 = STATE_VAL.GOOD if (data[6] & (1 << 2)) == 0 else STATE_VAL.ERROR
|
||||
$block_input1.state1 = STATE_VAL.GOOD if (data[5] & (1 << 2)) == 0 else STATE_VAL.ERROR
|
||||
# Сеть 1. Перегрев 1 канала
|
||||
$block_input1.state2 = STATE_VAL.GOOD if (data[5] & (1 << 3)) == 0 else STATE_VAL.ERROR
|
||||
$block_input1.state2 = STATE_VAL.GOOD if (data[4] & (1 << 3)) == 0 else STATE_VAL.ERROR
|
||||
|
||||
# Сеть 2. Использование
|
||||
$block_input2.state = STATE_VAL.GOOD if data[4] & (1 << 6) else STATE_VAL.ERROR
|
||||
$block_input2.state = STATE_VAL.GOOD if data[3] & (1 << 6) else STATE_VAL.ERROR
|
||||
# Сеть 2. Вход
|
||||
$block_input2.state0 = STATE_VAL.GOOD if ((data[4] & (1 << 2)) == 0) and ((data[4] & (1 << 4)) == 0) else STATE_VAL.ERROR
|
||||
$block_input2.state0 = STATE_VAL.GOOD if ((data[3] & (1 << 2)) == 0) and ((data[3] & (1 << 4)) == 0) else STATE_VAL.ERROR
|
||||
# Сеть 2. Неисправность блока инвертора 2 канала
|
||||
$block_input2.state1 = STATE_VAL.GOOD if (data[6] & (1 << 3)) == 0 else STATE_VAL.ERROR
|
||||
$block_input2.state1 = STATE_VAL.GOOD if (data[5] & (1 << 3)) == 0 else STATE_VAL.ERROR
|
||||
# Сеть 2. Перегрев 2 канала
|
||||
$block_input2.state2 = STATE_VAL.GOOD if (data[5] & (1 << 4)) == 0 else STATE_VAL.ERROR
|
||||
$block_input2.state2 = STATE_VAL.GOOD if (data[4] & (1 << 4)) == 0 else STATE_VAL.ERROR
|
||||
|
||||
# Неисправность, напряжение меньше номинального, напряжение выше номинального
|
||||
$block_output.state0 = STATE_VAL.GOOD if ((data[4] & (1 << 0)) == 0) and ((data[4] & (1 << 7)) == 0) and ((data[5] & (1 << 2)) == 0) else STATE_VAL.ERROR
|
||||
$block_output.state0 = STATE_VAL.GOOD if ((data[3] & (1 << 0)) == 0) and ((data[3] & (1 << 7)) == 0) and ((data[4] & (1 << 2)) == 0) else STATE_VAL.ERROR
|
||||
# Перегрузка и короткое замыкание по выходу
|
||||
$block_output.state1 = STATE_VAL.GOOD if ((data[5] & (1 << 0)) == 0) and ((data[5] & (1 << 1)) == 0) else STATE_VAL.ERROR
|
||||
$block_output.state1 = STATE_VAL.GOOD if ((data[4] & (1 << 0)) == 0) and ((data[4] & (1 << 1)) == 0) else STATE_VAL.ERROR
|
||||
# Критическая температура
|
||||
$block_output.state2 = STATE_VAL.GOOD if ((data[5] & (1 << 5)) == 0) else STATE_VAL.ERROR
|
||||
$block_output.state2 = STATE_VAL.GOOD if ((data[4] & (1 << 5)) == 0) else STATE_VAL.ERROR
|
||||
|
||||
# Обобщённое состояние
|
||||
state = STATE_VAL.GOOD \
|
||||
|
||||
@@ -717,7 +717,7 @@ func set_coordinates(lon: float, lat: float, course: float) -> void:
|
||||
add_mark_from_lon_lat(ship_id, lon, lat, ship_instance, 0.0)
|
||||
else:
|
||||
_marks[ship_id].position = lonlat_to_world(lon, lat)
|
||||
ship_instance.rotation_degrees = fmod(270.0 + course, 360.0)
|
||||
ship_instance.rotation_degrees = fmod(course, 360.0)
|
||||
queue_redraw()
|
||||
|
||||
|
||||
|
||||
@@ -1027,7 +1027,6 @@ patch_margin_right = 16
|
||||
patch_margin_bottom = 16
|
||||
|
||||
[node name="connect_pribor" type="AnimatedSprite2D" parent="pribor_prd_n_2"]
|
||||
visible = false
|
||||
light_mask = 3
|
||||
position = Vector2(37, -10)
|
||||
scale = Vector2(0.625, 0.625)
|
||||
|
||||
@@ -54,15 +54,15 @@ const EMS_G_BOARDS = {
|
||||
|
||||
## Таблица с данными для входов, первое значение - индекс устройства в ячейке КЭМС.
|
||||
const INPUT_KEMS = [
|
||||
[1 ,['УИЗП №1', 'Х7', '0.00', '0.00']],
|
||||
[1 ,['5П-26М', 'Х7', '0.00', '0.00']],
|
||||
[2 ,['УИЗПФ №1','Х8', '0.00', '0.00']],
|
||||
[3 ,['УИЗП №2', 'Х10', '0.00', '0.00']],
|
||||
[3 ,['НРЛС МР-231', 'Х10', '0.00', '0.00']],
|
||||
[4 ,['УИЗПФ №2','Х11', '0.00', '0.00']],
|
||||
[5 ,['УИЗП №3', 'Х13', '0.00', '0.00']],
|
||||
[5 ,['НРЛС-231-3', 'Х13', '0.00', '0.00']],
|
||||
[6 ,['УИЗПФ №3','Х14', '0.00', '0.00']],
|
||||
[7 ,['УИЗП №4', 'Х16', '0.00', '0.00']],
|
||||
[7 ,['3Р87-1Ф', 'Х16', '0.00', '0.00']],
|
||||
[8 ,['УИЗПФ №4','Х17', '0.00', '0.00']],
|
||||
[9 ,['УИЗП №5', 'Х19', '0.00', '0.00']],
|
||||
[9 ,['ПРЛ ИСБУ-23900', 'Х19', '0.00', '0.00']],
|
||||
[10,['УИЗПФ №5','Х20', '0.00', '0.00']],
|
||||
[11,['УИЗП №6', 'Х22', '0.00', '0.00']],
|
||||
[12,['УИЗПФ №6','Х23', '0.00', '0.00']],
|
||||
@@ -77,11 +77,11 @@ const INPUT_KEMS = [
|
||||
|
||||
## Таблица с данными для выходов, первое значение - индекс устройства в ячейке КЭМС.
|
||||
const OUTPUT_KEMS = [
|
||||
[47,['Бланк №1','Х6', '0.00', '0.00']],
|
||||
[48,['Бланк №2','Х9', '0.00', '0.00']],
|
||||
[49,['Бланк №3','Х12', '0.00', '0.00']],
|
||||
[50,['Бланк №4','Х15', '0.00', '0.00']],
|
||||
[51,['Бланк №5','Х18', '0.00', '0.00']],
|
||||
[47,['5П-26М','Х6', '0.00', '0.00']],
|
||||
[48,['НРЛС МР-231','Х9', '0.00', '0.00']],
|
||||
[49,['НРЛС-231-3','Х12', '0.00', '0.00']],
|
||||
[50,['3Р87-1Ф','Х15', '0.00', '0.00']],
|
||||
[51,['ПРЛ ИСБУ-23900','Х18', '0.00', '0.00']],
|
||||
[52,['Бланк №6','Х21', '0.00', '0.00']],
|
||||
[53,['Бланк №7','Х24', '0.00', '0.00']],
|
||||
[55,['Бланк_МП №1', 'X28 : 8', '0.00', '0.00']],
|
||||
|
||||
@@ -105,8 +105,8 @@ class Fs:
|
||||
[10, 20],
|
||||
[20, 30],
|
||||
[30, 40],
|
||||
[40, 50],
|
||||
[50, 55]]
|
||||
[40, 90],
|
||||
[90, 100]]
|
||||
|
||||
var index ## Индекс блока усилителей
|
||||
var modulation: bool ## Состояние модуляции
|
||||
@@ -231,22 +231,22 @@ class PRD:
|
||||
execute_cmd()
|
||||
return
|
||||
execute_cmd()
|
||||
|
||||
|
||||
## Мониторинг состояния юнита прд
|
||||
func set_prd_status() -> void:
|
||||
# Обновление статуса платы ЯУ-07
|
||||
yemsg_board.set_status(unit_yau07.status)
|
||||
|
||||
|
||||
# Проверка онлайн-статусов основных модулей
|
||||
ug_online = (unit_yau07.status[0] >> 1) & 1
|
||||
var ukp_1_online = (unit_yau07.status[0] >> 2) & 1
|
||||
var ukp_2_online = (unit_yau07.status[0] >> 3) & 1
|
||||
var ems_g_online = (unit_yau07.status[0] & 1) & 1
|
||||
|
||||
|
||||
# Установка флага состояния УГ
|
||||
if not ug_online:
|
||||
set_ug_state = true
|
||||
|
||||
|
||||
# Проверка источников питания
|
||||
var ip_online: bool = _check_dry_contact(unit_yau07.status, prd_name)
|
||||
var check_temperature_um: bool = unit_control.flags.temperature_ok
|
||||
@@ -264,7 +264,7 @@ class PRD:
|
||||
serviceability = _set_serviceability_from_control_results(unit_control)
|
||||
else:
|
||||
serviceability = _set_serviceability_from_online_status(check_dic)
|
||||
|
||||
|
||||
## Проверка онлайн-статуса сухих контактов
|
||||
static func _check_dry_contact(unit_yau07_status: PackedByteArray, self_name: String) -> bool:
|
||||
var bit_ip_config: Array = [0, 1, 2, 3, 4, 5, 6, 7]
|
||||
@@ -276,7 +276,7 @@ class PRD:
|
||||
if status:
|
||||
return false
|
||||
return true
|
||||
|
||||
|
||||
## Установка состояния обслуживания на основе результатов контроля
|
||||
static func _set_serviceability_from_control_results(unit_ctrl: Object) -> int:
|
||||
var control_results = unit_ctrl.get_control_results()
|
||||
@@ -293,7 +293,7 @@ class PRD:
|
||||
all_ok = false
|
||||
break
|
||||
return STATE_DEVICE.GOOD if all_ok else STATE_DEVICE.ERROR
|
||||
|
||||
|
||||
## Установка состояния обслуживания на основе онлайн-статусов
|
||||
static func _set_serviceability_from_online_status(check_dic: Dictionary) -> int:
|
||||
var all_online: bool = true
|
||||
@@ -302,8 +302,8 @@ class PRD:
|
||||
all_online = false
|
||||
break
|
||||
return STATE_DEVICE.NONE if all_online else STATE_DEVICE.ERROR
|
||||
|
||||
|
||||
|
||||
|
||||
func execute_cmd():
|
||||
if not len(cmd_array): return
|
||||
if unit_yau07.cmd_state != unit_yau07.CmdState.DONE: return
|
||||
@@ -362,7 +362,7 @@ func _ready() -> void:
|
||||
if prd_dict.has(fs.prd_name):
|
||||
prd_dict[fs.prd_name].fs_dic[key] = fs
|
||||
fs.connect('update_modulation', prd_dict[fs.prd_name].on_update_modulation.bind(fs.index))
|
||||
|
||||
|
||||
for key in FS_PRD.keys():
|
||||
fs_caps_id[FS_PRD[key][1]] = key
|
||||
var unit_caps = network.get_unit_instance('уарэп-капсрпб')
|
||||
|
||||
@@ -291,7 +291,7 @@ func on_data_received(unit_pribor: Object) -> void:
|
||||
block_kasseta_y5_config = check_block_kasseta_y5(status, block_kasseta_y5_config, flags.no_trust_yau07)
|
||||
_set_control_result('block_kasseta', on_y5_control_result(block_kasseta_y5_config))
|
||||
_set_control_result('temperature', flags.temperature_ok)
|
||||
_set_control_result('block_ip', on_dry_control_result(block_ip_config))
|
||||
_set_control_result('block_ip', on_dry_control_result(block_ip_config))
|
||||
if not flags.in_control: return
|
||||
if machine_timer.is_stopped(): return
|
||||
if flags.no_trust_yau07: return
|
||||
@@ -410,7 +410,7 @@ func _handle_fs_turn_on_state() -> void:
|
||||
state = STATE_MACHINE.FS_WORK
|
||||
|
||||
|
||||
static func take_ecm_id(ecm_dic: Dictionary, device_name: String, current_lit: int) -> int:
|
||||
static func take_ecm_id(ecm_dic: Dictionary, device_name: String, current_lit: int) -> int:
|
||||
# Получаем целевой nmfs из таблицы
|
||||
var target_nmfs: int = LITER_TO_NMFS.get(device_name, {}).get(current_lit, -1)
|
||||
if target_nmfs == -1:
|
||||
@@ -560,7 +560,7 @@ func _handle_ray_write_mode(ray_num: int) -> void:
|
||||
if not flags.write_isa:
|
||||
_handle_ug_set_state(ray_num)
|
||||
flags.write_isa = true
|
||||
|
||||
|
||||
# Ожидание COUNT_PACK_POWER_RECIEVE пакетов от ЯУ-07
|
||||
if count_packets_power < COUNT_PACK_POWER_RECIEVE: return
|
||||
state = STATE_MACHINE.READ_ISA
|
||||
@@ -1074,7 +1074,7 @@ static func check_temperature_um(status_prd: PackedByteArray) -> Dictionary:
|
||||
else:
|
||||
for i_temp in 8:
|
||||
return_dic_temp[arr_um[i_temp]] = -999 # Заполняем нулями если УКП нет на связи
|
||||
|
||||
|
||||
if ukp2_online:
|
||||
for i_temp in 8:
|
||||
var temperature_ukp_2: int = status_prd.decode_u16(Constants.TEMPERATURE_UKP_2 + 2 * i_temp)
|
||||
|
||||
@@ -34,6 +34,10 @@ class SPT25 extends unit.Unit:
|
||||
if not online:
|
||||
online = true
|
||||
emit_signal('line_changed', self)
|
||||
|
||||
#rx_data.reverse()
|
||||
var reverse_rx_data = process_packet_reverse(rx_data)
|
||||
|
||||
emit_signal('data_received', rx_data)
|
||||
|
||||
|
||||
@@ -47,3 +51,19 @@ class SPT25 extends unit.Unit:
|
||||
online = false
|
||||
emit_signal('line_changed', self)
|
||||
return rc
|
||||
|
||||
|
||||
## Производит переворот битов в байте в пакете по байтово
|
||||
static func process_packet_reverse(packet:PackedByteArray)->PackedByteArray:
|
||||
var result=PackedByteArray()
|
||||
for i in packet.size():
|
||||
result.append(reverse_bit(packet[i]))
|
||||
return result
|
||||
|
||||
|
||||
## Производит переворот битов в байте
|
||||
static func reverse_bit(b: int) -> int:
|
||||
b=((b&0xF0)>>4) | ((b&0x0F)<<4)
|
||||
b=((b&0xCC)>>2) | ((b&0x33)<<2)
|
||||
b=((b&0xAA)>>1) | ((b&0x55)<<1)
|
||||
return b
|
||||
|
||||
Reference in New Issue
Block a user