Доработка. Изменение структуры юнитов и обмена. Добавлен файл прибора Щ3.

This commit is contained in:
MaD_CaT
2024-10-14 08:38:56 +03:00
parent ca581df5f8
commit 22939d0f8c
10 changed files with 203 additions and 175 deletions

View File

@@ -1,7 +1,7 @@
class_name rep_network extends Node
const PROTOCOL_TYPES: = {'yau07tx': yau07.YaU07, 'jsontx': capsrpb.CapsRpb, 'udp-json-mbcs': modbus.ModbusClient}
const PROTOCOL_TYPES: = {'yau07tx': yau07.YaU07, 'json-capsrpb': capsrpb.CapsRpb, 'udp-json-mbcs': modbus.ModbusClient}
const TCP_PROTO: = {'5p28': tcp5p28.TCP5P28}
class Socket extends PacketPeerUDP:
@@ -13,7 +13,7 @@ class Socket extends PacketPeerUDP:
class SocketTCP extends TCPServer:
const RX_TIMEOUT: int = 1000 ## Время сброса счётчика принятия части пакета.
var peerstream: = PacketPeerStream.new()
var unit_key: Array ## Клюс юнита.
var unit_key: Array ## Ключ юнита.
var head_len: int = 8 ## Длинна заголовка команды.
var len_place: int = 4 ## Номер начального байта с длинной блока данных.
var type_len: int = 4 ## Количество байт в размере длинны.
@@ -32,6 +32,8 @@ var poll_sockets: Array[Socket]
var tcp_sockets: Array
var units: Dictionary
var units_tcp: Dictionary
var dst_ports: Dictionary
var unit_keys: Dictionary
var sock_unicast: Socket
var sock_capsrpb: Socket
var logger_page: Node
@@ -39,7 +41,7 @@ var logger_page: Node
func create_socket(nm) -> Socket:
var addr = repsettings.UnitProfiles[nm][1]
var port = repsettings.UnitProfiles[nm][2]
var port = repsettings.UnitProfiles[nm][2][0]
var broad = repsettings.UnitProfiles[nm][3]
var bind = repsettings.UnitProfiles[nm][4]
var sock: = Socket.new()
@@ -52,7 +54,7 @@ func create_socket(nm) -> Socket:
func create_tcpsocket(nm) -> SocketTCP:
var addr = repsettings.UnitProfiles[nm][1]
var port = repsettings.UnitProfiles[nm][2]
var port = repsettings.UnitProfiles[nm][2][0]
var sock = SocketTCP.new()
sock.unit_key = repsettings.get_unit_key(nm)
sock.listen(port, addr)
@@ -64,7 +66,7 @@ func _ready() -> void:
log.info('Модуль работы с сетью готов')
poll_sockets.append(create_socket('уарэп-яу07-частный'))
poll_sockets.append(create_socket('уарэп-яу07-общий'))
poll_sockets.append(create_socket('уарэп-капсрпб-пол'))
poll_sockets.append(create_socket('уарэп-капсрпб'))
sock_unicast = poll_sockets[0]
sock_capsrpb = poll_sockets[2]
@@ -78,7 +80,11 @@ func _ready() -> void:
if logger_page:
unit.connect('line_changed', Callable(logger_page, 'on_line_changed').bind(unit_key))
unit.connect('command_fail', Callable(logger_page, 'on_command_fail').bind(unit_key))
if len(settings[2]) > 1:
dst_ports[unit_key] = settings[2][1]
else:
dst_ports[unit_key] = settings[2][0]
if proto in TCP_PROTO:
var unit = TCP_PROTO[proto].new(unit_name)
var unit_key = repsettings.get_unit_key(unit_name)
@@ -88,10 +94,11 @@ func _ready() -> void:
unit.connect('command_fail', Callable(logger_page, 'on_command_fail').bind(unit_key))
tcp_sockets.append([create_tcpsocket('уарэп-5п28'), units_tcp[repsettings.get_unit_key('уарэп-5п28')]])
for key in units: log.info('%s %s:%d' % [units[key].name, key[0], key[1]])
for key in units_tcp: log.info('%s %s:%d' % [units_tcp[key].name, key[0], key[1]])
for key in dst_ports:
unit_keys[dst_ports[key]] = key
func poll_receive(sock: Socket, tick: int) -> bool:
while sock.get_available_packet_count() > 0:
@@ -99,7 +106,11 @@ func poll_receive(sock: Socket, tick: int) -> bool:
var addr: = sock.get_packet_ip()
var port: = sock.get_packet_port()
var addr_port: = [addr, port]
if addr_port in units: units[addr_port].parse(data, tick)
if addr_port in units:
units[addr_port].parse(data, tick)
return false
if port in unit_keys:
units[unit_keys[port]].parse(data, tick)
return false
@@ -154,7 +165,7 @@ func _process(_delta: float) -> void:
for addr in units:
var unit = units[addr]
match unit.process(tick):
Error.OK: sock_unicast.send_to(addr, unit.tx_data)
Error.OK: sock_unicast.send_to([addr[0], dst_ports[addr]], unit.tx_data)
Error.FAILED: emit_signal('socket_error', 'ошибка: %s %s:%d' % [unit, addr[0], addr[1]])
for sock_unit in tcp_sockets:
var sock = sock_unit[0]