Add litera 2

This commit is contained in:
2024-12-12 16:35:56 +03:00
parent 463a550209
commit 45c833b6f3
5 changed files with 205 additions and 98 deletions

153
PRD.gd
View File

@@ -3,15 +3,16 @@ extends Node2D
var unit = Yau07.YaU07.new('ЯУ07')
var soc_unicast: Socket
var soc_brodcast: Socket
var address: String = '10.1.1.11'
var address: String = Constants.ADDRESSES[0][1]
var port: int = Constants.ADDRESSES[0][2]
var flag_mode = Constants.ADDRESSES[0][3]
var ports_wr: Dictionary # Словарь с портами для записи
var port: int
var broadcast_packet: PackedByteArray
var node_select1: Node
var timeout: float = Yau07.ONLINE_TIMEOUT
var last_update_time: float = 0.0
var flag_yau_control: bool
var CONTROL_TABLE: Array
## Класс для отправки данных в сокет
class Socket extends PacketPeerUDP:
@@ -28,16 +29,16 @@ func poll_receive(sock: Socket) -> bool: ## Приёмник
var port_receive = sock.get_packet_port()
if (address == addr_receive) and (port == port_receive):
$control_dev/control_dev.get_node2(0, 0).text = 'ЯУ-07Б НА СВЯЗИ'
$control_dev/control_dev.get_node2(0, 0).modulate = Constants.GREEN
$control_dev/control_tbl.get_node2(0, 0).text = 'ЯУ-07Б НА СВЯЗИ'
$control_dev/control_tbl.get_node2(0, 0).modulate = Constants.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_dev.get_node2(0, 0).text = 'НЕТ СВЯЗИ С ЯУ-07Б'
$control_dev/control_dev.get_node2(0, 0).modulate = Constants.RED
$control_dev/control_tbl.get_node2(0, 0).text = 'НЕТ СВЯЗИ С ЯУ-07Б'
$control_dev/control_tbl.get_node2(0, 0).modulate = Constants.RED
return false
@@ -54,14 +55,16 @@ func _ready() -> void:
# Заполнение адресов
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,3))
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([200, 100])
# Контроль
var node_control_device = $control_dev/control_dev
draw_tabl(node_control_device, Constants.CONTROL_TABLE, Constants.CONTROL_TABLE.size())
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])
@@ -92,7 +95,6 @@ func draw_tabl(tbl, row: Array, count_row: int):
func _process(delta: float) -> void:
last_update_time += delta
poll_receive(soc_brodcast)
match unit.process(delta):
Error.OK: soc_unicast.send_to(address, port, unit.tx_data.slice(0, unit.tx_len))
Error.FAILED: print('Ошибка отправки данных')
@@ -100,18 +102,17 @@ func _process(delta: float) -> void:
func data_received(_unit):
var data_from_yau_07 = unit.status
var status_board = data_from_yau_07.decode_u8(0)
var EMS_G: int = data_from_yau_07.decode_u16(1) # Данные СИ от ЭМС-Г на выходе
var dry_contact: int = data_from_yau_07.decode_u16(27) # Контроль сухих контактов (УГ)
var DKM: int = data_from_yau_07.decode_u16(29) # ДКМ от УГ
var power_ukp_1: int = data_from_yau_07.decode_u16(31) # Мощность с широковещания от УКП №1
var temperature_ukp_1: int = data_from_yau_07.decode_u16(47) # Температура с широковещания от УКП №1
var power_ukp_2: int = data_from_yau_07.decode_u16(63)
var temperature_ukp_2: int = data_from_yau_07.decode_u16(79)
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_dev
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)
@@ -124,54 +125,105 @@ func data_received(_unit):
node_power_supply.text = Constants.CONTROL_POWER_SUPPLY[i][j]
node_power_supply.modulate = [Constants.GREEN, Constants.RED][j]
# EMS G
var in_blank: int = data_from_yau_07.decode_u32(1)
var in_imp: int = data_from_yau_07.decode_u32(5)
var EMSG = [['Вход Х3:23', 'Вход Х3:23'],['Вход Х3:24', 'Вход Х3:24']]
for i in 2:
var node_ems_g = node_control_device.get_node2(0, i+ 14)
#var ems = data_from_yau_07.decode_u64()
var j = int(EMS_G & (1 << i) == 0 and flag_yau_control)
node_ems_g.text = EMSG[i][j]
node_ems_g.modulate = [Constants.GREEN, Constants.RED][j]
set_frame(Constants.Frame.VARIABLE)
## 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 = [Constants.RED, Constants.GREEN][j]
set_frame(frame, CONTROL_FRAME[i])
node_select1.set_node_text(3, 0, '%d' % DKM)
for i in range(8):
power_ukp_1 += 2 * i
## УКП
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, '%d' % power_ukp_1)
for i in range(8):
temperature_ukp_1 += 2 * i
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, '%d' % TMP)
for i in range(8):
power_ukp_2 += 2 * i
node_select1.set_node_text(0, i+8, '%d' % power_ukp_2)
for i in range(8): ## Мощность от УКП_2
var power_ukp_2 = data_from_yau_07.decode_u16(Constants.DataIndices.POWER_UKP_2 + 2 * i)
node_select1.set_node_text(0, i + 8, '%d' % power_ukp_2)
for i in range(8):
for i in range(8): ## Температура от УКП_2
if len(data_from_yau_07) > 79 + 2 * i:
temperature_ukp_2 += 2 * i
var temperature_ukp_2 = data_from_yau_07.decode_u16(Constants.DataIndices.TEMPERATURE_UKP_2 + 2 * i)
var TMP = Constants.CONST_MIN_TEMP + (Constants.MAXIMUM_CODE_ADC - temperature_ukp_2) * Constants.TEMP
node_select1.set_node_text(1, i+8, '%d' % TMP)
for i in range(15):
EMS_G += 2 * i
node_select1.set_node_text(3, i+1, '%d' % EMS_G)
###
func set_frame(val: int): $control_dev/sprite.set_frame(val)
###
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 = Constants.RED
flag_yau_control = false
@@ -196,6 +248,7 @@ func on_btn_select(intem_from_sector):
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):

