[ { "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 } ]