Java 我试图通过ModBus RTU协议从时间计数器烤箱获取数据,但得到了垃圾响应
我已经编写了一些简单的代码来从我的时间计数器的两个寄存器获取信息。Java 我试图通过ModBus RTU协议从时间计数器烤箱获取数据,但得到了垃圾响应,java,Java,我已经编写了一些简单的代码来从我的时间计数器的两个寄存器获取信息。 我正在向烤箱发送下一个命令: 10 03 00 16 00 02 26 8E 并期望得到下一个响应(尝试使用OpenSCADA): 10 03 0400 BF AE B977 04 但我得到的却是: 10 03 0400 41 52 4777 04 除了数据块之外,所有内容都是正确的,即使CRC也是一样的。 为什么会这样 下面是一个代码: 公共静态无效工作流(字节[]comm)引发IOException{ 试一试{ 字节inp[
我正在向烤箱发送下一个命令: 10 03 00 16 00 02 26 8E 并期望得到下一个响应(尝试使用OpenSCADA): 10 03 0400 BF AE B977 04 但我得到的却是: 10 03 0400 41 52 4777 04 除了数据块之外,所有内容都是正确的,即使CRC也是一样的。 为什么会这样 下面是一个代码:
公共静态无效工作流(字节[]comm)引发IOException{
试一试{
字节inp[]=新字节[9];
s=createSocket(地址、端口);
s、 getOutputStream().write(comm);
s、 设置超时(500);
睡眠(1000);
s、 getInputStream().read(inp);
对于(int i=0;i
为什么int unsinged=Math.abs(inp[i])代码>
似乎您知道需要字节中的无符号整数,但这不是您要做的;
你得到的是绝对值,而不是你想要的
所以用这个来代替:
for (int i = 0; i < inp.length; i++) {
System.out.print(" " + Integer.toHexString(Byte.toUnsignedInt(inp[i])));
}
for(int i=0;i
这将避免将字节转换为整数时用ff
字节填充,并使十六进制字符串准确表示字节。谢谢!这很有效。该死,这就是当你试图自学编程时发生的事情。我是如此接近,同时也是如此)