
【摘 要】 為了實現(xiàn)PC與西門子S7-200 PLC的實時遠程監(jiān)控,應用C++ builder 6.0開發(fā)了一個上位機程序,通過發(fā)送接收數(shù)據(jù)報文實現(xiàn)了PLC輸入輸出端口的狀態(tài)控制。經(jīng)過測試,軟件達到了調(diào)試效果,為工業(yè)現(xiàn)場PLC的靈活應用提供了一個新方法。
【關鍵詞】 C++ Builder PLC 報文 串口 MSComm
【DOI編碼】 10.3969/j.issn.1674-4977.2015.04.013
可編程邏輯控制器(PLC)主要用于工業(yè)現(xiàn)場的實時控制,系統(tǒng)相關的人機界面主要是開關、按鈕、指示燈等部件。由于其穩(wěn)定可靠且具有良好的適應性和易于拓展能力,在工程中得到了越來越多的應用。雖然PLC易于控制、設計靈活、能模擬現(xiàn)場調(diào)試、編程簡單、具有良好的抗干擾性,但是PLC也有不易顯示各種實時圖表、曲線、趨勢圖和漢子,用戶界面不夠良好,不便于監(jiān)控等缺點。現(xiàn)在工業(yè)現(xiàn)場的PLC都配備了串行接口,可以通過232、485、422與其它設備或PC相連接。而基于PC的上位機軟件一般都具有良好的人機界面,修改靈活,便于實現(xiàn)系統(tǒng)的監(jiān)控和管理,進行程序的編制、參數(shù)設定、參數(shù)修改、數(shù)據(jù)采集等,既能保證系統(tǒng)性能,又能使系統(tǒng)操作簡單,便于在工業(yè)生產(chǎn)過程中有效地實時監(jiān)管控制。將PC的上位機與PLC的下位機系統(tǒng)集成是目前大多數(shù)自動控制系統(tǒng)的實現(xiàn)方式[1]。本文將設計一種可以與PLC實現(xiàn)穩(wěn)定、可靠數(shù)據(jù)通信的上位機軟件程序。
1 初始化
上位機開發(fā)以西門子S7-200(CPU224)為例,通過DC24V電源給PLC供電。集成在S7-200中的點對點PPI可以實現(xiàn)485接口的高速數(shù)據(jù)通信,應用銀杏USB-485轉(zhuǎn)換器將PC與PLC連接起來組成PC/PPI網(wǎng)絡,實現(xiàn)點對點實時通信。設計軟件功能包括IO輸入輸出兩部分:開關量輸入,利用繼電器改變某個輸入端口的狀態(tài),程序讀取這個端口的輸入狀態(tài)(開啟或關閉),并在程序中實時顯示;開關量輸出,上位機程序界面中指定端口的地址,單擊置位復位按鈕,即指定地址的端口狀態(tài)為開啟或關閉,使線路中指示燈點亮或熄滅。
下位機西門子S7-200PLC需要在PLC中運行一段程序,與上位機之間的通信方式采用主從方式,PC為主機,PLC為從機。待PC向PLC發(fā)出報文,后者收到報文后,進行異或校驗處理,若校驗正確則返回收到的報文內(nèi)容。
1 PLC調(diào)試軟件界面圖
在C++ builder 6.0中新建plc.bpr工程,設置Form1的標題為“PLC(S7-200)調(diào)試程序”。創(chuàng)建3個GroupBox控件分別用于顯示輸入狀態(tài)、輸出控制和報文監(jiān)控[2]。此外用Shape控件來顯示輸入狀態(tài)和輸出狀態(tài)指示燈(綠色和紅色),用CheckBox控制輸出點復選框。選用MSComm組件進行串口通信開發(fā)。
if(MSComm1->PortOpen!=true)
{
MSComm1->CommPort=1; //設置通信端口
MSComm1->InputMode=1; //數(shù)據(jù)為二進制
MSComm1->Settings = \"9600,n,8,1\";
MSComm1->InBufferSize=512;
MSComm1->OutBufferSize=1024;
MSComm1->RThreshold=1;
MSComm1->PortOpen=true; //打開端口1
Shape1->Brush->Color=clLime;
……
}else
{
ShowMessage(\"串口已經(jīng)打開\");
return;
}
程序首先進行串口初始化,設置通信端口號、波特率、數(shù)據(jù)位、停止位、輸入輸出緩存區(qū)大小、接收觸發(fā)字符數(shù)等基本信息,同時將輸出狀態(tài)的Shape控件初始化為綠色。當PC與PLC調(diào)試完畢時,則需要關閉上位機程序[3]。
MSComm1->PortOpen=1;
Close();
2 輸入顯示
首先聲明一個存儲接收數(shù)據(jù)的緩沖區(qū)BYTE rcv[8],針對下位機PLC的數(shù)據(jù)報文內(nèi)容為:rcv(0)起始00,rcv(1)字節(jié)數(shù),rcv(2)Q0狀態(tài),rcv(3)Q1狀態(tài)<>255,rcv(4)I0狀態(tài),rcv(5)I1狀態(tài),rcv(6)校驗,rcv(7)結(jié)束255.在MSComm的接收觸發(fā)事件中,通過RxBuff獲取MSComm1->Input所獲得的報文數(shù)據(jù),然后依次的存入rcv[8]數(shù)組中,第一個for循環(huán)用于數(shù)組賦值,第二個for循環(huán)用于顯示接收到的報文信息,便于程序調(diào)試。
int ByteNum;//收到的字節(jié)數(shù)
OleVariant RxBuff;
RxBuff=MSComm1->Input;
ByteNum=RxBuff.ArrayHighBound();
for(int i=0;i<=ByteNum;i++)
rcv[i]=RxBuff.GetElement(i);
for(int i=0;i<8;i++)
Edit1->Text=Edit1->Text+IntToStr(rcv[i]);
應用C語言中的itoa函數(shù)將整型的接收報文數(shù)據(jù)轉(zhuǎn)換成二進制的字符,便于轉(zhuǎn)換成8個字節(jié)長的字符,便于后續(xù)的輸入狀態(tài)判斷。以Shape15為例,判斷str[8]字符內(nèi)容,由此決定控件的顏色為紅色或者綠色。
char p[8];
String str;
itoa(rcv[2],p,2); //整型轉(zhuǎn)換成二進制字符str.sprintf(\"%8s\",p);
if(str[8]=='1')
Shape15->Brush->Color=clRed;
else
Shape15->Brush->Color=clLime;
3 輸出控制
程序涉及了多個端口控制輸出,為了便于上位機操作控制,應用CheckBox控件對應每一個輸出端口。類似上述轉(zhuǎn)換,將每個端口的狀態(tài)轉(zhuǎn)換為字符形式保存。
check[0]=CheckBox1->State;
check[1]=(CheckBox2->State)*2;
check[2]=(CheckBox3->State)*4;
……
check[7]=(CheckBox8->State)*128;
控制報文發(fā)送需要創(chuàng)建OleVariant Txbuff,同樣創(chuàng)建一個字符型數(shù)組temp[8],將待發(fā)送的輸出端口信息check[i]累加成給變量q1。因為PC與PLC直接的通信涉及到異或校驗,將異字節(jié)內(nèi)容存在fcs變量,以待報文后續(xù)發(fā)送,同時報文以0xFF做報文尾標識,最后應用MSComm1->Output=Txbuff將預置好的數(shù)據(jù)發(fā)送出去[4]。
BYTE temp[8];//報文長度
BYTE fcs;
int q1=0;
for(i=0;i<8;i++)
q1=q1+check[i];
temp[0]=0;//起始字符
temp[1]=4;
fcs=temp[1];//fcs表異或校驗碼
for(i=2;i<6;i++)
{
temp[i]=sdata[i-2];
fcs=fcs^temp[i];//算異或校驗碼
}
temp[i]=fcs;
temp[i+1]=0xFF;//結(jié)束字符Txbuff=VarArrayCreate(OPENARRAY(int,(0,7)),varByte);
for(int i=0;i<8;i++)
Txbuff.PutElement(temp[i],i);
MSComm1->Output=Txbuff;//發(fā)送
4 結(jié)論
上位機軟件設計、調(diào)試完畢后,執(zhí)行發(fā)送或定時器發(fā)送。單擊界面中代表端口號的選擇按鈕,給S7-200PLC對應的端口置位,則PLC上相應的指示燈亮或滅;界面中輸出控制指示燈圖像改變顏色。而當PLC的輸入端口接收到信號時,界面中的輸入狀態(tài)指示燈改變顏色。經(jīng)過測試上位機的功能達到了預期的設計目的,實現(xiàn)了PC與PLC的遠程實時控制。
參考文獻
[1] 曹衛(wèi)彬.《C/C++串口通信典型應用實例編程實踐》[M].北京:電子工業(yè)出版社,2007:177-187
[2 陳成勇.《軟PLC技術研究與開發(fā)》[D].碩士論文.2008.05
[3] 李劍.《西門子PLC與監(jiān)控計算機通信問題的研究[D]》.碩士論文2007.01
[4] 陳卓.《PLC與上位計算機通訊監(jiān)控系統(tǒng)的研究與應用》[D].碩士論文2004.04
作者簡介
李玉石,工程師,主要從事計量檢定、儀器儀表的研究工作。
(責任編輯:張曉明)