Продолжаю свои эксперименты с написании своего правила по опросу железки с несовсем modbus’ом. Возникли сложности, небольшие сложности, не могу понять как правильно в цикле получать ответ после запроса
var pathRPC = "/rpc/v1/wb-mqtt-serial/port/Load/";
var modbusPort = "/dev/ttyRS485-1";
var modbusSpeed = 9600;
var modbusParity = "N";
var modbusStopbit = 2;
var message = "E0300C8000644C9"; //тест
var MainDevName = "Virtual-device_n2";
var period = 5000;
var CountCh=0;
var DevCh = new Array(100);
for (var i = 0; i < 100; i++) {
DevCh[i] = new Array(2);
}
function requestRPC(modbusPort, modbusSpeed, modbusParity, modbusStopbit, clientID, requiestID, messageType, addr, responseSize){
strJson = JSON.stringify({params: {response_size: responseSize, format: messageType, path: modbusPort, baud_rate: modbusSpeed, parity: modbusParity, "data_bits" : 8, "stop_bits" : modbusStopbit, "msg": message}, "id" : requiestID});
log("-------------------------------");
log("strJson =", strJson, " / addr = ", addr);
publish(pathRPC+DevCh[addr][0], strJson, 1, false);
trackMqtt(pathRPC+DevCh[addr][0]+"/reply", function(message){
if (message.value!=""){
log(message.value, " / ", addr);
}
});
dev[MainDevName + "/" + DevCh[addr][0]] = dev["wb-adc/V5_0"]; // тест. заполнение виртуального устройства получеными данными
};
getDevice(MainDevName).controlsList().forEach(function(ctrl) { //функция разбора витруального устройства и наполнение массива индексами топиков для цикличной обработки
DevCh[CountCh][0] = ctrl.getId();
DevCh[CountCh][1] = ctrl.getTitle();
CountCh++;
});
cycle_req();
function thread_req(hex, i) {
setTimeout(function () {
requestRPC(modbusPort, modbusSpeed, modbusParity, modbusStopbit, clientID, 1, "HEX", i, 8);
}, 500 * i);
}
function cycle_req() {
setInterval(function() {
for (var i =0; i < CountCh; i++){
thread_req("HEX", i);
};
}, period);
};