187 lines
6.7 KiB
GDScript
187 lines
6.7 KiB
GDScript
@tool
|
||
extends "res://scenes/контроль/прибор.gd"
|
||
|
||
const IN_BLANK_PRD: int = 1
|
||
const OUT_BLANK_PRD: int = 13
|
||
const CI_2_OT_FS: int = 9
|
||
const CI_3_OT_FS: int = 10
|
||
const CI_2_B_UF: int = 1
|
||
const CI_3_B_UF: int = 2
|
||
const POWER_UKP_1: int = 31
|
||
const POWER_UKP_2: int = 63
|
||
|
||
var timer_03: Timer = Timer.new()
|
||
var count_packet_1:int = 0
|
||
var power_array_1: Array = []
|
||
var count_packet_2:int = 0
|
||
var power_array_2: Array = []
|
||
|
||
enum STATE_VAL {
|
||
NONE = 0,
|
||
GOOD = 1,
|
||
ERROR = 2 }
|
||
|
||
|
||
func _ready() -> void:
|
||
var unit_key = settings.get_unit_key(get_meta('unit_name')[0])
|
||
var unit_prd = network.units[unit_key]
|
||
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(timer_03)
|
||
timer_03.connect('timeout', Callable(self, 'on_timer_03'))
|
||
#on_timer_03(unit_key)
|
||
|
||
|
||
func set_default_state() -> void:
|
||
for group in get_tree().get_nodes_in_group('power_amplifier'):
|
||
group.state = STATE_VAL.NONE
|
||
|
||
|
||
func on_line_changed(unit_prd: Object) -> void:
|
||
if not unit_prd.online:
|
||
set_default_state()
|
||
|
||
|
||
func on_data_received(unit_prd: Object) -> void:
|
||
if not is_inside_tree():
|
||
return
|
||
|
||
check_block_ip(unit_prd.status)
|
||
check_temperature_um(unit_prd.status)
|
||
|
||
## Контроль ЭМС
|
||
#_process_ems_data(unit_prd)
|
||
|
||
var in_blank: int = unit_prd.status.decode_u16(IN_BLANK_PRD)
|
||
var out_blank: int = unit_prd.status.decode_u16(OUT_BLANK_PRD)
|
||
|
||
$Monitoring_panel/in_fs_1.frame = (in_blank >> CI_2_OT_FS) & 1
|
||
$Monitoring_panel/in_fs_2.frame = (in_blank >> CI_3_OT_FS) & 1
|
||
|
||
$Monitoring_panel/out_ems_1.frame = (out_blank >> CI_2_B_UF) & 1
|
||
$Monitoring_panel/out_ems_2.frame = (out_blank >> CI_3_B_UF) & 1
|
||
|
||
## Мощность УМ от УКП 1
|
||
if (in_blank >> CI_2_OT_FS) & 1:
|
||
const bit_dkm_1: int = 1
|
||
check_dkm(unit_prd.status, bit_dkm_1)
|
||
|
||
var arr_power_ukp_1: Array = []
|
||
|
||
if (unit_prd.status[0] >> 2) & 1:
|
||
for i_power in range(6):
|
||
var power_ukp_1 = unit_prd.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]
|
||
|
||
count_packet_1 += 1
|
||
|
||
## Мощность УМ от УКП 2
|
||
if (in_blank >> CI_3_OT_FS) & 1:
|
||
const bit_dkm_2: int = 2
|
||
check_dkm(unit_prd.status, bit_dkm_2)
|
||
|
||
var arr_power_ukp_2: Array = []
|
||
|
||
if (unit_prd.status[0] >> 2) & 1:
|
||
for i_power in range(6):
|
||
var power_ukp_2 = unit_prd.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]
|
||
|
||
var power_amplifier: Array = get_tree().get_nodes_in_group('power_amplifier')
|
||
for i in 6:
|
||
power_amplifier[i+6].value1 = '%d' % power_array_2[i]
|
||
|
||
count_packet_2 += 1
|
||
|
||
|
||
## Проверка касет П1 и ИП МА2000
|
||
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
|
||
const BIT_MAA2000_1: int = 0
|
||
const BIT_MAA2000_2: int = 1
|
||
const BIT_IP9_50_1: int = 2
|
||
const BIT_IP9_50_2: int = 3
|
||
const BIT_IP12_50_1: int = 4
|
||
|
||
var maa2000_1 = status_prd[BYTE_DRY_CONTACT] >> BIT_MAA2000_1 & 1
|
||
var maa2000_2 = status_prd[BYTE_DRY_CONTACT] >> BIT_MAA2000_2 & 1
|
||
var ip9_50_1 = status_prd[BYTE_DRY_CONTACT] >> BIT_IP9_50_1 & 1
|
||
var ip9_50_2 = status_prd[BYTE_DRY_CONTACT] >> BIT_IP9_50_2 & 1
|
||
var ip12_50_1 = status_prd[BYTE_DRY_CONTACT] >> BIT_IP12_50_1 & 1
|
||
|
||
$maa2000_A23.state = STATE_VAL.ERROR if maa2000_1 else STATE_VAL.GOOD
|
||
$maa2000_A22.state = STATE_VAL.ERROR if maa2000_2 else STATE_VAL.GOOD
|
||
$kasseta_P_1/ref_A20.state = STATE_VAL.ERROR if ip9_50_1 else STATE_VAL.GOOD
|
||
$kasseta_P_1/ref_A21.state = STATE_VAL.ERROR if ip9_50_2 else STATE_VAL.GOOD
|
||
$kasseta_P_1/ref_A19.state = STATE_VAL.ERROR if ip12_50_1 else STATE_VAL.GOOD
|
||
else:
|
||
$maa2000_A23.state = STATE_VAL.NONE
|
||
$maa2000_A22.state = STATE_VAL.NONE
|
||
$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
|
||
|
||
|
||
## Проверка температур УМ от УКП
|
||
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 TEMPERATURE_UKP_1: int = 47
|
||
const TEMPERATURE_UKP_2: int = 79
|
||
var power_amplifier: Array = get_tree().get_nodes_in_group('power_amplifier')
|
||
|
||
var ukp1_online: int = (status_prd[0] >> 2) & 1
|
||
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)
|
||
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)
|
||
power_amplifier[i_temp+6].value0 = tmp_2
|
||
|
||
|
||
## Проверка ДКМ
|
||
func check_dkm(status_prd: PackedByteArray, bit_dkm: int) -> void:
|
||
const DKM: int = 28
|
||
|
||
var status_dkm = status_prd[DKM] >> bit_dkm & 1
|
||
|
||
if bit_dkm == 1:
|
||
$dou2_A5.state = STATE_VAL.GOOD if status_dkm else STATE_VAL.ERROR
|
||
$kasseta_FS_ND/ref_A4.state = STATE_VAL.GOOD if status_dkm else STATE_VAL.ERROR
|
||
elif bit_dkm == 2:
|
||
$dou2_A6.state = STATE_VAL.GOOD if status_dkm else STATE_VAL.ERROR
|
||
$kasseta_FS_ND/ref_A3.state = STATE_VAL.GOOD if status_dkm else STATE_VAL.ERROR
|
||
|
||
|
||
#func on_timer_03(unit_name):
|
||
#print(unit_name)
|