用 Node.js 写了个工业级 Modbus 协议栈,想听听大家的看法

5 小时 12 分钟前
 xiejay97

最近把一个压箱底的项目开源了:njs-modbus,一个零依赖、strict TypeScript 的 Node.js Modbus 协议栈,支持 TCP / RTU / ASCII / UDP / TLS 。

先上链接:


为什么又要造轮子?

在 IIoT 边缘干了十多年,被各种 Modbus 库坑惨了:

大多数 Node.js Modbus 库没把自己当成工业软件写。所以我们决定自己写一个:运行时零依赖、strict TypeScript ,从第一行代码就按产线标准来。


几个我们觉得不一样的地方

1. 热路径真的在抠微秒

不是炫技,是现场 P99 真的会被这些小地方吃掉。

2. 韧性不是边缘补丁

我们做了混沌测试:截断帧、粘包、垃圾字节、CRC 篡改、超长帧。结果是 TCP/RTU/ASCII 全过,而同类库在 RTU 上只有 8/12 和 3/12 。

更具体一点:噪声过去后,TCP 模式下约 270 µs、RTU 模式下约 850 µs 就能重新锁定下一帧头部,不销毁连接、不重启实例。

3. Transport-agnostic 是真的

Pipeline 层就一个薄接口:

interface AbstractPipelineAdapter {
  write(data: Buffer, cb?: (err?: Error) => void): void
  on(event: 'data', listener: (data: Buffer) => void): this
}

TCP 、TLS 、UDP 、Serial 、WebSocket 、你自己的硬件抽象,都能接。示例里 WebSocket Pipeline 只写了 133 行。

4. 安全不是"端口不外开"


想聊的

  1. 大家在工业现场用 Node.js 做 Modbus 主站/从站,最怕遇到什么问题?
  2. 你们觉得一个协议栈要做到什么程度,才敢写进给客户的技术方案?
  3. 严格 TS + 零依赖这条路线,在你们的项目里吃得开吗?

欢迎拍砖,Issue 和 PR 都开放。

442 次点击
所在节点    分享创造
3 条回复
sir283
2 小时 10 分钟前
你这个相对于传统 QT 和 C#的 modbus ,有什么优势吗?如果客户机器的配置比较低呢?比如单核+128MB 内存+4GB 存储这种配置规格,完了还时不时拉总闸断电,然后重启,那你的库还能长期稳定可靠吗?我之前在深圳富士康做过上位机,我用的是 Qt C++的 Modbus TCP ,Qt 写的界面,一直很稳定,现在都运行两年了,而且程序内存占用稳定 50MB 左右,峰值不到 100MB ,你的库能做到吗?
yplam
1 小时 15 分钟前
1. 压测用 115200 波特率也体现不了性能,瓶颈在串口传输;
2. TCP 本身就抗 EMI ,不会出现垃圾字节,除非实现有问题;
3. RTU 协议你是否遵循静默时间来分帧? 1ms 超时时间 Nodejs 如何实现?
keenkiller
1 小时 0 分钟前
你写的痛点简直莫名其妙,边缘端你为啥不直接用 C 语言,如果说之前是门槛太高,现在用 AI 还有啥门槛

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1223244

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX