Доработка УГ

This commit is contained in:
TotMaxim
2025-11-20 21:37:17 +03:00
parent 667f6d997e
commit 6624110192
4 changed files with 721 additions and 119 deletions

View File

@@ -43,6 +43,9 @@ var _timer: Timer
var _poll_timer: Timer
var _sockets_status_bit: int = 0
var _dkm_status_bit: int = 0
var _dry_contact_status_bit: int = 0xFF
var _dou_and_att_2_status_bit: Dictionary = {0x106: 0}
var _dou_and_att_3_status_bit: Dictionary = {0x108: 0}
var _isa_ports: Dictionary = {}
var _cmd_number_count: int = 0
var _written_isa_ports: Array = []
@@ -64,6 +67,8 @@ var ukp1_data: PackedByteArray:
print('Данные UKP1 обновлены')
func _init(name: String):
"""Инициализация UDP broadcast клиента"""
_self_name = name
@@ -188,6 +193,38 @@ func get_dkm_status() -> int:
return _dkm_status_bit
func set_dou2_status(status: int) -> void:
"""Установка статуса DOU"""
var masked_status = status & 0b111 # Маска для первых 3 битов
_dou_and_att_2_status_bit[0x106] = masked_status
func get_dou2_status() -> int:
"""Получение статуса DOU"""
return _dou_and_att_2_status_bit[0x106] & 0b111
func set_dou3_status(status: int) -> void:
"""Установка статуса DOU"""
var masked_status = status & 0b111 # Маска для первых 3 битов
_dou_and_att_3_status_bit[0x108] = masked_status
func get_dou3_status() -> int:
"""Получение статуса DOU"""
return _dou_and_att_3_status_bit[0x108] & 0b111
func set_ip_status(status: int)->void:
"""Установка статуса ИП"""
_dry_contact_status_bit = status
func get_ip_status()->int:
"""Получение статуса ИП"""
return _dry_contact_status_bit
func set_isa_port(port_addr: int, value: int) -> bool:
"""Установка значения ISA порта"""
if port_addr < 0 or port_addr > 0xFFFF:
@@ -276,7 +313,7 @@ func _form_status_device_packet() -> PackedByteArray:
_encode_packet_header(buffer)
_encode_device_data(buffer)
print('_written_isa_ports.size(): ', _written_isa_ports.size())
# Добавляем поле команды после статуса
if _written_isa_ports.size() > 0:
var cmd_offset = header_size + STATUS_PACKET_SIZE
@@ -343,9 +380,11 @@ func _encode_ems_g_data(buffer: PackedByteArray) -> void:
func _encode_ug_data(buffer: PackedByteArray) -> void:
"""Кодирование данных UG"""
buffer.encode_u16(UG_DATA_OFFSET, _dkm_status_bit) # Статус DKM
buffer.encode_u16(UG_DATA_OFFSET + 2, 0x059e) # DRY CONTACT
# D15...D8 = ДКМ (старший байт)
buffer.encode_u8(UG_DATA_OFFSET + 1, _dkm_status_bit & 0xFF)
# D7...D0 = Сухие контакты (младший байт)
buffer.encode_u8(UG_DATA_OFFSET, _dry_contact_status_bit & 0xFF)
func _encode_ukp_data(buffer: PackedByteArray) -> void:
"""Кодирование данных UKP"""