PLC modbusRTU寄存器RFID读写器对应地址说明
时间:2016-11-09 阅读:3311
温馨提示:如果大家是初次接触IC卡读写操作的,建议先了解IC卡的结构,然后了解IC卡是怎么应用于MODBUS读写器,zui后再根据MODBUS读写器寄存器说明进行对IC卡的相读、写操作(如果已经比较熟悉IC卡的使用,直接看寄存器的说明即可 ).此文档对这些都有比较详细的描述,使用过程中遇到任何问题,互相讨论学习。
IC卡结构
- IC卡的技术特性
- 分为16个扇区,每个扇区为4块,每块16个字节,以块为存取单位
- 每个扇区有独立的一组密码及访问控制
- 每张卡有*序列号,为32位
- 具有防冲突机制,支持多卡操作
- 无电源,自带天线,内含加密控制逻辑和通讯逻辑电路
- 数据保存期为10年,可改写10万次,读无限次
- 工作温度:-20℃~50℃
- 工作频率:13.56MHZ
- 通信速率:106KBPS
- IC卡的存储结构
M1卡分为16个扇区,每个扇区由4块(块0、块1、块2、块3)组成,(我们也将16个扇区的64个块按地址编号为0~63,存贮结构如下图所示:
区号 | 名称 | 块号 | 块号 | 块号 | 块号 (密码区) |
0 | 基本信息区 | 0 | 1 | 2 | 3 |
1 | 4-63
| 4 | 5 | 6 | 7 |
2 | 8 | 9 | 10 | 11 | |
3 | 12 | 13 | 14 | 15 | |
4 | 16 | 17 | 18 | 19 | |
5 | 20 | 21 | 22 | 23 | |
6 | 24 | 25 | 26 | 27 | |
7 | 28 | 29 | 30 | 31 | |
8 | 32 | 33 | 34 | 35 | |
9 | 36 | 37 | 38 | 39 | |
A | 40 | 41 | 42 | 43 | |
B | 44 | 45 | 46 | 47 | |
C | 48 | 49 | 50 | 51 | |
D | 52 | 53 | 54 | 55 | |
E | 56 | 57 | 58 | 59 | |
F | 60 | 61 | 62 | 63 |
卡片实际应用划分结构举例(开发人员自定义的数据结构),比如定义IC卡第3扇区0、1、2块的存储结构:
说明:
- BCC为所有字节累加和;
- 卡片余额为十六进制,字节倒叙,单位:分钱 比如100元钱表示为 10 27 00
- 认证KEY_B之后可以对卡片进行读写操作。
IC卡存储块与MODBUS读写器寄存器的对应关系
- 读写器寄存器仅有48个字节来对应IC卡,所以只能选用IC卡16个扇区中的任意1个扇区来对应。
寄存器与IC卡某扇区0、1、2块字节的对应关系
寄存器 | 00010 | 00011 | 00012 | 00013 | 00014 | 00015 | 00016 | 00017 | ||||||||
块0字节 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
寄存器 | 00018 | 00019 | 00020 | 00021 | 00022 | 00023 | 00024 | 00025 | ||||||||
块1字节 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
寄存器 | 00026 | 00027 | 00028 | 00029 | 00030 | 00031 | 00032 | 00033 | ||||||||
块2字节 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
IC卡应用于MODBUS读写器
(附四:PC端软件读写卡测试流程)
操作步骤:
- 使用密码卡更新MODBUS读写器的操作扇区和校验密码,密码卡制作方法如下:
在PC端运行IC卡发卡软件;
- 选取1-14扇区的任意一个区号(MODBUS读写器只使用一个扇区),自己设定IC卡的A、B密码,将设定的扇区跟密码信息保存起来,方便调试;
- 连接USB发卡器,发卡器需装驱动,用供应商提供的驱动完成安装;
- 将IC卡放在USB发卡器感应区,点击制作密码卡按键,制作成功按照提示,将密码卡拿到MODBUS读写器感应区刷卡更新扇区和校验密码;
其他IC卡必须要初始化(密码卡除外),方法如下:
- 选填好之前制作密码卡时设定的区号跟卡的A/B密码;
- 连接USB发卡器,发卡器需装驱动,用供应商提供的驱动完成安装;
- 将IC卡放在USB发卡器感应区,点击初始化IC卡按键,初始化成功的IC卡即可拿到刷过对应密码卡的MODBUS读写器上进行读写操作;
Modbus读写器操作初始化成功的IC卡
- 读、写卡说明
- 写卡操作:
*步,用06或10(十六进制)指令更新00010至00033寄存器内容(顺序对应卡内48字节内容),如果只用到00010到00033中的几个寄存器,其他寄存器可以不理会(不需要更新)。
第二步,用功能码06(不能用10)
写值00004到00007寄存器,作用是将00010至00033寄存器的数据写到卡中。
写值00020(十六进制为00014)到00007寄存器,作用是将00010至00033寄存器的数据写到的卡中,卡号用00008,00009寄存器。
第三步,读00007寄存器看是否第0位为1表示写卡成功。读00007寄存器尽量在写00007寄存器后马上操作。
- 读卡操作:
*步:用功能码06(不能用10)
写值00008到00007寄存器,作用是将卡上的内容更新到00010至00033寄存器中。
写值00024(十六进制为00018)到00007寄存器,是将卡上的内容更新到00010至00033寄存器中。卡号放到00008,00009寄存器。
第二步,读00007寄存器看是否第1位为1表示读卡成功,此时00008、00009、00010至00033中的数据才有效。读00007寄存器尽量在写00007寄存器后马上操作。
第三步,用03指令读00010至00033寄存器中的内容。
IC-10MRT型MODBUS读写器功能及寄存器说明
- IC-10MRT型MODBUS读写器适用S50、S70射频卡。
- IC-10MRT型MODBUS读写器能通过MODBUS-RTU方式与PLC通信,MODBUS读写器为从站(出厂一般默认站号为2)、PLC为主站,通讯参数:波特率,N,8,1(出厂默认19200,波特率有4800,9600,19200,38400四档可设,设定方法请看第九点)。需要实现即时刷卡功能,可用PLC设备每隔0.2秒读卡一次。
- 寄存器说明
注:西门子PLC 中的40001寄存器对应于本读写器的00000寄存器,以此类推(下面有关于寄存器的说明都是以本读写器的说明为准)。
00000:存放读卡器的站号(机号),可读可写,写可以更改站号,只能用06功能码,可用03寄存器来读或连读。
00001:在读写型的MODBUS读写器中为无效寄存器。
00002:驱动读卡器响声,只能用06功能码,可用03寄存器来读或连读。 如写为0表示短滴一声,如下表
表1
1 | 短滴一声 |
2 | 短滴两声 |
3 | 短滴三声 |
4 | 长鸣一声 |
5 | 长鸣两声 |
6 | 长鸣三声 |
7 | 一长一短 |
8 | 一长两短 |
9 | 一长三短 |
10 | 两长一短 |
11 | 两长两短 |
12 | 两长三短 |
其他 | 短滴一声 |
00003至00006寄存器保留,暂不使用
00007寄存器为读写卡控制寄存器:只能用06功能码写,可用03寄存器来读或连读。
表2
15~8位 | 7~6位 | 5位 | 4位 | 3位 | 2位 | 1位 | 0位 |
自定义 | 自定义 | 为1表示IC卡密码错,对应IC卡的密码要通过密码管理卡在MODUBS读卡器上设定 | 为1表示卡在感应区且返回卡号在00008、00009寄存器,且读或写仅对卡号的卡有效 | 写1驱动读卡操作,读寄存器这个位只能读出0 | 写1驱动写卡操作,读寄存器这个位只能读出0
| 读卡成功 | 写卡成功 |
00008至00009共2个寄存器存放IC卡卡号(4个字节)。
00010至00033共24个寄存器对应于IC卡的扇区内48字节内容。
- 波特率更改说明
波特率出厂时默认为19200,波特率有4800,9600,19200,38400四档可设,在00060寄存器中写入波特率值,再在00061寄存器中写入21930(十六进制为0)。如需将波特率改为9600,在00060寄存器写入9600,接着在一秒中内在00061寄存器中写入21930。
- 通讯校验位更改说明
校验位出厂是为N(None),也就是无校验,共有None无、Odd奇、Even偶、Mask常1、Space常0五种方式可设,在00062寄存器中写入0~4中的一个值(分别对应None、Odd、Even、Mask、Space),再在00063寄存器中写入21930(十六进制为0)。也可以采用连写00062、00063两个寄存器,也就是用功能码10(十六进制)。如需将校验为改为为None,在00062寄存器写入0,接着在一秒中内在00062寄存器中写入21930。
- 数据报文格式
在数据报文层面,寄存器起始地址都是从0开始。数据报文格式:设备地址+功能码+起始地址+寄存器个数+校验码。其中起始地址是从0开始的。
如:从站号2读卡器读取00008开始的两个寄存器数据的报文
发送:
设备地址 功能码 起始地址 寄存器个数 校验码(CRC16)
02 03 00 08 00 02 45 FA
成功返回:
设备地址 功能码 数据长度 数据信息 校验码(CRC16)
02 03 04 28 5B 90 BB 9D 33
其中:285B 90BB 为卡的内码数据(每张卡的卡号是*的),寄存器内高字节在前。
所以卡号为:
正码为:5B28BB90,转换成十进制为:1529396112;
反码为:90BB285B, 转换成十进制为:2428184667;
USB发卡器读写IC卡的DEMO
因为大家很多都是初次接触IC卡方面的操作,不熟悉IC卡信息的读写,所以提供我们usb读写器PC端DEMO(如需要对发卡器进行二次开发,可以厂商提供发卡器的SDK),方便大家在调试时进行IC卡数据信息的对比。比如设定制作密码卡时选取的扇区区号是1,A、B密码都是111111111111。进行MODBUS读写器IC卡读写操作后,可以使用该demo读取或者写IC卡数据进行对比调试。
附一:MODBUS读卡器与不同厂家PLC的连接
西门子S7-200
信捷的PLC(一体机),型号XP3-18R
欧姆龙CP1E N60
关键的数据格式书写
附二:MODBUS读卡器尺寸与接线示意图
(外壳尺寸 ,(长×宽×高)11.6cm×7.5cm× 1.5cm)
接线网络拓补图
接线示意图
附四:PC端软件测试流程
制作密码卡(只需制作一张)保存好填写的区号、A密码、B密码;拿密码卡到modbus读写器刷卡,“滴滴”两声表示设定成功:
初始化IC卡,密码卡不要用来初始化,此处填写区号、A密码、B密码要跟制作密码卡时的一致。
MODBUS读写器读卡测试:
- 读第7寄存器,根据寄存器返回的数据判断是否有卡在感应区,有卡时往下操作
- 往第7寄存器写值00 08,进行读卡操作,接着马上进行下一步
- 读第7寄存器,根据寄存器返回的数据判断是否读卡成功,成功时往下操作
- 读出00010-00030寄存器数据(只有读卡成功时寄存器上的数据才为卡上的数据)
- 用发卡器的demo,读出扇区数据对比看看是否一致(此步骤只是为了调试时,有一个参照)
写卡操作,流程基本等同于读卡,这里就不做截图了,操作流程如下:
- 执行读卡操作
- 将需要写的值更新到对应的寄存器(00010-00033)
- 往第7寄存器写值 00 04,进行写卡
- 读第7寄存器,判断写卡是否成功
- 用发卡器demo,读出扇区数据,看下数据是否已经写入成功(此步骤只是调试时,做一个参照)