我有一个支持ModBus协议的单元,使用“Jamod”试图连接到该单元并读取寄存器值,得到一个错误代码-2,
单元配置:
该单元通过RS-485和以太网接口支持Modbus协议.在RS-485接口上,它在Modbus网络上有一个可配置的Modbus地址;默认情况下,这个地址设置为99。该单元还将响应0的广播地址。
在默认情况下,RS-485接口的波特率为9600波特,8位,甚至奇偶校验。它可配置为1200、2400、4800、9600、19200、38400、57600或15200波特。
以太网接口使用RJ45连接器。此接口支持端口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)发布于 2016-09-15 05:48:45
错误代码2声明有一个非法的数据地址。在您的示例中,30001是寄存器地址,而您正在读取2个字节。若要解决此问题,请使用寄存器的十六进制地址,如果您不知道十六进制地址,请参阅手册。
给出的增量不太高也会给你错误代码3,也要处理好。

https://stackoverflow.com/questions/37943157
复制相似问题