You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js中使用async parallel与modbus-serial无法获取值求助

解决modbus-serial结合async.parallel无法获取返回值的问题

作为Node.js和Modbus开发的过来人,我一眼就看到了你代码里的几个关键问题,帮你拆解并给出修正方案:

核心问题分析

  • 连接未就绪就执行请求:client.connectRTUBuffered是异步方法,你直接在它后面就调用async.parallel,这时候客户端还没完成连接,Modbus请求自然发不出去或者拿不到返回。
  • async任务未触发回调:你定义的每个并行任务函数,只执行了client.writeFC3,但没有调用clbk回调来传递错误或结果——async.parallel就是靠这个回调来收集返回值的,你不调用它自然拿不到数据。
  • 代码拼写不完整:你代码里的fu...应该是function的拼写错误,得补全才能正常运行。

修正后的完整代码

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

// 初始化Modbus客户端
const client = new ModbusRTU();

// 先确保连接成功,再启动定时任务
client.connectRTUBuffered("COM3", { baudRate: 9600 })
  .then(() => {
    console.log("Modbus RTU连接成功 ✅");
    // 每秒执行一次并行Modbus请求(可根据需求调整间隔)
    setInterval(() => {
      async.parallel({
        // 第一个Modbus请求任务
        async_modbus_1_1: (clbk) => {
          client.writeFC3(1, 4103, 2, (err, data) => {
            if (err) {
              return clbk(err, null); // 传递错误给async
            }
            console.log("任务1返回数据:", data);
            clbk(null, data); // 传递数据给async
          });
        },
        // 第二个Modbus请求任务
        async_modbus_1_2: (clbk) => {
          client.writeFC3(1, 4105, 2, (err, data) => {
            if (err) {
              return clbk(err, null);
            }
            console.log("任务2返回数据:", data);
            clbk(null, data);
          });
        }
      }, (err, results) => {
        // 所有并行任务完成后的统一处理
        if (err) {
          console.error("并行任务执行出错:", err);
          return;
        }
        console.log("所有任务最终结果:", results);
      });
    }, 1000);
  })
  .catch((err) => {
    console.error("Modbus RTU连接失败 ❌:", err);
  });

关键修改说明

  1. 等待连接就绪:用.then()等待connectRTUBuffered连接成功后再启动定时任务,彻底避免未连接状态下的无效请求。
  2. 正确触发async回调:每个并行任务里,在writeFC3的回调中必须调用clbk,把错误或数据传递给async.parallel,这样才能在最终回调里拿到所有任务的返回值。
  3. 完善错误处理:添加了连接失败的捕获,以及每个Modbus请求的错误处理,方便你排查连接或请求层面的问题。
  4. 补全代码拼写:把不完整的fu...替换成了标准的箭头函数(也可以用function,箭头函数更简洁)。

内容的提问来源于stack exchange,提问作者Vindy Pratama

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:34:10