技術(shù)頻道

娓娓工業(yè)
您現(xiàn)在的位置: 中國傳動網(wǎng) > 技術(shù)頻道 > 應(yīng)用方案 > PLC串行通信在分布式監(jiān)控系統(tǒng)中的應(yīng)用

PLC串行通信在分布式監(jiān)控系統(tǒng)中的應(yīng)用

時間:2018-03-06 10:27:09來源:網(wǎng)絡(luò)轉(zhuǎn)載

導(dǎo)語:?plc完成對系統(tǒng)的底層控制,即直接控制執(zhí)行機構(gòu),實現(xiàn)數(shù)據(jù)采集,處理與控制;上位計算機則完成數(shù)據(jù)處理、信息管理等復(fù)雜的監(jiān)控管理任務(wù)。通訊的實現(xiàn)就成為這種系統(tǒng)中的關(guān)鍵技術(shù)之一。

1引言

目前,plc作為一種成熟穩(wěn)定可靠的控制器,已經(jīng)在工業(yè)控制中得到了廣泛的應(yīng)用。在實際應(yīng)用中通常采用以工業(yè)控制計算機和plc構(gòu)成計算機監(jiān)控系統(tǒng)。在這里,plc完成對系統(tǒng)的底層控制,即直接控制執(zhí)行機構(gòu),實現(xiàn)數(shù)據(jù)采集,處理與控制;上位計算機則完成數(shù)據(jù)處理、信息管理等復(fù)雜的監(jiān)控管理任務(wù)。通訊的實現(xiàn)就成為這種系統(tǒng)中的關(guān)鍵技術(shù)之一。本文以電廠輸煤監(jiān)控系統(tǒng)為例,介紹了串行通信技術(shù)在分布式監(jiān)控系統(tǒng)中的應(yīng)用。

2監(jiān)控系統(tǒng)硬件構(gòu)成

某電廠輸煤系統(tǒng)共有儲煤圓筒倉6個,每個倉下面各對應(yīng)著環(huán)式給煤機,犁煤機,變頻器和皮帶等設(shè)備,每個倉距離幾十米。我們使用可編程控制器(omronc200h型plc)作為下位機負責(zé)對每臺圓筒倉下的設(shè)備信號采集和控制命令的發(fā)送。由程序?qū)崿F(xiàn)對設(shè)備啟停的連鎖控制,出現(xiàn)異常情況,如設(shè)備電流越限,給煤車擋板卡死等情況,能快速作出反應(yīng)并報警。

采用工業(yè)控制計算機(ipc)作為操作員站,實現(xiàn)對整個的監(jiān)控和管理功能。plc之間以rs422方式組成網(wǎng)絡(luò),并和上位機之間采用hostlink方式連接。系統(tǒng)結(jié)構(gòu)圖如圖1所示。

每個圓筒倉下的設(shè)備使用一個c200h型plc對其進行控制,并配置一個com06通信模塊。它能夠為plc提供rs422/485方式的通訊。這樣可以方便的將其聯(lián)網(wǎng)。rs422采用平行發(fā)送接收方式,具有傳輸距離長,抗干擾能力強和多點通信能力,最多可以連接32臺plc。在plc和上位機之間使用一個rs422/232轉(zhuǎn)換模塊,將rs422信號轉(zhuǎn)換為rs232信號,這里使用的是研華adam4520。這種網(wǎng)絡(luò)通信方式經(jīng)濟實用,完全能滿足生產(chǎn)運行的需要。

3系統(tǒng)軟件開發(fā)及串行通信的實現(xiàn)

上位機監(jiān)控系統(tǒng)開發(fā)c++builder6.0編程軟件。c++builder是borland公司的產(chǎn)品,它采用面向?qū)ο蟮腸++語言,實時性好,運算速度快,編程效率高,人機界面功能強大。近年來越來越多地應(yīng)用于工業(yè)控制。

plc與上位機的串行通信程序的編制是監(jiān)控系統(tǒng)開發(fā)的關(guān)鍵部分。使用c++builder開發(fā)系統(tǒng)人機界面的部分較為容易,不是本文討論的主要內(nèi)容,在此不作詳細敘述。

3.1plc的通信協(xié)議簡介

上位計算機和plc通訊使用的是上位鏈接通訊方式,所以我們要開發(fā)c++builder與omronplc的串行通信,必須使用omronplc的上位機鏈接通信協(xié)議。

上位機鏈接通信是通過在上位機和plc之間交換命令(command)和應(yīng)答(response)幀實現(xiàn)的。在一次交換中從上位機傳輸至plc的命令稱為命令幀,plc對命令幀的應(yīng)答數(shù)據(jù)稱為應(yīng)答幀。每個幀以設(shè)備號和標(biāo)題開始,以檢驗碼fcs及結(jié)束符結(jié)束。一個命令幀最多可以包含131個數(shù)據(jù)字符,多于131個數(shù)據(jù)字符的數(shù)據(jù)要分成若干幀發(fā)送。

