npc的个人博客

NPC
个人技术博客
  1. 首页
  2. 未分类
  3. 正文

RFID读写平台SDK问题排故

2025年10月29日 39点热度 1人点赞 0条评论

近日我司购买了一个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就可正常与串口进行通讯

标签: 暂无
最后更新:2025年11月14日

npc

这个人很懒,什么都没留下

点赞
< 上一篇

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

归档

  • 2025 年 10 月
  • 2025 年 4 月

分类

  • 未分类

COPYRIGHT © 2025 npc的个人博客. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang