馮韶霞
(山西機電職業技術學院 數控工程系,山西 長治 046000)
射頻識別(Radio Frequency Identification,RFID)技術是一種利用射頻通信技術實現的非接觸式自動識別技術。與傳統的條形碼、磁卡等接觸式識別技術相比,RFID可實現非可視、多目標識別,其突出優點是防磁、壽命長、容量大、信息可加密、內容可更改。如今RFID 技術已經廣泛應用于人們的日常生活和生產制造中。PLC作為一類可靠性高的控制器,可以與RFID進行通信,從而實現各種控制功能。
一個完整的RFID系統是由標簽、讀寫器、主機(上位機、工控機、服務器、PLC)組成的,如圖1所示。其中,標簽存儲數據及信息,通常放置在被識別的物體上;讀寫器包括讀或者讀/寫裝置,一般帶有附加的接口,如USB、RS232、RS485等,方便將所獲得的數據傳輸給主機系統;主機通常使用PLC控制器與讀寫器通信,根據控制要求,控制讀寫器對標簽內的信息進行讀或寫操作,并實現數據交換。

圖1 射頻識別系統的基本組成
RFID系統根據工作頻率的不同可分為低頻、高頻、超高頻系統。低頻系統主要包括125 kHz和134 kHz兩種,用于短距離傳輸,如門禁卡、校園卡。高頻系統主要是13.56 MHz,是目前被廣泛使用的頻段,用于生產管理、運輸、圖書。超高頻系統主要包括915 MHz、2.4 GHz、5.8 GHz等,可應用于需要較長讀寫距離的場合,如高速公路收費等系統中。
本文以思谷SG-HR-I2讀寫器為例,該讀寫器是一款一體式的高頻RFID讀寫設備,其工作頻率為13.56 MHz,符合ISO-15693標準,支持RS-485/RS-232通信(本文以RS485通信為例),能夠操作遵守ISO-15693協議的電子標簽。讀寫器與主機之間的控制指令均為一次性執行,讀寫器接收到控制指令后,無論執行結果如何,均會返回消息以確認指令的執行情況。
思谷高頻讀寫器通過訪問不同的命令碼,從而實現不同的指令,并返回相應的數據,其命令碼如表1所示。

表1 高頻讀寫器命令碼
表1中,UID 數據區為RFID標簽的出廠ID存放區,數據為只讀,UID長度為 8 byte,地址范圍 0x800E~0x8 011。
主機與讀寫器之間通信遵循的協議如表2所示。

表2 主機與讀寫器通信協議
協議的字段說明如下:
(1) 幀頭(Header):長度為1 byte,取固定值0xFF。
(2) 包長度(Len):長度為1 byte,包含Len、Cmd、Data字段。
(3) 命令碼(Cmd):長度為1 byte,參照表1。
(4) 用戶數據(Data):長度為Nbyte。
(5) CRC校驗:長度為2 byte,含Header、Len、Cmd、Data字段的CRC校驗。其中Data格式如表3所示。
對Data段的說明如下:
(1) CtrlFlg:為2 byte,其中Bit0表示ReaderID,Bit1~Bit14默認取0,Bit15置位,表示此幀為響應幀,Bit15復位,表示此幀為請求幀。
(2) CtrlFlg 參數包括:
Status:為1 byte, 表示命令執行狀態, 當CtrlFlg 的Bit15置位,此字段出現,此幀為響應幀,如果請求指令發送成功,則該字段取值為0x00, 請求指令發送失敗,該字段取值為非0x00; Bit15復位,此字段不出現,此幀為請求幀。
ReaderID:為1 byte,Bit0:ReaderID 置位,此字段出現,此時只有讀寫器 ID 與 ReaderID 一致, 讀寫器才響應; Bit0:ReaderID 復位,此字段不出現,讀寫器ID與ReaderID默認值為0x00。
(3) 命令參數:Mbyte,根據各個功能來定義。
主機到讀寫器的指令為請求幀,讀寫器到主機的指令為響應幀,在響應幀指令中CtrlFlg除最高位置位,其他與請求幀保持一致,ReaderID同樣與請求幀一致。

