Compare commits
25 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| f465d8bdbb | |||
| f3af302d07 | |||
| 2834c56903 | |||
| 165e7d0304 | |||
| 739c04cce6 | |||
| 6ea3bf62d5 | |||
| 90855011aa | |||
| dd28d13b46 | |||
| fb6fdecdf2 | |||
| 28ccaeb7f8 | |||
| 545d280e04 | |||
| 7b310712c7 | |||
| 51568ac48c | |||
| 20e73762cf | |||
| 539ab3e752 | |||
| 8bdcea0c91 | |||
| 7b85d75900 | |||
| 2504c1fd6a | |||
| 858a54621c | |||
| 3a4ce50c86 | |||
| b8612f6776 | |||
| 0ff19e61dc | |||
| 9dfd6ba0e6 | |||
| d96d40cd41 | |||
| d9fd05e616 |
BIN
01. Перечень сигналов.xlsx
Normal file
BIN
01. Перечень сигналов.xlsx
Normal file
Binary file not shown.
BIN
CoreBus_3.3.3_win_x64_installer.exe
Normal file
BIN
CoreBus_3.3.3_win_x64_installer.exe
Normal file
Binary file not shown.
BIN
EBProject1_MT8121XE3_template.emtp
Normal file
BIN
EBProject1_MT8121XE3_template.emtp
Normal file
Binary file not shown.
43
README.md
43
README.md
@ -1,3 +1,42 @@
|
||||
# Segozerskaya_Weintek
|
||||
# Репозиторий для сенсорной панели Weintek
|
||||
|
||||
Репозиторий для сенсорной панели Weintek
|
||||
Инструкция по установке:
|
||||
https://www.rusavtomatika.com/weintek-easybuilder-instrukciya-na-russkom/chapter01/
|
||||
Мануал:
|
||||
https://www.rusavtomatika.com/weintek-easybuilderpro-user-manual-en/
|
||||
Официальный сайт:
|
||||
https://www.weintek.com/Download/Software
|
||||
|
||||
CoreBus_3.3.3 - это полезная утилита, чтобы смотреть пакеты Modbus TCP
|
||||
|
||||
на Nodered создан сервер Modbus TCP для тестирования сенсорной панели:
|
||||
вход: http://149.154.66.246:1880 admin admin
|
||||
Данная реализация сервера позволяет работать удаленно через интеренет (есть возможность развернуть локально)
|
||||
|
||||
Для работы с сенсорной панелью достаточно программы EasyBuilder Pro, которая работает с файлами *.cmtp
|
||||
Файл EBProject1_MT8121XE3_template.emtp (тестировался с EasyBuilder Pro V6.10.01.465) принимает температуру бака в системе охлаждения
|
||||
|
||||
## Подсистемы АСУ гидроагрегата
|
||||
|
||||
Исходя из перечня сигналов, в системе выделены следующие подсистемы.
|
||||
|
||||
- **ГА** — общий пакет гидроагрегата (общие состояния, режимы, аварии, статистика).
|
||||
- **ГБ** — проточная часть + АРЗ (гидроблок, затворы, протечки).
|
||||
- **НА** — направляющий аппарат (сигналы `GV_*`, кнопки/команды, режимы управления).
|
||||
- **ТУРБ** — турбина (температуры, вибрации, протечки).
|
||||
- **МУЛ** — мультипликатор / редуктор.
|
||||
- **ГЕН** — гидрогенератор.
|
||||
- **ПЧ** — силовой преобразователь (выпрямители, инверторы, фильтр, диагностика).
|
||||
- **КРУ** — выключатель 35 кВ, разъединители 0,66 кВ, релейные защиты.
|
||||
- **СМС** — система маслосмазки.
|
||||
- **СОП** — водяная станция охлаждения силового преобразователя.
|
||||
- **ТВС** — система технического водоснабжения (теплообменники СМС/СОП).
|
||||
- **СОГ** — система охлаждения генератора / вентустановка.
|
||||
- **СТВ** — система торможения вала генератора.
|
||||
- **ПРОТ** — система контроля протечек.
|
||||
- **ПИТ** — система электропитания АСУ ГА (шкафы `+C1`, `+E1`, `+EX1`, `+I1–+I3`).
|
||||
- **G51** — технологический СОПТ / dc‑dc‑подсистема.
|
||||
- **АСУ** — верхнеуровневая логика (например, `UNIT_STATE`, `UNIT_MODE`, `UNIT_ERROR`, команды `DOUT`).
|
||||
- **ДИАГ** — диагностические параметры подсистем (`HB_STATE`, `GEN_STATE`, `MUL_STATE` и др.).
|
||||
- **РУЧН** — органы ручного управления (раздел `BUTTONS`: кнопки, переключатели, селекторы).
|
||||
- **СТАТ** — статистика и наработка (параметры `STAT_*`).
|
||||
|
||||
BIN
cmtp/MT8121XE3/EBProject1_MT8121XE3.emtp
Normal file
BIN
cmtp/MT8121XE3/EBProject1_MT8121XE3.emtp
Normal file
Binary file not shown.
BIN
cmtp/MT8121XE3/EBProject1_MT8121XE3_6.10.01.465.emtp
Normal file
BIN
cmtp/MT8121XE3/EBProject1_MT8121XE3_6.10.01.465.emtp
Normal file
Binary file not shown.
BIN
cmtp/MT8121XE3/SegNew.emtp
Normal file
BIN
cmtp/MT8121XE3/SegNew.emtp
Normal file
Binary file not shown.
BIN
cmtp/scetch/SegNew.emtp
Normal file
BIN
cmtp/scetch/SegNew.emtp
Normal file
Binary file not shown.
BIN
cmtp/scetch/SegSketch1.emtp
Normal file
BIN
cmtp/scetch/SegSketch1.emtp
Normal file
Binary file not shown.
BIN
cmtp/scetch/SegSketch1_6.08.01.296.emtp
Normal file
BIN
cmtp/scetch/SegSketch1_6.08.01.296.emtp
Normal file
Binary file not shown.
BIN
cmtp/scetch/img/Unit.png
Normal file
BIN
cmtp/scetch/img/Unit.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 138 KiB |
26
diagrams/PlantUML/interface_package.puml
Normal file
26
diagrams/PlantUML/interface_package.puml
Normal file
@ -0,0 +1,26 @@
|
||||
@startuml
|
||||
title Подсистемы АСУ ГА для главного меню
|
||||
|
||||
|
||||
package "Элементы интерфейса" {
|
||||
|
||||
package "Главный экран" {
|
||||
|
||||
package "Панель главного экрана" {
|
||||
[Значение переменной\nна главном экране]
|
||||
}
|
||||
|
||||
package "Сводная панель индикации\nпо системам" {
|
||||
[кнопка\nс меняющимся фоном]
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
package "Обычный экран" {
|
||||
[Значение переменной\nна обычном экране]
|
||||
[Таблица значений]
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@enduml
|
||||
58
diagrams/PlantUML/package.puml
Normal file
58
diagrams/PlantUML/package.puml
Normal file
@ -0,0 +1,58 @@
|
||||
@startuml
|
||||
title Подсистемы АСУ ГА для главного меню
|
||||
|
||||
package "АСУ ГА" {
|
||||
package "ГА (общие)" as GA
|
||||
package "ГБ + АРЗ" as GB
|
||||
package "НА" as NA
|
||||
package "ТУРБ" as TURB
|
||||
package "МУЛ" as MUL
|
||||
package "ГЕН" as GEN
|
||||
package "ПЧ" as PCC
|
||||
package "КРУ" as KRU
|
||||
}
|
||||
|
||||
package "Вспомогательные системы" {
|
||||
package "СМС" as SMS
|
||||
package "СОП" as SOP
|
||||
package "ТВС" as TVS
|
||||
package "СОГ" as VENT
|
||||
package "СТВ (тормоз)" as SH
|
||||
package "ПРОТ (протечки)" as LEAK
|
||||
}
|
||||
|
||||
package "Инфраструктура" {
|
||||
package "ПИТ (эл.питание)" as PS
|
||||
package "G51 (dc-dc)" as G51
|
||||
}
|
||||
|
||||
package "Служебные данные" {
|
||||
package "АСУ (алгоритмы/команды)" as ASU
|
||||
package "ДИАГ" as DIAG
|
||||
package "РУЧН (кнопки/переключатели)" as MAN
|
||||
package "СТАТ (статистика)" as STAT
|
||||
}
|
||||
|
||||
GA -- NA
|
||||
GA -- TURB
|
||||
GA -- MUL
|
||||
GA -- GEN
|
||||
GA -- PCC
|
||||
GA -- KRU
|
||||
|
||||
GA -- SMS
|
||||
GA -- SOP
|
||||
GA -- TVS
|
||||
GA -- VENT
|
||||
GA -- SH
|
||||
GA -- LEAK
|
||||
|
||||
GA -- PS
|
||||
GA -- G51
|
||||
|
||||
GA -- ASU
|
||||
GA -- DIAG
|
||||
GA -- MAN
|
||||
GA -- STAT
|
||||
|
||||
@enduml
|
||||
BIN
docs/WS/Diagram1.png
Normal file
BIN
docs/WS/Diagram1.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 37 KiB |
BIN
docs/WS/Схема1.pdf
Normal file
BIN
docs/WS/Схема1.pdf
Normal file
Binary file not shown.
BIN
docs/WS/Схема2.pdf
Normal file
BIN
docs/WS/Схема2.pdf
Normal file
Binary file not shown.
BIN
export/HMI_new.xls
Normal file
BIN
export/HMI_new.xls
Normal file
Binary file not shown.
647
nodered/flows_10_1_3_120.json
Normal file
647
nodered/flows_10_1_3_120.json
Normal file
@ -0,0 +1,647 @@
|
||||
[
|
||||
{
|
||||
"id": "e970d5dc70d18347",
|
||||
"type": "tab",
|
||||
"label": "СОП",
|
||||
"disabled": false,
|
||||
"info": "",
|
||||
"env": []
|
||||
},
|
||||
{
|
||||
"id": "e62ac17e6b1c9dfc",
|
||||
"type": "modbus-write",
|
||||
"z": "e970d5dc70d18347",
|
||||
"name": "СОП. Температура в баке",
|
||||
"showStatusActivities": false,
|
||||
"showErrors": false,
|
||||
"showWarnings": true,
|
||||
"unitid": "1",
|
||||
"dataType": "HoldingRegister",
|
||||
"adr": "1110",
|
||||
"quantity": "1",
|
||||
"server": "dca8f54c186084c0",
|
||||
"emptyMsgOnFail": false,
|
||||
"keepMsgProperties": false,
|
||||
"delayOnStart": false,
|
||||
"startDelayTime": "",
|
||||
"x": 660,
|
||||
"y": 340,
|
||||
"wires": [
|
||||
[],
|
||||
[]
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "508420e43be333ce",
|
||||
"type": "function",
|
||||
"z": "e970d5dc70d18347",
|
||||
"name": "increment register",
|
||||
"func": "// Получаем текущее значение из хранилища или задаём начальное значение 10\nlet v = flow.get('WS_T_TANK') || 50;\n\n// Увеличиваем значение на единицу и применяем циклическое изменение в диапазоне от 10 до 30\nv = ((v + 1) > 50 ? 40 : v + 1);\n\n// Сохраняем обновленное значение в поток\nflow.set('WS_T_TANK', v);\n\n// Формируем сообщение для передачи данных\nmsg.payload = {\n value: v,\n register: 0\n};\n\n// Устанавливаем дополнительные параметры сообщения\nmsg.fc = 6; // Тип операции Modbus (запись одиночного регистра)\nmsg.unitid = 1; // Идентификатор устройства\nmsg.address = 1100; // Адрес регистра\nmsg.quantity = 1; // Количество регистров\nmsg.payload = [v];// Значение, которое будет записано\n\n// Возвращаем сформированное сообщение\nreturn msg;",
|
||||
"outputs": 1,
|
||||
"noerr": 0,
|
||||
"initialize": "",
|
||||
"finalize": "",
|
||||
"libs": [],
|
||||
"x": 410,
|
||||
"y": 340,
|
||||
"wires": [
|
||||
[
|
||||
"e62ac17e6b1c9dfc"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "2d17db7509e196c3",
|
||||
"type": "inject",
|
||||
"z": "e970d5dc70d18347",
|
||||
"name": "tick",
|
||||
"props": [],
|
||||
"repeat": "1",
|
||||
"crontab": "",
|
||||
"once": true,
|
||||
"onceDelay": 1,
|
||||
"topic": "",
|
||||
"x": 210,
|
||||
"y": 340,
|
||||
"wires": [
|
||||
[
|
||||
"508420e43be333ce",
|
||||
"f6c0bd60f7ccd6ef",
|
||||
"db13f2e72e433d76",
|
||||
"4ab024b1aff02ed1",
|
||||
"56c8dc122932bed2",
|
||||
"3a020fc62ad49e57",
|
||||
"074962eb71d9e17b",
|
||||
"d6138c7ab7ea1ab2",
|
||||
"b26409848ae18772",
|
||||
"da876dc86734b4e5"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "7e1660490b2d2753",
|
||||
"type": "modbus-server",
|
||||
"z": "e970d5dc70d18347",
|
||||
"name": "",
|
||||
"logEnabled": true,
|
||||
"hostname": "0.0.0.0",
|
||||
"serverPort": 10502,
|
||||
"responseDelay": 100,
|
||||
"delayUnit": "ms",
|
||||
"coilsBufferSize": 10000,
|
||||
"holdingBufferSize": 10000,
|
||||
"inputBufferSize": 10000,
|
||||
"discreteBufferSize": 10000,
|
||||
"showErrors": true,
|
||||
"showStatusActivities": true,
|
||||
"x": 200,
|
||||
"y": 120,
|
||||
"wires": [
|
||||
[],
|
||||
[],
|
||||
[],
|
||||
[],
|
||||
[]
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "9be14f7aeb1445fc",
|
||||
"type": "modbus-write",
|
||||
"z": "e970d5dc70d18347",
|
||||
"name": "СОП. Температура после т/об",
|
||||
"showStatusActivities": false,
|
||||
"showErrors": false,
|
||||
"showWarnings": true,
|
||||
"unitid": "1",
|
||||
"dataType": "HoldingRegister",
|
||||
"adr": "1111",
|
||||
"quantity": "1",
|
||||
"server": "dca8f54c186084c0",
|
||||
"emptyMsgOnFail": false,
|
||||
"keepMsgProperties": false,
|
||||
"delayOnStart": false,
|
||||
"startDelayTime": "",
|
||||
"x": 670,
|
||||
"y": 400,
|
||||
"wires": [
|
||||
[],
|
||||
[]
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "f6c0bd60f7ccd6ef",
|
||||
"type": "function",
|
||||
"z": "e970d5dc70d18347",
|
||||
"name": "increment register",
|
||||
"func": "// Получаем текущее значение из хранилища или задаём начальное значение 10\nlet v = flow.get('WS_T_OUT') || 40;\n\n// Увеличиваем значение на единицу и применяем циклическое изменение в диапазоне от 10 до 30\nv = ((v + 1) > 40 ? 30 : v + 1);\n\n// Сохраняем обновленное значение в поток\nflow.set('WS_T_OUT', v);\n\n// Формируем сообщение для передачи данных\nmsg.payload = {\n value: v,\n register: 0\n};\n\n// Устанавливаем дополнительные параметры сообщения\nmsg.fc = 6; // Тип операции Modbus (запись одиночного регистра)\nmsg.unitid = 1; // Идентификатор устройства\nmsg.address = 1111; // Адрес регистра\nmsg.quantity = 1; // Количество регистров\nmsg.payload = [v];// Значение, которое будет записано\n\n// Возвращаем сформированное сообщение\nreturn msg;",
|
||||
"outputs": 1,
|
||||
"noerr": 0,
|
||||
"initialize": "",
|
||||
"finalize": "",
|
||||
"libs": [],
|
||||
"x": 410,
|
||||
"y": 400,
|
||||
"wires": [
|
||||
[
|
||||
"9be14f7aeb1445fc"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "7c0b98f0d6da4d67",
|
||||
"type": "modbus-write",
|
||||
"z": "e970d5dc70d18347",
|
||||
"name": "СОП. Температура внешнего контура",
|
||||
"showStatusActivities": false,
|
||||
"showErrors": false,
|
||||
"showWarnings": true,
|
||||
"unitid": "1",
|
||||
"dataType": "HoldingRegister",
|
||||
"adr": "1112",
|
||||
"quantity": "1",
|
||||
"server": "dca8f54c186084c0",
|
||||
"emptyMsgOnFail": false,
|
||||
"keepMsgProperties": false,
|
||||
"delayOnStart": false,
|
||||
"startDelayTime": "",
|
||||
"x": 700,
|
||||
"y": 460,
|
||||
"wires": [
|
||||
[],
|
||||
[]
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "db13f2e72e433d76",
|
||||
"type": "function",
|
||||
"z": "e970d5dc70d18347",
|
||||
"name": "increment register",
|
||||
"func": "// Получаем текущее значение из хранилища или задаём начальное значение 10\nlet v = flow.get('WS_T_REC') || 50;\n\n// Увеличиваем значение на единицу и применяем циклическое изменение в диапазоне от 10 до 30\nv = ((v + 1) > 50 ? 40 : v + 1);\n\n// Сохраняем обновленное значение в поток\nflow.set('WS_T_REC', v);\n\n// Формируем сообщение для передачи данных\nmsg.payload = {\n value: v,\n register: 0\n};\n\n// Устанавливаем дополнительные параметры сообщения\nmsg.fc = 6; // Тип операции Modbus (запись одиночного регистра)\nmsg.unitid = 1; // Идентификатор устройства\nmsg.address = 1112; // Адрес регистра\nmsg.quantity = 1; // Количество регистров\nmsg.payload = [v];// Значение, которое будет записано\n\n// Возвращаем сформированное сообщение\nreturn msg;",
|
||||
"outputs": 1,
|
||||
"noerr": 0,
|
||||
"initialize": "",
|
||||
"finalize": "",
|
||||
"libs": [],
|
||||
"x": 410,
|
||||
"y": 460,
|
||||
"wires": [
|
||||
[
|
||||
"7c0b98f0d6da4d67"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "4fed1bc2370508fb",
|
||||
"type": "modbus-write",
|
||||
"z": "e970d5dc70d18347",
|
||||
"name": "СОП. Давление после насоса",
|
||||
"showStatusActivities": false,
|
||||
"showErrors": false,
|
||||
"showWarnings": true,
|
||||
"unitid": "1",
|
||||
"dataType": "HoldingRegister",
|
||||
"adr": "1113",
|
||||
"quantity": "1",
|
||||
"server": "dca8f54c186084c0",
|
||||
"emptyMsgOnFail": false,
|
||||
"keepMsgProperties": false,
|
||||
"delayOnStart": false,
|
||||
"startDelayTime": "",
|
||||
"x": 670,
|
||||
"y": 520,
|
||||
"wires": [
|
||||
[],
|
||||
[]
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "4ab024b1aff02ed1",
|
||||
"type": "function",
|
||||
"z": "e970d5dc70d18347",
|
||||
"name": "increment register",
|
||||
"func": "// Получаем текущее значение из хранилища или задаём начальное значение 10\nlet v = flow.get('WS_P_PUMP') || 50;\n\n// Увеличиваем значение на единицу и применяем циклическое изменение в диапазоне от 10 до 30\nv = ((v + 1) > 50 ? 40 : v + 1);\n\n// Сохраняем обновленное значение в поток\nflow.set('WS_P_PUMP', v);\n\n// Формируем сообщение для передачи данных\nmsg.payload = {\n value: v,\n register: 0\n};\n\n// Устанавливаем дополнительные параметры сообщения\nmsg.fc = 6; // Тип операции Modbus (запись одиночного регистра)\nmsg.unitid = 1; // Идентификатор устройства\nmsg.address = 1113; // Адрес регистра\nmsg.quantity = 1; // Количество регистров\nmsg.payload = [v];// Значение, которое будет записано\n\n// Возвращаем сформированное сообщение\nreturn msg;",
|
||||
"outputs": 1,
|
||||
"noerr": 0,
|
||||
"initialize": "",
|
||||
"finalize": "",
|
||||
"libs": [],
|
||||
"x": 430,
|
||||
"y": 520,
|
||||
"wires": [
|
||||
[
|
||||
"4fed1bc2370508fb"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "126135a5c0a3e97b",
|
||||
"type": "modbus-write",
|
||||
"z": "e970d5dc70d18347",
|
||||
"name": "СОП. Давление в контуре",
|
||||
"showStatusActivities": false,
|
||||
"showErrors": false,
|
||||
"showWarnings": true,
|
||||
"unitid": "1",
|
||||
"dataType": "HoldingRegister",
|
||||
"adr": "1114",
|
||||
"quantity": "1",
|
||||
"server": "dca8f54c186084c0",
|
||||
"emptyMsgOnFail": false,
|
||||
"keepMsgProperties": false,
|
||||
"delayOnStart": false,
|
||||
"startDelayTime": "",
|
||||
"x": 660,
|
||||
"y": 580,
|
||||
"wires": [
|
||||
[],
|
||||
[]
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "56c8dc122932bed2",
|
||||
"type": "function",
|
||||
"z": "e970d5dc70d18347",
|
||||
"name": "increment register",
|
||||
"func": "// Получаем текущее значение из хранилища или задаём начальное значение 10\nlet v = flow.get('WS_P_OUT') || 50;\n\n// Увеличиваем значение на единицу и применяем циклическое изменение в диапазоне от 10 до 30\nv = ((v + 1) > 50 ? 40 : v + 1);\n\n// Сохраняем обновленное значение в поток\nflow.set('WS_P_OUT', v);\n\n// Формируем сообщение для передачи данных\nmsg.payload = {\n value: v,\n register: 0\n};\n\n// Устанавливаем дополнительные параметры сообщения\nmsg.fc = 6; // Тип операции Modbus (запись одиночного регистра)\nmsg.unitid = 1; // Идентификатор устройства\nmsg.address = 1114; // Адрес регистра\nmsg.quantity = 1; // Количество регистров\nmsg.payload = [v];// Значение, которое будет записано\n\n// Возвращаем сформированное сообщение\nreturn msg;",
|
||||
"outputs": 1,
|
||||
"noerr": 0,
|
||||
"initialize": "",
|
||||
"finalize": "",
|
||||
"libs": [],
|
||||
"x": 430,
|
||||
"y": 580,
|
||||
"wires": [
|
||||
[
|
||||
"126135a5c0a3e97b"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "7254c3bb1d448b39",
|
||||
"type": "modbus-write",
|
||||
"z": "e970d5dc70d18347",
|
||||
"name": "СОП. Уровень в баке",
|
||||
"showStatusActivities": false,
|
||||
"showErrors": false,
|
||||
"showWarnings": true,
|
||||
"unitid": "1",
|
||||
"dataType": "HoldingRegister",
|
||||
"adr": "1115",
|
||||
"quantity": "1",
|
||||
"server": "dca8f54c186084c0",
|
||||
"emptyMsgOnFail": false,
|
||||
"keepMsgProperties": false,
|
||||
"delayOnStart": false,
|
||||
"startDelayTime": "",
|
||||
"x": 640,
|
||||
"y": 640,
|
||||
"wires": [
|
||||
[],
|
||||
[]
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "3a020fc62ad49e57",
|
||||
"type": "function",
|
||||
"z": "e970d5dc70d18347",
|
||||
"name": "increment register",
|
||||
"func": "// Получаем текущее значение из хранилища или задаём начальное значение 10\nlet v = flow.get('WS_L') || 40;\n\n// Увеличиваем значение на единицу и применяем циклическое изменение в диапазоне от 10 до 30\nv = ((v + 1) > 40 ? 20 : v + 1);\n\n// Сохраняем обновленное значение в поток\nflow.set('WS_L', v);\n\n// Формируем сообщение для передачи данных\nmsg.payload = {\n value: v,\n register: 0\n};\n\n// Устанавливаем дополнительные параметры сообщения\nmsg.fc = 6; // Тип операции Modbus (запись одиночного регистра)\nmsg.unitid = 1; // Идентификатор устройства\nmsg.address = 1115; // Адрес регистра\nmsg.quantity = 1; // Количество регистров\nmsg.payload = [v];// Значение, которое будет записано\n\n// Возвращаем сформированное сообщение\nreturn msg;",
|
||||
"outputs": 1,
|
||||
"noerr": 0,
|
||||
"initialize": "",
|
||||
"finalize": "",
|
||||
"libs": [],
|
||||
"x": 430,
|
||||
"y": 640,
|
||||
"wires": [
|
||||
[
|
||||
"7254c3bb1d448b39"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "a35cf32802b244bd",
|
||||
"type": "modbus-write",
|
||||
"z": "e970d5dc70d18347",
|
||||
"name": "СОП. WS_RESERVE1",
|
||||
"showStatusActivities": false,
|
||||
"showErrors": false,
|
||||
"showWarnings": true,
|
||||
"unitid": "1",
|
||||
"dataType": "Coil",
|
||||
"adr": "1116",
|
||||
"quantity": "1",
|
||||
"server": "dca8f54c186084c0",
|
||||
"emptyMsgOnFail": false,
|
||||
"keepMsgProperties": false,
|
||||
"delayOnStart": false,
|
||||
"startDelayTime": "",
|
||||
"x": 640,
|
||||
"y": 700,
|
||||
"wires": [
|
||||
[],
|
||||
[]
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "3271b1ce681c99a9",
|
||||
"type": "modbus-write",
|
||||
"z": "e970d5dc70d18347",
|
||||
"name": "СОП. WS_RESERVE2",
|
||||
"showStatusActivities": false,
|
||||
"showErrors": false,
|
||||
"showWarnings": true,
|
||||
"unitid": "1",
|
||||
"dataType": "Coil",
|
||||
"adr": "1117",
|
||||
"quantity": "1",
|
||||
"server": "dca8f54c186084c0",
|
||||
"emptyMsgOnFail": false,
|
||||
"keepMsgProperties": false,
|
||||
"delayOnStart": false,
|
||||
"startDelayTime": "",
|
||||
"x": 640,
|
||||
"y": 760,
|
||||
"wires": [
|
||||
[],
|
||||
[]
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "074962eb71d9e17b",
|
||||
"type": "function",
|
||||
"z": "e970d5dc70d18347",
|
||||
"name": "increment register",
|
||||
"func": "// Получаем текущее состояние, по умолчанию 0\nlet state = flow.get('WS_RESERVE2') || 0;\n\n// Гарантируем, что state — это строго 0 или 1 (на случай мусора в контексте)\nstate = (state === 1) ? 1 : 0;\n\n// Переключаем 0 <-> 1\nstate = (state === 0) ? 1 : 0;\n\n// Сохраняем новое состояние\nflow.set('WS_RESERVE2', state);\n\n// Жёстко привязываем payload к state (только 0 или 1)\n// Жёсткое условие через if/else\nif (state === 0) {\n msg.payload = 1;\n} else {\n msg.payload = 0;\n}\n\nreturn msg;\n\n",
|
||||
"outputs": 1,
|
||||
"noerr": 0,
|
||||
"initialize": "",
|
||||
"finalize": "",
|
||||
"libs": [],
|
||||
"x": 410,
|
||||
"y": 760,
|
||||
"wires": [
|
||||
[
|
||||
"3271b1ce681c99a9"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "d6138c7ab7ea1ab2",
|
||||
"type": "function",
|
||||
"z": "e970d5dc70d18347",
|
||||
"name": "increment register",
|
||||
"func": "// Получаем текущее значение из хранилища или задаём начальное значение 10\nlet v = flow.get('LIION_U') || 60;\n\n// Увеличиваем значение на единицу и применяем циклическое изменение в диапазоне от 10 до 30\nv = ((v + 1) > 60 ? 40 : v + 2);\n\n// Сохраняем обновленное значение в поток\nflow.set('LIION_U', v);\n\n// Формируем сообщение для передачи данных\nmsg.payload = {\n value: v,\n register: 0\n};\n\n// Устанавливаем дополнительные параметры сообщения\nmsg.fc = 6; // Тип операции Modbus (запись одиночного регистра)\nmsg.unitid = 1; // Идентификатор устройства\nmsg.address = 1100; // Адрес регистра\nmsg.quantity = 1; // Количество регистров\nmsg.payload = [v*10];// Значение, которое будет записано\n\n// Возвращаем сформированное сообщение\nreturn msg;",
|
||||
"outputs": 1,
|
||||
"noerr": 0,
|
||||
"initialize": "",
|
||||
"finalize": "",
|
||||
"libs": [],
|
||||
"x": 410,
|
||||
"y": 260,
|
||||
"wires": [
|
||||
[
|
||||
"4f8c16d6f02ebe0c"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "4f8c16d6f02ebe0c",
|
||||
"type": "modbus-write",
|
||||
"z": "e970d5dc70d18347",
|
||||
"name": "LIION_U",
|
||||
"showStatusActivities": false,
|
||||
"showErrors": false,
|
||||
"showWarnings": true,
|
||||
"unitid": "1",
|
||||
"dataType": "HoldingRegister",
|
||||
"adr": "91",
|
||||
"quantity": "1",
|
||||
"server": "dca8f54c186084c0",
|
||||
"emptyMsgOnFail": false,
|
||||
"keepMsgProperties": false,
|
||||
"delayOnStart": false,
|
||||
"startDelayTime": "",
|
||||
"x": 560,
|
||||
"y": 160,
|
||||
"wires": [
|
||||
[],
|
||||
[]
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "ca4aa3c10d91cadf",
|
||||
"type": "inject",
|
||||
"z": "e970d5dc70d18347",
|
||||
"name": "",
|
||||
"props": [
|
||||
{
|
||||
"p": "payload"
|
||||
},
|
||||
{
|
||||
"p": "topic",
|
||||
"vt": "str"
|
||||
}
|
||||
],
|
||||
"repeat": "",
|
||||
"crontab": "",
|
||||
"once": false,
|
||||
"onceDelay": 0.1,
|
||||
"topic": "",
|
||||
"payload": "0",
|
||||
"payloadType": "num",
|
||||
"x": 990,
|
||||
"y": 760,
|
||||
"wires": [
|
||||
[
|
||||
"d6b2b79bd3900995"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "d6b2b79bd3900995",
|
||||
"type": "modbus-write",
|
||||
"z": "e970d5dc70d18347",
|
||||
"name": "1",
|
||||
"showStatusActivities": false,
|
||||
"showErrors": false,
|
||||
"showWarnings": true,
|
||||
"unitid": "1",
|
||||
"dataType": "Coil",
|
||||
"adr": "1118",
|
||||
"quantity": "1",
|
||||
"server": "dca8f54c186084c0",
|
||||
"emptyMsgOnFail": false,
|
||||
"keepMsgProperties": false,
|
||||
"delayOnStart": false,
|
||||
"startDelayTime": "",
|
||||
"x": 1230,
|
||||
"y": 760,
|
||||
"wires": [
|
||||
[],
|
||||
[]
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "e4c8d4dd168e0307",
|
||||
"type": "inject",
|
||||
"z": "e970d5dc70d18347",
|
||||
"name": "",
|
||||
"props": [
|
||||
{
|
||||
"p": "payload"
|
||||
},
|
||||
{
|
||||
"p": "topic",
|
||||
"vt": "str"
|
||||
}
|
||||
],
|
||||
"repeat": "",
|
||||
"crontab": "",
|
||||
"once": false,
|
||||
"onceDelay": 0.1,
|
||||
"topic": "",
|
||||
"payload": "1",
|
||||
"payloadType": "num",
|
||||
"x": 990,
|
||||
"y": 840,
|
||||
"wires": [
|
||||
[
|
||||
"045d9a6b99355d8f"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "045d9a6b99355d8f",
|
||||
"type": "modbus-write",
|
||||
"z": "e970d5dc70d18347",
|
||||
"name": "1",
|
||||
"showStatusActivities": false,
|
||||
"showErrors": false,
|
||||
"showWarnings": true,
|
||||
"unitid": "1",
|
||||
"dataType": "Coil",
|
||||
"adr": "1118",
|
||||
"quantity": "1",
|
||||
"server": "dca8f54c186084c0",
|
||||
"emptyMsgOnFail": false,
|
||||
"keepMsgProperties": false,
|
||||
"delayOnStart": false,
|
||||
"startDelayTime": "",
|
||||
"x": 1230,
|
||||
"y": 840,
|
||||
"wires": [
|
||||
[],
|
||||
[]
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "2382660d4ddd0147",
|
||||
"type": "debug",
|
||||
"z": "e970d5dc70d18347",
|
||||
"name": "debug 3",
|
||||
"active": true,
|
||||
"tosidebar": true,
|
||||
"console": false,
|
||||
"tostatus": false,
|
||||
"complete": "false",
|
||||
"statusVal": "",
|
||||
"statusType": "auto",
|
||||
"x": 600,
|
||||
"y": 880,
|
||||
"wires": []
|
||||
},
|
||||
{
|
||||
"id": "402b15cf9cc8430d",
|
||||
"type": "modbus-write",
|
||||
"z": "e970d5dc70d18347",
|
||||
"name": "СОП. Дискретные сигналы водяной станции",
|
||||
"showStatusActivities": false,
|
||||
"showErrors": false,
|
||||
"showWarnings": true,
|
||||
"unitid": "1",
|
||||
"dataType": "HoldingRegister",
|
||||
"adr": "1118",
|
||||
"quantity": "1",
|
||||
"server": "dca8f54c186084c0",
|
||||
"emptyMsgOnFail": false,
|
||||
"keepMsgProperties": false,
|
||||
"delayOnStart": false,
|
||||
"startDelayTime": "",
|
||||
"x": 720,
|
||||
"y": 820,
|
||||
"wires": [
|
||||
[],
|
||||
[]
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "b26409848ae18772",
|
||||
"type": "function",
|
||||
"z": "e970d5dc70d18347",
|
||||
"name": "increment register",
|
||||
"func": "// Получаем текущее состояние, по умолчанию 0\nlet state = flow.get('WS_RESERVE1') || 0;\n\n// Гарантируем, что state — это строго 0 или 1 (на случай мусора в контексте)\nstate = (state === 1) ? 1 : 0;\n\n// Переключаем 0 <-> 1\nstate = (state === 0) ? 1 : 0;\n\n// Сохраняем новое состояние\nflow.set('WS_RESERVE1', state);\n\n// Жёстко привязываем payload к state (только 0 или 1)\n// Жёсткое условие через if/else\nif (state === 0) {\n msg.payload = 0;\n} else {\n msg.payload = 1;\n}\n\nreturn msg;\n\n",
|
||||
"outputs": 1,
|
||||
"noerr": 0,
|
||||
"initialize": "",
|
||||
"finalize": "",
|
||||
"libs": [],
|
||||
"x": 410,
|
||||
"y": 700,
|
||||
"wires": [
|
||||
[
|
||||
"a35cf32802b244bd"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "da876dc86734b4e5",
|
||||
"type": "function",
|
||||
"z": "e970d5dc70d18347",
|
||||
"name": "increment register",
|
||||
"func": "// Получаем текущее значение из хранилища или задаём начальное значение 10\nlet v = flow.get('WS_DSC1') || 0;\n\n// Увеличиваем значение на единицу и применяем циклическое изменение в диапазоне от 10 до 30\nv = ((v + 1) > 15 ? 0 : v + 1);\n\n// Сохраняем обновленное значение в поток\nflow.set('WS_DSC1', v);\n\n// Формируем сообщение для передачи данных\nmsg.payload = {\n value: v,\n register: 0\n};\n\n// Устанавливаем дополнительные параметры сообщения\nmsg.fc = 6; // Тип операции Modbus (запись одиночного регистра)\nmsg.unitid = 1; // Идентификатор устройства\nmsg.address = 1115; // Адрес регистра\nmsg.quantity = 1; // Количество регистров\nmsg.payload = [v];// Значение, которое будет записано\n\n// Возвращаем сформированное сообщение\nreturn msg;\n\n",
|
||||
"outputs": 1,
|
||||
"noerr": 0,
|
||||
"initialize": "",
|
||||
"finalize": "",
|
||||
"libs": [],
|
||||
"x": 410,
|
||||
"y": 820,
|
||||
"wires": [
|
||||
[
|
||||
"402b15cf9cc8430d",
|
||||
"2382660d4ddd0147"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "dca8f54c186084c0",
|
||||
"type": "modbus-client",
|
||||
"name": "",
|
||||
"clienttype": "tcp",
|
||||
"bufferCommands": true,
|
||||
"stateLogEnabled": false,
|
||||
"queueLogEnabled": false,
|
||||
"failureLogEnabled": true,
|
||||
"tcpHost": "0.0.0.0",
|
||||
"tcpPort": "10502",
|
||||
"tcpType": "DEFAULT",
|
||||
"serialPort": "/dev/ttyUSB",
|
||||
"serialType": "RTU-BUFFERD",
|
||||
"serialBaudrate": "9600",
|
||||
"serialDatabits": "8",
|
||||
"serialStopbits": "1",
|
||||
"serialParity": "none",
|
||||
"serialConnectionDelay": "100",
|
||||
"serialAsciiResponseStartDelimiter": "0x3A",
|
||||
"unit_id": 1,
|
||||
"commandDelay": 1,
|
||||
"clientTimeout": 1000,
|
||||
"reconnectOnTimeout": true,
|
||||
"reconnectTimeout": 2000,
|
||||
"parallelUnitIdsAllowed": true,
|
||||
"showErrors": false,
|
||||
"showWarnings": true,
|
||||
"showLogs": true
|
||||
}
|
||||
]
|
||||
541
nodered/flows_149_154_66_246.json
Normal file
541
nodered/flows_149_154_66_246.json
Normal file
@ -0,0 +1,541 @@
|
||||
[
|
||||
{
|
||||
"id": "80472c6f5ab0ceb1",
|
||||
"type": "tab",
|
||||
"label": "СОП",
|
||||
"disabled": false,
|
||||
"info": "",
|
||||
"env": []
|
||||
},
|
||||
{
|
||||
"id": "82fa300ca05c4568",
|
||||
"type": "function",
|
||||
"z": "80472c6f5ab0ceb1",
|
||||
"name": "increment register",
|
||||
"func": "// Получаем текущее значение из хранилища или задаём начальное значение 10\nlet v = flow.get('WS_T_TANK') || 50;\n\n// Увеличиваем значение на единицу и применяем циклическое изменение в диапазоне от 10 до 30\nv = ((v + 1) > 50 ? 40 : v + 1);\n\n// Сохраняем обновленное значение в поток\nflow.set('WS_T_TANK', v);\n\n// Формируем сообщение для передачи данных\nmsg.payload = {\n value: v,\n register: 0\n};\n\n// Устанавливаем дополнительные параметры сообщения\nmsg.fc = 6; // Тип операции Modbus (запись одиночного регистра)\nmsg.unitid = 1; // Идентификатор устройства\nmsg.address = 1100; // Адрес регистра\nmsg.quantity = 1; // Количество регистров\nmsg.payload = [v];// Значение, которое будет записано\n\n// Возвращаем сформированное сообщение\nreturn msg;",
|
||||
"outputs": 1,
|
||||
"noerr": 0,
|
||||
"initialize": "",
|
||||
"finalize": "",
|
||||
"libs": [],
|
||||
"x": 410,
|
||||
"y": 340,
|
||||
"wires": [
|
||||
[
|
||||
"791aea74bb391beb",
|
||||
"782ffc62b6685ef5"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "72ede930ebd8e9ae",
|
||||
"type": "inject",
|
||||
"z": "80472c6f5ab0ceb1",
|
||||
"name": "tick",
|
||||
"props": [],
|
||||
"repeat": "1",
|
||||
"crontab": "",
|
||||
"once": true,
|
||||
"onceDelay": 1,
|
||||
"topic": "",
|
||||
"x": 210,
|
||||
"y": 340,
|
||||
"wires": [
|
||||
[
|
||||
"82fa300ca05c4568",
|
||||
"0ea8a7cec8595723",
|
||||
"18284d5de921917f",
|
||||
"503edbe326920db4",
|
||||
"a00a9797429ad64e",
|
||||
"8656df9f506874b5",
|
||||
"0600f89cbbef760f",
|
||||
"233784632d9af852",
|
||||
"3368d6dd4d245c14",
|
||||
"b70f9de01e3737a7"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "782ffc62b6685ef5",
|
||||
"type": "debug",
|
||||
"z": "80472c6f5ab0ceb1",
|
||||
"name": "debug 3",
|
||||
"active": true,
|
||||
"tosidebar": true,
|
||||
"console": false,
|
||||
"tostatus": false,
|
||||
"complete": "false",
|
||||
"statusVal": "",
|
||||
"statusType": "auto",
|
||||
"x": 860,
|
||||
"y": 260,
|
||||
"wires": []
|
||||
},
|
||||
{
|
||||
"id": "0ea8a7cec8595723",
|
||||
"type": "function",
|
||||
"z": "80472c6f5ab0ceb1",
|
||||
"name": "increment register",
|
||||
"func": "// Получаем текущее значение из хранилища или задаём начальное значение 10\nlet v = flow.get('WS_T_OUT') || 50;\n\n// Увеличиваем значение на единицу и применяем циклическое изменение в диапазоне от 10 до 30\nv = ((v + 1) > 50 ? 40 : v + 1);\n\n// Сохраняем обновленное значение в поток\nflow.set('WS_T_OUT', v);\n\n// Формируем сообщение для передачи данных\nmsg.payload = {\n value: v,\n register: 0\n};\n\n// Устанавливаем дополнительные параметры сообщения\nmsg.fc = 6; // Тип операции Modbus (запись одиночного регистра)\nmsg.unitid = 1; // Идентификатор устройства\nmsg.address = 1111; // Адрес регистра\nmsg.quantity = 1; // Количество регистров\nmsg.payload = [v];// Значение, которое будет записано\n\n// Возвращаем сформированное сообщение\nreturn msg;",
|
||||
"outputs": 1,
|
||||
"noerr": 0,
|
||||
"initialize": "",
|
||||
"finalize": "",
|
||||
"libs": [],
|
||||
"x": 410,
|
||||
"y": 400,
|
||||
"wires": [
|
||||
[
|
||||
"3e733d4f4f7c7eca"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "18284d5de921917f",
|
||||
"type": "function",
|
||||
"z": "80472c6f5ab0ceb1",
|
||||
"name": "increment register",
|
||||
"func": "// Получаем текущее значение из хранилища или задаём начальное значение 10\nlet v = flow.get('WS_T_REC') || 50;\n\n// Увеличиваем значение на единицу и применяем циклическое изменение в диапазоне от 10 до 30\nv = ((v + 1) > 50 ? 40 : v + 1);\n\n// Сохраняем обновленное значение в поток\nflow.set('WS_T_REC', v);\n\n// Формируем сообщение для передачи данных\nmsg.payload = {\n value: v,\n register: 0\n};\n\n// Устанавливаем дополнительные параметры сообщения\nmsg.fc = 6; // Тип операции Modbus (запись одиночного регистра)\nmsg.unitid = 1; // Идентификатор устройства\nmsg.address = 1112; // Адрес регистра\nmsg.quantity = 1; // Количество регистров\nmsg.payload = [v];// Значение, которое будет записано\n\n// Возвращаем сформированное сообщение\nreturn msg;",
|
||||
"outputs": 1,
|
||||
"noerr": 0,
|
||||
"initialize": "",
|
||||
"finalize": "",
|
||||
"libs": [],
|
||||
"x": 410,
|
||||
"y": 460,
|
||||
"wires": [
|
||||
[
|
||||
"66749e276ed8f774"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "503edbe326920db4",
|
||||
"type": "function",
|
||||
"z": "80472c6f5ab0ceb1",
|
||||
"name": "increment register",
|
||||
"func": "// Получаем текущее значение из хранилища или задаём начальное значение 10\nlet v = flow.get('WS_P_PUMP') || 50;\n\n// Увеличиваем значение на единицу и применяем циклическое изменение в диапазоне от 10 до 30\nv = ((v + 1) > 50 ? 40 : v + 1);\n\n// Сохраняем обновленное значение в поток\nflow.set('WS_P_PUMP', v);\n\n// Формируем сообщение для передачи данных\nmsg.payload = {\n value: v,\n register: 0\n};\n\n// Устанавливаем дополнительные параметры сообщения\nmsg.fc = 6; // Тип операции Modbus (запись одиночного регистра)\nmsg.unitid = 1; // Идентификатор устройства\nmsg.address = 1113; // Адрес регистра\nmsg.quantity = 1; // Количество регистров\nmsg.payload = [v];// Значение, которое будет записано\n\n// Возвращаем сформированное сообщение\nreturn msg;",
|
||||
"outputs": 1,
|
||||
"noerr": 0,
|
||||
"initialize": "",
|
||||
"finalize": "",
|
||||
"libs": [],
|
||||
"x": 430,
|
||||
"y": 520,
|
||||
"wires": [
|
||||
[
|
||||
"0ae0d2efc3157ffb"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "a00a9797429ad64e",
|
||||
"type": "function",
|
||||
"z": "80472c6f5ab0ceb1",
|
||||
"name": "increment register",
|
||||
"func": "// Получаем текущее значение из хранилища или задаём начальное значение 10\nlet v = flow.get('WS_P_OUT') || 50;\n\n// Увеличиваем значение на единицу и применяем циклическое изменение в диапазоне от 10 до 30\nv = ((v + 1) > 50 ? 40 : v + 1);\n\n// Сохраняем обновленное значение в поток\nflow.set('WS_P_OUT', v);\n\n// Формируем сообщение для передачи данных\nmsg.payload = {\n value: v,\n register: 0\n};\n\n// Устанавливаем дополнительные параметры сообщения\nmsg.fc = 6; // Тип операции Modbus (запись одиночного регистра)\nmsg.unitid = 1; // Идентификатор устройства\nmsg.address = 1114; // Адрес регистра\nmsg.quantity = 1; // Количество регистров\nmsg.payload = [v];// Значение, которое будет записано\n\n// Возвращаем сформированное сообщение\nreturn msg;",
|
||||
"outputs": 1,
|
||||
"noerr": 0,
|
||||
"initialize": "",
|
||||
"finalize": "",
|
||||
"libs": [],
|
||||
"x": 430,
|
||||
"y": 580,
|
||||
"wires": [
|
||||
[
|
||||
"16fefaf576d59dad"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "8656df9f506874b5",
|
||||
"type": "function",
|
||||
"z": "80472c6f5ab0ceb1",
|
||||
"name": "increment register",
|
||||
"func": "// Получаем текущее значение из хранилища или задаём начальное значение 10\nlet v = flow.get('WS_L') || 50;\n\n// Увеличиваем значение на единицу и применяем циклическое изменение в диапазоне от 10 до 30\nv = ((v + 1) > 50 ? 40 : v + 1);\n\n// Сохраняем обновленное значение в поток\nflow.set('WS_L', v);\n\n// Формируем сообщение для передачи данных\nmsg.payload = {\n value: v,\n register: 0\n};\n\n// Устанавливаем дополнительные параметры сообщения\nmsg.fc = 6; // Тип операции Modbus (запись одиночного регистра)\nmsg.unitid = 1; // Идентификатор устройства\nmsg.address = 1115; // Адрес регистра\nmsg.quantity = 1; // Количество регистров\nmsg.payload = [v];// Значение, которое будет записано\n\n// Возвращаем сформированное сообщение\nreturn msg;",
|
||||
"outputs": 1,
|
||||
"noerr": 0,
|
||||
"initialize": "",
|
||||
"finalize": "",
|
||||
"libs": [],
|
||||
"x": 430,
|
||||
"y": 640,
|
||||
"wires": [
|
||||
[
|
||||
"45f23a96185e8194"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "0600f89cbbef760f",
|
||||
"type": "function",
|
||||
"z": "80472c6f5ab0ceb1",
|
||||
"name": "increment register",
|
||||
"func": "// Получаем текущее значение из хранилища или задаём начальное значение 10\nlet v = flow.get('WS_RESERVE1') || 50;\n\n// Увеличиваем значение на единицу и применяем циклическое изменение в диапазоне от 10 до 30\nv = ((v + 1) > 50 ? 40 : v + 1);\n\n// Сохраняем обновленное значение в поток\nflow.set('WS_RESERVE1', v);\n\n// Формируем сообщение для передачи данных\nmsg.payload = {\n value: v,\n register: 0\n};\n\n// Устанавливаем дополнительные параметры сообщения\nmsg.fc = 5; // Тип операции Modbus (запись одиночного регистра)\nmsg.unitid = 1; // Идентификатор устройства\nmsg.address = 1116; // Адрес регистра\nmsg.quantity = 1; // Количество регистров\nmsg.payload = [v];// Значение, которое будет записано\n\n// Возвращаем сформированное сообщение\nreturn msg;",
|
||||
"outputs": 1,
|
||||
"noerr": 0,
|
||||
"initialize": "",
|
||||
"finalize": "",
|
||||
"libs": [],
|
||||
"x": 430,
|
||||
"y": 700,
|
||||
"wires": [
|
||||
[
|
||||
"f0817ef1fe6a7c7b"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "233784632d9af852",
|
||||
"type": "function",
|
||||
"z": "80472c6f5ab0ceb1",
|
||||
"name": "increment register",
|
||||
"func": "// Получаем текущее значение из хранилища или задаём начальное значение 10\nlet v = flow.get('WS_RESERVE2') || 50;\n\n// Увеличиваем значение на единицу и применяем циклическое изменение в диапазоне от 10 до 30\nv = ((v + 1) > 50 ? 40 : v + 1);\n\n// Сохраняем обновленное значение в поток\nflow.set('WS_RESERVE2', v);\n\n// Формируем сообщение для передачи данных\nmsg.payload = {\n value: v,\n register: 0\n};\n\n// Устанавливаем дополнительные параметры сообщения\nmsg.fc = 5; // Тип операции Modbus (запись одиночного регистра)\nmsg.unitid = 1; // Идентификатор устройства\nmsg.address = 1117; // Адрес регистра\nmsg.quantity = 1; // Количество регистров\nmsg.payload = [v];// Значение, которое будет записано\n\n// Возвращаем сформированное сообщение\nreturn msg;",
|
||||
"outputs": 1,
|
||||
"noerr": 0,
|
||||
"initialize": "",
|
||||
"finalize": "",
|
||||
"libs": [],
|
||||
"x": 430,
|
||||
"y": 760,
|
||||
"wires": [
|
||||
[
|
||||
"f8997f5372daf09b"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "3368d6dd4d245c14",
|
||||
"type": "function",
|
||||
"z": "80472c6f5ab0ceb1",
|
||||
"name": "increment register",
|
||||
"func": "// Получаем текущее значение из хранилища или задаём начальное значение 10\nlet v = flow.get('WS_DSC1') || 50;\n\n// Увеличиваем значение на единицу и применяем циклическое изменение в диапазоне от 10 до 30\nv = ((v + 1) > 50 ? 40 : v + 1);\n\n// Сохраняем обновленное значение в поток\nflow.set('WS_DSC1', v);\n\n// Формируем сообщение для передачи данных\nmsg.payload = {\n value: v,\n register: 0\n};\n\n// Устанавливаем дополнительные параметры сообщения\nmsg.fc = 5; // Тип операции Modbus (запись одиночного регистра)\nmsg.unitid = 1; // Идентификатор устройства\nmsg.address = 1118; // Адрес регистра\nmsg.quantity = 1; // Количество регистров\nmsg.payload = [v];// Значение, которое будет записано\n\n// Возвращаем сформированное сообщение\nreturn msg;",
|
||||
"outputs": 1,
|
||||
"noerr": 0,
|
||||
"initialize": "",
|
||||
"finalize": "",
|
||||
"libs": [],
|
||||
"x": 430,
|
||||
"y": 820,
|
||||
"wires": [
|
||||
[
|
||||
"c1298450172d3598"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "791aea74bb391beb",
|
||||
"type": "modbus-write",
|
||||
"z": "80472c6f5ab0ceb1",
|
||||
"name": "СОП. Температура в баке",
|
||||
"showStatusActivities": false,
|
||||
"showErrors": false,
|
||||
"showWarnings": true,
|
||||
"unitid": "1",
|
||||
"dataType": "HoldingRegister",
|
||||
"adr": "1110",
|
||||
"quantity": "1",
|
||||
"server": "aa6c3b71da0ea2b8",
|
||||
"emptyMsgOnFail": false,
|
||||
"keepMsgProperties": false,
|
||||
"delayOnStart": false,
|
||||
"startDelayTime": "",
|
||||
"x": 660,
|
||||
"y": 340,
|
||||
"wires": [
|
||||
[],
|
||||
[]
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "3e733d4f4f7c7eca",
|
||||
"type": "modbus-write",
|
||||
"z": "80472c6f5ab0ceb1",
|
||||
"name": "СОП. Температура после т/об",
|
||||
"showStatusActivities": false,
|
||||
"showErrors": false,
|
||||
"showWarnings": true,
|
||||
"unitid": "1",
|
||||
"dataType": "HoldingRegister",
|
||||
"adr": "1111",
|
||||
"quantity": "1",
|
||||
"server": "",
|
||||
"emptyMsgOnFail": false,
|
||||
"keepMsgProperties": false,
|
||||
"delayOnStart": false,
|
||||
"startDelayTime": "",
|
||||
"x": 670,
|
||||
"y": 400,
|
||||
"wires": [
|
||||
[],
|
||||
[]
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "66749e276ed8f774",
|
||||
"type": "modbus-write",
|
||||
"z": "80472c6f5ab0ceb1",
|
||||
"name": "СОП. Температура внешнего контура",
|
||||
"showStatusActivities": false,
|
||||
"showErrors": false,
|
||||
"showWarnings": true,
|
||||
"unitid": "1",
|
||||
"dataType": "HoldingRegister",
|
||||
"adr": "1112",
|
||||
"quantity": "1",
|
||||
"server": "",
|
||||
"emptyMsgOnFail": false,
|
||||
"keepMsgProperties": false,
|
||||
"delayOnStart": false,
|
||||
"startDelayTime": "",
|
||||
"x": 700,
|
||||
"y": 460,
|
||||
"wires": [
|
||||
[],
|
||||
[]
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "0ae0d2efc3157ffb",
|
||||
"type": "modbus-write",
|
||||
"z": "80472c6f5ab0ceb1",
|
||||
"name": "СОП. Давление после насоса",
|
||||
"showStatusActivities": false,
|
||||
"showErrors": false,
|
||||
"showWarnings": true,
|
||||
"unitid": "1",
|
||||
"dataType": "HoldingRegister",
|
||||
"adr": "1113",
|
||||
"quantity": "1",
|
||||
"server": "",
|
||||
"emptyMsgOnFail": false,
|
||||
"keepMsgProperties": false,
|
||||
"delayOnStart": false,
|
||||
"startDelayTime": "",
|
||||
"x": 670,
|
||||
"y": 520,
|
||||
"wires": [
|
||||
[],
|
||||
[]
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "16fefaf576d59dad",
|
||||
"type": "modbus-write",
|
||||
"z": "80472c6f5ab0ceb1",
|
||||
"name": "СОП. Давление в контуре",
|
||||
"showStatusActivities": false,
|
||||
"showErrors": false,
|
||||
"showWarnings": true,
|
||||
"unitid": "1",
|
||||
"dataType": "HoldingRegister",
|
||||
"adr": "1114",
|
||||
"quantity": "1",
|
||||
"server": "",
|
||||
"emptyMsgOnFail": false,
|
||||
"keepMsgProperties": false,
|
||||
"delayOnStart": false,
|
||||
"startDelayTime": "",
|
||||
"x": 660,
|
||||
"y": 580,
|
||||
"wires": [
|
||||
[],
|
||||
[]
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "45f23a96185e8194",
|
||||
"type": "modbus-write",
|
||||
"z": "80472c6f5ab0ceb1",
|
||||
"name": "СОП. Уровень в баке",
|
||||
"showStatusActivities": false,
|
||||
"showErrors": false,
|
||||
"showWarnings": true,
|
||||
"unitid": "1",
|
||||
"dataType": "HoldingRegister",
|
||||
"adr": "1115",
|
||||
"quantity": "1",
|
||||
"server": "",
|
||||
"emptyMsgOnFail": false,
|
||||
"keepMsgProperties": false,
|
||||
"delayOnStart": false,
|
||||
"startDelayTime": "",
|
||||
"x": 640,
|
||||
"y": 640,
|
||||
"wires": [
|
||||
[],
|
||||
[]
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "f0817ef1fe6a7c7b",
|
||||
"type": "modbus-write",
|
||||
"z": "80472c6f5ab0ceb1",
|
||||
"name": "СОП. WS_RESERVE1",
|
||||
"showStatusActivities": false,
|
||||
"showErrors": false,
|
||||
"showWarnings": true,
|
||||
"unitid": "1",
|
||||
"dataType": "Coil",
|
||||
"adr": "1116",
|
||||
"quantity": "1",
|
||||
"server": "",
|
||||
"emptyMsgOnFail": false,
|
||||
"keepMsgProperties": false,
|
||||
"delayOnStart": false,
|
||||
"startDelayTime": "",
|
||||
"x": 640,
|
||||
"y": 700,
|
||||
"wires": [
|
||||
[],
|
||||
[]
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "f8997f5372daf09b",
|
||||
"type": "modbus-write",
|
||||
"z": "80472c6f5ab0ceb1",
|
||||
"name": "СОП. WS_RESERVE2",
|
||||
"showStatusActivities": false,
|
||||
"showErrors": false,
|
||||
"showWarnings": true,
|
||||
"unitid": "1",
|
||||
"dataType": "Coil",
|
||||
"adr": "1117",
|
||||
"quantity": "1",
|
||||
"server": "",
|
||||
"emptyMsgOnFail": false,
|
||||
"keepMsgProperties": false,
|
||||
"delayOnStart": false,
|
||||
"startDelayTime": "",
|
||||
"x": 640,
|
||||
"y": 760,
|
||||
"wires": [
|
||||
[],
|
||||
[]
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "c1298450172d3598",
|
||||
"type": "modbus-write",
|
||||
"z": "80472c6f5ab0ceb1",
|
||||
"name": "СОП. Дискретные сигналы водяной станции",
|
||||
"showStatusActivities": false,
|
||||
"showErrors": false,
|
||||
"showWarnings": true,
|
||||
"unitid": "1",
|
||||
"dataType": "Coil",
|
||||
"adr": "1118",
|
||||
"quantity": "1",
|
||||
"server": "",
|
||||
"emptyMsgOnFail": false,
|
||||
"keepMsgProperties": false,
|
||||
"delayOnStart": false,
|
||||
"startDelayTime": "",
|
||||
"x": 720,
|
||||
"y": 820,
|
||||
"wires": [
|
||||
[],
|
||||
[]
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "95b003fc392fcadd",
|
||||
"type": "modbus-server",
|
||||
"z": "80472c6f5ab0ceb1",
|
||||
"name": "",
|
||||
"logEnabled": true,
|
||||
"hostname": "0.0.0.0",
|
||||
"serverPort": 10502,
|
||||
"responseDelay": 100,
|
||||
"delayUnit": "ms",
|
||||
"coilsBufferSize": 10000,
|
||||
"holdingBufferSize": 10000,
|
||||
"inputBufferSize": 10000,
|
||||
"discreteBufferSize": 10000,
|
||||
"showErrors": true,
|
||||
"showStatusActivities": true,
|
||||
"x": 200,
|
||||
"y": 120,
|
||||
"wires": [
|
||||
[],
|
||||
[],
|
||||
[],
|
||||
[],
|
||||
[]
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "5c728bfa2fcb05c1",
|
||||
"type": "modbus-write",
|
||||
"z": "80472c6f5ab0ceb1",
|
||||
"name": "xxx. LIION_U",
|
||||
"showStatusActivities": false,
|
||||
"showErrors": false,
|
||||
"showWarnings": true,
|
||||
"unitid": "1",
|
||||
"dataType": "HoldingRegister",
|
||||
"adr": "91",
|
||||
"quantity": "1",
|
||||
"server": "aa6c3b71da0ea2b8",
|
||||
"emptyMsgOnFail": false,
|
||||
"keepMsgProperties": false,
|
||||
"delayOnStart": false,
|
||||
"startDelayTime": "",
|
||||
"x": 630,
|
||||
"y": 180,
|
||||
"wires": [
|
||||
[],
|
||||
[]
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "b70f9de01e3737a7",
|
||||
"type": "function",
|
||||
"z": "80472c6f5ab0ceb1",
|
||||
"name": "increment register",
|
||||
"func": "// Получаем текущее значение из хранилища или задаём начальное значение 10\nlet v = flow.get('LIION_U') || 60;\n\n// Увеличиваем значение на единицу и применяем циклическое изменение в диапазоне от 10 до 30\nv = ((v + 1) > 60 ? 40 : v + 2);\n\n// Сохраняем обновленное значение в поток\nflow.set('LIION_U', v);\n\n// Формируем сообщение для передачи данных\nmsg.payload = {\n value: v,\n register: 0\n};\n\n// Устанавливаем дополнительные параметры сообщения\nmsg.fc = 6; // Тип операции Modbus (запись одиночного регистра)\nmsg.unitid = 1; // Идентификатор устройства\nmsg.address = 1100; // Адрес регистра\nmsg.quantity = 1; // Количество регистров\nmsg.payload = [v*10];// Значение, которое будет записано\n\n// Возвращаем сформированное сообщение\nreturn msg;",
|
||||
"outputs": 1,
|
||||
"noerr": 0,
|
||||
"initialize": "",
|
||||
"finalize": "",
|
||||
"libs": [],
|
||||
"x": 410,
|
||||
"y": 240,
|
||||
"wires": [
|
||||
[
|
||||
"5c728bfa2fcb05c1"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "aa6c3b71da0ea2b8",
|
||||
"type": "modbus-client",
|
||||
"name": "",
|
||||
"clienttype": "tcp",
|
||||
"bufferCommands": true,
|
||||
"stateLogEnabled": false,
|
||||
"queueLogEnabled": false,
|
||||
"failureLogEnabled": true,
|
||||
"tcpHost": "0.0.0.0",
|
||||
"tcpPort": "10502",
|
||||
"tcpType": "DEFAULT",
|
||||
"serialPort": "/dev/ttyUSB",
|
||||
"serialType": "RTU-BUFFERD",
|
||||
"serialBaudrate": "9600",
|
||||
"serialDatabits": "8",
|
||||
"serialStopbits": "1",
|
||||
"serialParity": "none",
|
||||
"serialConnectionDelay": "100",
|
||||
"serialAsciiResponseStartDelimiter": "0x3A",
|
||||
"unit_id": "1",
|
||||
"commandDelay": "1",
|
||||
"clientTimeout": "1000",
|
||||
"reconnectOnTimeout": true,
|
||||
"reconnectTimeout": "2000",
|
||||
"parallelUnitIdsAllowed": true,
|
||||
"showErrors": false,
|
||||
"showWarnings": true,
|
||||
"showLogs": true
|
||||
}
|
||||
]
|
||||
BIN
out/diagrams/PlantUML/interface_package/interface_package.png
Normal file
BIN
out/diagrams/PlantUML/interface_package/interface_package.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 20 KiB |
BIN
out/diagrams/PlantUML/package/package.png
Normal file
BIN
out/diagrams/PlantUML/package/package.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 70 KiB |
BIN
pic_libs/SVG_Pumps/SVG_Pumps.flb
Normal file
BIN
pic_libs/SVG_Pumps/SVG_Pumps.flb
Normal file
Binary file not shown.
BIN
pic_libs/SVG_Valves_1/SVG_Valves_1.flb
Normal file
BIN
pic_libs/SVG_Valves_1/SVG_Valves_1.flb
Normal file
Binary file not shown.
BIN
pic_libs/sketches/SegSketch1.emtp
Normal file
BIN
pic_libs/sketches/SegSketch1.emtp
Normal file
Binary file not shown.
BIN
pic_libs/sketches/scetch.jpg
Normal file
BIN
pic_libs/sketches/scetch.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 98 KiB |
Loading…
Reference in New Issue
Block a user