林 盛,遲新利,曲延華,高慶忠
(沈陽工程學院, 遼寧 沈陽 110136)
作為新一代工業控制裝置,PLC自上世紀 60年代產生以來,發展迅猛,被廣泛應用于眾多的工業控制現場。S7-200系列的PLC是西門子公司的小型PLC,從其推向市場的那天起,就以高可靠性和性價比在國內廣受歡迎。在工業控制現場,往往需要上位機(PC)對下位機(PLC)進行監控,以實現控制的分散和管理的集中。但上位機的專用組態軟件,往往價格昂貴,并且控制不夠靈活。
如果可以自己編程實現PLC與上位機之間的通訊,必可起到節約成本提高效率的效果。可是若要完全由自己來編寫一段用于通信的程序,必須對相關的網絡協議及其他的一些較底層的技術有很深入的了解,這不是一件容易的事。本文將介紹一種簡單的方法,借助于Visual Studio2010中的VC++開發工具,用戶只需通過設置serialPort組件的屬性并調用其方法,再在PLC內部進行簡單的編程,就可經由自由口實現PC與PLC之間的通信。
S7-200的自由口通信模式建立在RS-485硬件基礎上。如果PLC選擇了自由口模式,用戶就可以通過發送指令(XMT)、接收指令(RCV)、發送中斷以及接收中斷對通信口進行相應的操作。S7-200 PLC也允許用戶對諸如數據長度、奇偶校驗等進行簡單設置設置[1]。對于XMT和RCV 指令,用戶可以在編程當中為其指定相應的數據緩沖區。
最終的 PLC 程序應當由主程序、中斷(接收完成/發送完成)子程序、讀(寫)操作子程序和校驗子程序等組成,各個程序塊各司其職。
主程序需要進行諸如打開端口、設置波特率和奇偶校驗等操作,并按照適當的條件執行中斷或其他子程序。
主程序與子程序部分示例代碼如下:
NETWORK1//主程序
LD SM0.1//首個周期運行標志
MOVB 16#05,SMB130//打開 COM1,無奇偶校驗,數據位8,波特率為19 200,自由口模式
MOVB 16#EC,SMB187//接收使能,以SM188和SM189內字符分別作為開始和停止字符,
MOVB 35,SMB188//以“#”做為開始字符
MOVB 38,SMB189//以“&”做為停止字符
MOVB 30,SMB194//30為最大可接收字節數,設定范圍為1~255
MOVW +99,SMW192//設置通信信道空閑時間為99 ms
ATCH INT_0,23//以接收完成為標識,觸發中斷0
ATCH INT_2,9//以發送完成為標識,觸發中斷2
ENI //用戶中斷允許
RCV VB200 1//為COM1指定從VB200開始的緩沖區
NETWORK1//中斷0,接收完成中斷子程序
LDB=SMB186 16#20//接收完成狀態標識
MOVB 10 SMB34//設置定時中斷0的時間間隔為10 ms
ATCH INT_1 10//定時中斷0超時,觸發中斷1
CRETI//返回
NOT
RCV VB200 1//上次接收完成,開始新的接收
NETWORK1//中斷1
LD SM0.0//運行標識
DTCH 10//解除定時中斷
XMT VB200 1//向COM1的緩沖區返回信息
完整的程序運行流程如圖1所示。

圖1 PLC程序流程圖Fig.1 Program Flow Chart for PLC
PC機側程序采用微軟公司的Visual C++工具開發。在以往的實踐中,大家或利用標準通信函數、或利用第三方控件 MSComm、或利用 API函數[3]來實現串行通信
微軟從 VisualStudio2005開發工具開始,在NETFramework類庫包含了SerialPort組件,利用此組件,可以方便地實現串口通訊的多種功能[2]。SerialPort組件的常用屬性極其描述如表1所示。

表1 SerialPort屬性Table 1 Attribute of SerialPort
serialPort組件的串口屬性要設置成與PLC串口參數相同的數值,其代碼如下:
serialPort1.PortName=“COM1”;//設置通訊端口為COM1
serialPort1.BaudRate=9600;//設置波特率為9600bps
serialPort1.DataBits=8;//設置8位數據位
serialPort1.StopBits=System.IO.Ports.StopBits.One;//設置1位停止位
serialPort1.Parity=System.IO.Ports.Parity.None;//無奇偶校驗
serialPort組件打開關閉串口采用的是調用類的Open()和 Close()方法。其讀取數據的方法是多為同步阻塞調用,因此可以使用異步處理或線程間處理調用這些讀取數據的方法,從而盡量避免在主線程中調用,由此可以顯著提高系統的工作性能。
最終完成的通訊界面如圖2所示,在這個通信界面上可以根據實際需要,自由設置串口的各個參數。在完成通信參數、命令類型和寄存器參數的設置后,便可發送指令數據。命令類型中05代表“讀”,06代表“寫”。

圖2 PC程序界面Fig. 2 Program Interface of PC
隨著 PLC在工業現場的大量普及和應用,對PLC的監控和管理顯得日益重要。本文在PLC與PC的自由口通訊中,采用了VC++內置的serialPort組件,不但大大簡化了編程,而且取得了不錯的效果。在此基礎上,配合PC與PLC 的通信協議,就可以開發出交互界面友好、功能強大的上位機監控系統,以較低的成本,滿足眾多中小企業自動化、信息化、網絡化的要求。
[1] 西門子(中國)有限公司. SIMATIC S7-200 可編程控制器系統手冊[G]. 2008.
[2] Ivor Horton,Visual C++2010入門經典 [M]. 第5版.北京:清華大學出版社,2010.
[3] 高潮,羅強,郭永彩,扶新.用Visual C++實現PC與PLC之間的串行通訊[J].重慶大學學報(自然科學版),2006,29(6):19-22.