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

