gpt4 book ai didi

java - 发送 0xFF 并计算带符号字节的 CRC - WriteSingleCoil & ModBUS & Java & Android -

转载 作者:太空狗 更新时间:2023-10-29 14:25:11 24 4
gpt4 key购买 nike

编辑和整理(下)

我正在使用 Java for Android 尝试将字节 255(WriteSingleCoil 函数中的 0xFF)发送到 ModBUS 服务器设备。

设备没有运行,我不知道是因为无法解释带符号的字节 -1 还是因为我计算 CRC 错误。我不知道如何计算负字节的 CRC。

总结:我不知道如何发送函数 05 Write Single Coil with 0xFF value for switch on the coil for Java to ModBUS server。

谁能帮帮我?

解决方案:

" iIndex = ucCRCLo ^ b: operations like this must be written as iIndex = (ucCRCLo ^ b)&0xff because the & will cast ucCRCLo, b and the result to int, which is 32 bits while short is 16 so you will have a lot of extra bits set to 1 "

这个答案帮助了我。非常感谢TheDayOfcondor

但我的大问题是 Java 中带有符号字节的常见问题。我的 CRC 计算函数适用于无符号字节,但如果我传递内部有符号字节,它会出错。使用字节进行 ModBUS 通信的技巧是在整个应用程序中使用短裤作为字节,范围为 0-255,甚至计算 trames 和 CRC。只有在最后一步,当发送 trame 到 ModBUS 服务器时,再次将它们转换为字节。这是运行。

希望对以后的人有所帮助。

解释问题:

我正在尝试使用功能 05 将线圈设置为 ModBUS,这是对功能的解释:

请求

我正在尝试打开地址 1 上的线圈:

这个十六进制:0A 05 00 01 ff 00 DC 81

这个字节数组:10 5 0 1 255 0 220 129

10:从站地址(10 = 0A 十六进制)

05:功能码(强制单线圈)

0001:线圈的数据地址。 (线圈# 1 = 01 十六进制)

FF00:要写入的状态(FF00 = ON,0000 = OFF)

DC81:用于错误校验的CRC(循环冗余校验)。

问题是 Java 使用有符号字节,所以我不能将 255 放在我的字节数组中。我知道我应该放 -1,但是我无法正确计算 CRC,因为我有几个预先计算的字节数组来获取 CRC,但该函数发送了一个负索引。

所以:我不知道我尝试发送 -1 是否正确,如果我有发送 255 的替代方法,也不知道如何计算 -1 的 CRC。

这是计算CRC的函数:

public short[] GenerateCRC (byte[] pMsg) {
short ucCRCHi = 0xFF;
short ucCRCLo = 0xFF;
int iIndex;

for (byte b : pMsg)
{
iIndex = ucCRCLo ^ b;

try {
ucCRCLo = (short)(ucCRCHi ^ aucCRCHi[ ( iIndex ) ]);
ucCRCHi = aucCRCLo[ ( iIndex ) ];
} catch (Exception e) {
Log.e(LOGTAG, "GenerateCRC: " + e.toString(), e);
e.printStackTrace();
}
}

short[]result= new short[2];
result0]= ucCRCHi;
result1]= ucCRCLo;

return result;
}

最佳答案

问题不是很清楚 - 然而,处理字节最常见的问题是 Java 没有无符号字节, boolean 运算总是在 int 之间

处理字节的最好方法是使用整数,并用 0xff 对每个操作进行运算。也使用 >>> 右移(它是无符号版本)

例子:

byte b= (byte)(255 & 0xff)//给你“无符号字节”

byte b= (byte) ((b<<2)0xff )//左移必须被截断

如果您发布代码来计算 CRC,我可以查看一下

不使用负数定义字节数组的最佳方式是这样的:

byte[]={ (byte)0xff, (byte)0xff, (byte)0xff };

关于java - 发送 0xFF 并计算带符号字节的 CRC - WriteSingleCoil & ModBUS & Java & Android -,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13232031/

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