Modbus读写器YW-630是以RS485总线,基于标准Modbus-rtu通信协议而研发的一款全新的
IC卡读卡器,具有可读和写非接触IC的所有功能。非常方便将IC卡嵌入到各个PLC为核心的工程中。
要轻松顺利的开发带IC卡的PLC项目,先必须了解非接触IC卡的内存结构。
1 非接触IC卡介绍
非接触IC卡是IC卡中的一种,由于非接触IC卡没有物理磨损,寿命更长,价格更便宜,使得非接触IC卡的使用越来越多,最具有代表性的非接触IC卡就是M1卡及其兼容卡。下面将以M1卡为例,来介绍M1的内部结构。
M1卡有1k和4k之分,内部结构基本差不多,以M1卡1K为例:
该IC卡共有16个扇区,每个扇区4个块,每块16字节,所以总共有字节数16*4*16=1024个字节。
第15扇区
第63块
密钥块
第62块
数据块
第61块
数据块
第60块
数据块
.
.
.
第1扇区
第7块
密钥块
第6块
数据块
第5块
数据块
第4块
数据块
第0扇区
第3块
密钥块
第2块
数据块
第1块
数据块
第0块
存卡号,只读
每个扇区最后一块用来保存密钥,故不能当作数据来使用。第0块由于是只读的,也不能用来存取数据,所以此卡实际可用的内存为(16*3-1)*16= 752字节。
在读写某个数据块之前,必须首先进行密钥认证,如果密钥认证失败,则不能读写,只有认证成功,方可进行读写等操作。每个扇区共用一组密钥,所以一个扇区只要认证成功一次,就可以读写此扇区中的四个数据块。
寄存器地址
寄存器名称
寄存器默认值
寄存器值说明
0x0001
波特率和ID
0x0301
波特率03代表19200,ID为01
0x0002
读卡参数
0x0030
卡类型:
S50/
S70和其兼容卡。
读到卡后蜂鸣器响一声,LED闪一下。
使用密钥寄存器密钥进行认证,即0x000B到0x000D。
认证模式:A密钥
0x0003
LED灯和蜂鸣器控制
0x0000
可以单独控制蜂鸣器
0x0004到0x0007
卡片序列号
0x00000000000000
卡片的序列号共7个字节,部分卡号为4个字节,则后面的字节以0填充。
0x0008
卡片操作
0x0000
可以执行读块或者写块操作
0x0009
卡片操作执行状态
0x0000
读块和写块的执行结果
0x00为成功
其他为失败
0x000A
要读写的块号设置
0x0000
要读写的块号和块数量设置,禁止跨扇区读写。
0x000B到0x000D
密钥寄存器
0xFFFFFFFFFFFF
存储用于认证的密钥
0x0010到0x002F
块数据寄存器
0x00000000000000000000000000000000
0x00000000000000000000000000000000
0x00000000000000000000000000000000
0x00000000000000000000000000000000
块数据,共64字节,即可以读写最多4个块,每个块的数据按顺序排列。
3 如何在PLC上通过
IC卡读卡器操作IC卡
在PLC的开发中,使用IC卡一般由以下3种情况,我们逐一说明这3种情况下如果配置
Modbus读写器YW-630,以下都认为modbus读写器的站地址为已经设置为1,波特率已经配置好
1.只需要读取卡号
读卡号是最简单的事,只需要不断查看寄存器0004到0007内容是否为0,如果为0就说明没有读到卡,只要不为0,就说明读到卡了,很简单。读到卡并将卡号处理完毕后,即可将0004到0007寄存器全部清零,读卡器则自动启动新的读卡。
2.需要读取IC卡某块的内容
如果读取某个固定的块,则可以先设置块号和相应的密钥,例如我们要读第5块,先设置0x000A寄存器为0x0105,意义为读取第5块,块数量为1。然后设置密钥寄存器0x000B到0x000D,此3个寄存器默认值为0xFFFF, 0xFFFF, 0xFFFF.如果是一张新卡,则可以不用设置,如果是有别的密钥,就设置新的密钥。设置完成后就可以准备读卡了。
a) 将卡号寄存器0004到0007全部清零,即启动读卡。
b) 一旦读到卡后,将0x0008寄存器设置为0x0001, 即启动读块操作。
c) 查看0x0009寄存器,如果是非零,则表明读块失败,如果是0,则表明读块成功。
d) 一旦检测到读块成功,则可以读取0x0010到0x0017寄存器共8个寄存器,16个字节为块号为5的内存内容
3.需要写IC卡某块的内容
如果写某个固定的块,则可以先设置块号和相应的密钥,例如我们要写第5块,先设置0x000A寄存器为0x0105,意义为读取第5块,块数量为1。然后设置密钥寄存器0x000B到0x000D,此3个寄存器默认值为0xFFFF, 0xFFFF, 0xFFFF.如果是一张新卡,则可以不用设置,如果是有别的密钥,就设置新的密钥。然后将需要写入的内容写到寄存器0x0010到0x0007中,共8个寄存器,16个字节。设置完成后就可以准备写卡了。
a) 将卡号寄存器0004到0007全部清零,即启动读卡。
b) 一旦读到卡后,将0x0008寄存器设置为0x0002, 即启动写块操作。
c) 查看0x0009寄存器,如果是非零,则表明读块失败,如果是0,则表明写块成功。
4.如何在IC中做加值和减值运算
如果要在IC卡中做加值和减值,对于
Modbus读写器YW-630将是非常简单的事。IC卡的一个块16字节将分布在8个寄存器中,只要对其中某一个寄存器进行加减然后再执行写操作即可完成。例如我们将数值存在第5块的前2个字节。 这时读第5块,先设置0x000A寄存器为0x0105,意义为读取第5块,块数量为1。然后设置密钥寄存器0x000B到0x000D,此3个寄存器默认值为0xFFFF, 0xFFFF, 0xFFFF.如果是一张新卡,则可以不用设置,如果是有别的密钥,就设置新的密钥。设置完成后就可以准备读卡了,读到的内容将存在寄存器0x0010到0x0007中,共8个寄存器,16个字节。然后将0x0010寄存器进行加减运算后,再执行写操作就可以了。