Modbus讀(dú)寫器YW-630開發(fā)指南
摘要
Modbus讀(dú)寫器YW-630開發(fā)指南
Modbus讀寫器YW-630是以RS485總線,基於标準Modbus-rtu通信協議而研發的一款全新的IC卡讀卡器,具有可讀和寫非接觸IC的所有功能。非常方便将IC卡嵌入到各個PLC爲核心的工程中。
Modbus讀寫器YW-630採用Vcc,GND,485+,485- 共四根線,連接簡單可靠,供電電壓從9VDC到24VDC都可以正常工作。
要輕松順利的開發帶IC卡的PLC項目,先必須瞭(le)解非接觸(chù)IC卡的内存結構。
1 非接觸IC卡介紹
非接觸IC卡是IC卡中的一種,由於(yú)非接觸IC卡沒有物理磨損,壽命更長(zhǎng),價格更便宜,使得非接觸IC卡的使用越來越多,最具有代表性的非接觸IC卡就是M1卡及其兼容卡。下面将以M1卡爲例,來介紹M1的内部結構。
M1卡有1k和4k之分,内部結構基本差不多,以M1卡1K爲例:
該IC卡共有16個扇區,每個扇區4個塊,每塊16字節,所以總共有字節數16*4*16=1024個字節。
第15扇區
第63塊(kuài)
密鑰塊(kuài)
第62塊(kuài)
數據(jù)塊(kuài)
第61塊(kuài)
數據(jù)塊(kuài)
第60塊(kuài)
數據(jù)塊(kuài)
.
.
.
第1扇區
第7塊(kuài)
密鑰塊(kuài)
第6塊(kuài)
數據(jù)塊(kuài)
第5塊(kuài)
數據(jù)塊(kuài)
第4塊(kuài)
數據(jù)塊(kuài)
第0扇區
第3塊
密鑰塊
第2塊
數據(jù)塊
第1塊
數據(jù)塊
第0塊
存卡号,隻讀(dú)
每個扇區最後一塊用來保存密鑰,故不能當作數據來使用。第0塊由於(yú)是隻讀的,也不能用來存取數據,所以此卡實際可用的内存爲(16*3-1)*16= 752字節。
在讀寫某個數據塊之前,必須首先進行密鑰認證,如果密鑰認證失敗(bài),則不能讀寫,隻有認證成功,方可進行讀寫等操作。每個扇區共用一組密鑰,所以一個扇區隻要認證成功一次,就可以讀寫此扇區中的四個數據塊。
2 Modbus讀寫器YW-630的寄存器結構
寄存器地址
寄存器名稱
寄存器默認值
寄存器值說明
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,就說明讀到卡瞭(le),很簡單。讀到卡並(bìng)将卡号處理完畢後,即可将0004到0007寄存器全部清零,讀卡器則自動啓動新的讀卡。
2.需要讀取IC卡某塊的内容
如果讀取某個固定的塊,則可以先設置塊号和相應的密鑰,例如我們要讀第5塊,先設置0x000A寄存器爲0x0105,意義爲讀取第5塊,塊數量爲1。然後設置密鑰寄存器0x000B到0x000D,此3個寄存器默認值爲0xFFFF, 0xFFFF, 0xFFFF.如果是一張新卡,則可以不用設置,如果是有别的密鑰,就設置新的密鑰。設置完成後就可以準備(bèi)讀卡瞭(le)。
a) 将卡号寄存器0004到0007全部清零,即啓動(dòng)讀(dú)卡。
b) 一旦讀(dú)到卡後,将0x0008寄存器設置爲0x0001, 即啓動(dòng)讀(dú)塊操作。
c) 查看0x0009寄存器,如果是非零,則表明讀(dú)塊失敗(bài),如果是0,則表明讀(dú)塊成功。
d) 一旦檢測(cè)到讀(dú)塊成功,則可以讀(dú)取0x0010到0x0017寄存器共8個寄存器,16個字節爲塊号爲5的内存内容
3.需要寫IC卡某塊的内容
如果寫某個固定的塊,則可以先設置塊号和相應的密鑰,例如我們要寫第5塊,先設置0x000A寄存器爲0x0105,意義爲讀取第5塊,塊數量爲1。然後設置密鑰寄存器0x000B到0x000D,此3個寄存器默認值爲0xFFFF, 0xFFFF, 0xFFFF.如果是一張新卡,則可以不用設置,如果是有别的密鑰,就設置新的密鑰。然後将需要寫入的内容寫到寄存器0x0010到0x0007中,共8個寄存器,16個字節。設置完成後就可以準備(bèi)寫卡瞭(le)。
a) 将卡号寄存器0004到0007全部清零,即啓動(dòng)讀(dú)卡。
b) 一旦讀(dú)到卡後,将0x0008寄存器設置爲0x0002, 即啓動(dòng)寫塊操作。
c) 查看0x0009寄存器,如果是非零,則表明讀(dú)塊失敗(bài),如果是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寄存器進行加減運算後,再執行寫操作就可以瞭。

