Compare commits

..

No commits in common. "master" and "main" have entirely different histories.
master ... main

25 changed files with 2 additions and 1313 deletions

Binary file not shown.

Binary file not shown.

View File

@ -1,42 +1,3 @@
# Репозиторий для сенсорной панели Weintek
# Segozerskaya_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** — технологический СОПТ / dcdcподсистема.
- **АСУ** — верхнеуровневая логика (например, `UNIT_STATE`, `UNIT_MODE`, `UNIT_ERROR`, команды `DOUT`).
- **ДИАГ** — диагностические параметры подсистем (`HB_STATE`, `GEN_STATE`, `MUL_STATE` и др.).
- **РУЧН** — органы ручного управления (раздел `BUTTONS`: кнопки, переключатели, селекторы).
- **СТАТ** — статистика и наработка (параметры `STAT_*`).
Репозиторий для сенсорной панели Weintek

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 138 KiB

View File

@ -1,26 +0,0 @@
@startuml
title Подсистемы АСУ ГА для главного меню
package "Элементы интерфейса" {
package "Главный экран" {
package "Панель главного экрана" {
[Значение переменной\nна главном экране]
}
package "Сводная панель индикации\nпо системам" {
[кнопка\nс меняющимся фоном]
}
}
package "Обычный экран" {
[Значение переменной\nна обычном экране]
[Таблица значений]
}
}
@enduml

View File

@ -1,58 +0,0 @@
@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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,647 +0,0 @@
[
{
"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
}
]

View File

@ -1,541 +0,0 @@
[
{
"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
}
]

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 98 KiB