当前位置:首页 > JavaScript

js实现modbustcp

2026-02-02 06:45:54JavaScript

Modbus TCP 协议简介

Modbus TCP 是一种基于 TCP/IP 的工业通信协议,常用于设备间的数据交换。其协议格式简单,数据帧包含事务标识符、协议标识符、长度、单元标识符和功能码等字段。

实现 Modbus TCP 的基本步骤

创建 TCP 客户端连接
使用 Node.js 的 net 模块建立与 Modbus TCP 服务器的连接。需要指定目标设备的 IP 地址和端口(默认 502)。

构造 Modbus 请求帧
请求帧的格式如下:

  • 事务标识符(2 字节):用于匹配请求与响应
  • 协议标识符(2 字节):Modbus TCP 固定为 0x0000
  • 长度(2 字节):后续字节数
  • 单元标识符(1 字节):设备地址
  • 功能码(1 字节):如 0x03 读取保持寄存器
  • 数据(可变长度):根据功能码变化

发送请求并处理响应
通过 TCP 连接发送构造好的请求帧,监听返回的数据流。响应帧结构与请求帧类似,需校验事务标识符和功能码是否匹配。

代码示例

以下是一个读取保持寄存器的示例实现:

const net = require('net');

// Modbus TCP 请求构造
function createReadRequest(unitId, startAddr, quantity) {
  const buffer = Buffer.alloc(12);
  buffer.writeUInt16BE(1, 0); // 事务ID
  buffer.writeUInt16BE(0, 2); // 协议ID
  buffer.writeUInt16BE(6, 4); // 长度
  buffer.writeUInt8(unitId, 6); // 单元ID
  buffer.writeUInt8(0x03, 7); // 功能码
  buffer.writeUInt16BE(startAddr, 8); // 起始地址
  buffer.writeUInt16BE(quantity, 10); // 寄存器数量
  return buffer;
}

// 创建连接并发送请求
const client = new net.Socket();
client.connect(502, '192.168.1.100', () => {
  const request = createReadRequest(1, 0, 10);
  client.write(request);
});

// 处理响应
client.on('data', (data) => {
  const unitId = data.readUInt8(6);
  const funcCode = data.readUInt8(7);
  const byteCount = data.readUInt8(8);
  const values = [];

  for (let i = 0; i < byteCount/2; i++) {
    values.push(data.readUInt16BE(9 + i*2));
  }
  console.log(`Received values: ${values}`);
  client.end();
});

错误处理

检查响应中的功能码高位是否置位(0x80),表示异常响应。异常代码会出现在数据字段的第一个字节,常见的异常代码包括:

js实现modbustcp

  • 0x01:非法功能码
  • 0x02:非法数据地址
  • 0x03:非法数据值

性能优化

对于高频通信场景,建议实现连接池管理和请求队列。事务标识符应确保唯一性,可采用递增计数器实现。大数据量读取可考虑分批次请求。

标签: jsmodbustcp
分享给朋友:

相关文章

js实现类

js实现类

JavaScript 实现类的几种方式 JavaScript 是一种基于原型的语言,但在 ES6 之后引入了 class 语法糖,使得实现类更加直观。以下是几种常见的实现方式: 使用构造函数 传统的…

js图片上传实现

js图片上传实现

图片上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API实现基础图片上传功能。HTML部分需要设置accept="image/…

js实现排序

js实现排序

数组排序方法 JavaScript提供了内置的sort()方法用于数组排序。默认情况下,sort()将元素转换为字符串并按照Unicode码点排序。对于数字排序,需传入比较函数。 const num…

js实现左右滑动

js实现左右滑动

实现左右滑动的 JavaScript 方法 监听触摸事件 通过 touchstart、touchmove 和 touchend 事件来检测用户的手势操作。记录触摸的起始位置和移动距离,判断滑动方向。…

js 实现按钮点击

js 实现按钮点击

实现按钮点击的 JavaScript 方法 HTML 按钮元素 在 HTML 中创建一个按钮,可以通过 <button> 或 <input> 标签实现: <button…

js 实现mvc

js 实现mvc

MVC 模式简介 MVC(Model-View-Controller)是一种软件设计模式,将应用程序分为三个核心组件:模型(Model)处理数据和业务逻辑,视图(View)负责展示数据,控制器(Con…