Доработка. Продолжение написания считывания состояния ЭМС.

This commit is contained in:
MaD_CaT
2024-10-29 11:05:43 +03:00
parent 7d91e3d57c
commit ff73887eb7
6 changed files with 57 additions and 10 deletions

View File

@@ -152,10 +152,10 @@ func poll_receive(sock: Socket, tick: int) -> bool:
var port: = sock.get_packet_port()
var addr_port: = [addr, port]
if addr_port in units:
units[addr_port].parse(data, tick)
units[addr_port].parse(data)
return false
if port in unit_keys:
units[unit_keys[port]].parse(data, tick)
units[unit_keys[port]].parse(data)
return false

View File

@@ -6,9 +6,9 @@ class_name rep_settings extends Node
@export var UnitProfiles: = { \
# Название | Протокол | Адрес | Порт | Широковещательное | Привязывать к адресу | Комментарий
'уарэп-яу07-частный': ['yau07rx', '10.1.1.2', [50002], false, true, 'IP-адрес на котором принимают частные сообщения от ЯУ-07'],
'уарэп-яу07-общий': ['yau07rx', '10.1.1.255', [50000], true, true, 'IP-адрес на котором принимают широковещательные сообщения от ЯУ-07'],
'уарэп-яу07-общий': ['yau07rx', '*', [50000], true, true, 'IP-адрес на котором принимают широковещательные сообщения от ЯУ-07'],
'уарэп-капсрпб': ['json-capsrpb', '127.0.0.1', [42023, 42022], false, true, 'IP-адрес на котором принимают сообщения от КАПС РПБ'],
'уарэп-эмс': ['yau07tx', '10.1.1.52', [50027], false, false, 'IP-адрес ЯУ-07 прибора УФ'],
'уарэп-эмс': ['yau07tx', '10.1.1.52', [50052], false, false, 'IP-адрес ЯУ-07 прибора УФ'],
'уарэп-яу07-2в': ['yau07tx', '10.1.1.34', [50034], false, false, 'IP-адрес ЯУ-07 прибора ПРД-В'],
'уарэп-яу07-2н': ['yau07tx', '10.1.1.33', [50033], false, false, 'IP-адрес ЯУ-07 прибора ПРД-Н'],
'уарэп-яу07-2к': ['yau07tx', '10.1.1.35', [50035], false, false, 'IP-адрес ЯУ-07 прибора ПРД-К'],

View File

@@ -49,8 +49,8 @@ class TCP5P28 extends unit.Unit:
func _to_string() -> String: return String('капсрпб: "%s" %s ' % [self.name, ['отключен', 'на связи'][int(online)]])
func parse(data: PackedByteArray, now_tick: int):
rx_tick = now_tick
func parse(data: PackedByteArray):
rx_tick = tick
if not online:
online = true
emit_signal('line_changed', self)
@@ -65,8 +65,9 @@ class TCP5P28 extends unit.Unit:
if cmd_type == CMD_TYPE_IN and external_cu:
set_interfer(data)
func process(now_tick: int):
if online and ((now_tick - rx_tick) > ONLINE_TIMEOUT):
func process(delta: int):
tick += delta
if online and ((tick - rx_tick) > ONLINE_TIMEOUT):
online = false
emit_signal('line_changed', self)
if len(tx_stack):

View File

@@ -208,7 +208,8 @@ class YaU07 extends unit.Unit:
if byte_i < len_rx_data:
status[i] = rx_data[byte_i] # Массив байтовый "состояние прибора"
i += 1
emit_signal('data_received', self)
if rx_data_len == (status_len + 6):
return true # Нет поля "ответ на команду", разбор пакета завершить

View File

@@ -7,9 +7,49 @@ class EmsBoard:
var base_addr_isa: int ## Базовый адрес ячейки isa.
var in_tbl: Array
var out_tbl: Array
var online: bool
var ems_load: bool
func _init(id, base_addr, in_table, out_table):
id_board = id
in_tbl = in_table
out_tbl = out_table
base_addr_isa = base_addr
func set_status(status):
var offset = 0
if id_board == 1: offset = 26
elif id_board == 2: offset = 52
var bit_online = 0 + id_board
var bit_load = 3 + id_board
online = (status[0] >> bit_online) & 1
ems_load = (status[0] >> bit_load) & 1
var in_blank = int(status[1 + offset] | (status[2 + offset] << 8) | (status[3 + offset] << 16) | \
(status[4 + offset] << 24) | (status[5 + offset] << 32))
var in_imp = int(status[7 + offset] | (status[8 + offset] << 8) | (status[9 + offset] << 16) | \
(status[10 + offset] << 24) | (status[11 + offset] << 32))
var out_blank = int(status[13 + offset] | (status[14 + offset] << 8) | (status[15 + offset] << 16) | \
(status[16 + offset] << 24) | (status[17 + offset] << 32))
var out_imp = int(status[19 + offset] | (status[20 + offset] << 8) | (status[21 + offset] << 16)| \
(status[22 + offset] << 24) | (status[23 + offset] << 32))
var out_kz = int(status[25 + offset] | (status[26 + offset] << 8))
if id_board > 0:
out_kz = 0
for in_dev in in_devs.values():
if (in_blank >> (in_dev.id - 1)) & 1:
in_dev.state = 1
elif (in_imp >> (in_dev.id - 1)) & 1:
in_dev.state = 2
else:
in_dev.state = 0
for out_dev in out_devs.values():
if (out_kz >> (out_dev.id - 1)) & 1:
out_dev.state = 3
elif (out_blank >> (out_dev.id - 1)) & 1:
out_dev.state = 1
elif (out_imp >> (out_dev.id - 1)) & 1:
out_dev.state = 2
else:
out_dev.state = 0