表3 Data格式
2.3.1 主機讀取UID值
命令編碼:0x01。
功能說明:讀取天線場范圍內標簽的UID,不支持多標簽讀取。
(1) 首先主機向讀寫器發送讀取請求指令,格式如下:
FF 05 01 0001 00 78D8
其中: FF表示幀頭;05表示包長度;01表示命令碼;0001表示CtrlFlg;00表示ReaderID;78D8表示CRC校驗碼。
(2) 命令執行完成,讀寫器響應數據的格式為:
FF 0E 01 8001 00(成功) 00 (797FBB39500104E0) 7D79
或
FF 06 01 8001 80(失敗) 00 6930
其中:FF/FF表示幀頭;0E/06表示包長度;01/01表示命令碼;8001/8001表示CtrlFlg;00(成功)/ 80(失敗)表示Status;00/00表示ReaderID;797FBB39500104E0表示UID值;7D79/6930表示CRC校驗碼。
2.3.2 主機按字節讀取數據
命令編碼:0x11。
功能:按照字節讀取標簽內存,需要配置字節的起始地址和字節數量。
(1) 首先主機向讀寫器發送讀取請求指令,讀地址 01 長度為 8 的請求數據,格式如下:
FF 08 11 0001 00 0001 06 3572
其中:0001為2 byte,表示讀取寄存器的起始地址;06為1 byte,表示讀取的字節數量。
(2) 命令執行完成,讀寫器返回的指令格式為:
FF 0C 11 8001 00(成功) 00 (AA AA AA AA AA AA) 9AB5
或
FF 06 11 8001 80(失敗) 00 AAF1
其中:AAAAAAAAAAAA表示請求的數據。
2.3.3 主機按字節寫入數據
命令編碼:0x12。
功能:按字節的形式寫標簽內存。
(1) 首先主機向讀寫器發送寫數據指令,從 0 地址開始寫 5 個字節數據,格式如下:
FF 0D 12 0001 00 0000 05 (0001020304)66ED
其中:0000表示寫入寄存器的起始地址;05表示寫入的字節數量;0001020304表示需寫入的數據。
(2) 命令執行完成,讀寫器返回的指令格式為:
FF 06 12 8001 00(成功) 00 6AD4
或
FF 06 12 8001 80(失敗) 00 AAB5
本文使用西門子S7-1200型號為1215C的PLC作為主機與思谷SG-HR-I2讀寫器進行RS-485通信,通信板使用CM 1241。博途軟件包中包含串行通信指令:Port_Config、Send_P2P、Receive_P2P。
在博途的硬件目錄下選擇 1215C 型號的 CPU 和 CM 1241 通信板進行硬件組態。雙擊 CM 1241 通信板查看其硬件標識符為271。配置Port_Config、Send_P2P、Receive_P2P的參數,新建全局數據塊DB102和DB104,DB102用于直接與讀寫器傳輸數據,DB104用于給DB102賦值。Port_Config指令模塊如圖2所示。

圖2 Port_Config指令模塊
從DB102.DBB22~DB102.DBB42共21個字節,表示需要發送給RFID讀寫器的數據,如圖3所示。

圖3 發送數據模塊
從DB102.DBB0~DB102.DBB20共21個字節,表示RFID讀寫器響應的數據需要存儲的數據塊地址,如圖4所示。
從DB104.DBB0~DB102.DBB20共21個字節,表示PLC發送給讀卡器讀取標簽UID值的指令,如圖5所示。其中DB104.DBB0~DB102.DBB7對應發送指令為:
FF 05 01 0001 00 78D8
從DB104.DBB22~DB102.DBB42共21個字節,表示PLC發送給讀卡器需要讀取標簽寄存器值的指令,如圖6所示。其中DB104.DBB22~DB102.DBB32對應發送指令為:
FF 08 11 0001 00 0000 0A 64F2

圖4 接收數據模塊

圖5 PLC發送給讀卡器讀取標簽UID值的指令
從DB104.DBB44~DB102.DBB64共21個字節,表示PLC需要寫入到讀卡器中值的指令,如圖7所示。其中DB104.DBB44~DB102.DBB53對應發送指令為:
FF 12 12 0001 00 00000A
(00010203040506070809) 66ED
本文介紹通過RS-485串口,在PLC與RFID之間實現通信的方法,重點介紹了對RFID讀卡器中數據的讀寫功能,這種通信方式簡單,靈敏度高,抗干擾能力強,廣泛應用于工業領域中。

圖6 PLC發送給讀卡器需要讀取標簽寄存器值的指令

圖7 PLC需要寫入到讀卡器中值的指令