摘要:本文以RS-485總線在分散控制系統(tǒng)(DCS)中的應(yīng)用為切入點(diǎn),簡(jiǎn)要介紹了Modbus RTU協(xié)議的通訊模式、通訊規(guī)約,以及RS-485總線應(yīng)用在現(xiàn)場(chǎng)控制站中的軟硬件設(shè)計(jì),探討了DCS開(kāi)放性設(shè)計(jì)的重要性和緊迫性。
關(guān)鍵詞:開(kāi)放性;分散控制系統(tǒng);485總線;通訊;組態(tài)
1 引言
當(dāng)前,根據(jù)不同需要,各種面向特定行業(yè)、特定生產(chǎn)過(guò)程的分散控制系統(tǒng)設(shè)計(jì)成了一種潮流,各種新型的控制系統(tǒng)也應(yīng)運(yùn)而生。目前來(lái)看,DCS的上位軟件組態(tài)過(guò)程往往局限于固定廠商的固定設(shè)備,給系統(tǒng)及其設(shè)備的可移植性帶來(lái)不少困難,這使得開(kāi)放性顯得越來(lái)越重要。這就要求分散控制系統(tǒng)軟件設(shè)計(jì)引進(jìn)各種先進(jìn)設(shè)計(jì)思想、應(yīng)用各種高新技術(shù),特別是現(xiàn)場(chǎng)總線技術(shù),力求實(shí)現(xiàn)系統(tǒng)的高開(kāi)放性。
開(kāi)放系統(tǒng)是指通訊協(xié)議公開(kāi)、不同廠家的設(shè)備之間可進(jìn)行互聯(lián)并實(shí)現(xiàn)信息交換。這里的開(kāi)放是指相關(guān)標(biāo)準(zhǔn)的一致性、公開(kāi)性,強(qiáng)調(diào)對(duì)標(biāo)準(zhǔn)的共識(shí)與遵循。一個(gè)開(kāi)放系統(tǒng),它可以與任何遵循相同標(biāo)準(zhǔn)的其它設(shè)備或系統(tǒng)相連。開(kāi)放系統(tǒng)把系統(tǒng)集成的權(quán)力交給了用戶(hù)。用戶(hù)可按自身需要和考慮把來(lái)自不同供應(yīng)商的產(chǎn)品組成大小隨意的系統(tǒng),避免因選擇了某一品牌的產(chǎn)品而被“框死”設(shè)備的選擇范圍,不會(huì)為系統(tǒng)集成中不兼容的協(xié)議而一籌莫展,使系統(tǒng)集成過(guò)程中的主動(dòng)權(quán)完全掌握在用戶(hù)手中。
本文以遵循Modbus RTU協(xié)議的RS-485工業(yè)智能I/O模塊設(shè)備為例,闡述分散控制系統(tǒng)在組態(tài)以及通訊上的開(kāi)放性設(shè)計(jì)。
2 RS-485 I/O模塊的連接及基本通訊規(guī)則
2.1 RS-485 I/O模塊在分散控制系統(tǒng)中的連接
分散控制系統(tǒng)以多層計(jì)算機(jī)網(wǎng)絡(luò)為依托,實(shí)現(xiàn)各部分的信息共享和協(xié)調(diào)工作,共同完成各種控制、管理及決策功能。圖1所示為一個(gè)分散控制系統(tǒng)的典型結(jié)構(gòu),系統(tǒng)中的所有設(shè)備分別處于不同的層次,自上而下分別是:管理級(jí)、監(jiān)控級(jí)、控制級(jí)和現(xiàn)場(chǎng)級(jí)。
如圖1所示,I/O智能模塊通過(guò)現(xiàn)場(chǎng)總線與現(xiàn)場(chǎng)控制站相連,現(xiàn)場(chǎng)控制站通過(guò)相應(yīng)的規(guī)則,對(duì)I/O智能模塊進(jìn)行讀寫(xiě)操作,即現(xiàn)場(chǎng)控制站的讀卡任務(wù),在控制現(xiàn)場(chǎng),是由各種智能I/O模塊進(jìn)行數(shù)據(jù)采集、任務(wù)執(zhí)行,按其通道類(lèi)型不同分為AI(模擬量輸入)、AO(模擬量輸出)、DI(數(shù)字量輸入)、DO(數(shù)字量輸出)模塊,按其PV特性不同分為4~20mA、0~20mA、-5~5V、-10~10V等不同類(lèi)型模塊,這些I/O模塊,都會(huì)遵循一定的協(xié)議連在總線上,比如Modbus TCP協(xié)議、Modbus RTU協(xié)議等,那么如何獲取I/O模塊的采集數(shù)據(jù),如何使I/O模塊進(jìn)行一定的輸出,就需要控制器對(duì)I/O模塊進(jìn)行讀卡操作,需要按其相應(yīng)的協(xié)議進(jìn)行數(shù)據(jù)包的發(fā)送、分解、校驗(yàn)。
圖1 分散控制系統(tǒng)的典型結(jié)構(gòu)
針對(duì)本文所要舉例的一類(lèi)遵循Modbus RTU協(xié)議的RS-485智能I/O模塊,如圖2所示,現(xiàn)場(chǎng)控制站通過(guò)RS-485接口與這類(lèi)模塊按照菊花鏈的形式相連,按照Modbus RTU的協(xié)議規(guī)約進(jìn)行通訊。
圖2 RS-485設(shè)備接線圖
2.2 Modbus RTU協(xié)議的通訊規(guī)則
Modbus RTU協(xié)議規(guī)定了RS-485設(shè)備通訊的基本規(guī)則,即:
(1)所有RS485通訊回路都應(yīng)按照主/從方式,數(shù)據(jù)可以在一個(gè)主站(如PC機(jī))和32個(gè)子站之間傳遞;
(2)主站將初始化和控制在RS485通訊回路上傳遞的所有信息;
(3)任何一次通訊都不能從子站開(kāi)始;
(4)在RS485回路上的所有通訊都以“信息幀”方式傳遞,“信息幀”就是一個(gè)由數(shù)據(jù)幀(每一個(gè)字節(jié)為一個(gè)數(shù)據(jù)幀)構(gòu)成的字符串(最多255個(gè)字節(jié)),是由信息頭和發(fā)送的編碼數(shù)據(jù)構(gòu)成標(biāo)準(zhǔn)異步串行數(shù)據(jù),該通訊方式也與RTU通訊規(guī)約相兼容;
(5)如果主站或子站接收到含有未知命令的信息幀,則不予以響應(yīng)。
在RS-485通訊回路中,通訊傳輸為異步方式,并以字節(jié)(數(shù)據(jù)幀)為單位。在主站和子站之間傳遞的每一個(gè)數(shù)據(jù)幀都是11位的串行數(shù)據(jù)流,如表1、圖3、圖4所示。
表1 數(shù)據(jù)幀格式
在請(qǐng)求包和應(yīng)答包發(fā)送過(guò)程中,信息幀格式如表2所示,當(dāng)通訊命令發(fā)送至儀器時(shí),符合相應(yīng)的地址碼的設(shè)備接收通訊命令,并除去地址碼,讀取信息,如果沒(méi)有出錯(cuò),則執(zhí)行相應(yīng)的任務(wù);然后把執(zhí)行結(jié)果返送給發(fā)送者。返送的信息中包括地址碼、執(zhí)行動(dòng)作后的功能碼、執(zhí)行動(dòng)作后的數(shù)據(jù)以及錯(cuò)誤校驗(yàn)碼(CRC)。如果出錯(cuò)就不發(fā)送任何信息。
圖3 有奇偶校驗(yàn)的時(shí)序圖
圖4 無(wú)奇偶校驗(yàn)的時(shí)序圖
表2 信息幀格式
3 組態(tài)開(kāi)放性
在標(biāo)準(zhǔn)的ModBus RTU通訊規(guī)約中,通信回路以主/從模式運(yùn)行,主站(如PC機(jī))在向子站(如串口卡)發(fā)送數(shù)據(jù)幀時(shí),需要用戶(hù)指定模件地址、級(jí)聯(lián)號(hào)、功能碼等信息,而這些信息在不同的應(yīng)用場(chǎng)合以及不同的硬接線配置下又有較大的差別。傳統(tǒng)的應(yīng)用方式是針對(duì)某張通道數(shù)及通道類(lèi)型已知的具體的串口卡件,組態(tài)軟件和現(xiàn)場(chǎng)控制站固化相應(yīng)的軟件程序,以某電力監(jiān)測(cè)器的組態(tài)為例說(shuō)明傳統(tǒng)的應(yīng)用方式,如表3。
表3 傳統(tǒng)數(shù)據(jù)庫(kù)組態(tài)表
如前所述,組態(tài)軟件和現(xiàn)場(chǎng)控制站固化一段針對(duì)該電力監(jiān)測(cè)器的軟件程序,若增加另外一種串口卡件時(shí),這段固化的軟件程序要做修改才能應(yīng)用。而DCS強(qiáng)調(diào)提供完整的系統(tǒng)給用戶(hù),軟件上是一個(gè)整體方案,解決的是一個(gè)系統(tǒng)設(shè)計(jì)中的所有技術(shù)問(wèn)題,這種傳統(tǒng)的應(yīng)用方式顯然違背了DCS的開(kāi)發(fā)初衷,勢(shì)必給DCS的開(kāi)發(fā)人員以及DCS用戶(hù)的使用帶來(lái)不便。
所以基于以上考慮,筆者提出一種全新的解決方案,自主開(kāi)發(fā)出DCS組態(tài)軟件,可以方便的通過(guò)填表方式組態(tài),并將組態(tài)文件下發(fā)給現(xiàn)場(chǎng)控制站,直接無(wú)縫集成任何符合標(biāo)準(zhǔn)ModBus RTU通訊規(guī)約的第三方系統(tǒng)和設(shè)備,而無(wú)需更改組態(tài)軟件和現(xiàn)場(chǎng)控制站的系統(tǒng)程序。仍以上述電力監(jiān)測(cè)器為例,簡(jiǎn)要介紹上位機(jī)組態(tài)過(guò)程,如表4所示。
表4 數(shù)據(jù)庫(kù)組態(tài)表
表4中加下劃線部分由用戶(hù)依實(shí)際掛接的串口卡件配置,后續(xù)工作(讀寫(xiě)卡件、判斷卡件狀態(tài)等)交給現(xiàn)場(chǎng)控制站來(lái)完成,用戶(hù)只需關(guān)心卡件所涉及數(shù)據(jù)的類(lèi)型、地址以及所對(duì)應(yīng)的功能碼,集中精力于控制方案的實(shí)現(xiàn)而不必拘泥于技術(shù)細(xì)節(jié)。
此解決方案較之傳統(tǒng)的應(yīng)用方式,優(yōu)勢(shì)在于:可自由選擇串口卡件(符合ModBus RTU標(biāo)準(zhǔn)規(guī)約);個(gè)別卡件故障或掉電不影響其它卡件的正常工作;支持在線插拔,快速更換卡件,并且更換或重新上電后無(wú)需重啟現(xiàn)場(chǎng)控制站,并且支持?jǐn)U展標(biāo)準(zhǔn)接口的平臺(tái),真正實(shí)現(xiàn)自由配置、按需配置、靈活配置。
RS-485卡件可由用戶(hù)根據(jù)具體應(yīng)用行業(yè)及特殊卡件工作周期受限等條件通過(guò)組態(tài)設(shè)定合適的工作周期,在實(shí)際工作過(guò)程中,DCS通過(guò)標(biāo)準(zhǔn)接口與RS-485卡件連接,這種連接通過(guò)網(wǎng)絡(luò)實(shí)現(xiàn),采用通用的、開(kāi)放的網(wǎng)絡(luò)協(xié)議和標(biāo)準(zhǔn)的軟件接口,充分保證了DCS的開(kāi)放性。
4 通訊開(kāi)放性
ModBus通訊規(guī)約定義功能碼為1~127(01H~7FH)。作為主機(jī)請(qǐng)求發(fā)送,通過(guò)功能碼告訴子機(jī)執(zhí)行什么動(dòng)作。作為子機(jī)響應(yīng),子機(jī)發(fā)送的功能碼與主機(jī)發(fā)送來(lái)的功能碼一樣,并表明子機(jī)已響應(yīng)主機(jī)進(jìn)行操作。本文以功能碼4(讀多路輸入寄存器的輸入)為例,介紹開(kāi)放性RS-485串口通訊的過(guò)程。
4.1 請(qǐng)求與應(yīng)答包的構(gòu)成
主機(jī)發(fā)送的報(bào)文格式為【模件地址】【功能碼】【起始寄存器地址高八位】【起始寄存器地址低八位】【讀寄存器個(gè)數(shù)高八位】【讀寄存器個(gè)數(shù)低八位】【CRC碼低八位】【CRC碼高八位】
從機(jī)響應(yīng)返回的報(bào)文格式為:【模件地址】【功能碼】【返回的字節(jié)數(shù)2n】【寄存器1數(shù)據(jù)高八位】【寄存器1數(shù)據(jù)低八位】【寄存器2數(shù)據(jù)高八位】【寄存器2數(shù)據(jù)低八位】•••【寄存器n數(shù)據(jù)高八位】【寄存器n數(shù)據(jù)低八位】【CRC碼低八位】【CRC碼高八位】
例如:主機(jī)要讀取從機(jī)模件地址為01、起始地址為0116的3個(gè)寄存器的數(shù)據(jù)。假設(shè)從機(jī)數(shù)據(jù)寄存器的地址和數(shù)據(jù)信息如表5所示。
表5 設(shè)備寄存器信息
明確了具體設(shè)備的寄存器相關(guān)信息之后,要組成若干字節(jié)的發(fā)送請(qǐng)求包,請(qǐng)求包即一個(gè)unsigned char類(lèi)型的數(shù)組,各字節(jié)的報(bào)文格式如表6所示。
表6 主機(jī)發(fā)送的報(bào)文格式
表7 從機(jī)響應(yīng)返回的報(bào)文格式
請(qǐng)求包發(fā)送到串口的緩沖區(qū)后,如發(fā)送正確,RS-485設(shè)備將返回一定格式的應(yīng)答包,現(xiàn)場(chǎng)控制站可用一個(gè)unsigned char類(lèi)型的緩沖區(qū)接收,要接收的應(yīng)答包的長(zhǎng)度由主機(jī)請(qǐng)求的寄存器個(gè)數(shù)來(lái)決定,具體的報(bào)文格式如表7所示。
4.2 串口通訊流程
在串口通訊過(guò)程中,一般的PC機(jī)或其它規(guī)格的控制器都帶有RS-232接口,可以外接一個(gè)RS-232轉(zhuǎn)RS-485接頭來(lái)實(shí)現(xiàn)現(xiàn)場(chǎng)控制站與RS-485模塊的通訊。在此,筆者不深入闡述RS-485在物理層上的機(jī)理,只討論串口通訊在應(yīng)用層這一層面上的實(shí)現(xiàn)過(guò)程。如圖5所示,在串口通訊時(shí)首先用標(biāo)準(zhǔn)的ioctl函數(shù)來(lái)配置串口的波特率、數(shù)據(jù)位、校驗(yàn)位、停止位等信息,繼而是組包、發(fā)包、收包、解包的過(guò)程。在分散控制系統(tǒng)應(yīng)用中,控制站收到返回包并檢驗(yàn)成功后,應(yīng)立即將有用數(shù)據(jù)讀到現(xiàn)場(chǎng)控制站的共享內(nèi)存,并向上位機(jī)廣播I/O模塊的相應(yīng)狀態(tài)。
4.3 防止串口阻塞在軟件上的實(shí)現(xiàn)
在串口通訊過(guò)程中,數(shù)據(jù)量隨請(qǐng)求I/O模塊通道數(shù)的增加而加大。由于串口寄存器的特點(diǎn),通訊過(guò)程會(huì)很容易出現(xiàn)串口阻塞而造成程序無(wú)法正常運(yùn)行,在軟件上加以?xún)?yōu)化是非常有必要的。
在串口初始化完成后,用sfd來(lái)表示此時(shí)串口獲取到的文件描述符,可用如下的幾行代碼來(lái)檢測(cè)文件的句柄和串口的可讀性,
FD_ZERO(&fds);
FD_SET(sfd,&fds);
select(sfd+1, NULL, &fds, NULL, &tv);
FD_ISSET(sfd,&fds);
也就是說(shuō),在調(diào)用select()函數(shù)檢查此時(shí)串口是否可讀后,用FD_ISSET()函數(shù)來(lái)檢測(cè)fdset中文件sfd有無(wú)發(fā)生變化。只有當(dāng)select()函數(shù)和FD_ISSET()函數(shù)均返回“真”的時(shí)候,說(shuō)明串口已經(jīng)準(zhǔn)備好,可以發(fā)送請(qǐng)求包。接下來(lái),用write()函數(shù)向串口發(fā)送一定字節(jié)數(shù)的請(qǐng)求包即可。
圖5 串口通訊流程圖
在接收返回包時(shí),有時(shí)由于數(shù)據(jù)量大或速度較快造成串口緩沖區(qū)未能收到I/O模塊發(fā)出的返回包,因read()函數(shù)沒(méi)有一定的時(shí)間限制,在讀取串口數(shù)據(jù)時(shí)很有可能串口緩沖區(qū)沒(méi)有收全全部字節(jié)的返回包,這可能會(huì)使程序始終陷于read()函數(shù)中不能跳出,為解決這一問(wèn)題,筆者采取的方法主要是以字節(jié)為單位逐字節(jié)地讀取串口緩沖區(qū)的數(shù)據(jù),并在讀取每個(gè)字節(jié)之前用select()函數(shù)檢查串口此時(shí)是否可讀,這樣可以有效防止串口在讀取過(guò)程中阻塞的隱患,提高程序可靠性。
5 結(jié)語(yǔ)
本文以Modbus RTU協(xié)議為例,在組態(tài)及通訊等方面,探討了基于RS-485總線的I/O模塊在分散控制系統(tǒng)中的開(kāi)放性設(shè)計(jì)。經(jīng)過(guò)一定時(shí)間的測(cè)試及實(shí)際應(yīng)用,實(shí)踐表明基于RS-485總線的分散控制系統(tǒng)開(kāi)放性設(shè)計(jì)可以有效降低成本、提高程序的可移植性和硬件的兼容性,極大地方便了用戶(hù)在使用過(guò)程中根據(jù)需要選擇適合的模塊。另外,可熱插拔、各種錯(cuò)誤檢測(cè)、容錯(cuò)功能等軟件設(shè)計(jì)的優(yōu)化,最大限度提高了系統(tǒng)軟件可靠性和運(yùn)行效率。今后,開(kāi)放性的思想可以滲透到分散控制系統(tǒng)的各個(gè)環(huán)節(jié),使之更好地為社會(huì)生產(chǎn)服務(wù)。
參考文獻(xiàn):
[1]周強(qiáng).基于QNX的分散控制系統(tǒng)現(xiàn)場(chǎng)控制站軟件設(shè)計(jì)[D].保定:華北電力大學(xué)自動(dòng)化系,2002.
[ 2 ] 劉鑫. 我國(guó)工業(yè)控制自動(dòng)化技術(shù)的現(xiàn)狀與發(fā)展趨勢(shì)[ J ] . 控制工程,2003,(6):16-24.
[3]王曉剛.集散控制系統(tǒng)的發(fā)展[J].貴州化工,2001,26(8):54-56.
[4]陳慶玲.現(xiàn)場(chǎng)總線對(duì)自動(dòng)化領(lǐng)域的影響與發(fā)展趨勢(shì)[J].輕金屬,1999,(1):59-62.
[5]曾獻(xiàn)輝.新型開(kāi)放式集散控制系統(tǒng)[J].世界儀表與自動(dòng)化,1999,3(2),39-40.
趙 斌(1987-)
男,河北保定人,現(xiàn)就讀于華北電力大學(xué)自動(dòng)化系,碩士研究生,主要研究方向?yàn)楝F(xiàn)場(chǎng)總線儀表設(shè)計(jì)與開(kāi)發(fā)。
杜石雷(1988-)
男,河北保定人,現(xiàn)就讀于華北電力大學(xué)自動(dòng)化系,在讀碩士研究生,主要研究DCS下位軟件開(kāi)發(fā)。
高 明(1969-)
男,江蘇邳州人,高級(jí)工程師,中國(guó)大唐集團(tuán)公司B級(jí)專(zhuān)家,主要從事火電廠優(yōu)化自動(dòng)控制研究。
孫海蓉(1972-)
女,博士,副教授,碩士生導(dǎo)師。研究方向?yàn)橹悄芸刂萍捌湓诠こ讨械膽?yīng)用、非線性控制,風(fēng)力發(fā)電機(jī)組建模、網(wǎng)絡(luò)化控制。
摘自《自動(dòng)化博覽》2012年第三期