node-red-contrib-symi-modbus 2.4.0 → 2.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +39 -1
- package/nodes/modbus-master.html +2 -1
- package/nodes/modbus-master.js +8 -8
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -507,10 +507,47 @@ docker run --privileged ...
|
|
|
507
507
|
- **容错能力**:Modbus从站离线不影响其他从站,MQTT断线自动重连
|
|
508
508
|
|
|
509
509
|
|
|
510
|
-
> **最新版本 v2.
|
|
510
|
+
> **最新版本 v2.5.0** - Mac串口兼容性修复,互斥锁优化,确保各平台稳定运行
|
|
511
511
|
|
|
512
512
|
## 版本更新
|
|
513
513
|
|
|
514
|
+
### v2.5.0 (2025-10-20) - Mac串口兼容性与互斥锁优化
|
|
515
|
+
|
|
516
|
+
**核心修复**:
|
|
517
|
+
- 修复Mac串口设备选择问题,明确使用 `/dev/cu.*` 设备
|
|
518
|
+
- 延长互斥锁等待时间(从500ms到6秒),匹配Modbus 5秒超时
|
|
519
|
+
- 优化锁等待间隔(从10ms到50ms),降低CPU占用
|
|
520
|
+
- 添加Mac串口说明到UI(cu.usbserial-xxx, cu.wchusbserial*)
|
|
521
|
+
- 更新串口placeholder提示,包含Mac设备示例
|
|
522
|
+
- 改进超时错误消息,提示可能是轮询阻塞
|
|
523
|
+
|
|
524
|
+
**Mac串口设备说明**:
|
|
525
|
+
Mac上USB转串口会创建两种设备:
|
|
526
|
+
- `/dev/tty.*` - Terminal设备(用于等待incoming连接)**不要用**
|
|
527
|
+
- `/dev/cu.*` - Call-out设备(用于主动连接)**正确选择**
|
|
528
|
+
|
|
529
|
+
例如:
|
|
530
|
+
```
|
|
531
|
+
✅ /dev/cu.wchusbserial83420 ← 使用这个
|
|
532
|
+
✅ /dev/cu.usbserial-83420 ← 或这个
|
|
533
|
+
❌ /dev/tty.wchusbserial83420 ← 不要用(会报Resource busy错误)
|
|
534
|
+
❌ /dev/tty.usbserial-83420 ← 不要用
|
|
535
|
+
```
|
|
536
|
+
|
|
537
|
+
**互斥锁优化说明**:
|
|
538
|
+
- 旧版本:写入操作等待锁最多500ms,但Modbus超时是5000ms
|
|
539
|
+
- 问题:如果轮询超时(5秒),写入操作在500ms就放弃,导致"等待锁释放超时"
|
|
540
|
+
- 修复:写入操作等待锁最多6秒,确保能等到轮询超时后锁释放
|
|
541
|
+
- 等待间隔从10ms增加到50ms,降低CPU占用
|
|
542
|
+
|
|
543
|
+
**测试验证**:
|
|
544
|
+
- Mac串口连接正常(cu.wchusbserial83420)
|
|
545
|
+
- 轮询和写入操作不再冲突
|
|
546
|
+
- 写入不再提前超时
|
|
547
|
+
- 适合Windows/Linux/macOS平台长期稳定运行
|
|
548
|
+
|
|
549
|
+
---
|
|
550
|
+
|
|
514
551
|
### v2.4.0 (2025-10-20) - TCP帧缓冲与命令队列机制
|
|
515
552
|
|
|
516
553
|
**核心修复**:
|
|
@@ -547,6 +584,7 @@ docker run --privileged ...
|
|
|
547
584
|
- 适合Linux工控机24/7长期稳定运行
|
|
548
585
|
|
|
549
586
|
---
|
|
587
|
+
|
|
550
588
|
**升级方式**:
|
|
551
589
|
```bash
|
|
552
590
|
cd ~/.node-red
|
package/nodes/modbus-master.html
CHANGED
|
@@ -311,7 +311,7 @@
|
|
|
311
311
|
<label for="node-input-serialPort" style="width: 110px;"><i class="fa fa-terminal"></i> 串口</label>
|
|
312
312
|
<div style="display: inline-block; width: calc(70% - 110px);">
|
|
313
313
|
<div style="display: flex; gap: 5px; align-items: center;">
|
|
314
|
-
<input type="text" id="node-input-serialPort" placeholder="COM1, /dev/ttyUSB0, /dev/
|
|
314
|
+
<input type="text" id="node-input-serialPort" placeholder="COM1, /dev/ttyUSB0, /dev/cu.usbserial-xxx" style="flex: 1; padding: 5px 8px; border: 1px solid #ccc; border-radius: 4px; font-size: 13px;">
|
|
315
315
|
<select id="port-list-master" style="flex: 1; padding: 5px; font-family: monospace; font-size: 12px; border: 1px solid #ccc; border-radius: 4px; display: none;">
|
|
316
316
|
<option value="">-- 选择检测到的串口 --</option>
|
|
317
317
|
</select>
|
|
@@ -324,6 +324,7 @@
|
|
|
324
324
|
<span style="color: #555; font-size: 11px;">
|
|
325
325
|
• <strong>Windows</strong>: COM1, COM2, COM3...<br>
|
|
326
326
|
• <strong>Linux</strong>: /dev/ttyUSB0, /dev/ttyS0, /dev/ttyAMA0<br>
|
|
327
|
+
• <strong>macOS</strong>: <span style="background: #fff3cd; padding: 1px 4px; border-radius: 2px; font-weight: 600;">/dev/cu.*</span> (例如 /dev/cu.usbserial-xxx, /dev/cu.wchusbserial*)<br>
|
|
327
328
|
• <strong>HassOS</strong>: 插件配置添加设备映射即可<br>
|
|
328
329
|
• <strong>Docker</strong>: 需映射设备 <code style="background: #c8e6c9; padding: 2px 6px; border-radius: 3px; font-size: 10px;">--device=/dev/ttyUSB0</code> 或 <code style="background: #c8e6c9; padding: 2px 6px; border-radius: 3px; font-size: 10px;">--privileged</code>
|
|
329
330
|
</span>
|
package/nodes/modbus-master.js
CHANGED
|
@@ -780,15 +780,15 @@ module.exports = function(RED) {
|
|
|
780
780
|
return;
|
|
781
781
|
}
|
|
782
782
|
|
|
783
|
-
// 等待锁释放(最多等待
|
|
784
|
-
const maxWait =
|
|
783
|
+
// 等待锁释放(最多等待6秒,因为Modbus超时是5秒)
|
|
784
|
+
const maxWait = 6000;
|
|
785
785
|
const startWait = Date.now();
|
|
786
786
|
while (node.modbusLock && (Date.now() - startWait) < maxWait) {
|
|
787
|
-
await new Promise(resolve => setTimeout(resolve,
|
|
787
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
788
788
|
}
|
|
789
789
|
|
|
790
790
|
if (node.modbusLock) {
|
|
791
|
-
node.error(`写入线圈超时: 从站${slaveId} 线圈${coil} (
|
|
791
|
+
node.error(`写入线圈超时: 从站${slaveId} 线圈${coil} (等待锁释放超时,轮询可能阻塞)`);
|
|
792
792
|
return;
|
|
793
793
|
}
|
|
794
794
|
|
|
@@ -834,15 +834,15 @@ module.exports = function(RED) {
|
|
|
834
834
|
return;
|
|
835
835
|
}
|
|
836
836
|
|
|
837
|
-
// 等待锁释放(最多等待
|
|
838
|
-
const maxWait =
|
|
837
|
+
// 等待锁释放(最多等待6秒,因为Modbus超时是5秒)
|
|
838
|
+
const maxWait = 6000;
|
|
839
839
|
const startWait = Date.now();
|
|
840
840
|
while (node.modbusLock && (Date.now() - startWait) < maxWait) {
|
|
841
|
-
await new Promise(resolve => setTimeout(resolve,
|
|
841
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
842
842
|
}
|
|
843
843
|
|
|
844
844
|
if (node.modbusLock) {
|
|
845
|
-
node.error(`批量写入线圈超时: 从站${slaveId} 起始线圈${startCoil} (
|
|
845
|
+
node.error(`批量写入线圈超时: 从站${slaveId} 起始线圈${startCoil} (等待锁释放超时,轮询可能阻塞)`);
|
|
846
846
|
return;
|
|
847
847
|
}
|
|
848
848
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "node-red-contrib-symi-modbus",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.5.0",
|
|
4
4
|
"description": "Node-RED Modbus节点,支持TCP/串口通信、串口自动搜索、多设备轮询、智能MQTT连接(自动fallback HassOS/Docker环境)、Home Assistant自动发现和多品牌开关面板,生产级稳定版本",
|
|
5
5
|
"main": "nodes/modbus-master.js",
|
|
6
6
|
"scripts": {
|