广州荣士电子有限公司电子渠道

智慧城市网免费会员

收藏

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块的存储结构:

说明:

  1. BCC为所有字节累加和;
  2. 卡片余额为十六进制,字节倒叙,单位:分钱  比如100元钱表示为 10 27 00
  3. 认证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读写器读卡测试:

  1. 读第7寄存器,根据寄存器返回的数据判断是否有卡在感应区,有卡时往下操作

  1. 往第7寄存器写值00 08,进行读卡操作,接着马上进行下一步

  1. 读第7寄存器,根据寄存器返回的数据判断是否读卡成功,成功时往下操作

  1. 读出00010-00030寄存器数据(只有读卡成功时寄存器上的数据才为卡上的数据)

  1. 用发卡器的demo,读出扇区数据对比看看是否一致(此步骤只是为了调试时,有一个参照)

写卡操作,流程基本等同于读卡,这里就不做截图了,操作流程如下:

  1. 执行读卡操作
  2. 将需要写的值更新到对应的寄存器(00010-00033)
  3. 往第7寄存器写值 00 04,进行写卡
  4. 读第7寄存器,判断写卡是否成功
  5. 用发卡器demo,读出扇区数据,看下数据是否已经写入成功(此步骤只是调试时,做一个参照)
提示

请选择您要拨打的电话: