通讯编程001——Nodejs快速开发Modbus TCP Master

本文介绍了如何使用ModbusJs库在Nodejs环境中开发ModbusTCPMaster。详细步骤包括安装库、创建TCP客户端、处理连接事件,以及执行读取(如读取线圈、离散输入、保持寄存器、输入寄存器)和写入(如写单个/多个线圈和寄存器)操作。此外,还提供了示例代码展示连接、读写流程及错误处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文介绍如何利用ModbusJs库快速开发Modbus TCP Master。相关源码请登录网信数智 (wangxinzhihui.com)下载。

    ModbusJs是一个基于Nodejs的Modbus TCP的开发库,目前支持的功能函数有:

  • readCoils
  • readDiscreteInputs
  • readHoldingRegisters
  • readInputRegisters
  • writeSingleCoil
  • writeSingleRegister
  • writeMultipleCoils
  • writeMultipleCoilsSameValue
  • writeMultipleRegisters
  • writeMultipleRegistersSameValue
  1. 安装modbusjs
npm install modbusjs

     2. 引入ModbusJS

var ModbusTcpClient = require('modbusjs').ModbusTcpClient;

     3. 创建Modbus TCP客户端

var mtcp = new ModbusTcpClient('localhost', 502, {debug: true});

     4. 创建相关事件处理

//连接事件处理

modbusTcpClient.connect().then(function(){

    // Success

}).catch(function(err){

    // Error

});


//断开连接事件处理

modbusTcpClient.disconnect().then(function(){

    // Success

}).catch(function(err){

    // Error (ie. no active connection)

});


//重连事件处理

modbusTcpClient.reconnect().then(function(){

    // Success

}).catch(function(err){

    // Error

});


//错误事件处理

modbusTcpClient.on('error', function(err){

    console.log('ERROR - ' + err);

});

     5. 读操作

        a) 读多个线圈:function readCoils(address, length[,options])

        如:读取地址0开始10个线圈值。

modbusTcpClient.readCoils(0, 10).then(function(result){

    // Success

}).catch(function(err){

    // Error

});

        b) 读多个离散输入:function readDiscreteInputs(address, length[,options])

        如:读取地址1开始8个离散输入值。

modbusTcpClient. readDiscreteInputs (1, 8).then(function(result){

    // Success

}).catch(function(err){

    // Error

});

        c) 读多个保持寄存器:function readHoldingRegisters(address, length[,options])

        如:读取保持寄存器地址10开始20个寄存器。

modbusTcpClient. readHoldingRegisters (10, 20).then(function(result){

    // Success

}).catch(function(err){

    // Error

});

        d) 读多个输入寄存器:function readInputgRegisters(address, length[,options])

        如:读取输入寄存器地址5开始10个寄存器。

modbusTcpClient. readInputgRegisters (5, 10).then(function(result){

    // Success

}).catch(function(err){

    // Error

});

  6) 写操作

        a) 写单个线圈值:function writeSingleCoil(address, value[,options])

        如:写地址6的线圈值为0。

modbusTcpClient.writeSingleCoil(6, 0).then(function(res){

    // Success

}).catch(function(err){

    // Error

})

        b) 写单个保持寄存器:function writeSingleRegister (address, value[,options])

        如:写地址10的保持寄存器值为1234。

modbusTcpClient. writeSingleRegister (10, 1234).then(function(res){

    // Success

}).catch(function(err){

    // Error

})

        c) 写多个线圈不同值:function writeMultipleCoils (address, value[,options])

        如:往地址6开始的线圈依次写入true, false, false, true, 0, 0, 1。

modbusTcpClient. writeMultipleCoils (6, [true, false, false, true, 0, 0, 1]).then(function(res){
    // Success

}).catch(function(err){

    // Error

})

        d) 写多个线圈相同值:function writeMultipleCoilsSameValue(address, length, value[,options])

        如:往地址为1开始20个线圈写入值1。

modbusTcpClient.writeMultipleCoilsSameValue(1, 20, true).then(function(res){

    // Success

}).catch(function(err){

    // Error

})

        e) 写多个保持寄存器不同值:function writeMultipleRegisters (address, value[,options])

   如:往地址6开始的保持寄存器依次写入1,2,3,4,5,6,7,8。          
modbusTcpClient. writeMultipleRegisters (6, [1,2,3,4,5,6,7,8
]).then(function(res){
    // Success

}).catch(function(err){

    // Error

})

        f) 写多个保持寄存器相同值:function writeMultipleRegistersSameValue (address, length, value[,options])

        如:往地址为1开始20个保持寄存器写入值345。

modbusTcpClient. writeMultipleRegistersSameValue (1, 20, 345).then(function(res){

    // Success

}).catch(function(err){

    // Error

})

   7. 示例:

//引入modbusjs

var ModbusTcpClient = require('modbusjs').ModbusTcpClient;

//创建ModbusTcpClient对象

var mtcp = new ModbusTcpClient('localhost', 502, {debug: true});


//创建连接事件处理

mtcp.on('connect', function(err){

    console.log('连接成功');

}).on('error', function(err){

    console.log('错误 - ' + err);

});


//创建连接断开事件处理

mtcp.on('disconnect', function(){

    console.log('连接断开');

});


//顺序执行

mtcp.connect().then(function(){

    //连接成功后读取线圈

    mtcp.readCoils(0, 20).then(function(res){

        console.log(res.result);

        //读取保持寄存器

        mtcp.readHoldingRegisters(11, 10).then(function(res){

            console.log(res.result);

            //循环执行

            loop(1);

        })

    })

}).catch(function(err){

    console.log(err);

});


//循环执行

function loop(r) {

    var promises = [];

    promises.push(mtcp.readCoils(0, 10));

    promises.push(mtcp.readDiscreteInputs(0, 10));

    promises.push(mtcp.readHoldingRegisters(1, 10));

    promises.push(mtcp.readHoldingRegisters(10, 50, {unsigned: true}));

    promises.push(mtcp.readInputgRegisters(0, 30));

    Promise.all(promises).then(function(results){

        console.log("REQUEST "+r);

        console.log("===============");

        results.forEach(function(result){

            console.log(JSON.stringify(result.result));

        });

    }).catch(function(err){

        console.log(err);

    });

    setTimeout(function(){execute(r+1)}, 500);

}

    更多通讯资源请登录网信数智 (wangxinzhihui.com)。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值