Забивается messages TRegisterHandler::Flush(): warning:


#1

Добрый день! Подключен модуль разумного дома, в messages постоянно ошибки:

Dec  9 13:45:19 wirenboard user.notice serial: TRegisterHandler::Flush(): warning: Serial protocol error: failed to write holding @ 7 for device modbus:24
Dec  9 13:45:42 wirenboard user.notice serial: TRegisterHandler::Flush(): warning: Serial protocol error: failed to write holding @ 7 for device modbus:24
Dec  9 13:45:42 wirenboard user.notice serial: TRegisterHandler::Flush(): warning: Serial protocol error: failed to write holding @ 6 for device modbus:24
Dec  9 13:46:05 wirenboard user.notice serial: TRegisterHandler::Flush(): warning: Serial protocol error: failed to write holding @ 7 for device modbus:24
Dec  9 13:46:05 wirenboard user.notice serial: TRegisterHandler::Flush(): warning: Serial protocol error: failed to write holding @ 6 for device modbus:24
Dec  9 13:46:28 wirenboard user.notice serial: TRegisterHandler::Flush(): warning: Serial protocol error: failed to write holding @ 7 for device modbus:24
Dec  9 13:46:28 wirenboard user.notice serial: TRegisterHandler::Flush(): warning: Serial protocol error: failed to write holding @ 6 for device modbus:24
Dec  9 13:46:51 wirenboard user.notice serial: TRegisterHandler::Flush(): warning: Serial protocol error: failed to write holding @ 7 for device modbus:24
Dec  9 13:47:14 wirenboard user.notice serial: TRegisterHandler::Flush(): warning: Serial protocol error: failed to write holding @ 5 for device modbus:24
Dec  9 13:47:14 wirenboard user.notice serial: TRegisterHandler::Flush(): warning: Serial protocol error: failed to write holding @ 7 for device modbus:24

“Переопределил” устройство так:

// Configuration options
{
"device_type" : "DDL24l",
"device" : {
    "name": "DDL24 left",
    "id": "ddl24",
    "enabled": true,
        "channels": [
        {
            "name" : "2heat",
            "reg_type" : "holding",
            "address" : 4,
            "type": "range",
            "max": "0xff"
        },
        {
            "name" : "2floor",
            "reg_type" : "holding",
            "address" : 5,
            "type": "range",
            "max": "0xff"
        },
        {
            "name" : "1floor",
            "reg_type" : "holding",
            "address" : 6,
            "type": "range",
            "max": "0xff"
        },
        {
            "name" : "1heat",
            "reg_type" : "holding",
            "address" : 7,
            "type": "range",
            "max": "0xff"
        },
        {
            "name" : "channel_all",
            "reg_type" : "holding",
            "address" : 8,
            "type": "range",
            "max": 100
        }
    ]
}
}

есть подозрение, что это происходит из-за того, что скриптик пытается одновременно записывать, но ведь это должно как-то разруливаться…

function makePID(name, target, detector, control_dev, control_str) {

var et = 0;
var et_1 = 0;
var It = 0;
var It_1 = 0;
var u = 0;
var t = 0;
defineRule(name, {
    when: cron("@every 23s"),
    then: function(newValue, devName, cellName) {
        t = dev["kotelnaya"][detector];
        et = dev["temp_control"][target] - t;
        It = It_1 + (dev["temp_control"]["Ki"] / 10) * et;
        if (It > 255) {
            It = 255;
        };
        if (It < 12) {
            It = 12;
        };
        if (dev["temp_control"]["debug"]) {
            log(detector + " It= " + Math.round(It * 1000) / 1000 + " It_1= " + Math.round(It_1 * 1000) / 1000 + " текущая t=" + t + " целевая t=" + dev["temp_control"][target]);
        };
        It_1 = It;
        u = Math.round((dev["temp_control"]["Kp"] / 10) * et + It + (dev["temp_control"]["Kd"] / 10) * (et - et_1));
        if (dev.temp_control.debug) {
            log(detector + " raw=" + Math.round(u * 1000) / 1000 + " et=" + Math.round(et * 1000) / 1000 + " et_1=" + Math.round(et_1 * 1000) / 1000);
        };
        et_1 = et;
        if (u > 255) {
            u = 255;
        };
        if (u < 0) {
            u = 0;
        };
        dev[control_dev][control_str] = u;
        if (dev.temp_control.debug) {
            log(detector + " curr t=" + Math.round(t * 1000) / 1000 + " " + control_str + " u=" + u);
        };
    }
})
 };
