牟宏均
(寶雞職業技術學院 寶雞 721013)
?
基于CAN總線的PLC通信技術的研究*
牟宏均
(寶雞職業技術學院寶雞721013)
摘要CAN總線如果能與PPI協議進行轉換,那么CAN總線上的智能節點便能訪問S7-200系列PLC,從而實現異型網絡間的數據通信。論文對實現PPI協議與CAN協議的硬件設計方案進行研究,對PPI接口電路和CAN接口電路進行設計,分析了CAN應用層協議,對整體軟件結構和運行進行分析,最后對轉化協議進行測試。
關鍵詞PLC; PPI; CAN總線
Class NumberTP273
1引言
現場總線的實時、可靠、低成本、使用方便等特點使其在被控現場得到了廣泛的應用。以現場總線為核心的現場總線控制系統必將成為未來工業生產的重要組成部分[1]。如果能夠在現場總線的智能節點上實現PPI協議,那么就很容易實現對S7-200的內部存儲區域的訪問,并且S7-200通信的過程中無需要任何程序支持,如果需要配合智能設備一起完成控制功能,只需對自己的存儲區域的某些區域進行讀和寫,進而完成控制功能[2]。作為現場總線的一種,控制器局域網CAN是一種多主總線系統,通信介質可以是雙絞線、同軸電纜或光導纖維,適合工業領域和汽車領域的設備間的互聯,因此,被視為最有前途的現場總線之一。如果能夠實現CAN總線與PPI協議的轉換,那么CAN總線上的智能節點便能訪問S7-200系列PLC,從而實現異型網絡間的數據通信,這樣,CAN網絡與PPI網絡上的節點便能一起完成更復雜的控制,因此,CAN-PPI協議的轉換成為最關鍵的問題。如果能夠實現CAN與PPI的協議轉換,在應用時,只需要在此基礎上根據應用需求做二次開發即可。
2硬件設計方案
實現PPI協議與CAN協議的轉換,即實現PPI協議到CAN協議的透明傳輸,CAN總線上的節點無需關心PPI協議,只需通過CAN-PPI網關控制器,就可以訪問S7-200系列PLC[3]。由于PPI協議是主/從的協議[4],另外,PPI協議是和S7-200系列PLC存儲單元相關的,而CAN節點和CAN-PPI網關控制器上沒有對應的存儲單元,因此把S7-200系列PLC作為從站,CAN節點或CAN-PPI網關控制器作為主站,即通信是由CAN節點或CAN-PPI網關控制器發起,S7-200系列PLC是被動地響應,從而實現對S7-200存儲區域的訪問。圖1是課題系統硬件設計方案。
2.1PPI接口電路設計
PPI接口電路如圖2所示。PPI協議的物理層基于RS-485,圖中使用了SP3485作為收發器,SP3485的工作電壓使用的3.3V,之所以使用SP3485,是為了實現與LPC2292之間的電平匹配[5]。SP3485的收發引腳與LPC2292的UART0的收發引腳連接,另外,SP3485的收發使能管腳與LPC2292的一個普通IO口連接。為了減少PPI總線上的信號反射,在PPI的總線終端并接了120Ω的電阻。

圖1 硬件設計方案

圖2 PPI接口電路
2.2CAN接口電路設計
CAN接口電路如圖3所示。使用TJA1050T作為CAN總線的收發器,TJA1050符合ISO 11898國際標準,它具有兩個特性,一個是它很好的EMC特性,相對PCA82C250,它的輻射要低20DB;另一個重要特性是它在不上電時,總線上程序無源特性,從而減低功耗[6]。TJA1050的收發管腳與LPC2292內部的CAN控制器的收發管腳連接。TJA1050的S管腳接地,即選擇高速模式[7]。總線終端連接一個120歐的電阻減少輻射,從而增強抗干擾性能。