View File

@@ -91,37 +91,52 @@ text = "КОНТРОЛЬ"
offset_left = 118.0
offset_top = 53.0
offset_right = 465.0
offset_bottom = 527.0
offset_bottom = 609.0
color = Color(0.390334, 0.227948, 0.288326, 1)
metadata/_edit_lock_ = true
[node name="control_dev" type="ScrollContainer" parent="."]
offset_left = 142.0
offset_top = 63.0
offset_right = 477.0
offset_bottom = 527.0
offset_bottom = 647.0
metadata/_edit_lock_ = true
[node name="control_dev" type="GridContainer" parent="control_dev"]
[node name="control_tbl" type="GridContainer" parent="control_dev"]
layout_mode = 2
script = ExtResource("2_vmbyo")
metadata/_edit_lock_ = true
[node name="sprite" type="AnimatedSprite2D" parent="control_dev"]
position = Vector2(215, 404)
[node name="SZI_x" type="AnimatedSprite2D" parent="control_dev"]
position = Vector2(284, 404)
sprite_frames = SubResource("SpriteFrames_vex4t")
metadata/_edit_lock_ = true
[node name="sprite2" type="AnimatedSprite2D" parent="control_dev"]
position = Vector2(214, 432)
[node name="SZI_x2" type="AnimatedSprite2D" parent="control_dev"]
position = Vector2(284, 432)
sprite_frames = SubResource("SpriteFrames_vex4t")
metadata/_edit_lock_ = true
[node name="SZI_x3" type="AnimatedSprite2D" parent="control_dev"]
position = Vector2(284, 460)
sprite_frames = SubResource("SpriteFrames_vex4t")
metadata/_edit_lock_ = true
[node name="SZI_x4" type="AnimatedSprite2D" parent="control_dev"]
position = Vector2(284, 488)
sprite_frames = SubResource("SpriteFrames_vex4t")
metadata/_edit_lock_ = true
[node name="SZI_x5" type="AnimatedSprite2D" parent="control_dev"]
position = Vector2(284, 517)
sprite_frames = SubResource("SpriteFrames_vex4t")
metadata/_edit_lock_ = true
[node name="scroll1" type="ScrollContainer" parent="."]
offset_left = 478.0
offset_top = 65.0
offset_right = 841.0
offset_bottom = 649.0
offset_left = 985.0
offset_top = 63.0
offset_right = 1348.0
offset_bottom = 647.0
metadata/_edit_lock_ = true
[node name="table1" type="GridContainer" parent="scroll1"]
layout_mode = 2
@@ -156,4 +171,35 @@ scale = Vector2(21.8765, 21.6782)
texture = SubResource("GradientTexture2D_0pk2o")
metadata/_edit_lock_ = true
[node name="LABEL" type="Label" parent="."]
offset_left = 594.0
offset_top = 53.0
offset_right = 876.0
offset_bottom = 76.0
text = "ЛИТЕРА 2! ПРД-Н!"
[node name="Zapret" type="Button" parent="."]
offset_left = 594.0
offset_top = 81.0
offset_right = 712.0
offset_bottom = 124.0
text = " Запрет СИ2"
[node name="Label_luch" type="Label" parent="."]
offset_left = 594.0
offset_top = 136.0
offset_right = 876.0
offset_bottom = 159.0
text = "Номер и направление луча"
[node name="LUCH" type="OptionButton" parent="."]
offset_left = 594.0
offset_top = 168.0
offset_right = 712.0
offset_bottom = 199.0
item_count = 2
popup/item_0/text = "Что-то"
popup/item_1/text = "Что-то"
popup/item_1/id = 1
[connection signal="toggled" from="control_button" to="." method="_on_control_button"]

View File

