java - 使用java编程的modbus协议问题
问题描述
我在使用 Modbus 协议时遇到了问题,说实话,这是我第一次处理这种协议,尤其是我使用它来联系一个非常罕见的文档控制器(BF-1010)。连接是真的,但我们无法读取输入,我不知道为什么???我们使用的是easymodbus库,作为一种技术,我们使用的是java。您将在下面找到我们正在使用的代码以及一些用于配置和结果的图像浏览 4 个链接。
[modbus config ][1]
[bf-1010 intrerface][2]
[java program][3]
[results][4]
[1]: https://i.stack.imgur.com/aFa9B.jpg
[2]: https://i.stack.imgur.com/RJpxJ.jpg
[3]: https://i.stack.imgur.com/MZwPN.jpg
[4]: https://i.stack.imgur.com/jQ4Td.jpg
package BF;
import de.re.easymodbus.modbusclient.*;
import de.re.easymodbus.exceptions.*;
import java.io.IOException;
import java.net.*;
import java.nio.ByteBuffer;
import java.io.*;
import java.util.*;
import java.io.InputStream;
import de.re.easymodbus.exceptions.ModbusException;
import java.io.*;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
public class connectBF {
public static void main(String[] args) throws Exception
ModbusClient modbusClient = new ModbusClient("192.168.9.124",50002);
modbusClient.Connect();
boolean d=modbusClient.isConnected();
System.out.println(d);
try
{
boolean[] input = modbusClient.ReadDiscreteInputs(10020, 2000);
for(int i=0;i<input.length;i++)
{
if(input[i] == true) System.out.println("INPUT "+i+" : "+input[i]);
}
}
catch (Exception e)
{
System.out.println("error");
}
}
}
解决方案
modbus 配置链接底部的表格有助于翻译上面的表格,并列出了检索 DI1-12 的调用(我相信这是你想要做的):
功能代码:2 - 读取离散输入
起始地址 0x14 - 十进制 20
输入数量 0x0C - 十进制 12
所以试试modbusClient.ReadDiscreteInputs(20, 12);
。
(您可能正在尝试检索一个图像中未涵盖的其他字段;但是我建议先尝试上述方法,然后在您知道它有效时将其扩展以涵盖其他输入)。
很多 Modbus 文档都遵循旧的“标准”,可能会让人很困惑(有关详细信息,请参阅本文中的“Modbus:当 40001 真正表示 1 或 0 真正表示 1”部分)