add module fs
This commit is contained in:
224
scripts/FS.gd
Normal file
224
scripts/FS.gd
Normal file
@@ -0,0 +1,224 @@
|
||||
extends Node
|
||||
|
||||
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]
|
||||
|
||||
|
||||
## Блок управления ФС
|
||||
class FGOS:
|
||||
## Коды выполняемых команд
|
||||
enum CmdCode {
|
||||
START_SESSION = 0x0,
|
||||
READ_CARRIER = 0x1F,
|
||||
SET_CARRIER = 0x1E,
|
||||
READ_ATT = 0x1A,
|
||||
SET_ATT = 0x1B,
|
||||
READ_GEN_STATUS = 0x05,
|
||||
SET_GEN_STATUS = 0x06,
|
||||
BASE_GET_CURRENT_TEMP = 0x36,
|
||||
}
|
||||
|
||||
enum GROUP {
|
||||
BASE = 0x00,
|
||||
GENERATOR = 0x03,
|
||||
RF = 0x06,
|
||||
}
|
||||
|
||||
## Состояние автомата выполнения команды
|
||||
enum CmdState {
|
||||
UNCK, ## Номер команды не ининциирован
|
||||
SEND, ## Буфер готов для отправки
|
||||
WAIT, ## Ожидание выполнения
|
||||
DONE, ## Команда выполнена
|
||||
FAIL ## Команда не выполнена
|
||||
}
|
||||
|
||||
var counter: int = 0
|
||||
|
||||
|
||||
func crc32(data: PackedByteArray) -> int:
|
||||
var crc = Constants.INIT
|
||||
for byte in data:
|
||||
var index = (crc ^ byte) & 0xFF
|
||||
crc = (Constants.CRC32_TABLE[index] ^ (crc >> 8)) & 0xFFFFFFFF
|
||||
# Возвращаем только последние 4 байта в обратном порядке
|
||||
var final_crc = crc ^ Constants.FINAL_XOR_VALUE
|
||||
return final_crc
|
||||
|
||||
|
||||
func start_session():
|
||||
counter = 0
|
||||
var index_size = 0xC
|
||||
var GROUP = Constants.GROUP.BASE
|
||||
var CMD = Constants.CMD.START_SESSION
|
||||
var prep_pack: PackedByteArray = PackedByteArray()
|
||||
prep_pack.resize(index_size)
|
||||
prep_pack.encode_u8(0x0, GROUP)
|
||||
prep_pack.encode_u8(0x1, CMD)
|
||||
prep_pack.encode_u32(0x4, counter)
|
||||
counter += 1
|
||||
var crc = crc32(prep_pack)
|
||||
prep_pack.resize(index_size + 4)
|
||||
prep_pack.encode_u32(index_size, crc)
|
||||
Network.command_stack.append(prep_pack)
|
||||
get_gen_state()
|
||||
get_att_batch()
|
||||
get_carrier()
|
||||
|
||||
|
||||
func set_gen_state(button_state: bool):
|
||||
var index_size = 0x1C
|
||||
var GROUP = Constants.GROUP.GENERATOR
|
||||
var CMD = Constants.CMD.SET_GEN_STATUS
|
||||
var prep_pack: PackedByteArray = PackedByteArray()
|
||||
prep_pack.resize(index_size)
|
||||
|
||||
prep_pack.encode_u8(0x0, GROUP)
|
||||
prep_pack.encode_u8(0x1, CMD)
|
||||
prep_pack.encode_u32(0x4, counter)
|
||||
counter += 1
|
||||
prep_pack.encode_u16(0x8, 0x0010)
|
||||
prep_pack.encode_u32(0xC, button_state) ## MODE GEN STATUS
|
||||
var crc = crc32(prep_pack)
|
||||
prep_pack.resize(index_size + 4)
|
||||
prep_pack.encode_u32(index_size, crc)
|
||||
|
||||
Network.command_stack.append(prep_pack)
|
||||
get_gen_state()
|
||||
|
||||
|
||||
func set_carrier(wr_freq):
|
||||
var index_size = 0x1C
|
||||
var GROUP = Constants.GROUP.BASE
|
||||
var CMD = Constants.CMD.SET_CARRIER
|
||||
var prep_pack: PackedByteArray = PackedByteArray()
|
||||
prep_pack.resize(index_size)
|
||||
|
||||
prep_pack.encode_u8(0x0, GROUP)
|
||||
prep_pack.encode_u8(0x1, CMD)
|
||||
prep_pack.encode_u32(0x4, counter)
|
||||
counter += 1
|
||||
prep_pack.encode_u16(0x8, 0x10)
|
||||
prep_pack.encode_u64(0xC, wr_freq) ## uint64_t freq low dword/high dword
|
||||
var crc = crc32(prep_pack)
|
||||
prep_pack.resize(index_size + 4)
|
||||
prep_pack.encode_u32(index_size, crc)
|
||||
|
||||
Network.command_stack.append(prep_pack)
|
||||
|
||||
|
||||
func set_att_batch(att):
|
||||
var index_size = 0x1C
|
||||
var GROUP = Constants.GROUP.RF
|
||||
var CMD = Constants.CMD.SET_ATT
|
||||
var prep_pack: PackedByteArray = PackedByteArray()
|
||||
prep_pack.resize(index_size)
|
||||
|
||||
prep_pack.encode_u8(0x0, GROUP)
|
||||
prep_pack.encode_u8(0x1, CMD)
|
||||
prep_pack.encode_u32(0x4, counter)
|
||||
counter += 1
|
||||
prep_pack.encode_u16(0x8, 0x10)
|
||||
prep_pack.encode_float(0x18, att)
|
||||
|
||||
var crc = crc32(prep_pack)
|
||||
prep_pack.resize(index_size + 4)
|
||||
prep_pack.encode_u32(index_size, crc)
|
||||
|
||||
Network.command_stack.append(prep_pack)
|
||||
|
||||
|
||||
func get_carrier():
|
||||
var index_size = 0xC
|
||||
var GROUP = Constants.GROUP.BASE
|
||||
var CMD = Constants.CMD.READ_CARRIER
|
||||
var prep_pack: PackedByteArray = []
|
||||
prep_pack.resize(index_size) ## 12 в int
|
||||
prep_pack.encode_u8(0x0,GROUP)
|
||||
prep_pack.encode_u8(0x1,CMD)
|
||||
prep_pack.encode_u32(0x4, counter)
|
||||
counter += 1
|
||||
var crc = crc32(prep_pack)
|
||||
prep_pack.resize(index_size + 4) ## 16 в int
|
||||
prep_pack.encode_u32(index_size, crc)
|
||||
Network.command_stack.append(prep_pack)
|
||||
|
||||
|
||||
func get_att_batch():
|
||||
var index_size = 0xC
|
||||
var GROUP = Constants.GROUP.RF
|
||||
var CMD = Constants.CMD.READ_ATT
|
||||
var prep_pack: PackedByteArray
|
||||
prep_pack.resize(index_size) ## 12 в int
|
||||
prep_pack.encode_u8(0x0, GROUP)
|
||||
prep_pack.encode_u8(0x1, CMD)
|
||||
prep_pack.encode_u32(0x4, counter)
|
||||
counter += 1
|
||||
var crc = crc32(prep_pack)
|
||||
prep_pack.resize(index_size + 4) ## 16 в int
|
||||
prep_pack.encode_u32(index_size, crc)
|
||||
Network.command_stack.append(prep_pack)
|
||||
|
||||
|
||||
func get_gen_state():
|
||||
var index_size = 0xC
|
||||
var GROUP = Constants.GROUP.GENERATOR
|
||||
var CMD = Constants.CMD.READ_GEN_STATUS
|
||||
var prep_pack: PackedByteArray
|
||||
prep_pack.resize(index_size) ## 12 в int
|
||||
prep_pack.encode_u8(0x0, GROUP)
|
||||
prep_pack.encode_u8(0x1, CMD)
|
||||
prep_pack.encode_u32(0x4, counter)
|
||||
counter += 1
|
||||
var crc = crc32(prep_pack)
|
||||
prep_pack.resize(index_size + 4) ## 16 в int
|
||||
prep_pack.encode_u32(index_size, crc)
|
||||
Network.command_stack.append(prep_pack)
|
||||
|
||||
|
||||
func base_get_current_temp():
|
||||
var index_size = 0xC
|
||||
var GROUP = Constants.GROUP.BASE
|
||||
var CMD = Constants.CMD.BASE_GET_CURRENT_TEMP
|
||||
var prep_pack: PackedByteArray
|
||||
prep_pack.resize(index_size) ## 12 в int
|
||||
prep_pack.encode_u8(0x0, GROUP)
|
||||
prep_pack.encode_u8(0x1, CMD)
|
||||
prep_pack.encode_u32(0x4, counter)
|
||||
counter += 1
|
||||
var crc = crc32(prep_pack)
|
||||
prep_pack.resize(index_size + 4) ## 16 в int
|
||||
prep_pack.encode_u32(index_size, crc)
|
||||
Network.command_stack.append(prep_pack)
|
||||
|
||||
@@ -14,41 +14,62 @@ var isa: Array = []
|
||||
|
||||
func _ready() -> void:
|
||||
# Таблица УКП_1
|
||||
node_select1 = $TabContainer/PRD/scroll1/table1
|
||||
node_select1 = $TabContainer/PRD/table_ukp_1
|
||||
draw_tabl(node_select1, Constants.ROWS_REGS_DATA, Constants.ROWS_REGS_DATA.size())
|
||||
node_select1.set_columns_min_size([120, 120])
|
||||
node_select1.set_node_text(0, 0, 'Мощность')
|
||||
node_select1.set_node_text(1, 0, 'Температура')
|
||||
|
||||
# Таблица УКП_2
|
||||
node_select2 = $TabContainer/PRD/scroll2/table2
|
||||
node_select2 = $TabContainer/PRD/table_ukp_2
|
||||
draw_tabl(node_select2, Constants.ROWS_UKP2_DATA, Constants.ROWS_UKP2_DATA.size())
|
||||
node_select2.set_columns_min_size([120, 120])
|
||||
node_select2.set_node_text(0, 0, 'Мощность')
|
||||
node_select2.set_node_text(1, 0, 'Температура')
|
||||
|
||||
# Выбор прибора для подключения
|
||||
var node_select_device = $TabContainer/PRD/select_dev/select_dev
|
||||
var node_select_device = $TabContainer/PRD/select_dev
|
||||
draw_tabl(node_select_device, Constants.SELECT_DEVICE, Constants.SELECT_DEVICE.size())
|
||||
var get_select_device = node_select_device.get_node2(1, 0)
|
||||
|
||||
# Заполнение адресов
|
||||
for i_addr in Constants.ADDRESSES.size():
|
||||
get_select_device.add_item(Constants.ADDRESSES[i_addr][0])
|
||||
get_select_device.set_item_metadata(i_addr, Constants.ADDRESSES[i_addr].slice(1,4))
|
||||
get_select_device.set_item_metadata(i_addr, Constants.ADDRESSES[i_addr].slice(1,7))
|
||||
get_select_device.connect('item_selected', Callable(self, 'on_btn_select'))
|
||||
node_select_device.get_node2(0,0).text = 'ПРИБОР'
|
||||
node_select_device.set_columns_min_size([100, 100])
|
||||
|
||||
$TabContainer/PRD/Zapret.connect('toggled', Callable(self, '_on_zapret').bind($TabContainer/PRD/Zapret))
|
||||
$TabContainer/PRD/Zapret2.connect('toggled', Callable(self, '_on_zapret').bind($TabContainer/PRD/Zapret2))
|
||||
## Заполненение списка направления луча
|
||||
for key in Constants.RAY_DICT:
|
||||
$TabContainer/PRD/Grid/Ray_set.add_item(key)
|
||||
$TabContainer/PRD/Grid/Ray_set2.add_item(key)
|
||||
|
||||
draw_panel_prd(Constants.ADDRESSES[0][3])
|
||||
|
||||
$TabContainer/PRD/Grid/Zapret.connect('toggled', Callable(self, '_on_zapret').bind($TabContainer/PRD/Grid/Zapret))
|
||||
$TabContainer/PRD/Grid/Zapret2.connect('toggled', Callable(self, '_on_zapret').bind($TabContainer/PRD/Grid/Zapret2))
|
||||
$TabContainer/PRD/Grid/Ray_set.connect('item_selected', Callable(self, '_on_btn_ray'))
|
||||
$TabContainer/PRD/Grid/Ray_set2.connect('item_selected', Callable(self, '_on_btn_ray2'))
|
||||
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'))
|
||||
|
||||
|
||||
func draw_panel_prd(mode) -> void:
|
||||
for node_path in Constants.NODE_MAP:
|
||||
var index = Constants.NODE_MAP[node_path]
|
||||
var node = get_node(node_path)
|
||||
if node:
|
||||
var value = node.get("text")
|
||||
if value != null:
|
||||
node.text = Constants.SIGNS_PRD[mode][index]
|
||||
else:
|
||||
node.fname = Constants.SIGNS_PRD[mode][index]
|
||||
|
||||
|
||||
## From Network status about yau-07
|
||||
func _on_yau_status(yau_status):
|
||||
func _on_yau_status(yau_status: bool) -> void:
|
||||
if yau_status:
|
||||
$TabContainer/ControlPanel/sockets/ref_A26/light_ind.button_pressed = true
|
||||
$TabContainer/ControlPanel/sockets/ref_A26/light_ind.disabled = false
|
||||
@@ -61,14 +82,14 @@ func _on_yau_status(yau_status):
|
||||
flag_yau_control = false
|
||||
|
||||
|
||||
func _on_read_isa(unit_isa_ports):
|
||||
func _on_read_isa(unit_isa_ports: Dictionary) -> void:
|
||||
var isa_data: Dictionary = {}
|
||||
for key in unit_isa_ports.keys():
|
||||
isa_data[key] = unit_isa_ports[key]
|
||||
|
||||
if isa_data.has(290):
|
||||
var tmp = isa_data[290]
|
||||
isa_data.erase(290)
|
||||
if isa_data.has(0x122):
|
||||
var tmp = isa_data[0x122]
|
||||
isa_data.erase(0x122)
|
||||
|
||||
var found = false
|
||||
for i in range(Constants.EMS_G_PORT_DATA_HOLDER.size()):
|
||||
@@ -81,10 +102,16 @@ func _on_read_isa(unit_isa_ports):
|
||||
if len(Constants.EMS_G_PORT_DATA_HOLDER) == 32:
|
||||
emit_signal('read_ems_g_finish')
|
||||
$ISA.text = 'ISA: ' + str(len(Constants.EMS_G_PORT_DATA_HOLDER))
|
||||
|
||||
if isa_data.has(0x106):
|
||||
$TabContainer/PRD/PSK/ray_1.material.set('shader_parameter/turn', 0.735 + 0.025 * isa_data[0x106])
|
||||
|
||||
if isa_data.has(0x108):
|
||||
$TabContainer/PRD/PSK2/ray_2.material.set('shader_parameter/turn', 0.735 + 0.025 * isa_data[0x108])
|
||||
|
||||
|
||||
## Рисует таблицу
|
||||
func draw_tabl(tbl, row: Array, count_row: int):
|
||||
func draw_tabl(tbl: Node, row: Array, count_row: int):
|
||||
for i_row in count_row:
|
||||
tbl.add_row(row[i_row])
|
||||
|
||||
@@ -101,6 +128,7 @@ func _on_data_received(data_from_yau_07):
|
||||
|
||||
## УГ
|
||||
#node_select1.set_node_text(2, 0, '%d' % dry_contact)
|
||||
#node_select1.set_node_text(3, 0, '%d' % DKM)
|
||||
|
||||
## SOCKETS BOARDS
|
||||
for i in 4:
|
||||
@@ -133,7 +161,6 @@ func _on_data_received(data_from_yau_07):
|
||||
else:
|
||||
node_power_ind[i].button_pressed = false
|
||||
node_power_ind[i].disabled = true
|
||||
#node_select1.set_node_text(3, 0, '%d' % DKM)
|
||||
|
||||
## УКП
|
||||
for i in range(8): ## Мощность от УКП_1
|
||||
@@ -172,6 +199,10 @@ func _on_emsg_select() -> void:
|
||||
set_tab_and_buttons(2, 'select_ems_g')
|
||||
|
||||
|
||||
func _on_mfs_select() -> void:
|
||||
set_tab_and_buttons(3, 'select_fs')
|
||||
|
||||
|
||||
func set_tab_and_buttons(tab_index: int, button_name: String) -> void:
|
||||
$TabContainer.current_tab = tab_index
|
||||
var side_panel = $Background/side_panel
|
||||
@@ -181,15 +212,16 @@ func set_tab_and_buttons(tab_index: int, button_name: String) -> void:
|
||||
button.button_pressed = (button.name == button_name)
|
||||
|
||||
|
||||
func on_btn_select(intem_from_sector):
|
||||
var node_select_device = $TabContainer/PRD/select_dev/select_dev
|
||||
func on_btn_select(intem_from_sector: int) -> void:
|
||||
var node_select_device = $TabContainer/PRD/select_dev
|
||||
var get_select_device = node_select_device.get_node2(1, 0)
|
||||
var meta = get_select_device.get_item_metadata(intem_from_sector)
|
||||
Network.on_command_change_device(meta)
|
||||
flag_mode = meta[2]
|
||||
draw_panel_prd(flag_mode)
|
||||
|
||||
|
||||
func fill_item(node, i_column: int, i_row: int, arr: Dictionary, select: int = 0):
|
||||
func fill_item(node: Node, i_column: int, i_row: int, arr: Dictionary, select: int = 0) -> void:
|
||||
var optionbutton = node.get_node2(i_column, i_row) as OptionButton
|
||||
for key in arr.keys():
|
||||
var item_text = key + " - " + str(arr[key])
|
||||
@@ -206,3 +238,13 @@ func _on_zapret(toggled_on: bool, meta) -> void:
|
||||
|
||||
func _on_read_isa_pressed() -> void:
|
||||
Network.read_port_isa([0x122, 0x124, 0x128])
|
||||
|
||||
|
||||
## Регулировка положением луча
|
||||
func _on_btn_ray(item_from_ray: int) -> void:
|
||||
Network.write_port_isa(0x106, item_from_ray)
|
||||
Network.read_port_isa([0x106])
|
||||
|
||||
func _on_btn_ray2(item_from_ray: int) -> void:
|
||||
Network.write_port_isa(0x108, item_from_ray)
|
||||
Network.read_port_isa([0x108])
|
||||
|
||||
@@ -35,18 +35,18 @@ const ROWS_UKP2_DATA: Array = [
|
||||
[TableNode, TableNode],
|
||||
[TableNode, TableNode]]
|
||||
const ADDRESSES: Array = [
|
||||
['ПРД-Н1', '10.1.1.11', 50011, MODE.PRD_H],
|
||||
['ПРД-Н2', '10.1.1.21', 50021, MODE.PRD_H],
|
||||
['ПРД-Н3', '10.1.1.31', 50031, MODE.PRD_H],
|
||||
['ПРД-Н4', '10.1.1.41', 50041, MODE.PRD_H],
|
||||
['ПРД-В1', '10.1.1.12', 50012, MODE.PRD_B],
|
||||
['ПРД-В2', '10.1.1.22', 50022, MODE.PRD_B],
|
||||
['ПРД-В3', '10.1.1.32', 50032, MODE.PRD_B],
|
||||
['ПРД-В4', '10.1.1.42', 50042, MODE.PRD_B],
|
||||
['ПРД-К1', '10.1.1.13', 50013, MODE.PRD_K],
|
||||
['ПРД-К2', '10.1.1.23', 50023, MODE.PRD_K],
|
||||
['ПРД-К3', '10.1.1.33', 50033, MODE.PRD_K],
|
||||
['ПРД-К4', '10.1.1.43', 50043, MODE.PRD_K]]
|
||||
['ПРД-Н1', '10.1.1.11', 50011, MODE.PRD_H, '10.1.2.18', '10.1.2.19', ''],
|
||||
['ПРД-Н2', '10.1.1.21', 50021, MODE.PRD_H, '10.1.2.34', '10.1.2.35', ''],
|
||||
['ПРД-Н3', '10.1.1.31', 50031, MODE.PRD_H, '10.1.2.50', '10.1.2.51', ''],
|
||||
['ПРД-Н4', '10.1.1.41', 50041, MODE.PRD_H, '10.1.2.66', '10.1.2.67', ''],
|
||||
['ПРД-В1', '10.1.1.12', 50012, MODE.PRD_B, '10.1.2.20', '10.1.2.21', ''],
|
||||
['ПРД-В2', '10.1.1.22', 50022, MODE.PRD_B, '10.1.2.36', '10.1.2.37', ''],
|
||||
['ПРД-В3', '10.1.1.32', 50032, MODE.PRD_B, '10.1.2.52', '10.1.2.53', ''],
|
||||
['ПРД-В4', '10.1.1.42', 50042, MODE.PRD_B, '10.1.2.68', '10.1.2.69', ''],
|
||||
['ПРД-К1', '10.1.1.13', 50013, MODE.PRD_K, '10.1.2.22', '10.1.2.23', '10.1.2.17'],
|
||||
['ПРД-К2', '10.1.1.23', 50023, MODE.PRD_K, '10.1.2.38', '10.1.2.39', '10.1.2.33'],
|
||||
['ПРД-К3', '10.1.1.33', 50033, MODE.PRD_K, '10.1.2.54', '10.1.2.55', '10.1.2.49'],
|
||||
['ПРД-К4', '10.1.1.43', 50043, MODE.PRD_K, '10.1.2.70', '10.1.2.71', '10.1.2.65']]
|
||||
const INPUT_EMS_G: Array = [
|
||||
'01 :34',
|
||||
'02 :35',
|
||||
@@ -86,8 +86,103 @@ const OUT_x128: Array = [
|
||||
'К',
|
||||
'0',
|
||||
'1',]
|
||||
|
||||
|
||||
const RAY_DICT: Array = [
|
||||
' Контроль',
|
||||
' -5°',
|
||||
' 5°',
|
||||
' 15°',
|
||||
' 25°',
|
||||
' 35°',
|
||||
' 45°',
|
||||
]
|
||||
const SIGNS_PRD: Array = [
|
||||
## ПРК-К
|
||||
[
|
||||
' Запрет СИ6',
|
||||
' Запрет СИ7',
|
||||
' Запрет СИ1',
|
||||
'ЛИТЕРА 6! ПРД-К',
|
||||
'ЛИТЕРА 7! ПРД-К',
|
||||
'СЗИ6 от УФ',
|
||||
'СЗИ7 от УФ',
|
||||
'СИ6 от ФС',
|
||||
'СИ7 от ФС',
|
||||
'СИ6 в УФ',
|
||||
'СИ7 в УФ',
|
||||
'МАА №1',
|
||||
'МАА №2',
|
||||
'ИП9-50 №1',
|
||||
'ИП9-50 №2',
|
||||
'ИП12-50 №1',
|
||||
'ИП9-50 №3',
|
||||
'ИП12-50 №2',
|
||||
'ИП5-25',
|
||||
],
|
||||
## ПРК-В
|
||||
[
|
||||
' Запрет СИ4',
|
||||
' Запрет СИ5',
|
||||
'',
|
||||
'ЛИТЕРА 4! ПРД-В',
|
||||
'ЛИТЕРА 5! ПРД-В',
|
||||
'СЗИ4 от УФ',
|
||||
'СЗИ5 от УФ',
|
||||
'СИ4 от ФС',
|
||||
'СИ5 от ФС',
|
||||
'СИ4 в УФ',
|
||||
'СИ5 в УФ',
|
||||
'МАА №1',
|
||||
'МАА №2',
|
||||
'ИП9-50 №1',
|
||||
'ИП9-50 №2',
|
||||
'ИП12-50 №1',
|
||||
'-',
|
||||
'-',
|
||||
'ИП5-25',
|
||||
],
|
||||
## ПРК-Н
|
||||
[
|
||||
' Запрет СИ2',
|
||||
' Запрет СИ3',
|
||||
'',
|
||||
'ЛИТЕРА 2! ПРД-Н',
|
||||
'ЛИТЕРА 3! ПРД-Н',
|
||||
'СЗИ2 от УФ',
|
||||
'СЗИ3 от УФ',
|
||||
'СИ2 от ФС',
|
||||
'СИ3 от ФС',
|
||||
'СИ2 в УФ',
|
||||
'СИ3 в УФ',
|
||||
'МАА №1',
|
||||
'МАА №2',
|
||||
'ИП9-50 №1',
|
||||
'ИП9-50 №2',
|
||||
'ИП12-50 №1',
|
||||
'-',
|
||||
'-',
|
||||
'ИП5-25',
|
||||
],
|
||||
]
|
||||
var NODE_MAP = {
|
||||
'TabContainer/PRD/Grid/Zapret': 0,
|
||||
'TabContainer/PRD/Grid/Zapret2': 1,
|
||||
'TabContainer/PRD/Grid/LABEL': 3,
|
||||
'TabContainer/PRD/Grid/LABEL2': 4,
|
||||
'TabContainer/ControlPanel/Signal_EMS_G/ref_A22': 5,
|
||||
'TabContainer/ControlPanel/Signal_EMS_G/ref_A23': 6,
|
||||
'TabContainer/ControlPanel/Signal_EMS_G/ref_A26': 7,
|
||||
'TabContainer/ControlPanel/Signal_EMS_G/ref_A27': 8,
|
||||
'TabContainer/ControlPanel/Signal_EMS_G/ref_A28': 9,
|
||||
'TabContainer/ControlPanel/Signal_EMS_G/ref_A29': 10,
|
||||
'TabContainer/ControlPanel/kasseta_p_1/ref_A23': 11,
|
||||
'TabContainer/ControlPanel/kasseta_p_1/ref_A24': 12,
|
||||
'TabContainer/ControlPanel/kasseta_p_1/ref_A25': 13,
|
||||
'TabContainer/ControlPanel/kasseta_p_1/ref_A26': 14,
|
||||
'TabContainer/ControlPanel/kasseta_p_1/ref_A27': 15,
|
||||
'TabContainer/ControlPanel/kasseta_p_1/ref_A28': 16,
|
||||
'TabContainer/ControlPanel/kasseta_p_1/ref_A29': 17,
|
||||
'TabContainer/ControlPanel/kasseta_p_1/ref_A30': 18,
|
||||
}
|
||||
enum MODE {
|
||||
PRD_K,
|
||||
PRD_B,
|
||||
@@ -117,6 +212,64 @@ enum STATE {
|
||||
READ_ISA,
|
||||
WRITE_ISA,
|
||||
DONE,
|
||||
IDLE,
|
||||
SEND,
|
||||
}
|
||||
|
||||
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,
|
||||
SET_CARRIER = 0x1E,
|
||||
READ_ATT = 0x1A,
|
||||
SET_ATT = 0x1B,
|
||||
READ_GEN_STATUS = 0x05,
|
||||
SET_GEN_STATUS = 0x06,
|
||||
BASE_GET_CURRENT_TEMP = 0x36,
|
||||
}
|
||||
|
||||
229
scripts/ems_g.gd
Normal file
229
scripts/ems_g.gd
Normal file
@@ -0,0 +1,229 @@
|
||||
extends Panel
|
||||
var node_select1: Node
|
||||
var shift: int = 2
|
||||
var button_link_meta: Dictionary = {}
|
||||
|
||||
|
||||
func _on_read_ems_g():
|
||||
$load_boadr.visible = true
|
||||
Constants.EMS_G_PORT_DATA_HOLDER.clear()
|
||||
for i_input in 16:
|
||||
Network.write_port_isa(Constants.EMS_G_BASE_ADDR+2, 1+i_input)
|
||||
Network.read_port_isa([Constants.EMS_G_BASE_ADDR+0xA])
|
||||
|
||||
for i_output in range(46, 62):
|
||||
Network.write_port_isa(Constants.EMS_G_BASE_ADDR+2, 1+i_output)
|
||||
Network.read_port_isa([Constants.EMS_G_BASE_ADDR+4, Constants.EMS_G_BASE_ADDR+8])
|
||||
|
||||
|
||||
func _on_sync():
|
||||
for index in 32:
|
||||
var tmp_device_mode = Constants.EMS_G_PORT_DATA_HOLDER[index][0]
|
||||
if tmp_device_mode > 46:
|
||||
var port0x124: int
|
||||
var port0x128: int
|
||||
for key in Constants.EMS_G_PORT_DATA_HOLDER[index][1].keys():
|
||||
if key == 0x124:
|
||||
port0x124 = Constants.EMS_G_PORT_DATA_HOLDER[index][1][key]
|
||||
for row in 16:
|
||||
if (port0x124 & (1 << row)) != 0:
|
||||
var chk_btn = node_select1.get_node2(tmp_device_mode-45, row+3).get_child(1, false)
|
||||
chk_btn.button_pressed =true
|
||||
if key == 0x128:
|
||||
port0x128 = Constants.EMS_G_PORT_DATA_HOLDER[index][1][key]
|
||||
var list = node_select1.get_node2(tmp_device_mode-45, 0)
|
||||
var select = 0 if port0x128 == 0 else 1 if port0x128 == 0x2000 else 2 if port0x128 == 0x4000 else 3
|
||||
list.select(select)
|
||||
$load_boadr.visible = false
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
node_select1 = $table1
|
||||
var EMS_G_TABLE: Array
|
||||
for i_row in Constants.INPUT_EMS_G.size() + shift + 1:
|
||||
var column: Array
|
||||
for out_colum in Constants.OUT_EMS_G.size()+shift:
|
||||
if out_colum > 1 and i_row ==0:
|
||||
column.append(Constants.TableList)
|
||||
elif out_colum > 1 and i_row > 2:
|
||||
column.append(Constants.Switch)
|
||||
elif (out_colum == 1 and i_row > 2) or (out_colum > 1 and i_row == 2):
|
||||
column.append(Constants.SocketStatus)
|
||||
else:
|
||||
column.append(Constants.TableNode)
|
||||
EMS_G_TABLE.append(column)
|
||||
|
||||
draw_tabl(node_select1, EMS_G_TABLE, EMS_G_TABLE.size())
|
||||
|
||||
node_select1.get_node2(1, 1).text = 'x3_ВЫХ:GND'
|
||||
node_select1.get_node2(0, 2).text = 'x3_ВХ :GND'
|
||||
for i in Constants.INPUT_EMS_G.size():
|
||||
node_select1.get_node2(0, i+shift+1).text = Constants.INPUT_EMS_G[i]
|
||||
|
||||
for i in Constants.OUT_EMS_G.size():
|
||||
node_select1.get_node2(i+shift, 1).text = Constants.OUT_EMS_G[i][1]
|
||||
|
||||
for i in EMS_G_TABLE[0].size()-shift:
|
||||
var list = node_select1.get_node2(i+shift, 0)
|
||||
list.set_meta('device', Constants.OUT_EMS_G[i][0])
|
||||
list.connect('item_selected', Callable(self, 'on_mode_link').bind(list))
|
||||
for k in Constants.OUT_x128.size():
|
||||
list.add_item(Constants.OUT_x128[k])
|
||||
|
||||
var columns_min_size: Array
|
||||
for i in EMS_G_TABLE[0].size():
|
||||
if i < 2:
|
||||
columns_min_size.append(110)
|
||||
else:
|
||||
columns_min_size.append(80)
|
||||
node_select1.set_columns_min_size(columns_min_size)
|
||||
|
||||
var parrent_NODE2 = get_parent().get_parent()
|
||||
parrent_NODE2.connect('read_ems_g_start', Callable(self, '_on_read_ems_g'))
|
||||
parrent_NODE2.connect('read_ems_g_finish', Callable(self, '_on_sync'))
|
||||
Network.connect('yau_receive', Callable(self, '_on_data_received'))
|
||||
create_link_button(node_select1, shift+1, 16+shift+1, shift, 16+shift)
|
||||
|
||||
|
||||
func draw_tabl(tbl, row: Array, count_row: int):
|
||||
for i_row in count_row:
|
||||
tbl.add_row(row[i_row])
|
||||
|
||||
|
||||
func _on_data_received(data_from_yau_07):
|
||||
var in_blank: int = data_from_yau_07.decode_u16(Constants.DataIndices.IN_BLANK_PRD)
|
||||
var in_imp: int = data_from_yau_07.decode_u16(Constants.DataIndices.IN_IMPULS_PRD)
|
||||
var out_blank: int = data_from_yau_07.decode_u16(Constants.DataIndices.OUT_BLANK_PRD)
|
||||
var out_imp: int = data_from_yau_07.decode_u16(Constants.DataIndices.OUT_IMPULS_PRD)
|
||||
var parent_node2 = get_parent().get_parent()
|
||||
|
||||
process_sockets_vert(in_blank, in_imp, 16, 1, parent_node2)
|
||||
process_sockets_horizon(out_blank, out_imp, 16, 2, parent_node2)
|
||||
|
||||
|
||||
func process_sockets_horizon(blank: int, imp: int, count: int, col: int, parent_node2: Node):
|
||||
for i in count:
|
||||
var socket_status = node_select1.get_node2(col+i, shift).get_child(1, false)
|
||||
var frame_type = Constants.Frame.WORK
|
||||
|
||||
if (blank & (1 << i)) != 0:
|
||||
frame_type = Constants.Frame.CONSTANT
|
||||
elif (imp & (1 << i)) != 0:
|
||||
frame_type = Constants.Frame.VARIABLE
|
||||
|
||||
set_frame(socket_status, frame_type)
|
||||
|
||||
if i == 1:
|
||||
set_frame(get_specific_node(parent_node2, 5), frame_type)
|
||||
if i == 2:
|
||||
set_frame(get_specific_node(parent_node2, 6), frame_type)
|
||||
if i == 4:
|
||||
set_frame(get_specific_node(parent_node2, 7), frame_type)
|
||||
if i == 5:
|
||||
set_frame(get_specific_node(parent_node2, 8), frame_type)
|
||||
if i == 9:
|
||||
set_frame(get_specific_node(parent_node2, 9), frame_type)
|
||||
|
||||
|
||||
func process_sockets_vert(blank: int, imp: int, count: int, col: int, parent_node2: Node):
|
||||
for i in count:
|
||||
var socket_status = node_select1.get_node2(col, i + shift+1).get_child(1, false)
|
||||
var frame_type = Constants.Frame.WORK
|
||||
|
||||
if (blank & (1 << i)) != 0:
|
||||
frame_type = Constants.Frame.CONSTANT
|
||||
elif (imp & (1 << i)) != 0:
|
||||
frame_type = Constants.Frame.VARIABLE
|
||||
|
||||
set_frame(socket_status, frame_type)
|
||||
|
||||
if i == 1:
|
||||
set_frame(get_specific_node(parent_node2, 1), frame_type)
|
||||
if i == 2:
|
||||
set_frame(get_specific_node(parent_node2, 2), frame_type)
|
||||
if i == 9:
|
||||
set_frame(get_specific_node(parent_node2, 3), frame_type)
|
||||
if i == 10:
|
||||
set_frame(get_specific_node(parent_node2, 4), frame_type)
|
||||
|
||||
|
||||
func get_specific_node(parent_node2: Node, child_index: int)-> Node:
|
||||
return parent_node2.get_child(3, false).get_child(1).get_child(5).get_child(child_index).get_child(3)
|
||||
|
||||
|
||||
func _process(_delta: float) -> void:
|
||||
pass
|
||||
|
||||
|
||||
func set_frame(node: Node, val: int): node.set_frame(val)
|
||||
|
||||
|
||||
func set_init():
|
||||
pass
|
||||
|
||||
|
||||
## Создает связь между кнопками
|
||||
func create_link_button(node, count_rows_sart: int, count_rows_end: int, coln_start: int, coln_end: int):
|
||||
## META_EMS_G[[Номер входа, Номер выхода]]
|
||||
var META_EMS_G: Array = []
|
||||
for i_row in 16:
|
||||
var INPUT = 1
|
||||
var OUTPUT = 47
|
||||
for i_colum in 16:
|
||||
META_EMS_G.append([INPUT+i_row, OUTPUT+i_colum])
|
||||
button_link_meta[OUTPUT+i_colum] = 0
|
||||
|
||||
var count_register = 0
|
||||
for i_row in range(count_rows_sart, count_rows_end):
|
||||
for i_col in range (coln_start, coln_end):
|
||||
var chk_node = node.get_node2(i_col, i_row)
|
||||
var mouse_area = chk_node.get_child(0, false)
|
||||
var chk_btn = chk_node.get_child(1, false)
|
||||
mouse_area.connect('mouse_entered', Callable(self, 'on_mouse_entered').bind(chk_btn))
|
||||
chk_btn.connect('mouse_entered', Callable(self, 'on_mouse_entered').bind(chk_btn))
|
||||
chk_btn.connect('toggled', Callable(self, '_on_btn_connect').bind(chk_btn))
|
||||
chk_btn.set_meta('device', META_EMS_G[count_register])
|
||||
count_register += 1
|
||||
|
||||
|
||||
func on_mouse_entered(meta_area):
|
||||
var device = meta_area.get_meta('device')
|
||||
var y = device[0] + 1
|
||||
var x = device[1] - 45
|
||||
|
||||
for i_y in 18:
|
||||
for i_x in 18:
|
||||
if i_y <= y and i_x <= x and i_y == y:
|
||||
var chest = $table1.get_node2(i_x, i_y+1).get_child(0, false)
|
||||
chest.color = Color(0.45, 0.36, 0.36, 0.5)
|
||||
elif i_y <= y and i_x <= x and i_x == x:
|
||||
var chest = $table1.get_node2(i_x, i_y+1).get_child(0, false)
|
||||
chest.color = Color(0.45, 0.36, 0.36, 0.5)
|
||||
else:
|
||||
var black = $table1.get_node2(i_x, i_y+1).get_child(0, false)
|
||||
black.color = Color(0, 0, 0, 0.0)
|
||||
|
||||
|
||||
func on_mode_link(mode, list):
|
||||
## Формирование команды для выбора устройства
|
||||
var meta = list.get_meta('device')
|
||||
var address_port_wr = Constants.EMS_G_BASE_ADDR+2
|
||||
Network.write_port_isa(address_port_wr, meta) # Отправка команды
|
||||
|
||||
## Формирование команды для отправкы команды на устройство
|
||||
address_port_wr = Constants.EMS_G_BASE_ADDR+8
|
||||
var set_mode = 0x0000 if mode == 0 else 0x2000 if mode == 1 else 0x4000 if mode == 2 else 0x8000
|
||||
Network.write_port_isa(address_port_wr, set_mode)
|
||||
|
||||
|
||||
func _on_btn_connect(toggled_on: bool, chk_btn: Node):
|
||||
## Формирование команды для выбора устройства
|
||||
var meta = chk_btn.get_meta('device')
|
||||
Network.write_port_isa(Constants.EMS_G_BASE_ADDR+2, meta[1]) # Отправка команды
|
||||
## Формирование команды для отправкы команды на устройство
|
||||
if toggled_on:
|
||||
button_link_meta[meta[1]] += 1 << meta[0]-1
|
||||
else:
|
||||
button_link_meta[meta[1]] -= 1 << meta[0]-1
|
||||
|
||||
Network.write_port_isa(Constants.EMS_G_BASE_ADDR+4, button_link_meta[meta[1]])
|
||||
213
scripts/modul_fs.gd
Normal file
213
scripts/modul_fs.gd
Normal file
@@ -0,0 +1,213 @@
|
||||
extends Node
|
||||
|
||||
var counter: int = 0
|
||||
const INDEX_SIZE = 0xC
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
pass
|
||||
|
||||
|
||||
func _process(_delta: float) -> void:
|
||||
pass
|
||||
|
||||
|
||||
func _enter_tree() -> void:
|
||||
# Подключаем сигналы к методам
|
||||
Network.connect('data_send', _on_data_send)
|
||||
Network.connect('data_received', _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_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 _form_packet(group, cmd, data = null):
|
||||
var packet = PackedByteArray()
|
||||
packet.resize(INDEX_SIZE)
|
||||
packet.encode_u8(0, group)
|
||||
packet.encode_u8(1, cmd)
|
||||
packet.encode_u32(4, counter)
|
||||
counter += 1
|
||||
if data:
|
||||
packet.encode_float(8, data)
|
||||
var crc = crc32(packet)
|
||||
packet.resize(INDEX_SIZE + 4)
|
||||
packet.encode_u32(INDEX_SIZE, crc)
|
||||
return packet
|
||||
|
||||
|
||||
func start_session():
|
||||
counter = 0
|
||||
var index_size = 0xC
|
||||
var GROUP = Constants.GROUP.BASE
|
||||
var CMD = Constants.CMD.START_SESSION
|
||||
var prep_pack: PackedByteArray = PackedByteArray()
|
||||
prep_pack.resize(index_size)
|
||||
prep_pack.encode_u8(0x0, GROUP)
|
||||
prep_pack.encode_u8(0x1, CMD)
|
||||
prep_pack.encode_u32(0x4, counter)
|
||||
counter += 1
|
||||
var crc = crc32(prep_pack)
|
||||
prep_pack.resize(index_size + 4)
|
||||
prep_pack.encode_u32(index_size, crc)
|
||||
Network.command_stack.append(prep_pack)
|
||||
get_gen_state()
|
||||
get_att_batch()
|
||||
get_carrier()
|
||||
|
||||
|
||||
func set_gen_state(button_state: bool):
|
||||
var index_size = 0x1C
|
||||
var GROUP = Constants.GROUP.GENERATOR
|
||||
var CMD = Constants.CMD.SET_GEN_STATUS
|
||||
var prep_pack: PackedByteArray = PackedByteArray()
|
||||
prep_pack.resize(index_size)
|
||||
|
||||
prep_pack.encode_u8(0x0, GROUP)
|
||||
prep_pack.encode_u8(0x1, CMD)
|
||||
prep_pack.encode_u32(0x4, counter)
|
||||
counter += 1
|
||||
prep_pack.encode_u16(0x8, 0x0010)
|
||||
prep_pack.encode_u32(0xC, button_state) ## MODE GEN STATUS
|
||||
var crc = crc32(prep_pack)
|
||||
prep_pack.resize(index_size + 4)
|
||||
prep_pack.encode_u32(index_size, crc)
|
||||
|
||||
Network.command_stack.append(prep_pack)
|
||||
get_gen_state()
|
||||
|
||||
|
||||
func set_carrier(wr_freq):
|
||||
var index_size = 0x1C
|
||||
var GROUP = Constants.GROUP.BASE
|
||||
var CMD = Constants.CMD.SET_CARRIER
|
||||
var prep_pack: PackedByteArray = PackedByteArray()
|
||||
prep_pack.resize(index_size)
|
||||
|
||||
prep_pack.encode_u8(0x0, GROUP)
|
||||
prep_pack.encode_u8(0x1, CMD)
|
||||
prep_pack.encode_u32(0x4, counter)
|
||||
counter += 1
|
||||
prep_pack.encode_u16(0x8, 0x10)
|
||||
prep_pack.encode_u64(0xC, wr_freq) ## uint64_t freq low dword/high dword
|
||||
var crc = crc32(prep_pack)
|
||||
prep_pack.resize(index_size + 4)
|
||||
prep_pack.encode_u32(index_size, crc)
|
||||
|
||||
Network.command_stack.append(prep_pack)
|
||||
|
||||
|
||||
func set_att_batch(att):
|
||||
var index_size = 0x1C
|
||||
var GROUP = Constants.GROUP.RF
|
||||
var CMD = Constants.CMD.SET_ATT
|
||||
var prep_pack: PackedByteArray = PackedByteArray()
|
||||
prep_pack.resize(index_size)
|
||||
|
||||
prep_pack.encode_u8(0x0, GROUP)
|
||||
prep_pack.encode_u8(0x1, CMD)
|
||||
prep_pack.encode_u32(0x4, counter)
|
||||
counter += 1
|
||||
prep_pack.encode_u16(0x8, 0x10)
|
||||
prep_pack.encode_float(0x18, att)
|
||||
|
||||
var crc = crc32(prep_pack)
|
||||
prep_pack.resize(index_size + 4)
|
||||
prep_pack.encode_u32(index_size, crc)
|
||||
|
||||
Network.command_stack.append(prep_pack)
|
||||
|
||||
|
||||
func get_carrier():
|
||||
var packet = _form_packet(Constants.GROUP.BASE, Constants.CMD.READ_CARRIER)
|
||||
Network.command_stack.append(packet)
|
||||
|
||||
|
||||
func get_att_batch():
|
||||
var packet = _form_packet(Constants.GROUP.RF, Constants.CMD.READ_ATT)
|
||||
Network.command_stack.append(packet)
|
||||
|
||||
|
||||
func get_gen_state():
|
||||
var packet = _form_packet(Constants.GROUP.GENERATOR, Constants.CMD.READ_GEN_STATUS)
|
||||
Network.command_stack.append(packet)
|
||||
|
||||
|
||||
func base_get_current_temp():
|
||||
var packet = _form_packet(Constants.GROUP.BASE, Constants.CMD.BASE_GET_CURRENT_TEMP)
|
||||
Network.command_stack.append(packet)
|
||||
|
||||
|
||||
func crc32(data: PackedByteArray) -> int:
|
||||
var crc = Constants.INIT
|
||||
for byte in data:
|
||||
var index = (crc ^ byte) & 0xFF
|
||||
crc = (Constants.CRC32_TABLE[index] ^ (crc >> 8)) & 0xFFFFFFFF
|
||||
# Возвращаем только последние 4 байта в обратном порядке
|
||||
var final_crc = crc ^ Constants.FINAL_XOR_VALUE
|
||||
return final_crc
|
||||
|
||||
|
||||
func _on_send_pressed() -> void:
|
||||
get_carrier()
|
||||
|
||||
|
||||
func _on_get_att() -> void:
|
||||
get_att_batch()
|
||||
|
||||
|
||||
func _on_start():
|
||||
#if ServerNode.connect_fs():
|
||||
start_session()
|
||||
base_get_current_temp()
|
||||
|
||||
|
||||
func _on_get_status(toggled_btn):
|
||||
var inverted_state = not toggled_btn
|
||||
set_gen_state(inverted_state)
|
||||
get_gen_state()
|
||||
|
||||
|
||||
func _on_set_ferq():
|
||||
var freq = int($set_space/write_to_set_freq.get_text()) * 1_000_000
|
||||
set_carrier(freq)
|
||||
|
||||
|
||||
func _on_set_att():
|
||||
var att = float($set_space/write_to_set_att.get_text())
|
||||
set_att_batch(att)
|
||||
@@ -1,26 +1,41 @@
|
||||
extends Node
|
||||
|
||||
# ЯУ-07 Блок
|
||||
var unit = Yau07.YaU07.new('ЯУ07')
|
||||
var soc_unicast: Socket
|
||||
var soc_brodcast: Socket
|
||||
var ip_address: String = Constants.ADDRESSES[0][1]
|
||||
var ip_port: int = Constants.ADDRESSES[0][2]
|
||||
var ip_address_yau: String = Constants.ADDRESSES[0][1]
|
||||
var ip_port_yau: int = Constants.ADDRESSES[0][2]
|
||||
var timeout: float = Yau07.ONLINE_TIMEOUT
|
||||
var last_update_time: float = 0.0
|
||||
var broadcast_packet: PackedByteArray
|
||||
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 peerstream: PacketPeer
|
||||
|
||||
signal yau_status_line(_status) ## Вызывается когда меняется состояние связи с ячейкой
|
||||
signal yau_receive(_data_from_yau) ##
|
||||
signal yau_receive(_data_from_yau)
|
||||
signal yau_read_isa(_unit_isa_ports)
|
||||
|
||||
signal data_send()
|
||||
signal data_received(data:PackedByteArray)
|
||||
signal port_opened(port_name: String)
|
||||
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):
|
||||
self.set_dest_address(addr, port)
|
||||
self.put_packet(data)
|
||||
|
||||
|
||||
|
||||
func poll_receive(sock: Socket) -> bool: ## Приёмник
|
||||
if timeout - last_update_time > 0:
|
||||
@@ -29,7 +44,7 @@ func poll_receive(sock: Socket) -> bool: ## Приёмник
|
||||
var addr_receive = sock.get_packet_ip()
|
||||
var port_receive = sock.get_packet_port()
|
||||
|
||||
if (ip_address == addr_receive) and (ip_port == port_receive):
|
||||
if (ip_address_yau == addr_receive) and (ip_port_yau == port_receive):
|
||||
last_update_time = 0.0
|
||||
unit.parse(broadcast_packet)
|
||||
var data_from_yau_07 = unit.status
|
||||
@@ -40,6 +55,19 @@ func poll_receive(sock: Socket) -> bool: ## Приёмник
|
||||
return false
|
||||
|
||||
|
||||
func work_proc():
|
||||
client_fs_1.poll()
|
||||
var peer = peerstream.get_stream_peer()
|
||||
if not peer:
|
||||
return
|
||||
var peer_len_data = peer.get_available_bytes()
|
||||
if peer_len_data > 0:
|
||||
emit_signal("port_opened", ip_fs_1) # Эмитируем сигнал об открытии порта
|
||||
get_data_fs(peer)
|
||||
else:
|
||||
pass
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
# Привязка для принятия широковещательного канала
|
||||
soc_brodcast = Socket.new()
|
||||
@@ -50,23 +78,33 @@ func _ready() -> void:
|
||||
soc_unicast = Socket.new()
|
||||
rc = soc_unicast.bind(Constants.UNICAST_PORT, Constants.UNICAST_ADDRESS)
|
||||
if rc != OK:
|
||||
print_debug('Ошибка: неудачная привязка адреса: ', ip_address)
|
||||
print_debug('Ошибка: неудачная привязка адреса: ', ip_address_yau)
|
||||
|
||||
unit.connect('line_changed', Callable(self, 'on_line_changed'))
|
||||
unit.connect('command_fail', Callable(self, 'on_command_fail'))
|
||||
connect_fs()
|
||||
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
if client_fs_1:
|
||||
## State fs machine
|
||||
if (state_fs == Constants.STATE.IDLE) or (state_fs == Constants.STATE.DONE):
|
||||
if command_stack:
|
||||
var pack = command_stack.pop_front()
|
||||
send_data(pack)
|
||||
state_fs = Constants.STATE.SEND
|
||||
work_proc()
|
||||
|
||||
last_update_time += delta
|
||||
poll_receive(soc_brodcast)
|
||||
poll_receive(soc_unicast)
|
||||
state_machine()
|
||||
state_machine_yau07()
|
||||
match unit.process(delta):
|
||||
Error.OK: soc_unicast.send_to(ip_address, ip_port, unit.tx_data.slice(0, unit.tx_len))
|
||||
Error.OK: soc_unicast.send_to(ip_address_yau, ip_port_yau, unit.tx_data.slice(0, unit.tx_len))
|
||||
Error.FAILED: print_debug('Ошибка отправки данных')
|
||||
|
||||
|
||||
func state_machine():
|
||||
func state_machine_yau07():
|
||||
var fl_done = (unit.cmd_state == unit.CmdState.DONE or unit.cmd_state == unit.CmdState.FAIL)
|
||||
## Режим ожидания
|
||||
match state:
|
||||
@@ -90,22 +128,19 @@ func state_machine():
|
||||
if fl_done:
|
||||
emit_signal('yau_read_isa', unit.isa_ports)
|
||||
state = Constants.STATE.WAIT
|
||||
|
||||
|
||||
|
||||
# Записать команду в ИСА
|
||||
func read_port_isa(read_ports: Array) -> void:
|
||||
send_array.append(['rd', read_ports])
|
||||
|
||||
|
||||
# Прочитать данные из порта от ИСА
|
||||
func write_port_isa(port_isa: int, data_isa: int) -> void:
|
||||
var write_data: Dictionary = {port_isa: data_isa}
|
||||
send_array.append(['wr', write_data])
|
||||
|
||||
|
||||
func on_command_change_device(meta_device):
|
||||
ip_address = meta_device[0]
|
||||
ip_port = meta_device[1]
|
||||
|
||||
|
||||
func on_line_changed(_unit) -> void:
|
||||
emit_signal('yau_status_line', unit.online)
|
||||
|
||||
@@ -113,3 +148,50 @@ func on_line_changed(_unit) -> void:
|
||||
## Ессли отсутствует подключение к ячейке ЯУ-07
|
||||
func on_command_fail(_unit) -> void:
|
||||
print_debug('Command send fail')
|
||||
|
||||
|
||||
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_3 = meta_device[5]
|
||||
connect_fs()
|
||||
|
||||
|
||||
# Подключится к модулю ФС
|
||||
func connect_fs():
|
||||
client_fs_1 = StreamPeerTCP.new()
|
||||
peerstream = PacketPeerStream.new()
|
||||
var rc = client_fs_1.connect_to_host(ip_fs_1, Constants.PORT_FS)
|
||||
if rc!= Error.OK:
|
||||
emit_signal("port_error", ip_fs_1)
|
||||
else:
|
||||
peerstream.set_stream_peer(client_fs_1)
|
||||
|
||||
|
||||
# Получить данные от ФС
|
||||
func get_data_fs(peer):
|
||||
var rx_data: PackedByteArray
|
||||
var len_data_in_buf = peer.get_available_bytes()
|
||||
if len_data_in_buf > 0:
|
||||
rx_data.append_array(peer.get_data(len_data_in_buf)[1])
|
||||
emit_signal("data_received", rx_data)
|
||||
if state_fs == Constants.STATE.SEND:
|
||||
state_fs = Constants.STATE.DONE
|
||||
|
||||
|
||||
# Отправить команду для ФС
|
||||
func send_data(data_to_sand):
|
||||
if client_fs_1.get_status() == 2:
|
||||
var peer = peerstream.get_stream_peer()
|
||||
if peer:
|
||||
peer.put_data(data_to_sand)
|
||||
emit_signal("data_send")
|
||||
|
||||
|
||||
# Разорвать соединение с ФС
|
||||
#func disconnect_fs():
|
||||
#client_fs_1.disconnect_from_host()
|
||||
#state_fs = Constants.STATE.IDLE
|
||||
#peerstream = PacketPeerStream.new()
|
||||
|
||||
Reference in New Issue
Block a user