Доработка интегрального контроля (в процессе)
This commit is contained in:
102
scripts/prd.gd
102
scripts/prd.gd
@@ -151,17 +151,26 @@ class Fs:
|
||||
|
||||
|
||||
class PRD:
|
||||
enum STATE_DEVICE {
|
||||
NONE,
|
||||
GOOD,
|
||||
ERROR
|
||||
}
|
||||
var prd_name: String ## Имя прибора
|
||||
var unit_yau07 ## Юнит эмс
|
||||
var unit_yau07: Object ## Юнит эмс
|
||||
var unit_control: Object ## Класс проверки прибора ПРД
|
||||
var fs_dic: Dictionary ## Массив блоков ФС
|
||||
var yemsg_board: yemsboards.EmsBoard ## Плата ЭМС-Г
|
||||
var state = PrdState.WORK
|
||||
var cmd_array: Array ## Очередь команд
|
||||
var ug_online: bool = false ## Состояние ячейки УГ
|
||||
var serviceability: bool = false
|
||||
var set_ug_state: bool = true ## Необходимо ли записать в УГ настройки
|
||||
signal update_serviceability()
|
||||
signal update_serviceability(state: int) ## Сообщает изменение текущего состояния юнита ПРД
|
||||
var serviceability: int:
|
||||
set(v):
|
||||
if v != serviceability:
|
||||
serviceability = v
|
||||
emit_signal('update_serviceability', v)
|
||||
|
||||
func _init(u_name, u_yau07):
|
||||
prd_name = u_name
|
||||
@@ -201,11 +210,11 @@ class PRD:
|
||||
|
||||
|
||||
func on_line_changed(unit_ems):
|
||||
emit_signal('update_serviceability')
|
||||
if not unit_ems.online:
|
||||
yemsg_board.ems_load = yemsg_board.LoadState.NOT_DEFINED
|
||||
yemsg_board.set_wait()
|
||||
set_ug_state = true
|
||||
serviceability = STATE_DEVICE.NONE
|
||||
|
||||
func on_data_received(_u):
|
||||
set_prd_status()
|
||||
@@ -222,33 +231,79 @@ class PRD:
|
||||
execute_cmd()
|
||||
return
|
||||
execute_cmd()
|
||||
|
||||
func set_prd_status():
|
||||
|
||||
## Мониторинг состояния юнита прд
|
||||
func set_prd_status() -> void:
|
||||
# Обновление статуса платы ЯУ-07
|
||||
yemsg_board.set_status(unit_yau07.status)
|
||||
|
||||
# Проверка онлайн-статусов основных модулей
|
||||
ug_online = (unit_yau07.status[0] >> 1) & 1
|
||||
if not ug_online:
|
||||
set_ug_state = true
|
||||
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
|
||||
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
|
||||
var check_dic: Dictionary = {
|
||||
'ukp_1_online': ukp_1_online,
|
||||
'ukp_2_online': ukp_2_online,
|
||||
'ems_g_online': ems_g_online,
|
||||
'ip_online': ip_online,
|
||||
'ug_online': ug_online,
|
||||
'temperature_um': check_temperature_um
|
||||
}
|
||||
# Определение состояния обслуживания
|
||||
if unit_control:
|
||||
if unit_control.flags.control_is_over:
|
||||
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]
|
||||
var ip_online: bool = true
|
||||
var is_k_type: bool = prd_name in ['уарэп-яу07-1к', 'уарэп-яу07-2к', 'уарэп-яу07-3к', 'уарэп-яу07-4к']
|
||||
var is_k_type: bool = self_name in ['уарэп-яу07-1к', 'уарэп-яу07-2к', 'уарэп-яу07-3к', 'уарэп-яу07-4к']
|
||||
for bit in bit_ip_config:
|
||||
var status: bool = unit_yau07.status[27] >> bit & 1
|
||||
# Игнорируем биты 5 и 6 для всех приборов, кроме типа "к"
|
||||
if not is_k_type and (bit == 5 or bit == 6):
|
||||
if not is_k_type and bit in [5, 6]: # Игнорируем биты 5 и 6 для всех приборов, кроме типа "к"
|
||||
continue
|
||||
var status: bool = unit_yau07_status[27] >> bit & 1
|
||||
if status:
|
||||
ip_online = false
|
||||
return false
|
||||
return true
|
||||
|
||||
## Установка состояния обслуживания на основе результатов контроля
|
||||
static func _set_serviceability_from_control_results(unit_ctrl: Object) -> int:
|
||||
var control_results = unit_ctrl.get_control_results()
|
||||
var result_dic = control_results.result_dic
|
||||
const CRITICAL_DEVICES: Array = [
|
||||
'fs_1', 'fs_2', 'fs_3', 'fs_4', 'fs_5', 'fs_6', 'fs_7',
|
||||
'dkm_1', 'dkm_2', 'dkm_3', 'dkm_4', 'dkm_5', 'dkm_6', 'dkm_7',
|
||||
'block_ip', 'dou_2', 'dou_3', 'dou_4', 'dou_5', 'dou_6', 'dou_7'
|
||||
]
|
||||
var all_ok: bool = true
|
||||
for device_key in CRITICAL_DEVICES:
|
||||
if result_dic.has(device_key) and result_dic[device_key] is bool:
|
||||
if not result_dic[device_key]:
|
||||
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
|
||||
for status in check_dic:
|
||||
if not check_dic[status]:
|
||||
all_online = false
|
||||
break
|
||||
|
||||
var check_serviceability = ug_online and ukp_1_online and ukp_2_online and ems_g_online and ip_online
|
||||
if serviceability != check_serviceability:
|
||||
serviceability = check_serviceability
|
||||
emit_signal('update_serviceability')
|
||||
|
||||
|
||||
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
|
||||
@@ -290,8 +345,6 @@ class PRD:
|
||||
func set_um(data_arr):
|
||||
cmd_array.append([unit_yau07.CmdCode.WRITE_ISA, data_arr])
|
||||
|
||||
func _on_control_completed(_unit_control_name: String)->void:
|
||||
emit_signal('update_serviceability')
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
@@ -303,7 +356,6 @@ func _ready() -> void:
|
||||
var unit_control = TestPRD.new({'unit_prd': unit_prd}, new_prd.cmd_array)
|
||||
add_child(unit_control)
|
||||
new_prd.unit_control = unit_control
|
||||
unit_control.control_is_over.connect(new_prd._on_control_completed) # Прямая подписка на метод new_prd
|
||||
for key in FS_PRD.keys():
|
||||
var fs = Fs.new(key, FS_PRD[key][0])
|
||||
fs_dict[key] = fs
|
||||
|
||||
Reference in New Issue
Block a user