产线自动化应用超高频RFID读写头|读写器CK-UR08-B01是以RS232 MODBUS RTU通讯协议为基础的,包括读卡器的站号ID、波特率、读卡模式等的配置,以及对标签的读写操作,都可以通过MODBUS 通讯指令实现。
在没有特殊配置的情况下,读卡器默认为 MODBUS RTU从站。因此只要连接没有问题,通讯设置没有问题,并且知道从站站号(或者使用广播地址 0) ,读卡器总是可以被MUDBUS主机找到。读卡器在配置为其他工作模式时,通讯模式将作为主站,但仍可以以MODBUS从机的模式接收配置信息。
在读卡器配置为非标准MODBUS模式情况下,可用过我司配套的配置软件重新配置,或者自行通过MODBUS发送配置命令更改设置。
读卡器通讯协议
通讯数据帧
在MODBUS RTU 通讯模式下,主站需要通过时间来判断 RTU 帧的开始和结束。主站监视总线上的通讯数据,如果发现总线有超过 4.5 个字符时间(时间绝对值随字符传送波特率的变化而变化)的空闲,则认为一个帧已经结束(如果存在) ,同时认为下一个字符为下一帧的开始。
完整的 RTU 帧应该是下面的格式(不论是主站发起还是从站应答) :
表格 2‑1 通讯数据帧格式
空闲 | 地址 | 功能码 | 数据 | CRC 校验 | 空闲 |
-- | 1 字节 | 1 字节 | N 字节 | 2 字节 | -- |
地址
MODBUS 协议的站地址由一个字节组成,站地址用来指示哪个从设备来应答主站的通讯报文。在总线上,每个从设备必须指定一个唯一的站地址,只有当通讯报文中地址与该从设备地址相同时, 该从设备才能应答主站的通讯报文。 从设备应答的通讯报文也必须包含该地址,以告知主站,这个通讯报文是哪个从设备应答的。广播报文的地址是零,所有的从站可以根据广播报文进行相应的动作,但是一般不能应答该广播报文。
功能码
功能码指示从设备执行相应的操作,从设备回复相应的数据。用户可通过功能码03查询地址为0x05的寄存器状态来获取上一个操作是否正常执行。做为从站,目前 F系列读卡器只使用了部分常用的 MODBUS 通讯功能码:
1、03 读保持寄存器(Read holding register)
2、06 写单个寄存器(Preset single register)
3、16 写多个寄存器(Preset multiple registers)
数据区
数据区是主站需要发送给从站的数据, 或者是从站需要返回给主站的数据。 数据的具体含义由功能码来定义。特别的,有些功能码不包含数据区,数据区大小可以为 0。
校验码
校验码让接收数据方来检查通讯的传输过程中是否有错误发生。
在 MODBUS 中,RTU 模式必须采用 CRC16 校验码。在单片机中实现一般有两种方法,查表法或者运算法,实现方法可以查阅相关的资料。
读卡器通信操作示例
功能码03读取操作
获取读卡器配置信息
读卡器的配置信息保存在0x0000, 0x0001, 0x0002, 0x0003四个地址中(详细功能说明见开发手册)。
主机发送:02 03 00 00 00 04 44 3A
发送 | |
段名 | 例子(HEX格式) |
从机地址 | 02 |
功能码 | 03 |
开始地址(高字节) | 00 |
开始地址(低字节) | 00 |
数量(高字节) | 00 |
数量(低字节) | 04 |
CRC校验(高字节) | 44 |
CRC校验(低字节) | 3A |
读卡器应答:02 03 08 00 02 00 05 00 01 00 01 E5 53
应答 | |
段名 | 例子(HEX格式) |
从机地址 | 02 |
功能码 | 03 |
字节数 | 08 |
数据(寄存器0x0000高字节) | 00 |
数据(寄存器0x0000低字节) | 02 |
数据(寄存器0x0001高字节) | 00 |
数据(寄存器0x0001低字节) | 05 |
数据(寄存器0x0002高字节) | 00 |
数据(寄存器0x0002低字节) | 01 |
数据(寄存器0x0003高字节) | 00 |
数据(寄存器0x0003低字节) | 01 |
CRC校验(高字节) | E5 |
CRC校验(低字节) | 53 |
读取标签EPC信息
标签的EPC信息保存在0x0010,0x0011,0x0012,0x0013,0x0014,0x0015在6个寄存器中。
主机发送:02 03 00 10 00 06 C4 3E
发送 | |
段名 | 例子(HEX格式) |
从机地址 | 02 |
功能码 | 03 |
开始地址(高字节) | 00 |
开始地址(低字节) | 10 |
数量(高字节) | 00 |
数量(低字节) | 06 |
CRC校验(高字节) | C4 |
CRC校验(低字节) | 3E |
读卡器应答(读卡成功): 02 03 0C E2 00 00 16 16 05 90 70 87 88 14 50 62 37
应答 | |
段名 | 例子(HEX格式) |
从机地址 | 02 |
功能码 | 03 |
字节数 | 0C |
数据(寄存器0x0010高字节) | E2 |
数据(寄存器器0x0010低字节) | 00 |
数据(寄存器器0x0011高字节) | 00 |
数据(寄存器器0x0011低字节) | 16 |
数据(寄存器器0x0012高字节) | 16 |
数据(寄存器器0x0012低字节) | 05 |
数据(寄存器器0x0013高字节) | 90 |
数据(寄存器器0x0013低字节) | 70 |
数据(寄存器器0x0014高字节) | 87 |
数据(寄存器器0x0014低字节) | 88 |
数据(寄存器器0x0015高字节) | 14 |
数据(寄存器器0x0015低字节) | 50 |
CRC校验(高字节) | 62 |
CRC校验(低字节) | 37 |
功能码06/16写寄存器操作
功能码06写单个寄存器
更改读卡器站号ID,读卡器的站号ID保存在0x0000寄存器中。
主机发送02 06 00 00 00 03 C9 F8
发送 | |
段名 | 例子(HEX格式) |
从机地址 | 02 |
功能码 | 06 |
写入地址(高字节) | 00 |
写入地址(低字节) | 00 |
写入数据(高字节) | 00 |
写入数据(低字节) | 03 |
CRC校验(高字节) | C9 |
CRC校验(低字节) | F8 |
读卡器应答:02 06 00 00 00 03 C9 F8
应答 | |
段名 | 例子(HEX格式) |
从机地址 | 02 |
功能码 | 06 |
写入地址(高字节) | 00 |
写入地址(低字节) | 00 |
写入数据(高字节) | 00 |
写入数据(低字节) | 03 |
CRC校验(高字节) | C9 |
CRC校验(低字节) | F8 |
功能码16写多个寄存器
将数据写入RFID标签0x0016, 0x0017,0x0018,0x0019四个寄存器中。
主机发送:02 10 00 16 00 04 08 00 01 00 02 00 03 00 04 A4 4F
接收 | |
段名 | 例子(HEX格式) |
从机地址 | 02 |
功能码 | 10 |
起始地址(高字节) | 00 |
起始地址(低字节) | 16 |
寄存器数量(高字节) | 00 |
寄存器数量(低地址) | 04 |
字节数 | 08 |
数据(寄存器0x0016高字节) | 00 |
数据(寄存器0x0016低字节) | 01 |
数据(寄存器0x0017高字节) | 00 |
数据(寄存器0x0017低字节) | 02 |
数据(寄存器0x0018高字节) | 00 |
数据(寄存器0x0018低字节) | 03 |
数据(寄存器0x0019高字节) | 00 |
数据(寄存器0x0019低字节) | 04 |
CRC校验(高字节) | A4 |
CRC校验(低字节) | 4F |
读卡器应答:02 10 00 0A 00 04 20 3D
更多关于产线自动化应用超高频RFID读写头|读写器CK-UR08-B01通讯协议与操作实例,欢迎交流!