Merge remote-tracking branch 'origin/master' into master-afsp

# Conflicts:
#	scenes/tabs-switch/tab-switch.tscn
#	scenes/контроль/контроль.tscn
This commit is contained in:
Maxim
2026-01-21 09:40:56 +03:00
53 changed files with 476 additions and 132 deletions

View File

@@ -135,6 +135,7 @@ class Interfer:
var um: float ## Угол места для помехи.
var nmfs: int = 0 ## Номер модуля ФС в нумерации СТЦ
var priority: int = 0 ## Приоритет помехи
var active: bool = false ## Флаг, что фиксируется мощность на выходном усилителе
func _to_string() -> String:
return 'номер: %d название: %s частота: %0.1f МГц пеленг: %0.1f гр.' % [ispp, ITERFER_MODE[krp][0], params['freq'], kni]

View File

@@ -3,6 +3,7 @@ extends Node
enum PrdState {WORK, CONTROL}
const TIME_YAU07_SEND = 50
const MIN_UM_POWER = 200 ## минимальная мощность с усилителя, что бы отобразить значёк излучения
## Границы секторов блоков ФС по частоте в режиме РТО.
const FS_BAND_RTO: Dictionary = {
@@ -86,10 +87,10 @@ const FS_PRD: Dictionary = {
26: ['уарэп-яу07-3к', 37],
27: ['уарэп-яу07-2к', 27], }
var fs_dict: Dictionary ## Словарь с модулями ФС
var prd_dict: Dictionary ## Словарь с приборами ПРД
var course = 0.0 ## Курс корабля
var fs_caps_id: Dictionary ## Словарь соответствия номеров ФС от КАПС РПБ внутрипрограммной нумерации
var fs_dict: Dictionary ## Словарь с модулями ФС
var prd_dict: Dictionary ## Словарь с приборами ПРД
var course = 0.0 ## Курс корабля
var fs_caps_id: Dictionary ## Словарь соответствия номеров ФС от КАПС РПБ внутрипрограммной нумерации
class Fs:
@@ -124,14 +125,17 @@ class Fs:
var ready: bool = false ## Готовность сектора к излучению
var caps_online: bool = false ## Состояние связи с КАПС РПБ
var yau_07_online: bool = false ## Состояние связи ЯУ-07
var lit: int ## Литера ФС
var power: bool = false ## Признак излучения усилителей
signal update_modulation(index)
func _init(i, p_name):
prd_name = p_name
index = i
if UM_PORTS.has(index/4):
um_port = UM_PORTS[index/4]
lit = index/4
if UM_PORTS.has(lit):
um_port = UM_PORTS[lit]
func set_modulation(val):
modulation = val
@@ -158,6 +162,14 @@ class Fs:
func set_ready():
ready = isg and caps_online and yau_07_online
func set_power(power_arr: Array):
power = false
for val in power_arr:
if val > MIN_UM_POWER:
power = true
break
class PRD:
enum STATE_DEVICE {
NONE,
@@ -502,3 +514,13 @@ func on_yau07_line_changed(unit_yau07, prd_pribor):
fs.yau_07_online = unit_yau07.online
fs.set_ready()
signaller.emit_signal('fs_update_state', fs_dict)
func get_fs_power(nmfs: int):
if not fs_caps_id.has(nmfs): return false
var fs_index: int = fs_caps_id[nmfs]
var prd_obj: PRD = prd_dict[FS_PRD[fs_index][0]]
var fs: Fs = prd_obj.fs_dic[fs_index]
var power_arr: Array = prd_obj.unit_control.power_um_ukp(prd_obj.unit_yau07.status, fs.lit + 1, [], true)
fs.set_power(power_arr)
return fs.power

View File

@@ -310,7 +310,7 @@ func on_data_received(unit_pribor: Object) -> void:
if interes == 'RAY_CTRL':
count_packets_power += 1
elif interes != '':
tek_litera[_get_ray_key(state)] = power_um_ukp(status, current_litera, tek_litera[_get_ray_key(state)])
tek_litera[_get_ray_key(state)] = power_um_ukp(status, current_litera, tek_litera[_get_ray_key(state)], false)
power_for_litera[current_litera] = tek_litera
count_packets_power += 1
@@ -1158,50 +1158,52 @@ static func _should_apply_rule(fs_num: int, rule: Dictionary, results: Dictionar
## Получение мощности при выполнении контроля
static func power_um_ukp(status: PackedByteArray, litera: int, pwr_result: Array) -> Array:
static func power_um_ukp(status: PackedByteArray, litera: int, pwr_result: Array, mode_work: bool) -> Array:
const Constants: Dictionary = {'POWER_UKP_1' : 31, 'POWER_UKP_2': 63}
var power_values: Array = []
var base_offset = 0
var iteration: int = 6
var ug_valid: bool = (status[0] >> 2) & 1
if not len(status): return power_values
var ukp1_valid: bool = (status[0] >> 2) & 1
var ukp2_valid: bool = (status[0] >> 3) & 1
match litera:
1:
var value = status.decode_u16(Constants.POWER_UKP_1 + 2 * 7)
if ug_valid:
if ukp1_valid:
power_values = [value]
2:
base_offset = Constants.POWER_UKP_1
if ug_valid:
if ukp1_valid:
for i in iteration:
power_values.append(status.decode_u16(base_offset + 2 * i))
3:
base_offset = Constants.POWER_UKP_2
if ug_valid:
if ukp2_valid:
for i in iteration:
power_values.append(status.decode_u16(base_offset + 2 * i))
4:
base_offset = Constants.POWER_UKP_1
if ug_valid:
if ukp1_valid:
for i in iteration:
power_values.append(status.decode_u16(base_offset + 2 * i))
5:
base_offset = Constants.POWER_UKP_2
if ug_valid:
if ukp2_valid:
for i in iteration:
power_values.append(status.decode_u16(base_offset + 2 * i))
6:
base_offset = Constants.POWER_UKP_1
if ug_valid:
if ukp1_valid:
for i in iteration:
power_values.append(status.decode_u16(base_offset + 2 * i))
7:
base_offset = Constants.POWER_UKP_2
if ug_valid:
if ukp2_valid:
for i in iteration:
power_values.append(status.decode_u16(base_offset + 2 * i))
power_values = update_max_power_values(power_values, pwr_result)
if not mode_work:
power_values = update_max_power_values(power_values, pwr_result)
return power_values