Доработка. Изменение структуры юнитов и обмена. Добавлен файл прибора Щ3.
This commit is contained in:
@@ -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]
|
||||
|
||||
Reference in New Issue
Block a user