從上位機發(fā)送一個命令幀時,命令格式如圖2所示。

@符號必須置于每個命令的開頭。節(jié)點號用來辨識接收命令的plc,節(jié)點號在數(shù)據(jù)寄存區(qū)dm6558地址中設(shè)定。識別碼是2個字符的命令代碼,用來設(shè)置通信的功能。正文設(shè)置命令參數(shù),包括要讀寫的plc寄存器單元的起始地址和字數(shù)。fcs是2個字符的幀檢查順序碼,是檢查前面數(shù)據(jù)的校驗碼,終止符以“*”和回車(chr$(13))兩字符,表示命令結(jié)束。一些常用命令代碼如rr表示讀ir/sr區(qū)的值,rd表示讀dm區(qū)的值,wd表示向dm區(qū)寫數(shù)據(jù)。具體情況可參照相關(guān)操作手冊。

響應(yīng)幀的格式與命令幀類似,在標(biāo)志碼后多了兩位的結(jié)束代碼。不同結(jié)束代碼的值代表不同含義。查看結(jié)束碼可以得知是否有錯誤發(fā)生以及發(fā)生錯誤的類型。正常情況下的結(jié)束碼為00。表1為常見的結(jié)束代碼及其含義。

幀順序檢查fcs在終止符之前,以檢查傳送時是否存在數(shù)據(jù)錯誤。fcs是一個轉(zhuǎn)換成2個ascⅱ字符的8位數(shù)據(jù)。這8位數(shù)據(jù)為從幀開始到幀正文結(jié)束所有字符ascⅱ碼執(zhí)行“異或”操作的結(jié)果。每次接收到一幀,先要計算fcs,與幀中所包含的fcs作比較,就能檢查數(shù)據(jù)傳輸?shù)恼_與否。例如:要讀出01號plc的ir200里的數(shù)據(jù),通過上位機可以發(fā)送格式為“@01rr0100000141*”的命令幀。其中“41”即為計算所得的fcs。每一幀的fcs的可由上位機程序計算得到。

3.2c++builder中串行通信的實現(xiàn)

使用c++builder開發(fā)串行通信程序有兩種方法:一種是利用activex控件,c++builder本身并不提供單獨的串行通信控件,可以使用visualbasic自帶的mscomm32控件,在c++builder中注冊它,c++builder就可以調(diào)用了。另一種方法是利用windowsapi函數(shù)創(chuàng)建串行通信。

利用activex控件開發(fā)串行通信程序較為容易,很多文章都進行論述過,但是這種方法實時性較差。使用windowsapi函數(shù)開發(fā)串行通信程序雖然比較復(fù)雜,但是采用多線程技術(shù),其準(zhǔn)確性高,實時性好,適用于連續(xù)生產(chǎn)過程中通訊要求嚴格,實時性強,數(shù)據(jù)量大的場合。在本次系統(tǒng)開發(fā)中,經(jīng)過綜合考慮,我們選擇了使用windowsapi函數(shù)開發(fā)串行通信程序。

在開發(fā)過程中,我們使用了多線程,事件驅(qū)動的方式。通信程序主要由兩個線程組成,主線程負責(zé)接收用戶輸入,相應(yīng)鍵盤鼠標(biāo),接收windows消息,以及向串口發(fā)送數(shù)據(jù)。另一個監(jiān)視線程監(jiān)視串口接收消息,并向主線程發(fā)送windows消息。通信過程如圖3所示。

使用過程中,首先使用一系列api函數(shù)初始化通信端口。這部分程序如下:

char*comno;

dcbdcb;

stringsendtemp;

file://取得要打開的通信端口

sendtemp=“com”+inttostr(radiogroup1-》itemindex+1);

comno=sendtemp.c_str();file://字符串轉(zhuǎn)換

hcomm=createfile(comno,generic_read|generic_write,0,null,open_existing,0,0);

file://使用createfile函數(shù)打開一個通信端口,打開的

file://端口視窗體上選擇的而定。

if(hcomm==invalid_handle_value)

file://如果串口未打開,報警消息。

{

messagebox(0,“打開通信端口錯誤!!”,“commerror”,mb_ok);

return;

}

getcommstate(hcomm,&dcb);file://取目前串口狀態(tài)

file://設(shè)置通信端口的狀態(tài)

dcb.baudrate=cbr_9600;file://波特率設(shè)為9600

dcb.bytesize=7;file://數(shù)據(jù)位7位

dcb.parity=evenparity;//奇偶校驗設(shè)為偶校驗

