Доработка. Отображение состояния Щ3 (Щ-3) в режиме Контроль
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
class_name sch_3 extends Node
|
||||
|
||||
const ONLINE_TIMEOUT = 5.0 ## Время ожидания пакета от ячейки, секунды.
|
||||
const ONLINE_TIMEOUT: int = 5000 ## Время ожидания данных
|
||||
const REQUEST_PERIOD: int = 3000 ## Переиод запроса, мс
|
||||
|
||||
class Sch3 extends unit.Unit:
|
||||
|
||||
@@ -29,24 +30,26 @@ class Sch3 extends unit.Unit:
|
||||
## Изменяет состояние. Вызывать периодически.[br]
|
||||
## [param tick] - Текущщее время в мс.[br]
|
||||
func process(tick: int):
|
||||
if online and ((tick - tick_rx) > ONLINE_TIMEOUT):
|
||||
if online and ((tick - rx_tick) > ONLINE_TIMEOUT):
|
||||
online = false
|
||||
emit_signal('line_changed', self)
|
||||
if (cmd_state == CmdState.WAIT) or (cmd_state == CmdState.SEND):
|
||||
if cmd_state == CmdState.WAIT:
|
||||
cmd_state = CmdState.FAIL
|
||||
emit_signal('command_fail', self)
|
||||
var rc = Error.ERR_BUSY
|
||||
if cmd_state == CmdState.SEND:
|
||||
rc = Error.OK
|
||||
tick_tx = tick
|
||||
cmd_state = CmdState.WAIT
|
||||
if (tick - tx_tick) > REQUEST_PERIOD:
|
||||
if read_input(0, 4):
|
||||
tx_tick = tick
|
||||
cmd_state = CmdState.WAIT
|
||||
rc = Error.OK
|
||||
return rc
|
||||
|
||||
|
||||
## Производит разбор принятых данных. Вызывать при приёме данных на сокете.[br]
|
||||
## [param data] - Данные принятые на сокете.[br]
|
||||
## [param tick] - Текущщее время в мс.[br]
|
||||
func parse(data: PackedByteArray, tick: int) -> bool:
|
||||
tick_rx = tick
|
||||
rx_tick = tick
|
||||
if not online:
|
||||
online = true
|
||||
emit_signal('line_changed', self)
|
||||
@@ -63,15 +66,18 @@ class Sch3 extends unit.Unit:
|
||||
var addr = message_data[0]
|
||||
var regs = message_data.slice(1)
|
||||
emit_signal('responce_received', addr, regs)
|
||||
rc = true
|
||||
'info':
|
||||
var msg = message['data']
|
||||
emit_signal('info_received', msg)
|
||||
'exception':
|
||||
var msg = message['data']
|
||||
cmd_state = CmdState.FAIL
|
||||
emit_signal('except_received', msg)
|
||||
rc = false
|
||||
_:
|
||||
var msg: String = 'код команды \"%s\" - не распознан' % message_code
|
||||
cmd_state = CmdState.FAIL
|
||||
emit_signal('parse_failed', msg)
|
||||
rc = false
|
||||
if (cmd_state == CmdState.WAIT) and rc:
|
||||
@@ -98,7 +104,7 @@ class Sch3 extends unit.Unit:
|
||||
## Отправляет команду "читать регистры хранения".[br]
|
||||
## [param addr] - Начальный адрес регистров.[br]
|
||||
## [param count] - Количество регистров от начального адреса.[br]
|
||||
func read_holdind(addr: int, count: int = 1) -> bool:
|
||||
func read_holding(addr: int, count: int = 1) -> bool:
|
||||
if cmd_state != CmdState.DONE: return false
|
||||
var json_dict = {'code': 'read_holding', 'data': [addr, count]}
|
||||
tx_data = JSON.stringify(json_dict).to_utf8_buffer()
|
||||
|
||||
@@ -5,9 +5,6 @@ const REQUEST_PERIOD: int = 3000 ## Переиод запроса, мс
|
||||
|
||||
class SPT25 extends unit.Unit:
|
||||
|
||||
var tx_tick: int = 0
|
||||
var rx_tick: int = 0
|
||||
var req_period = REQUEST_PERIOD
|
||||
func _to_string() -> String: return String('СПТ-25 %s %s' % [self.name, ['отключен', 'на связи'][int(online)]])
|
||||
|
||||
func _init(nm) -> void:
|
||||
@@ -28,12 +25,15 @@ class SPT25 extends unit.Unit:
|
||||
if not online:
|
||||
online = true
|
||||
emit_signal('line_changed', self)
|
||||
if rx_data.size() <= 6:
|
||||
emit_signal('parse_failed', self)
|
||||
return
|
||||
emit_signal('data_received', rx_data)
|
||||
|
||||
|
||||
func process(tick: int):
|
||||
var rc: = Error.ERR_BUSY
|
||||
if (tick - tx_tick) > req_period:
|
||||
if (tick - tx_tick) > REQUEST_PERIOD:
|
||||
tx_tick = tick
|
||||
rc = Error.OK
|
||||
if online:
|
||||
|
||||
@@ -44,7 +44,6 @@ class TCP5P28 extends unit.Unit:
|
||||
signal get_threats(unit: TCP5P28) ## Сигнал запрос целей.
|
||||
signal get_interfers(unit: TCP5P28) ## Запрос состояния выполнения целеуказания.
|
||||
|
||||
var rx_tick: = 0 ## Тик время последнего приёма, мс.
|
||||
var tx_stack: Array ## Массив пакетов для отправки.
|
||||
|
||||
func _to_string() -> String: return String('капсрпб: "%s" %s ' % [self.name, ['отключен', 'на связи'][int(online)]])
|
||||
|
||||
@@ -8,8 +8,10 @@ class Unit:
|
||||
signal parse_failed(unit) ## Вызывается при обнаружении ошибки во входных данных
|
||||
signal data_received(data: PackedByteArray) ## Вызывается по приёму данных
|
||||
|
||||
var tx_data: = PackedByteArray() ## Буфер отправленный.
|
||||
var tx_len = 0 ## Длина последнего отправленного пакета.
|
||||
var tx_data: = PackedByteArray() ## Буфер отправленный.
|
||||
var tx_len = 0 ## Длина последнего отправленного пакета.
|
||||
var tx_tick: int = 0
|
||||
var rx_tick: int = 0
|
||||
var online: bool
|
||||
var name: String
|
||||
func _init(nm) -> void: self.name = nm
|
||||
|
||||
Reference in New Issue
Block a user