temp debug
This commit is contained in:
315
PRD.gd
315
PRD.gd
@@ -1,315 +0,0 @@
|
||||
extends Node2D
|
||||
|
||||
var unit = Yau07.YaU07.new('ЯУ07')
|
||||
var soc_unicast: Socket
|
||||
var soc_brodcast: Socket
|
||||
var address: String = Constants.ADDRESSES[0][1]
|
||||
var port: int = Constants.ADDRESSES[0][2]
|
||||
var flag_mode = Constants.ADDRESSES[0][3]
|
||||
var send_array: Array = []
|
||||
var broadcast_packet: PackedByteArray
|
||||
var node_select1: Node
|
||||
var node_select2: Node
|
||||
var timeout: float = Yau07.ONLINE_TIMEOUT
|
||||
var last_update_time: float = 0.0
|
||||
var flag_yau_control: bool
|
||||
var CONTROL_TABLE: Array
|
||||
var state = Constants.STATE.WAIT
|
||||
var flag_read_isa: bool = false
|
||||
|
||||
|
||||
## Класс для отправки данных в сокет
|
||||
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:
|
||||
while sock.get_available_packet_count() > 0:
|
||||
broadcast_packet = sock.get_packet()
|
||||
var addr_receive = sock.get_packet_ip()
|
||||
var port_receive = sock.get_packet_port()
|
||||
|
||||
if (address == addr_receive) and (port == port_receive):
|
||||
$control_dev/control_tbl.get_node2(0, 0).text = 'ЯУ-07Б НА СВЯЗИ'
|
||||
$control_dev/control_tbl.get_node2(0, 0).modulate = Color.GREEN
|
||||
last_update_time = 0.0
|
||||
unit.parse(broadcast_packet)
|
||||
else:
|
||||
if sock.get_available_packet_count():
|
||||
last_update_time = 0.0
|
||||
else:
|
||||
$control_dev/control_tbl.get_node2(0, 0).text = 'НЕТ СВЯЗИ С ЯУ-07Б'
|
||||
$control_dev/control_tbl.get_node2(0, 0).modulate = Color.RED
|
||||
return false
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
# Таблица УКП_1
|
||||
node_select1 = $scroll1/table1
|
||||
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 = $scroll2/table2
|
||||
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 = $select_dev/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.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])
|
||||
|
||||
# Контроль
|
||||
var node_control_device = $control_dev/control_tbl
|
||||
for i in Constants.CONTROL_DEVICE.size():
|
||||
CONTROL_TABLE.append([Constants.TableNode])
|
||||
draw_tabl(node_control_device, CONTROL_TABLE, CONTROL_TABLE.size())
|
||||
for i in Constants.CONTROL_DEVICE.size():
|
||||
node_control_device.get_node2(0, i).text = Constants.CONTROL_DEVICE[i]
|
||||
node_control_device.set_columns_min_size([300])
|
||||
|
||||
# Привязка для принятия широковещательного канала
|
||||
soc_brodcast = Socket.new()
|
||||
var rc = soc_brodcast.bind(Constants.BROADCAST_PORT, '*')
|
||||
if rc != OK:
|
||||
print('Ошибка: Неудачная привязка широковещательного адреса')
|
||||
|
||||
soc_unicast = Socket.new()
|
||||
rc = soc_unicast.bind(Constants.UNICAST_PORT, Constants.UNICAST_ADDRESS)
|
||||
if rc != OK:
|
||||
print('Ошибка: неудачная привязка адреса: ', address)
|
||||
|
||||
$Zapret.connect('toggled', Callable(self, '_on_zapret').bind($Zapret))
|
||||
$Zapret2.connect('toggled', Callable(self, '_on_zapret').bind($Zapret2))
|
||||
unit.connect('line_changed', Callable(self, 'on_line_changed'))
|
||||
unit.connect('command_fail', Callable(self, 'on_command_fail'))
|
||||
unit.connect('command_done', Callable(self, 'on_command_done'))
|
||||
unit.connect('data_received', Callable(self, 'data_received'))
|
||||
|
||||
## Рисует таблицу
|
||||
func draw_tabl(tbl, row: Array, count_row: int):
|
||||
for i_row in count_row:
|
||||
tbl.add_row(row[i_row])
|
||||
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
last_update_time += delta
|
||||
poll_receive(soc_brodcast)
|
||||
state_machine()
|
||||
match unit.process(delta):
|
||||
Error.OK: soc_unicast.send_to(address, port, unit.tx_data.slice(0, unit.tx_len))
|
||||
Error.FAILED: print('Ошибка отправки данных')
|
||||
|
||||
|
||||
func state_machine():
|
||||
var fl_done = (unit.cmd_state == unit.CmdState.DONE)
|
||||
## Режим ожидания
|
||||
if state == Constants.STATE.WAIT and fl_done:
|
||||
|
||||
if flag_read_isa:
|
||||
flag_read_isa = false
|
||||
state = Constants.STATE.READ_ISA
|
||||
elif send_array.size():
|
||||
state = Constants.STATE.WRITE_ISA
|
||||
|
||||
## Режим чтения из ИСА
|
||||
elif state == Constants.STATE.READ_ISA and fl_done:
|
||||
unit.send_isa(unit.CmdCode.READ_ISA, [0x122, 0x128])
|
||||
$ISA.text = 'ISA: ' + str(unit.isa_ports)
|
||||
state = Constants.STATE.WAIT
|
||||
## Режим записи в ИСА
|
||||
elif state == Constants.STATE.WRITE_ISA and fl_done:
|
||||
var ports_dict = send_array.pop_front()
|
||||
var key = ports_dict.keys()
|
||||
unit.send_isa(unit.CmdCode.WRITE_ISA, [key[0], ports_dict[key[0]]])
|
||||
state = Constants.STATE.WAIT
|
||||
|
||||
|
||||
func data_received(_unit):
|
||||
var data_from_yau_07 = unit.status
|
||||
var status_board = data_from_yau_07.decode_u8(Constants.DataIndices.STATUS_BOARD)
|
||||
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 dry_contact: int = data_from_yau_07.decode_u16(Constants.DataIndices.DRY_CONTACT) # Контроль сухих контактов (УГ)
|
||||
var DKM: int = data_from_yau_07.decode_u16(Constants.DataIndices.DKM) # ДКМ от УГ
|
||||
|
||||
## УГ
|
||||
#node_select1.set_node_text(2, 0, '%d' % dry_contact)
|
||||
var node_control_device = $control_dev/control_tbl
|
||||
for i in 4:
|
||||
var node_board = node_control_device.get_node2(0, i+2)
|
||||
var j = int(status_board & (1 << i) == 0 and flag_yau_control)
|
||||
node_board.text = Constants.CONTROL_BOARD[i][j]
|
||||
node_board.modulate = [Color.GREEN, Color.RED][j]
|
||||
|
||||
for i in 8:
|
||||
var node_power_supply = node_control_device.get_node2(0, i+6)
|
||||
var j = int(not(dry_contact & (1 << i) == 0 and flag_yau_control))
|
||||
node_power_supply.text = Constants.CONTROL_POWER_SUPPLY[i][j]
|
||||
node_power_supply.modulate = [Color.GREEN, Color.RED][j]
|
||||
|
||||
## EMS G
|
||||
var CONTROL_FRAME = [$control_dev/SZI_x, $control_dev/SZI_x2, $control_dev/SZI_x3, $control_dev/SZI_x4, $control_dev/SZI_x5]
|
||||
for i in 5:
|
||||
var node_ems_g = node_control_device.get_node2(0, i + 14)
|
||||
var j: int = 0
|
||||
var frame = Constants.Frame.WORK
|
||||
|
||||
var in_bit_blank_UF = 1 if Constants.MODE.PRD_H == flag_mode else 3 if Constants.MODE.PRD_K == flag_mode else 6
|
||||
var in_bit_blank_FS = 9 if Constants.MODE.PRD_H == flag_mode else 11 if Constants.MODE.PRD_K == flag_mode else 13
|
||||
|
||||
var in_bit_impuls_UF = 1 if Constants.MODE.PRD_H == flag_mode else 3 if Constants.MODE.PRD_K == flag_mode else 6
|
||||
var in_bit_impuls_FS = 9 if Constants.MODE.PRD_H == flag_mode else 11 if Constants.MODE.PRD_K == flag_mode else 13
|
||||
###
|
||||
var out_bit_blank_UF = 1 if Constants.MODE.PRD_H == flag_mode else 1 if Constants.MODE.PRD_K == flag_mode else 0
|
||||
var out_bit_blank_MODUL = 4 if Constants.MODE.PRD_H == flag_mode else 4 if Constants.MODE.PRD_K == flag_mode else 4
|
||||
var out_bit_blank_FGOZ = 9 if Constants.MODE.PRD_H == flag_mode else 8 if Constants.MODE.PRD_K == flag_mode else 8
|
||||
|
||||
var out_bit_impuls_UF = 1 if Constants.MODE.PRD_H == flag_mode else 1 if Constants.MODE.PRD_K == flag_mode else 0
|
||||
var out_bit_impuls_MODUL = 4 if Constants.MODE.PRD_H == flag_mode else 4 if Constants.MODE.PRD_K == flag_mode else 4
|
||||
var out_bit_impuls_FGOZ = 9 if Constants.MODE.PRD_H == flag_mode else 8 if Constants.MODE.PRD_K == flag_mode else 8
|
||||
|
||||
if (in_blank & (1 << in_bit_blank_UF) != 0) and flag_yau_control:
|
||||
j = 1 if i == 0 else 0
|
||||
frame = Constants.Frame.CONSTANT if i == 0 else Constants.Frame.WORK
|
||||
elif (in_imp & (1 << in_bit_impuls_UF) != 0) and flag_yau_control:
|
||||
j = 1 if i == 0 else 0
|
||||
frame = Constants.Frame.VARIABLE if i == 0 else Constants.Frame.WORK
|
||||
if (in_blank & (1 << in_bit_blank_FS) != 0) and flag_yau_control:
|
||||
j = 1 if i == 1 else 0
|
||||
frame = Constants.Frame.CONSTANT if i == 1 else Constants.Frame.WORK
|
||||
elif (in_imp & (1 << in_bit_impuls_FS) != 0) and flag_yau_control:
|
||||
j = 1 if i == 1 else 0
|
||||
frame = Constants.Frame.VARIABLE if i == 1 else Constants.Frame.WORK
|
||||
if (out_blank & (1 << out_bit_blank_UF) != 0) and flag_yau_control:
|
||||
j = 1 if i == 2 else 0
|
||||
frame = Constants.Frame.CONSTANT if i == 2 else Constants.Frame.WORK
|
||||
elif (out_imp & (1 << out_bit_impuls_UF) != 0) and flag_yau_control:
|
||||
j = 1 if i == 2 else 0
|
||||
frame = Constants.Frame.VARIABLE if i == 2 else Constants.Frame.WORK
|
||||
if (out_blank & (1 << out_bit_blank_MODUL) != 0) and flag_yau_control:
|
||||
j = 1 if i == 3 else 0
|
||||
frame = Constants.Frame.CONSTANT if i == 3 else Constants.Frame.WORK
|
||||
elif (out_imp & (1 << out_bit_impuls_MODUL) != 0) and flag_yau_control:
|
||||
j = 1 if i == 3 else 0
|
||||
frame = Constants.Frame.VARIABLE if i == 3 else Constants.Frame.WORK
|
||||
if (out_blank & (1 << out_bit_blank_FGOZ) != 0) and flag_yau_control:
|
||||
j = 1 if i == 4 else 0
|
||||
frame = Constants.Frame.CONSTANT if i == 4 else Constants.Frame.WORK
|
||||
elif (out_imp & (1 << out_bit_impuls_FGOZ) != 0) and flag_yau_control:
|
||||
j = 1 if i == 4 else 0
|
||||
frame = Constants.Frame.VARIABLE if i == 4 else Constants.Frame.WORK
|
||||
|
||||
node_ems_g.text = Constants.EMS_G[i][j]
|
||||
node_ems_g.modulate = [Color.RED, Color.GREEN][j]
|
||||
set_frame(frame, CONTROL_FRAME[i])
|
||||
|
||||
#node_select1.set_node_text(3, 0, '%d' % DKM)
|
||||
|
||||
## УКП
|
||||
for i in range(8): ## Мощность от УКП_1
|
||||
var power_ukp_1 = data_from_yau_07.decode_u16(Constants.DataIndices.POWER_UKP_1 + 2 * i)
|
||||
node_select1.set_node_text(0, i+1, '%d' % power_ukp_1)
|
||||
|
||||
for i in range(8): ## Температура от УКП_1
|
||||
var temperature_ukp_1 = data_from_yau_07.decode_u16(Constants.DataIndices.TEMPERATURE_UKP_1 + 2 * i)
|
||||
var TMP = Constants.CONST_MIN_TEMP + (Constants.MAXIMUM_CODE_ADC - temperature_ukp_1) * Constants.TEMP
|
||||
node_select1.set_node_text(1, i+1, '%d' % TMP)
|
||||
|
||||
for i in range(8): ## Мощность от УКП_2
|
||||
var power_ukp_2 = data_from_yau_07.decode_u16(Constants.DataIndices.POWER_UKP_2 + 2 * i)
|
||||
node_select2.set_node_text(0, i+1, '%d' % power_ukp_2)
|
||||
|
||||
for row in range(8): ## Температура от УКП_2
|
||||
if len(data_from_yau_07) > 79 + 2 * row:
|
||||
var temperature_ukp_2 = data_from_yau_07.decode_u16(Constants.DataIndices.TEMPERATURE_UKP_2 + 2 * row)
|
||||
var TMP = Constants.CONST_MIN_TEMP + (Constants.MAXIMUM_CODE_ADC - temperature_ukp_2) * Constants.TEMP
|
||||
node_select2.set_node_text(1, row+1, '%d' % TMP)
|
||||
|
||||
|
||||
func set_frame(val: int, node: Node): node.set_frame(val)
|
||||
|
||||
|
||||
#func dec2bin(decimal_value, number_bit):
|
||||
#var binary_string = ''
|
||||
#var count = number_bit
|
||||
#while(count >= 0):
|
||||
#var temp: int = decimal_value >> count
|
||||
#binary_string += '%d' % (temp & 1)
|
||||
#count -= 1
|
||||
#return binary_string
|
||||
|
||||
|
||||
func on_line_changed(_unit) -> void:
|
||||
if unit.online:
|
||||
flag_yau_control = true
|
||||
else:
|
||||
for i in 15:
|
||||
var node_board = $control_dev/control_tbl.get_node2(0, i+1)
|
||||
node_board.modulate = Color.RED
|
||||
flag_yau_control = false
|
||||
|
||||
|
||||
## Ессли отсутствует подключение к ячейке ЯУ-07
|
||||
func on_command_fail(_unit) -> void:
|
||||
print_debug('Command send fail')
|
||||
|
||||
|
||||
## Индикация чтения портов
|
||||
func on_command_done(_unit) -> void:
|
||||
pass
|
||||
|
||||
|
||||
func _on_control_button(toggled_on: bool) -> void:
|
||||
$control_dev.visible = toggled_on
|
||||
$Controlpanel.visible = toggled_on
|
||||
|
||||
|
||||
func on_btn_select(intem_from_sector):
|
||||
var node_select_device = $select_dev/select_dev
|
||||
var get_select_device = node_select_device.get_node2(1, 0)
|
||||
var meta = get_select_device.get_item_metadata(intem_from_sector)
|
||||
address = meta[0]
|
||||
port = meta[1]
|
||||
flag_mode = meta[2]
|
||||
|
||||
|
||||
func fill_item(node, i_column: int, i_row: int, arr: Dictionary, select: int = 0):
|
||||
var optionbutton = node.get_node2(i_column, i_row) as OptionButton
|
||||
for key in arr.keys():
|
||||
var item_text = key + " - " + str(arr[key])
|
||||
optionbutton.add_item(item_text)
|
||||
if select < arr.size():
|
||||
optionbutton.select(select)
|
||||
|
||||
|
||||
func _on_zapret(toggled_on: bool, meta) -> void:
|
||||
var address_port_wr = 0x122
|
||||
var ports_wr: Dictionary = {address_port_wr : meta.get_meta('litera')} ## СИ2, СИ4, СИ6 = 0x30, СИ3, СИ5, СИ7 = 0x31, СИ1 = 0x2F
|
||||
send_array.append(ports_wr)
|
||||
|
||||
ports_wr = {}
|
||||
address_port_wr = 0x128
|
||||
ports_wr[address_port_wr] = 0x4000 if toggled_on else 0x0
|
||||
send_array.append(ports_wr)
|
||||
|
||||
|
||||
func _on_read_isa_pressed() -> void:
|
||||
flag_read_isa = true
|
||||
367
PRD_MP550.tscn
367
PRD_MP550.tscn
@@ -1,6 +1,6 @@
|
||||
[gd_scene load_steps=26 format=3 uid="uid://cvor2jm4xk3ha"]
|
||||
[gd_scene load_steps=39 format=3 uid="uid://cvor2jm4xk3ha"]
|
||||
|
||||
[ext_resource type="Script" path="res://PRD.gd" id="1_v273n"]
|
||||
[ext_resource type="Script" path="res://scripts/PRD.gd" id="1_v273n"]
|
||||
[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="Shader" path="res://Shaders/ray.gdshader" id="4_uy5o2"]
|
||||
@@ -62,12 +62,40 @@ corner_radius_bottom_left = 3
|
||||
corner_detail = 3
|
||||
anti_aliasing = false
|
||||
|
||||
[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/disabled = SubResource("StyleBoxFlat_ewq4n")
|
||||
Button/styles/focus = SubResource("StyleBoxFlat_wlyk3")
|
||||
Button/styles/hover = SubResource("StyleBoxFlat_2vbj6")
|
||||
Button/styles/normal = SubResource("StyleBoxFlat_dm3xa")
|
||||
Button/styles/pressed = SubResource("StyleBoxFlat_h7n4k")
|
||||
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="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_tn8m6"]
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_ovl8a"]
|
||||
bg_color = Color(0.388235, 0.227451, 0.290196, 1)
|
||||
@@ -94,6 +122,20 @@ animations = [{
|
||||
"speed": 5.0
|
||||
}]
|
||||
|
||||
[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_7u7p7"]
|
||||
|
||||
[sub_resource type="Gradient" id="Gradient_jlp41"]
|
||||
colors = PackedColorArray(0, 0.647059, 0, 1, 0, 0.266667, 0, 1)
|
||||
|
||||
[sub_resource type="GradientTexture2D" id="GradientTexture2D_u3yy8"]
|
||||
gradient = SubResource("Gradient_jlp41")
|
||||
fill = 1
|
||||
fill_from = Vector2(0.5, 0.5)
|
||||
fill_to = Vector2(1.145, 0)
|
||||
|
||||
[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_otisn"]
|
||||
texture = SubResource("GradientTexture2D_u3yy8")
|
||||
|
||||
[sub_resource type="PlaceholderTexture2D" id="PlaceholderTexture2D_723du"]
|
||||
size = Vector2(1600, 1200)
|
||||
|
||||
@@ -114,41 +156,34 @@ shader_parameter/turn = 0.785
|
||||
[sub_resource type="GradientTexture2D" id="GradientTexture2D_0pk2o"]
|
||||
gradient = SubResource("Gradient_ki0n7")
|
||||
|
||||
[sub_resource type="Gradient" id="Gradient_jlp41"]
|
||||
colors = PackedColorArray(0, 0.647059, 0, 1, 0, 0.266667, 0, 1)
|
||||
|
||||
[sub_resource type="GradientTexture2D" id="GradientTexture2D_u3yy8"]
|
||||
gradient = SubResource("Gradient_jlp41")
|
||||
fill = 1
|
||||
fill_from = Vector2(0.5, 0.5)
|
||||
fill_to = Vector2(1.145, 0)
|
||||
|
||||
[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_otisn"]
|
||||
texture = SubResource("GradientTexture2D_u3yy8")
|
||||
|
||||
[node name="Node2D" type="Node2D"]
|
||||
script = ExtResource("1_v273n")
|
||||
|
||||
[node name="Background" type="ColorRect" parent="."]
|
||||
offset_right = 2226.0
|
||||
offset_bottom = 1153.0
|
||||
offset_right = 1941.0
|
||||
offset_bottom = 988.0
|
||||
color = Color(0.356863, 0.278431, 0.356863, 1)
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="Litera_2_4_6" type="ColorRect" parent="Background"]
|
||||
visible = false
|
||||
layout_mode = 0
|
||||
offset_top = 54.0
|
||||
offset_right = 2182.0
|
||||
offset_right = 1941.0
|
||||
offset_bottom = 344.0
|
||||
color = Color(0.586231, 0.481877, 0.585869, 1)
|
||||
|
||||
[node name="Litera_3_5_7" type="ColorRect" parent="Background"]
|
||||
visible = false
|
||||
layout_mode = 0
|
||||
offset_top = 352.0
|
||||
offset_right = 2182.0
|
||||
offset_bottom = 642.0
|
||||
offset_right = 1941.0
|
||||
offset_bottom = 656.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 = 647.0
|
||||
offset_right = 2182.0
|
||||
offset_bottom = 793.0
|
||||
@@ -166,11 +201,48 @@ layout_mode = 2
|
||||
script = ExtResource("2_vmbyo")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="control_button" type="Button" parent="."]
|
||||
offset_left = 24.0
|
||||
offset_top = 53.0
|
||||
offset_right = 118.0
|
||||
offset_bottom = 81.0
|
||||
[node name="ISA" type="Label" parent="."]
|
||||
offset_left = 1244.0
|
||||
offset_top = 11.0
|
||||
offset_right = 1495.0
|
||||
offset_bottom = 34.0
|
||||
|
||||
[node name="read_isa" type="Button" parent="."]
|
||||
offset_left = 1104.0
|
||||
offset_top = 7.0
|
||||
offset_right = 1229.0
|
||||
offset_bottom = 38.0
|
||||
text = "Прочитать ISA"
|
||||
|
||||
[node name="TabContainer" type="TabContainer" parent="."]
|
||||
offset_top = 39.0
|
||||
offset_right = 1941.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 = 1
|
||||
tab_focus_mode = 0
|
||||
|
||||
[node name="ControlPanel" type="Panel" parent="TabContainer"]
|
||||
visible = false
|
||||
layout_mode = 2
|
||||
theme_override_styles/panel = SubResource("StyleBoxTexture_tn8m6")
|
||||
metadata/_tab_index = 0
|
||||
|
||||
[node name="control_button" type="Button" parent="TabContainer/ControlPanel"]
|
||||
offset_left = 8.0
|
||||
offset_top = 40.0
|
||||
offset_right = 102.0
|
||||
offset_bottom = 68.0
|
||||
focus_mode = 0
|
||||
mouse_default_cursor_shape = 2
|
||||
theme = SubResource("Theme_k5ur4")
|
||||
@@ -180,142 +252,90 @@ toggle_mode = true
|
||||
button_pressed = true
|
||||
text = "КОНТРОЛЬ"
|
||||
|
||||
[node name="Controlpanel" type="ColorRect" parent="."]
|
||||
offset_left = 118.0
|
||||
offset_top = 53.0
|
||||
offset_right = 465.0
|
||||
offset_bottom = 609.0
|
||||
[node name="Controlpanel" type="ColorRect" parent="TabContainer/ControlPanel"]
|
||||
offset_left = 102.0
|
||||
offset_top = 40.0
|
||||
offset_right = 449.0
|
||||
offset_bottom = 596.0
|
||||
color = Color(0.390334, 0.227948, 0.288326, 1)
|
||||
|
||||
[node name="control_dev" type="ScrollContainer" parent="."]
|
||||
offset_left = 142.0
|
||||
offset_top = 63.0
|
||||
offset_right = 477.0
|
||||
offset_bottom = 647.0
|
||||
metadata/_edit_lock_ = true
|
||||
[node name="control_dev" type="ScrollContainer" parent="TabContainer/ControlPanel"]
|
||||
offset_left = 126.0
|
||||
offset_top = 50.0
|
||||
offset_right = 461.0
|
||||
offset_bottom = 634.0
|
||||
|
||||
[node name="control_tbl" type="GridContainer" parent="control_dev"]
|
||||
[node name="control_tbl" type="GridContainer" parent="TabContainer/ControlPanel/control_dev"]
|
||||
layout_mode = 2
|
||||
script = ExtResource("2_vmbyo")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="SZI_x" type="AnimatedSprite2D" parent="control_dev"]
|
||||
[node name="SZI_x" type="AnimatedSprite2D" parent="TabContainer/ControlPanel/control_dev"]
|
||||
position = Vector2(284, 404)
|
||||
sprite_frames = SubResource("SpriteFrames_vex4t")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="SZI_x2" type="AnimatedSprite2D" parent="control_dev"]
|
||||
[node name="SZI_x2" type="AnimatedSprite2D" parent="TabContainer/ControlPanel/control_dev"]
|
||||
position = Vector2(284, 432)
|
||||
sprite_frames = SubResource("SpriteFrames_vex4t")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="SZI_x3" type="AnimatedSprite2D" parent="control_dev"]
|
||||
[node name="SZI_x3" type="AnimatedSprite2D" parent="TabContainer/ControlPanel/control_dev"]
|
||||
position = Vector2(284, 460)
|
||||
sprite_frames = SubResource("SpriteFrames_vex4t")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="SZI_x4" type="AnimatedSprite2D" parent="control_dev"]
|
||||
[node name="SZI_x4" type="AnimatedSprite2D" parent="TabContainer/ControlPanel/control_dev"]
|
||||
position = Vector2(284, 488)
|
||||
sprite_frames = SubResource("SpriteFrames_vex4t")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="SZI_x5" type="AnimatedSprite2D" parent="control_dev"]
|
||||
[node name="SZI_x5" type="AnimatedSprite2D" parent="TabContainer/ControlPanel/control_dev"]
|
||||
position = Vector2(284, 517)
|
||||
sprite_frames = SubResource("SpriteFrames_vex4t")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="scroll1" type="ScrollContainer" parent="."]
|
||||
[node name="PRD" type="Panel" parent="TabContainer"]
|
||||
layout_mode = 2
|
||||
theme_override_styles/panel = SubResource("StyleBoxTexture_7u7p7")
|
||||
metadata/_tab_index = 1
|
||||
|
||||
[node name="scroll1" type="ScrollContainer" parent="TabContainer/PRD"]
|
||||
offset_left = 985.0
|
||||
offset_top = 63.0
|
||||
offset_top = 3.0
|
||||
offset_right = 1348.0
|
||||
offset_bottom = 344.0
|
||||
offset_bottom = 284.0
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="table1" type="GridContainer" parent="scroll1"]
|
||||
[node name="table1" type="GridContainer" parent="TabContainer/PRD/scroll1"]
|
||||
layout_mode = 2
|
||||
script = ExtResource("2_vmbyo")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="scroll2" type="ScrollContainer" parent="."]
|
||||
[node name="scroll2" type="ScrollContainer" parent="TabContainer/PRD"]
|
||||
offset_left = 985.0
|
||||
offset_top = 367.0
|
||||
offset_top = 307.0
|
||||
offset_right = 1348.0
|
||||
offset_bottom = 655.0
|
||||
offset_bottom = 595.0
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="table2" type="GridContainer" parent="scroll2"]
|
||||
[node name="table2" type="GridContainer" parent="TabContainer/PRD/scroll2"]
|
||||
layout_mode = 2
|
||||
script = ExtResource("2_vmbyo")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="PSK" type="Sprite2D" parent="."]
|
||||
material = ExtResource("3_3syd3")
|
||||
position = Vector2(1388.25, 65)
|
||||
scale = Vector2(0.247968, 0.234167)
|
||||
texture = SubResource("PlaceholderTexture2D_723du")
|
||||
offset = Vector2(800, 600)
|
||||
script = SubResource("GDScript_0sobq")
|
||||
|
||||
[node name="PSK grad" type="TextureRect" parent="PSK"]
|
||||
modulate = Color(0, 0, 0, 1)
|
||||
self_modulate = Color(0, 0, 0, 1)
|
||||
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" type="Sprite2D" parent="PSK"]
|
||||
material = SubResource("ShaderMaterial_dgiai")
|
||||
position = Vector2(549.221, 560.705)
|
||||
scale = Vector2(21.8765, 21.6782)
|
||||
texture = SubResource("GradientTexture2D_0pk2o")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="PSK2" type="Sprite2D" parent="."]
|
||||
material = ExtResource("3_3syd3")
|
||||
position = Vector2(1388, 362)
|
||||
scale = Vector2(0.247968, 0.234167)
|
||||
texture = SubResource("PlaceholderTexture2D_723du")
|
||||
offset = Vector2(800, 600)
|
||||
script = SubResource("GDScript_0sobq")
|
||||
|
||||
[node name="PSK grad" type="TextureRect" parent="PSK2"]
|
||||
modulate = Color(0, 0, 0, 1)
|
||||
self_modulate = Color(0, 0, 0, 1)
|
||||
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" type="Sprite2D" parent="PSK2"]
|
||||
material = SubResource("ShaderMaterial_dgiai")
|
||||
position = Vector2(549.221, 560.705)
|
||||
scale = Vector2(21.8765, 21.6782)
|
||||
texture = SubResource("GradientTexture2D_0pk2o")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="LABEL" type="Label" parent="."]
|
||||
[node name="LABEL" type="Label" parent="TabContainer/PRD"]
|
||||
offset_left = 594.0
|
||||
offset_top = 53.0
|
||||
offset_top = -7.0
|
||||
offset_right = 876.0
|
||||
offset_bottom = 76.0
|
||||
offset_bottom = 16.0
|
||||
text = "ЛИТЕРА 2! ПРД-Н!"
|
||||
|
||||
[node name="Zapret" type="Button" parent="."]
|
||||
[node name="Zapret" type="Button" parent="TabContainer/PRD"]
|
||||
offset_left = 594.0
|
||||
offset_top = 81.0
|
||||
offset_top = 21.0
|
||||
offset_right = 712.0
|
||||
offset_bottom = 115.0
|
||||
offset_bottom = 55.0
|
||||
focus_mode = 0
|
||||
mouse_default_cursor_shape = 2
|
||||
theme_override_styles/pressed = SubResource("StyleBoxTexture_otisn")
|
||||
@@ -323,18 +343,18 @@ toggle_mode = true
|
||||
text = " Запрет СИ2"
|
||||
metadata/litera = 48
|
||||
|
||||
[node name="LABEL2" type="Label" parent="."]
|
||||
[node name="LABEL2" type="Label" parent="TabContainer/PRD"]
|
||||
offset_left = 594.0
|
||||
offset_top = 365.0
|
||||
offset_top = 305.0
|
||||
offset_right = 876.0
|
||||
offset_bottom = 388.0
|
||||
offset_bottom = 328.0
|
||||
text = "ЛИТЕРА 3! ПРД-Н!"
|
||||
|
||||
[node name="Zapret2" type="Button" parent="."]
|
||||
[node name="Zapret2" type="Button" parent="TabContainer/PRD"]
|
||||
offset_left = 594.0
|
||||
offset_top = 393.0
|
||||
offset_top = 333.0
|
||||
offset_right = 712.0
|
||||
offset_bottom = 427.0
|
||||
offset_bottom = 367.0
|
||||
focus_mode = 0
|
||||
mouse_default_cursor_shape = 2
|
||||
theme_override_styles/pressed = SubResource("StyleBoxTexture_otisn")
|
||||
@@ -342,70 +362,113 @@ toggle_mode = true
|
||||
text = " Запрет СИ3"
|
||||
metadata/litera = 49
|
||||
|
||||
[node name="Label_luch" type="Label" parent="."]
|
||||
[node name="Label_luch" type="Label" parent="TabContainer/PRD"]
|
||||
offset_left = 594.0
|
||||
offset_top = 136.0
|
||||
offset_top = 76.0
|
||||
offset_right = 876.0
|
||||
offset_bottom = 159.0
|
||||
offset_bottom = 99.0
|
||||
text = "Номер и направление луча"
|
||||
|
||||
[node name="LUCH" type="OptionButton" parent="."]
|
||||
[node name="LUCH" type="OptionButton" parent="TabContainer/PRD"]
|
||||
offset_left = 594.0
|
||||
offset_top = 168.0
|
||||
offset_top = 108.0
|
||||
offset_right = 712.0
|
||||
offset_bottom = 199.0
|
||||
offset_bottom = 139.0
|
||||
item_count = 2
|
||||
popup/item_0/text = "Что-то"
|
||||
popup/item_1/text = "Что-то"
|
||||
popup/item_1/id = 1
|
||||
|
||||
[node name="ISA" type="Label" parent="."]
|
||||
offset_left = 1492.0
|
||||
offset_top = 11.0
|
||||
offset_right = 1743.0
|
||||
offset_bottom = 34.0
|
||||
|
||||
[node name="read_isa" type="Button" parent="."]
|
||||
offset_left = 1360.0
|
||||
offset_top = 7.0
|
||||
offset_right = 1483.0
|
||||
offset_bottom = 38.0
|
||||
text = "Прочитать ISA"
|
||||
|
||||
[node name="Modul" type="Label" parent="."]
|
||||
[node name="Modul" type="Label" parent="TabContainer/PRD"]
|
||||
offset_left = 594.0
|
||||
offset_top = 438.0
|
||||
offset_top = 378.0
|
||||
offset_right = 738.0
|
||||
offset_bottom = 461.0
|
||||
offset_bottom = 401.0
|
||||
text = "Модуляция"
|
||||
|
||||
[node name="DKM2" type="Label" parent="."]
|
||||
[node name="DKM2" type="Label" parent="TabContainer/PRD"]
|
||||
offset_left = 594.0
|
||||
offset_top = 219.0
|
||||
offset_top = 159.0
|
||||
offset_right = 736.0
|
||||
offset_bottom = 242.0
|
||||
offset_bottom = 182.0
|
||||
text = "ДКМ ДОУ 2"
|
||||
|
||||
[node name="DKM3" type="Label" parent="."]
|
||||
[node name="DKM3" type="Label" parent="TabContainer/PRD"]
|
||||
offset_left = 594.0
|
||||
offset_top = 467.0
|
||||
offset_top = 407.0
|
||||
offset_right = 736.0
|
||||
offset_bottom = 490.0
|
||||
offset_bottom = 430.0
|
||||
text = "ДКМ ДОУ 3"
|
||||
|
||||
[node name="FGOZ2" type="Label" parent="."]
|
||||
[node name="FGOZ2" type="Label" parent="TabContainer/PRD"]
|
||||
offset_left = 594.0
|
||||
offset_top = 242.0
|
||||
offset_top = 182.0
|
||||
offset_right = 767.0
|
||||
offset_bottom = 265.0
|
||||
offset_bottom = 205.0
|
||||
text = "ФГОЗ 2"
|
||||
|
||||
[node name="FGOZ3" type="Label" parent="."]
|
||||
[node name="FGOZ3" type="Label" parent="TabContainer/PRD"]
|
||||
offset_left = 594.0
|
||||
offset_top = 490.0
|
||||
offset_top = 430.0
|
||||
offset_right = 767.0
|
||||
offset_bottom = 513.0
|
||||
offset_bottom = 453.0
|
||||
text = "ФГОЗ 3"
|
||||
|
||||
[connection signal="toggled" from="control_button" to="." method="_on_control_button"]
|
||||
[node name="PSK" type="Sprite2D" parent="TabContainer/PRD"]
|
||||
material = ExtResource("3_3syd3")
|
||||
position = Vector2(1388.25, 5)
|
||||
scale = Vector2(0.247968, 0.234167)
|
||||
texture = SubResource("PlaceholderTexture2D_723du")
|
||||
offset = Vector2(800, 600)
|
||||
script = SubResource("GDScript_0sobq")
|
||||
|
||||
[node name="PSK grad" type="TextureRect" parent="TabContainer/PRD/PSK"]
|
||||
modulate = Color(0, 0, 0, 1)
|
||||
self_modulate = Color(0, 0, 0, 1)
|
||||
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" type="Sprite2D" parent="TabContainer/PRD/PSK"]
|
||||
material = SubResource("ShaderMaterial_dgiai")
|
||||
position = Vector2(549.221, 560.705)
|
||||
scale = Vector2(21.8765, 21.6782)
|
||||
texture = SubResource("GradientTexture2D_0pk2o")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="PSK2" type="Sprite2D" parent="TabContainer/PRD"]
|
||||
material = ExtResource("3_3syd3")
|
||||
position = Vector2(1388, 302)
|
||||
scale = Vector2(0.247968, 0.234167)
|
||||
texture = SubResource("PlaceholderTexture2D_723du")
|
||||
offset = Vector2(800, 600)
|
||||
script = SubResource("GDScript_0sobq")
|
||||
|
||||
[node name="PSK grad" type="TextureRect" parent="TabContainer/PRD/PSK2"]
|
||||
modulate = Color(0, 0, 0, 1)
|
||||
self_modulate = Color(0, 0, 0, 1)
|
||||
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" type="Sprite2D" parent="TabContainer/PRD/PSK2"]
|
||||
material = SubResource("ShaderMaterial_dgiai")
|
||||
position = Vector2(549.221, 560.705)
|
||||
scale = Vector2(21.8765, 21.6782)
|
||||
texture = SubResource("GradientTexture2D_0pk2o")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[connection signal="pressed" from="read_isa" to="." method="_on_read_isa_pressed"]
|
||||
[connection signal="toggled" from="TabContainer/ControlPanel/control_button" to="." method="_on_control_button"]
|
||||
|
||||
@@ -17,13 +17,14 @@ config/icon="res://icon.svg"
|
||||
|
||||
[autoload]
|
||||
|
||||
Constants="*res://constants.gd"
|
||||
Yau07="*res://yau07.gd"
|
||||
Constants="*res://scripts/constants.gd"
|
||||
Yau07="*res://scripts/yau07.gd"
|
||||
Network="*res://scripts/network.gd"
|
||||
|
||||
[display]
|
||||
|
||||
window/size/viewport_width=1800
|
||||
window/size/viewport_height=800
|
||||
window/size/viewport_width=1900
|
||||
window/size/viewport_height=940
|
||||
|
||||
[rendering]
|
||||
|
||||
|
||||
251
scripts/PRD.gd
Normal file
251
scripts/PRD.gd
Normal file
@@ -0,0 +1,251 @@
|
||||
extends Node2D
|
||||
|
||||
#var unit = Yau07.YaU07.new('ЯУ07')
|
||||
var flag_mode = Constants.ADDRESSES[0][3]
|
||||
var broadcast_packet: PackedByteArray
|
||||
var node_select1: Node
|
||||
var node_select2: Node
|
||||
var flag_yau_control: bool
|
||||
var CONTROL_TABLE: Array
|
||||
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
# Таблица УКП_1
|
||||
node_select1 = $TabContainer/PRD/scroll1/table1
|
||||
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
|
||||
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 = $select_dev/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.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])
|
||||
|
||||
# Контроль
|
||||
var node_control_device = $TabContainer/ControlPanel/control_dev/control_tbl
|
||||
for i in Constants.CONTROL_DEVICE.size():
|
||||
CONTROL_TABLE.append([Constants.TableNode])
|
||||
draw_tabl(node_control_device, CONTROL_TABLE, CONTROL_TABLE.size())
|
||||
for i in Constants.CONTROL_DEVICE.size():
|
||||
node_control_device.get_node2(0, i).text = Constants.CONTROL_DEVICE[i]
|
||||
node_control_device.set_columns_min_size([300])
|
||||
|
||||
|
||||
|
||||
$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))
|
||||
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'))
|
||||
|
||||
|
||||
## From Network status about yau-07
|
||||
func _on_yau_status(yau_status):
|
||||
if yau_status:
|
||||
$TabContainer/ControlPanel/control_dev/control_tbl.get_node2(0, 0).text = 'ЯУ-07Б НА СВЯЗИ'
|
||||
$TabContainer/ControlPanel/control_dev/control_tbl.get_node2(0, 0).modulate = Color.GREEN
|
||||
flag_yau_control = true
|
||||
else:
|
||||
$TabContainer/ControlPanel/control_dev/control_tbl.get_node2(0, 0).text = 'НЕТ СВЯЗИ С ЯУ-07Б'
|
||||
$TabContainer/ControlPanel/control_dev/control_tbl.get_node2(0, 0).modulate = Color.RED
|
||||
for dev in (Constants.CONTROL_DEVICE.size() - 1):
|
||||
var node_board = $TabContainer/ControlPanel/control_dev/control_tbl.get_node2(0, dev+1)
|
||||
node_board.modulate = Color.RED
|
||||
flag_yau_control = false
|
||||
|
||||
|
||||
func _on_read_isa(unit_isa_ports):
|
||||
$ISA.text = 'ISA: ' + str(unit_isa_ports)
|
||||
|
||||
|
||||
## Рисует таблицу
|
||||
func draw_tabl(tbl, row: Array, count_row: int):
|
||||
for i_row in count_row:
|
||||
tbl.add_row(row[i_row])
|
||||
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
pass
|
||||
|
||||
|
||||
func _on_data_received(data_from_yau_07):
|
||||
if flag_yau_control:
|
||||
var status_board = data_from_yau_07.decode_u8(Constants.DataIndices.STATUS_BOARD)
|
||||
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 dry_contact: int = data_from_yau_07.decode_u16(Constants.DataIndices.DRY_CONTACT) # Контроль сухих контактов (УГ)
|
||||
var _DKM: int = data_from_yau_07.decode_u16(Constants.DataIndices.DKM) # ДКМ от УГ
|
||||
|
||||
## УГ
|
||||
#node_select1.set_node_text(2, 0, '%d' % dry_contact)
|
||||
var node_control_device = $TabContainer/ControlPanel/control_dev/control_tbl
|
||||
for i in 4:
|
||||
var node_board = node_control_device.get_node2(0, i+2)
|
||||
var j = int(status_board & (1 << i) == 0 and flag_yau_control)
|
||||
node_board.text = Constants.CONTROL_BOARD[i][j]
|
||||
node_board.modulate = [Color.GREEN, Color.RED][j]
|
||||
|
||||
for i in 8:
|
||||
var node_power_supply = node_control_device.get_node2(0, i+6)
|
||||
var j = int(not(dry_contact & (1 << i) == 0 and flag_yau_control))
|
||||
node_power_supply.text = Constants.CONTROL_POWER_SUPPLY[i][j]
|
||||
node_power_supply.modulate = [Color.GREEN, Color.RED][j]
|
||||
|
||||
## EMS G
|
||||
var CONTROL_FRAME = [$TabContainer/ControlPanel/control_dev/SZI_x, $TabContainer/ControlPanel/control_dev/SZI_x2, $TabContainer/ControlPanel/control_dev/SZI_x3, $TabContainer/ControlPanel/control_dev/SZI_x4, $TabContainer/ControlPanel/control_dev/SZI_x5]
|
||||
for i in 5:
|
||||
var node_ems_g = node_control_device.get_node2(0, i + 14)
|
||||
var j: int = 0
|
||||
var frame = Constants.Frame.WORK
|
||||
|
||||
var in_bit_blank_UF = 1 if Constants.MODE.PRD_H == flag_mode else 3 if Constants.MODE.PRD_K == flag_mode else 6
|
||||
var in_bit_blank_FS = 9 if Constants.MODE.PRD_H == flag_mode else 11 if Constants.MODE.PRD_K == flag_mode else 13
|
||||
|
||||
var in_bit_impuls_UF = 1 if Constants.MODE.PRD_H == flag_mode else 3 if Constants.MODE.PRD_K == flag_mode else 6
|
||||
var in_bit_impuls_FS = 9 if Constants.MODE.PRD_H == flag_mode else 11 if Constants.MODE.PRD_K == flag_mode else 13
|
||||
###
|
||||
var out_bit_blank_UF = 1 if Constants.MODE.PRD_H == flag_mode else 1 if Constants.MODE.PRD_K == flag_mode else 0
|
||||
var out_bit_blank_MODUL = 4 if Constants.MODE.PRD_H == flag_mode else 4 if Constants.MODE.PRD_K == flag_mode else 4
|
||||
var out_bit_blank_FGOZ = 9 if Constants.MODE.PRD_H == flag_mode else 8 if Constants.MODE.PRD_K == flag_mode else 8
|
||||
|
||||
var out_bit_impuls_UF = 1 if Constants.MODE.PRD_H == flag_mode else 1 if Constants.MODE.PRD_K == flag_mode else 0
|
||||
var out_bit_impuls_MODUL = 4 if Constants.MODE.PRD_H == flag_mode else 4 if Constants.MODE.PRD_K == flag_mode else 4
|
||||
var out_bit_impuls_FGOZ = 9 if Constants.MODE.PRD_H == flag_mode else 8 if Constants.MODE.PRD_K == flag_mode else 8
|
||||
|
||||
|
||||
if (in_blank & (1 << in_bit_blank_UF) != 0) and flag_yau_control:
|
||||
j = 1 if i == 0 else 0
|
||||
frame = Constants.Frame.CONSTANT if i == 0 else Constants.Frame.WORK
|
||||
set_frame(CONTROL_FRAME[i], frame)
|
||||
elif (in_imp & (1 << in_bit_impuls_UF) != 0) and flag_yau_control:
|
||||
j = 1 if i == 0 else 0
|
||||
frame = Constants.Frame.VARIABLE if i == 0 else Constants.Frame.WORK
|
||||
set_frame(CONTROL_FRAME[i], frame)
|
||||
elif (in_blank & (1 << in_bit_blank_FS) != 0) and flag_yau_control:
|
||||
j = 1 if i == 1 else 0
|
||||
frame = Constants.Frame.CONSTANT if i == 1 else Constants.Frame.WORK
|
||||
set_frame(CONTROL_FRAME[i], frame)
|
||||
elif (in_imp & (1 << in_bit_impuls_FS) != 0) and flag_yau_control:
|
||||
j = 1 if i == 1 else 0
|
||||
frame = Constants.Frame.VARIABLE if i == 1 else Constants.Frame.WORK
|
||||
elif (out_blank & (1 << out_bit_blank_UF) != 0) and flag_yau_control:
|
||||
j = 1 if i == 2 else 0
|
||||
frame = Constants.Frame.CONSTANT if i == 2 else Constants.Frame.WORK
|
||||
set_frame(CONTROL_FRAME[i], frame)
|
||||
elif (out_imp & (1 << out_bit_impuls_UF) != 0) and flag_yau_control:
|
||||
j = 1 if i == 2 else 0
|
||||
frame = Constants.Frame.VARIABLE if i == 2 else Constants.Frame.WORK
|
||||
set_frame(CONTROL_FRAME[i], frame)
|
||||
elif (out_blank & (1 << out_bit_blank_MODUL) != 0) and flag_yau_control:
|
||||
j = 1 if i == 3 else 0
|
||||
frame = Constants.Frame.CONSTANT if i == 3 else Constants.Frame.WORK
|
||||
set_frame(CONTROL_FRAME[i], frame)
|
||||
elif (out_imp & (1 << out_bit_impuls_MODUL) != 0) and flag_yau_control:
|
||||
j = 1 if i == 3 else 0
|
||||
frame = Constants.Frame.VARIABLE if i == 3 else Constants.Frame.WORK
|
||||
set_frame(CONTROL_FRAME[i], frame)
|
||||
elif (out_blank & (1 << out_bit_blank_FGOZ) != 0) and flag_yau_control:
|
||||
j = 1 if i == 4 else 0
|
||||
frame = Constants.Frame.CONSTANT if i == 4 else Constants.Frame.WORK
|
||||
set_frame(CONTROL_FRAME[i], frame)
|
||||
elif (out_imp & (1 << out_bit_impuls_FGOZ) != 0) and flag_yau_control:
|
||||
j = 1 if i == 4 else 0
|
||||
frame = Constants.Frame.VARIABLE if i == 4 else Constants.Frame.WORK
|
||||
set_frame(CONTROL_FRAME[i], frame)
|
||||
|
||||
node_ems_g.text = Constants.EMS_G[i][j]
|
||||
node_ems_g.modulate = [Color.RED, Color.GREEN][j]
|
||||
#set_frame(CONTROL_FRAME[i], frame)
|
||||
|
||||
#node_select1.set_node_text(3, 0, '%d' % DKM)
|
||||
|
||||
## УКП
|
||||
for i in range(8): ## Мощность от УКП_1
|
||||
var power_ukp_1 = data_from_yau_07.decode_u16(Constants.DataIndices.POWER_UKP_1 + 2 * i)
|
||||
node_select1.set_node_text(0, i+1, '%d' % power_ukp_1)
|
||||
|
||||
for i in range(8): ## Температура от УКП_1
|
||||
var temperature_ukp_1 = data_from_yau_07.decode_u16(Constants.DataIndices.TEMPERATURE_UKP_1 + 2 * i)
|
||||
var TMP = Constants.CONST_MIN_TEMP + (Constants.MAXIMUM_CODE_ADC - temperature_ukp_1) * Constants.TEMP
|
||||
node_select1.set_node_text(1, i+1, '%d' % TMP)
|
||||
|
||||
for i in range(8): ## Мощность от УКП_2
|
||||
var power_ukp_2 = data_from_yau_07.decode_u16(Constants.DataIndices.POWER_UKP_2 + 2 * i)
|
||||
node_select2.set_node_text(0, i+1, '%d' % power_ukp_2)
|
||||
|
||||
for row in range(8): ## Температура от УКП_2
|
||||
if len(data_from_yau_07) > 79 + 2 * row:
|
||||
var temperature_ukp_2 = data_from_yau_07.decode_u16(Constants.DataIndices.TEMPERATURE_UKP_2 + 2 * row)
|
||||
var TMP = Constants.CONST_MIN_TEMP + (Constants.MAXIMUM_CODE_ADC - temperature_ukp_2) * Constants.TEMP
|
||||
node_select2.set_node_text(1, row+1, '%d' % TMP)
|
||||
|
||||
|
||||
func set_frame(node: Node, val: int): node.set_frame(val)
|
||||
|
||||
|
||||
#func dec2bin(decimal_value, number_bit):
|
||||
#var binary_string = ''
|
||||
#var count = number_bit
|
||||
#while(count >= 0):
|
||||
#var temp: int = decimal_value >> count
|
||||
#binary_string += '%d' % (temp & 1)
|
||||
#count -= 1
|
||||
#return binary_string
|
||||
|
||||
|
||||
func _on_control_button(toggled_on: bool) -> void:
|
||||
$TabContainer/ControlPanel/control_dev.visible = toggled_on
|
||||
$TabContainer/ControlPanel/Controlpanel.visible = toggled_on
|
||||
|
||||
|
||||
func on_btn_select(intem_from_sector):
|
||||
var node_select_device = $select_dev/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.address = meta[0]
|
||||
Network.port = meta[1]
|
||||
flag_mode = meta[2]
|
||||
|
||||
|
||||
func fill_item(node, i_column: int, i_row: int, arr: Dictionary, select: int = 0):
|
||||
var optionbutton = node.get_node2(i_column, i_row) as OptionButton
|
||||
for key in arr.keys():
|
||||
var item_text = key + " - " + str(arr[key])
|
||||
optionbutton.add_item(item_text)
|
||||
if select < arr.size():
|
||||
optionbutton.select(select)
|
||||
|
||||
|
||||
func _on_zapret(toggled_on: bool, meta) -> void:
|
||||
var send_array: Array = []
|
||||
var address_port_wr = 0x122
|
||||
var ports_wr: Dictionary = {address_port_wr : meta.get_meta('litera')} ## СИ2, СИ4, СИ6 = 0x30, СИ3, СИ5, СИ7 = 0x31, СИ1 = 0x2F
|
||||
Network.send_array.append(ports_wr)
|
||||
|
||||
ports_wr = {}
|
||||
address_port_wr = 0x128
|
||||
ports_wr[address_port_wr] = 0x4000 if toggled_on else 0x0
|
||||
Network.send_array.append(ports_wr)
|
||||
|
||||
|
||||
func _on_read_isa_pressed() -> void:
|
||||
Network.flag_read_isa = true
|
||||
@@ -11,7 +11,7 @@ const TEMP: float = 115.0 / (MAXIMUM_CODE_ADC - MINIMUM_CODE_AD)
|
||||
const TableNode = preload("res://table/node.tscn")
|
||||
const TableList = preload("res://table/node_list.tscn")
|
||||
const SELECT_DEVICE: Array = [[TableNode, TableList]]
|
||||
const CONTROL_DEVICE: Array = ['ЯЧЕЙКА ЯУ-07Б', 'ФС', 'ЯЧЕЙКА ЭМС-Г', 'ЯЧЕЙКА УГ', 'ЯЧЕЙКА УКП №1', 'ЯЧЕЙКА УКП №2', 'ИП МАА №1', 'ИП МАА №2', 'ИП9-50 №1', 'ИП9-50 №2', 'ИП12-50 №1', '-', '-','ИП5-25', 'Вход Х3:2(СЗИ2)', 'Вход Х3:19(СИ2)', 'Выход Х3:11(СИ2)', 'Выход Х3:14(СИ2)', 'Выход x3:10(ФГОЗ)']
|
||||
const CONTROL_DEVICE: Array = ['ЯЧЕЙКА ЯУ-07Б', 'ФС', 'ЯЧЕЙКА ЭМС-Г', 'ЯЧЕЙКА УГ', 'ЯЧЕЙКА УКП №1', 'ЯЧЕЙКА УКП №2', 'ИП МАА №1', 'ИП МАА №2', 'ИП9-50 №1', 'ИП9-50 №2', 'ИП12-50 №1', '-', '-','ИП5-25', 'Х3:2(СЗИ2 от УФ)', 'Х3:19(СИ2 от ФС)', 'Х3:11(СИ2 в УФ)', 'Х3:14(Модуляция)', 'Х3:27(ФГОЗ)']
|
||||
const ROWS_REGS_DATA: Array = [
|
||||
[TableNode, TableNode],
|
||||
[TableNode, TableNode],
|
||||
@@ -60,11 +60,11 @@ var CONTROL_POWER_SUPPLY: Array = [
|
||||
['ИП12-50 №2', 'ОШИБКА. КОНТРОЛЬ ИП12-50 №2'],
|
||||
['ИП5-25', 'ОШИБКА. КОНТРОЛЬ ИП5-25']]
|
||||
const EMS_G = [
|
||||
['Нет Входа Х3:2(СИ2 от УФ)', 'Вход Х3:2(СИ2 от УФ)'],
|
||||
['Нет Входа Х3:19(СИ2 от ФС)', 'Вход Х3:19(СИ2 от ФС)'],
|
||||
['Нет Выхода Х3:2(СИ2 в УФ)', 'Выход Х3:2(СИ2 в УФ)'],
|
||||
['Нет Выхода Х3:5(Модуляция)', 'Выход Х3:5(Модуляция)'],
|
||||
['Нет Выхода Х3:10(ФГОЗ)', 'Выход Х3:10(ФГОЗ)']]
|
||||
['Нет Х3:2(СЗИ2 от УФ)', 'Есть Х3:2(СЗИ2 от УФ)'],
|
||||
['Нет Х3:19(СИ2 от ФС)', 'Есть Х3:19(СИ2 от ФС)'],
|
||||
['Нет Х3:11(СИ2 в УФ)', 'Есть Х3:11(СИ2 в УФ)'],
|
||||
['Нет Х3:14(Модуляция)', 'Есть Х3:14(Модуляция)'],
|
||||
['Нет Х3:27(ФГОЗ)', 'Есть Х3:27(ФГОЗ)']]
|
||||
enum MODE {
|
||||
PRD_K,
|
||||
PRD_B,
|
||||
107
scripts/network.gd
Normal file
107
scripts/network.gd
Normal file
@@ -0,0 +1,107 @@
|
||||
extends Node
|
||||
|
||||
var unit = Yau07.YaU07.new('ЯУ07')
|
||||
var soc_unicast: Socket
|
||||
var soc_brodcast: Socket
|
||||
var address: String = Constants.ADDRESSES[0][1]
|
||||
var port: 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 flag_read_isa: bool = false
|
||||
|
||||
|
||||
signal _yau_status_line(_status) ## Вызывается когда меняется состояние связи с ячейкой
|
||||
signal _yau_receive(_data_from_yau) ##
|
||||
signal _yau_read_isa(_unit_isa_ports)
|
||||
|
||||
## Класс для отправки данных в сокет
|
||||
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:
|
||||
while sock.get_available_packet_count() > 0:
|
||||
broadcast_packet = sock.get_packet()
|
||||
var addr_receive = sock.get_packet_ip()
|
||||
var port_receive = sock.get_packet_port()
|
||||
|
||||
if (address == addr_receive) and (port == port_receive):
|
||||
last_update_time = 0.0
|
||||
unit.parse(broadcast_packet)
|
||||
var data_from_yau_07 = unit.status
|
||||
emit_signal('_yau_receive', data_from_yau_07)
|
||||
else:
|
||||
if sock.get_available_packet_count():
|
||||
last_update_time = 0.0
|
||||
return false
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
# Привязка для принятия широковещательного канала
|
||||
soc_brodcast = Socket.new()
|
||||
var rc = soc_brodcast.bind(Constants.BROADCAST_PORT, '*')
|
||||
if rc != OK:
|
||||
print('Ошибка: Неудачная привязка широковещательного адреса')
|
||||
|
||||
soc_unicast = Socket.new()
|
||||
rc = soc_unicast.bind(Constants.UNICAST_PORT, Constants.UNICAST_ADDRESS)
|
||||
if rc != OK:
|
||||
print('Ошибка: неудачная привязка адреса: ', address)
|
||||
|
||||
unit.connect('line_changed', Callable(self, 'on_line_changed'))
|
||||
unit.connect('command_fail', Callable(self, 'on_command_fail'))
|
||||
unit.connect('command_done', Callable(self, 'on_command_done'))
|
||||
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
last_update_time += delta
|
||||
poll_receive(soc_brodcast)
|
||||
state_machine()
|
||||
match unit.process(delta):
|
||||
Error.OK: soc_unicast.send_to(address, port, unit.tx_data.slice(0, unit.tx_len))
|
||||
Error.FAILED: print('Ошибка отправки данных')
|
||||
|
||||
|
||||
func state_machine():
|
||||
var fl_done = (unit.cmd_state == unit.CmdState.DONE)
|
||||
## Режим ожидания
|
||||
if state == Constants.STATE.WAIT and fl_done:
|
||||
|
||||
if flag_read_isa:
|
||||
flag_read_isa = false
|
||||
state = Constants.STATE.READ_ISA
|
||||
elif send_array.size():
|
||||
state = Constants.STATE.WRITE_ISA
|
||||
|
||||
## Режим чтения из ИСА
|
||||
elif state == Constants.STATE.READ_ISA and fl_done:
|
||||
unit.send_isa(unit.CmdCode.READ_ISA, [0x122, 0x128])
|
||||
state = Constants.STATE.WAIT
|
||||
var unit_isa_ports = unit.isa_ports
|
||||
emit_signal('_yau_read_isa', unit_isa_ports)
|
||||
## Режим записи в ИСА
|
||||
elif state == Constants.STATE.WRITE_ISA and fl_done:
|
||||
var ports_dict = send_array.pop_front()
|
||||
var key = ports_dict.keys()
|
||||
unit.send_isa(unit.CmdCode.WRITE_ISA, [key[0], ports_dict[key[0]]])
|
||||
state = Constants.STATE.WAIT
|
||||
|
||||
|
||||
func on_line_changed(_unit) -> void:
|
||||
emit_signal('_yau_status_line', unit.online)
|
||||
|
||||
|
||||
## Ессли отсутствует подключение к ячейке ЯУ-07
|
||||
func on_command_fail(_unit) -> void:
|
||||
print_debug('Command send fail')
|
||||
|
||||
|
||||
## Индикация чтения портов
|
||||
func on_command_done(_unit) -> void:
|
||||
pass
|
||||
91
tools.gd
91
tools.gd
@@ -1,91 +0,0 @@
|
||||
extends Node
|
||||
|
||||
## Простые часто используемые функции
|
||||
|
||||
|
||||
## Возвращает true, если val число, false - если иначе
|
||||
func type_is_num(val) -> bool: return (typeof(val) == TYPE_INT) or (typeof(val) == typeof(0.0))
|
||||
|
||||
|
||||
## Возвращае значение в радианах для угла в градусах [param val].
|
||||
func radians(val: float): return (val * PI) / 180.0
|
||||
|
||||
|
||||
## Возвращает значение из байтового массива в 16 битное слово
|
||||
func ibytes_to_word(buf: PackedByteArray, i: int) -> int: return buf[i] + (buf[i + 1] * 256)
|
||||
|
||||
|
||||
## Возвращает расстояние от центра координат до точки
|
||||
func hypot(x: float, y: float) -> float: return sqrt(x * x + y * y)
|
||||
|
||||
|
||||
## Проверяет пересечение диапазона x1, x2 с диапазоном y1, y2 """
|
||||
func is_overlap(x1, x2, y1, y2): return max(x1, y1) <= min(x2, y2)
|
||||
|
||||
|
||||
## Производит преобразование из декартовой в полярную систему координат
|
||||
func pos_calc(freq: float, aoa: float, pos0: Vector2, r0: float, r1: float, f0: float, f1: float):
|
||||
var df = f1 - f0
|
||||
var r = ((freq - f0) / df) * r1 + r0
|
||||
var aoa_rad = Tools.radians(aoa) - PI / 2.0
|
||||
var x = cos(aoa_rad) * r + pos0.x
|
||||
var y = sin(aoa_rad) * r + pos0.y
|
||||
return Vector2(x, y)
|
||||
|
||||
|
||||
## Отсекает значение до заданного диапазона
|
||||
func clip_value(val, val_min, val_max):
|
||||
if val < val_min: val = val_min
|
||||
if val > val_max: val = val_max
|
||||
return val
|
||||
|
||||
|
||||
## Возвращает массив с именами членов класса [param obj]
|
||||
func get_members_names(obj: Object) -> Array:
|
||||
var pl = obj.get_property_list()
|
||||
var names: = Array()
|
||||
for item in pl: names.append(item.name)
|
||||
return names
|
||||
|
||||
|
||||
## Проверяет, что заданный массив [param val] похож на ip-адрес
|
||||
func is_array_ipaddr(val: Array):
|
||||
return (val.size() == 2) \
|
||||
and (val[0] is String) \
|
||||
and (val[1] is int) \
|
||||
and (0 < val[1]) \
|
||||
and (val[1] < 65536)
|
||||
|
||||
|
||||
## Преобразует декартовые координаты в полярные. [param pos0]
|
||||
## - координаты центра, [param pos] - координаты точки
|
||||
func map_dec_to_rad(pos0: Vector2, pos: Vector2) -> Vector2:
|
||||
var x1: float = pos.x - pos0.x
|
||||
var y1: float = pos.y - pos0.y
|
||||
var ang: float = (atan2(y1, x1) * 180.0) / PI
|
||||
return Vector2(ang + 360.0 * float(ang < 0.0), hypot(x1, y1))
|
||||
|
||||
|
||||
## Переводит значение val из диапазона a0...a1 в диапазон b0...b1
|
||||
func map_range(val: float, a0: float, a1: float, b0: float, b1: float) -> float:
|
||||
return (((val - a0) * (b1 - b0)) / (a1 - a0)) + b0
|
||||
|
||||
|
||||
## Возвращает true, если точка внутри заданного полигона
|
||||
func is_point_in_polygon(pos: Vector2, p: PackedVector2Array) -> bool:
|
||||
var sz: = p.size()
|
||||
assert(sz)
|
||||
var j: int = sz - 1
|
||||
var odd_nodes: int = 0
|
||||
for i in sz:
|
||||
if ((p[i].y < pos.y and p[j].y >= pos.y or p[j].y < pos.y and p[i].y >= pos.y) and (p[i].x <= pos.x or p[j].x <= pos.x)):
|
||||
odd_nodes ^= int((p[i].x + (pos.y - p[i].y) / (p[j].y - p[i].y) * (p[j].x - p[i].x) < pos.x))
|
||||
j = i
|
||||
return odd_nodes > 0
|
||||
|
||||
|
||||
## Записывает слово [param val] в элемент байтовго массива [param buf]
|
||||
## расположенный по индексу [param index]. Младшее слово
|
||||
func set_wordi(buf: PackedByteArray, index: int, val: int) -> void:
|
||||
buf[index] = val & 0xff
|
||||
buf[index + 1] = (val >> 8) & 0xff
|
||||
Reference in New Issue
Block a user