許一帆 王力生 賈廷綱 徐志明
摘要:該文實(shí)現(xiàn)了一套燃?xì)鈮毫刂葡到y(tǒng),主要設(shè)備包括五臺(tái)智能調(diào)壓器和一臺(tái)上位機(jī),其中每臺(tái)智能調(diào)壓器通過串口和上位機(jī)相連接。本系統(tǒng)通過一臺(tái)上位機(jī)對五臺(tái)調(diào)壓器進(jìn)行統(tǒng)一控制管理,為客戶提供了一個(gè)高效整合的解決方案。具體地,本系統(tǒng)利用MODBUS通信協(xié)議,實(shí)現(xiàn)了調(diào)壓器和上位機(jī)之間的通信,并且用戶可以遠(yuǎn)程對其進(jìn)行訪問控制,即時(shí)地查詢和控制調(diào)壓器的狀態(tài)。
關(guān)鍵詞:智能調(diào)壓器;串口服務(wù)器; MODBUS協(xié)議
中圖分類號:TP393 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號:1009-3044(2015)27-0197-03
Abstract: In this paper, it mainly implements a gas pressure controlling system, containing of five intelligent regulators and one host computer, in which each intelligent regulator connects with the host computer via a port. This system provides our customers with an efficient integrative solutions that realizes unified controlling management of five regulators by one host computer. Specifically, this system uses MODBUS communication protocol to realize the communication between each regulator and host computer. Additionally, users can remote access control, and query or control the state of regulators on time.
Key words: Intelligent regulators; Serial port server; MODBUS communication protocol
本課題來源于某燃?xì)庠O(shè)備公司的一個(gè)項(xiàng)目,首先先對該項(xiàng)目進(jìn)行簡要的介紹。該燃?xì)夤灸壳皳碛形迮_(tái)智能調(diào)壓器,如圖1所示。該調(diào)壓器擁有五種功能,分別是流量測量、本地或遠(yuǎn)程出口壓力設(shè)定、流量限制、遠(yuǎn)程監(jiān)控和終端用戶管理。它的優(yōu)點(diǎn)是功能多,且只需要一個(gè)電源。
每臺(tái)智能調(diào)壓器通過串口與上位機(jī)通訊,現(xiàn)在需要實(shí)現(xiàn)了一個(gè)高效整合解決方案,通過一臺(tái)上位機(jī)對五臺(tái)調(diào)壓器的統(tǒng)一控制管理,并且用戶可以遠(yuǎn)程對其進(jìn)行訪問控制,即時(shí)地查詢和控制調(diào)壓器的狀態(tài)。
1 方案綜述
1.1 硬件實(shí)現(xiàn)方案
由于每臺(tái)智能調(diào)壓器都是通過串口和上位機(jī)一對一連接,而上位機(jī)只有一個(gè)串口,所以想要用一臺(tái)上位機(jī)實(shí)現(xiàn)對五臺(tái)設(shè)備的集體控制,首先要解決硬件連接上的問題。
我們的解決方案是使用一個(gè)串口服務(wù)器[1]。串口聯(lián)網(wǎng)服務(wù)器讓傳統(tǒng)的RS-232/422/485設(shè)備立即聯(lián)網(wǎng),利用基于TCP/IP的串口數(shù)據(jù)流傳輸?shù)膶?shí)現(xiàn)來控制管理[2]。串口服務(wù)器擁有多個(gè)串口,并且通過以太網(wǎng)與上位機(jī)連接,在上位機(jī)上虛擬多個(gè)串口,實(shí)現(xiàn)了一帶多的功能。
本課題所使用的串口服務(wù)器可以同時(shí)和八臺(tái)設(shè)備連接通信,很好地解決了硬件上的問題。
1.2 軟件實(shí)現(xiàn)方案
硬件的問題通過串口服務(wù)器比較容易地解決了,下面重點(diǎn)在于軟件上的實(shí)現(xiàn)。
首先,需要在調(diào)壓器和上位機(jī)間建立通信,由于通過串口服務(wù)器,上位機(jī)具備了多個(gè)虛擬串口,所以可以直接使用傳統(tǒng)的一對一通訊協(xié)議。在本系統(tǒng)中,我們使用MODBUS通訊協(xié)議中的命令3,命令6和命令16,來實(shí)現(xiàn)上位機(jī)對調(diào)壓器的讀多個(gè)寄存器,寫單個(gè)寄存器和寫多個(gè)寄存器的功能。
其次,為了實(shí)現(xiàn)多個(gè)用戶遠(yuǎn)程的訪問控制調(diào)壓器,我們使用SQL SERVER 2008數(shù)據(jù)庫作為中間媒介,現(xiàn)場的上位機(jī)通過串口服務(wù)器實(shí)時(shí)采集各個(gè)調(diào)壓閥的狀態(tài),并存入數(shù)據(jù)庫中, 而用戶可以使用我們提供的應(yīng)用程序在任何地方訪問數(shù)據(jù)庫,讀取數(shù)據(jù),從而遠(yuǎn)程監(jiān)測燃?xì)鈮毫刂葡到y(tǒng)的狀態(tài)。同理,遠(yuǎn)程用戶可以將控制命令寫入數(shù)據(jù)庫,而現(xiàn)場上位機(jī)將這些命令從數(shù)據(jù)庫讀出,并轉(zhuǎn)發(fā)給各個(gè)調(diào)壓器。
最后,根據(jù)權(quán)限的高低依次設(shè)計(jì)Admin、Controller、Observer三種用戶角色,所有遠(yuǎn)程用戶必須使用賬戶密碼進(jìn)行登錄,根據(jù)不同的權(quán)限進(jìn)行不同的操作,這樣可以保證系統(tǒng)的安全性。
2 MODBUS協(xié)議簡介
MODBUS是OSI模型第7層上的應(yīng)用層報(bào)文傳輸協(xié)議,它在連接至不同類型總線或網(wǎng)絡(luò)的設(shè)備之間提供客戶機(jī)/服務(wù)器通信[3]。MODBUS協(xié)議定義了一個(gè)與基礎(chǔ)通信層無關(guān)的簡單協(xié)議數(shù)據(jù)單元(PDU)。特定總線或網(wǎng)絡(luò)上的MODBUS協(xié)議映射能夠在應(yīng)用數(shù)據(jù)單元(ADU)上引入一些附加域,如圖2所示。
在本系統(tǒng)中,功能碼代表了上位機(jī)向調(diào)壓器指示的操作類型。根據(jù)需求,我們使用到了功能碼3,6和16,下文將簡單介紹這三種功能碼。
2.1功能碼3
功能碼3用于讀取寄存器連續(xù)快的內(nèi)容,上位機(jī)通過這條命令,結(jié)合地址表,采集調(diào)壓器當(dāng)前狀態(tài)。功能碼3的請求報(bào)文,如圖3所示。
2.2 功能碼6
功能碼6將某個(gè)值寫入遠(yuǎn)程設(shè)備的單個(gè)寄存器中,上位機(jī)通過這條命令,結(jié)合地址表,設(shè)定調(diào)壓器的狀態(tài)。在本系統(tǒng)中,我們并未直接實(shí)現(xiàn)功能碼6,而是將功能碼6作為功能碼16的一種特殊情況。
2.3 功能碼16
功能碼16用于將多個(gè)值寫入遠(yuǎn)程設(shè)備的連續(xù)寄存器塊中,上位機(jī)通過這條命令,結(jié)合地址表,連續(xù)設(shè)定調(diào)壓器的多個(gè)狀態(tài)。特別地,將寄存器數(shù)量設(shè)為1,即可作為功能碼6的實(shí)現(xiàn),用于設(shè)定單個(gè)狀態(tài)值。功能碼16的請求報(bào)文,如圖4所示。
3 上位機(jī)控制程序
上位機(jī)控制程序是在現(xiàn)場的上位機(jī)的一個(gè)進(jìn)程,由它對整個(gè)系統(tǒng)進(jìn)行實(shí)時(shí)的控制。主要有以下兩個(gè)功能:
1)運(yùn)行時(shí)不斷更新調(diào)壓器監(jiān)測數(shù)據(jù)到數(shù)據(jù)庫中,供遠(yuǎn)程用戶從數(shù)據(jù)庫中讀取。
2)從數(shù)據(jù)庫的命令表項(xiàng)里讀取遠(yuǎn)程用戶命令并執(zhí)行。
上位機(jī)控制程序使用定時(shí)器的方式,每5秒調(diào)用已實(shí)現(xiàn)并封裝的MODBUS協(xié)議的接口,采集各個(gè)調(diào)壓器的狀態(tài),并且使用ADO.NET[4]將當(dāng)前狀態(tài)更新到數(shù)據(jù)庫的CURRENT_STATUS表,如表1所示。這張表里永遠(yuǎn)只有一條數(shù)據(jù),這樣遠(yuǎn)程用戶通過不斷的讀取這張表里的第一行數(shù)據(jù),就可以實(shí)時(shí)監(jiān)控系統(tǒng)狀態(tài)。
其次,上位機(jī)控制程序使用ADO.NET從數(shù)據(jù)庫中的COMMAND_TABLE表中讀取遠(yuǎn)程用戶的命令,如表2所示。上位機(jī)控制程序通過表中DONE字段判斷這條命令是否已執(zhí)行,對于未執(zhí)行命令,上位機(jī)程序調(diào)用MODBUS庫接口,根據(jù)命令類型,調(diào)壓器編號去設(shè)定調(diào)壓器狀態(tài)。
4 數(shù)據(jù)庫表項(xiàng)和用戶角色
4.1 數(shù)據(jù)庫表項(xiàng)
在本系統(tǒng)中,數(shù)據(jù)庫用來實(shí)現(xiàn)遠(yuǎn)程用戶對調(diào)壓器的監(jiān)測和間接控制以及存放歷史數(shù)據(jù)。在數(shù)據(jù)庫中設(shè)置了四張表,分別是:
1) 歷史信息表:用于記錄實(shí)時(shí)采集的系統(tǒng)數(shù)據(jù),采用月表的形式,在每月固定時(shí)間新建一張。
2) 當(dāng)前信息表:實(shí)時(shí)記錄當(dāng)前調(diào)壓器的狀態(tài)。
3) 命令表:用于特定權(quán)限用戶寫入命令,上位機(jī)控制程序從中讀取命令并執(zhí)行。
4) 用戶表:admin用戶使用,記錄用戶信息,每注冊一個(gè)新用戶增加一個(gè)表項(xiàng)。
歷史信息表和當(dāng)前信息表都只提供給遠(yuǎn)程用戶讀取功能,而由上位機(jī)控制程序更新(寫入)。由于有五臺(tái)智能調(diào)壓器,每臺(tái)調(diào)壓器都擁有各自獨(dú)立的歷史信息表和當(dāng)前信息表。
4.2 用戶角色
根據(jù)安全性的需要,用戶分為以下三種:
1) Admin用戶:擁有最高權(quán)限,主要用于管理其他用戶??梢栽L問數(shù)據(jù)庫中所有表,只有admin能訪問用戶表。
2)Controller用戶:既可以查看歷史信息和當(dāng)前狀態(tài),即讀取數(shù)據(jù)庫中五臺(tái)設(shè)備的歷史信息表和當(dāng)前信息表,也可以寫控制命令到命令表,提供給上位機(jī)控制程序執(zhí)行,對調(diào)壓器進(jìn)行遠(yuǎn)程控制。
3)Observer用戶:權(quán)限最低,作為觀察用戶,只能訪問歷史信息表和當(dāng)前信息表,不能訪問命令表,即不能對調(diào)壓器進(jìn)行控制[5]。
5 結(jié)論
本文實(shí)現(xiàn)了一個(gè)高效整合的燃?xì)鈮毫刂葡到y(tǒng),硬件上使用串口服務(wù)器擴(kuò)展硬件上位機(jī)的串口,實(shí)現(xiàn)一帶多的功能。通訊上,使用MODBUS通訊協(xié)議,實(shí)現(xiàn)了協(xié)議中的功能碼3,功能碼6和功能碼16。使用SQL SERVER 2008數(shù)據(jù)庫作為中間媒介,實(shí)現(xiàn)了遠(yuǎn)程監(jiān)測和控制的功能。安全性上,根據(jù)權(quán)限的高低依次設(shè)計(jì)Admin、Controller、Observer三種用戶角色,保證了控制系統(tǒng)的安全性。
參考文獻(xiàn):
[1] 董小吉. 利用NPORT串口服務(wù)器組網(wǎng)解決方案[J]. 治淮, 2006(1):41-42.
[2] 王雙慶, 邢建春, 王平,等. 基于NPort串口服務(wù)器的人防工程智能設(shè)備集成[J]. 工業(yè)控制計(jì)算機(jī), 2008(8):8-10.
[3] 潘洪躍. 基于MODBUS協(xié)議通信的設(shè)計(jì)與實(shí)現(xiàn)[J]. 計(jì)量技術(shù), 2002(4):35-36.
[4] 李哲, 許樹勤, 李占青. 數(shù)據(jù)庫的選擇及ADO技術(shù)的應(yīng)用[J]. 機(jī)械工程與自動(dòng)化, 2004(3):22-24.
[5] 羅運(yùn)模. SQL Server數(shù)據(jù)庫系統(tǒng)基礎(chǔ)[M].北京:高等教育出版社, 2002.