You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 03:11:09