From 6648a8ba89b7096c1163d03383c35938fcb09f08 Mon Sep 17 00:00:00 2001 From: Maxim Date: Wed, 13 Nov 2024 15:43:24 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9A=D0=BE=D0=BD=D1=82=D1=80=D0=BE=D0=BB?= =?UTF-8?q?=D1=8C=20=D1=8F=D1=87=D0=B5=D0=B5=D0=BA=20=D0=AF=D0=A3-07=D0=91?= =?UTF-8?q?,=20=D0=A3=D0=93,=20=D0=A3=D0=9A=D0=9F,=20=D0=AD=D0=9C=D0=A1-?= =?UTF-8?q?=D0=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PRD.gd | 67 +++++++++++++++++++++++++++++++++-------------- PRD_MP550.tscn | 71 +++++++++++++++++++++++++++++++++++++++++++++++++- constants.gd | 6 +++++ 3 files changed, 124 insertions(+), 20 deletions(-) diff --git a/PRD.gd b/PRD.gd index a5d6eb1..f196fa0 100644 --- a/PRD.gd +++ b/PRD.gd @@ -8,10 +8,9 @@ var ports_wr: Dictionary # Словарь с портами для з var port: int var broadcast_packet: PackedByteArray var node_select1: Node -const CONST_MIN_TEMP: int = -25 -const MAXIMUM_CODE_ADC: int = 3796 -const MINIMUM_CODE_AD: int = 2660 -const TEMP: float = 115.0 / (MAXIMUM_CODE_ADC - MINIMUM_CODE_AD) +var timeout: float = Yau07.ONLINE_TIMEOUT +var last_update_time: float = 0.0 +var flag_yau_control: bool ## Класс для отправки данных в сокет class Socket extends PacketPeerUDP: @@ -21,13 +20,27 @@ class Socket extends PacketPeerUDP: func poll_receive(sock: Socket) -> bool: ## Приёмник - while sock.get_available_packet_count() > 0: - broadcast_packet = sock.get_packet() - var addr_receive = sock.get_packet_ip() - var port_receive = sock.get_packet_port() - if (address == addr_receive) and (port == port_receive): # Если есть коннект с ЯУ-07Б - var data = unit.parse(broadcast_packet) - print('DATA: ', data) + if timeout - last_update_time > 0: + while sock.get_available_packet_count() > 0: + broadcast_packet = sock.get_packet() + var addr_receive = sock.get_packet_ip() + var port_receive = sock.get_packet_port() + + if broadcast_packet: + $Controlpanel/yau07.text = 'ЯУ-07Б НА СВЯЗИ' + $Controlpanel/yau07.modulate = Constants.GREEN + flag_yau_control = true + last_update_time = 0.0 + + if (address == addr_receive) and (port == port_receive): + unit.parse(broadcast_packet) + else: + if sock.get_available_packet_count(): + last_update_time = 0.0 + else: + $Controlpanel/yau07.text = 'НЕТ СВЯЗИ С ЯУ-07Б' + $Controlpanel/yau07.modulate = Constants.RED + flag_yau_control = false return false @@ -59,6 +72,7 @@ func draw_tabl(tbl, row: Array, count_row: int): func _process(delta: float) -> void: + last_update_time += delta poll_receive(soc_brodcast) if broadcast_packet: parse_broadcast(broadcast_packet) @@ -73,8 +87,18 @@ func parse_broadcast(packet): var temperature: int # Температура с широковещания var dry_contact: int # Контроль сухих контактов var DKM: int - var EMS_G: int - + var EMS_G: int + var status_board = packet.decode_u8(8) + for i in 4: + if i == 0: + $Controlpanel/EMS_G.modulate = Constants.GREEN if status_board & (1 << i) and flag_yau_control else Constants.RED + elif i == 1: + $Controlpanel/UG.modulate = Constants.GREEN if status_board & (1 << i) and flag_yau_control else Constants.RED + elif i == 2: + $Controlpanel/UKP1.modulate = Constants.GREEN if status_board & (1 << i) and flag_yau_control else Constants.RED + elif i == 3: + $Controlpanel/UKP2.modulate = Constants.GREEN if status_board & (1 << i) and flag_yau_control else Constants.RED + $Packet.text = 'broadcast: ' + str(packet) dry_contact = packet.decode_u16(35) node_select1.set_node_text(2, 0, '%d' % dry_contact) @@ -88,7 +112,7 @@ func parse_broadcast(packet): for i in range(8): var TMP = packet.decode_u16(55 + 2 * i) - temperature = CONST_MIN_TEMP + (MAXIMUM_CODE_ADC - TMP) * TEMP + temperature = Constants.CONST_MIN_TEMP + (Constants.MAXIMUM_CODE_ADC - TMP) * Constants.TEMP node_select1.set_node_text(1, i, '%d' % temperature) for i in range(8): @@ -96,9 +120,10 @@ func parse_broadcast(packet): node_select1.set_node_text(0, i+8, '%d' % power) for i in range(8): - var TMP = packet.decode_u16(87 + 2 * i) - temperature = CONST_MIN_TEMP + (MAXIMUM_CODE_ADC - TMP) * TEMP - node_select1.set_node_text(1, i+8, '%d' % temperature) + if len(packet) > 87 + 2 * i: + var TMP = packet.decode_u16(87 + 2 * i) + temperature = Constants.CONST_MIN_TEMP + (Constants.MAXIMUM_CODE_ADC - TMP) * Constants.TEMP + node_select1.set_node_text(1, i+8, '%d' % temperature) for i in range(15): EMS_G = packet.decode_u16(9 + 2 * i) @@ -107,9 +132,9 @@ func parse_broadcast(packet): func on_line_changed(_unit) -> void: if unit.online: - print_debug('Online') + print('Off line') else: - print_debug('Offline') + print('On line') ## Ессли отсутствует подключение к ячейке ЯУ-07 @@ -120,3 +145,7 @@ func on_command_fail(_unit) -> void: ## Индикация чтения портов func on_command_done(_unit) -> void: pass + + +func _on_control_button(toggled_on: bool) -> void: + pass # Replace with function body. diff --git a/PRD_MP550.tscn b/PRD_MP550.tscn index 944e6f0..d91a940 100644 --- a/PRD_MP550.tscn +++ b/PRD_MP550.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=6 format=3 uid="uid://cvor2jm4xk3ha"] +[gd_scene load_steps=7 format=3 uid="uid://cvor2jm4xk3ha"] [ext_resource type="Script" path="res://PRD.gd" id="1_v273n"] [ext_resource type="Script" path="res://table/table.gd" id="2_vmbyo"] @@ -9,6 +9,9 @@ [sub_resource type="StyleBoxTexture" id="StyleBoxTexture_hdj8q"] +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_ovl8a"] +bg_color = Color(0.0426611, 0.0872922, 0.0207804, 1) + [node name="Node2D" type="Node2D"] script = ExtResource("1_v273n") @@ -53,3 +56,69 @@ theme_override_styles/read_only = SubResource("StyleBoxTexture_hdj8q") text = "broadcast" editable = false wrap_mode = 1 + +[node name="Button" type="Button" parent="."] +offset_left = 22.0 +offset_top = 22.0 +offset_right = 148.0 +offset_bottom = 54.0 +theme_override_styles/pressed = SubResource("StyleBoxFlat_ovl8a") +text = "КОНТРОЛЬ" + +[node name="Controlpanel" type="ColorRect" parent="."] +offset_left = 23.0 +offset_top = 66.0 +offset_right = 356.0 +offset_bottom = 416.0 +color = Color(0.390334, 0.227948, 0.288326, 1) +metadata/_edit_lock_ = true + +[node name="yau07" type="Label" parent="Controlpanel"] +offset_left = 8.0 +offset_top = 12.0 +offset_right = 250.0 +offset_bottom = 35.0 +text = "ЯУ-07Б НА СВЯЗИ" +metadata/_edit_lock_ = true + +[node name="FS" type="Label" parent="Controlpanel"] +offset_left = 8.0 +offset_top = 35.0 +offset_right = 250.0 +offset_bottom = 58.0 +text = "ФС НА СВЯЗИ" +metadata/_edit_lock_ = true + +[node name="EMS_G" type="Label" parent="Controlpanel"] +offset_left = 8.0 +offset_top = 58.0 +offset_right = 250.0 +offset_bottom = 81.0 +text = "НАЛИЧИЕ ЯЧЕЙКИ ЭМС Г" +metadata/_edit_lock_ = true + +[node name="UG" type="Label" parent="Controlpanel"] +offset_left = 8.0 +offset_top = 81.0 +offset_right = 250.0 +offset_bottom = 104.0 +text = "НАЛИЧИЕ ЯЧЕЙКИ УГ" +metadata/_edit_lock_ = true + +[node name="UKP1" type="Label" parent="Controlpanel"] +offset_left = 8.0 +offset_top = 104.0 +offset_right = 250.0 +offset_bottom = 127.0 +text = "НАЛИЧИЕ ЯЧЕЙКИ УКП 1" +metadata/_edit_lock_ = true + +[node name="UKP2" type="Label" parent="Controlpanel"] +offset_left = 8.0 +offset_top = 127.0 +offset_right = 250.0 +offset_bottom = 150.0 +text = "НАЛИЧИЕ ЯЧЕЙКИ УКП 2" +metadata/_edit_lock_ = true + +[connection signal="toggled" from="Button" to="." method="_on_control_button"] diff --git a/constants.gd b/constants.gd index 7864e1b..585b7ff 100644 --- a/constants.gd +++ b/constants.gd @@ -5,6 +5,12 @@ const BROADCAST_PORT: int = 50000 const DEFAULT_ADDRESS: String = '10.1.1.52' const DEFAULT_PORT: String = '50052' const BASE_ADDR: int = 0x100 +const RED = Color(1, 0, 0, 1) +const GREEN = Color(0, 1, 0, 1) +const CONST_MIN_TEMP: int = -25 +const MAXIMUM_CODE_ADC: int = 3796 +const MINIMUM_CODE_AD: int = 2660 +const TEMP: float = 115.0 / (MAXIMUM_CODE_ADC - MINIMUM_CODE_AD) const TableNode = preload("res://table/node.tscn") const ROWS_REGS_DATA: Array = [ [TableNode, TableNode, TableNode, TableNode],