Доработка. Обмен с Щ3, таймер переподключения. В контроле УФ добавлены источники питания, как индикатор неисправности прибора.

This commit is contained in:
MaD_CaT
2025-01-29 08:50:45 +03:00
parent c717ace9b5
commit f2a86ada32
7 changed files with 32 additions and 14 deletions

View File

@@ -85,6 +85,7 @@ gdscript/warnings/integer_division=0
window/size/viewport_width=1600
window/size/viewport_height=1200
window/size/mode=3
window/subwindows/embed_subwindows=false
window/stretch/mode="canvas_items"
window/dpi/allow_hidpi=false

View File

@@ -88,8 +88,11 @@ func status_uf() -> void:
var status_kems:int = $ref_uf/ref_kassetav13/ref_A4_KEMS.state
var status_ems0:int = $ref_uf/ref_kassetav13/ref_A5_EMS.state
var status_ems1:int = $ref_uf/ref_kassetav13/ref_A6_EMS.state
var status_ip5:int = $ref_uf/ref_kassetav13/ref_A3_IP5B.state
var status_ip27:int = $ref_uf/ref_kassetav13/ref_A12_IP27B.state
if (status_yay == 1) and (status_bu == 1) and (status_kems == 1) and (status_ems0 == 1) and (status_ems1 == 1):
if (status_yay == 1) and (status_bu == 1) and (status_kems == 1) \
and (status_ems0 == 1) and (status_ems1 == 1) and (status_ip5 == 1) and (status_ip27 == 1):
$lbl_header2.text = "Прибор исправен"
$lbl_header2.modulate = Color(0,1,0,1)
else:

View File

@@ -38,17 +38,6 @@ text = "Контроль исправности устройства У-ЭП"
horizontal_alignment = 1
vertical_alignment = 1
[node name="Label" type="Label" parent="."]
self_modulate = Color(0.835294, 0.141176, 0.286275, 1)
layout_mode = 0
offset_left = 95.0
offset_top = 1125.0
offset_right = 625.0
offset_bottom = 1144.0
text = "** Позиционные обозначения требуют уточнения **"
horizontal_alignment = 1
vertical_alignment = 1
[node name="spt25_A1" parent="." instance=ExtResource("6_60xs3")]
layout_mode = 0
offset_left = 88.0

View File

@@ -14,6 +14,7 @@ extends 'res://scenes/контроль/элемент-я.gd'
@export var regs_holding_count: = 4 ## Количество регистров хранения
@export var modbus_address: = 3 ## Адрес устройства на шине Modbus
@export var request_period: = 1.0 ## Период отправки команд на шину Modbus
@export var reconnect_period: = 5.0 ## Период переподключения
var regs_input: = {} ## Регистры входные
var regs_holding: = {} ## Регистры хранения
@@ -23,6 +24,7 @@ var input_stack: = [] ## Стек команд для чтения регис
var read_step: = 0
var switches_sync: = false
var timer = Timer.new()
var timer_reconnect = Timer.new()
class StackItem:
@@ -59,6 +61,14 @@ func _on_timeout(unit_sch3) -> void:
read_step %= 2
func _on_timeout_recconect(unit_sch3):
var unit_key = settings.get_unit_key(unit_sch3.name)
var mbc = network.mbcs[unit_key]
mbc.try_reconnect()
var mb_data = {'code': 'read_holding', 'data': [0, 4], 'unit': 0}
mbc.send_to(mb_data)
## Вызывается при изменении состояния выключателя[br]
## [param val] - Состояние выключателя[br]
## [param meta] - Адреса регистров и индексы битов назначенных выключателю[br]
@@ -99,11 +109,14 @@ func _ready() -> void:
timer.connect('timeout', _on_timeout.bind(unit_sch3))
add_child(timer)
timer.start(request_period)
timer_reconnect.connect('timeout', _on_timeout_recconect.bind(unit_sch3))
add_child(timer_reconnect)
func on_command_fail(unit_sch3):
unit_sch3.cmd_state = unit.Unit.CmdState.DONE
timer.stop()
timer_reconnect.start(reconnect_period)
## Вызывается, когда состояния прибора Щ3 "на связи" изменяется[br]
@@ -124,8 +137,10 @@ func on_line_changed(unit_sch3: sch_3.Sch3):
$margin/vbox/grid1/state_freq.texture = textures[STATE_VAL.NONE]
$margin/vbox/grid/state.texture = textures[STATE_VAL.NONE]
else:
timer_reconnect.stop()
timer.start(request_period)
## Вызывается по сигналу "приняты данные чтения регистров хранения"[br]
## [param base_addr] - Начальный адрес регистров.[br]
## [param data] - Массив значений прочитанных из регистров.

View File

@@ -721,7 +721,7 @@ size_flags_vertical = 4
tooltip_text = "Индикатор допуска входного напряжения"
texture = ExtResource("2_ln52a")
expand_mode = 1
metadata/bits = [0, 0, 2, 0]
metadata/bits = [0, 15, 4, 0]
[node name="lbl0" type="Label" parent="margin/vbox/grid1"]
self_modulate = Color(1, 1, 1, 0.627451)

View File

@@ -49,6 +49,7 @@ class SocketTCP extends TCPServer:
class Modbus extends ModbusClientRtu:
var unit_name
func send_to(data):
if data['code'] == 'write':
var addr = data['data'].pop_at(0)
@@ -58,6 +59,14 @@ class Modbus extends ModbusClientRtu:
elif data['code'] == 'read_input':
request_read_input(data['data'][0], data['data'][1])
func try_reconnect():
var port = settings.UnitProfiles[unit_name][1]
var params = settings.UnitProfiles[unit_name][2]
thread_stop()
close()
open(port, params[1], params[0], params[2], params[3], params[4])
thread_run()
var poll_sockets: Array[Socket]
var tcp_sockets: Array
@@ -120,6 +129,7 @@ func create_modbus(nm, mbc_unit) -> Modbus:
mbc.connect('write', mbc_unit.on_write)
var _rc = mbc.open(port, params[1], params[0], params[2], params[3], params[4])
mbc.thread_run()
mbc.unit_name = nm
return mbc

View File

@@ -51,7 +51,7 @@ class Sch3 extends unit.Unit:
## [param tick] - Текущщее время в мс.[br]
func parse(message: Dictionary, tick: int) -> bool:
rx_tick = tick
if not online:
if not online and (message['code'] != 'exception'):
online = true
emit_signal('line_changed', self)
if message.has('code') and message.has('data'):