解码串口通信

时间:2012-06-12 17:54:14

标签: c# serial-port hex

我希望能帮助我编写一个软件,让我能够从我的连续磁卡读卡器中读取数据。

我们有这个读卡器,它是我们用来在我们的场地中捕获会员会员卡详细信息的一件非常古老的设备。读卡器有一个软件可下载卡的详细信息(存储在读卡器上),然后软件将详细信息放在C盘上的文本文件中。我想写一些完全相同的软件。

我可能正在咆哮错误的树或希望得太多,但任何帮助都会很棒。

到目前为止,我已将读卡器连接到我的机器的串行端口并运行旧版软件并使用com端口监视器来捕获通信。这是我有点卡住的地方,并想知道是否有人可以告诉我,无论如何我捕获的东西是否有用,并希望能指出我正确的方向。

当读卡器上没有存储卡信息时,我运行了下载序列并捕获了它。

[12/06/2012 18:28:55] - Open port COM4

[12/06/2012 18:29:02] - Written data
31 00 01 00 00 00 32                                1.....2         

[12/06/2012 18:29:04] - Read data
31 00 06 00 0c 06 0c 00 00 00 00 55                 1..........U    

[12/06/2012 18:29:04] - Written data
33 00 01 00 00 00 34                                3.....4         

[12/06/2012 18:29:05] - Read data
33 00 14 00 06 03 00 00 0c 00 00 0d 00 00 42 00     3.............B.
00 43 00 00 63 00 00 00 01 51                       .C..c....Q      

[12/06/2012 18:29:06] - Written data
34 00 01 00 00 00 35                                4.....5         

[12/06/2012 18:29:08] - Read data
34 00 01 00 00 00 35                                4.....5         

[12/06/2012 18:29:08] - Written data
35 00 07 00 0c 06 0c 12 1c 36 00 00 be              5........6..¾   

[12/06/2012 18:29:10] - Read data
35 00 01 00 00 00 36                                5.....6         

[12/06/2012 18:29:11] - Close port COM4

然后我刷了一张卡,所以读卡器将它存储在内存中并再次运行下载,这次我得到了这个

[12/06/2012 18:31:23] - Open port COM4

[12/06/2012 18:31:48] - Written data
31 00 01 00 00 00 32                                1.....2         

[12/06/2012 18:31:50] - Read data
31 00 06 00 0c 06 0c 00 00 00 00 55                 1..........U    

[12/06/2012 18:31:51] - Written data
33 00 01 00 00 00 34                                3.....4         

[12/06/2012 18:31:53] - Read data
33 00 14 00 06 03 00 00 0c 00 00 0d 00 00 42 00     3.............B.
00 43 00 00 63 00 00 00 01 51                       .C..c....Q      

[12/06/2012 18:31:55] - Written data
34 00 01 00 00 00 35                                4.....5         

[12/06/2012 18:31:57] - Read data
34 00 01 00 00 00 35                                4.....5         

[12/06/2012 18:31:57] - Written data
35 00 07 00 0c 06 0c 12 1f 16 00 00 a1              5...........¡   

[12/06/2012 18:32:01] - Read data
35 00 01 00 00 00 36                                5.....6         

[12/06/2012 18:32:01] - Close port COM4

最后我刷了3张牌并再次运行下载并抓住了这张

[12/06/2012 18:30:21] - Open port COM4

[12/06/2012 18:30:22] - Written data
31 00 01 00 00 00 32                                1.....2         

[12/06/2012 18:30:24] - Read data
31 00 06 00 0c 06 0c 00 03 00 00 58                 1..........X    

[12/06/2012 18:30:24] - Written data
32 00 04 00 03 00 01 00 00 3a                       2........:      

[12/06/2012 18:30:26] - Read data
32 00 1c 00 03 00 01 00 12 1e 58 28 54 08 33 00     2.........X(T.3.
12 1e 58 28 53 96 95 00 12 1e 58 28 54 12 32 00     ..X(S–•...X(T.2.
05 07                                               ..              

[12/06/2012 18:30:27] - Written data
33 00 01 00 00 00 34                                3.....4         

[12/06/2012 18:30:29] - Read data
33 00 14 00 06 03 00 01 0c 00 00 0d 00 00 42 00     3.............B.
00 43 00 00 63 00 00 00 01 52                       .C..c....R      

[12/06/2012 18:30:30] - Written data
34 00 01 00 00 00 35                                4.....5         

[12/06/2012 18:30:41] - Read data
34 00 01 00 00 00 35                                4.....5         

[12/06/2012 18:30:41] - Written data
35 00 07 00 0c 06 0c 12 1e 15 00 00 9f              5...........Ÿ   

[12/06/2012 18:30:43] - Read data
35 00 01 00 00 00 36                                5.....6         

[12/06/2012 18:30:43] - Close port COM4

我所知道的是遗留软件检查设备是否连接到所选的com端口然后下载数据然后清除读卡器中的数据

如果它有帮助..如果我没有连接读卡器并尝试下载我收到此错误

  

命令0x31未发送

任何人都可以对此有所了解吗?

提前谢谢。

2 个答案:

答案 0 :(得分:3)

这是一个非常典型的串行端口协议。字节顺序是最小端的。前两个字节是块号,即响应与请求的匹配方式以及如何检测数据包的丢失。接下来的两个字节是消息的长度,以字节为单位。消息中的字节如下。最后两个字节是校验和,即在整个消息中添加字节的结果。 Big-endian出于某种奇怪的原因,afaict。

这只是协议帧规范,对于一个不完美,因为它没有显示数据被扰乱时会发生什么。 真正计数的是消息中的数据字节。没有联系制造商并获得规格,无法找出这些字节的含义。

答案 1 :(得分:2)

熟悉这些协议,我能想到的唯一方法是:

  1. 请与制造商联系,以获取其软件实用程序用于与卡通信的API(消息格式)
  2. 反向工程API协议。这可能需要付出巨大的努力才能找出所有数据字节,这意味着可以随着卡提供的功能数量呈指数增长。一个好的开始是刷一张卡并记录数据并重新启动硬件,刷第二张卡,记录并重新启动,同样适用于第三张卡。然后在二进制消息之间进行二进制差异,找出从一张卡到另一张卡已经改变的字节。