序号 1 脚步 同学们,大家好。今天我们继续学习“学习模块二 基于RFID的智能消费系统设备编程与实施”,本堂课的内容是“RFID读写器串口协议”。 2 在前面的教学内容中,我们选用思远创智能设备10系列高频RFID全协议读写器通过RS232串口与计算机相连,配合相应的数据库以及智能消费系统软件构成智能消费系统。那么计算机与读写器是如何交互的呢?这就是我们今天要学习的相关内容。 3 今天我们学习内容主要包括以下4个方面,串口参数设置、串口通信协议、测试程序创建、访问串口代码。 4 5 先来看第一部分串口参数设置 RFID读写器与计算机之间的RS232通信属于常见的串行异步通信。 串行通信是指其数据是逐个比特进行传输,串行通信按照时钟控制方式,可分成异步通信和同步通信。 异步通信是指数据以字符或者字节为单位组成字符帧传送,靠起始位和停止位来实现字符的界定或同步,收发两端不需要严格同步,因此设备简单而被广泛采用。 在通信线上没有数据传送时处于逻辑'1'状态,当发送设备要发送一个字符数据时,首先发出一个逻辑“0”信号,这个逻辑低电平就是起始位,开始位表示字符传送开始。 起始位发送结束后,发送数据位。数据位的个数可以是5,6,7或8,数据位从最低位开始传输。 数据发送完之后,可以发送可选的奇偶校验位,用于差错检测; 在奇偶校验位之后发送的是停止位,可以是1位、1.5位或2位,停止位一直为逻辑'1'状态。停止位是一个字符数据的结束标志。 每一位占据一个固定的时间长度,每秒钟可发送的位数为波特率。 若要成功进行通信,发送和接收双方必须协商一致。 6 RFID读写器所支持的串口参数设置如表所示,波特率和校验位有多种可选项; 默认参数设置波特率为9600,不包含校验位; 若需要设置其余参数,需要发送命令到RFID读写器进行串口设置更改。 读写器和计算机两端的串口设置相同的参数后,双方便可通过串口实现数据收发。 7 8 接下来介绍第2部分串口通信协议 所谓串口通信协议,是指为了使得串口两端的设备能够理解对端发送过来数据的含义,需要通信双方共同遵循一套规则 包括计算机发送到读写器的命令包数据格式, 以及读写器返回到计算机中的响应包的格式 9 首先看命令包格式; STX字段 长1字节,固定为0x02表征数据包开始; STATION ID字段 长1字节,用于计算机连接多个RFID读写器时区分读写器,单机模式取0x00 DATA LENGTH字段 长1 字节,指定 CMD以及 DATA 部分的长度 CMD字段 长1字节,其包含了读写器需要执行操作命令代号; DATA字段,存放与CMD命令相关的数据,其长度以及内容与命令CMD相关 BCC字段 长1 字节,用于数据包校验,其值为数据包中除 STX, ETX 外所 有字节的字节异或校验和。 ETX字段 长1字节,固定为0x03,表征数据包结束 10 然后看响应包格式 STX字段 长1字节,固定为0x02表征数据包开始; STATION ID字段 长1字节,用于计算机连接多个RFID读写器时区分读写器,单机模式取0x00 DATA LENGTH字段 长1 字节,指定 STATUS以及 DATA 部分的长度 STATUS字段 长1字节,其表征先前发送给读写器的命令执行成功与否; DATA字段,存放与命令响应相关的数据,其长度以及内容与命令CMD,以及执行状态相关 BCC字段 长1 字节,用于数据包校验,其值为数据包中除 STX, ETX 外所 有字节的字节异或校验和。 ETX字段 长1字节,固定为0x03,表征数据包结束 11 12 再来看第3部分测试程序创建 RFID读写器通过RS232连接到计算机后,计算机上还需要有一个相应的应用程序,方能通过串口访问RFID读写器,进行读写卡片等操作。 我们将创建一个C# Windows窗体应用程序,用于测试和验证RFID读写器的相关读写操作,具体步骤如下: 13 首先打开Visual Studio 2015,选择新建Visual C#类别下的Windows窗体应用程序,输入项目名称以及选择存放路径,点击确定 然后设置窗口大小,并按照下图来创建RFID测试程序的界面, 本测试程序界面分成两个功能模块,上面模块与串口操作相关,下面模块与读写器操作相关。 所有控件的名称如图所示。 14 串口操作模块的控件属性值设置参照RS232串口可能参数进行设置,具体如图所示。 15 由于Mifare S50卡片共16扇区,每扇区4个数组块,扇区默认访问密钥为6个0xFF.因此读写器模块的控件属性值设置如图所示; 16 17 最后介绍第4部分串口访问实现 RFID测试程序需要通过SerialPort控件来实现对RS232串口的访问,具体实现步骤如下: 18 第1步 添加控件 在工具箱-》组件中选中SerialPort控件,并将其拖动到Windows窗体中,并改名为spCOM SerialPort控件为不可显示控件,因而控件显示在窗口编辑区的下方 19 第2步 设置控件 我们可以在控件属性界面去设置SerialPort串口的物理串口号,波特率,数据位,停止位,校验位等属性 也可以通过命令行代码去设置SerialPort串口的物理串口号,波特率,数据位,停止位,校验位等属性 20 第3步 操作串口 首先通过Open方法打开串口, 完成串口访问后,需要通过Close方法关闭串口 串口打开后,便可通过Read方法从串口接收对端设备发来的数据以及通过Write方法将数据通过串口发送到对端设备 21 在计算机接收串口信息时,通常不知对端发来的数据何时到达,通常有以下两种处理办法,第1种为新创建线程,循环去查询是否有数据到达接收缓冲区,需要涉及到线程编程,较为复杂;因此采用第2种较为简单的事件驱动方式,操作过程如下: 首先点击SerialPort控件的事件面板,在dataReceived事件上进行双击,将添加该事件的响应函数; 当串口接收缓冲区接收数据超过属性ReceivedBytesThreshold所指定的值时,将触发dataReceived事件,当该事件被处理时,将调用该响应函数; 因此需要编辑dataReceived事件的响应函数,将Read接收数据的代码添加到该事件响应函数中,便可实现数据的及时接收处理。 22 以上便是RFID串口协议的总体介绍以及串口访问的具体实现,后续课程将对具体的读写卡命令进行详细介绍,并加以实例验证。 最后有一道思考题留给大家:计算机上使用RS232串口与其他设备连接时,需要设置哪些串口参数?同学们可以根据自己的理解给出答案并说明原因。 23 好了,本次课到此结束,谢谢大家。
因篇幅问题不能全部显示,请点此查看更多更全内容