读书人

关于c#串口通讯有关问题

发布时间: 2013-04-09 16:45:09 作者: rapoo

关于c#串口通讯问题
本帖最后由 dahaianb 于 2013-04-06 13:31:20 编辑 最近在研究c#通过串口与rfid读卡器进行通讯,废话不多,请大家先看下面的rfid写epc号的协议:
8.2.4 写EPC号
这个命令向电子标签写入EPC号。写入的时候,天线有效范围内只能有一张电子标签。


命令:
LenAdrCmd Data[] CRC-16
ENumPwd WEPC
0xXX0xXX0x040xXX4Byte变长LSBMSB
参数解析:
ENum:1个字节。要写入的EPC的长度,以字为单位。不能为0,也不能超过15,否则返回参数错误信息。

Pwd:4个字节的访问密码。32位的访问密码的最高位在Pwd的第一字节(从左往右)的最高位,访问密码最低位在Pwd第四字节的最低位,Pwd的前两个字节放置访问密码的高字。在本命令中,当EPC区设置为密码锁、且标签访问密码为非0的时候,才需要使用访问密码。在其他情况下,Pwd为零或正确的访问密码。

WEPC:要写入的EPC号,长度必须和ENum说明的一样。WEPC最小1个字,最多15个字,否则返回参数错误信息。

应答:
LenAdrreCmdStatusData[]CRC-16
0x050xXX0x040x00——LSBMSB


我根据上面的协议设计出相关通讯代码如下:


byte[] data = new byte[14];
data[0] = 11;
data[1] = 0x00;
data[2] = 0x04;
data[3] = 2;
data[4] = 0;
data[5] = 0;
data[6] = 0;
data[7] = 0;
data[8] = 0;
data[9] = 0;
data[10] = 0;
data[11] = 0;
CalculateCRC(ref data, 0, 12);
byte[] me = Write(data, 0, 14);

public byte[] Write(byte[] date, int offset, int count)
{
port.WriteTimeout = 3000;
port.Write(date, offset, count);
System.Threading.Thread.Sleep(3000);
port.ReadTimeout = 2000;
int cou = port.BytesToRead;
byte[] da = new byte[cou];
port.Read(da, 0, cou);
port.DiscardInBuffer();
port.DiscardOutBuffer();
return da;
}





CalculateCRC函数是用来校验CRC16的,经过测试那函数应该没有问题,现在问题是我以上面的代码访问rfid读卡器后并没有收到任何回复,也没有能够成功将epc号写入卡内,不清楚上面的代码哪里出了问题,请高手指教指教,十分感谢…… c#?串口通讯?rfid?byte
[解决办法]
貌似看不太懂
[解决办法]
据我所知,RFID卡的读写不是一条命令可以解决的,首先要解决的就是判断是否有一张RFID卡进入了感应区,那个命令应该先进行才对。
[解决办法]
怀疑你的串口设置,是否真的和RFID连接成功,
用串口工具,发你的数据看看,如果有返回,就先查你连接的代码吧
[解决办法]
引用:
那个命令格式有点乱,我重新发下:
Len Adr Cmd Data[] CRC-16
0xXX 0xXX 0x04 ENum Pwd WEPC LSBMSB
0xXX 4Byte 变长

上面就是rfid读卡器给……


这个格式还是没看懂。。。能整齐点吗
分别代表什么意思呢,你这个是上下对应的关系呢还是所有的合在一起为一条指令呢

读书人网 >C#

热点推荐