喬勇
摘 要:本文詳細(xì)介紹了Siemens公司的點到點通信處理器模塊CP340如何與C8051F021單片機實現(xiàn)ASCII協(xié)議通信的。文章給出了硬件電路連接,介紹了通信協(xié)議的制定方法,并給出了PLC與單片機的編程介紹。
關(guān)鍵詞:PLC;點到點通信;ASCII協(xié)議;RS-485
0 引言
本文介紹了CP340在SIMATIC S7-300中,采用RS-485的接口協(xié)議與C8051F021單片機的通訊解決方案,本系統(tǒng)以PLC為核心控制單元,通過通訊模塊CP340與單片機系統(tǒng)實現(xiàn)485通信,實現(xiàn)主控單元與單片機系統(tǒng)之間的指令、數(shù)據(jù)通訊;實現(xiàn)數(shù)據(jù)接收功能,最后由PLC負(fù)責(zé)將這些數(shù)據(jù)進行運算處理。
CP340通訊處理器模塊可以在西門子 S7系列中使用,該模塊可以實現(xiàn)ASCII碼、打印機驅(qū)動和3964三種通訊協(xié)議,通過集成在STEP7中參數(shù)化工具進行設(shè)置。并提供了三種通訊接口:RS232、模擬量20mA、RS422/485。
1 通訊接口設(shè)計
CP340-RS422/485可配置RS422全雙工模式和RS485半雙工模式,方案設(shè)計中配置為RS485半雙工模式,CP340模塊提供一15針接頭,在硬件連接上需要引出第4腳R(A)/T(A)和第11腳R(B)/T(B)兩個數(shù)據(jù)線引腳;而C8051F021單片機只需配置一個全雙工的串行口線,為了增強抗干攏能力,設(shè)計上選用了內(nèi)部集成隔離電路的MAX1480芯片,將其轉(zhuǎn)化成RS485信號。
2 通訊協(xié)議的制定
CP340可以傳輸十六位進制的00-FF之間的任何數(shù)據(jù),用戶可以自己制定相關(guān)的傳輸協(xié)議,CP340的ASCII協(xié)議只有三種可選的波特率:2400bps、4800bps、9600bps。
制定通信協(xié)議:單片機作為從機,PLC作為主機,從機在建立與主機通信之前,一直處于對通信線路的監(jiān)聽狀態(tài),主機PLC通過CP340通訊模塊向從機發(fā)送通訊指令,從機在接收到指令后對其進行識別,校驗,判斷是否主機呼叫從機,如果地址相符,確認(rèn)呼叫從機。然后,從機停止監(jiān)聽通訊線路,并發(fā)送程序指定的數(shù)據(jù)。通信的指令格式如下:
(1)主機發(fā)送指令格式:從機地址號{參數(shù)號1:參數(shù)值1, 參數(shù)號2:參數(shù)值2, ……}CRC16校驗碼EOF。說明:1)第一個字節(jié)是地址,所以第9位必須置1;其他字節(jié)隨意;2)第一個字節(jié)是從機特定地址。從機地址若被分配為ASCII碼“1”,轉(zhuǎn)換為十六進制是:0x31;3)參數(shù)號不分大小先后,可以發(fā)送單個或者多個參數(shù),參數(shù)之間的分隔符可以是除了數(shù)字、e、E、小數(shù)點和冒號這些關(guān)鍵字之外的所有字符,例如空格、逗號等。所以參數(shù)可以分行。參數(shù)串以大括號“ }”結(jié)尾。所有字符都必須是ASCII字符。4)發(fā)送完參數(shù)串以后,上位機必須計算參數(shù)串的16位CRC校驗碼,并將校驗碼(用4位十六進制字符表示)發(fā)送給下位機,最后是EOF作為一幀數(shù)據(jù)的結(jié)尾。5)發(fā)送完EOF以后,從機計算接收到的參數(shù)串的16位CRC校驗碼,如果和主機發(fā)送的校驗碼吻合,則發(fā)送“1”作為通信有效應(yīng)答,否則發(fā)送“0”作為通信錯誤應(yīng)答。如果主機在發(fā)送數(shù)據(jù)完成后在約定時間(2秒)內(nèi)沒有接收到任何應(yīng)答,也將認(rèn)為通信發(fā)生錯誤。這樣主機可以根據(jù)應(yīng)答判斷通信狀況:“1”-發(fā)送成功;“0”-發(fā)送數(shù)據(jù)錯誤;無應(yīng)答(“\0”)-可能線路發(fā)生故障。6)小于10的參數(shù)號不能在前面加“0”。如參數(shù)號“7”不能用“07”代替;7)參數(shù)號后面緊跟著冒號“:”,緊跟著參數(shù)值,緊跟著分隔符;(為了易于辨認(rèn),參數(shù)后可加注釋)。8)系統(tǒng)將順序搜索字符串,每當(dāng)找到一個冒號“:”,就提取它前面的參數(shù)號和它后面的參數(shù);直到字符串被搜索完畢。所以,如果傳輸多個相同的參數(shù)號,系統(tǒng)將最終接受最后的1個。9)注意:單片機內(nèi)部串口輸入緩沖區(qū)長度被設(shè)置為1024個字節(jié),輸出緩沖區(qū)長度則是1024字節(jié)。所以單次發(fā)送的字符串(包括校驗碼)總長度不能超過1024個字節(jié)!
(2)從機發(fā)送數(shù)據(jù)格式:從機地址號{數(shù)據(jù)}CRC16校驗碼EOF。
3 通信程序設(shè)計
(1)PLC通信程序設(shè)計。PLC(西門子 S7-300)以專用通訊模塊與CP340接口進行數(shù)據(jù)交換,程序設(shè)計中用到功能塊FB3(發(fā)送數(shù)據(jù))和FB2(接收數(shù)據(jù)),F(xiàn)B3將數(shù)據(jù)塊中的數(shù)據(jù)寫入到CP340的發(fā)送緩沖區(qū)中,F(xiàn)B2將CP340接收緩沖區(qū)中的數(shù)據(jù)讀回,存入到接收數(shù)據(jù)塊中。
設(shè)計程序的時候,使用一個延時定時器T0來控制超時的時間,超時的時間必須大于發(fā)送指令開始到正確接收到一幀完整數(shù)據(jù)之間的時間,如果定時器輸出‘1,則表示在規(guī)定的超時時間內(nèi)沒有接收到正確的數(shù)據(jù),如果定時器輸出‘0,則表示沒有出現(xiàn)通訊錯誤,每次發(fā)送指令時啟動定時器T0,如果正確的接收到數(shù)據(jù),復(fù)位定時器T0后,再進行下一指令的發(fā)送,保證定時器T0輸出為‘0。如果沒有接收到正確數(shù)據(jù),定時器輸出置位,此時做相應(yīng)的錯誤處理程序后再準(zhǔn)備指令的重新發(fā)送。
波特率選用9600bps,1個起始位,8個數(shù)據(jù)位,1個停止位,發(fā)送數(shù)據(jù)塊DB1,接收數(shù)據(jù)塊DB10,假設(shè)發(fā)送指令字節(jié)數(shù)4個,接收最大字節(jié)數(shù)為40個,所以超時時間應(yīng)大于:(1/9600)*(1+8+1)*(4+40)*1000=46ms,可設(shè)定超時時間為70ms。
指令數(shù)據(jù)塊:在通訊模塊中,定義指令格式,采用字符數(shù)組形式,內(nèi)存分配如下表所示:
(2)單片機通信程序設(shè)計。單片機C8051F021程序使用C語言編寫, RS485為半雙工模式,一般情況下將RS485芯片使能于接收狀態(tài),接收到指令后,開始校驗,若正確,就將RS485芯片置位于發(fā)送狀態(tài),并將主機所需要的數(shù)據(jù)發(fā)送出去,發(fā)送結(jié)束后,再使其置位于接收狀態(tài)。通信程序采用中斷方式,從機默認(rèn)地址為01。
4 結(jié)束語
在點到點數(shù)據(jù)通訊系統(tǒng)設(shè)計中,采用SIMATIC S7-300和CP340通訊模塊與C8051F021單片機實現(xiàn)了ASCII碼協(xié)議通信,該方案結(jié)構(gòu)簡單,投資少,運行穩(wěn)定,傳輸距離遠(yuǎn),這使得PLC在工業(yè)在線檢測儀表主機的開發(fā)中具有很高的應(yīng)用價值。
參考文獻:
[1]任冠甲.SIMATIC STEP7梯形邏輯參考手冊[K].
[2]S7300-400語句表(STL)編程手冊[K].
[3]徐愛鈞,彭秀華.單片機高級語言C51應(yīng)用程序設(shè)計[M].電子工業(yè)出版社,2001.