From da73feed4bce2037692aa03c07d43cec45e95db4 Mon Sep 17 00:00:00 2001 From: Maxim Date: Thu, 6 Feb 2025 21:43:33 +0300 Subject: [PATCH 1/6] modul fs --- PRD_MP550.tscn | 17 +++++++++-------- scripts/FS.gd | 25 +++++++++++++------------ scripts/PRD.gd | 17 +++++++++++------ scripts/constants.gd | 40 ++-------------------------------------- scripts/ems_g.gd | 8 ++++---- table/node.tscn | 1 + 6 files changed, 40 insertions(+), 68 deletions(-) diff --git a/PRD_MP550.tscn b/PRD_MP550.tscn index 9dcfdb1..a6d11e2 100644 --- a/PRD_MP550.tscn +++ b/PRD_MP550.tscn @@ -806,25 +806,26 @@ script = ExtResource("2_vmbyo") [node name="load_boadr" type="ColorRect" parent="TabContainer/EMS_G"] layout_mode = 0 -offset_left = 27.0 -offset_top = 148.0 -offset_right = 1596.0 -offset_bottom = 717.0 +offset_left = 35.0 +offset_top = 58.0 +offset_right = 1604.0 +offset_bottom = 782.0 color = Color(0, 0, 0, 0.596078) +metadata/_edit_lock_ = true [node name="load" type="Sprite2D" parent="TabContainer/EMS_G/load_boadr"] material = SubResource("ShaderMaterial_slcfo") -position = Vector2(786, 284.5) -scale = Vector2(24.4688, 8.89063) +position = Vector2(785.001, 361.5) +scale = Vector2(24.5313, 11.2656) texture = SubResource("GradientTexture2D_0pk2o") metadata/_edit_lock_ = true [node name="Load_text" type="Label" parent="TabContainer/EMS_G/load_boadr"] layout_mode = 0 offset_left = 693.0 -offset_top = 277.0 +offset_top = 341.0 offset_right = 849.0 -offset_bottom = 316.0 +offset_bottom = 380.0 theme_override_colors/font_color = Color(1, 1, 1, 1) theme_override_colors/font_shadow_color = Color(0.427493, 0.427493, 0.427493, 1) theme_override_font_sizes/font_size = 28 diff --git a/scripts/FS.gd b/scripts/FS.gd index a1f4219..bb8f0b0 100644 --- a/scripts/FS.gd +++ b/scripts/FS.gd @@ -71,7 +71,8 @@ class FGOS: const CMD_OFFSET: int = 0x1 const COUNTER_OFFSET: int = 0x4 const PAYLOAD_OFFSET: int = 0x8 - + const INIT: int = 0xFFFFFFFF + const FINAL_XOR_VALUE: int = 0x00000000 signal line_changed(unit: FGOS) ## Вызывается когда меняется состояние связи с ячейкой @@ -82,12 +83,12 @@ class FGOS: func crc32(data: PackedByteArray) -> int: - var crc = Constants.INIT + var crc = INIT for byte in data: var index = (crc ^ byte) & 0xFF - crc = (Constants.CRC32_TABLE[index] ^ (crc >> 8)) & 0xFFFFFFFF + crc = (CRC32_TABLE[index] ^ (crc >> 8)) & 0xFFFFFFFF # Возвращаем только последние 4 байта в обратном порядке - var final_crc = crc ^ Constants.FINAL_XOR_VALUE + var final_crc = crc ^ FINAL_XOR_VALUE return final_crc @@ -132,7 +133,7 @@ class FGOS: func start_session(): counter = 0 - var packet = _form_packet(Constants.GROUP.BASE, Constants.CMD.START_SESSION, 0xC) + var packet = _form_packet(GROUP.BASE, CmdCode.START_SESSION, 0xC) _send_packet(packet) get_gen_state() get_att_batch() @@ -141,7 +142,7 @@ class FGOS: func set_gen_state(button_state: bool): var index_size = 0x1C - var packet = _form_packet(Constants.GROUP.GENERATOR, Constants.CMD.SET_GEN_STATUS, index_size) + var packet = _form_packet(GROUP.GENERATOR, CmdCode.SET_GEN_STATUS, index_size) packet.encode_u16(0x8, 0x0010) packet.encode_u32(0xC, button_state) ## MODE GEN STATUS _send_packet(packet) @@ -150,7 +151,7 @@ class FGOS: func set_carrier(installation_frequency: int): var index_size = 0x1C - var packet = _form_packet(Constants.GROUP.BASE, Constants.CMD.SET_CARRIER, index_size) + var packet = _form_packet(GROUP.BASE, CmdCode.SET_CARRIER, index_size) packet.encode_u16(0x8, 0x10) packet.encode_u64(0xC, installation_frequency) ## uint64_t freq low dword/high dword _send_packet(packet) @@ -158,27 +159,27 @@ class FGOS: func set_att_batch(attenuation: float): var index_size = 0x1C - var packet = _form_packet(Constants.GROUP.RF, Constants.CMD.SET_ATT, index_size) + var packet = _form_packet(GROUP.RF, CmdCode.SET_ATT, index_size) packet.encode_u16(0x8, 0x10) packet.encode_float(0x18, attenuation) _send_packet(packet) func get_carrier(): - var packet = _form_packet(Constants.GROUP.BASE, Constants.CMD.READ_CARRIER, INDEX_SIZE) + var packet = _form_packet(GROUP.BASE, CmdCode.READ_CARRIER, INDEX_SIZE) _send_packet(packet) func get_att_batch(): - var packet = _form_packet(Constants.GROUP.RF, Constants.CMD.READ_ATT, INDEX_SIZE) + var packet = _form_packet(GROUP.RF, CmdCode.READ_ATT, INDEX_SIZE) _send_packet(packet) func get_gen_state(): - var packet = _form_packet(Constants.GROUP.GENERATOR, Constants.CMD.READ_GEN_STATUS, INDEX_SIZE) + var packet = _form_packet(GROUP.GENERATOR, CmdCode.READ_GEN_STATUS, INDEX_SIZE) _send_packet(packet) func base_get_current_temp(): - var packet = _form_packet(Constants.GROUP.BASE, Constants.CMD.BASE_GET_CURRENT_TEMP, INDEX_SIZE) + var packet = _form_packet(GROUP.BASE, CmdCode.BASE_GET_CURRENT_TEMP, INDEX_SIZE) _send_packet(packet) diff --git a/scripts/PRD.gd b/scripts/PRD.gd index 7154cc7..45df211 100644 --- a/scripts/PRD.gd +++ b/scripts/PRD.gd @@ -150,6 +150,8 @@ func _ready() -> void: node_select_yau_07b_2.get_node2(1, 5).get_child(1, false).connect('toggled', Callable(self, '_on_fgos_2')) node_select_fs_1.get_node2(1, 4).get_child(1, false).connect('toggled', Callable(self, '_on_get_status_1')) + node_select_fs_1.get_node2(1, 3).connect('text_submitted', Callable(self, '_on_set_att')) + node_select_fs_1.get_node2(1, 2).connect('text_submitted', Callable(self, '_on_set_ferq')) func draw_control_panel_prd(mode) -> void: @@ -524,11 +526,14 @@ func _on_get_status_1(toggled_btn): unit_fs_1.get_gen_state() -func _on_set_ferq(): - var freq = int($set_space/write_to_set_freq.get_text()) * 1_000_000 - unit_fs_1.set_carrier(freq) +func _on_set_ferq(freq): + unit_fs_1.set_carrier(int(freq) * 1_000_000) + unit_fs_1.base_get_current_temp() + unit_fs_1.get_carrier() -func _on_set_att(): - var att = float($set_space/write_to_set_att.get_text()) - unit_fs_1.set_att_batch(att) +func _on_set_att(att): + unit_fs_1.set_att_batch(float(att)) + unit_fs_1.base_get_current_temp() + unit_fs_1.base_get_current_temp() + unit_fs_1.get_att_batch() diff --git a/scripts/constants.gd b/scripts/constants.gd index 12279cd..65eaef1 100644 --- a/scripts/constants.gd +++ b/scripts/constants.gd @@ -247,50 +247,14 @@ enum STATE { var EMS_G_PORT_DATA_HOLDER: Array = [] -# Таблица CRC-32 для модуля ФС -const CRC32_TABLE: Array = [ - 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, - 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, - 0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, - 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, - 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172, 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, - 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, - 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F, - 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, - 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433, - 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, - 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, - 0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, - 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, - 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0, 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, - 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F, - 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD, - 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, - 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1, - 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, - 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, - 0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, - 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79, - 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236, 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, - 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, - 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713, - 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, - 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777, - 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, - 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, - 0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, - 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF, - 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94, 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D] - const PORT_FS = 1201 -const INIT: int = 0xFFFFFFFF -const FINAL_XOR_VALUE: int = 0x00000000 enum GROUP { BASE = 0x00, GENERATOR = 0x03, RF = 0x06, } + enum CMD { START_SESSION = 0x0, READ_CARRIER = 0x1F, @@ -300,4 +264,4 @@ enum CMD { READ_GEN_STATUS = 0x05, SET_GEN_STATUS = 0x06, BASE_GET_CURRENT_TEMP = 0x36, -} + } diff --git a/scripts/ems_g.gd b/scripts/ems_g.gd index 0821155..d6c68a2 100644 --- a/scripts/ems_g.gd +++ b/scripts/ems_g.gd @@ -115,8 +115,12 @@ func process_sockets_horizon(blank: int, imp: int, count: int, col: int, parent_ if i == 1: set_frame(get_specific_node(parent_node2, 5), frame_type) + var CI_2_UF = parent_node2.get_child(3).get_child(0).get_child(0).get_child(0).get_child(2).get_node2(1, 6).get_child(1) + set_frame(CI_2_UF, frame_type) if i == 2: set_frame(get_specific_node(parent_node2, 6), frame_type) + var CI_3_UF = parent_node2.get_child(3).get_child(0).get_child(0).get_child(1).get_child(2).get_node2(1, 6).get_child(1) + set_frame(CI_3_UF, frame_type) if i == 4: set_frame(get_specific_node(parent_node2, 7), frame_type) if i == 5: @@ -139,12 +143,8 @@ func process_sockets_vert(blank: int, imp: int, count: int, col: int, parent_nod if i == 1: set_frame(get_specific_node(parent_node2, 1), frame_type) - var CI_2_UF = parent_node2.get_child(3).get_child(0).get_child(0).get_child(0).get_child(2).get_node2(1, 6).get_child(1) - set_frame(CI_2_UF, frame_type) if i == 2: set_frame(get_specific_node(parent_node2, 2), frame_type) - var CI_3_UF = parent_node2.get_child(3).get_child(0).get_child(0).get_child(1).get_child(2).get_node2(1, 6).get_child(1) - set_frame(CI_3_UF, frame_type) if i == 9: set_frame(get_specific_node(parent_node2, 3), frame_type) var CI_2_FS = parent_node2.get_child(3).get_child(0).get_child(0).get_child(0).get_child(0).get_node2(1, 6).get_child(1) diff --git a/table/node.tscn b/table/node.tscn index f0db82f..e2b91cf 100644 --- a/table/node.tscn +++ b/table/node.tscn @@ -31,6 +31,7 @@ caret_blink = true caret_blink_interval = 0.5 [node name="Color_Ems_g" type="ColorRect" parent="."] +visible = false layout_mode = 0 offset_right = 1933.0 offset_bottom = 1088.0 From a2467c3d8b07e58695c86acce1733bffa8ae65e8 Mon Sep 17 00:00:00 2001 From: Maxim Date: Thu, 6 Feb 2025 22:27:26 +0300 Subject: [PATCH 2/6] modul fs 1 --- project.godot | 2 +- scripts/PRD.gd | 62 +++++++++++++++++++++++++++---------------- scripts/modul_fs.gd | 64 ++++++++++++++++++++++----------------------- scripts/network.gd | 28 +++++++++++++++++++- 4 files changed, 99 insertions(+), 57 deletions(-) diff --git a/project.godot b/project.godot index 3dda21a..7b62efb 100644 --- a/project.godot +++ b/project.godot @@ -18,9 +18,9 @@ config/icon="res://icon.svg" [autoload] Constants="*res://scripts/constants.gd" +Fs="*res://scripts/FS.gd" Yau07="*res://scripts/yau07.gd" Network="*res://scripts/network.gd" -Fs="*res://scripts/FS.gd" [debug] diff --git a/scripts/PRD.gd b/scripts/PRD.gd index 45df211..a8afb7e 100644 --- a/scripts/PRD.gd +++ b/scripts/PRD.gd @@ -2,7 +2,7 @@ extends Node2D signal read_ems_g_start() signal read_ems_g_finish() -var unit_fs_1 = Fs.FGOS.new() + var flag_mode = Constants.ADDRESSES[0][3] var broadcast_packet: PackedByteArray var node_select1: Node @@ -90,10 +90,11 @@ func _ready() -> void: node_select_fs_2.set_node_text(1, 0, 'Литера 3') node_select_fs_2.set_node_text(0, 1, 'Состояние') node_select_fs_2.set_node_text(0, 2, 'Частота') - #node_select_fs_2.get_node2(1, 2).placeholder_text = '500' + node_select_fs_2.get_node2(1, 2).placeholder_text = 'в МГц' + node_select_fs_2.get_node2(1, 2).editable = true node_select_fs_2.set_node_text(0, 3, 'Аттенюатор') - #node_select_fs_2.get_node2(1, 3).placeholder_text = '38.7' - #node_select_fs_2.get_node2(1, 3).d = true + node_select_fs_2.get_node2(1, 3).placeholder_text = 'в dB' + node_select_fs_2.get_node2(1, 3).editable = true node_select_fs_2.set_node_text(0, 4, 'Генератор') node_select_fs_2.set_node_text(0, 5, 'fpga') node_select_fs_2.set_node_text(0, 6, 'СИ 3 от ФС') @@ -136,7 +137,8 @@ func _ready() -> void: Network.connect('yau_status_line', Callable(self, '_on_yau_status')) Network.connect('yau_receive', Callable(self, '_on_data_received')) Network.connect('yau_read_isa', Callable(self, '_on_read_isa')) - Network.connect('data_from_fs_1', Callable(self, '_on_data_fs_1')) + Network.connect('data_from_fs_1', _on_data_fs_1) + Network.connect('data_from_fs_2', _on_data_fs_2) node_select_yau_07b.get_node2(1, 1).get_child(1, false).connect('toggled', Callable(self, '_on_zapret1')) node_select_yau_07b.get_node2(1, 2).connect('item_selected', Callable(self, '_on_modul_um_1')) @@ -150,9 +152,13 @@ func _ready() -> void: node_select_yau_07b_2.get_node2(1, 5).get_child(1, false).connect('toggled', Callable(self, '_on_fgos_2')) node_select_fs_1.get_node2(1, 4).get_child(1, false).connect('toggled', Callable(self, '_on_get_status_1')) - node_select_fs_1.get_node2(1, 3).connect('text_submitted', Callable(self, '_on_set_att')) - node_select_fs_1.get_node2(1, 2).connect('text_submitted', Callable(self, '_on_set_ferq')) - + node_select_fs_1.get_node2(1, 3).connect('text_submitted', Callable(self, '_on_set_att_1')) + node_select_fs_1.get_node2(1, 2).connect('text_submitted', Callable(self, '_on_set_ferq_1')) + + node_select_fs_2.get_node2(1, 4).get_child(1, false).connect('toggled', Callable(self, '_on_get_status_2')) + node_select_fs_2.get_node2(1, 3).connect('text_submitted', Callable(self, '_on_set_att_2')) + node_select_fs_2.get_node2(1, 2).connect('text_submitted', Callable(self, '_on_set_ferq_2')) + func draw_control_panel_prd(mode) -> void: for node_path in Constants.NODE_MAP: @@ -223,7 +229,6 @@ func _on_data_fs_1(fs_1_data): Constants.CMD.BASE_GET_CURRENT_TEMP: if GRP == Constants.GROUP.BASE: node_select_fs_1.set_node_text(1, 5, '%.2f' % fs_1_data.decode_float(0xC) + ' °C') - #$read.text = str(fs_1_data.hex_encode()) func _on_data_fs_2(fs_2_data): @@ -514,26 +519,37 @@ func _on_read_isa_pressed() -> void: func set_bits(v, a, m): return (~m) & v | a & m - +## 1 ФС func _on_start_fs_1(): - unit_fs_1.start_session() - unit_fs_1.base_get_current_temp() + Network.start_work_fs() func _on_get_status_1(toggled_btn): var inverted_state = not toggled_btn - unit_fs_1.set_gen_state(inverted_state) - unit_fs_1.get_gen_state() + Network.get_fs_gen_status(inverted_state) -func _on_set_ferq(freq): - unit_fs_1.set_carrier(int(freq) * 1_000_000) - unit_fs_1.base_get_current_temp() - unit_fs_1.get_carrier() +func _on_set_ferq_1(freq: String): + Network.set_fs_ferq_carrier(int(freq) * 1_000_000) -func _on_set_att(att): - unit_fs_1.set_att_batch(float(att)) - unit_fs_1.base_get_current_temp() - unit_fs_1.base_get_current_temp() - unit_fs_1.get_att_batch() +func _on_set_att_1(att: String): + Network.set_fs_attenuation(float(att)) + + +## 2 ФС +func _on_start_fs_2(): + Network.start_work_fs() + + +func _on_get_status_2(toggled_btn): + var inverted_state = not toggled_btn + Network.get_fs_gen_status(inverted_state) + + +func _on_set_ferq_2(freq: String): + Network.set_fs_ferq_carrier(int(freq) * 1_000_000) + + +func _on_set_att_2(att: String): + Network.set_fs_attenuation(float(att)) diff --git a/scripts/modul_fs.gd b/scripts/modul_fs.gd index d59cbab..afa66c2 100644 --- a/scripts/modul_fs.gd +++ b/scripts/modul_fs.gd @@ -15,45 +15,45 @@ func _process(_delta: float) -> void: func _enter_tree() -> void: # Подключаем сигналы к методам Network.connect('data_send', _on_data_send) - Network.connect('data_from_fs_1', _on_data_received) - Network.connect('port_opened', _on_port_changed.bind(Color.GREEN)) - Network.connect('port_closed', _on_port_changed.bind(Color.GRAY)) - Network.connect('port_error', _on_port_changed.bind(Color.RED)) + #Network.connect('data_from_fs_1', _on_data_received) + #Network.connect('port_opened', _on_port_changed.bind(Color.GREEN)) + #Network.connect('port_closed', _on_port_changed.bind(Color.GRAY)) + #Network.connect('port_error', _on_port_changed.bind(Color.RED)) -func _on_port_changed(port_name: String, color: Color) -> void: - $manage_panel/con/ip_connect.text = port_name - $fs_connect.self_modulate = color +#func _on_port_changed(port_name: String, color: Color) -> void: + #$manage_panel/con/ip_connect.text = port_name + #$fs_connect.self_modulate = color func _on_data_send(): pass - -func _on_data_received(data: PackedByteArray): - var GRP = data.decode_u8(0x0) - var CMD = data.decode_u8(0x1) - match CMD: - Constants.CMD.READ_CARRIER: - if GRP == Constants.GROUP.BASE: - $manage_panel/get_freq/freq_ind.text = str(data.decode_u64(0xC)) + ' Гц' - Constants.CMD.READ_ATT: - if GRP == Constants.GROUP.RF: - $manage_panel/get_att/att_ind.text = '-' + str(data.decode_float(0x18)) + ' dB' - Constants.CMD.READ_GEN_STATUS: - if GRP == Constants.GROUP.GENERATOR: - if data.decode_u32(0xC) == 0: - $manage_panel/get_gen_status/status_ind.text = 'Включен' - $manage_panel/get_gen_status/status_ind.modulate = Color.GREEN - else: - $manage_panel/get_gen_status/status_ind.text = 'Выключен' - $manage_panel/get_gen_status/status_ind.modulate = Color.RED - Constants.CMD.BASE_GET_CURRENT_TEMP: - if GRP == Constants.GROUP.BASE: - $temp_1.text = '%.2f' % data.decode_float(0xC) + ' °C' - $temp_2.text = str(data.decode_float(0x10)) + ' °C' - $temp_3.text = str(data.decode_float(0x14)) + ' °C' - $read.text = str(data.hex_encode()) +# +#func _on_data_received(data: PackedByteArray): + #var GRP = data.decode_u8(0x0) + #var CMD = data.decode_u8(0x1) + #match CMD: + #Constants.CMD.READ_CARRIER: + #if GRP == Constants.GROUP.BASE: + #$manage_panel/get_freq/freq_ind.text = str(data.decode_u64(0xC)) + ' Гц' + #Constants.CMD.READ_ATT: + #if GRP == Constants.GROUP.RF: + #$manage_panel/get_att/att_ind.text = '-' + str(data.decode_float(0x18)) + ' dB' + #Constants.CMD.READ_GEN_STATUS: + #if GRP == Constants.GROUP.GENERATOR: + #if data.decode_u32(0xC) == 0: + #$manage_panel/get_gen_status/status_ind.text = 'Включен' + #$manage_panel/get_gen_status/status_ind.modulate = Color.GREEN + #else: + #$manage_panel/get_gen_status/status_ind.text = 'Выключен' + #$manage_panel/get_gen_status/status_ind.modulate = Color.RED + #Constants.CMD.BASE_GET_CURRENT_TEMP: + #if GRP == Constants.GROUP.BASE: + #$temp_1.text = '%.2f' % data.decode_float(0xC) + ' °C' + #$temp_2.text = str(data.decode_float(0x10)) + ' °C' + #$temp_3.text = str(data.decode_float(0x14)) + ' °C' + #$read.text = str(data.hex_encode()) func _on_send_pressed() -> void: diff --git a/scripts/network.gd b/scripts/network.gd index cf8ad61..f435940 100644 --- a/scripts/network.gd +++ b/scripts/network.gd @@ -2,6 +2,7 @@ extends Node # ЯУ-07 Блок var unit = Yau07.YaU07.new('ЯУ-07Б') +var unit_fs_1 = Fs.FGOS.new() var soc_unicast: Socket var soc_brodcast: Socket var ip_address_yau: String = Constants.ADDRESSES[0][1] @@ -27,6 +28,7 @@ signal yau_read_isa(_unit_isa_ports) signal data_send() signal data_from_fs_1(data:PackedByteArray) +signal data_from_fs_2(data:PackedByteArray) signal port_opened(port_name: String) signal port_closed(port_name: String) signal port_error(error_str: String) @@ -73,7 +75,8 @@ func poll_receive_fs(client: StreamPeerTCP): if peer.get_available_bytes() > 0: var rx_data: PackedByteArray rx_data.append_array(peer.get_data(peer.get_available_bytes())[1]) - emit_signal("data_from_fs_1", rx_data) + #emit_signal("data_from_fs_1", rx_data) + emit_signal("data_from_fs_2", rx_data) emit_signal("port_opened", ip_fs_1) if state_fs == Constants.STATE.SEND: state_fs = Constants.STATE.DONE @@ -209,3 +212,26 @@ func disconnect_fs(client_for_leave): client_for_leave.disconnect_from_host() state_fs = Constants.STATE.IDLE command_stack = [] + + +func start_work_fs(): + unit_fs_1.start_session() + unit_fs_1.base_get_current_temp() + + +func get_fs_gen_status(state_gen): + unit_fs_1.set_gen_state(state_gen) + unit_fs_1.get_gen_state() + unit_fs_1.base_get_current_temp() + + +func set_fs_ferq_carrier(freq: int): + unit_fs_1.set_carrier(freq) + unit_fs_1.base_get_current_temp() + unit_fs_1.get_carrier() + + +func set_fs_attenuation(attenuation: float): + unit_fs_1.set_att_batch(attenuation) + unit_fs_1.get_att_batch() + unit_fs_1.base_get_current_temp() From 6e5f0bed349c28d320c9fa18b1364e0b8cd9b89a Mon Sep 17 00:00:00 2001 From: Maxim Date: Fri, 7 Feb 2025 00:10:18 +0300 Subject: [PATCH 3/6] modul fs 2 --- PRD_MP550.tscn | 19 +++-- Web.png | Bin 21325 -> 18795 bytes scripts/FS.gd | 3 +- scripts/PRD.gd | 21 ++++-- scripts/modul_fs.gd | 3 +- scripts/network.gd | 174 ++++++++++++++++++++++++++++++++++---------- 6 files changed, 169 insertions(+), 51 deletions(-) diff --git a/PRD_MP550.tscn b/PRD_MP550.tscn index a6d11e2..1bcb40f 100644 --- a/PRD_MP550.tscn +++ b/PRD_MP550.tscn @@ -252,9 +252,10 @@ color = Color(0.669446, 0.567301, 0.66881, 1) [node name="ISA" type="Label" parent="."] offset_left = 225.0 offset_top = 11.0 -offset_right = 1853.0 +offset_right = 409.0 offset_bottom = 48.0 autowrap_mode = 3 +metadata/_edit_lock_ = true [node name="read_isa" type="Button" parent="."] offset_left = 85.0 @@ -262,6 +263,7 @@ offset_top = 7.0 offset_right = 210.0 offset_bottom = 38.0 text = "Прочитать ISA" +metadata/_edit_lock_ = true [node name="TabContainer" type="TabContainer" parent="."] offset_left = 216.0 @@ -281,6 +283,7 @@ theme_override_styles/tab_unselected = SubResource("StyleBoxTexture_17le6") tab_alignment = 2 current_tab = 0 tab_focus_mode = 0 +metadata/_edit_lock_ = true [node name="PRD" type="Panel" parent="TabContainer"] layout_mode = 2 @@ -329,13 +332,14 @@ script = ExtResource("2_vmbyo") metadata/_edit_lock_ = true [node name="PSK" type="Sprite2D" parent="TabContainer/PRD/body_grid/litera_2_4_6"] -modulate = Color(1, 1, 0.941176, 0.588235) +modulate = Color(1, 1, 0.941176, 0.733333) material = ExtResource("3_3syd3") -position = Vector2(914, 5) -scale = Vector2(0.247968, 0.234167) +position = Vector2(955, 5) +scale = Vector2(0.23, 0.217) texture = SubResource("PlaceholderTexture2D_723du") offset = Vector2(800, 600) script = SubResource("GDScript_0sobq") +metadata/_edit_lock_ = true [node name="PSK grad" type="TextureRect" parent="TabContainer/PRD/body_grid/litera_2_4_6/PSK"] modulate = Color(1, 1, 0.941176, 0.784314) @@ -387,13 +391,14 @@ script = ExtResource("2_vmbyo") metadata/_edit_lock_ = true [node name="PSK2" type="Sprite2D" parent="TabContainer/PRD/body_grid/litera_3_5_7"] -modulate = Color(1, 1, 0.941176, 0.588235) +modulate = Color(1, 1, 0.941176, 0.733333) material = ExtResource("3_3syd3") -position = Vector2(914, -6) -scale = Vector2(0.247968, 0.234167) +position = Vector2(955, -6) +scale = Vector2(0.23, 0.217) texture = SubResource("PlaceholderTexture2D_723du") offset = Vector2(800, 600) script = SubResource("GDScript_0sobq") +metadata/_edit_lock_ = true [node name="PSK grad" type="TextureRect" parent="TabContainer/PRD/body_grid/litera_3_5_7/PSK2"] modulate = Color(1, 1, 0.941176, 0.784314) diff --git a/Web.png b/Web.png index 76c19445d71bb6737309086ad26908091a67802a..cceda451947018b87ddb36f69485c1915570ce7b 100644 GIT binary patch literal 18795 zcmc({dpMM97dZUPnK90%F$UvMQP|^seGD(dNqI8h(J$m0g&+Pa6zJGrI{9ISpzV_VfUTfX!UZ;EA>wYraH`AoC z1S|jm(k{;Hwg3PO1OEG40uBDM-BjUk@IR7F=Us;YKuTfhAMDXc!Y=?I0WRwtw#63v z;ZfyurA#=E%jJTgz~W-!*y7^i+Fy%{dwtCdsIB^V6b}6R&lp@8iv~xJEo#9C=%kk4 zqX-E+9{De)zJG>G={*Gdw4y8yxEOH(B8uo4O!@6fJ;YL_}M0Ps;bT z9*#e&UJ#yP&SSZ!lP;)vwwfO^|A;daiQzwx3ih?QXRN?m3|otrtfEE6JBm?C0&$<* z$^fO@2XYjJgRJAdT8Hb*aWDh|@teh^c_u$V8Ns}6(F1G@jo=9L!?5~i`k4=M?&6Bg zcJON?B|fa6#w+1G{zc4$(%awUjSU?*pVkN`@?Z0%@K?f546KgLsrpJDiok2L*ld`H zgaP-FGU-6AY^a>#UYJw;(QMgotJ>Q1R%1Xm3HDQ_)P83XW5gq`UNoKqQe62q&F-7g+>pHA>gEmI_k_#N?bR z6AKvOWyqAd`OM5rDNqgJeet>Wj}XC1?l2MMC0YDI(V`bis28k5^V|Fo`MJO&NBu}M z38O5kCf9}>pBSN(ixX+_e<#d#-Z=DGhoEIK$qGZ4PD>Q1<(J|a<*W_R+Ltg7roS=G z#}G;%|Jil+xz=efL-iUNnI5`2Y8wpFx^wr56+m~1MEr^T+)I`(%kO^*p{>TqUaD~d03X4!kDXRro&EjHCe#B52hh8-ScU4PK9YSCN^gAU^ac(Yhe0--qZudK&rZ z1`))rClVB)p!-tkT1f=QHSY3uI@dy7`d(&opwyb@dy}|_%jr!p$bd|btfHJHcpZA! zS=UMTR8{hP7|3F?97b<>ke@?#b4~p!XLS%@{@8tsC+=q=yt`*RnH(4NQJ*6XacI$E zTB;^7aE)|BJ>nQS+ha7ne6ieLx}3F7v}{7-?#9xQ+ytFoM=p9mHnl~o&YLNPm`8kU z^dM(K{!sp{6=k z_9F{EBnDwbtObNuFh4IpNan@|D=YA~mk)B|g6E<@9k>E5%ZNAyFm9By+XvbcHt=M7 z`^SZSN6T4u;t=Ub{s6LOqicgBymuj^@5DYTY#x%Z5z!gRUv6&_L&^1a9v!wfv5vCB z3b7)y05;sP8f94aYF$AY&PgnITN(?Xml#IUcD_Hrbz2eA)*jyXc3`Sd`Sw1m~jq% z)LsW3sD#@CZP(HmE4ycZK)}Z2Mm>phAB+H>VX~KVP9j^(D}tdzjwQ2B0r8X8sY!*6 zKsp1C5T{l=+Q)w;{hcP8uYrpE7x!p@VrFenZRXzXYa40Q&R7MmUsHVjLLBF;`tWQH z=WGT=Snbn9;r@m}K`-=fgPqns7|ubD_@z~uLe z0EUj2{3jY_6%DpsTz7=PlwqvS&9y-2dbwux$Qg?(9uzgmQoy~#F~Xzl`ZqexnSaZ9 zxGxia4HDe%(Zf-8Gn$*?celOF(NrAJTrFCjkVIKc8{O(=6&OWoroNOm?pSq-M0Qx65 zH3WTU_~wh8j%j`FQmht5JWyFdSz&IB78$VFeeC-lEDdO%KuyP?ho8*GPQFNH_Z?L$ z2NeG`D1md=!}q{_xD6}fV7tzzjHIP~htY&oj^f0m+;beeq^50BZOsUjzq z|ANT$k+CZ3(iz*+kr%CLQt5gB@&@_={vd08 z_wn9K-3yXl0KCPTwp&hDQY0w9zCU~+`c!_#$+6(nB6-nTpiT~M4oJX z#cj?u1vFMY%ei|H$NxbLb;v}DOua2?rD=6*g76|IxwPqMZ0*PM91BwI^SFAHiGoP8 z{E|1{l#VPzKUs(27-b@oZbre39@KuUMcy0^2a4Az0zT#J1N5kMH%Oef$A-!qnjC^+ z5C%c2gbvan`Uung{ZA4Dm%i>hYloo2sRwqpE;lbP@7k%GqP=We{iaqk$Ofi1Hhjxz z)0F1B)WlYc1c%=8muQ0AnY;M#BPN`&pyV19a6$G~wQsOySJEYA*ImCvGSE4)QnC3* zC+xU7C)PFvQQX8m%vcjZX(2iJE+QLR888@ZUC2=y+R|-)xnG*0Dfds=(tWKT5LGE} zXlG_$zf~0lqOxb!7-0ee!}$2p?XKgPU44DU`<~72i@2`7g9vGffK14ELk>&~OTW7VZpRmk6avB_8jCs&n!cd}o zdnpg;sY=j6A7ip-`)3eVJKxIgWL;w6r*9nawYsjTsp(lbG`1>$uR18$xZhkoH$art z&Kz0AX^4iMeQz@9^d~Ri#`0896NBM4;U@aMS2-B2DL*|zb)|_9RQ}e8z@uRl2#ttW{zND#>$ouUB)^OzEu~^LDE8EPv)7m>N zMVds|0p>eqk?@R>?5~4f3iTi@OBj4>F)xCv;-#;1mDn*5w_c4&j7R|```;sDW7=(s zYmDO>H(f+*45Hin3zzzcgozzs;pR|&WR^vW1Y&9fraM#h1=GRp&za8{B1G=n3I~U| zj*3XDDWivkx}@A>pk(5OuRTQ);pycub=Rf7xSAsgDS}C7yF&|6S}8=c{MnOP9!%~` zD_+GHQ_XO`JS{NVBplKRU>!V%X!iQ~mIjG0e7|%4F6YcMZ%mf4xWITWv5GzLs%vfj zw9$U_1*0n|h;5oyANq!!b9@ zdG>|(tSz~8H3ZM1%3%RpgWi(@Rvz*TWMkK53KCxEs?Lh5dIZ!22`sl0s!` z{NU}C&<-0BC9cNuP}E;5UE*0>?0tt*cXERl(D6Q6IxVG~)w0PlK@JDC>1O_PDNrE) zEkuAGed^PBQh^+Gw|p$Xo=$^ljiy+9sf$vZ(x`>+W?+I{NPi^5m5J+Qn_rPJ?V7~> z{?ML*?A^rK~WltkbNnLx}9$o`*6Qx zr91m3Hk(uE^N5j4Ycg!~qT5wvz?J;>z(klxLDU5Pjn7ai>dFXOpZUVB|V*>+|O>jz|&5uuYUjMk^qe&fH5uJOdec zb{zk49|vaRyZPiKiXD!cX(IT%PKAzqguE0)Lw16$&a`y4!DR>d)W(Bb8VuZCH?KtJZn6*jd2Q0OK|rtmmT)>@r?;~*Og4YJ7~0K8fhO9=xhh?`3(jb^-= zn(l2D>FdJdzHk&+x)JH-B#5EK`dB@SE8~n0A%YBIAO;&#c=S68Z%+)$GJu1Vwa-aUKm0wpgF% z8uakqZPQU0SVc#apT<8HOW3kgc)3du`1ahr!JFPS!AmCI_6;CzL#x{X;<#gd-W_Hl zQS5BW3D81jw*}OHrThU&FbqTjf>2;40gXqt`fDLewqGc(#>9ywZx$(t5~*#e{a+6t zYh2Z5s$iFI%KFuRC9@#CQ32&JXz#FzLjR+KLtI;WH!h`bfCq?)(HIot5(KN$Eh+f; z$$_`4G8;9~5|F??gH$eawXM?Aa8n`sHK){Yap$g*hvM)gh*=p>^Kuf@^(pkce%8op zmrq}msk>#xMfwP2;KS;ZBt5mSw8pz>+XTgU;u3GzifUAT*f)TeR$?68*?Q6dEZYa+OJvypyR zA8LgGy+5!ygJC`o0Q*k2HIv1E+%tI$#WA*^5gTD4>)(emTV!gkSlfX{GCfq(w)u2Ii zR4LmbU>U)x(^OQpg+^?N0OL6PnwDlrJ^uq`2%}MyMs2l`6@3E>ajy zk8?r6r47?At-dTNvTL2-m5M{XQLJc10%uIBpAmj#MYLR=3Yg$TvG!wD3{0OEMD*&F zggp^@eC>zaN?GhVME$5UD_Y(8_7MP0ua>-$x3)h!p?n4R&@VfiL$WuHEH7PXMN=`$ zFQY`n%6@{0Tsw-gTeTwE?S<2B2{>b)%<#No0o(@l_DJRP+FSb-XhnF9GZiW#$(GGx zT^QYE=i3wEdz?qrScKXvT9UM!B`H-7pa0zo&x zj}FYVgO&Qr_N3*bj`TlomWky9xwn=1Dh_beb)9n8eSHACXBS?LVTpSoz@H)dn7Bwo znmm=YlmABBpy5R=sI4;inlUVxYAB!N#i`l)h_;Df-eT&auSdP=lLiMJ0B#tUq}!8O zbC@IMXCikuf*{{=`c;q_-#4~#nIreJL*Fkjo+fUAs1>}m8a><6>5SC9Ea}o}dvY;t zOxqIo5VoZtN~^w1ckvY4nY)lq6QEk@&hl!&;(G%JCfW+Z#_P)K zKAvYid^P z*DRX|ztbjhz?S~rD|51egn^s|uKSX~9c!(kdsA6XxW6(fpwpQeTzzF<3=`*>^TW(u zyduDFV;6y>EgO&WmE;h0vhdyqcWb>?XLOz~UmNQpmIVmg*nfe5Chk^rR6FJTu;rG? zc&>a$`H^sEF{s)$b|DC*PZC<6F!6jCN;HVE8x=Zc)fDQ99nHJiU{4n${~EOAquS{< zH{@yFvQ_0zn3=v=n}hPjj>eU|J;I16yApWf#Z?BSBNrTE?!Zf0U;0MX4>?ci_CSKJ zY-5M*d^@IAQStMrD*wTn%1=pnNszMhW5BJFd)L{H|g zRuCJrXrSGMZ>ux8XIHu3%q=_;UP%`0w;l)3}k z5R!HgcQYL22V@(+sC|~k@_+6dc^*|K((1dH9p;Xe+}2rd0YHeVJbVC~0-yJu#e z4F3+6Fi)I_N}W^LPaJ9OyX)Q#Mdh+6kTi(z`mB@|Ugi5n)6w$|1Y;kmkd&7~KYcNL zy9DHIH4j&mekEU-Jev$7Zu;bFGM=U@ogLPugBEFdS)hROt?%Frpd0ATmgAZnFbPpv zC;i6UvJ#S^3%J|!ih9jigI}?Ww69wpDbFfUm5!>XJKU{?nzfy*AF)On>>==4iHjStZtQ} z%$q%LMH?<$*IJ%%Cw=|K1mL+zy=Z1xaJMh{!+FXfSr;(Lez=P`S&bo%aD7cKWca&B zM0O;K@e?gzy%(;D1CJO7wA!7mE~shX-abigdKD>W8Onre+GSn>%GL6h5>4z^N98QB zO}>9G*XrbsFx6tXXzG5$DJVHB+b1A%zyp7SEZj|d&6UkTRE*_C^R&Cu;pJv30b-kU zpQTqHlx@V@RPmLh7vc?8y-GDZDf&1YP*}`>fB>Wb)1+i#YN`qTza?w^%97x0&Eip# z%1-IixMZU{G}(k!3}kLi<75`?@4gT5D4X}@si9kydYgE;TA6q2W)DVMD?+(`8C5`e zI-t8>bxT8;QX4jQWK?dPkl1WADj63?;*y}{zSEq`}c>`7=A81V-Qcs)n)gJ`1$(k}r`Gb$%3nP~s zLx3?4z*w|w+0l41=Sve@n-$v2ZX^G_I0{#(>kCiIg9^<$H<_&L6|epCn!&s9^ia7R z&qJ4+_pk{-u${%))I(Wj`M=gSZ%}~F7dn^5`8m2@RPx7w!6rBY!Ha|EeT5B~dQ{xq zD51%!{yOSLo12hMeQ!(+IdO|Bh4B_yzRqPP>sw##rng3<)x5S2WpI-oYM(6m`cE%_ zqKDZgRTtmy4bl^!Ya8#S%NLF zzMUqOSrGJhU!9WJS}osDCi@QZCQ9z*HU5fjdZDyB|5dIZMDyY}>peGTT}Yx+tT${0 zt6A2+^a(jE*q(?C!=n&TX4tmdl5*p{UpJu0H=7|ZF-Co)q}8Z==_g_|+k@;5Nw+_O z+jvi+fJyKz_BF4eNMu&D`9=mDtALEPZI>lw?#!Tq{jUW{g>Mca9G;zoS5l7W1Fh;! zX)0U`DYIAECz2-b+})dJ_D|WXZ8hmE>(jerN~r39JFvZuRjXNzSbN z$VZZ$OPZ$ty{9CLXfu)BwJFn^OcP*|Z&%@}9v6ix$?&4*EE=6PkPpiwa1Cv+p}@|@ zm1=6N*OJi(OO>s0tQpduCvGlF{HMgNGmee(bKo&=YX@8I!+X=~nRriDIUU$OM6&1X ze1ZH_y53Z3R$;|pe#C>_Prw`f{}l5Pp2zP%HK5P zc!inaiaNnWv6-kQ$ zU}sW*?3)g2(IL0&^-K`|iW6x1uDJdY=(ELR-+Ax zs6FIDF^cE^Kro77jjNQuJWvo}@zZ{Mm9x=QzJNs?OeKc&1Sk0pwcxW8Gz=5q=ZaFV zPOZ1wC{dyE9_yD2wsb5yMATxjd-oteCc!riCz3z!h~gKiJh0s&s=$DS?#`^qCUx)z z_YP2hAAjH?vf)c!lR92a4H1457q=W0-^d1Q*YY`D?gEM6Q(UYT-+{_WDk4j*6fsqH z-{Q&BMq>HH=r=zN-wQHFD#+~d!0B;ox054MV8Ay|%D>cz2SRsU&b zxi49y2mky|j*Zb3>6A_kMd4}QN1g_rZt(06+~d4?f$(YT>lI}=JBd)EL0P~#L{C@| z!OwTKw``F{bbW{8vsGQi<)T}F{FS;KndnK`A=+qDbM|B1*vn54I%!REzCFzrEB7dR) z)~Et79%@DYkcwm?UnT=q+LIknlk+Zk4J#-S%3BHf*9PK|6ucjXT zOj^D={d>~UQ_E&7uKI32`3k|SD_n2AQCST)Y@&NyBubrVd8Ni61@EVylVFjbEE(1v zx#^dCTkqVDsMzE$(`joq_{%(Qg}zwa{fkKt2zbuYO;VLBy1109XdD`sICtaj(I9uNEE#{S7lq+mC$$?6U;Joe93FPJIV8^VlXh#= z`d1_-;Tc^o^u{HzISow8-Y?RpY3{RfV4Kwil!Y45YMj=hmsVXGx4?ZbJ@;$Z8=Z}fI z9t`O!*TlS5=JTW0k1m#7hE75{H<;XpPl>MxQRM1t?WZbJzf8wE9X)GeL2kCrhq?iE z-q)%MCuoB;{0*G?gBvR1d#aK(~L#t_yzHYJq#+0LlwCqHPt z-@euQdjd233;mqG-_C$pw#8Js`TME!2tH#h$Xk@fZdUKKW-Zox2_%eiYc*~q%5>Rv zEA+Nq@?GoN%9?+OB;%2r%OytByXB+aV(*DUecAm)Rhue}Ad5AdySEp{V$b`Y<1mRS zYx?)Eq+T+)Cw71u=$mQ!<~sBEzJOyQD@?7Sz>oU5!x~E3w-*lXGhpu7ZkNerK0n4X zdPw_3&_;^fcG(62aBisGqDqeP{*DHtQy=Vx3vp5{z1%yOyknPRi_D-xKlA(rI@g4` zrl0mTZ46lTQKT+qL)LLNbH>5}!wVfNU5SV*yaZCd?++QOpQ|kI+XuJ5#0~}TmaE$w zjcP8LSvR@T)h4Nm7YBmkzxVu3yOp6sPuWiy8?O&79Inxi?5|Yxm+4L2kA_DOFlI=l z`e)b7@b>S*jVNuAHI=OwutM9_kqiq<7p`r4NnnN)Zf*yHM-ELG8{BH5gFOOSdD*=e zM{TxdA{vir4uvfLwudi&I+s~rn>y1sXX)kiK7()lYH4ZzxhX3f*tXo-xn0|iREP5&~iJ*q|1}?UPDFR zr9bWpQ@WwZxMY++O+~29rG-7LMWa^0>H@Dw_M`u|!hK^v9^aX<8&E<%Q z9lK;CfgZ!bl}V*{=9J!7`{>e7t%?$*s%5jjWyv+4wJ68NikkJ%xCwP0XoB>Fv;Bb-74oO_Su1t6w@nLzb|#IOXHcZXmn^1F!!Mv&(`&|I*ZNdHhCRe zXfE3|Dp%5g|DM;68x|q=&eB}(2Hm!RCw|s}(VR)$S4gzB$*)cCR=UQ`r75s3k~ND=ZtgsykolcT9-)vIfx~QsX~bD}1uJ zAl8wS+s0;h(C#}(p}n^j>d8{_eHS^mOp0NPKe}_ZYI%J+1o^kewutq#fHg99^v+pX zMl0)0p~H>)3bfNt>aqi8ZaG6?n1BNdk_zXA&yYGQ%cP6? z-hm!Aqg;KB;l){I=5*#}-+ZyooT)Z8>{u4HR-MxBSm9umwf+<6?RKQgq_Lg7M=tmt ziBlCTz=4&?hnF{bZ`xA{-b=wFHRAO!{6nXfW$)nS+OGh8ik7DtN3_2Lu-=Ktm^0>V zIuw5$NV-F(pzA@0y?->uv;RuD50)UdYvv$m9__y1Og9z%Htn5NPQ6!PhHiFR_sp^y zld3*r)G`Qd$ZsZe4m|zJ3wV7lxXN%kd7{>Hi%s$AL|J`EXTU-)V&SN2vT1j%*9XVy z?S;IXPq^ev5Xce&$^>s+V_Zo4vwe?vNG_`~q*1DTBL#|Lw=I!NXoj!V2Byo`T~00D zUZ~4?!ZJFSX&hgMhVX>=%fQ!tyOGwvE2|%_S97iXLfBx)-VT%4waup!2@vla-xJd{ zl3VPbhn>?=&OPk^W6^gYm>czABz?2`HnGM)Vb)G8|Dv{mKdxL7z&d*dN+NidpRht} zqdg7Z5tJZ=VC@v1PR!^;Q59iIxwZE{FEWE7#?;b@w$mA2BCxWzeKT18x{dee3*Jve zRXlgcI87V6M!>S$n317~)gpTUi+sRGbyYblqoHbZ~ zVGRgn`0eY%e5bU6hNKU^mYE6Nm83Cx&%C{UNSIK#>?S~q)6hsNgYtzokx5 zIlf|&_D9zR=zWr?NM^w=hINC&_xyyCRuys7vK2bVPV z1BM7cwMd7>20vOXPuVd=iI-OTXdj*iD(ac)&bN<&Xb-&ksYJ;VzPBxq|!`Us+98{rX% zGVAJRt&J?MC8Fn2_{8n|5%o{VV!htrO)F30SqyuBF}ntFXvQnhYA6^_7wsm&7^D_- z+qW)DwfA_(7la4!DDL<2LaXRlh7zw;8o)NM= zSYkmS8l;&AMvEPkQ5}JHOr^ABm0`Gsr&-))Aw_I?HQ=qd&6aHLhW66uMY_?amRaL% zuljPJ{ViPLz5Fry!b=I<8|l-#>oR--t*-pC)f3q`VW|V4Z^22RC41)RzV`{>9#M2Q{|)me{i7F5J7$km(`ZAdO8cRd3+Ylc!%x*d6t26 z&n1P&`q;u6vh^Z^*AZ=pzo9|#&e2*3+aMz)n1E;i4Feio@yTMI`RSZXM`+C6E=ozD zl@7Etun`4uE~g-AANm#w(eROYg+Ze|?D4BX6HQR#E+fx0STD9(6SG)G}#^>g5!~rtAV; zztQPM=l8OTmRruRoXAYRZb;j?OF=A_=PhAtb-DJYrxYb~=gw5FO%8ht*m0ov#0{;5 zU6U%S25rDSusf&bbK0al_vxaoy(5^`T#D%XP`NhvT%gtOTpTR+flpQHK$NGx`N;LX z^|4n_B(YCk58C6NU30BM4w7yk2!jH%5|d5f3N*v1^sUN17_G=^p&O6s+O=X(l2E(@M?A(=|?Zkx?cp5||IcJ<6@>hx0y$oEhC69H!cvJgI*WwWk zhO7KGF6)(6s)Nsl{FN|9Ao3B$46!XYu`RPd+&K40u9UCbpK&9rMfIhn1}-gw7)=*x zlM`X7cSnj}!)>a`x6}@@o@cyR)^6>*As~gqd=4La(zaiwulr6Z3ei~ad|S;#90LdF zm54#eXZWv+(Zx$#-H$Jj%H<#)y$|p48oig?1Pnab)V@F{n4u=O_!^<7-nrF(UEM#? zEGmbAOmJ9jCo`xsk$85yy`Eb`TfQc@%Fs7lI@E)+Q{VHukgk@*R;5~^8>ipc>qRkJ zIFl&EUr0zOM#NkoV?QC=_+AR!X8wnEi?W7mM`zKB+Kqwb^_sPj4P-C0Csyays;IpF zz8bNP(4~p&?gM$PLV=DuYd;X-d{rVP+KMubyI=ofU(M9Mg!)9qx08Df1?dNw1>Z)n z;tO|v$u*1H0Vv50(k*m4=(Y709$qII5kIhMGwb~=J2i!-q7kr00~zgl zv3>x%wOPLIhg7Gh)UEX{8&AV~Yyv2i2ONekZ-nsQJF-f_nV7L)-(U0jk}`=uPk5+0 z%`#n!OKOG*5raY>>`b9@DVzHG){l}mnr%=efDqK#E}2_ILq_n3T`=X?UjRU+mFD&@Dbc*S@8VBDbm_@U7oPf8?*&d7neH)obX<7 zKG&T5Q@#KB-GTUd@b}TBTR&f**n$rfY_7dvT=X1}TJnjp;^{t4tkk6|8q9&32Hh04x$il;lBgLKJT-jUvR#RIS zM#k!hJ;cFjBS@YWDTuRUl1MlGi%;?*oFwJ+@u|=IjT^9-%3Z<<#9@1xo_(trGNS4O z0gSehC1(qEv>n@$W2A-MIr|tpy6g4KvC0~`lpT69O=OjZ=($SR`UmtF?;KRsraTthaXDI+ePKXvNg02dChm!~~9 zx@%>dvFr+_arnMSV@y*JC{){#O1tBQYh?$jeg&bZ!L0zob0y-+7|OF*Mjs_v$ZWS5 zcX{*z+bk9X`%@70-IUGjDXqU&u!~l&&92pn1yfpt?rl1qds|Yr|2DF7^&`A$t0U62 z+2O^A%jcSn;`70SfjI{|^*~Mz(e=(+Zoli!bIwj4 zqaa(e>8NO`U-AH2D5+l083$x+17M6du+{fwN>9-Adp4?qo1&7aV%(}?)Q6z_dFpMQ z;a^Kvg$(CEV%*g!ipy(^c`5R@e#+xGBd8**ZkO^HoO>r$ju4pDx}B<>iO`D-eW zPXF)qOmH_W=(s*?$bPq58(6|)ec=~&u)a-WUadUl1&5#JW_GFY(xFO#&R_(0i#wk5 zr0A!6Baj`~&<}8y^{6|z?wok$NJ4T}4f3T7-0xkrEC}{w*sJY46y1IUPlYNEU{M|K z%+&NcDgCWMr3uV!O;@-pdfHeF`Qf2z8hFSR*!C|t?8Va&v29`QZlR7X$A0Wfrv56u zsS7>oX=@xz+5zm4n{n#YOa0Yxp|t5!V!Hn$+SL^GrFj2O3vAi?Zh_5~102AbVpV(^ zKW2R-f)57n_Q)YdD;Y}?@R_h3K^ zJdSv6hyy||f9yO|b9c)61YOA;y16CT9xcKGy$|m?)Pang0(-uKbKu*cAiDHIYYNQ% z`KLQy?dFla$eHjDBI=;u2j6eqynnu9QrleDq~ecrYAAEGXc0@p5>o-x=F}DPh@7`H zsZC4jQkgJiK&qohrg=V z83zBfZ%*)4a+elgGXqz-G_^Wqv3w-mgR)&*)Iy-^+>qY2hN%Q{n5-7cNvu5{e8~k& zeQ4o=tIDfRnJ>RCU(Q-CE)pSf>VYvQQ=T;P*jWPCec%VRl?0V=L6HcN>Ca+dwyKHl z2f+U1@c(^jCNV`ccuILauUTH5;z5CGk4rNprZ$Euz<&?y74Zu`v5WW#6RQ20qUR~G zL$-NePF~(LT>c&So{loB!An% z!X{CuRBC5mqOTGT5A6x~#?6G}8?1n)s+wmdvLV9;A8qp`C{ii2{Iy2T_olu&-7hbv zs}?M42fr17`u$yirOFZuY#&&OsCQ)ZC!IsaWYOg9BaYAIco|ja?cCl1w_p=f` zC{T$2Br^pFV*!H$N_2m$UJR!4aK-bb3q7%9+la^qwyc5;8^TK+*=1^}tqDt19K@-B zE~SvNVU@tX9&q8jsUH*eztP8wm0Q46w|J~Om`E~w$b;aZ<@dn{F~=oJ2+m?rc! zGC#kk{c)n2?c=4(YDmT9e*+v7)-T)MBD1b3h6|pEQMzKPTnI*|L#-WhT?TUW>SS2e zWz6T5i=f2881c_zIxy1LUwz^B3cf6|Hla4;Y{!}gD{D(Dtax<42EvdTq;N^I8aTUV z1nmd2U7}PDh`o+f0Ac==qg-ekweQbNEUk@!r5$^jGuiU*XQYw)ogEJ_-S=v3qf9tG z>+h0SN_Z?18A6AvPAGFn9$bypCK0)N$Ee)rPJO)CyZPES*kw7u_pqKtL(z9xPFj5! zcv<(HvdnBk2E2Zg1;0IU3|5%rPcbsUw^x4~=Bd9qXOr(X$|S&BauEsN?FAhy7m@@MVizUw{%`W-EE)|)Y&UL2E~=IP_1 zaI(~Qy`x-fou56+FSRcW_y|76A6-BKkvGk2Tn|4~Jaih>pNS^!`>wcM-yhc ze))>kyTC6pSOHHyuiNt=>5K6uMl0pPQB7pdEm}+WA-kch*X3&>q*X<}9b5(Y{f4^M zV0&{X3;Mk&;o8-$zzOR!YV)39Upt1eY!wMGcP&~=`yPYC{Lie2Qe$ez`ukT%Q<^7i zem2BOGCm8dvA3Si>t0aB__fno<-`gbARPl%^om>ud*joN2Nvh~iH@*MGB?NB4bO7M zU+pO#Inh_hlla#rffFod^I-SR%5-zJA0DCfdC6M#rr6>>z262=k|~y2YBnv@4$?0m)@r? zfObreJjWx8PAo|I!E*QEUczNM69V>}I9b|;zlr0=oJED5j`%b&nm z6~NIfc%ExfE8tRGu-?7PwSo3Wr`iOhnjd%I_SDMt1bUiT)blCE57vy*lUVjLW=i}A zv>V_TKFlGd0VV0jQd#q`Fckyze`T==p_z*EMqO z|Ml6C-(L%vZwiiAc<}%6sSp7CRLFc&*uZkZ8B1?kPhR9kFocSIMkd*~`7-VE(kFbV zt$jbVih+;JL5!t^w*b{|Nsm^-9TM>k_h&2~vakPR1EcN%7=^(vScnPs?(e>*jUr&e d|D7KYfT8s3Xf0m#a{&BvS-*K*jUzqr{{iXv=D+{| literal 21325 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 MPoKpV?yThh2R9SzWB>pF diff --git a/scripts/FS.gd b/scripts/FS.gd index bb8f0b0..c16846f 100644 --- a/scripts/FS.gd +++ b/scripts/FS.gd @@ -108,7 +108,8 @@ class FGOS: var crc = crc32(packet) packet.resize(packet.size() + 4) packet.encode_u32(packet.size() - 4, crc) - Network.command_stack.append(packet) + #Network.command_stack.append(packet) + Network.command_stack_2.append(packet) func _parse(rx_data: PackedByteArray): diff --git a/scripts/PRD.gd b/scripts/PRD.gd index a8afb7e..c27debc 100644 --- a/scripts/PRD.gd +++ b/scripts/PRD.gd @@ -137,6 +137,8 @@ func _ready() -> void: Network.connect('yau_status_line', Callable(self, '_on_yau_status')) Network.connect('yau_receive', Callable(self, '_on_data_received')) Network.connect('yau_read_isa', Callable(self, '_on_read_isa')) + Network.connect('port_fs_opened_1', _on_port_changed_fs_1.bind(Color.GREEN)) + Network.connect('port_fs_opened_2', _on_port_changed_fs_2.bind(Color.GREEN)) Network.connect('data_from_fs_1', _on_data_fs_1) Network.connect('data_from_fs_2', _on_data_fs_2) @@ -418,7 +420,8 @@ func on_btn_select(intem_from_sector: int) -> void: Network.on_command_change_device(meta) flag_mode = meta[2] draw_control_panel_prd(flag_mode) - _on_start_fs_1() + #_on_start_fs_1() + _on_start_fs_2() func _on_zapret1(toggled_on: bool) -> void: @@ -519,7 +522,12 @@ func _on_read_isa_pressed() -> void: func set_bits(v, a, m): return (~m) & v | a & m + ## 1 ФС +func _on_port_changed_fs_1(port_name: String, _color: Color) -> void: + $TabContainer/PRD/body_grid/litera_2_4_6/fs_control.set_node_text(1, 1, port_name) + + func _on_start_fs_1(): Network.start_work_fs() @@ -538,18 +546,21 @@ func _on_set_att_1(att: String): ## 2 ФС +func _on_port_changed_fs_2(port_name: String, _color: Color) -> void: + $TabContainer/PRD/body_grid/litera_3_5_7/fs_control.set_node_text(1, 1, port_name) + func _on_start_fs_2(): - Network.start_work_fs() + Network.start_work_fs_2() func _on_get_status_2(toggled_btn): var inverted_state = not toggled_btn - Network.get_fs_gen_status(inverted_state) + Network.get_fs_gen_status_2(inverted_state) func _on_set_ferq_2(freq: String): - Network.set_fs_ferq_carrier(int(freq) * 1_000_000) + Network.set_fs_ferq_carrier_2(int(freq) * 1_000_000) func _on_set_att_2(att: String): - Network.set_fs_attenuation(float(att)) + Network.set_fs_attenuation_2(float(att)) diff --git a/scripts/modul_fs.gd b/scripts/modul_fs.gd index afa66c2..61677ed 100644 --- a/scripts/modul_fs.gd +++ b/scripts/modul_fs.gd @@ -13,8 +13,9 @@ func _process(_delta: float) -> void: func _enter_tree() -> void: + pass # Подключаем сигналы к методам - Network.connect('data_send', _on_data_send) + #Network.connect('data_send', _on_data_send) #Network.connect('data_from_fs_1', _on_data_received) #Network.connect('port_opened', _on_port_changed.bind(Color.GREEN)) #Network.connect('port_closed', _on_port_changed.bind(Color.GRAY)) diff --git a/scripts/network.gd b/scripts/network.gd index f435940..912ae9d 100644 --- a/scripts/network.gd +++ b/scripts/network.gd @@ -2,7 +2,8 @@ extends Node # ЯУ-07 Блок var unit = Yau07.YaU07.new('ЯУ-07Б') -var unit_fs_1 = Fs.FGOS.new() +#var unit_fs_1 = Fs.FGOS.new() +var unit_fs_2 = Fs.FGOS.new() var soc_unicast: Socket var soc_brodcast: Socket var ip_address_yau: String = Constants.ADDRESSES[0][1] @@ -15,21 +16,30 @@ var state = Constants.STATE.WAIT var send_array: Array = [] # ФС Блок -var ip_fs_1: String = Constants.ADDRESSES[0][4] -var command_stack: Array -var state_fs = Constants.STATE.IDLE var client_fs_1: StreamPeer +var ip_fs_1: String = Constants.ADDRESSES[0][4] var peerstream_fs_1: PacketPeer +var state_fs = Constants.STATE.IDLE +var command_stack: Array + +## 2 ФС +var client_fs_2: StreamPeer +var ip_fs_2: String = Constants.ADDRESSES[0][5] +var peerstream_fs_2: PacketPeer +var state_fs_2 = Constants.STATE.IDLE +var command_stack_2: Array signal yau_status_line(_status) ## Вызывается когда меняется состояние связи с ячейкой signal yau_receive(_data_from_yau) signal yau_read_isa(_unit_isa_ports) -signal data_send() +#signal data_send() +#signal data_send_2() signal data_from_fs_1(data:PackedByteArray) signal data_from_fs_2(data:PackedByteArray) -signal port_opened(port_name: String) +signal port_fs_opened_1(port_name: String) +signal port_fs_opened_2(port_name: String) signal port_closed(port_name: String) signal port_error(error_str: String) @@ -60,24 +70,24 @@ func poll_receive_yau07(sock: Socket) -> bool: ## Приёмник return false -func poll_receive_fs(client: StreamPeerTCP): +func poll_receive_fs(client: StreamPeerTCP, peerstream: PacketPeer, ip_fs: String): client.poll() - var peer = peerstream_fs_1.get_stream_peer() + var peer = peerstream.get_stream_peer() # Проверяем, существует ли соединение if not peer: - emit_signal("port_error", ip_fs_1) + emit_signal("port_error", ip_fs) return # Проверяем состояние подключения if client.get_status() != StreamPeerTCP.STATUS_CONNECTED: - emit_signal("port_closed", ip_fs_1) + emit_signal("port_closed", ip_fs) return if peer.get_available_bytes() > 0: var rx_data: PackedByteArray rx_data.append_array(peer.get_data(peer.get_available_bytes())[1]) - #emit_signal("data_from_fs_1", rx_data) - emit_signal("data_from_fs_2", rx_data) - emit_signal("port_opened", ip_fs_1) + emit_signal("data_from_fs_1", rx_data) + #emit_signal("data_from_fs_2", rx_data) + emit_signal("port_fs_opened_1", ip_fs) if state_fs == Constants.STATE.SEND: state_fs = Constants.STATE.DONE @@ -96,7 +106,8 @@ func _ready() -> void: unit.connect('line_changed', Callable(self, 'on_line_changed')) unit.connect('command_fail', Callable(self, 'on_command_fail')) - connect_fs() + #connect_fs_1() + connect_fs_2() read_port_isa([0x106, 0x108]) @@ -106,13 +117,16 @@ func _process(delta: float) -> void: last_update_time_fs += delta if client_fs_1: - poll_receive_fs(client_fs_1) + poll_receive_fs(client_fs_1, peerstream_fs_1, ip_fs_1) + if client_fs_2: + poll_receive_fs_2(client_fs_2, peerstream_fs_2, ip_fs_2) poll_receive_yau07(soc_brodcast) poll_receive_yau07(soc_unicast) state_machine_yau07() - state_machine_fs() + #state_machine_fs() + state_machine_fs_2() match unit.process(delta): Error.OK: soc_unicast.send_to(ip_address_yau, ip_port_yau, unit.tx_data.slice(0, unit.tx_len)) @@ -169,9 +183,10 @@ func on_command_change_device(meta_device): ip_address_yau = meta_device[0] ip_port_yau = meta_device[1] ip_fs_1 = meta_device[3] - #ip_fs_2 = meta_device[4] + ip_fs_2 = meta_device[4] #ip_fs_3 = meta_device[5] - connect_fs() + #connect_fs_1() + connect_fs_2() func state_machine_fs(): @@ -180,12 +195,12 @@ func state_machine_fs(): if (state_fs == Constants.STATE.IDLE) or (state_fs == Constants.STATE.DONE): if command_stack: var pack: Array = command_stack.pop_front() - send_data(pack) + send_fs_data_1(pack) state_fs = Constants.STATE.SEND # Подключится к модулю ФС -func connect_fs(): +func connect_fs_1(): if client_fs_1: disconnect_fs(client_fs_1) @@ -199,7 +214,7 @@ func connect_fs(): # Отправить команду для ФС -func send_data(data_to_sand: PackedByteArray): +func send_fs_data_1(data_to_sand: PackedByteArray): if client_fs_1.get_status() == 2: var peer = peerstream_fs_1.get_stream_peer() if peer: @@ -213,25 +228,110 @@ func disconnect_fs(client_for_leave): state_fs = Constants.STATE.IDLE command_stack = [] - -func start_work_fs(): - unit_fs_1.start_session() - unit_fs_1.base_get_current_temp() +# +#func start_work_fs(): + #unit_fs_1.start_session() + #unit_fs_1.base_get_current_temp() +# +# +#func get_fs_gen_status(state_gen): + #unit_fs_1.set_gen_state(state_gen) + #unit_fs_1.get_gen_state() + #unit_fs_1.base_get_current_temp() +# +# +#func set_fs_ferq_carrier(freq: int): + #unit_fs_1.set_carrier(freq) + #unit_fs_1.base_get_current_temp() + #unit_fs_1.get_carrier() +# +# +#func set_fs_attenuation(attenuation: float): + #unit_fs_1.set_att_batch(attenuation) + #unit_fs_1.get_att_batch() + #unit_fs_1.base_get_current_temp() -func get_fs_gen_status(state_gen): - unit_fs_1.set_gen_state(state_gen) - unit_fs_1.get_gen_state() - unit_fs_1.base_get_current_temp() +## 2 ФС коннект +func connect_fs_2(): + if client_fs_2: + disconnect_fs_2(client_fs_2) + + client_fs_2 = StreamPeerTCP.new() + peerstream_fs_2 = PacketPeerStream.new() + var rc = client_fs_2.connect_to_host(ip_fs_2, Constants.PORT_FS) + if rc!= Error.OK: + print_debug('Port error %s' % ip_fs_2) + #emit_signal("port_error", ip_fs_2) + else: + peerstream_fs_2.set_stream_peer(client_fs_2) -func set_fs_ferq_carrier(freq: int): - unit_fs_1.set_carrier(freq) - unit_fs_1.base_get_current_temp() - unit_fs_1.get_carrier() +# Разорвать соединение с ФС +func disconnect_fs_2(client_for_leave): + client_for_leave.disconnect_from_host() + state_fs_2 = Constants.STATE.IDLE + command_stack_2 = [] + + +# Отправить команду для ФС +func send_fs_data_2(data_to_sand: PackedByteArray): + if client_fs_2.get_status() == 2: + var peer = peerstream_fs_2.get_stream_peer() + if peer: + peer.put_data(data_to_sand) + emit_signal("data_send_2") -func set_fs_attenuation(attenuation: float): - unit_fs_1.set_att_batch(attenuation) - unit_fs_1.get_att_batch() - unit_fs_1.base_get_current_temp() +func state_machine_fs_2(): + if client_fs_2: + ## State fs_2 machine + if (state_fs_2 == Constants.STATE.IDLE) or (state_fs_2 == Constants.STATE.DONE): + if command_stack_2: + var pack: Array = command_stack_2.pop_front() + send_fs_data_2(pack) + state_fs_2 = Constants.STATE.SEND + + +func poll_receive_fs_2(client: StreamPeerTCP, peerstream: PacketPeer, ip_fs: String): + client.poll() + var peer = peerstream.get_stream_peer() + # Проверяем, существует ли соединение + if not peer: + emit_signal("port_error", ip_fs) + return + # Проверяем состояние подключения + if client.get_status() != StreamPeerTCP.STATUS_CONNECTED: + emit_signal("port_closed", ip_fs) + return + + if peer.get_available_bytes() > 0: + var rx_data: PackedByteArray + rx_data.append_array(peer.get_data(peer.get_available_bytes())[1]) + emit_signal("data_from_fs_2", rx_data) + emit_signal("port_fs_opened_2", ip_fs) + if state_fs_2 == Constants.STATE.SEND: + state_fs_2 = Constants.STATE.DONE + + +func start_work_fs_2(): + unit_fs_2.start_session() + unit_fs_2.base_get_current_temp() + + +func get_fs_gen_status_2(state_gen): + unit_fs_2.set_gen_state(state_gen) + unit_fs_2.get_gen_state() + unit_fs_2.base_get_current_temp() + + +func set_fs_ferq_carrier_2(freq: int): + unit_fs_2.set_carrier(freq) + unit_fs_2.base_get_current_temp() + unit_fs_2.get_carrier() + + +func set_fs_attenuation_2(attenuation: float): + unit_fs_2.set_att_batch(attenuation) + unit_fs_2.get_att_batch() + unit_fs_2.base_get_current_temp() From 2f93972202ee252fb541d41e1127d687ebcbe1ea Mon Sep 17 00:00:00 2001 From: Maxim Date: Fri, 7 Feb 2025 01:06:50 +0300 Subject: [PATCH 4/6] modul fs 3 --- scripts/ems_g.gd | 2 ++ scripts/network.gd | 8 ++------ 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/scripts/ems_g.gd b/scripts/ems_g.gd index d6c68a2..9587824 100644 --- a/scripts/ems_g.gd +++ b/scripts/ems_g.gd @@ -151,6 +151,8 @@ func process_sockets_vert(blank: int, imp: int, count: int, col: int, parent_nod set_frame(CI_2_FS, frame_type) if i == 10: set_frame(get_specific_node(parent_node2, 4), frame_type) + var CI_3_FS = parent_node2.get_child(3).get_child(0).get_child(0).get_child(1).get_child(0).get_node2(1, 6).get_child(1) + set_frame(CI_3_FS, frame_type) func get_specific_node(parent_node2: Node, child_index: int)-> Node: diff --git a/scripts/network.gd b/scripts/network.gd index 912ae9d..69f7985 100644 --- a/scripts/network.gd +++ b/scripts/network.gd @@ -29,13 +29,11 @@ var peerstream_fs_2: PacketPeer var state_fs_2 = Constants.STATE.IDLE var command_stack_2: Array - +# Яу-07б signal yau_status_line(_status) ## Вызывается когда меняется состояние связи с ячейкой signal yau_receive(_data_from_yau) signal yau_read_isa(_unit_isa_ports) - -#signal data_send() -#signal data_send_2() +# ФС модуль signal data_from_fs_1(data:PackedByteArray) signal data_from_fs_2(data:PackedByteArray) signal port_fs_opened_1(port_name: String) @@ -44,7 +42,6 @@ signal port_closed(port_name: String) signal port_error(error_str: String) - ## Класс для отправки данных в сокет class Socket extends PacketPeerUDP: func send_to(addr: String, port: int, data: PackedByteArray): @@ -280,7 +277,6 @@ func send_fs_data_2(data_to_sand: PackedByteArray): var peer = peerstream_fs_2.get_stream_peer() if peer: peer.put_data(data_to_sand) - emit_signal("data_send_2") func state_machine_fs_2(): From c342115adf2b082adf92e5d9e8b8d4ad7ab08969 Mon Sep 17 00:00:00 2001 From: Maxim Date: Fri, 7 Feb 2025 04:14:27 +0300 Subject: [PATCH 5/6] module fs 4 --- PRD57EF.tmp | 1003 +++++++++++++++++++++++++++++++++++++++++++ scripts/FS.gd | 91 ++-- scripts/PRD.gd | 4 +- scripts/modul_fs.gd | 16 +- scripts/network.gd | 180 ++++---- 5 files changed, 1150 insertions(+), 144 deletions(-) create mode 100644 PRD57EF.tmp diff --git a/PRD57EF.tmp b/PRD57EF.tmp new file mode 100644 index 0000000..1bcb40f --- /dev/null +++ b/PRD57EF.tmp @@ -0,0 +1,1003 @@ +[gd_scene load_steps=50 format=3 uid="uid://cvor2jm4xk3ha"] + +[ext_resource type="Script" path="res://scripts/PRD.gd" id="1_v273n"] +[ext_resource type="Texture2D" uid="uid://cdxdluvyb5uei" path="res://table/on.png" id="2_dv7xx"] +[ext_resource type="Script" path="res://table/table.gd" id="2_vmbyo"] +[ext_resource type="Material" uid="uid://s6xe8igevnv2" path="res://Shaders/shader_edu.tres" id="3_3syd3"] +[ext_resource type="Texture2D" uid="uid://cfktmk2rowmul" path="res://table/off.png" id="3_qvuyu"] +[ext_resource type="Shader" path="res://Shaders/ray.gdshader" id="4_uy5o2"] +[ext_resource type="Texture2D" uid="uid://co8dxcd8eckjs" path="res://Web.png" id="5_i3nvb"] +[ext_resource type="Shader" path="res://ray_2.gdshader" id="8_12mng"] +[ext_resource type="Texture2D" uid="uid://cgtg4gbqnuxrc" path="res://nine-patch-round.png" id="9_0r2qk"] +[ext_resource type="Script" path="res://scripts/control_panel.gd" id="9_akagi"] +[ext_resource type="Script" path="res://scripts/ems_g.gd" id="9_g1wia"] +[ext_resource type="Shader" path="res://load.gdshader" id="10_lf1xh"] +[ext_resource type="PackedScene" uid="uid://bdb0bhfu7366l" path="res://kasseta-fs-kd.tscn" id="10_tdh2s"] +[ext_resource type="PackedScene" uid="uid://bnlkbbn7b4a3k" path="res://table/элемент-эмс.tscn" id="11_d60jk"] +[ext_resource type="PackedScene" uid="uid://p2suppildvq0" path="res://table/элемент-в.tscn" id="11_fg7ul"] +[ext_resource type="Script" path="res://scripts/modul_fs.gd" id="15_b4pr1"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_eib3t"] +bg_color = Color(0.223529, 0.168627, 0.223529, 1) +border_width_bottom = 6 +border_color = Color(0.228592, 0.173062, 0.22863, 1) +border_blend = true + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_o0too"] +bg_color = Color(0.223529, 0.168627, 0.223529, 1) +border_width_bottom = 6 +border_color = Color(0.339047, 0.26316, 0.339004, 1) +border_blend = true + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_gooip"] +bg_color = Color(0.143, 0.103, 0.143, 0.799) + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_lqhgx"] +bg_color = Color(0, 0, 0, 0.490196) + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_148rs"] +bg_color = Color(0.141176, 0.101961, 0.141176, 0.8) +border_width_bottom = 4 +border_color = Color(0.223529, 0.168627, 0.223529, 1) +border_blend = true +corner_radius_top_left = 2 +corner_radius_top_right = 2 +corner_radius_bottom_right = 2 +corner_radius_bottom_left = 2 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_ldbvf"] +bg_color = Color(0.141176, 0.101961, 0.141176, 0.8) + +[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_h8aei"] + +[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_d322q"] + +[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_8j02b"] + +[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_ls6vm"] + +[sub_resource type="Theme" id="Theme_k5ur4"] +Button/styles/focus = SubResource("StyleBoxFlat_eib3t") +Button/styles/hover = SubResource("StyleBoxFlat_o0too") +Button/styles/normal = SubResource("StyleBoxFlat_o0too") +Button/styles/pressed = SubResource("StyleBoxFlat_eib3t") +CheckButton/icons/checked = ExtResource("2_dv7xx") +CheckButton/icons/unchecked = ExtResource("3_qvuyu") +OptionButton/font_sizes/font_size = 17 +OptionButton/styles/focus = SubResource("StyleBoxFlat_gooip") +OptionButton/styles/hover = SubResource("StyleBoxFlat_lqhgx") +OptionButton/styles/normal = SubResource("StyleBoxFlat_148rs") +OptionButton/styles/pressed = SubResource("StyleBoxFlat_ldbvf") +TabContainer/styles/panel = SubResource("StyleBoxTexture_h8aei") +TabContainer/styles/tab_focus = SubResource("StyleBoxTexture_d322q") +TabContainer/styles/tab_selected = SubResource("StyleBoxTexture_8j02b") +TabContainer/styles/tabbar_background = SubResource("StyleBoxTexture_ls6vm") + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_pxarn"] +bg_color = Color(0.356863, 0.278431, 0.356863, 1) + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_p247y"] +bg_color = Color(0.356863, 0.278431, 0.356863, 1) + +[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_rh6pm"] + +[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_x11tp"] + +[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_mn8w2"] + +[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_21lc8"] + +[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_k08q3"] + +[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_dklg6"] + +[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_17le6"] + +[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_7u7p7"] + +[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_1as41"] + +[sub_resource type="PlaceholderTexture2D" id="PlaceholderTexture2D_723du"] +size = Vector2(1600, 1200) + +[sub_resource type="GDScript" id="GDScript_0sobq"] +script/source = "extends Sprite2D + +" + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_o7txs"] + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_dgiai"] +shader = ExtResource("4_uy5o2") +shader_parameter/color_signal = Color(0.588235, 0.466667, 0, 1) +shader_parameter/turn = 0.785 +shader_parameter/inner_radius = 0.32 + +[sub_resource type="Gradient" id="Gradient_ki0n7"] + +[sub_resource type="GradientTexture2D" id="GradientTexture2D_0pk2o"] +gradient = SubResource("Gradient_ki0n7") +fill_from = Vector2(0.474359, 0.5) +metadata/_snap_enabled = true + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_2pxu2"] +shader = ExtResource("8_12mng") +shader_parameter/color_signal = Color(0.588242, 0.466356, 0, 1) +shader_parameter/turn = 0.785 +shader_parameter/inner_radius = 0.32 + +[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_tn8m6"] + +[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_ooo4i"] + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_slcfo"] +shader = ExtResource("10_lf1xh") +shader_parameter/frequency = 5.0 +shader_parameter/amplitude = 600.0 +shader_parameter/speed = 5.0 +shader_parameter/direction = -1.0 +shader_parameter/color1 = Color(0, 0, 0, 1) +shader_parameter/color2 = Color(0.235, 0.18, 0.235, 1) +shader_parameter/color3 = Color(0.235, 0.18, 0.235, 0.5) +shader_parameter/color4 = Color(0, 0, 0, 0) +shader_parameter/opacity = 0.218 +shader_parameter/turn = 0.785 + +[sub_resource type="Theme" id="Theme_yblys"] +CheckBox/font_sizes/font_size = 14 + +[node name="Node2D" type="Node2D"] +script = ExtResource("1_v273n") + +[node name="Background" type="ColorRect" parent="."] +offset_right = 3025.0 +offset_bottom = 1060.0 +theme = SubResource("Theme_k5ur4") +color = Color(0.356863, 0.278431, 0.356863, 1) +metadata/_edit_lock_ = true + +[node name="side_panel" type="ColorRect" parent="Background"] +layout_mode = 0 +offset_right = 216.0 +offset_bottom = 988.0 +color = Color(0.586231, 0.481877, 0.585869, 1) + +[node name="select_prd" type="Button" parent="Background/side_panel"] +layout_mode = 0 +offset_top = 120.0 +offset_right = 216.0 +offset_bottom = 156.0 +focus_mode = 0 +mouse_default_cursor_shape = 2 +theme_override_font_sizes/font_size = 14 +theme_override_styles/pressed = SubResource("StyleBoxFlat_pxarn") +toggle_mode = true +button_pressed = true +text = "ПРД" + +[node name="select_control" type="Button" parent="Background/side_panel"] +layout_mode = 0 +offset_top = 160.0 +offset_right = 216.0 +offset_bottom = 196.0 +focus_mode = 0 +mouse_default_cursor_shape = 2 +theme_override_font_sizes/font_size = 14 +theme_override_styles/pressed = SubResource("StyleBoxFlat_p247y") +toggle_mode = true +text = "КОНТРОЛЬ" + +[node name="select_ems_g" type="Button" parent="Background/side_panel"] +layout_mode = 0 +offset_top = 200.0 +offset_right = 216.0 +offset_bottom = 236.0 +focus_mode = 0 +mouse_default_cursor_shape = 2 +theme_override_font_sizes/font_size = 14 +theme_override_styles/pressed = SubResource("StyleBoxFlat_p247y") +toggle_mode = true +text = "ЭМС Г" + +[node name="select_fs" type="Button" parent="Background/side_panel"] +layout_mode = 0 +offset_top = 241.0 +offset_right = 216.0 +offset_bottom = 277.0 +focus_mode = 0 +mouse_default_cursor_shape = 2 +theme_override_font_sizes/font_size = 14 +theme_override_styles/pressed = SubResource("StyleBoxFlat_p247y") +toggle_mode = true +text = "Модуль ФС" + +[node name="save_config" type="Button" parent="Background/side_panel"] +layout_mode = 0 +offset_top = 832.0 +offset_right = 216.0 +offset_bottom = 868.0 +focus_mode = 0 +mouse_default_cursor_shape = 2 +theme_override_font_sizes/font_size = 14 +theme_override_styles/pressed = SubResource("StyleBoxFlat_p247y") +text = "Сохранить" + +[node name="load_config" type="Button" parent="Background/side_panel"] +layout_mode = 0 +offset_top = 872.0 +offset_right = 216.0 +offset_bottom = 908.0 +focus_mode = 0 +mouse_default_cursor_shape = 2 +theme_override_font_sizes/font_size = 14 +theme_override_styles/pressed = SubResource("StyleBoxFlat_p247y") +text = "Загрузить" + +[node name="Litera_3_5_7" type="ColorRect" parent="Background"] +visible = false +layout_mode = 0 +offset_top = 48.0 +offset_right = 1941.0 +offset_bottom = 352.0 +color = Color(0.669446, 0.567301, 0.66881, 1) + +[node name="Litera_1" type="ColorRect" parent="Background"] +visible = false +layout_mode = 0 +offset_top = 359.0 +offset_right = 2182.0 +offset_bottom = 638.0 +color = Color(0.669446, 0.567301, 0.66881, 1) + +[node name="ISA" type="Label" parent="."] +offset_left = 225.0 +offset_top = 11.0 +offset_right = 409.0 +offset_bottom = 48.0 +autowrap_mode = 3 +metadata/_edit_lock_ = true + +[node name="read_isa" type="Button" parent="."] +offset_left = 85.0 +offset_top = 7.0 +offset_right = 210.0 +offset_bottom = 38.0 +text = "Прочитать ISA" +metadata/_edit_lock_ = true + +[node name="TabContainer" type="TabContainer" parent="."] +offset_left = 216.0 +offset_top = 39.0 +offset_right = 2420.0 +offset_bottom = 917.0 +theme = SubResource("Theme_k5ur4") +theme_override_colors/font_unselected_color = Color(0, 0, 0, 0.0392157) +theme_override_colors/font_selected_color = Color(0, 0, 0, 0) +theme_override_styles/tab_focus = SubResource("StyleBoxTexture_rh6pm") +theme_override_styles/tab_disabled = SubResource("StyleBoxTexture_x11tp") +theme_override_styles/tabbar_background = SubResource("StyleBoxTexture_mn8w2") +theme_override_styles/panel = SubResource("StyleBoxTexture_21lc8") +theme_override_styles/tab_selected = SubResource("StyleBoxTexture_k08q3") +theme_override_styles/tab_hovered = SubResource("StyleBoxTexture_dklg6") +theme_override_styles/tab_unselected = SubResource("StyleBoxTexture_17le6") +tab_alignment = 2 +current_tab = 0 +tab_focus_mode = 0 +metadata/_edit_lock_ = true + +[node name="PRD" type="Panel" parent="TabContainer"] +layout_mode = 2 +theme_override_styles/panel = SubResource("StyleBoxTexture_7u7p7") +metadata/_tab_index = 0 +metadata/_edit_lock_ = true + +[node name="body_grid" type="GridContainer" parent="TabContainer/PRD"] +layout_mode = 0 +offset_left = 376.0 +offset_top = -4.0 +offset_right = 1648.0 +offset_bottom = 718.0 + +[node name="litera_2_4_6" type="GridContainer" parent="TabContainer/PRD/body_grid"] +clip_contents = true +custom_minimum_size = Vector2(700, 300) +layout_mode = 2 +size_flags_horizontal = 3 +columns = 5 + +[node name="fs_control" type="GridContainer" parent="TabContainer/PRD/body_grid/litera_2_4_6"] +custom_minimum_size = Vector2(350, 0) +layout_mode = 2 +script = ExtResource("2_vmbyo") +metadata/_edit_lock_ = true + +[node name="space" type="Panel" parent="TabContainer/PRD/body_grid/litera_2_4_6"] +custom_minimum_size = Vector2(50, 0) +layout_mode = 2 +theme_override_styles/panel = SubResource("StyleBoxTexture_1as41") + +[node name="yau07b_control" type="GridContainer" parent="TabContainer/PRD/body_grid/litera_2_4_6"] +layout_mode = 2 +script = ExtResource("2_vmbyo") +metadata/_edit_lock_ = true + +[node name="space2" type="Panel" parent="TabContainer/PRD/body_grid/litera_2_4_6"] +custom_minimum_size = Vector2(50, 0) +layout_mode = 2 +theme_override_styles/panel = SubResource("StyleBoxTexture_1as41") + +[node name="table_ukp_1" type="GridContainer" parent="TabContainer/PRD/body_grid/litera_2_4_6"] +layout_mode = 2 +script = ExtResource("2_vmbyo") +metadata/_edit_lock_ = true + +[node name="PSK" type="Sprite2D" parent="TabContainer/PRD/body_grid/litera_2_4_6"] +modulate = Color(1, 1, 0.941176, 0.733333) +material = ExtResource("3_3syd3") +position = Vector2(955, 5) +scale = Vector2(0.23, 0.217) +texture = SubResource("PlaceholderTexture2D_723du") +offset = Vector2(800, 600) +script = SubResource("GDScript_0sobq") +metadata/_edit_lock_ = true + +[node name="PSK grad" type="TextureRect" parent="TabContainer/PRD/body_grid/litera_2_4_6/PSK"] +modulate = Color(1, 1, 0.941176, 0.784314) +material = SubResource("ShaderMaterial_o7txs") +offset_left = 554.954 +offset_top = -30.0 +offset_right = 1290.95 +offset_bottom = 1134.0 +texture = ExtResource("5_i3nvb") +expand_mode = 1 +metadata/_edit_lock_ = true + +[node name="ray_1" type="Sprite2D" parent="TabContainer/PRD/body_grid/litera_2_4_6/PSK"] +material = SubResource("ShaderMaterial_dgiai") +position = Vector2(549.221, 543.623) +scale = Vector2(21.8765, 21.6782) +texture = SubResource("GradientTexture2D_0pk2o") +metadata/_edit_lock_ = true + +[node name="litera_3_5_7" type="GridContainer" parent="TabContainer/PRD/body_grid"] +custom_minimum_size = Vector2(500, 350) +layout_mode = 2 +columns = 5 + +[node name="fs_control" type="GridContainer" parent="TabContainer/PRD/body_grid/litera_3_5_7"] +custom_minimum_size = Vector2(350, 0) +layout_mode = 2 +script = ExtResource("2_vmbyo") +metadata/_edit_lock_ = true + +[node name="space" type="Panel" parent="TabContainer/PRD/body_grid/litera_3_5_7"] +custom_minimum_size = Vector2(50, 0) +layout_mode = 2 +theme_override_styles/panel = SubResource("StyleBoxTexture_1as41") + +[node name="yau07b_control" type="GridContainer" parent="TabContainer/PRD/body_grid/litera_3_5_7"] +layout_mode = 2 +script = ExtResource("2_vmbyo") +metadata/_edit_lock_ = true + +[node name="space2" type="Panel" parent="TabContainer/PRD/body_grid/litera_3_5_7"] +custom_minimum_size = Vector2(50, 0) +layout_mode = 2 +theme_override_styles/panel = SubResource("StyleBoxTexture_1as41") + +[node name="table_ukp_2" type="GridContainer" parent="TabContainer/PRD/body_grid/litera_3_5_7"] +layout_mode = 2 +script = ExtResource("2_vmbyo") +metadata/_edit_lock_ = true + +[node name="PSK2" type="Sprite2D" parent="TabContainer/PRD/body_grid/litera_3_5_7"] +modulate = Color(1, 1, 0.941176, 0.733333) +material = ExtResource("3_3syd3") +position = Vector2(955, -6) +scale = Vector2(0.23, 0.217) +texture = SubResource("PlaceholderTexture2D_723du") +offset = Vector2(800, 600) +script = SubResource("GDScript_0sobq") +metadata/_edit_lock_ = true + +[node name="PSK grad" type="TextureRect" parent="TabContainer/PRD/body_grid/litera_3_5_7/PSK2"] +modulate = Color(1, 1, 0.941176, 0.784314) +show_behind_parent = true +material = SubResource("ShaderMaterial_o7txs") +offset_left = 554.954 +offset_top = -30.0 +offset_right = 1290.95 +offset_bottom = 1134.0 +texture = ExtResource("5_i3nvb") +expand_mode = 1 +metadata/_edit_lock_ = true + +[node name="ray_2" type="Sprite2D" parent="TabContainer/PRD/body_grid/litera_3_5_7/PSK2"] +material = SubResource("ShaderMaterial_2pxu2") +position = Vector2(549.221, 539.353) +scale = Vector2(21.8765, 21.6782) +texture = SubResource("GradientTexture2D_0pk2o") +metadata/_edit_lock_ = true + +[node name="select_dev" type="GridContainer" parent="TabContainer/PRD"] +layout_mode = 2 +offset_left = 16.0 +offset_top = 11.0 +offset_right = 16.0 +offset_bottom = 11.0 +script = ExtResource("2_vmbyo") +node_gap = Vector2(100, 50) + +[node name="ControlPanel" type="Panel" parent="TabContainer"] +visible = false +layout_mode = 2 +theme_override_styles/panel = SubResource("StyleBoxTexture_tn8m6") +script = ExtResource("9_akagi") +metadata/_tab_index = 1 +metadata/_edit_lock_ = true + +[node name="lbl_control" type="Label" parent="TabContainer/ControlPanel"] +layout_mode = 0 +offset_left = 4.0 +offset_top = 21.0 +offset_right = 624.0 +offset_bottom = 52.0 +theme_override_font_sizes/font_size = 22 +text = "Контроль исправности прибора ПРД-Н" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="soc_y5" type="NinePatchRect" parent="TabContainer/ControlPanel"] +layout_mode = 0 +offset_left = 199.0 +offset_top = 103.0 +offset_right = 516.0 +offset_bottom = 293.0 +texture = ExtResource("9_0r2qk") +patch_margin_left = 16 +patch_margin_top = 16 +patch_margin_right = 16 +patch_margin_bottom = 16 + +[node name="ref_A24" parent="TabContainer/ControlPanel/soc_y5" instance=ExtResource("11_fg7ul")] +offset_left = 9.0 +offset_top = 34.0 +offset_right = 59.0 +offset_bottom = 184.0 +textures = Array[Texture]([]) +fname = "ИП-25" +rname = "A24" +metadata/_edit_lock_ = true + +[node name="ref_A30" parent="TabContainer/ControlPanel/soc_y5" instance=ExtResource("11_fg7ul")] +offset_left = 59.0 +offset_top = 34.0 +offset_right = 109.0 +offset_bottom = 184.0 +textures = Array[Texture]([]) +fname = "ЯУ-07" +rname = "A30" +metadata/_edit_lock_ = true + +[node name="ref_A26" parent="TabContainer/ControlPanel/soc_y5" instance=ExtResource("11_fg7ul")] +offset_left = 109.0 +offset_top = 34.0 +offset_right = 159.0 +offset_bottom = 184.0 +textures = Array[Texture]([]) +fname = "ЭМС-Г" +rname = "A26" +metadata/_edit_lock_ = true + +[node name="ref_A27" parent="TabContainer/ControlPanel/soc_y5" instance=ExtResource("11_fg7ul")] +offset_left = 159.0 +offset_top = 34.0 +offset_right = 209.0 +offset_bottom = 184.0 +textures = Array[Texture]([]) +fname = "УГ" +rname = "A27" +metadata/_edit_lock_ = true + +[node name="ref_A28" parent="TabContainer/ControlPanel/soc_y5" instance=ExtResource("11_fg7ul")] +offset_left = 209.0 +offset_top = 34.0 +offset_right = 259.0 +offset_bottom = 183.0 +textures = Array[Texture]([]) +self_size = Vector2i(50, 149) +fname = "УКП-1" +rname = "A28" +metadata/_edit_lock_ = true + +[node name="ref_A29" parent="TabContainer/ControlPanel/soc_y5" instance=ExtResource("11_fg7ul")] +offset_left = 259.0 +offset_top = 34.0 +offset_right = 309.0 +offset_bottom = 184.0 +textures = Array[Texture]([]) +fname = "УКП-2" +rname = "A29" +metadata/_edit_lock_ = true + +[node name="lbl_fname" type="Label" parent="TabContainer/ControlPanel/soc_y5"] +self_modulate = Color(1, 1, 1, 0.62) +layout_mode = 0 +offset_left = 7.0 +offset_top = 8.0 +offset_right = 309.0 +offset_bottom = 33.0 +text = "Кассета У5" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="soc_fs-nkvd" parent="TabContainer/ControlPanel" instance=ExtResource("10_tdh2s")] +layout_mode = 0 +offset_left = 198.0 +offset_top = 311.0 +offset_right = 516.0 +offset_bottom = 538.0 +script = null + +[node name="lbl_fname" type="Label" parent="TabContainer/ControlPanel/soc_fs-nkvd"] +self_modulate = Color(1, 1, 1, 0.62) +layout_mode = 0 +offset_left = 7.0 +offset_top = 8.0 +offset_right = 299.0 +offset_bottom = 33.0 +text = "Кассета ФС-НД" +horizontal_alignment = 1 +vertical_alignment = 1 +metadata/_edit_lock_ = true + +[node name="ref_A3" parent="TabContainer/ControlPanel/soc_fs-nkvd" instance=ExtResource("11_fg7ul")] +offset_left = 109.0 +offset_top = 68.0 +offset_right = 159.0 +offset_bottom = 218.0 +textures = Array[Texture]([]) +fname = "ФС-2" +rname = "A3" +metadata/_edit_lock_ = true + +[node name="ref_A1" parent="TabContainer/ControlPanel/soc_fs-nkvd" instance=ExtResource("11_fg7ul")] +offset_left = 159.0 +offset_top = 68.0 +offset_right = 209.0 +offset_bottom = 218.0 +textures = Array[Texture]([]) +fname = "Модуль" +rname = "A1" +metadata/_edit_lock_ = true + +[node name="ref_A2" parent="TabContainer/ControlPanel/soc_fs-nkvd" instance=ExtResource("11_fg7ul")] +offset_left = 209.0 +offset_top = 68.0 +offset_right = 259.0 +offset_bottom = 217.0 +textures = Array[Texture]([]) +self_size = Vector2i(50, 149) +fname = "Модуль" +rname = "A2" +metadata/_edit_lock_ = true + +[node name="ref_A4" parent="TabContainer/ControlPanel/soc_fs-nkvd" instance=ExtResource("11_fg7ul")] +offset_left = 259.0 +offset_top = 68.0 +offset_right = 309.0 +offset_bottom = 218.0 +textures = Array[Texture]([]) +fname = "ФС-3" +rname = "A4" +metadata/_edit_lock_ = true + +[node name="soc_P1" type="NinePatchRect" parent="TabContainer/ControlPanel"] +layout_mode = 0 +offset_left = 96.0 +offset_top = 560.0 +offset_right = 516.0 +offset_bottom = 776.0 +texture = ExtResource("9_0r2qk") +patch_margin_left = 16 +patch_margin_top = 16 +patch_margin_right = 16 +patch_margin_bottom = 16 + +[node name="lbl_fname" type="Label" parent="TabContainer/ControlPanel/soc_P1"] +self_modulate = Color(1, 1, 1, 0.62) +layout_mode = 0 +offset_left = 7.0 +offset_top = 8.0 +offset_right = 409.0 +offset_bottom = 33.0 +text = "Кассета П-1" +horizontal_alignment = 1 +vertical_alignment = 1 +metadata/_edit_lock_ = true + +[node name="ref_A23" parent="TabContainer/ControlPanel/soc_P1" instance=ExtResource("11_fg7ul")] +offset_left = 40.0 +offset_top = -206.0 +offset_right = 90.0 +offset_bottom = -32.0 +textures = Array[Texture]([]) +self_size = Vector2i(50, 174) + +[node name="ref_A24" parent="TabContainer/ControlPanel/soc_P1" instance=ExtResource("11_fg7ul")] +offset_left = 40.0 +offset_top = -448.0 +offset_right = 90.0 +offset_bottom = -274.0 +textures = Array[Texture]([]) +self_size = Vector2i(50, 174) + +[node name="ref_A25" parent="TabContainer/ControlPanel/soc_P1" instance=ExtResource("11_fg7ul")] +offset_left = 109.0 +offset_top = 34.0 +offset_right = 159.0 +offset_bottom = 208.0 +textures = Array[Texture]([]) +self_size = Vector2i(50, 174) +metadata/_edit_lock_ = true + +[node name="ref_A26" parent="TabContainer/ControlPanel/soc_P1" instance=ExtResource("11_fg7ul")] +offset_left = 159.0 +offset_top = 34.0 +offset_right = 209.0 +offset_bottom = 208.0 +textures = Array[Texture]([]) +self_size = Vector2i(50, 174) +metadata/_edit_lock_ = true + +[node name="ref_A27" parent="TabContainer/ControlPanel/soc_P1" instance=ExtResource("11_fg7ul")] +offset_left = 209.0 +offset_top = 34.0 +offset_right = 259.0 +offset_bottom = 208.0 +textures = Array[Texture]([]) +self_size = Vector2i(50, 174) +metadata/_edit_lock_ = true + +[node name="ref_A28" parent="TabContainer/ControlPanel/soc_P1" instance=ExtResource("11_fg7ul")] +visible = false +offset_left = 259.0 +offset_top = 34.0 +offset_right = 309.0 +offset_bottom = 208.0 +textures = Array[Texture]([]) +self_size = Vector2i(50, 174) +metadata/_edit_lock_ = true + +[node name="ref_A29" parent="TabContainer/ControlPanel/soc_P1" instance=ExtResource("11_fg7ul")] +visible = false +offset_left = 309.0 +offset_top = 34.0 +offset_right = 359.0 +offset_bottom = 208.0 +textures = Array[Texture]([]) +self_size = Vector2i(50, 174) +metadata/_edit_lock_ = true + +[node name="Signal_EMS_G" type="NinePatchRect" parent="TabContainer/ControlPanel"] +layout_mode = 0 +offset_left = 536.0 +offset_top = 550.0 +offset_right = 1055.0 +offset_bottom = 777.0 +texture = ExtResource("9_0r2qk") +patch_margin_left = 16 +patch_margin_top = 16 +patch_margin_right = 16 +patch_margin_bottom = 16 + +[node name="lbl_fname" type="Label" parent="TabContainer/ControlPanel/Signal_EMS_G"] +self_modulate = Color(1, 1, 1, 0.62) +layout_mode = 0 +offset_left = 7.0 +offset_top = 8.0 +offset_right = 508.0 +offset_bottom = 33.0 +text = "ЭМС-Г" +horizontal_alignment = 1 +vertical_alignment = 1 +metadata/_edit_lock_ = true + +[node name="ref_A22" parent="TabContainer/ControlPanel/Signal_EMS_G" instance=ExtResource("11_d60jk")] +offset_left = 9.0 +offset_top = 38.0 +offset_right = 59.0 +offset_bottom = 216.0 +self_size = Vector2i(50, 178) +rname = "A22" +metadata/_edit_lock_ = true + +[node name="ref_A23" parent="TabContainer/ControlPanel/Signal_EMS_G" instance=ExtResource("11_d60jk")] +offset_left = 59.0 +offset_top = 38.0 +offset_right = 109.0 +offset_bottom = 216.0 +self_size = Vector2i(50, 178) +rname = "A23" +metadata/_edit_lock_ = true + +[node name="ref_A26" parent="TabContainer/ControlPanel/Signal_EMS_G" instance=ExtResource("11_d60jk")] +offset_left = 109.0 +offset_top = 38.0 +offset_right = 159.0 +offset_bottom = 216.0 +self_size = Vector2i(50, 178) +rname = "A26" +metadata/_edit_lock_ = true + +[node name="ref_A27" parent="TabContainer/ControlPanel/Signal_EMS_G" instance=ExtResource("11_d60jk")] +offset_left = 159.0 +offset_top = 38.0 +offset_right = 209.0 +offset_bottom = 216.0 +self_size = Vector2i(50, 178) +rname = "A27" +metadata/_edit_lock_ = true + +[node name="ref_A28" parent="TabContainer/ControlPanel/Signal_EMS_G" instance=ExtResource("11_d60jk")] +offset_left = 209.0 +offset_top = 38.0 +offset_right = 259.0 +offset_bottom = 216.0 +self_size = Vector2i(50, 178) +rname = "A28" +metadata/_edit_lock_ = true + +[node name="ref_A29" parent="TabContainer/ControlPanel/Signal_EMS_G" instance=ExtResource("11_d60jk")] +offset_left = 259.0 +offset_top = 38.0 +offset_right = 309.0 +offset_bottom = 216.0 +self_size = Vector2i(50, 178) +rname = "A29" +metadata/_edit_lock_ = true + +[node name="ref_A31" parent="TabContainer/ControlPanel/Signal_EMS_G" instance=ExtResource("11_d60jk")] +offset_left = 309.0 +offset_top = 38.0 +offset_right = 359.0 +offset_bottom = 216.0 +self_size = Vector2i(50, 178) +rname = "УМ2" +metadata/_edit_lock_ = true + +[node name="ref_A32" parent="TabContainer/ControlPanel/Signal_EMS_G" instance=ExtResource("11_d60jk")] +offset_left = 359.0 +offset_top = 38.0 +offset_right = 409.0 +offset_bottom = 216.0 +self_size = Vector2i(50, 178) +rname = "УМ3" +metadata/_edit_lock_ = true + +[node name="ref_A33" parent="TabContainer/ControlPanel/Signal_EMS_G" instance=ExtResource("11_d60jk")] +offset_left = 409.0 +offset_top = 38.0 +offset_right = 459.0 +offset_bottom = 216.0 +self_size = Vector2i(50, 178) +rname = "A33" +metadata/_edit_lock_ = true + +[node name="ref_A34" parent="TabContainer/ControlPanel/Signal_EMS_G" instance=ExtResource("11_d60jk")] +offset_left = 459.0 +offset_top = 38.0 +offset_right = 509.0 +offset_bottom = 216.0 +self_size = Vector2i(50, 178) +rname = "A33" +metadata/_edit_lock_ = true + +[node name="EMS_G" type="Panel" parent="TabContainer"] +visible = false +layout_mode = 2 +theme_override_styles/panel = SubResource("StyleBoxTexture_ooo4i") +script = ExtResource("9_g1wia") +metadata/_tab_index = 2 +metadata/_edit_lock_ = true + +[node name="table1" type="GridContainer" parent="TabContainer/EMS_G"] +layout_mode = 2 +offset_left = 35.0 +offset_top = 60.0 +offset_right = 35.0 +offset_bottom = 60.0 +script = ExtResource("2_vmbyo") + +[node name="load_boadr" type="ColorRect" parent="TabContainer/EMS_G"] +layout_mode = 0 +offset_left = 35.0 +offset_top = 58.0 +offset_right = 1604.0 +offset_bottom = 782.0 +color = Color(0, 0, 0, 0.596078) +metadata/_edit_lock_ = true + +[node name="load" type="Sprite2D" parent="TabContainer/EMS_G/load_boadr"] +material = SubResource("ShaderMaterial_slcfo") +position = Vector2(785.001, 361.5) +scale = Vector2(24.5313, 11.2656) +texture = SubResource("GradientTexture2D_0pk2o") +metadata/_edit_lock_ = true + +[node name="Load_text" type="Label" parent="TabContainer/EMS_G/load_boadr"] +layout_mode = 0 +offset_left = 693.0 +offset_top = 341.0 +offset_right = 849.0 +offset_bottom = 380.0 +theme_override_colors/font_color = Color(1, 1, 1, 1) +theme_override_colors/font_shadow_color = Color(0.427493, 0.427493, 0.427493, 1) +theme_override_font_sizes/font_size = 28 +text = "Загрузка ..." + +[node name="Modul_fs" type="Panel" parent="TabContainer"] +visible = false +layout_mode = 2 +theme_override_styles/panel = SubResource("StyleBoxTexture_ooo4i") +script = ExtResource("15_b4pr1") +metadata/_tab_index = 3 +metadata/_edit_lock_ = true + +[node name="set_space" type="GridContainer" parent="TabContainer/Modul_fs"] +layout_mode = 0 +offset_left = 211.0 +offset_top = 378.0 +offset_right = 854.0 +offset_bottom = 418.0 +columns = 2 + +[node name="set_ferq" type="Button" parent="TabContainer/Modul_fs/set_space"] +custom_minimum_size = Vector2(100, 0) +layout_mode = 2 +text = " Set н/ч" + +[node name="write_to_set_freq" type="LineEdit" parent="TabContainer/Modul_fs/set_space"] +custom_minimum_size = Vector2(300, 0) +layout_mode = 2 +text = "500" +placeholder_text = "Частота" + +[node name="measurement" type="Label" parent="TabContainer/Modul_fs/set_space/write_to_set_freq"] +layout_mode = 0 +offset_left = 313.0 +offset_top = 2.0 +offset_right = 365.0 +offset_bottom = 30.0 +text = "МГц" + +[node name="set_att2" type="Button" parent="TabContainer/Modul_fs/set_space"] +custom_minimum_size = Vector2(100, 0) +layout_mode = 2 +text = " Set att" + +[node name="write_to_set_att" type="LineEdit" parent="TabContainer/Modul_fs/set_space"] +custom_minimum_size = Vector2(300, 0) +layout_mode = 2 +text = "38.75" +placeholder_text = "-38.75 to 0" + +[node name="measurement" type="Label" parent="TabContainer/Modul_fs/set_space/write_to_set_att"] +layout_mode = 0 +offset_left = 313.0 +offset_top = 2.0 +offset_right = 351.0 +offset_bottom = 30.0 +text = "dB" + +[node name="manage_panel" type="GridContainer" parent="TabContainer/Modul_fs"] +layout_mode = 0 +offset_left = 200.0 +offset_top = 186.0 +offset_right = 805.0 +offset_bottom = 308.0 +columns = 5 +metadata/_edit_lock_ = true + +[node name="con" type="Button" parent="TabContainer/Modul_fs/manage_panel"] +layout_mode = 2 +text = " Подключение " + +[node name="ip_connect" type="Label" parent="TabContainer/Modul_fs/manage_panel/con"] +layout_mode = 0 +offset_top = 32.0 +offset_right = 118.0 +offset_bottom = 55.0 + +[node name="get_freq" type="Button" parent="TabContainer/Modul_fs/manage_panel"] +layout_mode = 2 +text = " Получить н/ч " + +[node name="freq_ind" type="Label" parent="TabContainer/Modul_fs/manage_panel/get_freq"] +layout_mode = 0 +offset_top = 32.0 +offset_right = 106.0 +offset_bottom = 55.0 + +[node name="get_att" type="Button" parent="TabContainer/Modul_fs/manage_panel"] +layout_mode = 2 +text = " Получить att " + +[node name="att_ind" type="Label" parent="TabContainer/Modul_fs/manage_panel/get_att"] +layout_mode = 0 +offset_top = 32.0 +offset_right = 105.0 +offset_bottom = 55.0 + +[node name="get_gen_status" type="Button" parent="TabContainer/Modul_fs/manage_panel"] +layout_mode = 2 +toggle_mode = true +text = "Переключатель генератора " + +[node name="status_ind" type="Label" parent="TabContainer/Modul_fs/manage_panel/get_gen_status"] +layout_mode = 0 +offset_top = 33.0 +offset_right = 84.0 +offset_bottom = 56.0 + +[node name="read" type="LineEdit" parent="TabContainer/Modul_fs"] +layout_mode = 0 +offset_left = 216.0 +offset_top = 818.0 +offset_right = 971.0 +offset_bottom = 849.0 +metadata/_edit_lock_ = true + +[node name="fs_connect" type="Label" parent="TabContainer/Modul_fs"] +layout_mode = 0 +offset_left = 206.0 +offset_top = 88.0 +offset_right = 377.0 +offset_bottom = 111.0 +text = "Связь с модулем ФС" + +[node name="temp_1" type="Label" parent="TabContainer/Modul_fs"] +layout_mode = 0 +offset_left = 1015.0 +offset_top = 119.0 +offset_right = 1102.0 +offset_bottom = 152.0 +text = "Темп" + +[node name="temp_2" type="Label" parent="TabContainer/Modul_fs"] +layout_mode = 0 +offset_left = 1016.0 +offset_top = 156.0 +offset_right = 1103.0 +offset_bottom = 189.0 +text = "Темп" + +[node name="temp_3" type="Label" parent="TabContainer/Modul_fs"] +layout_mode = 0 +offset_left = 1015.0 +offset_top = 193.0 +offset_right = 1102.0 +offset_bottom = 226.0 +text = "Темп" + +[node name="save_other" type="CheckBox" parent="."] +offset_left = 2.0 +offset_top = 799.0 +offset_right = 215.0 +offset_bottom = 827.0 +theme = SubResource("Theme_yblys") +text = "Сохранить все настройки" + +[connection signal="pressed" from="Background/side_panel/select_prd" to="." method="_on_prd_select"] +[connection signal="pressed" from="Background/side_panel/select_control" to="." method="_on_control_button"] +[connection signal="pressed" from="Background/side_panel/select_ems_g" to="." method="_on_emsg_select"] +[connection signal="pressed" from="Background/side_panel/select_fs" to="." method="_on_mfs_select"] +[connection signal="pressed" from="Background/side_panel/save_config" to="." method="_on_save_config"] +[connection signal="pressed" from="Background/side_panel/load_config" to="." method="_on_load_config"] +[connection signal="pressed" from="read_isa" to="." method="_on_read_isa_pressed"] +[connection signal="pressed" from="TabContainer/Modul_fs/set_space/set_ferq" to="TabContainer/Modul_fs" method="_on_set_ferq"] +[connection signal="pressed" from="TabContainer/Modul_fs/set_space/set_att2" to="TabContainer/Modul_fs" method="_on_set_att"] +[connection signal="pressed" from="TabContainer/Modul_fs/manage_panel/con" to="TabContainer/Modul_fs" method="_on_start"] +[connection signal="pressed" from="TabContainer/Modul_fs/manage_panel/get_freq" to="TabContainer/Modul_fs" method="_on_send_pressed"] +[connection signal="pressed" from="TabContainer/Modul_fs/manage_panel/get_att" to="TabContainer/Modul_fs" method="_on_get_att"] +[connection signal="toggled" from="TabContainer/Modul_fs/manage_panel/get_gen_status" to="TabContainer/Modul_fs" method="_on_get_status"] diff --git a/scripts/FS.gd b/scripts/FS.gd index c16846f..c5a583e 100644 --- a/scripts/FS.gd +++ b/scripts/FS.gd @@ -66,6 +66,7 @@ class FGOS: 0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94, 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D] + const INDEX_SIZE: int = 0xC const GROUP_OFFSET: int = 0x0 const CMD_OFFSET: int = 0x1 @@ -76,7 +77,6 @@ class FGOS: signal line_changed(unit: FGOS) ## Вызывается когда меняется состояние связи с ячейкой - var counter: int = 0 var online: bool = false ## Состояние связи с ячейкой var status: = PackedByteArray() ## Поле "состояние прибора" #var fgos_data = {} ## Результат выполнения команды "читать порт" @@ -92,7 +92,7 @@ class FGOS: return final_crc - func _form_packet(group: int, cmd: int, index_size: int, data = null): + func _form_packet(group: int, cmd: int, index_size: int, counter: int, data = null): var packet = PackedByteArray() packet.resize(index_size) packet.encode_u8(GROUP_OFFSET, group) @@ -108,79 +108,80 @@ class FGOS: var crc = crc32(packet) packet.resize(packet.size() + 4) packet.encode_u32(packet.size() - 4, crc) - #Network.command_stack.append(packet) - Network.command_stack_2.append(packet) - - - func _parse(rx_data: PackedByteArray): - - if not online: - online = true - emit_signal('line_changed', self) - - - var status_len = rx_data.decode_u16(6) # Длина массива байтового "состояние прибора" - - var i: = 0 - var len_rx_data: = rx_data.size() - status.resize(status_len) - while i < status_len: - var byte_i = i + 8 - if byte_i < len_rx_data: - status[i] = rx_data[byte_i] # Массив байтовый "состояние прибора" - i += 1 - emit_signal('data_received', self) + Network.command_stack.append(packet) + + + func send_fs_data(data_to_sand: PackedByteArray, client_fs: StreamPeer, peerstream_fs: PacketPeer): + if client_fs.get_status() == 2: + var peer = peerstream_fs.get_stream_peer() + if peer: + peer.put_data(data_to_sand) + else: + print_debug('client_fs.get_status != 2 !!!') + + + #func _parse(rx_data: PackedByteArray): + #if not online: + #online = true + #emit_signal('line_changed', self) + # + #var status_len = rx_data.decode_u16(6) # Длина массива байтового "состояние прибора" +# + #var i: = 0 + #var len_rx_data: = rx_data.size() + #status.resize(status_len) + #while i < status_len: + #var byte_i = i + 8 + #if byte_i < len_rx_data: + #status[i] = rx_data[byte_i] # Массив байтовый "состояние прибора" + #i += 1 + #emit_signal('data_received', self) - func start_session(): - counter = 0 - var packet = _form_packet(GROUP.BASE, CmdCode.START_SESSION, 0xC) + func start_session(counter: int): + var packet = _form_packet(GROUP.BASE, CmdCode.START_SESSION, INDEX_SIZE, counter) _send_packet(packet) - get_gen_state() - get_att_batch() - get_carrier() - func set_gen_state(button_state: bool): + func set_gen_state(button_state: bool, counter: int): var index_size = 0x1C - var packet = _form_packet(GROUP.GENERATOR, CmdCode.SET_GEN_STATUS, index_size) + var packet = _form_packet(GROUP.GENERATOR, CmdCode.SET_GEN_STATUS, index_size, counter) packet.encode_u16(0x8, 0x0010) packet.encode_u32(0xC, button_state) ## MODE GEN STATUS _send_packet(packet) - get_gen_state() - func set_carrier(installation_frequency: int): + func set_carrier(installation_frequency: int, counter: int): var index_size = 0x1C - var packet = _form_packet(GROUP.BASE, CmdCode.SET_CARRIER, index_size) + var packet = _form_packet(GROUP.BASE, CmdCode.SET_CARRIER, index_size, counter) packet.encode_u16(0x8, 0x10) packet.encode_u64(0xC, installation_frequency) ## uint64_t freq low dword/high dword _send_packet(packet) - func set_att_batch(attenuation: float): + func set_att_batch(attenuation: float, counter: int): var index_size = 0x1C - var packet = _form_packet(GROUP.RF, CmdCode.SET_ATT, index_size) + var packet = _form_packet(GROUP.RF, CmdCode.SET_ATT, index_size, counter) packet.encode_u16(0x8, 0x10) packet.encode_float(0x18, attenuation) _send_packet(packet) - func get_carrier(): - var packet = _form_packet(GROUP.BASE, CmdCode.READ_CARRIER, INDEX_SIZE) + func get_carrier(counter: int): + var packet = _form_packet(GROUP.BASE, CmdCode.READ_CARRIER, INDEX_SIZE, counter) _send_packet(packet) - func get_att_batch(): - var packet = _form_packet(GROUP.RF, CmdCode.READ_ATT, INDEX_SIZE) + func get_att_batch(counter: int): + var packet = _form_packet(GROUP.RF, CmdCode.READ_ATT, INDEX_SIZE, counter) _send_packet(packet) - func get_gen_state(): - var packet = _form_packet(GROUP.GENERATOR, CmdCode.READ_GEN_STATUS, INDEX_SIZE) + func get_gen_state(counter: int): + var packet = _form_packet(GROUP.GENERATOR, CmdCode.READ_GEN_STATUS, INDEX_SIZE, counter) _send_packet(packet) - func base_get_current_temp(): - var packet = _form_packet(GROUP.BASE, CmdCode.BASE_GET_CURRENT_TEMP, INDEX_SIZE) + func base_get_current_temp(counter: int): + var packet = _form_packet(GROUP.BASE, CmdCode.BASE_GET_CURRENT_TEMP, INDEX_SIZE, counter) _send_packet(packet) diff --git a/scripts/PRD.gd b/scripts/PRD.gd index c27debc..a84bea2 100644 --- a/scripts/PRD.gd +++ b/scripts/PRD.gd @@ -420,8 +420,8 @@ func on_btn_select(intem_from_sector: int) -> void: Network.on_command_change_device(meta) flag_mode = meta[2] draw_control_panel_prd(flag_mode) - #_on_start_fs_1() - _on_start_fs_2() + _on_start_fs_1() + #_on_start_fs_2() func _on_zapret1(toggled_on: bool) -> void: diff --git a/scripts/modul_fs.gd b/scripts/modul_fs.gd index 61677ed..19dc73c 100644 --- a/scripts/modul_fs.gd +++ b/scripts/modul_fs.gd @@ -58,29 +58,29 @@ func _on_data_send(): func _on_send_pressed() -> void: - unit_fs.get_carrier() + unit_fs.get_carrier(counter) func _on_get_att() -> void: - unit_fs.get_att_batch() + unit_fs.get_att_batch(counter) func _on_start(): - unit_fs.start_session() - unit_fs.base_get_current_temp() + unit_fs.start_session(counter) + unit_fs.base_get_current_temp(counter) func _on_get_status(toggled_btn): var inverted_state = not toggled_btn - unit_fs.set_gen_state(inverted_state) - unit_fs.get_gen_state() + unit_fs.set_gen_state(inverted_state, counter) + unit_fs.get_gen_state(counter) func _on_set_ferq(): var freq = int($set_space/write_to_set_freq.get_text()) * 1_000_000 - unit_fs.set_carrier(freq) + unit_fs.set_carrier(freq, counter) func _on_set_att(): var att = float($set_space/write_to_set_att.get_text()) - unit_fs.set_att_batch(att) + unit_fs.set_att_batch(att, counter) diff --git a/scripts/network.gd b/scripts/network.gd index 69f7985..67f403f 100644 --- a/scripts/network.gd +++ b/scripts/network.gd @@ -2,8 +2,8 @@ extends Node # ЯУ-07 Блок var unit = Yau07.YaU07.new('ЯУ-07Б') -#var unit_fs_1 = Fs.FGOS.new() -var unit_fs_2 = Fs.FGOS.new() +var unit_fs_1 = Fs.FGOS.new() +#var unit_fs_2 = Fs.FGOS.new() var soc_unicast: Socket var soc_brodcast: Socket var ip_address_yau: String = Constants.ADDRESSES[0][1] @@ -21,6 +21,7 @@ var ip_fs_1: String = Constants.ADDRESSES[0][4] var peerstream_fs_1: PacketPeer var state_fs = Constants.STATE.IDLE var command_stack: Array +var counter_fs_1: int = 0 ## 2 ФС var client_fs_2: StreamPeer @@ -28,6 +29,7 @@ var ip_fs_2: String = Constants.ADDRESSES[0][5] var peerstream_fs_2: PacketPeer var state_fs_2 = Constants.STATE.IDLE var command_stack_2: Array +var counter_fs_2: int = 0 # Яу-07б signal yau_status_line(_status) ## Вызывается когда меняется состояние связи с ячейкой @@ -82,11 +84,16 @@ func poll_receive_fs(client: StreamPeerTCP, peerstream: PacketPeer, ip_fs: Strin if peer.get_available_bytes() > 0: var rx_data: PackedByteArray rx_data.append_array(peer.get_data(peer.get_available_bytes())[1]) - emit_signal("data_from_fs_1", rx_data) - #emit_signal("data_from_fs_2", rx_data) - emit_signal("port_fs_opened_1", ip_fs) - if state_fs == Constants.STATE.SEND: - state_fs = Constants.STATE.DONE + if client == client_fs_1: + emit_signal("data_from_fs_1", rx_data) + emit_signal("port_fs_opened_1", ip_fs) + if state_fs == Constants.STATE.SEND: + state_fs = Constants.STATE.DONE + elif client == client_fs_2: + emit_signal("data_from_fs_2", rx_data) + emit_signal("port_fs_opened_2", ip_fs) + if state_fs_2 == Constants.STATE.SEND: + state_fs_2 = Constants.STATE.DONE func _ready() -> void: @@ -103,7 +110,7 @@ func _ready() -> void: unit.connect('line_changed', Callable(self, 'on_line_changed')) unit.connect('command_fail', Callable(self, 'on_command_fail')) - #connect_fs_1() + connect_fs_1() connect_fs_2() read_port_isa([0x106, 0x108]) @@ -115,16 +122,16 @@ func _process(delta: float) -> void: if client_fs_1: poll_receive_fs(client_fs_1, peerstream_fs_1, ip_fs_1) + state_machine_fs() if client_fs_2: - poll_receive_fs_2(client_fs_2, peerstream_fs_2, ip_fs_2) + poll_receive_fs(client_fs_2, peerstream_fs_2, ip_fs_2) + state_machine_fs_2() poll_receive_yau07(soc_brodcast) poll_receive_yau07(soc_unicast) state_machine_yau07() - #state_machine_fs() - state_machine_fs_2() - + match unit.process(delta): Error.OK: soc_unicast.send_to(ip_address_yau, ip_port_yau, unit.tx_data.slice(0, unit.tx_len)) Error.FAILED: print_debug('Ошибка отправки данных') @@ -182,18 +189,24 @@ func on_command_change_device(meta_device): ip_fs_1 = meta_device[3] ip_fs_2 = meta_device[4] #ip_fs_3 = meta_device[5] - #connect_fs_1() - connect_fs_2() + connect_fs_1() + #connect_fs_2() func state_machine_fs(): + ## State fs machine if client_fs_1: - ## State fs machine if (state_fs == Constants.STATE.IDLE) or (state_fs == Constants.STATE.DONE): if command_stack: var pack: Array = command_stack.pop_front() - send_fs_data_1(pack) + unit_fs_1.send_fs_data(pack, client_fs_1, peerstream_fs_1) state_fs = Constants.STATE.SEND + if client_fs_2: + if (state_fs_2 == Constants.STATE.IDLE) or (state_fs_2 == Constants.STATE.DONE): + if command_stack_2: + var pack: Array = command_stack_2.pop_front() + unit_fs_1.send_fs_data(pack, client_fs_2, peerstream_fs_2) + state_fs_2 = Constants.STATE.SEND # Подключится к модулю ФС @@ -210,43 +223,52 @@ func connect_fs_1(): peerstream_fs_1.set_stream_peer(client_fs_1) -# Отправить команду для ФС -func send_fs_data_1(data_to_sand: PackedByteArray): - if client_fs_1.get_status() == 2: - var peer = peerstream_fs_1.get_stream_peer() - if peer: - peer.put_data(data_to_sand) - emit_signal("data_send") - - # Разорвать соединение с ФС func disconnect_fs(client_for_leave): client_for_leave.disconnect_from_host() state_fs = Constants.STATE.IDLE command_stack = [] -# -#func start_work_fs(): - #unit_fs_1.start_session() - #unit_fs_1.base_get_current_temp() -# -# -#func get_fs_gen_status(state_gen): - #unit_fs_1.set_gen_state(state_gen) - #unit_fs_1.get_gen_state() - #unit_fs_1.base_get_current_temp() -# -# -#func set_fs_ferq_carrier(freq: int): - #unit_fs_1.set_carrier(freq) - #unit_fs_1.base_get_current_temp() - #unit_fs_1.get_carrier() -# -# -#func set_fs_attenuation(attenuation: float): - #unit_fs_1.set_att_batch(attenuation) - #unit_fs_1.get_att_batch() - #unit_fs_1.base_get_current_temp() + +func start_work_fs(): + counter_fs_1 = 0 + unit_fs_1.start_session(counter_fs_1) + counter_fs_1 += 1 + unit_fs_1.get_gen_state(counter_fs_1) + counter_fs_1 += 1 + unit_fs_1.get_att_batch(counter_fs_1) + counter_fs_1 += 1 + unit_fs_1.get_carrier(counter_fs_1) + counter_fs_1 += 1 + unit_fs_1.base_get_current_temp(counter_fs_1) + counter_fs_1 += 1 + + +func get_fs_gen_status(state_gen): + unit_fs_1.set_gen_state(state_gen, counter_fs_1) + counter_fs_1 += 1 + unit_fs_1.get_gen_state(counter_fs_1) + counter_fs_1 += 1 + unit_fs_1.base_get_current_temp(counter_fs_1) + counter_fs_1 += 1 + + +func set_fs_ferq_carrier(freq: int): + unit_fs_1.set_carrier(freq, counter_fs_1) + counter_fs_1 += 1 + unit_fs_1.base_get_current_temp(counter_fs_1) + counter_fs_1 += 1 + unit_fs_1.get_carrier(counter_fs_1) + counter_fs_1 += 1 + + +func set_fs_attenuation(attenuation: float): + unit_fs_1.set_att_batch(attenuation, counter_fs_1) + counter_fs_1 += 1 + unit_fs_1.get_att_batch(counter_fs_1) + counter_fs_1 += 1 + unit_fs_1.base_get_current_temp(counter_fs_1) + counter_fs_1 += 1 ## 2 ФС коннект @@ -289,45 +311,25 @@ func state_machine_fs_2(): state_fs_2 = Constants.STATE.SEND -func poll_receive_fs_2(client: StreamPeerTCP, peerstream: PacketPeer, ip_fs: String): - client.poll() - var peer = peerstream.get_stream_peer() - # Проверяем, существует ли соединение - if not peer: - emit_signal("port_error", ip_fs) - return - # Проверяем состояние подключения - if client.get_status() != StreamPeerTCP.STATUS_CONNECTED: - emit_signal("port_closed", ip_fs) - return - - if peer.get_available_bytes() > 0: - var rx_data: PackedByteArray - rx_data.append_array(peer.get_data(peer.get_available_bytes())[1]) - emit_signal("data_from_fs_2", rx_data) - emit_signal("port_fs_opened_2", ip_fs) - if state_fs_2 == Constants.STATE.SEND: - state_fs_2 = Constants.STATE.DONE - - -func start_work_fs_2(): - unit_fs_2.start_session() - unit_fs_2.base_get_current_temp() - - -func get_fs_gen_status_2(state_gen): - unit_fs_2.set_gen_state(state_gen) - unit_fs_2.get_gen_state() - unit_fs_2.base_get_current_temp() - - -func set_fs_ferq_carrier_2(freq: int): - unit_fs_2.set_carrier(freq) - unit_fs_2.base_get_current_temp() - unit_fs_2.get_carrier() - - -func set_fs_attenuation_2(attenuation: float): - unit_fs_2.set_att_batch(attenuation) - unit_fs_2.get_att_batch() - unit_fs_2.base_get_current_temp() +# +#func start_work_fs_2(): + #unit_fs_2.start_session() + #unit_fs_2.base_get_current_temp() +# +# +#func get_fs_gen_status_2(state_gen): + #unit_fs_2.set_gen_state(state_gen) + #unit_fs_2.get_gen_state() + #unit_fs_2.base_get_current_temp() +# +# +#func set_fs_ferq_carrier_2(freq: int): + #unit_fs_2.set_carrier(freq) + #unit_fs_2.base_get_current_temp() + #unit_fs_2.get_carrier() +# +# +#func set_fs_attenuation_2(attenuation: float): + #unit_fs_2.set_att_batch(attenuation) + #unit_fs_2.get_att_batch() + #unit_fs_2.base_get_current_temp() From 39c8a03821283216c79a9cfb0e58244d7036f7a7 Mon Sep 17 00:00:00 2001 From: Maxim Date: Fri, 7 Feb 2025 05:18:50 +0300 Subject: [PATCH 6/6] module fs half-stable --- scripts/FS.gd | 39 ++++++++------- scripts/PRD.gd | 6 ++- scripts/modul_fs.gd | 16 +++---- scripts/network.gd | 114 ++++++++++++++++++++++---------------------- 4 files changed, 90 insertions(+), 85 deletions(-) diff --git a/scripts/FS.gd b/scripts/FS.gd index c5a583e..4fa8390 100644 --- a/scripts/FS.gd +++ b/scripts/FS.gd @@ -104,11 +104,14 @@ class FGOS: return packet - func _send_packet(packet: PackedByteArray): + func send_packet_to(packet: PackedByteArray, client: StreamPeer): var crc = crc32(packet) packet.resize(packet.size() + 4) packet.encode_u32(packet.size() - 4, crc) - Network.command_stack.append(packet) + if client == Network.client_fs_1: + Network.command_stack.append(packet) + else: + Network.command_stack_2.append(packet) func send_fs_data(data_to_sand: PackedByteArray, client_fs: StreamPeer, peerstream_fs: PacketPeer): @@ -138,50 +141,50 @@ class FGOS: #emit_signal('data_received', self) - func start_session(counter: int): + func start_session(counter: int, client: StreamPeer): var packet = _form_packet(GROUP.BASE, CmdCode.START_SESSION, INDEX_SIZE, counter) - _send_packet(packet) + send_packet_to(packet, client) - func set_gen_state(button_state: bool, counter: int): + func set_gen_state(button_state: bool, counter: int, client: StreamPeer): var index_size = 0x1C var packet = _form_packet(GROUP.GENERATOR, CmdCode.SET_GEN_STATUS, index_size, counter) packet.encode_u16(0x8, 0x0010) packet.encode_u32(0xC, button_state) ## MODE GEN STATUS - _send_packet(packet) + send_packet_to(packet, client) - func set_carrier(installation_frequency: int, counter: int): + func set_carrier(installation_frequency: int, counter: int, client: StreamPeer): var index_size = 0x1C var packet = _form_packet(GROUP.BASE, CmdCode.SET_CARRIER, index_size, counter) packet.encode_u16(0x8, 0x10) packet.encode_u64(0xC, installation_frequency) ## uint64_t freq low dword/high dword - _send_packet(packet) + send_packet_to(packet, client) - func set_att_batch(attenuation: float, counter: int): + func set_att_batch(attenuation: float, counter: int, client: StreamPeer): var index_size = 0x1C var packet = _form_packet(GROUP.RF, CmdCode.SET_ATT, index_size, counter) packet.encode_u16(0x8, 0x10) packet.encode_float(0x18, attenuation) - _send_packet(packet) + send_packet_to(packet, client) - func get_carrier(counter: int): + func get_carrier(counter: int, client: StreamPeer): var packet = _form_packet(GROUP.BASE, CmdCode.READ_CARRIER, INDEX_SIZE, counter) - _send_packet(packet) + send_packet_to(packet, client) - func get_att_batch(counter: int): + func get_att_batch(counter: int, client: StreamPeer): var packet = _form_packet(GROUP.RF, CmdCode.READ_ATT, INDEX_SIZE, counter) - _send_packet(packet) + send_packet_to(packet, client) - func get_gen_state(counter: int): + func get_gen_state(counter: int, client: StreamPeer): var packet = _form_packet(GROUP.GENERATOR, CmdCode.READ_GEN_STATUS, INDEX_SIZE, counter) - _send_packet(packet) + send_packet_to(packet, client) - func base_get_current_temp(counter: int): + func base_get_current_temp(counter: int, client: StreamPeer): var packet = _form_packet(GROUP.BASE, CmdCode.BASE_GET_CURRENT_TEMP, INDEX_SIZE, counter) - _send_packet(packet) + send_packet_to(packet, client) diff --git a/scripts/PRD.gd b/scripts/PRD.gd index a84bea2..75d86b9 100644 --- a/scripts/PRD.gd +++ b/scripts/PRD.gd @@ -202,9 +202,13 @@ func _on_read_isa(unit_isa_ports: Dictionary) -> void: $ISA.text = 'ISA: ' + str(len(Constants.EMS_G_PORT_DATA_HOLDER)) if isa_data.has(Constants.BASE_PORTS.UG+6): + $TabContainer/PRD/body_grid/litera_2_4_6/yau07b_control.get_node2(1, 3).select(isa_data[0x106] & 0x7) + $TabContainer/PRD/body_grid/litera_2_4_6/yau07b_control.get_node2(1, 4).select((isa_data[0x106] & 0x38)>> 3) $TabContainer/PRD/body_grid/litera_2_4_6/PSK/ray_1.material.set('shader_parameter/turn', 0.735 + 0.025 * (isa_data[0x106] & 0x7)) $TabContainer/PRD/body_grid/litera_2_4_6/PSK/ray_1.material.set('shader_parameter/inner_radius', 0.8 - 0.01 * (isa_data[0x106] & 0x38)) if isa_data.has(Constants.BASE_PORTS.UG+8): + $TabContainer/PRD/body_grid/litera_3_5_7/yau07b_control.get_node2(1, 3).select(isa_data[0x108] & 0x7) + $TabContainer/PRD/body_grid/litera_3_5_7/yau07b_control.get_node2(1, 4).select((isa_data[0x108] & 0x38)>>3) $TabContainer/PRD/body_grid/litera_3_5_7/PSK2/ray_2.material.set('shader_parameter/turn', 0.735 + 0.025 * (isa_data[0x108] & 0x7)) $TabContainer/PRD/body_grid/litera_3_5_7/PSK2/ray_2.material.set('shader_parameter/inner_radius', 0.8 - 0.01 * (isa_data[0x108] & 0x38)) @@ -421,7 +425,7 @@ func on_btn_select(intem_from_sector: int) -> void: flag_mode = meta[2] draw_control_panel_prd(flag_mode) _on_start_fs_1() - #_on_start_fs_2() + _on_start_fs_2() func _on_zapret1(toggled_on: bool) -> void: diff --git a/scripts/modul_fs.gd b/scripts/modul_fs.gd index 19dc73c..7bebe73 100644 --- a/scripts/modul_fs.gd +++ b/scripts/modul_fs.gd @@ -58,29 +58,29 @@ func _on_data_send(): func _on_send_pressed() -> void: - unit_fs.get_carrier(counter) + unit_fs.get_carrier(counter, Network.client_fs_1) func _on_get_att() -> void: - unit_fs.get_att_batch(counter) + unit_fs.get_att_batch(counter, Network.client_fs_1) func _on_start(): - unit_fs.start_session(counter) - unit_fs.base_get_current_temp(counter) + unit_fs.start_session(counter, Network.client_fs_1) + unit_fs.base_get_current_temp(counter, Network.client_fs_1) func _on_get_status(toggled_btn): var inverted_state = not toggled_btn - unit_fs.set_gen_state(inverted_state, counter) - unit_fs.get_gen_state(counter) + unit_fs.set_gen_state(inverted_state, counter, Network.client_fs_1) + unit_fs.get_gen_state(counter, Network.client_fs_1) func _on_set_ferq(): var freq = int($set_space/write_to_set_freq.get_text()) * 1_000_000 - unit_fs.set_carrier(freq, counter) + unit_fs.set_carrier(freq, counter, Network.client_fs_1) func _on_set_att(): var att = float($set_space/write_to_set_att.get_text()) - unit_fs.set_att_batch(att, counter) + unit_fs.set_att_batch(att, counter, Network.client_fs_1) diff --git a/scripts/network.gd b/scripts/network.gd index 67f403f..d90588b 100644 --- a/scripts/network.gd +++ b/scripts/network.gd @@ -122,10 +122,10 @@ func _process(delta: float) -> void: if client_fs_1: poll_receive_fs(client_fs_1, peerstream_fs_1, ip_fs_1) - state_machine_fs() + state_machine_fs(client_fs_1) if client_fs_2: poll_receive_fs(client_fs_2, peerstream_fs_2, ip_fs_2) - state_machine_fs_2() + state_machine_fs(client_fs_2) poll_receive_yau07(soc_brodcast) poll_receive_yau07(soc_unicast) @@ -190,18 +190,18 @@ func on_command_change_device(meta_device): ip_fs_2 = meta_device[4] #ip_fs_3 = meta_device[5] connect_fs_1() - #connect_fs_2() + connect_fs_2() -func state_machine_fs(): +func state_machine_fs(client_fs): ## State fs machine - if client_fs_1: + if client_fs == client_fs_1: if (state_fs == Constants.STATE.IDLE) or (state_fs == Constants.STATE.DONE): if command_stack: var pack: Array = command_stack.pop_front() unit_fs_1.send_fs_data(pack, client_fs_1, peerstream_fs_1) state_fs = Constants.STATE.SEND - if client_fs_2: + if client_fs == client_fs_2: if (state_fs_2 == Constants.STATE.IDLE) or (state_fs_2 == Constants.STATE.DONE): if command_stack_2: var pack: Array = command_stack_2.pop_front() @@ -232,42 +232,42 @@ func disconnect_fs(client_for_leave): func start_work_fs(): counter_fs_1 = 0 - unit_fs_1.start_session(counter_fs_1) + unit_fs_1.start_session(counter_fs_1, client_fs_1) counter_fs_1 += 1 - unit_fs_1.get_gen_state(counter_fs_1) + unit_fs_1.get_gen_state(counter_fs_1, client_fs_1) counter_fs_1 += 1 - unit_fs_1.get_att_batch(counter_fs_1) + unit_fs_1.get_att_batch(counter_fs_1, client_fs_1) counter_fs_1 += 1 - unit_fs_1.get_carrier(counter_fs_1) + unit_fs_1.get_carrier(counter_fs_1, client_fs_1) counter_fs_1 += 1 - unit_fs_1.base_get_current_temp(counter_fs_1) + unit_fs_1.base_get_current_temp(counter_fs_1, client_fs_1) counter_fs_1 += 1 func get_fs_gen_status(state_gen): - unit_fs_1.set_gen_state(state_gen, counter_fs_1) + unit_fs_1.set_gen_state(state_gen, counter_fs_1, client_fs_1) counter_fs_1 += 1 - unit_fs_1.get_gen_state(counter_fs_1) + unit_fs_1.get_gen_state(counter_fs_1, client_fs_1) counter_fs_1 += 1 - unit_fs_1.base_get_current_temp(counter_fs_1) + unit_fs_1.base_get_current_temp(counter_fs_1, client_fs_1) counter_fs_1 += 1 func set_fs_ferq_carrier(freq: int): - unit_fs_1.set_carrier(freq, counter_fs_1) + unit_fs_1.set_carrier(freq, counter_fs_1, client_fs_1) counter_fs_1 += 1 - unit_fs_1.base_get_current_temp(counter_fs_1) + unit_fs_1.base_get_current_temp(counter_fs_1, client_fs_1) counter_fs_1 += 1 - unit_fs_1.get_carrier(counter_fs_1) + unit_fs_1.get_carrier(counter_fs_1, client_fs_1) counter_fs_1 += 1 func set_fs_attenuation(attenuation: float): - unit_fs_1.set_att_batch(attenuation, counter_fs_1) + unit_fs_1.set_att_batch(attenuation, counter_fs_1, client_fs_1) counter_fs_1 += 1 - unit_fs_1.get_att_batch(counter_fs_1) + unit_fs_1.get_att_batch(counter_fs_1, client_fs_1) counter_fs_1 += 1 - unit_fs_1.base_get_current_temp(counter_fs_1) + unit_fs_1.base_get_current_temp(counter_fs_1, client_fs_1) counter_fs_1 += 1 @@ -291,45 +291,43 @@ func disconnect_fs_2(client_for_leave): client_for_leave.disconnect_from_host() state_fs_2 = Constants.STATE.IDLE command_stack_2 = [] - - -# Отправить команду для ФС -func send_fs_data_2(data_to_sand: PackedByteArray): - if client_fs_2.get_status() == 2: - var peer = peerstream_fs_2.get_stream_peer() - if peer: - peer.put_data(data_to_sand) -func state_machine_fs_2(): - if client_fs_2: - ## State fs_2 machine - if (state_fs_2 == Constants.STATE.IDLE) or (state_fs_2 == Constants.STATE.DONE): - if command_stack_2: - var pack: Array = command_stack_2.pop_front() - send_fs_data_2(pack) - state_fs_2 = Constants.STATE.SEND +func start_work_fs_2(): + counter_fs_2 = 0 + unit_fs_1.start_session(counter_fs_2, client_fs_2) + counter_fs_2 += 1 + unit_fs_1.get_gen_state(counter_fs_2, client_fs_2) + counter_fs_2 += 1 + unit_fs_1.get_att_batch(counter_fs_2, client_fs_2) + counter_fs_2 += 1 + unit_fs_1.get_carrier(counter_fs_2, client_fs_2) + counter_fs_2 += 1 + unit_fs_1.base_get_current_temp(counter_fs_2, client_fs_2) + counter_fs_2 += 1 +# +func get_fs_gen_status_2(state_gen): + unit_fs_1.set_gen_state(state_gen, counter_fs_2, client_fs_2) + counter_fs_2 += 1 + unit_fs_1.get_gen_state(counter_fs_2, client_fs_2) + counter_fs_2 += 1 + unit_fs_1.base_get_current_temp(counter_fs_2, client_fs_2) + counter_fs_2 += 1 -# -#func start_work_fs_2(): - #unit_fs_2.start_session() - #unit_fs_2.base_get_current_temp() -# -# -#func get_fs_gen_status_2(state_gen): - #unit_fs_2.set_gen_state(state_gen) - #unit_fs_2.get_gen_state() - #unit_fs_2.base_get_current_temp() -# -# -#func set_fs_ferq_carrier_2(freq: int): - #unit_fs_2.set_carrier(freq) - #unit_fs_2.base_get_current_temp() - #unit_fs_2.get_carrier() -# -# -#func set_fs_attenuation_2(attenuation: float): - #unit_fs_2.set_att_batch(attenuation) - #unit_fs_2.get_att_batch() - #unit_fs_2.base_get_current_temp() +func set_fs_ferq_carrier_2(freq: int): + unit_fs_1.set_carrier(freq, counter_fs_2, client_fs_2) + counter_fs_2 += 1 + unit_fs_1.base_get_current_temp(counter_fs_2, client_fs_2) + counter_fs_2 += 1 + unit_fs_1.get_carrier(counter_fs_2, client_fs_2) + counter_fs_2 += 1 + + +func set_fs_attenuation_2(attenuation: float): + unit_fs_1.set_att_batch(attenuation, counter_fs_2, client_fs_2) + counter_fs_2 += 1 + unit_fs_1.get_att_batch(counter_fs_2, client_fs_2) + counter_fs_2 += 1 + unit_fs_1.base_get_current_temp(counter_fs_2, client_fs_2) + counter_fs_2 += 1