@@ -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 == ' 1в ' :
$ 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 == ' 4в ' :
$ 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 == ' 3в ' :
$ 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 == ' 2в ' :
$ 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 == ' 1в ' :
$ 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 == ' 4в ' :
$ 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 == ' 3в ' :
$ 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 == ' 2в ' :
$ 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