Files
uarep-ctl/scripts/spt25.gd

50 lines
2.0 KiB
GDScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

class_name spt25_unit extends Node
const ONLINE_TIMEOUT: int = 5000 ## Время ожидания данных
const REQUEST_PERIOD: int = 3000 ## Переиод запроса, мс
class SPT25 extends unit.Unit:
enum CmdCode {
START = 1, ## СВУ к МПСУ: Пуск преобразователя
STOP = 2, ## СВУ к МПСУ: Стоп преобразователя
INFO = 4, ## СВУ к МПСУ: Получить информацию о состоянии преобразователя. МПСУ к СВУ: Информация о состоянии преобразователя
}
func _to_string() -> String: return String('СПТ-25 %s %s' % [self.name, ['отключен', 'на связи'][int(online)]])
func _init(unit_name) -> void:
self.name = unit_name
tx_data.resize(2)
tx_data[0] = 0 # Адрес абонента, которому предназначен пакет
tx_data[1] = CmdCode.INFO # Тип пакета, КОД КОМАНДЫ - Получить информацию о состоянии преобразователя
func parse(rx_data: PackedByteArray, tick: int):
rx_tick = tick
if rx_data.size() <= 6:
emit_signal('parse_failed', self)
return
if rx_data[0] != 0x7e:
emit_signal('parse_failed', self)
return
if not (rx_data[2] in [CmdCode.START, CmdCode.STOP, CmdCode.INFO]):
emit_signal('parse_failed', self)
return
if not online:
online = true
emit_signal('line_changed', self)
emit_signal('data_received', rx_data)
func process(tick: int):
var rc: = Error.ERR_BUSY
if (tick - tx_tick) > REQUEST_PERIOD:
tx_tick = tick
rc = Error.OK
if online:
if (tick - rx_tick) > ONLINE_TIMEOUT:
online = false
emit_signal('line_changed', self)
return rc