异步并行modbus-serial node js

时间:2018-05-03 04:23:20

标签: javascript node.js asynchronous modbus

我尝试使用此代码,但无法获得价值,任何人都可以帮助我吗?抱歉,因为我是NodeJS的新手。我不明白为什么代码无法返回值。

const ModbusRTU = require("modbus-serial");

var client = new ModbusRTU();

client.connectRTUBuffered("COM3", { baudRate: 9600 });

var async = require("async");

setInterval(function(callback) {

async.parallel({

        async_modbus_1_1: function(clbk) {

            client.writeFC3(1, 4103, 2, function(err, data) {

                console.log(data);

            });

        },

        async_modbus_1_2: function(clbk) {

            client.writeFC3(1, 4106, 2, function(err, data) {

                console.log(data);

            });

        },

        async_modbus_2_1: function(clbk) {

            client.writeFC3(3, 4103, 2, function(err, data) {

                console.log(data);

            });

        },

        async_modbus_2_2: function(clbk) {

            client.writeFC3(3, 4106, 2, function(err, data) {

                console.log(data);

            });

        }
    },
    function(error, result) {

        if (error) {
            console.log(error);
        }

        if (result) {
            console.log(result);
        }

    });

}, 1000);

我尝试使用该代码连接到modbus slave,当我尝试运行我从modbus slave获取的值时,并且在modbus slave中我只得到没有Tx值的值

000781-Rx:01 03 10 07 00 02 71 0A 01 03 10 0A 00 02 E0 C9 03 03 10 07 00 02 70 E8 03 03 10 0A 00 02 E1 2B

Image for respon from modbus slave

1 个答案:

答案 0 :(得分:0)

Dunno(如果您仍然需要帮助),但是此问题是由于尝试并行发送命令引起的。由于您正在进行Modbus串行通信,因此必须等待接收响应,然后再发送其他命令。您不能使用Async,因为它将通过串行连接并行发送命令。