nodejs中使用modbus-serial库创建Modbus TCP读取设备的数据

nodejs中使用modbus-serial库创建Modbus TCP读取设备的数据

在nodejs中安装modbus-serial库

本人使用的开发环境是Windows10下的VSCode,安装并配置好了npm、node、cnpm等工具,使用cnpm安装了modbus-serial库,可以在npm中搜到modbus-serial包以及它的介绍,
在对应的VSCode终端下使用cnpm install modbus-serial -g安装modbus-serial库

cnpm install modbus-serial -g

本来想使用libmodbus的javascript库的,不过在npm官网搜到对应的libmodbus 3.1.4的javascript库,有如下声明:

This is binding to native library libmodbus (http://libmodbus.org/).

Now working only in *nix system.

Module have native function and framework.

说是modbus目前只支持类nix系统,比如Linux、Unix系统。所以我选择了modbus-serial库,当然如果使用C和C++的话,直接使用libmodbus库的C语言版本,官网是:https://libmodbus.org,Github地址是:https://github.com/stephane/libmodbus,Linux下编译libmodbus源代码很简单,Windows下配置相对麻烦点。

非甲烷总烃设备的Modbus寄存器地址定义表

例如,要读取非甲烷总烃设备的总烃、甲烷CH4、NMHC非甲烷总烃对应的浓度,
相关监测因子参数的Modbus寄存器定义如下:

名称数据地址系数
系统参数仪器状态110
系统参数运行状态211
系统参数控制指令318
采样时间1012019
采样时间11111
采样时间12114
采样时间13114
采样时间14126
采样时间15122
TVOC状态2010
TOVC峰面积210.011908
总烃浓度220.01254
CH4状态2310
CH4峰面积240.011729
CH4浓度250.01200
NMHC状态2610
NMHC峰面积270.010
NMHC浓度280.0157
状态2918
峰面积300.010
浓度310.010
甲苯状态3218
甲苯峰面积330.010
甲苯浓度340.010
乙苯状态3518
乙苯峰面积360.010
乙苯浓度370.010
间二甲苯状态3818
间二甲苯峰面积390.010
间二甲苯浓度400.010
对二甲苯状态4118
对二甲苯峰面积420.010
对二甲苯浓度430.010
间-对二甲苯状态4418
间-对二甲苯峰面积450.010
间-对二甲苯浓度460.010
苯乙烯状态4718
苯乙烯峰面积480.010
苯乙烯浓度490.010
邻二甲苯状态5018
邻二甲苯峰面积510.010
邻二甲苯浓度520.010

非甲烷总烃分析仪有三个关键参数,即总烃、CH4、NMHC的浓度,对应Modbus寄存器地址分别为:22,25,28,获取对应寄存器数据后还需要乘以0.01

使用modbus-serial库,使用Modbus TCP协议读取对应寄存器中的数据

相关nodejs代码如下:

var moment = require('moment')

// create an empty modbus client
var ModbusRTU = require("modbus-serial")
var client = new ModbusRTU();

// open connection to a tcp line
// 创建Modbus TCP连接,IP是15.18.200.23,端口502
client.connectTCP("15.18.200.23", { port: 502 });

// 读取非甲烷总烃的关于总烃、甲烷、NMHC这3个寄存器(寄存器地址分别为22,25,28)中的浓度
// 每隔5秒钟读取保持寄存器的值,从寄存器地址22开始读取,读10个寄存器到data数组中
setInterval(function(){
    client.readHoldingRegisters(22, 10, function(err, data){
        // 获取当前时间
        //moment.locale('zh-cn');
        console.log("----------------------------------------------------------------------");
        console.log("数据时间是:" + moment().format('YYYY年MM月DD日 HH时mm分ss秒'));
        console.log("总烃的浓度是:" + data.data[0] * 0.01 + "ppmV");	// 总烃浓度对应的寄存器地址为22
        console.log("CH4的浓度是:" + data.data[3] * 0.01 + "ppmV"); // CH4浓度对应的寄存器地址为25
        console.log("NHMC的浓度是:" + data.data[6] * 0.01 + "ppmV"); // NHMC浓度对应的寄存器地址为28
        console.log("----------------------------------------------------------------------");

        //console.log(data.data);
    });
}, 5000);

上述代码使用了JavaScript 日期处理类库Moment.js对当前日期进行格式化,相关介绍见Moment.js-JavaScript 日期处理类库
使用很简单,比如项要获取当前的时间,按照2019年12月9日 16时07分23秒这种格式输出,代码如下:

var moment = require('moment');
var currentTime = moment().format('YYYY年MM月DD日 HH时mm分ss秒');
console.log("当前时间为:" + currentTime);

nodejs中安装moment库也很简单,一条命令搞定,如下:

cnpm install moment  -g

相关代码测试输出如下:

----------------------------------------------------------------------
数据时间是:2019年12月11号 16时07分56秒
总烃的浓度是:2.78ppmV
CH4的浓度是:2.07ppmV
NHMC的浓度是:0.70ppmV
----------------------------------------------------------------------
----------------------------------------------------------------------
数据时间是:2019年12月11号 16时08分01秒
总烃的浓度是:2.78ppmV
CH4的浓度是:2.07ppmV
NHMC的浓度是:0.70pmV
----------------------------------------------------------------------
----------------------------------------------------------------------
数据时间是:2019年12月11号 16时08分06秒
总烃的浓度是:2.78ppmV
CH4的浓度是:2.07ppmV
NHMC的浓度是:0.70ppmV
----------------------------------------------------------------------
已标记关键词 清除标记
相关推荐
支持Modbus TCP转Modubus RTU。RTU可以为RS232或者RS485。 支持RTU做主站或者Modubs TCP做主站。 支持多主机访问支持,最多连接100个TCP客户端。 支持所有的Modubus功能码和寄存器范围。 同时也可以做普通串口服务器使用。 ZLAN5142 概述 ZLAN5142 Modbus网关是上海卓岚信息科技有限公司开发的一款在Modbus TCPModbus RTU之间进行协议转化的转换器,其Modbus RTU可以是RS485也可以是RS232接口。 ZLAN5142具备了强大的多主机访问支持功能和RS485总线冲突控制功能。所谓多主机功能是指,ZLAN5142作为Modbus TCP服务器时可以支持多达100个TCP客户端同时连接,多个TCP连接可以随机性的访问,ZLAN5142能够分别对不同的连接给出正确应答,保证数据稳定不丢包。相对于RS485总线只能够有一个主机进行访问,ZLAN5142实现了“多主机”功能。ZLAN5142实现了RS485总线的冲突控制,防止了多主机时的串口总线抢占问题。 另外,将ZLAN5142的“转化协议”选择为“无”,也可以当作普通的透明传输的串口服务器使用。但是不同于普通的串口服务器例如ZLAN5102,ZLAN5142即使作为普通串口服务器模式下也可以支持“多主机”功能,可解决多个计算机或主站如何同时监控一个串口设备的难题。 特点 支持Modbus TCP转Modubus RTU,RTU可以为RS232或者RS485。 支持RTU做主站或者TCP做主站。 支持多主机访问支持,最多连接100个TCP客户端。 支持1200~460800波特率。 支持RS485总线冲突调度机制,防止总线冲突。 支持所有的Modubus功能码和寄存器范围。 可作为普通的透传串口服务器使用,具备ZLAN5102相同功能。 小于1W的低功耗设计。 内嵌485防雷保护功能,适合室外485通信。 支持DNS,满足通过域名实现通信的要求。支持DHCP。 2KV网络浪涌保护。 外壳采用抗辐射的SECC板,保证在高电磁辐射区也能够正常工作。 规格 网络界面 以太网 10/100 Mbps, RJ45 保护 内建2KV电磁隔离 串口界面 界面 RS-232/485 串口数 1 校验位 None, Even, Odd, Space, Mark 数据位 5~9 停止位 1,2 流控 RTS/CTS,DTR/DCR, XON/XOFF 速率 1200bps~460800bps 软件特性 协议 TCP,HTTP,UDP,ICMP,ARP,IP,DNS,DHCP 虚拟串口平台 Windows 95/98/ME/NT/2000/XP/WIN7/WIN8 配置方式 Web浏览器、卓岚ZLVirCom、串口类AT命令 电器特性 电压输入 DC9~24V,100mA 机械特性 外壳材料 抗电磁材料SECC钢板 尺寸 长×宽×高=9.4cm×6.5cm×2.5cm 工作环境 工作温度,湿度 -45~85℃,5~95% RH 储存温度,湿度 -45~165℃,5~95% RH W
©️2020 CSDN 皮肤主题: 护眼 设计师:闪电赇 返回首页