Доработка. Продолжение написания считывания состояния ЭМС.
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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 прибора ПРД-К'],
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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 # Нет поля "ответ на команду", разбор пакета завершить
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user