Compare commits

...

25 Commits
main ... master

Author SHA1 Message Date
f465d8bdbb Changed interface_package.puml 2026-08-07 16:36:08 +03:00
f3af302d07 Changed SegNew.emtp 2026-08-07 14:43:30 +03:00
2834c56903 added file interface_package.puml 2026-08-07 14:36:58 +03:00
165e7d0304 adjustments have been made of **СОП** 2026-08-07 09:36:45 +03:00
739c04cce6 SegNew.emtp has been added 2026-08-01 16:29:36 +03:00
6ea3bf62d5 Buttons are moved from Topwin to commonwindow 2026-08-01 15:22:06 +03:00
90855011aa The ip has been changed to 10.xxx.xxx.xxx 2026-08-01 15:11:28 +03:00
dd28d13b46 The ip has been changed to 149.xxx.xxx.xxx 2026-07-30 12:20:10 +03:00
fb6fdecdf2 The diagram of **СОГ** has been changed 2026-07-30 11:39:29 +03:00
28ccaeb7f8 added WS_DSC1 to main template 2026-07-29 14:29:45 +03:00
545d280e04 added WS_DSC1 to main template 2026-07-29 14:28:07 +03:00
7b310712c7 added WS_DSC1 to main template 2026-07-29 14:25:22 +03:00
51568ac48c Merge remote-tracking branch 'origin/master'
# Conflicts:
#	cmtp/scetch/SegSketch1.emtp
2026-07-29 14:22:15 +03:00
20e73762cf added WS_DSC1 to main template 2026-07-29 14:21:04 +03:00
539ab3e752 added template 2026-07-28 21:58:54 +03:00
8bdcea0c91 changed main template (scetch) 2026-07-28 15:52:17 +03:00
7b85d75900 changed main template (scetch) 2026-07-28 15:06:32 +03:00
2504c1fd6a changed flows_149_154_66_246 2026-07-22 15:58:46 +03:00
858a54621c changed flows_149_154_66_246 2026-07-22 15:58:22 +03:00
3a4ce50c86 changed flows_149_154_66_246 2026-07-22 15:35:28 +03:00
b8612f6776 changed EBProject1_MT8121XE3_template.emtp 2026-07-22 15:32:28 +03:00
0ff19e61dc changed README.md (Abbreviations added) 2026-07-22 15:24:38 +03:00
9dfd6ba0e6 changed README.md (Abbreviations added) 2026-07-22 15:22:51 +03:00
d96d40cd41 chenged panel from cMT3072 to MT8121XE3 2026-07-22 15:11:39 +03:00
d9fd05e616 added files 2026-07-19 18:56:49 +03:00
25 changed files with 1313 additions and 2 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

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

Binary file not shown.

Binary file not shown.

BIN
cmtp/MT8121XE3/SegNew.emtp Normal file

Binary file not shown.

BIN
cmtp/scetch/SegNew.emtp Normal file

Binary file not shown.

BIN
cmtp/scetch/SegSketch1.emtp Normal file

Binary file not shown.

Binary file not shown.

BIN
cmtp/scetch/img/Unit.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 138 KiB

View File

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

View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

BIN
docs/WS/Схема1.pdf Normal file

Binary file not shown.

BIN
docs/WS/Схема2.pdf Normal file

Binary file not shown.

BIN
export/HMI_new.xls Normal file

Binary file not shown.

View 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
}
]

View 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
}
]

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB