牟宏均
(寶雞職業(yè)技術(shù)學(xué)院 寶雞 721013)
?
基于CAN總線的PLC通信技術(shù)的研究*
牟宏均
(寶雞職業(yè)技術(shù)學(xué)院寶雞721013)
摘要CAN總線如果能與PPI協(xié)議進行轉(zhuǎn)換,那么CAN總線上的智能節(jié)點便能訪問S7-200系列PLC,從而實現(xiàn)異型網(wǎng)絡(luò)間的數(shù)據(jù)通信。論文對實現(xiàn)PPI協(xié)議與CAN協(xié)議的硬件設(shè)計方案進行研究,對PPI接口電路和CAN接口電路進行設(shè)計,分析了CAN應(yīng)用層協(xié)議,對整體軟件結(jié)構(gòu)和運行進行分析,最后對轉(zhuǎn)化協(xié)議進行測試。
關(guān)鍵詞PLC; PPI; CAN總線
Class NumberTP273
1引言
現(xiàn)場總線的實時、可靠、低成本、使用方便等特點使其在被控現(xiàn)場得到了廣泛的應(yīng)用。以現(xiàn)場總線為核心的現(xiàn)場總線控制系統(tǒng)必將成為未來工業(yè)生產(chǎn)的重要組成部分[1]。如果能夠在現(xiàn)場總線的智能節(jié)點上實現(xiàn)PPI協(xié)議,那么就很容易實現(xiàn)對S7-200的內(nèi)部存儲區(qū)域的訪問,并且S7-200通信的過程中無需要任何程序支持,如果需要配合智能設(shè)備一起完成控制功能,只需對自己的存儲區(qū)域的某些區(qū)域進行讀和寫,進而完成控制功能[2]。作為現(xiàn)場總線的一種,控制器局域網(wǎng)CAN是一種多主總線系統(tǒng),通信介質(zhì)可以是雙絞線、同軸電纜或光導(dǎo)纖維,適合工業(yè)領(lǐng)域和汽車領(lǐng)域的設(shè)備間的互聯(lián),因此,被視為最有前途的現(xiàn)場總線之一。如果能夠?qū)崿F(xiàn)CAN總線與PPI協(xié)議的轉(zhuǎn)換,那么CAN總線上的智能節(jié)點便能訪問S7-200系列PLC,從而實現(xiàn)異型網(wǎng)絡(luò)間的數(shù)據(jù)通信,這樣,CAN網(wǎng)絡(luò)與PPI網(wǎng)絡(luò)上的節(jié)點便能一起完成更復(fù)雜的控制,因此,CAN-PPI協(xié)議的轉(zhuǎn)換成為最關(guān)鍵的問題。如果能夠?qū)崿F(xiàn)CAN與PPI的協(xié)議轉(zhuǎn)換,在應(yīng)用時,只需要在此基礎(chǔ)上根據(jù)應(yīng)用需求做二次開發(fā)即可。
2硬件設(shè)計方案
實現(xiàn)PPI協(xié)議與CAN協(xié)議的轉(zhuǎn)換,即實現(xiàn)PPI協(xié)議到CAN協(xié)議的透明傳輸,CAN總線上的節(jié)點無需關(guān)心PPI協(xié)議,只需通過CAN-PPI網(wǎng)關(guān)控制器,就可以訪問S7-200系列PLC[3]。由于PPI協(xié)議是主/從的協(xié)議[4],另外,PPI協(xié)議是和S7-200系列PLC存儲單元相關(guān)的,而CAN節(jié)點和CAN-PPI網(wǎng)關(guān)控制器上沒有對應(yīng)的存儲單元,因此把S7-200系列PLC作為從站,CAN節(jié)點或CAN-PPI網(wǎng)關(guān)控制器作為主站,即通信是由CAN節(jié)點或CAN-PPI網(wǎng)關(guān)控制器發(fā)起,S7-200系列PLC是被動地響應(yīng),從而實現(xiàn)對S7-200存儲區(qū)域的訪問。圖1是課題系統(tǒng)硬件設(shè)計方案。
2.1PPI接口電路設(shè)計
PPI接口電路如圖2所示。PPI協(xié)議的物理層基于RS-485,圖中使用了SP3485作為收發(fā)器,SP3485的工作電壓使用的3.3V,之所以使用SP3485,是為了實現(xiàn)與LPC2292之間的電平匹配[5]。SP3485的收發(fā)引腳與LPC2292的UART0的收發(fā)引腳連接,另外,SP3485的收發(fā)使能管腳與LPC2292的一個普通IO口連接。為了減少PPI總線上的信號反射,在PPI的總線終端并接了120Ω的電阻。
圖1 硬件設(shè)計方案
圖2 PPI接口電路
2.2CAN接口電路設(shè)計
CAN接口電路如圖3所示。使用TJA1050T作為CAN總線的收發(fā)器,TJA1050符合ISO 11898國際標準,它具有兩個特性,一個是它很好的EMC特性,相對PCA82C250,它的輻射要低20DB;另一個重要特性是它在不上電時,總線上程序無源特性,從而減低功耗[6]。TJA1050的收發(fā)管腳與LPC2292內(nèi)部的CAN控制器的收發(fā)管腳連接。TJA1050的S管腳接地,即選擇高速模式[7]??偩€終端連接一個120歐的電阻減少輻射,從而增強抗干擾性能。
圖3 CAN接口電路
3CAN應(yīng)用層協(xié)議設(shè)計
CAN應(yīng)用層協(xié)議為CAN-PPI網(wǎng)關(guān)控制器與其他CAN節(jié)點進行CAN總線通訊制定的,CAN與CAN之間的軟件接口必須根據(jù)此應(yīng)用層協(xié)議進行設(shè)計。
3.1協(xié)議參數(shù)說明
CAN應(yīng)用層的協(xié)議很大程度上是由PPI參數(shù)決定的,在使用PPI協(xié)議對S7-200系列的PLC進行訪問時,涉及以下參數(shù)[8]:ParaAccessDir,訪問S7-200系列PLC的方向,即是讀操作還是寫操作,占1個字節(jié);ParaMemoZone,訪問存儲區(qū)域,即訪問的是S7-200系列的PLC哪個存儲區(qū)域,占1個字節(jié);ParaOffsetAddr,訪問區(qū)域的偏移地址,即訪問的是S7-200系列的PLC某個區(qū)域的哪個位置,占2個字節(jié);ParaUnitType,訪問的單元類型,即訪問的是S7-200系列的PLC的某個區(qū)域的一個字節(jié),一個字還是一個雙字,占1個字節(jié);ParaData,寫操作時的數(shù)據(jù)參數(shù),即寫入S7-200系列PLC的數(shù)據(jù),由于可能寫入的是雙字,因此,它占4個字節(jié)。
當進行讀操作時,涉及ParaAccessDir、ParaMemoZone、ParaOffsetAddr和ParaUnitType共4個參數(shù),占5個字節(jié);當進行寫操作時,所有參數(shù)均涉及到,占9個字節(jié)。然而,CAN的一幀數(shù)據(jù)幀最多只能包含8個字節(jié),由此可見,在進行讀操作時,一幀數(shù)據(jù)足以涵蓋所有的參數(shù),而當進行寫操作時,需要兩幀數(shù)據(jù)才能涵蓋所有的參數(shù)[9]。
3.2協(xié)議規(guī)定
3.2.1讀操作的協(xié)議
讀操作時的協(xié)議如圖4所示。CAN節(jié)點首先發(fā)送讀PLC請求幀,此幀攜帶了ID_GATEWAY、ParaAccessDir、ParaMemoZone、ParaOffsetAddr和ParaUnitType這些信息,當CAN-PPI網(wǎng)關(guān)控制器接收到讀PLC請求幀時,會進行PPI讀,接著把讀取到的數(shù)據(jù)發(fā)送給CAN節(jié)點,當CAN節(jié)點接收到數(shù)據(jù)后,給CAN-PPI返回一個讀成功幀以示讀取成功。
圖4 讀操作的協(xié)議示意圖
3.2.2寫操作的協(xié)議
寫操作時的協(xié)議如圖5所示,CAN節(jié)點首先發(fā)送寫PLC請求幀,此幀攜帶了ID_GATEWAY、ParaAccessDir、ParaMemoZone、ParaOffsetAddr和ParaUnitType這些信息,當CAN-PPI網(wǎng)關(guān)控制器接收到寫PLC請求幀時,會發(fā)送寫請求數(shù)據(jù)幀給CAN節(jié)點,當CAN節(jié)點接收到寫請求數(shù)據(jù)幀,會把要寫入PLC的數(shù)據(jù)發(fā)送給CAN-PPI網(wǎng)關(guān)控制器,CAN-PPI網(wǎng)關(guān)控制器接收到要寫入的數(shù)據(jù)后,會根據(jù)寫參數(shù)把要寫入的數(shù)據(jù)寫入PLC,最后反饋一個寫成功幀給CAN節(jié)點。
圖5 寫操作的協(xié)議成功示意圖
4整體軟件結(jié)構(gòu)設(shè)計
軟件的最上層是由八個任務(wù)和兩個中斷組成。這八個任務(wù)分別是起始任務(wù)、讀PLC任務(wù)、發(fā)送RdRi任務(wù)、處理RdAi任務(wù)、寫PLC任務(wù)、發(fā)送WrRi任務(wù)、處理WrAi任務(wù)和發(fā)送CI任務(wù)。兩個中斷分別是CAN接收中斷和串口中斷。圖6為整體軟件結(jié)構(gòu)圖。圖中Rn表示讀操作時信號量的發(fā)送順序,Wn表示寫操作時信號量的發(fā)送順序。
PPI參數(shù)結(jié)構(gòu)體:
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;
這個結(jié)構(gòu)體是讀寫操作公用的一個結(jié)構(gòu)體,用來存放讀寫的參數(shù)等信息。m_OprFlag是用來指示當前是讀操作還是寫操作;
m_RecCrFlag是應(yīng)來控制Cr幀的接收流程的;
m_RdAiOrWrRiNums用來確定RdAi或者WrRi幀的字節(jié)數(shù)的;m_MemoZoneType、m_DataType和m_ByteOffset是用來存放讀寫參數(shù);m_PPIValue存放讀寫的數(shù)據(jù)。
圖6 整體軟件結(jié)構(gòu)圖
4.1起始任務(wù)TaskStart()
起始任務(wù)主要是完成硬件、軟件的初始化和任務(wù)的創(chuàng)建以及自身任務(wù)的刪除[10]。硬件初始化主要包括串口的初始化和CAN控制器的初始化;軟件的初始化包括讀RI幀常量的初始化、寫RI幀常量的初始化和信號量的初始化,由于RI幀的是由一些常量數(shù)據(jù)和變量數(shù)據(jù)組成的,因此,可以在讀寫之前將RI幀的常量先包裝好,以后在進行讀寫之前,只需要包裝RI幀的變量即可,這樣提高讀寫速度。
在完成初始化和任務(wù)創(chuàng)建之后,起始任務(wù)的任務(wù)就完成了,因此,在任務(wù)的最后將自身刪除,從而釋放起始任務(wù)所占用的系統(tǒng)資源。
4.2讀PLC任務(wù)TaskCAN_CmdRdPLC()
該任務(wù)是由信號量SemReqRd觸發(fā)的,這個信號量是在CAN中斷程序中被發(fā)送的,讀PPI任務(wù)在任務(wù)的開始等待這個信號量,即當接收到數(shù)據(jù)產(chǎn)生中斷,并且判斷是讀請求幀時,便發(fā)送這個信號量,從而讓讀PLC任務(wù)繼續(xù)得以執(zhí)行,當讀PLC任務(wù)得到這個信號量后,會根據(jù)讀請求幀中的參數(shù)更新PPI參數(shù)結(jié)構(gòu)體g_PPI_CtlStr,然后發(fā)出信號量SemRdRi觸發(fā)其他任務(wù)完成PLC讀時序,最后在任務(wù)的末尾等待讀取結(jié)果的信號量SemTakeRiSdResult,從而將數(shù)據(jù)發(fā)給CAN節(jié)點。
4.3發(fā)送RdRi幀任務(wù)TaskRdRiSend()
發(fā)送RdRi幀任務(wù)是完成讀PLC時RI幀的發(fā)送,在此任務(wù)的開始等待允許發(fā)送RdRi幀的信號量SemRdRi,當獲取到信號量后,便進行RdRi幀變量的包裝,RdRi幀常量的包裝是在起始任務(wù)初始化中進行的,包裝完畢RdRi幀后,便進行RdRi幀的發(fā)送,發(fā)送是調(diào)用SendCommonData(),并配合串口發(fā)送中斷完成數(shù)據(jù)的發(fā)送。
4.4發(fā)送CI幀任務(wù)TaskCiSend()
這是一個公共任務(wù),即讀寫PPI公用的一個任務(wù),它完成讀寫PLC時CI幀的發(fā)送。由于CI幀全都是常數(shù),因此,在任務(wù)的超循環(huán)之前,定義并初始化CI幀。在超循環(huán)中,首先等待允許發(fā)送CI幀的信號量SemCiSd,當獲取到該信號量后,表示串口中斷已經(jīng)接收到CR幀,但這時不可以立刻發(fā)送CI幀,這是因為PLC在發(fā)送完CR幀后,并不能立即接收CI幀。因此,為了與PLC同步,這個地方必須延時3~5個時鐘節(jié)拍,使自身掛起,等到3~5個時鐘過后,該任務(wù)重新得以運行再進行CI幀的發(fā)送,同樣,CI幀的發(fā)送也是調(diào)用SendCommonData(),并配合串口發(fā)送中斷完成的。
4.5處理RdAi幀任務(wù)TaskRdAiPro()
這個任務(wù)主要是完成RdAi幀的校驗工作和提取讀取的數(shù)據(jù)。程序首先等待允許處理RdAi幀的信號量SemRdAiPro,獲取到該信號量后,證明RdAi已接收完畢,接著根據(jù)RdAi的長度求得RdAi幀的某段數(shù)據(jù)的檢驗和,并比較檢驗和,如果校驗和正確,則提取讀取的數(shù)據(jù)并發(fā)送允許取走讀取結(jié)果的信號量SemTakeRdResult。
4.6寫PLC任務(wù)TaskCAN_CmdWrPPI()
該任務(wù)是由信號量SemReqWr觸發(fā)的,這個信號量是在CAN中斷程序中被發(fā)送的,寫PPI任務(wù)在任務(wù)的開始等待這個信號量,即當中斷中接收到數(shù)據(jù),并且判斷是寫請求幀時,發(fā)送這個信號量。當寫PLC任務(wù)得到該信號量后,會發(fā)送請求寫數(shù)據(jù)幀給CAN節(jié)點,請求要寫的數(shù)據(jù),接著等到信號量SemWrData,當?shù)玫皆撔盘柫亢?,根?jù)寫請求幀中的參數(shù)和寫數(shù)據(jù)更新PPI參數(shù)結(jié)構(gòu)體g_PPI_CtlStr,然后發(fā)出信號量SemWrRiSd觸發(fā)其他任務(wù)完成PLC寫時序,最后等待允許發(fā)送寫成功信號量SemWrSuc,獲取到該信號量后,將寫成功幀發(fā)送給CAN節(jié)點。
4.7發(fā)送WrRi幀任務(wù)TaskWrRiSend()
它完成寫PLC時RI幀的發(fā)送,在此任務(wù)的開始等待允許發(fā)送WrRi幀的信號量SemWrRiSd,當獲取到信號量后,便進行WrRi幀變量的包裝,WrRi幀常量的包裝是在起始任務(wù)初始化中進行的,包裝完畢WrRi幀后,便進行WrRi幀的發(fā)送,發(fā)送仍然是調(diào)用SendCommonData(),并配合串口發(fā)送中斷完成數(shù)據(jù)的發(fā)送。
4.8處理WrAi幀任務(wù)TaskWrAiPro()
這個任務(wù)主要是完成WrAi幀的校驗工作。程序首先等待允許處理WrAi幀的信號量SemWrAiPro,獲取到該信號量后,證明WrAi已接收完畢,接著計算WrAi幀的檢驗和,并比較檢驗和,如果校驗和正確,則發(fā)送允許發(fā)送寫成功信號量。
4.9CAN中斷服務(wù)程序CAN_Exception()
它負責(zé)數(shù)據(jù)的接收和CAN應(yīng)用層協(xié)議的順序控制。它首先判斷當前發(fā)生的中斷是否是接收中斷,從而保證接收中斷的可靠性。如果是接收中斷,那么將數(shù)據(jù)和ID存入緩沖區(qū)。接著對ID進行判斷,如果ID正確,再通過判斷標志位g_WrPLCFlag,了解當前接收到的數(shù)據(jù)是不是寫數(shù)據(jù)幀。如果是,則發(fā)送接收到寫數(shù)據(jù)幀的信號量SemWrData,如果當前接收到的不是寫數(shù)據(jù)幀,接著判斷接收到是不是讀參數(shù)幀。如果是,則發(fā)送信號量SemRdPara,如果不是讀參數(shù)幀,那么接收到的無疑是寫參數(shù)幀,發(fā)送信號量SemWrPara,并將g_WrPLCFlag置位,指示下次接收的數(shù)據(jù)是寫數(shù)據(jù)幀。程序最后釋放CAN控制器的接收緩沖區(qū)。
5系統(tǒng)測試結(jié)果與分析
系統(tǒng)測試是指對CAN-PPI網(wǎng)關(guān)控制器進行測試,測試的目標主要有:CAN-PPI網(wǎng)關(guān)控制器能否通過CAN總線接收讀操作命令,并通過PPI協(xié)議實現(xiàn)對S7-200系列的PLC的讀操作,繼而將讀取的數(shù)據(jù)通過CAN總線反饋回去;CAN-PPI網(wǎng)關(guān)控制器能否通過CAN總線接收寫操作命令,并通過PPI協(xié)議實現(xiàn)對S7-200系列的PLC的進行寫操作;CAN節(jié)點通過CAN-PPI網(wǎng)關(guān)控制器讀取一次數(shù)據(jù)的時間;CAN節(jié)點通過CAN-PPI網(wǎng)關(guān)控制器寫入一次數(shù)據(jù)的時間;CAN-PPI網(wǎng)關(guān)控制器直接讀取一次數(shù)據(jù)的時間;CAN-PPI網(wǎng)關(guān)控制器直接讀取一次數(shù)據(jù)的時間。
系統(tǒng)測試結(jié)果如表1所示。從表中的數(shù)據(jù)來看,讀寫的時間將近100ms,時間非常長。CAN-PPI中的協(xié)議轉(zhuǎn)換程序是基于嵌入式實時操作系統(tǒng)的,協(xié)議轉(zhuǎn)換的過程是通過并行的任務(wù)來實現(xiàn)的,另外,數(shù)據(jù)的發(fā)送也是通過中斷的方式去實現(xiàn)的,因此,從程序的結(jié)構(gòu)上來說,只要PLC立即響應(yīng)產(chǎn)生事件,事件就會立即得到響應(yīng)。但是,從測試的結(jié)果來看,時間是相當長的,這可以歸結(jié)為以下兩個原因:
PLC在接收到RdRi或WrRi幀后,并沒有立即發(fā)出CR幀,而是經(jīng)過一段時間后才發(fā)送的;PLC在接收到CI幀后,并沒有立即發(fā)出RdAi幀或WrAi幀,而是經(jīng)過一段時間后才發(fā)送的。
表1 系統(tǒng)測試一覽表
6結(jié)語
隨著通信技術(shù)的發(fā)展,針對當前西門子S7-200系列PLC無法直接與異型網(wǎng)絡(luò)上的智能設(shè)備相互通信的問題,提出了使用CAN-PPI網(wǎng)關(guān)控制器進行協(xié)議轉(zhuǎn)換,從而,實現(xiàn)S7-200系列PLC與CAN網(wǎng)絡(luò)上節(jié)點的透明傳輸。
參 考 文 獻
[1] 鄔寬明.CAN總線原理和應(yīng)用系統(tǒng)設(shè)計[M].北京:北京航空航天大學(xué)出版社,2012.
WU Kuangming. Theory of CAN-Bus and system design.[M]. Beijing: Beihang University Press,2012.
[2] 陽憲惠.現(xiàn)場總線及其應(yīng)用[M].北京:清華大學(xué)出版社,2015.
YANG Xianhui. Theory and application of fieldbus.[M]. Beijing: Tsinghua Press,2015.
[3] 溫照方.SIMATIC S7-200可編程程序控制器教程[M].北京:北京理工大學(xué)出版社,2013.
WEN Zhaofang. Programmable Logic Controller Textbook[M]. Beijing: Beijing Institute of Technology Press,2013.
[4] 俞潔,李旭芳.西門子S7-200系列PLC通訊功能與應(yīng)用[M]. 機械工業(yè)自動化,2012.
YU Jie, LI Xufang. PLC communication function and Application of Siemens S7-200 series[M]. Institute of automation for machinery industry,2012.
[5] 甘永梅,李慶豐,劉小娟.現(xiàn)場總線技術(shù)及其應(yīng)用[M]. 北京:機械工業(yè)出版社,2004.
GAN Yongmei, LI Qingfeng, LIU Xiaojuan. Fieldbus technique and application[M].Institute of Automation for Machinery Industry,2012.
[6] 溫克強.Modbus通訊協(xié)議在DCS與PLC通訊中的應(yīng)用[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規(guī)約的智能儀表與PC機通信技術(shù)實現(xiàn)[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串行通訊協(xié)議在工業(yè)現(xiàn)場的應(yīng)用[J].自動化技術(shù)與應(yīng)用,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規(guī)約的智能儀表與PC機通信技術(shù)實現(xiàn)[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] 吳立新.論智能大廈的集散型樓宇自控系統(tǒng)[J].工業(yè)控制計算機,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