@@ -25,31 +25,35 @@ const Constants = {
" ADDR_UG_LITERA_3 " : 0x10A ,
" TEMP_THRESHOLD " : 70 ,
" POWER_THRESHOLD " : 40 ,
" TIMER_DELAY " : 4 .0,
" TIMER_DELAY " : 5 .0,
" dou_ray_nuber " : 0x3 ,
" attenutor_um_1 " : 0x7 ,
" attenutor_um_2 " : 0x7 ,
" attenutor_um_3 " : 0x7 ,
" POWER_UM " : 1 5,
" POWER_UM " : 7 5,
}
enum STATE_VAL { NONE = 0 , GOOD = 1 , ERROR = 2 }
enum STATE_MASHINE { INIT ,
FS_1_TURN_ON ,
FS_2 _TURN_ON ,
FS_3 _TURN_ON ,
FS_1_WORK ,
FS_2 _WORK ,
FS_3 _WORK ,
UM_RUN ,
READ_ISA ,
FS_1_TURN_OFF ,
FS_2 _TURN_OFF ,
FS_3 _TURN_OFF ,
STOP_CONTROL }
enum STATE_MASHINE { INIT ,
FS_1_TURN_ON ,
FS_6 _TURN_ON ,
FS_7 _TURN_ON ,
FS_1_WORK ,
FS_6 _WORK ,
FS_7 _WORK ,
UM_RUN_1 ,
UM_RUN_6 ,
UM_RUN_7 ,
FS_1 _TURN_OFF ,
FS_6 _TURN_OFF ,
FS_7_TURN_OFF ,
STOP_CONTROL_1 ,
STOP_CONTROL_6 ,
STOP_CONTROL_7 }
# Основные переменные
var state : int = STATE_MASHINE . INIT
var count_packet_1 : int = 0
var count_packet_2 : int = 0
var count_packet_6 : int = 0
var count_packet_7 : int = 0
var power_array_1 : Array = [ ]
var power_array_2 : Array = [ ]
var ug_work_1 : int
@@ -59,18 +63,21 @@ var ug_work_3: int
var control_timer : Timer = Timer . new ( )
var mashine_timer : Timer = Timer . new ( )
var flag_timer_started : bool = false
var flag_check_dkm_3 : bool = false
var flag_check_dkm_1 : bool = false
var flag_check_dkm_6 : bool = false
var flag_check_dkm_7 : bool = false
var pribor : String
# Результаты контроля
var _control_results : Dictionary = {
" block_ip " : false , # Проверка касет П1 и ИП М А 2000
" temperature " : true , # Проверка температур У М
" dkm_1 " : false , # Проверка ДКМ
" dkm_2 " : false , # Проверка ДКМ
" dkm_1 " : false , # Проверка ДКМ 1
" dkm_6 " : false , # Проверка ДКМ 6
" dkm_7 " : false , # Проверка ДКМ 7
" power_ukp " : false , # Мощность от УКП
" fs_1 " : false , # Проверка ФС
" fs_2 " : false ,
" fs_3 " : false ,
" fs_1 " : false , # Проверка ФС 1
" fs_6 " : false , # Проверка ФС 6
" fs_7 " : false , # Проверка ФС 7
}
@@ -83,50 +90,86 @@ func _ready() -> void:
func on_state_mashine ( ) - > void :
match state :
STATE_MASHINE . INIT :
print ( ' Стадия включения ' )
state = STATE_MASHINE . FS_3_TURN_ON
STATE_MASHINE . FS_3_TURN_ON :
print ( ' Включение фс 3 ' )
state = STATE_MASHINE . FS_1_TURN_ON
STATE_MASHINE . FS_6_TURN_ON :
_on_control_fs ( true )
control_timer . wait_time = Constants . TIMER_DELAY
control_timer . start ( )
state = STATE_MASHINE . FS_3 _WORK
STATE_MASHINE . FS_3 _WORK :
print ( ' FS 3 должен работать ' )
flag_check_dkm_3 = true
if _control_results [ " fs_3 " ] and not flag_timer_started :
state = STATE_MASHINE . UM_RUN
STATE_MASHINE . UM_RUN :
print ( ' Должна идти жара ' )
state = STATE_MASHINE . FS_6 _WORK
STATE_MASHINE . FS_6 _WORK :
if flag_check_dkm_6 and not flag_timer_started :
state = STATE_MASHINE . UM_RUN_6
STATE_MASHINE . UM_RUN_6 :
var unit_key = settings . get_unit_key ( get_meta ( ' unit_name ' ) [ 0 ] )
var unit_prd = network . units [ unit_key ]
var prd_module = prd . prd_dict [ unit_prd . name ]
prd_module . cmd_array . append ( [ unit_prd . CmdCode . WRITE_ISA , [ Constants . BASE_ADDR_EMS_G , 6666 ] ] )
flag_timer_started = true
state = STATE_MASHINE . FS_3 _WORK
STATE_MASHINE . READ_ISA :
print ( ' READ_ISA ' )
state = STATE_MASHINE . FS_6 _WORK
STATE_MASHINE . FS_6_TURN_OFF :
_on_control_fs ( false )
power_control_result ( )
state = STATE_MASHINE . STOP_CONTROL_6
STATE_MASHINE . FS_7_TURN_ON :
_on_control_fs ( true )
control_timer . wait_time = Constants . TIMER_DELAY
control_timer . start ( )
state = STATE_MASHINE . FS_7_WORK
STATE_MASHINE . FS_7_WORK :
if flag_check_dkm_7 and not flag_timer_started :
state = STATE_MASHINE . UM_RUN_7
STATE_MASHINE . UM_RUN_7 :
var unit_key = settings . get_unit_key ( get_meta ( ' unit_name ' ) [ 0 ] )
var unit_prd = network . units [ unit_key ]
var prd_module = prd . prd_dict [ unit_prd . name ]
prd_module . cmd_array . append ( [ unit_prd . CmdCode . READ _ISA, [ Constants . BASE_ADDR_EMS_G ] ] )
STATE_MASHINE . FS_3_TURN_OFF :
print ( ' Отключение ФС ' )
flag_check_dkm_3 = false
prd_module . cmd_array . append ( [ unit_prd . CmdCode . WRITE _ISA, [ Constants . BASE_ADDR_EMS_G , 6666 ]] )
flag_timer_started = true
state = STATE_MASHINE . FS_7_WORK
STATE_MASHINE . FS_7_TURN_OFF :
_on_control_fs ( false )
power_control_result ( )
on_control_result ( )
state = STATE_MASHINE . STOP_CONTROL
STATE_MASHINE . STOP_CONTROL :
print ( ' STOP_CONTROL ' )
state = STATE_MASHINE . STOP_CONTROL_7
STATE_MASHINE . FS_1_TURN_ON :
_on_control_fs ( true )
control_timer . wait_time = Constants . TIMER_DELAY
control_timer . start ( )
state = STATE_MASHINE . FS_1_WORK
STATE_MASHINE . FS_1_WORK :
if not flag_timer_started :
state = STATE_MASHINE . UM_RUN_1
STATE_MASHINE . UM_RUN_1 :
var unit_key = settings . get_unit_key ( get_meta ( ' unit_name ' ) [ 0 ] )
var unit_prd = network . units [ unit_key ]
var prd_module = prd . prd_dict [ unit_prd . name ]
prd_module . cmd_array . append ( [ unit_prd . CmdCode . WRITE_ISA , [ Constants . BASE_ADDR_EMS_G , 6666 ] ] )
flag_timer_started = true
state = STATE_MASHINE . FS_1_WORK
STATE_MASHINE . FS_1_TURN_OFF :
_on_control_fs ( false )
power_control_result ( )
state = STATE_MASHINE . STOP_CONTROL_1
STATE_MASHINE . STOP_CONTROL_1 :
flag_timer_started = false
state = STATE_MASHINE . FS_6_TURN_ON
STATE_MASHINE . STOP_CONTROL_6 :
flag_timer_started = false
state = STATE_MASHINE . FS_7_TURN_ON
STATE_MASHINE . STOP_CONTROL_7 :
flag_timer_started = false
func initialize_connections ( ) - > void :
@@ -145,7 +188,7 @@ func setup_timer() -> void:
mashine_timer . connect ( ' timeout ' , Callable ( self , ' on_state_mashine ' ) )
mashine_timer . wait_time = 0.5
mashine_timer . start ( )
add_child ( control_timer )
control_timer . connect ( ' timeout ' , Callable ( self , ' on_stop_control ' ) )
control_timer . one_shot = true
@@ -188,17 +231,12 @@ func on_data_received(unit_prd: Object) -> void:
check_temperature_um ( status )
# Обработка данных ЭМС
_process_ems_data ( status )
if flag_check_dkm_3 :
check_dkm ( status , Constants . DKM_BIT_7 )
flag_check_dkm_1 = check_dkm ( status , Constants . DKM_BIT_1 )
flag_check_dkm_6 = check_dkm ( status , Constants . DKM_BIT_6 )
flag_check_dkm_7 = check_dkm ( status , Constants . DKM_BIT_7 )
if flag_check_dkm_1 or flag_check_dkm_6 or flag_check_dkm_7 :
_process_ukp_power ( status )
#if flag_timer_started:
#check_dkm(status, Constants.DKM_BIT_1)
#check_dkm(status, Constants.DKM_BIT_6)
# Обработка мощности от УКП
#_process_ukp_power(status)
# Обрабатывает данные ЭМС и обновляет UI панели
@@ -292,28 +330,46 @@ func check_temperature_um(status_prd: PackedByteArray) -> void:
## Проверка ДКМ
func check_dkm ( status_prd : PackedByteArray , bit_dkm : int ) - > void :
func check_dkm ( status_prd : PackedByteArray , bit_dkm : int ) - > bool :
const DKM : int = 28
var status_dkm = status_prd [ DKM ] >> bit_dkm & 1
if bit_dkm == 5 :
if bit_dkm == 5 and state == STATE_MASHINE . FS_6_WORK :
$ dou6_A7 . state = STATE_VAL . GOOD if status_dkm else STATE_VAL . ERROR
$ kasseta_fs_kd / ref_A4 . state = STATE_VAL . GOOD if status_dkm else STATE_VAL . ERROR
_control_results [ " dkm_6 " ] = status_dkm
elif bit_dkm == 6 and state == STATE_MASHINE . FS_7_WORK :
$ dou7_A8 . state = STATE_VAL . GOOD if status_dkm else STATE_VAL . ERROR
$ kasseta_fs_kd / ref_A7 . state = STATE_VAL . GOOD if status_dkm else STATE_VAL . ERROR
_control_results [ " dkm_7 " ] = status_dkm
elif bit_dkm == 0 and state == STATE_MASHINE . FS_1_WORK :
$ kasseta_fs_kd / ref_A2 . state = STATE_VAL . GOOD if status_dkm else STATE_VAL . ERROR
_control_results [ " dkm_1 " ] = status_dkm
elif bit_dkm == 6 :
$ dou7_A8 . state = STATE_VAL . GOOD if status_dkm else STATE_VAL . ERROR
$ kasseta_fs_kd / ref_A4 . state = STATE_VAL . GOOD if status_dkm else STATE_VAL . ERROR
_control_results [ " dkm_2 " ] = status_dkm
elif bit_dkm == 0 :
$ kasseta_fs_kd / ref_A7 . state = STATE_VAL . GOOD if status_dkm else STATE_VAL . ERROR
_control_results [ " dkm_3 " ] = status_dkm
return status_dkm
func _process_ukp_power ( status : PackedByteArray ) - > void :
var power_amplifier : Array = get_tree ( ) . get_nodes_in_group ( ' power_amplifier ' )
if state == STATE_MASHINE . FS_1_WORK :
pass
elif state == STATE_MASHINE . FS_2_WORK :
## Мощность от У М (УКП) литеры 1
var arr_power_ukp_1 : Array = [ ]
var power_ukp_1 : int
power_ukp_1 = status . decode_u16 ( Constants . POWER_UKP_1 + 2 * 7 )
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 ]
power_amplifier [ 6 ] . value1 = ' %d ' % power_array_1 [ 0 ]
power_amplifier [ 6 ] . state = STATE_VAL . GOOD if power_array_1 [ 0 ] > Constants . TEMP_THRESHOLD else STATE_VAL . ERROR
count_packet_1 += 1
elif state == STATE_MASHINE . FS_6_WORK :
## Мощность У М от УКП 1
var arr_power_ukp_1 : Array = [ ]
if ( status [ 0 ] >> 2 ) & 1 :
@@ -321,23 +377,20 @@ func _process_ukp_power(status: PackedByteArray) -> void:
for i_power in range ( 6 ) :
power_ukp_1 = status . decode_u16 ( Constants . POWER_UKP_1 + 2 * i_power )
arr_power_ukp_1 . append ( power_ukp_1 )
# Мощность от У М (УКП) литеры 3
power_ukp_1 = status . decode_u16 ( Constants . POWER_UKP_1 + 2 * 7 )
arr_power_ukp_1 . append ( power_ukp_1 )
if count_packet_1 == 0 :
if count_packet_6 == 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 ]
for i in 7 :
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 ] > Constants . TEMP_THRESHOLD else STATE_VAL . ERROR
count_packet_1 += 1
elif state == STATE_MASHINE . FS_3 _WORK :
count_packet_6 += 1
elif state == STATE_MASHINE . FS_7 _WORK :
## Мощность У М от УКП 2
var arr_power_ukp_2 : Array = [ ]
if ( status [ 0 ] >> 2 ) & 1 :
@@ -345,7 +398,7 @@ func _process_ukp_power(status: PackedByteArray) -> void:
var power_ukp_2 = status . decode_u16 ( Constants . POWER_UKP_2 + 2 * i_power )
arr_power_ukp_2 . append ( power_ukp_2 )
if count_packet_2 == 0 :
if count_packet_7 == 0 :
power_array_2 = arr_power_ukp_2
else :
for i in arr_power_ukp_2 . size ( ) :
@@ -356,7 +409,7 @@ func _process_ukp_power(status: PackedByteArray) -> void:
power_amplifier [ i + 7 ] . value1 = ' %d ' % power_array_2 [ i ]
power_amplifier [ i + 7 ] . state = STATE_VAL . GOOD if power_array_2 [ i ] > Constants . TEMP_THRESHOLD else STATE_VAL . ERROR
count_packet_2 += 1
count_packet_7 += 1
func power_control_result ( ) - > void :
@@ -369,7 +422,7 @@ func power_control_result() -> void:
func _on_control_fs ( mode : bool ) - > void :
var angle : float = 0.0
var angle : float = 0.0
var sector_1 : float = 0
var sector_2 : float = 20
var sector_3 : float = 24
@@ -390,36 +443,30 @@ func _on_control_fs(mode: bool) -> void:
sector_3 = 25
var interfer_name : String = ' k1 ' if mode else ' off '
var freq_1 : float = 49 0.0 # ФС _1
var freq_1 : float = 45 0.0 # ФС _1
var freq_2 : float = 2450.0 # ФС _2
var freq_3 : float = 5800.0 # ФС _3
var width_1 : float = 10 0.0 # ФС _1
var width_1 : float = 8 0.0 # ФС _1
var width_2 : float = 110.0 # ФС _2
var width_3 : float = 110.0 # ФС _3
var fs_arr : Array = [ ]
if state == STATE_MASHINE . FS_1_WORK :
if state == STATE_MASHINE . FS_1_TURN_ON or state == STATE_MASHINE . FS_1_TURN_OFF :
fs_arr . append ( [ angle , freq_1 , width_1 , sector_1 ] )
elif state == STATE_MASHINE . FS_2_WORK :
elif state == STATE_MASHINE . FS_6_TURN_ON or state == STATE_MASHINE . FS_6_TURN_OFF :
fs_arr . append ( [ angle , freq_2 , width_2 , sector_2 ] )
elif STATE_MASHINE . FS_3_WORK :
elif STATE_MASHINE . FS_7_TURN_ON or state == STATE_MASHINE . FS_7_TURN_OFF :
fs_arr . append ( [ angle , freq_3 , width_3 , sector_3 ] )
print ( ' FS arr = ' , fs_arr )
signaller . emit_signal ( ' interfer_init ' , interfer_name , fs_arr , Constants . POWER_UM )
func on_stop_control ( ) - > void :
print_debug ( ' Отсановка контроля ПРД ' )
if state == STATE_MASHINE . FS_1_WORK :
state = STATE_MASHINE . FS_1_TURN_OFF
elif state == STATE_MASHINE . FS_2 _WORK :
state = STATE_MASHINE . FS_2 _TURN_OFF
elif state == STATE_MASHINE . FS_3 _WORK :
state = STATE_MASHINE . FS_3 _TURN_OFF
print_debug ( ' state = ' , state )
#_on_control_fs(false)
#on_control_result()
elif state == STATE_MASHINE . FS_6 _WORK :
state = STATE_MASHINE . FS_6 _TURN_OFF
elif state == STATE_MASHINE . FS_7 _WORK :
state = STATE_MASHINE . FS_7 _TURN_OFF
func on_fs_update_state ( packet_type_7 : Dictionary ) - > void :
@@ -446,14 +493,9 @@ func on_fs_update_state(packet_type_7: Dictionary) -> void:
if fs < 4 :
_control_results [ " fs_1 " ] = ( data . isg == 1 )
elif fs < 24 :
_control_results [ " fs_2 " ] = ( data . isg == 1 )
_control_results [ " fs_6 " ] = ( data . isg == 1 )
else :
_control_results [ " fs_3 " ] = ( data . isg == 1 )
#if _control_results["fs_1"] and _control_results["fs_2"] and _control_results["fs_3"] and not flag_timer_started:
#on_ug_setting()
#control_timer.wait_time = Constants.TIMER_DELAY
#control_timer.start()
#flag_timer_started = true
_control_results [ " fs_7 " ] = ( data . isg == 1 )
func on_ug_setting ( ) - > void :
@@ -490,12 +532,12 @@ func on_control_result() -> void:
if not _control_results [ key ] :
if key == ' fs_1 ' :
$ kasseta_fs_kd / ref_A3 . state = STATE_VAL . ERROR
if key == ' fs_2 ' :
if key == ' fs_6 ' :
$ kasseta_fs_kd / ref_A6 . state = STATE_VAL . ERROR
if key == ' fs_3 ' :
if key == ' fs_7 ' :
$ kasseta_fs_kd / ref_A5 . state = STATE_VAL . ERROR
result = false
print_debug( ' %s false ' % key )
# print_debug('%s false' % key)
if result :
$ control_result . text = ' Прибор ПРД- %s исправен ' % pribor