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