gpt4 book ai didi

java - 尝试使用 Modbus 协议(protocol)连接设备时出现 net.wimpi.modbus.ModbusSlaveException : Error Code = 2,

转载 作者:行者123 更新时间:2023-12-01 09:46:44 24 4
gpt4 key购买 nike

我有一个支持 ModBus 协议(protocol)的设备,使用“Jamod”尝试连接到该设备并读取寄存器值,收到错误代码 2,

单位配置:

<小时/>

该装置支持通过 RS-485 和以太网接口(interface)的 Modbus 协议(protocol)。在 RS-485 接口(interface)上,它具有可配置的 Modbus 网络上的 Modbus 地址;默认情况下,该值设置为 99。该装置还将响应广播地址 0。

RS-485 接口(interface)默认工作波特率为 9600 Baud,具有 8 位和偶校验。可配置为 1200、2400、4800、9600、19200、38400、57600 或 15200 波特率。

以太网接口(interface)使用RJ45连接器。该接口(interface)支持端口 502 上的 TCP/IP 以太网连接。从地址为 0。

该装置使用 Modbus 读取输入寄存器功能代码 4 返回数据。它还允许使用 Modbus 保持寄存器访问功能 3 和 16 读取和写入配置参数。还支持 Modbus 诊断功能代码 8 的子集.

<小时/>

请提供连接到设备的说明并阅读,谢谢

*******************Sample Code***********************


import java.io.*;
import java.lang.*;
import java.net.InetAddress;
import net.wimpi.modbus.Modbus;
import net.wimpi.modbus.io.ModbusTCPTransaction;
import net.wimpi.modbus.msg.ReadInputRegistersRequest;
import net.wimpi.modbus.msg.ReadInputRegistersResponse;
import net.wimpi.modbus.net.TCPMasterConnection;

public class modbus_conn {

public static void main(String args[]){
try {
/* The important instances of the class*/
TCPMasterConnection con = null; //the connection
ModbusTCPTransaction trans = null; //the transaction
ReadInputRegistersRequest rreq = null; //the read request
ReadInputRegistersResponse rres = null; //the read response
/* Variables for storing the parameters */
InetAddress addr = null; // the slave's address
int port = 502; // the default port
//int coil = 1; // one of the coils (D0 1 for this address) to switch ON/OFF

//Setup the parameters
addr = InetAddress.getByName("127.192.6.31"); // ** The address assigned to the module **

//Open the connection
con = new TCPMasterConnection(addr);
con.setPort(port);
con.connect();

//Prepare the READ request
int k = 30001; // register address starting from 30001
rreq = new ReadInputRegistersRequest(k, 2); // Reading 8 bytes

//Prepare the READ transaction
trans = new ModbusTCPTransaction(con);
trans.setRequest(rreq);

//Execute the READ transaction
trans.execute();

rres = (ReadInputRegistersResponse) trans.getResponse();
System.out.println("Hex Value of register " + "= " + rres.getHexMessage());

//Close the connection
con.close();

}
catch (Exception ex) {
System.out.println("Error");
ex.printStackTrace();
}
}
}

错误:

Error
net.wimpi.modbus.ModbusSlaveException: Error Code = 2
at net.wimpi.modbus.io.ModbusTCPTransaction.execute(ModbusTCPTransaction.java:207)
at modbusConn.Control_ADAM.main(modbus_conn.java:48)

最佳答案

错误代码 2 表明存在非法数据地址。在你的例子中,30001 是寄存器地址,你正在读取 2 个字节。要解决这个问题,请使用寄存器的十六进制地址,如果您不知道十六进制地址,请参阅手册。(对我有用:-))

并且增量不要太高也会给你错误代码 3,也要注意这一点。

enter image description here

关于java - 尝试使用 Modbus 协议(protocol)连接设备时出现 net.wimpi.modbus.ModbusSlaveException : Error Code = 2,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37943157/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com