dcb.stopbits=twostopbits;//停止位設(shè)為2位if

(!setcommstate(hcomm,&dcb))

{

messagebox(0,“通信端口設(shè)置錯誤??!

”,“seterror”,mb_ok);

return;

}

通信端口初始化成功后,主線程開始接收用戶消息,監(jiān)測用戶輸入,然后開始發(fā)送命令幀,發(fā)送完畢后將發(fā)送事件標(biāo)記設(shè)為false,接收事件標(biāo)記設(shè)為true。接收標(biāo)記為true時,監(jiān)視線程啟動,使用readfile函數(shù)讀取從plc返回的應(yīng)答幀。如果沒有錯誤而且校驗幀fcs正確,則使用一段翻譯程序?qū)?yīng)答幀中的plc信息翻譯出來,例如某個dm區(qū)的值,存入內(nèi)存變量中,即可以在監(jiān)控畫面上作出顯示。然后主線程發(fā)送下一個命令幀,開始下一個循環(huán)。

如果plc返回的應(yīng)答幀錯誤,或者fcs不正確,那么監(jiān)視線程將根據(jù)錯誤的類型,發(fā)送消息至主線程,通知主線程重發(fā)命令幀或者改變設(shè)置。主線程經(jīng)過多次重發(fā)仍然出現(xiàn)錯誤,則發(fā)出相關(guān)報警信息,通知操作員進行處理。由于監(jiān)視線程在接收消息狀態(tài)下立即啟動,且與主線程采用同步處理方式,只需要向主線程發(fā)送消息,因此循環(huán)時間短,提高了控制系統(tǒng)的實時性。

在本系統(tǒng)中,例如要使用上位計算機控制plc關(guān)閉某個設(shè)備。主線程首先監(jiān)測到鼠標(biāo)點擊開關(guān)事件,然后將這個操作事件翻譯成相應(yīng)的命令幀,通過串口發(fā)送此命令到對應(yīng)的plc中,改變plc內(nèi)存區(qū)的某個對應(yīng)的值,進而改變plc的輸出,關(guān)閉這個設(shè)備。同時監(jiān)控畫面可以顯示出改變后的設(shè)備狀態(tài)。

4結(jié)束語

使用本文介紹的方法編制通信程序,在火電廠輸媒監(jiān)控系統(tǒng)中得到了實際應(yīng)用。目前這一方案已經(jīng)應(yīng)用到現(xiàn)場,一段時間的試運行表明此方案是可行的。通信穩(wěn)定可靠,實時性強,完全滿足現(xiàn)場設(shè)備通信的需要。同時,由c++builder開發(fā)的監(jiān)控畫面,采用了面向?qū)ο蟮木幊碳夹g(shù),縮短了此系統(tǒng)的開發(fā)周期,在上位機上再現(xiàn)生產(chǎn)過程,人機界面友好。相信此方案對同類系統(tǒng)的設(shè)計與開發(fā)有一定借鑒作用。

標(biāo)簽:

點贊

分享到:

上一篇:PLC和變頻器在鋅電解行車中的...

下一篇:PLC自控系統(tǒng)設(shè)計的關(guān)鍵點

中國傳動網(wǎng)版權(quán)與免責(zé)聲明:凡本網(wǎng)注明[來源:中國傳動網(wǎng)]的所有文字、圖片、音視和視頻文件,版權(quán)均為中國傳動網(wǎng)(www.treenowplaneincome.com)獨家所有。如需轉(zhuǎn)載請與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個人轉(zhuǎn)載使用時須注明來源“中國傳動網(wǎng)”,違反者本網(wǎng)將追究其法律責(zé)任。

本網(wǎng)轉(zhuǎn)載并注明其他來源的稿件,均來自互聯(lián)網(wǎng)或業(yè)內(nèi)投稿人士,版權(quán)屬于原版權(quán)人。轉(zhuǎn)載請保留稿件來源及作者,禁止擅自篡改,違者自負版權(quán)法律責(zé)任。

網(wǎng)站簡介|會員服務(wù)|聯(lián)系方式|幫助信息|版權(quán)信息|網(wǎng)站地圖|友情鏈接|法律支持|意見反饋|sitemap

中國傳動網(wǎng)-工業(yè)自動化與智能制造的全媒體“互聯(lián)網(wǎng)+”創(chuàng)新服務(wù)平臺

網(wǎng)站客服服務(wù)咨詢采購咨詢媒體合作

Chuandong.com Copyright ?2005 - 2024 ,All Rights Reserved 版權(quán)所有 粵ICP備 14004826號 | 營業(yè)執(zhí)照證書 | 不良信息舉報中心 | 粵公網(wǎng)安備 44030402000946號