当前位置: 首页 > news >正文

AI使用 Node.js modbus-serial 搭建一个可交互的 Modbus TCP 主站与从站 Demo

在工业物联网和自动化控制领域,Modbus 协议依然是最常见的通信方式之一。为了更直观地理解 Modbus TCP 的工作机制,我用AI写了一个小 Demo:同时实现了 从站(Slave) 和 主站(Master),并且能在本地跑通数据交互。

Demo 功能
  • 从站每2秒更新寄存器0。
  • 主站每3秒读取寄存器0,并写寄存器1。
  • 控制台能看到双向交互,证明通信正常。
// master.js
const ModbusRTU = require('modbus-serial')
const client = new ModbusRTU()async function run() {try {await client.connectTCP('127.0.0.1', { port: 1502 })client.setID(1)console.log('✅ 主站已连接到从站')setInterval(async () => {try {// 读取保持寄存器0const data = await client.readHoldingRegisters(0, 1)console.log('📥 主站: 读取寄存器[0] =', data.data[0])// 写保持寄存器1const value = Math.floor(Math.random() * 100)await client.writeRegister(1, value)console.log('📤 主站: 写寄存器[1] =', value)} catch (err) {console.error('读写错误:', err.message)}}, 3000)} catch (err) {console.error('连接失败:', err.message)}
}run()
// slave.js
const ModbusRTU = require('modbus-serial')// 模拟保持寄存器(100个,2字节/个)
let holdingRegisters = Buffer.alloc(100 * 2)const vector = {// 读取保持寄存器getHoldingRegister: function (addr) {const value = holdingRegisters.readUInt16BE(addr * 2)console.log(`📥 从站: 读取保持寄存器[${addr}] = ${value}`)return Promise.resolve(value)},// 写保持寄存器setRegister: function (addr, value) {holdingRegisters.writeUInt16BE(value, addr * 2)console.log(`📤 从站: 写保持寄存器[${addr}] = ${value}`)return Promise.resolve()},// 读取线圈getCoil: function (addr) {return Promise.resolve(addr % 2 === 0)},// 写线圈setCoil: function (addr, value) {console.log(`📤 从站: 写线圈[${addr}] = ${value}`)return Promise.resolve()}
}// 启动 Modbus TCP 从站
const customPort = 1502 // 自定义端口,避免与其他服务冲突
const serverTCP = new ModbusRTU.ServerTCP(vector, {host: '127.0.0.1',port: customPort,debug: true,unitID: 1
})console.log(`✅ Modbus TCP 从站已启动,监听 127.0.0.1:${customPort}`)// 模拟寄存器0的值每2秒变化
setInterval(() => {const randomValue = Math.floor(Math.random() * 1000)holdingRegisters.writeUInt16BE(randomValue, 0)console.log('🔄 从站: 更新寄存器[0] =', randomValue)
}, 2000)
运行
  1. npm install modbus-serial
  2. node slave.js
  3. node master.js
结果

在这里插入图片描述

git

modbusSlaveMasterNodeDemo

modbus-serial Modbus-TCP
http://www.dtcms.com/a/423262.html

相关文章:

  • Websocket+cpolar:如何轻松实现服务远程访问?
  • 嵌入式Linux BootLoader全景图:主流选择与核心对比
  • 基于Springboot的DDD实战(不依赖框架)
  • 网站设计流程步骤网站网络资源建立
  • 不用宝塔用linux操作mysql
  • Nginx 服务器
  • 网站开发浏览器企业网站建设定位注意的问题
  • AI视频生成进入多镜头叙事时代!字节发布 Waver 1.:一句话生成 10 秒 1080p 多风格视频,创作轻松“一键”达!
  • 怎样创建网站吉洋大鼓免费广告发布平台
  • 【Python3教程】Python3高级篇之集成MongoDB
  • MongoDB源码分析慢日志:从配置到实现的完整解析
  • Bootloader核心原理与简单实现:从零写一个bootloader
  • MongoDB到关系型数据库:JSON字段如何高效转换?
  • 网站排名优化原理一个公司能备案多个网站吗
  • 苏大团队联合阿丘科技发表异常生成新方法:创新双分支训练法,同步攻克异常图像生成、分割及下游模型性能提升难题。
  • wordpress如何使用百度主动推送seo短视频网页入口引流下载
  • Docker 镜像加速安装MySQL操作步骤
  • 量子计算技术全景:从硬件路线到AI融合
  • 人工智能-机器学习day1
  • 济南网站制作企业建设部标准定额网站
  • 微服务组件-Eureka 技术详解
  • ARM架构下I/O内存映射全面技术分析
  • 大学网站建设管理办法岳阳市网站建设推广
  • Java 操作 XML 及动态生成报告:从解析到实战
  • 网络配置config.xml的android.mk解析
  • 网站导读怎么做wordpress二级目录创建
  • 分布式限流
  • ES-DE 前端模拟器最新版 多模拟器游戏启动器 含游戏ROM整合包 最新版
  • 【Linux网络】TCP协议
  • 分布式排行榜系统设计方案