makePID("control1_heat", "подача_1_батареи", "подача_1_батареи", "ddl24_24", "1heat");
makePID("control2_heat", "подача_2_батареи", "подача_2_батареи", "ddl24_24", "2heat");
makePID("control0_floor", "подача_0_пол", "подача_0_пол", "ddl24_23", "0_floor");
makePID("control1_floor", "подача_1_пол", "подача_1_пол", "ddl24_24", "1floor");
makePID("control2_floor", "подача_2_пол", "подача_2_пол", "ddl24_24", "2floor");

Управление отоплением 0-10в / ПИД регулятор
#2
  1. Для DDL24 есть готовый шаблон, используйте пожалуйста его
  2. Если проблема осталось, то возможно проблема в том, что железка не успевает обрабатывать запросы. В таком случае можно попробовать поставить poll_interval побольше.
    Перед этим нужно обновить пакет wb-mqtt-serial

#3

Забивается messages
Jan 1 22:15:12 wirenboard-ASOYJIPK user.notice serial: ModbusRTU::ReadRegisterRange(): failed to read 2 holding(s) @ 270 of device modbus:66: Serial protocol error: illegal data value
Jan 1 22:15:12 wirenboard-ASOYJIPK user.notice serial: ModbusRTU::ReadRegisterRange(): failed to read 1 input(s) @ 121 of device modbus:66: Serial protocol error: illegal data value

Это регистры на wb-mcm16_66 /devices/wb-mcm16_66/controls/Input Voltage и /devices/wb-mcm16_66/controls/Serial NO. в общем не самые полезные, счетчики работают нормально.

Есть способ заглушить?
Есть способ вообще убрать лонирование? флешка-то не вечная…


#4

Владислав, добрый день!
Безусловно, можно удалить из шаблона устройства регистры, которые не читаются, либо отключить логирование, но мне кажется, что этого делать не надо: сообщения, которые вы получаете говорят о том, что имеются проблемы с опросом устройства, и в дальнейшем вы будете сталкиваться с хаотически появляющимися ошибками. Поэтому стоит разобраться, что является источником ошибок. Судя по номерам регистров, устройство с адресом 66 – производства Wiren Board?


#5

устройство с адресом 66 - это ваш счетчик импульсов wb-mcm16


#6

А как он подключен к контроллеру? Длинная шина? Сколько устройств на ней?


#7

да подключен, в одном шкафу с WB, шина короткая, все импульсные входы работают и считают. проблема только с указанными регистрами (вольтаж и serial no).


#8

А подскажете, когда приобретали модуль? Можно узнать серийный номер с наклейки?


#9

очень проблематично, шкаф в труднодоступном месте.
2018 год.


#10

мне не нужны данные по вольтажу и серийник, как их убрать из опроса.


#11

Давайте тогда просто уберем. Скопируйте файл /usr/share/wb-mqtt-serial/templates/config-wb-mcm16.json в новый, замените в нем “WB-MCM16” на что-то свое, например “WB-MCM16-NVS”

    "device_type": "WB-MCM16-NVS", 
    "device": {
        "name": "WB-MCM16-NVS", 
        "id": "wb-mcm16-nvs", 

удалите секции

            {
                "name": "Input Voltage", 
                "reg_type": "input", 
                "address": 121, 
                "scale": 0.001, 
                "type": "voltage"
            }, 

и

            {
                "name": "Serial NO", 
                "type": "text", 
                "reg_type": "holding", 
                "address": 270, 
                "format": "u32"
            }, 

Удалите старое устройство и добавьте новое с тем же адресом, но называющееся WB-MCM16-NVS.


#12

Спасибо. теперь ок.


#13

Отлично!