圖3 CAN接口電路
3CAN應用層協議設計
CAN應用層協議為CAN-PPI網關控制器與其他CAN節點進行CAN總線通訊制定的,CAN與CAN之間的軟件接口必須根據此應用層協議進行設計。
3.1協議參數說明
CAN應用層的協議很大程度上是由PPI參數決定的,在使用PPI協議對S7-200系列的PLC進行訪問時,涉及以下參數[8]:ParaAccessDir,訪問S7-200系列PLC的方向,即是讀操作還是寫操作,占1個字節;ParaMemoZone,訪問存儲區域,即訪問的是S7-200系列的PLC哪個存儲區域,占1個字節;ParaOffsetAddr,訪問區域的偏移地址,即訪問的是S7-200系列的PLC某個區域的哪個位置,占2個字節;ParaUnitType,訪問的單元類型,即訪問的是S7-200系列的PLC的某個區域的一個字節,一個字還是一個雙字,占1個字節;ParaData,寫操作時的數據參數,即寫入S7-200系列PLC的數據,由于可能寫入的是雙字,因此,它占4個字節。
當進行讀操作時,涉及ParaAccessDir、ParaMemoZone、ParaOffsetAddr和ParaUnitType共4個參數,占5個字節;當進行寫操作時,所有參數均涉及到,占9個字節。然而,CAN的一幀數據幀最多只能包含8個字節,由此可見,在進行讀操作時,一幀數據足以涵蓋所有的參數,而當進行寫操作時,需要兩幀數據才能涵蓋所有的參數[9]。
3.2協議規定
3.2.1讀操作的協議
讀操作時的協議如圖4所示。CAN節點首先發送讀PLC請求幀,此幀攜帶了ID_GATEWAY、ParaAccessDir、ParaMemoZone、ParaOffsetAddr和ParaUnitType這些信息,當CAN-PPI網關控制器接收到讀PLC請求幀時,會進行PPI讀,接著把讀取到的數據發送給CAN節點,當CAN節點接收到數據后,給CAN-PPI返回一個讀成功幀以示讀取成功。

圖4 讀操作的協議示意圖
3.2.2寫操作的協議
寫操作時的協議如圖5所示,CAN節點首先發送寫PLC請求幀,此幀攜帶了ID_GATEWAY、ParaAccessDir、ParaMemoZone、ParaOffsetAddr和ParaUnitType這些信息,當CAN-PPI網關控制器接收到寫PLC請求幀時,會發送寫請求數據幀給CAN節點,當CAN節點接收到寫請求數據幀,會把要寫入PLC的數據發送給CAN-PPI網關控制器,CAN-PPI網關控制器接收到要寫入的數據后,會根據寫參數把要寫入的數據寫入PLC,最后反饋一個寫成功幀給CAN節點。

圖5 寫操作的協議成功示意圖
4整體軟件結構設計
軟件的最上層是由八個任務和兩個中斷組成。這八個任務分別是起始任務、讀PLC任務、發送RdRi任務、處理RdAi任務、寫PLC任務、發送WrRi任務、處理WrAi任務和發送CI任務。兩個中斷分別是CAN接收中斷和串口中斷。圖6為整體軟件結構圖。圖中Rn表示讀操作時信號量的發送順序,Wn表示寫操作時信號量的發送順序。
PPI參數結構體:
typedef struct
{
INT32U m_OprFlag :1;
INT32U m_RecCrFlag :1;
INT32U m_RdAiOrWrRiNums :8;
INT32U m_Reserved :22;
INT8U m_MemoZoneType;
INT8U m_DataType;
INT16U m_ByteOffset;
INT32U m_PPIValue;
}PPI_CtlStr,*pPPI_CtlStr;
PPI_CtlStr g_PPI_CtlStr;
這個結構體是讀寫操作公用的一個結構體,用來存放讀寫的參數等信息。m_OprFlag是用來指示當前是讀操作還是寫操作;
m_RecCrFlag是應來控制Cr幀的接收流程的;
m_RdAiOrWrRiNums用來確定RdAi或者WrRi幀的字節數的;m_MemoZoneType、m_DataType和m_ByteOffset是用來存放讀寫參數;m_PPIValue存放讀寫的數據。

