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