摘 要: 詳細(xì)說明了西門子S7-200 PLC在自由口模式下與上位機(jī)通信的實現(xiàn),,主要包括該系統(tǒng)的硬件構(gòu)成,,自由口通信協(xié)議的標(biāo)準(zhǔn),以及上位機(jī)軟件流程和主控PLC軟件設(shè)計,。通過自由口通信可實現(xiàn)對ITER導(dǎo)體穿纜測力測長系統(tǒng)的監(jiān)控,, 將PLC數(shù)據(jù)傳送至上位機(jī),實現(xiàn)對數(shù)據(jù)的處理以及現(xiàn)場數(shù)據(jù)的實時顯示和遠(yuǎn)程控制等功能,。
關(guān)鍵詞: PLC,;通信協(xié)議;自由口模式,;ITER導(dǎo)體穿纜測力測長系統(tǒng),;上位機(jī)
西門子公司的SIMATIC S7-200系列PLC是廣泛適用于中小型設(shè)備控制的工業(yè)可編程控制器,以其可靠性高,、豐富的指令和內(nèi)置功能,、通信能力強(qiáng)、性價比較高等特點,,在工業(yè)控制領(lǐng)域中得到越來越廣泛的應(yīng)用[1],。在本文的控制系統(tǒng)中,PLC作為下位機(jī)完成現(xiàn)場各種信號和數(shù)據(jù)的采集,、運算和控制[2-4],。工控PC機(jī)作為上位機(jī)可提供人機(jī)交互界面,實現(xiàn)數(shù)據(jù)的處理以及現(xiàn)場數(shù)據(jù)的實時顯示等監(jiān)視和遠(yuǎn)程控制等功能,。S7-200系列的PLC可以在四種通信模式下工作:PPI模式,、MPI模式、PROFIBUS-DP模式和自由口通信模式,。其中,,PPI和MPI是西門子專門開發(fā)的通信協(xié)議。PPI協(xié)議用于點對點接口,,是一個主/從協(xié)議,。MPI協(xié)議適用于多點接口,可以是主/主協(xié)議或主/從協(xié)議,。PROFIBUS-DP是西門子支持的現(xiàn)場總線網(wǎng)絡(luò)[5],。而大多數(shù)用戶則是選用對用戶完全開放的自由口通信模式。在自由口通信模式下,,通信協(xié)議是由用戶定義的,。用戶可以用梯形圖程序調(diào)用接收中斷,、發(fā)送中斷、發(fā)送指令(XMT),、接收指令(RCV)來控制通信操作,。本設(shè)計采用自由口方式,重點介紹工控PC機(jī)與主控PLC的通信原理與實現(xiàn),。
1 硬件組成
ITER導(dǎo)體穿纜測力測長控制系統(tǒng)的框圖如圖1所示,。將測力傳感器和測長編碼器通過信號線與PLC相連,這樣穿纜過程中的拉力數(shù)據(jù)和行程數(shù)據(jù)就能夠?qū)崟r寫入PLC的寄存器中,。PLC通過通信電纜與PC機(jī)的串行通信口相連,,在PC機(jī)中設(shè)置VB的MSCOMM控件來實現(xiàn)串口通信,這樣PC機(jī)就能讀取PLC寄存器中的拉力和行程數(shù)據(jù),,對穿纜過程進(jìn)行實時監(jiān)控,。
2 工控PC機(jī)與主控PLC的自由口通信協(xié)議
工控PC機(jī)標(biāo)準(zhǔn)的串口為RS232C,S7-200系列提供的串口為RS485,,利用西門子公司提供的PC/PPI電纜,,可以方便地實現(xiàn)S7-200系列PLC與PC之間硬件連接[1]。
上位機(jī)向PLC發(fā)送指令(即指令幀),,指令幀格式如圖2所示,,由起始字符、指令類型,、目標(biāo)PLC站地址,、目標(biāo)寄存器地址、讀/寫字節(jié)數(shù),、待寫入的數(shù)據(jù)(當(dāng)從PLC讀數(shù)據(jù)時,,具體數(shù)據(jù)部分為空),、校驗碼和結(jié)束字符組成,。
例如寫VB100開始的兩個字節(jié)的指令幀如下:83H,06H,,08H,,00H,00H,,64H,,30H,32H,,31H,,32H,33H,,34H,,35H,,36H,115H,。下面按順序說明每段字節(jié)的含義:
83H為字符"S"的ASCII碼,,表示指令的開始,在本設(shè)計中是固定的,。
06H表示指令的類型,,為寫操作。在本文中定義05H代表讀操作,,06H代表寫操作,。
08H,00H表示要寫PLC中V存儲區(qū)的內(nèi)容,。
00H,,64H表示要從VB100開始寫。
30H,,32H表示要寫兩個字節(jié),。
31H,32H,,33H,,34H表示VB100寫入12H,VB101寫入34H,。
35H,,36H是校驗和。
115H為字符"s"的ASCII碼,,是結(jié)束字符,,表示指令的結(jié)束,在本設(shè)計中是固定的,。
一條指令除包含數(shù)據(jù)外,,還包含必要的控制字(如起始字符、結(jié)束字符,、指令類型等),。如果指令中的數(shù)據(jù)直接以其原本的形式傳輸,則不可避免地會與指令中的控制字發(fā)生混淆,。為了避免這種情況的發(fā)生,,可以用文本來傳送二進(jìn)制數(shù)據(jù)。通過16進(jìn)制ASCII碼的格式來描述數(shù)據(jù),,每個二進(jìn)制的字節(jié)都可以表示成一對ASCII編碼,,這對編碼表示這個字節(jié)的兩個16進(jìn)制字符。這種格式可以表示任何的數(shù)值,僅僅使用ASCII代碼的30H~39H(表示0~9)和41H~46H(表示A~F),。ASCII碼的其余部分可以用作控制字,。這樣就避免PLC因接收到數(shù)據(jù)中錯誤的標(biāo)志位而停止接收的錯誤。
在PLC接到上位機(jī)指令后,,會向上位機(jī)發(fā)送一個反饋消息,,即反饋幀,反饋幀格式如圖3所示,。其組成與指令幀基本相同,,但它是由PLC發(fā)出的,所以具體數(shù)據(jù)段不同,,在向PLC寫數(shù)據(jù)時,,反饋幀的具體數(shù)據(jù)部分為空,而在從PLC讀數(shù)據(jù)時,,具體數(shù)據(jù)部分不能為空,。
例如,PLC接收到寫VB100開始兩個字節(jié)后的發(fā)送反饋幀如下:83H,,02H,,08H,00H,,00H,,64H,30H,,32H,,35H,36H,,115H,。下面按順序說明每段字節(jié)的含義:
83H為字符"S"的ASCII碼,與指令幀相同,。
02H為狀態(tài)信息,,表示接收到上位機(jī)指令后PLC的執(zhí)行狀態(tài)。在本文中02H表示寫入正確,,相應(yīng)地規(guī)定01H表示讀取正確,,03H表示BCC校驗碼錯誤,04H表示指令不合法,。
08H,00H表示要寫入PLC中V存儲區(qū)的內(nèi)容,,與指令幀相同,。
00H,64H表示要從VB100開始寫,,與指令幀相同,。
30H,,32H表示要寫兩個字節(jié),與指令幀相同,。需注意的是,,此時具體數(shù)據(jù)段為空。
35H,,36H是校驗和,,因無數(shù)據(jù)段,與指令幀可能不同,。
115H為字符"s"的ASCII碼,,表示此幀結(jié)束,與指令幀相同,。
3 工控PC機(jī)軟件設(shè)計
工控PC機(jī)端通信程序流程圖如圖4所示,。發(fā)送指令幀后,注意查詢反饋幀,,如一定時間內(nèi)沒有接收到,,應(yīng)再次發(fā)送,兩次無響應(yīng),,則要提示通信故障或PLC不存在,。
在工控PC機(jī)中可采用VB來實現(xiàn)上位機(jī)監(jiān)控程序,通過MSCOMM控件就可控制串口通信[6],,主要參數(shù)設(shè)置代碼如下:
MSComm1.Settings="9600,,N,8,,1"
//串口通信參數(shù)設(shè)置
MSComm1.CommPort=1
MSComm1.PortOpen=True
MSComm1.InputLen=0
4 主控PLC軟件設(shè)計
CPU224XP自由口通信模式的初始化是通過對特殊存儲字節(jié)SMB30(PORT0)寫入通信控制字來設(shè)置通信的波特率,、奇偶校驗、停止位和數(shù)據(jù)位數(shù)[7],。SMB30中的內(nèi)容如下:
PP:奇偶選擇,。00為無奇偶校驗;01為偶校驗,;10為奇校驗,;11為保留。
D:每個字符的數(shù)據(jù)位,。0為每個字符8位,;1為每個字符7位。
BBB:自由端口波特率,。本設(shè)計為010,,表示波特率為9 600 b/s。
MM:協(xié)議選擇。00為點到點接口協(xié)議的PPI從站模式,;01為自由端口協(xié)議,;10為PPI主站模式;11為保留,。缺省設(shè)置為00,,即PPI從站模式。
本文中傳輸速率固定為9 600 b/s,,數(shù)據(jù)格式由1位起始位,、8位數(shù)據(jù)位、無校驗位,、1位停止位組成,。
配置自由口通信模式后,就可以進(jìn)行數(shù)據(jù)的收發(fā)了,。PLC通信程序框圖如圖5所示,。接收數(shù)據(jù)指令RCV的命令格式為RCV TABLE,Port0,,RCV指令可以接收一個或多個字符,,一次最多接收255個字符。發(fā)送數(shù)據(jù)指令XMT的命令格式為XMT TABLE,,Port0,,激活發(fā)送緩沖區(qū)TABLE中的數(shù)據(jù)。數(shù)據(jù)緩沖區(qū)的第一個數(shù)據(jù)指明了要發(fā)送的字節(jié)數(shù),,最多有255個字符的緩沖區(qū),。
通信程序的設(shè)計需遵循一定的規(guī)則,例如,,中斷通信處理程序要短小精悍,,要避免XMT與RCV指令在一個端口同時執(zhí)行[8]。本設(shè)計采用主從方式通信,,PC設(shè)為主機(jī),,PLC設(shè)置為從機(jī)。只有PLC接收到指令幀后,,才可能根據(jù)接收數(shù)據(jù)情況發(fā)送反饋幀,。為簡化程序設(shè)計,PC機(jī)只發(fā)出讀指令和寫指令兩種指令幀,。若為讀指令,,PLC準(zhǔn)備好發(fā)送數(shù)據(jù)后執(zhí)行XMT指令;若為寫指令,,PLC先把數(shù)據(jù)寫入指定存儲區(qū),,準(zhǔn)備好應(yīng)答數(shù)據(jù)后同樣執(zhí)行XMT命令,;若接收到錯誤幀(如校驗錯誤及不能識別的命令),,PLC準(zhǔn)備相應(yīng)標(biāo)志數(shù)據(jù)執(zhí)行XMT指令,。
主要代碼如下:
LD SM0.0
MOVB 9,SMB30//設(shè)置端口0為:9 600,,N,,8,1
LD SM0.0//RCV指令初始化
MOVB 16#EC,,SMB87
//允許接收信息,,使用SMB88,SMB89,。
MOVB 83,,SMB88//設(shè)置起始字符為"S"
MOVB 115,SMB89//設(shè)置結(jié)束字符為"s"
MOVB +1000,,SMW92//接收信息時間不能超過1 ms
MOVB 30,,SMB94//接收的最大字符數(shù),這里設(shè)置為30
R SMB87.2,,1//復(fù)位SMB87.2,,使其為0,忽略SMW92
LD SM0.0
ATCH RCVOVER,,23
//將0口接收完成中斷事件連接到RCVOVER上
LD SM0.0
ATCH XMTOVER,,9、
//將0口發(fā)送完成中斷事件連接到XMTOVER上
LD SM0.0
ENI//允許中斷
S7-200自由口通信方式使用戶可以自己定義PLC指令通信協(xié)議,,與任何公開通信協(xié)議(如RS-422或RS-232C)接口設(shè)備進(jìn)行通信,,使通信范圍大大增加,控制系統(tǒng)配制更加靈活,。本通信程序用于ITER導(dǎo)體穿纜測力測長監(jiān)控系統(tǒng),,PLC完成數(shù)據(jù)采集及現(xiàn)場控制,工控PC機(jī)實時顯示導(dǎo)體穿纜的速度及行程,,同時以梯形圖和通信控件顯示動作過程,,便于監(jiān)控及故障診斷,得到用戶好評,。本文設(shè)計的通信協(xié)議也可用于其他控制系統(tǒng)的監(jiān)控,。
參考文獻(xiàn)
[1] SIEMENS公司.SIMATIC S7-200可編程控制器系統(tǒng)手冊[M]. http://www2.ad.siemens.com.cn/download/Upload/AS/manual/1109582. pdf, 2008-08-01.
[2] 吉順平.西門子PLC與工業(yè)網(wǎng)絡(luò)技術(shù)[M].北京:機(jī)械工業(yè)出版社,,2008.
[3] 劉杰,,陽林,陳超麗.三菱FX2N系列PLC與PC通訊的簡易實現(xiàn)[J].制造業(yè)自動化,,2006(1):65-67.
[4] 陳明意.基于VC6.0的PC與FX2NPLC通信的實現(xiàn)[J].武漢工業(yè)學(xué)院學(xué)報,,2005,,24(4):14-16.
[5] 丁莉君,李宏燕.自由口模下S7-200 PLC與上位機(jī)的通信[J].機(jī)床電器,,2009(1):26-28.
[6] 湯光華,,吳青.自由口模式下S7-200 PLC與上位機(jī)的通信[J].微計算機(jī)信息,2008(24):62-64.
[7] 劉紅兵.S7-200自由口通訊的實現(xiàn)及應(yīng)用[J].PLC&FA,,2009(2):58-62.
[8] 李紹民,,潘登.S7-200 PLC與上位機(jī)的通信[J].大連民族學(xué)院學(xué)報,2009,,11(3):209-211.