无法通过JavaScript访问VertX EVO V1000及V100门禁网关求助
解决JavaScript访问VertX EVO V1000/V100门禁网关的Modbus操作问题
先确认设备基础配置
- 确保网关已开启Modbus TCP服务,默认端口为502(若自定义需同步到代码)
- 核对设备的Modbus从站地址(默认是1,需和代码中
setID参数一致) - 确认设备与运行JS代码的机器在同一网段,无防火墙拦截Modbus数据包
修正modbus-serial使用方式(附示例)
你能连接但无法操作,大概率是功能码或寄存器地址使用错误。以下是针对VertX EVO的常用操作示例:
1. 读取门状态
VertX的门状态通常存储在离散输入寄存器,对应功能码02:
const ModbusRTU = require("modbus-serial"); const client = new ModbusRTU(); client.connectTCP("你的网关IP", { port: 502 }, async () => { client.setID(1); // 匹配设备的Modbus从站地址 try { // 读取起始地址0的1个离散输入寄存器(对应门状态,0=关闭,1=打开) const res = await client.readDiscreteInputs(0, 1); console.log("当前门状态:", res.data[0] ? "已打开" : "已关闭"); } catch (err) { console.error("读取失败:", err.message); } finally { client.close(); } });
2. 发送开门指令
开门操作通常是写入线圈寄存器,对应功能码05:
// 接上面的连接逻辑 try { // 写入起始地址0的线圈(true=触发开门,部分设备需保持几秒后复位) await client.writeCoil(0, true); console.log("已发送开门指令"); // 3秒后复位线圈(根据门禁逻辑调整时长) setTimeout(async () => { await client.writeCoil(0, false); client.close(); }, 3000); } catch (err) { console.error("开门失败:", err.message); client.close(); }
常见问题排查
- 寄存器地址偏移:modbus-serial默认使用0-based地址,若你参考的文档是1-based,需减1后使用
- 功能码不匹配:不同操作对应不同功能码——读离散输入用
02、读保持寄存器用03、写线圈用05、写寄存器用06,务必和VertX官方文档对应 - 权限限制:部分网关需在Web管理界面配置Modbus读写权限,确保当前Modbus用户有操作权限
- 型号差异:V1000和V100的寄存器映射可能有细微差别,务必查阅对应型号的官方Modbus手册
内容的提问来源于stack exchange,提问作者jatin kumar kamboj
相关产品推荐
相关产品推荐

