Modbus讀寫器YW-630是以RS485總線,基于標準Modbus-rtu通信協(xié)議而研發(fā)的一款全新的
IC卡讀卡器,具有可讀和寫非接觸IC的所有功能。非常方便將IC卡嵌入到各個PLC為核心的工程中。
要輕松順利的開發(fā)帶IC卡的PLC項目,先必須了解非接觸IC卡的內(nèi)存結(jié)構(gòu)。
1 非接觸IC卡介紹
非接觸IC卡是IC卡中的一種,由于非接觸IC卡沒有物理磨損,壽命更長,價格更便宜,使得非接觸IC卡的使用越來越多,最具有代表性的非接觸IC卡就是M1卡及其兼容卡。下面將以M1卡為例,來介紹M1的內(nèi)部結(jié)構(gòu)。
M1卡有1k和4k之分,內(nèi)部結(jié)構(gòu)基本差不多,以M1卡1K為例:
該IC卡共有16個扇區(qū),每個扇區(qū)4個塊,每塊16字節(jié),所以總共有字節(jié)數(shù)16*4*16=1024個字節(jié)。
第15扇區(qū)
第63塊
密鑰塊
第62塊
數(shù)據(jù)塊
第61塊
數(shù)據(jù)塊
第60塊
數(shù)據(jù)塊
.
.
.
第1扇區(qū)
第7塊
密鑰塊
第6塊
數(shù)據(jù)塊
第5塊
數(shù)據(jù)塊
第4塊
數(shù)據(jù)塊
第0扇區(qū)
第3塊
密鑰塊
第2塊
數(shù)據(jù)塊
第1塊
數(shù)據(jù)塊
第0塊
存卡號,只讀
每個扇區(qū)最后一塊用來保存密鑰,故不能當作數(shù)據(jù)來使用。第0塊由于是只讀的,也不能用來存取數(shù)據(jù),所以此卡實際可用的內(nèi)存為(16*3-1)*16= 752字節(jié)。
在讀寫某個數(shù)據(jù)塊之前,必須首先進行密鑰認證,如果密鑰認證失敗,則不能讀寫,只有認證成功,方可進行讀寫等操作。每個扇區(qū)共用一組密鑰,所以一個扇區(qū)只要認證成功一次,就可以讀寫此扇區(qū)中的四個數(shù)據(jù)塊。
寄存器地址
寄存器名稱
寄存器默認值
寄存器值說明
0x0001
波特率和ID
0x0301
波特率03代表19200,ID為01
0x0002
讀卡參數(shù)
0x0030
卡類型:
S50/
S70和其兼容卡。
讀到卡后蜂鳴器響一聲,LED閃一下。
使用密鑰寄存器密鑰進行認證,即0x000B到0x000D。
認證模式:A密鑰
0x0003
LED燈和蜂鳴器控制
0x0000
可以單獨控制蜂鳴器
0x0004到0x0007
卡片序列號
0x00000000000000
卡片的序列號共7個字節(jié),部分卡號為4個字節(jié),則后面的字節(jié)以0填充。
0x0008
卡片操作
0x0000
可以執(zhí)行讀塊或者寫塊操作
0x0009
卡片操作執(zhí)行狀態(tài)
0x0000
讀塊和寫塊的執(zhí)行結(jié)果
0x00為成功
其他為失敗
0x000A
要讀寫的塊號設(shè)置
0x0000
要讀寫的塊號和塊數(shù)量設(shè)置,禁止跨扇區(qū)讀寫。
0x000B到0x000D
密鑰寄存器
0xFFFFFFFFFFFF
存儲用于認證的密鑰
0x0010到0x002F
塊數(shù)據(jù)寄存器
0x00000000000000000000000000000000
0x00000000000000000000000000000000
0x00000000000000000000000000000000
0x00000000000000000000000000000000
塊數(shù)據(jù),共64字節(jié),即可以讀寫最多4個塊,每個塊的數(shù)據(jù)按順序排列。
3 如何在PLC上通過
IC卡讀卡器操作IC卡
在PLC的開發(fā)中,使用IC卡一般由以下3種情況,我們逐一說明這3種情況下如果配置
Modbus讀寫器YW-630,以下都認為modbus讀寫器的站地址為已經(jīng)設(shè)置為1,波特率已經(jīng)配置好
1.只需要讀取卡號
讀卡號是最簡單的事,只需要不斷查看寄存器0004到0007內(nèi)容是否為0,如果為0就說明沒有讀到卡,只要不為0,就說明讀到卡了,很簡單。讀到卡并將卡號處理完畢后,即可將0004到0007寄存器全部清零,讀卡器則自動啟動新的讀卡。
2.需要讀取IC卡某塊的內(nèi)容
如果讀取某個固定的塊,則可以先設(shè)置塊號和相應(yīng)的密鑰,例如我們要讀第5塊,先設(shè)置0x000A寄存器為0x0105,意義為讀取第5塊,塊數(shù)量為1。然后設(shè)置密鑰寄存器0x000B到0x000D,此3個寄存器默認值為0xFFFF, 0xFFFF, 0xFFFF.如果是一張新卡,則可以不用設(shè)置,如果是有別的密鑰,就設(shè)置新的密鑰。設(shè)置完成后就可以準備讀卡了。
a) 將卡號寄存器0004到0007全部清零,即啟動讀卡。
b) 一旦讀到卡后,將0x0008寄存器設(shè)置為0x0001, 即啟動讀塊操作。
c) 查看0x0009寄存器,如果是非零,則表明讀塊失敗,如果是0,則表明讀塊成功。
d) 一旦檢測到讀塊成功,則可以讀取0x0010到0x0017寄存器共8個寄存器,16個字節(jié)為塊號為5的內(nèi)存內(nèi)容
3.需要寫IC卡某塊的內(nèi)容
如果寫某個固定的塊,則可以先設(shè)置塊號和相應(yīng)的密鑰,例如我們要寫第5塊,先設(shè)置0x000A寄存器為0x0105,意義為讀取第5塊,塊數(shù)量為1。然后設(shè)置密鑰寄存器0x000B到0x000D,此3個寄存器默認值為0xFFFF, 0xFFFF, 0xFFFF.如果是一張新卡,則可以不用設(shè)置,如果是有別的密鑰,就設(shè)置新的密鑰。然后將需要寫入的內(nèi)容寫到寄存器0x0010到0x0007中,共8個寄存器,16個字節(jié)。設(shè)置完成后就可以準備寫卡了。
a) 將卡號寄存器0004到0007全部清零,即啟動讀卡。
b) 一旦讀到卡后,將0x0008寄存器設(shè)置為0x0002, 即啟動寫塊操作。
c) 查看0x0009寄存器,如果是非零,則表明讀塊失敗,如果是0,則表明寫塊成功。
4.如何在IC中做加值和減值運算
如果要在IC卡中做加值和減值,對于
Modbus讀寫器YW-630將是非常簡單的事。IC卡的一個塊16字節(jié)將分布在8個寄存器中,只要對其中某一個寄存器進行加減然后再執(zhí)行寫操作即可完成。例如我們將數(shù)值存在第5塊的前2個字節(jié)。 這時讀第5塊,先設(shè)置0x000A寄存器為0x0105,意義為讀取第5塊,塊數(shù)量為1。然后設(shè)置密鑰寄存器0x000B到0x000D,此3個寄存器默認值為0xFFFF, 0xFFFF, 0xFFFF.如果是一張新卡,則可以不用設(shè)置,如果是有別的密鑰,就設(shè)置新的密鑰。設(shè)置完成后就可以準備讀卡了,讀到的內(nèi)容將存在寄存器0x0010到0x0007中,共8個寄存器,16個字節(jié)。然后將0x0010寄存器進行加減運算后,再執(zhí)行寫操作就可以了。