圖6 整體軟件結構圖
4.1起始任務TaskStart()
起始任務主要是完成硬件、軟件的初始化和任務的創建以及自身任務的刪除[10]。硬件初始化主要包括串口的初始化和CAN控制器的初始化;軟件的初始化包括讀RI幀常量的初始化、寫RI幀常量的初始化和信號量的初始化,由于RI幀的是由一些常量數據和變量數據組成的,因此,可以在讀寫之前將RI幀的常量先包裝好,以后在進行讀寫之前,只需要包裝RI幀的變量即可,這樣提高讀寫速度。
在完成初始化和任務創建之后,起始任務的任務就完成了,因此,在任務的最后將自身刪除,從而釋放起始任務所占用的系統資源。
4.2讀PLC任務TaskCAN_CmdRdPLC()
該任務是由信號量SemReqRd觸發的,這個信號量是在CAN中斷程序中被發送的,讀PPI任務在任務的開始等待這個信號量,即當接收到數據產生中斷,并且判斷是讀請求幀時,便發送這個信號量,從而讓讀PLC任務繼續得以執行,當讀PLC任務得到這個信號量后,會根據讀請求幀中的參數更新PPI參數結構體g_PPI_CtlStr,然后發出信號量SemRdRi觸發其他任務完成PLC讀時序,最后在任務的末尾等待讀取結果的信號量SemTakeRiSdResult,從而將數據發給CAN節點。
4.3發送RdRi幀任務TaskRdRiSend()
發送RdRi幀任務是完成讀PLC時RI幀的發送,在此任務的開始等待允許發送RdRi幀的信號量SemRdRi,當獲取到信號量后,便進行RdRi幀變量的包裝,RdRi幀常量的包裝是在起始任務初始化中進行的,包裝完畢RdRi幀后,便進行RdRi幀的發送,發送是調用SendCommonData(),并配合串口發送中斷完成數據的發送。
4.4發送CI幀任務TaskCiSend()
這是一個公共任務,即讀寫PPI公用的一個任務,它完成讀寫PLC時CI幀的發送。由于CI幀全都是常數,因此,在任務的超循環之前,定義并初始化CI幀。在超循環中,首先等待允許發送CI幀的信號量SemCiSd,當獲取到該信號量后,表示串口中斷已經接收到CR幀,但這時不可以立刻發送CI幀,這是因為PLC在發送完CR幀后,并不能立即接收CI幀。因此,為了與PLC同步,這個地方必須延時3~5個時鐘節拍,使自身掛起,等到3~5個時鐘過后,該任務重新得以運行再進行CI幀的發送,同樣,CI幀的發送也是調用SendCommonData(),并配合串口發送中斷完成的。
4.5處理RdAi幀任務TaskRdAiPro()
這個任務主要是完成RdAi幀的校驗工作和提取讀取的數據。程序首先等待允許處理RdAi幀的信號量SemRdAiPro,獲取到該信號量后,證明RdAi已接收完畢,接著根據RdAi的長度求得RdAi幀的某段數據的檢驗和,并比較檢驗和,如果校驗和正確,則提取讀取的數據并發送允許取走讀取結果的信號量SemTakeRdResult。
4.6寫PLC任務TaskCAN_CmdWrPPI()
該任務是由信號量SemReqWr觸發的,這個信號量是在CAN中斷程序中被發送的,寫PPI任務在任務的開始等待這個信號量,即當中斷中接收到數據,并且判斷是寫請求幀時,發送這個信號量。當寫PLC任務得到該信號量后,會發送請求寫數據幀給CAN節點,請求要寫的數據,接著等到信號量SemWrData,當得到該信號量后,根據寫請求幀中的參數和寫數據更新PPI參數結構體g_PPI_CtlStr,然后發出信號量SemWrRiSd觸發其他任務完成PLC寫時序,最后等待允許發送寫成功信號量SemWrSuc,獲取到該信號量后,將寫成功幀發送給CAN節點。
4.7發送WrRi幀任務TaskWrRiSend()
它完成寫PLC時RI幀的發送,在此任務的開始等待允許發送WrRi幀的信號量SemWrRiSd,當獲取到信號量后,便進行WrRi幀變量的包裝,WrRi幀常量的包裝是在起始任務初始化中進行的,包裝完畢WrRi幀后,便進行WrRi幀的發送,發送仍然是調用SendCommonData(),并配合串口發送中斷完成數據的發送。
4.8處理WrAi幀任務TaskWrAiPro()
這個任務主要是完成WrAi幀的校驗工作。程序首先等待允許處理WrAi幀的信號量SemWrAiPro,獲取到該信號量后,證明WrAi已接收完畢,接著計算WrAi幀的檢驗和,并比較檢驗和,如果校驗和正確,則發送允許發送寫成功信號量。
4.9CAN中斷服務程序CAN_Exception()
它負責數據的接收和CAN應用層協議的順序控制。它首先判斷當前發生的中斷是否是接收中斷,從而保證接收中斷的可靠性。如果是接收中斷,那么將數據和ID存入緩沖區。接著對ID進行判斷,如果ID正確,再通過判斷標志位g_WrPLCFlag,了解當前接收到的數據是不是寫數據幀。如果是,則發送接收到寫數據幀的信號量SemWrData,如果當前接收到的不是寫數據幀,接著判斷接收到是不是讀參數幀。如果是,則發送信號量SemRdPara,如果不是讀參數幀,那么接收到的無疑是寫參數幀,發送信號量SemWrPara,并將g_WrPLCFlag置位,指示下次接收的數據是寫數據幀。程序最后釋放CAN控制器的接收緩沖區。
5系統測試結果與分析
系統測試是指對CAN-PPI網關控制器進行測試,測試的目標主要有:CAN-PPI網關控制器能否通過CAN總線接收讀操作命令,并通過PPI協議實現對S7-200系列的PLC的讀操作,繼而將讀取的數據通過CAN總線反饋回去;CAN-PPI網關控制器能否通過CAN總線接收寫操作命令,并通過PPI協議實現對S7-200系列的PLC的進行寫操作;CAN節點通過CAN-PPI網關控制器讀取一次數據的時間;CAN節點通過CAN-PPI網關控制器寫入一次數據的時間;CAN-PPI網關控制器直接讀取一次數據的時間;CAN-PPI網關控制器直接讀取一次數據的時間。
系統測試結果如表1所示。從表中的數據來看,讀寫的時間將近100ms,時間非常長。CAN-PPI中的協議轉換程序是基于嵌入式實時操作系統的,協議轉換的過程是通過并行的任務來實現的,另外,數據的發送也是通過中斷的方式去實現的,因此,從程序的結構上來說,只要PLC立即響應產生事件,事件就會立即得到響應。但是,從測試的結果來看,時間是相當長的,這可以歸結為以下兩個原因:
PLC在接收到RdRi或WrRi幀后,并沒有立即發出CR幀,而是經過一段時間后才發送的;PLC在接收到CI幀后,并沒有立即發出RdAi幀或WrAi幀,而是經過一段時間后才發送的。

