陳達(dá)軍 (1981—)
男,江蘇建湖人,本科,熱控專工,畢業(yè)于南京航空航天大學(xué)自動(dòng)化學(xué)院,現(xiàn)就職于寶應(yīng)協(xié)鑫生物質(zhì)環(huán)保熱電有限公司生產(chǎn)管理部。
摘 要:以入廠煤量信號(hào)送入SmartPro DCS系統(tǒng)為例,系統(tǒng)地講述了S7-200 PLC在SmartPro DCS控制系統(tǒng)中的具體應(yīng)用,以及S7-200 PLC通過自由口和上位機(jī)通信的實(shí)現(xiàn)方法等。
關(guān)鍵詞:SmartPro;DCS;PLC;自由口;通信;DELPHI
Abstract:By introducing how to send the input coal quantity into smartPro DCS system, this paper give a sysmatic representation of the concrete application of S7-200PLC in SmartPro DCS control system, and introduces a method of the freeport communication between S7-200 PLC and PC.
Key words: SmartPro;DCS;PLC;freeport;communication;DELPHI
1 引言
寶應(yīng)協(xié)鑫生物質(zhì)環(huán)保熱電有限公司碼頭兩臺(tái)料斗秤原采用就地方式控制,兩臺(tái)秤重儀表和兩臺(tái)日本松下PLC分別通過RS-422接口與碼頭控制計(jì)算機(jī)通信,現(xiàn)因集團(tuán)實(shí)施ERP項(xiàng)目,需要將兩臺(tái)料斗秤的秤重?cái)?shù)據(jù)實(shí)時(shí)在線送入到全廠DCS系統(tǒng)中。因當(dāng)初儀表選型問題兩臺(tái)料斗秤秤重儀表均無稱重脈沖輸出信號(hào),且距離DCS控制室較遠(yuǎn),約有1000米的距離,所以采用RS-485的方式將兩臺(tái)料斗秤的入廠煤量等信號(hào)直接從碼頭控制計(jì)算機(jī)送入到安裝于DCS現(xiàn)場(chǎng)控制站內(nèi)的S7-200 PLC中,而S7-200 PLC同時(shí)作為SmartPro DCS控制系統(tǒng)的DP從站,再將入廠煤量信號(hào)送入到DCS系統(tǒng)中。方案示意圖1所示。
2 系統(tǒng)概述
SmartPro DCS系統(tǒng)是北京和利時(shí)公司設(shè)計(jì)、開發(fā)的分布式控制系統(tǒng),其現(xiàn)場(chǎng)控制站內(nèi)部基于Profibus-DP現(xiàn)場(chǎng)總線通信,可以通過串口MPI、以太網(wǎng)以及DP總線等方式將一種PLC接入到SmartPro DCS系統(tǒng)中。該方案中采用DP協(xié)議與DCS系統(tǒng)中控制器建立通信連接,簡(jiǎn)單方便、穩(wěn)定高效。
SIMATIC S7-200系列PLC是德國西門子公司生產(chǎn)的具有高性能價(jià)格比的微型可編程控制器,由于它具有高可靠性、指令豐富、內(nèi)置功能豐富、強(qiáng)勁的通訊能力等優(yōu)點(diǎn)而得到廣泛的應(yīng)用。S7-200支持多種通訊協(xié)議,如點(diǎn)到點(diǎn)接口協(xié)議(PPI)、多點(diǎn)接口協(xié)議(MPI)、Profibus DP協(xié)議以及自由口協(xié)議等。PPI等通訊協(xié)議主要用于西門子公司系列產(chǎn)品之間的通訊以及對(duì)PLC編程,而在自由口模式下,可由用戶控制串行通訊接口,實(shí)現(xiàn)用戶自定義的通訊協(xié)議。用戶可以調(diào)用接收中斷、發(fā)送中斷、發(fā)送指令(XMT)、接受指令(RCV)來控制通信操作。可以說,在PLC與上位機(jī)PC的通訊方式上,自由口通訊是一種靈活而廉價(jià)的方式。
3 通訊方案的設(shè)計(jì)
在該工程中,選用了CPU224XP型PLC,該可編程控制器具有兩個(gè)RS-485通信接口,其中自由口0用來與上位機(jī)碼頭控制計(jì)算機(jī)之間的通信,自由口1留作備用;同時(shí)該P(yáng)LC通過EM277 PROFIBUS-DP擴(kuò)展模塊作為SmartPro DCS系統(tǒng)的DP從站,將入廠煤量數(shù)據(jù)信號(hào)送入到DCS系統(tǒng)中。該工程中通訊方案的設(shè)計(jì)包括了S7-200 PLC與上位機(jī)之間的通信和S7-200 PLC與SmartPro DCS系統(tǒng)的通信兩部分內(nèi)容。
3.1 S7-200 PLC與上位機(jī)之間的通信
通過PLC的自由口通信,必須自定義兩者之間的通訊協(xié)議。在上位機(jī)與PLC的通訊中,PLC作為從站,只有接收到計(jì)算機(jī)的命令幀后才會(huì)返回響應(yīng)幀,不會(huì)主動(dòng)發(fā)送數(shù)據(jù)。
上位機(jī)發(fā)送給PLC的指令格式為:
S |
T |
P |
V |
M |
D |
B |
E |
其中各段指令含義如下:
S:起始字符,本工程以“#”字符的ASCII碼為起始字符,占1個(gè)字節(jié);
T:指令類型,01H表示讀取指令,02H表示寫指令,占1個(gè)字節(jié);
P:目標(biāo)PLC站地址,采用十六進(jìn)制ASCII碼表示,本工程中目標(biāo)PLC站地址為02H,占2個(gè)字節(jié);
V:目標(biāo)寄存器地址,采用十六進(jìn)制ASCII碼表示,占8個(gè)字節(jié);
M:讀/寫字節(jié)數(shù),采用十六進(jìn)制ASCII碼表示,占2個(gè)字節(jié);
D:要寫入的數(shù)據(jù),采用十六進(jìn)制ASCII碼表示,占16個(gè)字節(jié);
B:校驗(yàn)碼,采用十六進(jìn)制ASCII碼表示,占2個(gè)字節(jié);
E:結(jié)束字符,本工程以“&”字符的ASCII碼為結(jié)束字符,占1個(gè)字節(jié)。
PLC反饋給PC機(jī)的數(shù)據(jù)格式為:
S |
T |
D |
B |
E |
其中各段指令含義如下:
S:起始字符,本工程以“#”字符的ASCII碼為起始字符,占1個(gè)字節(jié);
T:狀態(tài)信息,采用十六進(jìn)制ASCII碼表示,01H 讀取正確,02H 寫入正確,03H BCC碼校驗(yàn)錯(cuò)誤,04H 指令不合法,占1個(gè)字節(jié);
D:返回的數(shù)據(jù)區(qū),采用十六進(jìn)制ASCII碼表示,占16個(gè)字節(jié);
B:校驗(yàn)碼,采用十六進(jìn)制ASCII碼表示,占2個(gè)字節(jié);
E:結(jié)束字符,本工程以“&”字符的ASCII碼為結(jié)束字符。
這里采用了BCC校驗(yàn)碼的方法來檢查接收到的指令是否正確,以防止錯(cuò)誤指令的執(zhí)行。同時(shí),指令中目標(biāo)PLC站地址、目標(biāo)寄存器地址、要寫入的數(shù)據(jù)等部分均采用十六進(jìn)制ASCII碼表示,以文本的方式來傳遞二進(jìn)制數(shù),以避免當(dāng)傳遞如24H數(shù)據(jù)時(shí)使PLC誤認(rèn)為是結(jié)束字符而停止接收。
3.2 S7-200 PLC與SmartPro DCS系統(tǒng)的通信
S7-200 PLC與SmartPro DCS系統(tǒng)兩者之間的通信任務(wù)主要是確定通訊區(qū),根據(jù)Profibus-DP協(xié)議的規(guī)定,通訊區(qū)的大小不能隨意指定,只能在幾種預(yù)定值中選擇一種或幾種組合。該工程中約定如下:通信區(qū)的起始地址為PLC寄存器地址的VB200,大小為16個(gè)字節(jié),分別為4Word的輸入?yún)^(qū)和4Word的輸出區(qū),通信區(qū)具體配置見表1。
表1:
PLC寄 |
輸入/輸出 |
具體含義 |
VB200 |
DP_RECV1 |
其中V201.0,作為從DCS接收的是否設(shè)置入廠煤量初始值的開關(guān)量信號(hào) |
VB201 |
DP_RECV2 | |
VB202 |
DP_RECV3 |
備用 |
VB203 |
DP_RECV4 | |
VB204 |
DP_RECV5 |
合成為VW204 |
VB206 |
DP_RECV7 |
合成為VW206 |
VB208 |
DP_REDV1 |
合成為VW208 |
VB210 |
DP_REDV3 |
合成為VW210 |
VB212 |
DP_REDV5 |
備用 |
VB214 |
DP_REDV7 |
備用 |
4 具體實(shí)現(xiàn)
根據(jù)上述通訊方案,實(shí)現(xiàn)將入廠煤量信號(hào)傳送到DCS系統(tǒng)需要下述三步實(shí)現(xiàn)。
4.1 SmartPro DCS側(cè)組態(tài)
首先將EM277 PROFIBUS-DP模塊最新的GSD文件siem089d.gsd拷貝到DCS側(cè)組態(tài)軟件ConMaker的相應(yīng)目錄下C:\Target\Hollysys\PCBaseIO\,然后重新啟動(dòng)ConMaker軟件,這樣ConMaker軟件才能識(shí)別新加入的GSD文件。
在MACS配置處點(diǎn)擊“Append Dp-slave”菜單添加EM277 PROFIBUS-DP模塊,設(shè)置對(duì)應(yīng)的DP從站號(hào)。然后根據(jù)上述通訊方案設(shè)置通訊區(qū)的大小和起始地址。
最后是算法組態(tài),注意從PLC得到的入廠煤量高16位RCMLJ_HIGH和入廠煤量低16位RCMLJ_ LOW與DCS中最終入廠煤量累計(jì)值RCMLJ有如下公式的換算關(guān)系:RCMLJ := (RCMLJ_HIGH * 65536 + RCMLJ_LOW) /1000。入廠煤量的初始值送入PLC與此類似,這里不再闡述。
組態(tài)程序編譯無誤后,下裝到DCS下層控制器即可。
4.2 S7-200 PLC側(cè)組態(tài)
S7-200 PLC作為數(shù)據(jù)中轉(zhuǎn)站,不但需要完成和上位機(jī)通信的任務(wù),接收上位機(jī)發(fā)送來的入廠煤量?jī)糁氐刃盘?hào),并且要將入廠煤量數(shù)據(jù)累計(jì)值傳送到與SmartPro DCS系統(tǒng)約定的通訊區(qū)中。
首先直接將DP總線連接到EM277的DP口,通過硬撥碼開關(guān)設(shè)定EM277 DP從站號(hào),本工程的從站號(hào)為15。注意:每次重新設(shè)置EM277 DP從站號(hào)需要重新啟動(dòng)運(yùn)行PLC。然后根據(jù)所需通訊的變量數(shù)目,雙方協(xié)商設(shè)定通訊區(qū)的大小,來確定通訊區(qū)的起始地址和長(zhǎng)度,對(duì)于CPU224XP的最大起始地址為10239,本例中起始地址為200,該起始地址和通訊區(qū)長(zhǎng)度大小由上述DCS側(cè)組態(tài)時(shí)設(shè)置,PLC側(cè)只需要將要發(fā)送給DCS的數(shù)據(jù)賦值給指定區(qū)域即可。注意該起始地址是指變量存儲(chǔ)區(qū)(V存儲(chǔ)區(qū))的地址。
PLC組態(tài)程序分為主程序、接收中斷程序和發(fā)送中斷程序等幾部分。主程序完成初始化通信口、開中斷、邏輯判斷、發(fā)送數(shù)據(jù)等功能, 接收中斷程序和發(fā)送中斷程序分別完成接收和發(fā)送數(shù)據(jù)的功能。接收指令(RCV)啟動(dòng)或終止接收信息功能,必須為接收操作指定開始和結(jié)束條件。發(fā)送指令(XMT)在自由口模式下依靠通訊口發(fā)送數(shù)據(jù)。下面以STL語言給出部分示例代碼。
設(shè)置自由端口0的通訊方式:
LD SM0.0
MOVB 2#1001, SMB30 //設(shè)置端口0為自由口"9600,N,8,1"
MOVB 2#11100100, SMB87
MOVB 16#23, SMB88
MOVB 16#24, SMB89
MOVW +1000, SMW92
MOVB 35, SMB94
R SM87.2, 1
S M0.7, 1
通訊0接收信息完成執(zhí)行RCVcomplete程序:
LD SM0.0
ATCH RCVcomplete:INT1, 23 //端口0接收完成的中斷
通訊0發(fā)送信息完成執(zhí)行XMTcomplete程序:
LD SM0.0
ATCH XMTcomplete:INT2, 9 //端口0發(fā)送完成的中斷
將入廠煤量?jī)糁匦盘?hào)累加,并將上一次煤量?jī)糁匦盘?hào)清零:
LD SM0.0
+D VD284, VD292
MOVD +0, VD284
將入廠煤量累計(jì)值信號(hào)送入DCS系統(tǒng):
LDB= SMB224, 2
MOVD VD292, VD208
條件滿足時(shí)給入廠煤量累計(jì)賦初始值:
LD V201.0
MOVD VD204, VD292
R V201.0, 1
4.3 上位機(jī)軟件設(shè)計(jì)
這里以在Delphi開發(fā)環(huán)境中上位機(jī)向PLC寫入廠煤凈重?cái)?shù)據(jù)為例,說明上位機(jī)軟件的開發(fā)過程。
Var
SendBuf: array[0..32] of Byte;
SendBuf[0] := Byte($23); // 起始標(biāo)志符
SendBuf[1] := Byte($02); // 代表寫操作
// 目標(biāo)PLC站地址(十六進(jìn)制ASCII碼)
SendBuf[2] := Byte($30); // PLC地址的ASCII碼高字節(jié)
SendBuf[3] := Byte($32); // PLC地址的ASCII碼低字節(jié)
// 目標(biāo)寄存器地址(十六進(jìn)制ASCII碼)
// VB284的地址表示為:08 00 01 1CH的相應(yīng)ASCII碼
SendBuf[4] := Byte($30); // 0 的ASCII碼
SendBuf[5] := Byte($38); // 8 的ASCII碼
SendBuf[6] := Byte($30); // 0 的ASCII碼
SendBuf[7] := Byte($30); // 0 的ASCII碼
SendBuf[8] := Byte($30); // 0 的ASCII碼
SendBuf[9] := Byte($31); // 1 的ASCII碼
SendBuf[10] := Byte($31); // 1 的ASCII碼
SendBuf[11] := Byte($43); // C 的ASCII碼
// 讀/寫字節(jié)數(shù)M(十六進(jìn)制ASCII碼)
SendBuf[12] := Byte($30); // 0 的ASCII碼
SendBuf[13] := Byte($38); // 8 的ASCII碼
// 要寫入的數(shù)據(jù)
StrJZ := IntToHex(StrToInt(Edit1.Text), 8);
StrLCopy(@SendBuf[14], @StrJZ[1], Length(StrJZ));
// 計(jì)算BCC校驗(yàn)碼
BCC := BccCheck(SendBuf, 1, 29);
StrBCC := IntToHex(BCC, 2);
StrLCopy(@SendBuf[30], @StrBCC[1], Length(StrBCC));
// 結(jié)束標(biāo)志符
SendBuf[32] := Byte($24);
// 發(fā)送數(shù)據(jù)
SendData;
程序執(zhí)行效果如圖2所示。
圖2 程序執(zhí)行結(jié)果示意圖
5 結(jié)束語
將入廠煤量信號(hào)送到SmartPro DCS系統(tǒng)可以通過幾種方式實(shí)現(xiàn),但考慮到系統(tǒng)整體的安全性、穩(wěn)定性、擴(kuò)展性和經(jīng)濟(jì)性,我們采用了此種方式,經(jīng)過現(xiàn)場(chǎng)試驗(yàn)測(cè)試和實(shí)際運(yùn)行,此方式為一種切實(shí)可行的方式,且相比其他實(shí)現(xiàn)方式,該方案既節(jié)約了項(xiàng)目成本,又更好地實(shí)現(xiàn)了既定的目標(biāo),與DCS系統(tǒng)實(shí)現(xiàn)軟通信,不占用DCS系統(tǒng)硬件資源,對(duì)DCS系統(tǒng)的穩(wěn)定運(yùn)行幾乎沒有影響,系統(tǒng)安全性和可靠性大大增強(qiáng)。
作者信息:
陳達(dá)軍,楊 華(寶應(yīng)協(xié)鑫生物質(zhì)環(huán)保熱電有限公司,江蘇 揚(yáng)州 225800)