@@ -2,8 +2,8 @@ extends Node
const UNICAST_PORT: int = 50003
const UNICAST_ADDRESS: String = '10.1.1.3'
const BROADCAST_PORT: int = 50000
const DEFAULT_ADDRESS: String = '10.1.1.43'
const DEFAULT_PORT: String = '50043'
const DEFAULT_ADDRESS: String = '10.1.1.11'
const DEFAULT_PORT: String = '50011'
const BASE_ADDR: int = 0x100
const RED = Color(1, 0, 0, 1)
const GREEN = Color(0, 1, 0, 1)
@@ -14,24 +14,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_TABLE: Array = [
[TableNode],
[TableNode],
[TableNode],
[TableNode],
[TableNode],
[TableNode],
[TableNode],
[TableNode],
[TableNode],
[TableNode],
[TableNode],
[TableNode],
[TableNode],
[TableNode],
[TableNode],
[TableNode]]
const CONTROL_DEVICE: Array = ['ЯЧЕЙКА ЯУ-07Б', 'ФС', 'ЯЧЕЙКА ЭМС-Г', 'ЯЧЕЙКА УГ', 'ЯЧЕЙКА УКП №1', 'ЯЧЕЙКА УКП №2', 'ИП МАА №1', 'ИП МАА №2', 'ИП9-50 №1', 'ИП9-50 №2', 'ИП12-50 №1', '-', '-','ИП5-25', 'Вход Х3:23', 'Вход Х3:24']
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 ROWS_REGS_DATA: Array = [
[TableNode, TableNode, TableNode, TableNode],
[TableNode, TableNode, TableNode, TableNode],
@@ -50,18 +33,18 @@ const ROWS_REGS_DATA: Array = [
[TableNode, TableNode, TableNode, TableNode],
[TableNode, TableNode, TableNode, TableNode]]
const ADDRESSES: Array = [
['ПРД-Н1', '10.1.1.11', 50011],
['ПРД-Н2', '10.1.1.21', 50021],
['ПРД-Н3', '10.1.1.31', 50031],
['ПРД-Н4', '10.1.1.41', 50041],
['ПРД-В1', '10.1.1.12', 50012],
['ПРД-В2', '10.1.1.22', 50022],
['ПРД-В3', '10.1.1.32', 50032],
['ПРД-В4', '10.1.1.42', 50042],
['ПРД-К1', '10.1.1.13', 50013],
['ПРД-К2', '10.1.1.23', 50023],
['ПРД-К3', '10.1.1.33', 50033],
['ПРД-К4', '10.1.1.43', 50043]]
['ПРД-Н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]]
var CONTROL_BOARD: Array = [
['ЯЧЕЙКА ЭМС-Г НА СВЯЗИ', 'ЯЧЕЙКИ ЭМС-Г НЕТ НА СВЯЗИ'],
['ЯЧЕЙКА УГ НА СВЯЗИ','ЯЧЕЙКИ УГ НЕТ НА СВЯЗИ'],
@@ -76,8 +59,33 @@ var CONTROL_POWER_SUPPLY: Array = [
['ИП9-50 №3', 'ОШИБКА. КОНТРОЛЬ ИП9-50 №3'],
['ИП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(ФГОЗ)']]
enum MODE {
PRD_K,
PRD_B,
PRD_H,
}
enum Frame {
WORK, ## В работе
CONSTANT, ## Постоянный сигнал
VARIABLE ## Переменный сигнал
VARIABLE, ## Переменный сигнал
NULL,
}
enum DataIndices {
STATUS_BOARD = 0,
IN_BLANK_PRD = 1,
IN_IMPULS_PRD = 7,
OUT_BLANK_PRD = 13,
OUT_IMPULS_PRD = 19,
DRY_CONTACT = 27,
DKM = 29,
POWER_UKP_1 = 31,
TEMPERATURE_UKP_1 = 47,
POWER_UKP_2 = 63,
TEMPERATURE_UKP_2 = 79,
}

View File

@@ -12,7 +12,7 @@ config_version=5
config/name="ПРД_для_МП-550"
run/main_scene="res://PRD_MP550.tscn"
config/features=PackedStringArray("4.2", "GL Compatibility")
config/features=PackedStringArray("4.3", "GL Compatibility")
config/icon="res://icon.svg"
[autoload]

View File

@@ -518,8 +518,8 @@ func connect_columns(dest_node: Node, event_name: String, callback: String, clmn
assert(i_col >= 0 and i_col < columns, 'ошибка: нет такой колонки: %d' % i_col)
var node = get_node2(i_col, i_row)
if node.has_meta(META_CALLABLE):
var conn = node.get_meta(META_CALLABLE)
node.disconnect(event_name, conn)
var conne = node.get_meta(META_CALLABLE)
node.disconnect(event_name, conne)
var conn = Callable(dest_node, callback).bind([node] + user_data)
var rc = node.connect(event_name, conn)
if rc == Error.OK: