Merge remote-tracking branch 'sasha/master-prd'

This commit is contained in:
MaD_CaT
2025-07-04 13:46:53 +03:00
5 changed files with 150 additions and 40 deletions

View File

@@ -376,7 +376,6 @@ fname = "УМ1535А"
rname = "A18"
[node name="Monitoring_panel" type="Panel" parent="."]
visible = false
layout_mode = 0
theme_override_styles/panel = SubResource("StyleBoxTexture_bnnv3")

View File

@@ -16,22 +16,40 @@ 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
enum STATE_VAL {
NONE = 0,
GOOD = 1,
ERROR = 2 }
var control_timer: Timer = Timer.new()
var flag_control: bool = false
func _ready() -> void:
signaller.conn(signaller.fs_update_state, Callable(self, 'on_fs_update_state'))
var unit_key = settings.get_unit_key(get_meta('unit_name')[0])
var unit_prd = network.units[unit_key]
currecnt_unit = unit_prd.name
unit_prd.connect('data_received', Callable(self, 'on_data_received'))
unit_prd.connect('line_changed', Callable(self, 'on_line_changed'))
set_default_state()
self.add_child(control_timer)
control_timer.connect('timeout', Callable(self, 'on_stop_control'))
_on_control_fs(true)
control_timer.one_shot = true
control_timer.wait_time = 2.0
control_timer.start()
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
@@ -41,6 +59,7 @@ func on_line_changed(unit_prd: Object) -> void:
set_default_state()
# Основной процесс по принятию и обработки пакетов
func on_data_received(unit_prd: Object) -> void:
if not is_inside_tree():
return
@@ -48,27 +67,15 @@ func on_data_received(unit_prd: Object) -> void:
check_block_ip(unit_prd.status)
check_temperature_um(unit_prd.status)
## Контроль ЭМС
var in_blank: int = unit_prd.status.decode_u16(IN_BLANK_PRD)
var out_blank: int = unit_prd.status.decode_u16(OUT_BLANK_PRD)
# Обработка данных ЭМС
_process_ems_data(unit_prd.status)
$Monitoring_panel/in_fs_1.frame = (in_blank >> CI_4_OT_FS) & 1
$Monitoring_panel/in_fs_2.frame = (in_blank >> CI_5_OT_FS) & 1
$Monitoring_panel/out_ems_1.frame = (out_blank >> CI_4_B_UF) & 1
$Monitoring_panel/out_ems_2.frame = (out_blank >> CI_5_B_UF) & 1
## Мощность УМ от УКП 1
if (in_blank >> CI_4_OT_FS) & 1:
check_dkm(unit_prd.status, bit_dkm_3)
## Мощность УМ от УКП 2
if (in_blank >> CI_5_OT_FS) & 1:
check_dkm(unit_prd.status, bit_dkm_4)
# Обработка мощности от УКП
_process_ukp_power(unit_prd.status)
## Проверка касет П1 и ИП МА2000
func check_block_ip(status_prd: PackedByteArray) -> void :
func check_block_ip(status_prd: PackedByteArray) -> void:
var ug_online: bool = (status_prd[0] >> 1) & 1
if ug_online:
const BYTE_DRY_CONTACT: int = 27
@@ -99,10 +106,13 @@ func check_block_ip(status_prd: PackedByteArray) -> void :
## Проверка температур УМ от УКП
func check_temperature_um(status_prd: PackedByteArray) -> void:
const CONST_MIN_TEMP: int = -25
const MAXIMUM_CODE_ADC: int = 3796
const MINIMUM_CODE_AD: int = 2660
const TEMP: float = 115.0 / (MAXIMUM_CODE_ADC - MINIMUM_CODE_AD)
const TEMP_CONSTANTS = {
"min_temp": -25,
"max_code": 3796,
"min_code": 2660,
"temp_factor": 115.0 / (3796 - 2660),
"offset": 3 # Корректировка температуры
}
const TEMPERATURE_UKP_1: int = 47
const TEMPERATURE_UKP_2: int = 79
var power_amplifier: Array = get_tree().get_nodes_in_group('power_amplifier')
@@ -111,14 +121,14 @@ func check_temperature_um(status_prd: PackedByteArray) -> void:
if ukp1_online:
for i_temp in range(6):
var temperature_ukp_1: int = status_prd.decode_u16(TEMPERATURE_UKP_1 + 2 * i_temp)
var tmp_1: int = round(CONST_MIN_TEMP + (MAXIMUM_CODE_ADC - temperature_ukp_1) * TEMP + 3)
var tmp_1: int = round(TEMP_CONSTANTS['min_temp'] + (TEMP_CONSTANTS['max_code'] - temperature_ukp_1) * TEMP_CONSTANTS['temp_factor'] + TEMP_CONSTANTS['offset'])
power_amplifier[i_temp].value0 = tmp_1
var ukp2_online = (status_prd[0] >> 3) & 1
if ukp2_online:
for i_temp in range(6):
var temperature_ukp_2: int = status_prd.decode_u16(TEMPERATURE_UKP_2 + 2 * i_temp)
var tmp_2: int = round(CONST_MIN_TEMP + (MAXIMUM_CODE_ADC - temperature_ukp_2) * TEMP + 3)
var tmp_2: int = round(TEMP_CONSTANTS['min_temp'] + (TEMP_CONSTANTS['max_code'] - temperature_ukp_2) * TEMP_CONSTANTS['temp_factor'] + TEMP_CONSTANTS['offset'])
power_amplifier[i_temp+6].value0 = tmp_2
@@ -132,3 +142,117 @@ func check_dkm(status_prd: PackedByteArray, bit_dkm: int) -> void:
elif bit_dkm == bit_dkm_4:
$dou5_A6.state = STATE_VAL.GOOD if status_dkm else STATE_VAL.ERROR
$kasseta_FS_VD/ref_A2.state = STATE_VAL.GOOD if status_dkm else STATE_VAL.ERROR
# Обрабатывает данные ЭМС и обновляет UI панели
func _process_ems_data(status: PackedByteArray) -> void:
## Контроль ЭМС
var in_blank: int = status.decode_u16(IN_BLANK_PRD)
var out_blank: int = status.decode_u16(OUT_BLANK_PRD)
# Обновление фреймов для входных сигналов
$Monitoring_panel/in_fs_1.frame = (in_blank >> CI_4_OT_FS) & 1
$Monitoring_panel/in_fs_2.frame = (in_blank >> CI_5_OT_FS) & 1
# Обновление фреймов для выходных сигналов ЭМС
$Monitoring_panel/out_ems_1.frame = (out_blank >> CI_4_B_UF) & 1
$Monitoring_panel/out_ems_2.frame = (out_blank >> CI_5_B_UF) & 1
func _process_ukp_power(status: PackedByteArray) -> void:
#var in_blank: int = status.decode_u16(IN_BLANK_PRD)
## Мощность УМ от УКП 1
if flag_control:
check_dkm(status, bit_dkm_3)
## Мощность УМ от УКП 1
var arr_power_ukp_1: Array = []
if (status[0] >> 2) & 1:
for i_power in range(6):
var power_ukp_1 = status.decode_u16(POWER_UKP_1 + 2 * i_power)
arr_power_ukp_1.append(power_ukp_1)
if count_packet_1 == 0:
power_array_1 = arr_power_ukp_1
else:
for i in arr_power_ukp_1.size():
if arr_power_ukp_1[i] > power_array_1[i]:
power_array_1[i] = arr_power_ukp_1[i]
var power_amplifier: Array = get_tree().get_nodes_in_group('power_amplifier')
for i in 6:
power_amplifier[i].value1 = '%d' % power_array_1[i]
power_amplifier[i].state = STATE_VAL.GOOD if power_array_1[i] > 40 else STATE_VAL.ERROR
count_packet_1 += 1
## Мощность УМ от УКП 2
check_dkm(status, bit_dkm_4)
## Мощность УМ от УКП 2
const bit_dkm_2: int = 2
check_dkm(status, bit_dkm_2)
var arr_power_ukp_2: Array = []
if (status[0] >> 2) & 1:
for i_power in range(6):
var power_ukp_2 = status.decode_u16(POWER_UKP_2 + 2 * i_power)
arr_power_ukp_2.append(power_ukp_2)
if count_packet_2 == 0:
power_array_2 = arr_power_ukp_2
else:
for i in arr_power_ukp_2.size():
if arr_power_ukp_2[i] > power_array_2[i]:
power_array_2[i] = arr_power_ukp_2[i]
for i in 6:
power_amplifier[i+6].value1 = '%d' % power_array_2[i]
power_amplifier[i+6].state = STATE_VAL.GOOD if power_array_2[i] > 40 else STATE_VAL.ERROR
count_packet_2 += 1
func _on_control_fs(mode: bool) -> void:
var interfer_name: String
var fs_arr: Array
if mode:
flag_control = true
interfer_name = 'k1'
fs_arr = [[90.0, 2450.0, 1500.0, 23]]
else:
flag_control = false
interfer_name = 'off'
fs_arr = [[90.0, 2450.0, 1500.0, 23]]
print('interfer_init: ', interfer_name, fs_arr)
signaller.emit_signal('interfer_init', interfer_name, fs_arr)
func on_stop_control() -> void:
_on_control_fs(false)
print('stop timer')
func on_fs_update_state(packet_type_7: Dictionary):
var parts = currecnt_unit.split('-')
var last_part = parts[-1] # Прибор
for fs in packet_type_7:
if fs == 12 and last_part == '':
$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 == 13 and last_part == '':
$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 == 14 and last_part == '':
$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 == '':
$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 == '':
$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 == '':
$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 == 18 and last_part == '':
$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 == '':
$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

View File

@@ -136,17 +136,6 @@ 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

View File

@@ -56,13 +56,11 @@ class Interfer:
data_to_json['ss'] = msg_num
data_to_json['ispp'] = ispp
data_to_json['krp'] = krp
if get_params.size() < 1:
get_params.append('soc_temp')
data_to_json['get'] = get_params
if krp != INTERFER_OFF:
data_to_json['kni'] = kni
data_to_json['powp'] = powp # TODO: Необходимо добавить управление мощностью
data_to_json['params'] = params
data_to_json['get'] = get_params
var pac = JSON.stringify(data_to_json).to_utf8_buffer()
return pac

View File

@@ -347,8 +347,8 @@ 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 = unit.json_dic['msfs']
var msfs = unit0.json_dic['msfs']
for fs in msfs:
if fs is Dictionary:
if not fs.has('nmfs'):