//Logo Image
作者:甘凱文(2005-05-12);推薦:徐業良(2005-05-13);最近更新:甘凱文(2006-07-28)

使用PIC_SERVER讀取RFID資料

本文將針對「RFID原理與系統介紹」中介紹的三種RFID系統做整合應用,說明如何以DDS中的PIC_SERVER當主控端,讀取並辨識從RFID Reader所傳回的Tag資料,並依據所讀取資料發送特定email或手機訊息。

1.     PIC_SERVERRFID硬體接線

因為三種RFID皆使用RS232做為與PIC_SERVER之間的通訊介面,所以本文利用PIC_SERVER本身的RS-232RFID Reader做傳輸連結。1PIC_SERVERRFID硬體傳輸接線圖RFID ReaderRS-232接腳為9PIN的接頭,其中PIN2為接收為接腳,PIN3為傳送接腳,PIN5為接地腳。

PIC_SERVER的控制核心PIC18F46xxPIC18F6xxx本身並沒提供RS232通訊介面,只提供RC6RC7這兩隻傳送與接收的TTL腳位。PIC_SERVER電路設計上有一顆MAX232的控制IC作為橋接器,可將PIC18F46xxPIC18F6xxx傳送的TTL電壓轉換成RS232介面電壓,或是將RFIDRS232介面傳回電壓轉換成TTL的電壓。

1. 傳輸接線圖

2.     使用PIC_SERVER讀取各類RFID Reader資料

本文應用範例中以PIC_SERVER做為主機端,分別讀取三種不同RFID Reader所傳回的Tag資料內容,並判讀資料內的Unique Identification(UID)ID,再以不同的ID對應數值由PIC_SERVER向使用者發出不同的E-mail或是將ID顯示在LCD上。

2.1    Promag ISO 15693 RWM600 SK模組之整合

2所示為PIC_SERVER端與ISO 15693 RWM600 SK整合的程式流程圖。因為ISO 15693 RWM600 SK本身是被動的RFID,當Tag進入Reader的感應磁場時,Tag線圈將磁場能量轉換成電能供給Tag的晶片,然後將Tag資訊傳至RFID ReaderRFID Reader接收到Tag的資料後再透過RS232回傳到PIC_SERVER做辨識確認。表1Reader傳送的資料格式,詳細內容可參閱「RFID原理與裝置介紹」一文。

PIC_SERVER程式流程如下,首先判別接收到的第一個byte是否為Header值,如果正確再讀取Len值以判斷Tag的進或出(“0x0A為進,“0x09”為出)。如果為Tag進入則儲存此TagUID Code,並將其最低字元值與PIC_SERVER內所預存資料做比較,來判斷是那一張TagUID Code(本文共使用三張Tag其資料內容如表1所示),判別後並發送特定的E-mail內容,然後在LCD上顯示此UID Code。所讀入UID Code與預存資料不吻合,則LCD顯示“Wrong UID”。如果讀取Len值判斷Tag為離開時,便清除LCD上的UID Code

2. PIC_SERVER程式範例流程圖

1. Tag事件回應之資料結構

Header

ID

Response

Len

Parameters

Check

Tail

0x01

0x00

0x12

0x0A

‘I’+DSFID+UID

 

 

0x01

0x00

0x12

0x09

‘R’+UID

 

 

2. 本文目前所測試之三張Tag上的UID Code

LSB                                                         MSB

A6

00

09

12

00

00

07

E0

A8

00

09

12

00

00

07

E0

A9

00

09

12

00

00

07

E0

CCS的程式撰寫如圖3~4所示,圖5的部分為一些宣告的設定值,8~11行分別為設定發信者、收信者的電腦主機帳號與設定信件的主旨內容的字串長度範圍,20行是兩個暫存的Buffer空間用以存放接收到RFID ReaderUID Code21行設定三張Tag使用者的姓名,24~29PIC_SERVER網路卡的初植設定與顯示IP位置的設定。

2為一個循環的程式。如前之流程規劃,37~38行分別為判斷是否有字元進來,及判讀是否為Header“0x01”,符合才繼續執行下行,否則繼續循環等待。當Header正確時接著會判斷Tag的進或出為程式的4379行,“0x0A為進、“”0x09”為出),程式46~78行是Tag進入時處理的流程,首先將UID Code存放在C[31]buffer中,接者因為讀進的UID Code為低位元到高位元,所以51~56行是用來反轉位元以及成現UID CodeLCD上的程式內容。程式的57~77行是將讀入的UID Code的最低字元來判斷那一個使用者的Tag,並且發送不同使用者的E-mail內容,例如讀取到的最低字元為“0xA9”則其發送的E-mail主旨為“P1 is coming to school”P1為先前程式21行設定的“John”,而信件內容為“John has already arrived”,假如非程式內的UID Code則顯示錯誤訊息“Wrong UID”

