近日我司购买了一个RFID读写平台,由于没有购买配套软件,斯科Cykeo只提供给我们一个skd包和部分示例代码与.net的一个demo软件。但使用后发现demo软件连接串口可以正常读取RFID的EPC值,示例代码运行后显示
MsgBaseStop Fail
Close the connection
联系厂家给我说一般是串口连接错误的问题,我反复确认demo连接的是COM3:115200
示例代码连接一致,后用
MsgAppGetBaseVersion msg = new MsgAppGetBaseVersion();
client.sendSynMsg(msg, 3000);
System.out.println("发送: " + msg);
System.out.println("错误码:" + msg.getRtCode());
查看到发送:send-[com.gg.reader.api.protocol.gx.MsgAppGetBaseVersion]-[C5000101010000EBD5]
返回错误码:-1
经过多次联系厂家无果后自己去检查demo软件日志
发现其日志发送send-[MsgAppGetBaseVersion]-[5A000101010000EBD5]
顿时发觉不对,为什么demo发送的时5A我发送的是C5
用串口软件发送相同指令后返回正常
反编译jar包后找到了Message.class这个文件
public class Message {
public static final int MSG_MAX_LEN = 1024;
public static byte HEAD = -59;
public MsgType msgType = null;
public int rs485Address = 0;
public int dataLen = 0;
public byte[] cData = null;
public byte[] crc = null;
public byte[] crcData = null;
public byte[] msgData = null;
private byte rtCode = -1;
private String rtMsg = "";
}
HEAD=-59
在 Java 中,将整数 -59 转换为十六进制(hex)字符串时,得到 "c5",这是因为 Java 使用二进制补码表示有符号整数,并且Integer.toHexString() 等方法输出的是 无符号十六进制表示(不带负号)。
正数 59 的二进制:00111011
负数补码 = 取反 + 1:
取反:11000100
加 1: 11000101 → 即 0xC5
所以只要反编译这个类把HEAD的值改为90→5A
调用SDK就可正常与串口进行通讯

文章评论