表1 系統測試一覽表
6結語
隨著通信技術的發展,針對當前西門子S7-200系列PLC無法直接與異型網絡上的智能設備相互通信的問題,提出了使用CAN-PPI網關控制器進行協議轉換,從而,實現S7-200系列PLC與CAN網絡上節點的透明傳輸。
參 考 文 獻
[1] 鄔寬明.CAN總線原理和應用系統設計[M].北京:北京航空航天大學出版社,2012.
WU Kuangming. Theory of CAN-Bus and system design.[M]. Beijing: Beihang University Press,2012.
[2] 陽憲惠.現場總線及其應用[M].北京:清華大學出版社,2015.
YANG Xianhui. Theory and application of fieldbus.[M]. Beijing: Tsinghua Press,2015.
[3] 溫照方.SIMATIC S7-200可編程程序控制器教程[M].北京:北京理工大學出版社,2013.
WEN Zhaofang. Programmable Logic Controller Textbook[M]. Beijing: Beijing Institute of Technology Press,2013.
[4] 俞潔,李旭芳.西門子S7-200系列PLC通訊功能與應用[M]. 機械工業自動化,2012.
YU Jie, LI Xufang. PLC communication function and Application of Siemens S7-200 series[M]. Institute of automation for machinery industry,2012.
[5] 甘永梅,李慶豐,劉小娟.現場總線技術及其應用[M]. 北京:機械工業出版社,2004.
GAN Yongmei, LI Qingfeng, LIU Xiaojuan. Fieldbus technique and application[M].Institute of Automation for Machinery Industry,2012.
[6] 溫克強.Modbus通訊協議在DCS與PLC通訊中的應用[J].石油化工自動化,2005(5):65-68.
WEN Keqiang. Application of Modbus protocol in DCS and PLC[M]. Institute of Automation for Petrochemical Industry,2005(5):65-68.
[7] 袁飛,程恩.基于Modbus規約的智能儀表與PC機通信技術實現[J].微計算機信息,2004,20(9):15-17.
YUAN Fei, CHENG En. Communication technology realization of intelligent instrument and PC based on Modbus protocol[J]. Microcomputer Information,2004,20(9):15-17.
[8] 李喜東,劉波濤,劉剛.Modbus RTIJ串行通訊協議在工業現場的應用[J].自動化技術與應用,2005,24:37-40.
LI Xidong, LIU Botao, LIU Gang. The application of RTIJ Modbus serial communication protocol in the field of industry[J]. Techniques of Automation and Application,2005,24:37-40.
[9] 袁飛,程恩.基于Modbus規約的智能儀表與PC機通信技術實現[J].微計算機信息,2004(9):56-57.
YUAN Fei, CHENG En. Communication technology realization of intelligent instrument and PC based on Modbus protocol[J]. Microcomputer Information,2004,20(9):15-17.
[10] 吳立新.論智能大廈的集散型樓宇自控系統[J].工業控制計算機,2012(7):50-51.
WU Lixin. The distributed automatic control system of intelligent building[J]. Industrial Control Computer,2012(7):50-51.
收稿日期:2016年1月10日,修回日期:2016年3月2日
作者簡介:牟宏均,男,高級工程師,研究方向:自動控制、自動檢測。
中圖分類號TP273
DOI:10.3969/j.issn.1672-9722.2016.07.043
PLC Communication Technology Based on CAN Bus
MOU Hongjun
(Baoji Vocational Technology College, Baoji721013)
AbstractIf CAN bus can convert with PPI protocol, then the intelligent nodes on the CAN bus can access S7-200 series PLC, thus realizing the data communication between different networks. In this paper, the realization of the hardware design scheme of PPI protocol and CAN protocol is researched. The PPI interface circuit and CAN interface circuit are designed. The CAN application layer protocol is analyzed. The whole software structure and operation is analyzed. Finally, the conversion protocol is tested.
Key WordsPLC, PPI, CAN bus