3. RWM600 SKCCS程式(I)

4. RWM600 SKCCS程式(II)

2.2    Promag GP30/60A之整合

5所示為PIC_SERVER端與Promag GP30/60A整合的範例程式流程圖,表3為範例中使用的三張Tag ID與資料格式,圖6PIC_SERVER中的CCS程式。此程式為一個循環程式,在主程式中包含兩個副程式,分別為讀取RFID Reader資訊的check_meg()與筆對Tag ID發送信件的write_send_email()程式,其程式流程如下,當RFID Reader有資訊傳進來(圖6中的15行程式),則會進入check_msg()的副程式(圖7中的24~41行程式),在check_msg()接收資訊流程為,如PIC_SERVERRFID Reader收到的字元不是”0x02””0x0D””0x0A”0x03”HeaderEnd字元,表示為Tag ID的字元,則將那些字元存放至ID_Buffer中(圖6中的37~38行程式),並繼續讀回傳值直到接收”0x03”得結尾字元,如果在0.4秒內尚未收結尾字元表示資料錯誤(圖6中的33~34程式),程式會自動跳出check_msg()等待新的觸發。

當時間內讀回的值為”0x03”為結尾值,程式便進入write_send_email()的副程式進行資料筆對與發送信件(圖6中的37~38行程式),首先將ID_Buffer複製成rfid_substring(圖6中的45行程式),接著再與表3中的三張Tag ID進行筆對,然後依據不同的Tag ID發送不同的信件內容,如rfid_substringperson1內容相同為”190108EDF2”,則信件內容為“Joe is coming to school.”(圖6中的4行程式與圖7中的47~48行)。

5. Promag GP30/60A整合範例程式流程圖

9. GP30/60A資料結構與3TagID

Header

Tag ID(10 HEX Characters)

CR

LF

End

0x02

190108EDF2

0x0D

0x0A

0x03

0x02

041A1D33E3

0x0D

0x0A

0x03

0x02

0413D71846

0x0D

0x0A

0x03

6. Promag GP30/60A CCS程式

2.3    Awid MPR-2010BR之整合

Awid MPR-2010BR與前述兩種RFID最大不同點在於,主控端下達指令才驅動RFID Reader讀取Tag ID,本節主要內容為如何使用PIC_SERVER來控制Awid MPR-2010BR來讀取Tag ID內容,並將Tag ID顯示在PIC_SERVERLCD上。

10為本範例所使用到的指令,包括了設天線的強度與開啟天線讀取Tag ID的指令,圖10CCS所編輯的程式內容,在程式1~12行設一些使用的參數與副程式宣告,第5行程式為設定使用PIN_C6PIN_C7分別為RS232的傳送與接收腳位,使用的Baud rate9600,並訂定義為COM_A的傳輸代號,第8~9行程式為將表10的指令設為參數,在本例設定天線強度為最強的狀態。

當系統啟動進入主程式,首先程式第18行對PIC_SERVER進行初始化,接著程式第20行對RFID Reader天線近行設定,然後程式便進入22~29的循環回圈內,然後當PIN_B2由高電位變低電位發生事件變化時(程式第26行),便進入check_msg()的副程式中(程式第35~50行)進讀取Tag ID之流程,首先程式第41行會開啟RFID Reader的天線,接著開始接收由RFID Reader傳回來的Tag資訊(程式第43~49行),回傳的字串應共有13個字元,如果在1秒內所傳回的字元少於13個字元,表示沒有Tag在感應範圍內或傳輸錯誤,此時會回傳1至主程式(程式第46行),此時a就等於1,如果13個字元都有接收到則回傳0(程式第48行),此時a就等於0,在程式28行如果a就等於則在PIC_SERVERLCD上顯示剛傳回Tag ID並發出beep聲。

10. Awid MPR-2010BR command

 

Command

Response

RF Power Level(0x12)

0600120039B7(Max)

0600128039B7(Half)

060012FF2747(Min)

00 or FF

00-command correct

FF-command error

Read Single Tag(0x10)

for EPC Tag

061710009926

0D1710C80507A80084F2DDxxxx

C80507A80084F2DD is Tag ID

xxxx is Data CRC

 

6. Awid MPR-2010BR CCS程式