1 创建 Node.js 项目
接上回书说到,我们成功创建了一个简单的 Node.js 程序,下一步我们要开始创建一个能与 Modbus TCP Server 通讯的项目,那么最先需要用到的就是 npm 命令。
1.1 NPM 包管理
安装 Node.js 时,应该已经同时安装了 npm,它是 Node.js 最广泛使用的包管理和分发工具。
打开终端,输入 npm -v
,如果得到以下返回,则说明 npm 已经安装成功。
> npm -v
6.14.14
1.2 初始化项目
首先创建一个项目文件夹,在终端中进入该文件夹,然后输入 npm init
,随后按照下图配置项目。(# 后为注释)
> npm init
Debugger attached.
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.
See `npm help init` for definitive documentation on these fields
and exactly what they do.
Use `npm install <pkg>` afterwards to install a package and
save it as a dependency in the package.json file.
Press ^C at any time to quit.
package name: (2-modbus-tcp with h5u) h5u-modbus-tcp-client # 项目名
version: (1.0.0) # 版本
description: This is a modbus client for inovance h5u plc # 描述
entry point: (modbus-client.js) # 入口文件
test command: node modbus-client.js # 测试命令
git repository: # git仓库
keywords:
author: mingiii # 作者
license: (ISC)
About to write to package.json:
{
"name": "h5u-modbus-tcp-client",
"version": "1.0.0",
"description": "This is a modbus client for inovance h5u plc",
"main": "modbus-client.js",
"scripts": {
"test": "node modbus-client.js"
},
"author": "mingiii",
"license": "ISC"
}
Is this OK? (yes)
自此项目初始化完成。
2 下载 modbus-serial 库
在 NPM官网 我们可以看到一个比较活跃的,由纯 JavaScript 实现的 Modbus-RTU / TCP 库 “modbus-serial”
这里我们就直接使用这个库进行与 H5U 的通讯
打开终端,在我们的项目文件夹下输入指令 npm i modbus-serial
如果在安装时遇到问题,请尝试 npm i modbus-serial --unsafe-perm --build-from-source
> npm i modbus-serial
+ modbus-serial@8.0.5
added 55 packages from 43 contributors and audited 55 packages in 9.946s
20 packages are looking for funding
run `npm fund` for details
found 0 vulnerabilities
上图所示代表下载成功。
如果由于网络环境无法成功下载的,可以尝试使用国内镜像 NPM MIRROR
3 创建一个 Modbus TCP Client
完成了依赖下载,我们新建一个 modbus-client.js
文件来完成我们的 Modbus TCP 客户端。
H5U 的 Modbus 地址请参考 《H5U系列可编程逻辑控制器 编程与应用手册》5.5.2 功能码与地址
// 创建一个空的modbus客户端
var ModbusRTU = require("modbus-serial");
var client = new ModbusRTU();
// 连接TCP,192.168.1.88为 H5U 默认 IP
client.connectTCP("192.168.1.88", { port: 502 });
client.setID(1);
// 每1000ms将1、2、3、4、5分别写入D0到D4,之后回调read函数
setInterval(function () {
client.writeRegisters(0, [1, 2, 3, 4, 5])
.then(read);
}, 1000);
function read () {
// 读取并打印D0到D4
client.readHoldingRegisters(0, 5)
.then(console.log);
}
4 读写 H5U PLC
在 H5U 中定义 D0 到 D4 共计5个变量。
![](data/attachment/album/202208/12/151952tfypp3pyhc5ycfyl.png)
连接网线至 PLC 并下载程序,然后将 PLC 置 run。
在电脑上打开终端,在项目文件夹下输入 npm test
, 即可见到如下输出(按 ctrl + c 中止程序)
> npm test
> node modbus-client.js
{
data: [ 1, 2, 3, 4, 5 ],
buffer: <Buffer 00 01 00 02 00 03 00 04 00 05>
}
{
data: [ 1, 2, 3, 4, 5 ],
buffer: <Buffer 00 01 00 02 00 03 00 04 00 05>
}
...
此时可见 PLC 监控值变为我们所定义的值,Node.js 与 PLC 的 Modbus TCP 已经成功实现。
![](data/attachment/album/202208/12/151954ni9ki875tzv6cvvn.png)
5 参考文献
- modbus-serial document / kzamir, 2021
- H5U系列可编程逻辑控制器 编程与应用手册 / 汇川,2021.08
6 讨饭用附件
附件不包含依赖,使用前请输入npm i
安装
给点给点