Исправление. Слишком много сообщений об ошибке последовательного порта, если он не работает
This commit is contained in:
@@ -22,18 +22,20 @@ class SocketSerial extends SerialPort:
|
|||||||
'O': SerialPort.PARITY_ODD }
|
'O': SerialPort.PARITY_ODD }
|
||||||
static var tick: int
|
static var tick: int
|
||||||
var unit_instance: unit.Unit
|
var unit_instance: unit.Unit
|
||||||
|
var failed: = {}
|
||||||
|
|
||||||
|
func _init():
|
||||||
|
connect('got_error', on_serial_got_error)
|
||||||
|
|
||||||
|
func on_serial_got_error(where: String, what: String):
|
||||||
|
if where not in failed:
|
||||||
|
push_error([where, what, unit_instance])
|
||||||
|
failed[where] = what
|
||||||
|
|
||||||
func on_serial_data(data: PackedByteArray):
|
func on_serial_data(data: PackedByteArray):
|
||||||
|
failed.clear()
|
||||||
unit_instance.parse(data, tick)
|
unit_instance.parse(data, tick)
|
||||||
|
|
||||||
func on_settings_changed():
|
|
||||||
try_close()
|
|
||||||
var rc = try_open()
|
|
||||||
if rc != Error.OK:
|
|
||||||
log.message(log.ERROR, 'невозможно открыть %s для \"%s\"' % [self, unit_instance.name])
|
|
||||||
else:
|
|
||||||
log.message(log.INFO, '%s для \"%s\"' % [self, unit_instance.name])
|
|
||||||
|
|
||||||
func format_buffer(data: PackedByteArray):
|
func format_buffer(data: PackedByteArray):
|
||||||
var buffer: PackedByteArray
|
var buffer: PackedByteArray
|
||||||
buffer.resize(64)
|
buffer.resize(64)
|
||||||
@@ -52,14 +54,14 @@ class SocketSerial extends SerialPort:
|
|||||||
|
|
||||||
func send_to(_data: PackedByteArray):
|
func send_to(_data: PackedByteArray):
|
||||||
if not is_open():
|
if not is_open():
|
||||||
try_open()
|
call_deferred('try_open')
|
||||||
return
|
return
|
||||||
# var buffer = format_buffer(data) # Не проверено, но должно работать
|
# var buffer = format_buffer(data) # Не проверено, но должно работать
|
||||||
# Эта последовательность для запроса состояния, получена от разработчиков СПТ-25
|
# Эта последовательность для запроса состояния, получена от разработчиков СПТ-25
|
||||||
const tx_tula: = [0x7e, 0x01, 0x04, 0xbb, 0x50, 0x7e]
|
const tx_tula: = [0x7e, 0x01, 0x04, 0xbb, 0x50, 0x7e]
|
||||||
var sz = write_raw(tx_tula)
|
var sz = write_raw(tx_tula)
|
||||||
if sz != tx_tula.size():
|
if sz != tx_tula.size():
|
||||||
try_open()
|
call_deferred('try_close')
|
||||||
|
|
||||||
func _to_string() -> String: return 'последовательный порт \"%s\" @ %d (%s)' % [self.port, self.baudrate, 'открыт' if is_open() else 'закрыт']
|
func _to_string() -> String: return 'последовательный порт \"%s\" @ %d (%s)' % [self.port, self.baudrate, 'открыт' if is_open() else 'закрыт']
|
||||||
|
|
||||||
@@ -144,6 +146,15 @@ var send_sockets: Dictionary[StringName, SocketUDP] ## Таблица <имя
|
|||||||
var addr_port_to_unit_name: Dictionary[StringName, StringName] ## Преобразование адрес:порт в имя устройства
|
var addr_port_to_unit_name: Dictionary[StringName, StringName] ## Преобразование адрес:порт в имя устройства
|
||||||
|
|
||||||
|
|
||||||
|
func on_settings_changed(serial: SocketSerial):
|
||||||
|
serial.try_close()
|
||||||
|
var rc = serial.try_open()
|
||||||
|
if rc != Error.OK:
|
||||||
|
log.message(log.ERROR, 'невозможно открыть %s для \"%s\"' % [serial.port, serial.unit_instance.name])
|
||||||
|
else:
|
||||||
|
log.message(log.INFO, 'открыт %s для \"%s\"' % [serial.port, serial.unit_instance.name])
|
||||||
|
|
||||||
|
|
||||||
## [param unit_name] - Уникальное имя устройства[br]
|
## [param unit_name] - Уникальное имя устройства[br]
|
||||||
func create_socket_udp(unit_name: StringName) -> SocketUDP:
|
func create_socket_udp(unit_name: StringName) -> SocketUDP:
|
||||||
var st = settings.UnitProfiles[unit_name][1]
|
var st = settings.UnitProfiles[unit_name][1]
|
||||||
@@ -202,13 +213,10 @@ func create_serial(unit_instance: unit.Unit) -> SocketSerial:
|
|||||||
serial.bytesize = st[4]
|
serial.bytesize = st[4]
|
||||||
serial.stopbits = st[5]
|
serial.stopbits = st[5]
|
||||||
serial.unit_instance = unit_instance
|
serial.unit_instance = unit_instance
|
||||||
|
ProjectSettings.connect('settings_changed', func(): on_settings_changed(serial))
|
||||||
return serial
|
return serial
|
||||||
|
|
||||||
|
|
||||||
func on_serial_got_error(where: String, what: String, serial: SocketSerial, unit_instance: unit.Unit):
|
|
||||||
push_error([where, what, serial])
|
|
||||||
|
|
||||||
|
|
||||||
## [param unit_name] - Уникальное имя устройства[br]
|
## [param unit_name] - Уникальное имя устройства[br]
|
||||||
func create_modbus(unit_name: StringName) -> sch_3.Sch3:
|
func create_modbus(unit_name: StringName) -> sch_3.Sch3:
|
||||||
var unit_modbus: = sch_3.Sch3.new(unit_name)
|
var unit_modbus: = sch_3.Sch3.new(unit_name)
|
||||||
@@ -286,8 +294,6 @@ func _ready() -> void:
|
|||||||
if proto in SERIAL_PROTO:
|
if proto in SERIAL_PROTO:
|
||||||
var unit_instance = SERIAL_PROTO[proto].new(unit_name)
|
var unit_instance = SERIAL_PROTO[proto].new(unit_name)
|
||||||
var serial: = create_serial(unit_instance)
|
var serial: = create_serial(unit_instance)
|
||||||
serial.connect('got_error', on_serial_got_error.bind(serial, unit_instance))
|
|
||||||
ProjectSettings.connect('settings_changed', serial.on_settings_changed)
|
|
||||||
units_serial[unit_name] = unit_instance
|
units_serial[unit_name] = unit_instance
|
||||||
units[unit_name] = unit_instance
|
units[unit_name] = unit_instance
|
||||||
serials[unit_name] = serial
|
serials[unit_name] = serial
|
||||||
|
|||||||
Reference in New Issue
Block a user