哈 謙,王 寧,李慧青,李 燕,楊鵬程,杜軍蘭
(國(guó)家海洋技術(shù)中心,天津 300112)
Modbus協(xié)議在水質(zhì)監(jiān)測(cè)儀器中的應(yīng)用
哈 謙,王 寧,李慧青,李 燕,楊鵬程,杜軍蘭
(國(guó)家海洋技術(shù)中心,天津 300112)
介紹一種水質(zhì)監(jiān)測(cè)儀器中,單片機(jī)與觸摸屏之間應(yīng)用Modbus協(xié)議進(jìn)行串行通信的方法,簡(jiǎn)要介紹了Modbus協(xié)議,并給出了程序工作流程圖。實(shí)際應(yīng)用表明,該方案能夠?qū)崿F(xiàn)觸摸屏與單片機(jī)之間穩(wěn)定、可靠的連接。
Modbus;觸摸屏;Dynamic C;多任務(wù)處理
監(jiān)測(cè)儀器大多采用PC機(jī)作為控制終端,通過(guò)PC機(jī)上運(yùn)行的界面程序?qū)崿F(xiàn)對(duì)儀器的控制功能。觸摸屏操作簡(jiǎn)便,能夠直觀、生動(dòng)地顯示運(yùn)行參數(shù)和運(yùn)行狀態(tài),同樣可以作為控制終端使用。本文的水質(zhì)監(jiān)測(cè)儀器在原有PC機(jī)控制的基礎(chǔ)上進(jìn)行擴(kuò)展,引入Modbus通信協(xié)議,建立觸摸屏與單片機(jī)之間主從查詢應(yīng)答的通信機(jī)制,實(shí)現(xiàn)觸摸屏對(duì)監(jiān)測(cè)儀器的獨(dú)立控制。
水質(zhì)監(jiān)測(cè)儀器系統(tǒng)總體結(jié)構(gòu)如圖1所示,其中Rabbit 3000單片機(jī)作為核心處理單元,外圍連接觸摸屏、PC機(jī)以及若干測(cè)量設(shè)備。觸摸屏和PC機(jī)通過(guò)兩個(gè)RS232串行通信端口各自與單片機(jī)相連,二者獨(dú)立完成發(fā)送指令、顯示工作進(jìn)程和測(cè)量數(shù)據(jù)的功能;RS485總線掛接若干測(cè)量設(shè)備。Rabbit 3000是一款高性能的8位微處理器,支持協(xié)作式多任務(wù)處理方式對(duì)外圍連接設(shè)備的操作任務(wù)進(jìn)行處理。觸摸屏選用上海步科電氣公司的MT4000系列,其采用32位RISC CPU和精簡(jiǎn)的LINUX內(nèi)核,具有出眾的處理速度和豐富的軟件功能。
引入Modbus協(xié)議,擴(kuò)展監(jiān)測(cè)儀器的控制終端,實(shí)現(xiàn)觸摸屏對(duì)監(jiān)測(cè)儀器的控制,存在的問(wèn)題主要有兩點(diǎn):
(1)建立通信連接。觸摸屏內(nèi)嵌Modbus協(xié)議模塊,其發(fā)送、接收指令都按該協(xié)議進(jìn)行處理,而單片機(jī)沒(méi)有該協(xié)議模塊,需要按照Modbus協(xié)議的要求編寫單片機(jī)通信程序,才能使其與觸摸屏建立通信連接。
(2)數(shù)據(jù)、狀態(tài)信息的交換。觸摸屏與測(cè)量設(shè)備沒(méi)有直接相連,單片機(jī)是二者之間的橋梁:觸摸屏的工作指令發(fā)送至單片機(jī),由單片機(jī)保存并轉(zhuǎn)發(fā)至測(cè)量設(shè)備;測(cè)量設(shè)備分析現(xiàn)場(chǎng)環(huán)境的水樣,并將測(cè)量結(jié)果及工作狀態(tài)信息返回至單片機(jī)保存,在觸摸屏查詢測(cè)量結(jié)果及工作狀態(tài)時(shí),單片機(jī)根據(jù)對(duì)應(yīng)的保存信息向觸摸屏做出應(yīng)答。這要求單片機(jī)分配一定的存儲(chǔ)區(qū),在收、發(fā)Modbus協(xié)議指令的同時(shí),對(duì)存儲(chǔ)區(qū)內(nèi)的數(shù)據(jù)、狀態(tài)信息進(jìn)行相應(yīng)的讀、寫操作。
圖1 系統(tǒng)總體結(jié)構(gòu)
Modbus是工業(yè)領(lǐng)域內(nèi)全球最流行的協(xié)議之一,應(yīng)用該協(xié)議的系統(tǒng)中有一個(gè)主機(jī),可以有一個(gè)或多個(gè)從機(jī),主機(jī)發(fā)起查詢,從機(jī)進(jìn)行應(yīng)答。Modbus協(xié)議支持ASCII模式和RTU模式的數(shù)據(jù)傳輸。本文采用RTU模式,其信息幀結(jié)構(gòu)如表1所示,從機(jī)地址是主機(jī)區(qū)分從機(jī)的標(biāo)識(shí),尋址范圍是1~247,地址0留作廣播地址。功能碼告知從機(jī)執(zhí)行何種操作,從機(jī)回傳同樣的功能碼向主機(jī)確認(rèn)已執(zhí)行了該操作,或修改功能碼以告知主機(jī)出現(xiàn)錯(cuò)誤。數(shù)據(jù)區(qū)包含從機(jī)執(zhí)行操作所需的相關(guān)信息,與功能碼密切相關(guān)。例如,功能碼03告知從機(jī)讀一組保持寄存器,數(shù)據(jù)區(qū)規(guī)定了寄存器的起始地址以及讀取寄存器的數(shù)量。主機(jī)與從機(jī)通過(guò)信息幀中的校驗(yàn)碼判斷信息在傳送過(guò)程中是否出現(xiàn)差錯(cuò)[1-3]。
在本文的水質(zhì)監(jiān)測(cè)儀器中,觸摸屏與單片機(jī)之間應(yīng)用Modbus協(xié)議通信,在Modbus協(xié)議規(guī)定的主從通信機(jī)制下,觸摸屏作主機(jī),單片機(jī)作從機(jī),從機(jī)地址默認(rèn)設(shè)置為01H;結(jié)合觸摸屏發(fā)送工作指令、顯示工作狀態(tài)和測(cè)量結(jié)果的需要,擴(kuò)展部分Modbus功能碼的功能,如表2所示,功能碼01H查詢從機(jī)工作指令狀態(tài)切換開(kāi)關(guān)的狀態(tài),實(shí)時(shí)監(jiān)控從機(jī)的工作情況;功能碼03H、04H讀取從機(jī)保存的測(cè)量時(shí)間、結(jié)果等數(shù)據(jù);功能碼05H強(qiáng)置工作指令狀態(tài)切換開(kāi)關(guān)的狀態(tài),將功能元件對(duì)應(yīng)的工作指令發(fā)送至從機(jī)。
表1 Modbus RTU信息幀格式
表2 擴(kuò)展的Modbus功能碼
單片機(jī)能夠解析Modbus查詢指令并應(yīng)答,是單片機(jī)與觸摸屏建立通信連接的先決條件。按照Modbus協(xié)議的要求,觸摸屏與單片機(jī)之間的一切讀寫操作,都按照查詢應(yīng)答的機(jī)制進(jìn)行。觸摸屏根據(jù)組態(tài)軟件編輯的元件不斷發(fā)送查詢指令,單片機(jī)不斷應(yīng)答[4]。Modbus協(xié)議對(duì)數(shù)據(jù)幀格式有嚴(yán)格的定義,單片機(jī)接收查詢指令和發(fā)送應(yīng)答指令都需要符合此要求。接收數(shù)據(jù)幀時(shí),判斷從機(jī)地址碼,接收主機(jī)發(fā)給自己的指令,若計(jì)算校驗(yàn)無(wú)誤,進(jìn)而執(zhí)行存儲(chǔ)區(qū)的相關(guān)操作;而后將保存的數(shù)據(jù)、狀態(tài)信息按Modbus協(xié)議數(shù)據(jù)幀的格式封裝,發(fā)送給觸摸屏進(jìn)行應(yīng)答。
觸摸屏在本儀器中的主要作用是,發(fā)送各項(xiàng)工作指令,監(jiān)控儀器運(yùn)行狀態(tài),并顯示測(cè)量結(jié)果和時(shí)間等信息,涉及到的元件包括:位狀態(tài)切換開(kāi)關(guān)元件用于發(fā)送工作指令,對(duì)應(yīng)元件類型0X;數(shù)值顯示元件顯示測(cè)量結(jié)果及相關(guān)信息,對(duì)應(yīng)元件類型3X或4X。相關(guān)元件的數(shù)據(jù)、狀態(tài)信息交換過(guò)程如圖2所示。點(diǎn)擊位狀態(tài)切換開(kāi)關(guān),開(kāi)關(guān)狀態(tài)由OFF切換到ON,觸摸屏發(fā)送強(qiáng)置開(kāi)關(guān)狀態(tài)指令,單片機(jī)解析,并在存儲(chǔ)區(qū)內(nèi)將對(duì)應(yīng)的工作標(biāo)志位置位,當(dāng)單片機(jī)向測(cè)量設(shè)備發(fā)指令時(shí),在標(biāo)志位存儲(chǔ)區(qū)域內(nèi)檢測(cè)到該標(biāo)志位,則將相應(yīng)的工作指令發(fā)送至測(cè)量設(shè)備。每個(gè)位狀態(tài)切換開(kāi)關(guān)的狀態(tài)都可以由一個(gè)bit位標(biāo)識(shí),因此單片機(jī)內(nèi)一個(gè)字節(jié)的存儲(chǔ)區(qū)可以與8個(gè)位狀態(tài)切換開(kāi)關(guān)相對(duì)應(yīng)。單片機(jī)讀取測(cè)量設(shè)備在工作過(guò)程中產(chǎn)生的數(shù)據(jù)和狀態(tài)信息,并保存在存儲(chǔ)區(qū),接收到觸摸屏查詢數(shù)據(jù)或狀態(tài)的指令時(shí),以存儲(chǔ)區(qū)內(nèi)的對(duì)應(yīng)信息應(yīng)答。這里涉及到了觸摸屏頁(yè)面顯示的元件與單片機(jī)存儲(chǔ)區(qū)之間的地址映射:
圖2 數(shù)據(jù)、狀態(tài)信息交換
(1)開(kāi)關(guān)元件與狀態(tài)標(biāo)志位存儲(chǔ)區(qū)之間的地址映射
(2)數(shù)值顯示元件與數(shù)據(jù)存儲(chǔ)區(qū)之間的地址映射
建立起明確的地址映射關(guān)系,才能在收發(fā)指令過(guò)程中,準(zhǔn)確地對(duì)存儲(chǔ)區(qū)進(jìn)行讀、寫操作。
圖3 主程序工作流程
圖4 處理觸摸屏查詢指令的程序流程
本文的單片機(jī)程序應(yīng)用Dynamic C集成開(kāi)發(fā)環(huán)境編寫。Dynamic C通過(guò)costate程序段支持分時(shí)多任務(wù)處理[5-6],每個(gè)單片機(jī)外圍設(shè)備的操作任務(wù)與一個(gè)程序段相對(duì)應(yīng),多個(gè)程序段組成單片機(jī)所有外圍設(shè)備的操作任務(wù)。主程序工作流程如圖3所示。單片機(jī)上電初始化,然后進(jìn)入while循環(huán),分時(shí)處理各個(gè)外圍設(shè)備的操作任務(wù)。
初始化部分分配狀態(tài)標(biāo)志位、測(cè)量數(shù)據(jù)等信息的存儲(chǔ)空間,初始狀態(tài)標(biāo)志位全部為0,對(duì)應(yīng)位狀態(tài)切換開(kāi)關(guān)的OFF狀態(tài),測(cè)量數(shù)據(jù)區(qū)內(nèi)的數(shù)據(jù)為空,同時(shí)將串口初始化,主要操作包括:打開(kāi)串口,刷新發(fā)送、接收緩沖區(qū),并對(duì)串口通信參數(shù)和相關(guān)寄存器進(jìn)行設(shè)置。觸摸屏與單片機(jī)的串口通信參數(shù)必須一致,本系統(tǒng)中通信參數(shù)設(shè)置如下:
波特率:9600
數(shù)據(jù)位:8
奇偶校驗(yàn):無(wú)
停止位:1
單片機(jī)對(duì)觸摸屏查詢指令的處理作為操作任務(wù)組成一個(gè)程序段,檢測(cè)來(lái)自觸摸屏的指令,按照Modbus協(xié)議解析指令,執(zhí)行相關(guān)存儲(chǔ)區(qū)操作,并發(fā)送應(yīng)答信息。處理觸摸屏查詢指令的程序流程如圖4所示。
以位狀態(tài)切換開(kāi)關(guān)置位操作為例說(shuō)明單片機(jī)對(duì)觸摸屏查詢指令的應(yīng)答處理過(guò)程,從機(jī)地址01H,功能碼05H,位狀態(tài)切換開(kāi)關(guān)元件0X15,Modbus協(xié)議中規(guī)定該類型元件起始地址為0,F(xiàn)F00H與開(kāi)關(guān)元件的ON狀態(tài)對(duì)應(yīng),0000H與OFF狀態(tài)對(duì)應(yīng),因此十六進(jìn)制置位地址為000EH,置位命令為FF00H,觸摸屏發(fā)送查詢指令(如表3)。
表3 查詢指令碼
表4 應(yīng)答指令碼
單片機(jī)收到查詢指令,按照?qǐng)D4所示流程,判斷從機(jī)地址并計(jì)算校驗(yàn)值,符合條件再根據(jù)功能碼進(jìn)一步解析指令,由置位地址000EH尋址到單片機(jī)存儲(chǔ)區(qū)對(duì)應(yīng)的標(biāo)志位,由置位命令FF00H對(duì)該標(biāo)志位執(zhí)行置位操作,根據(jù)Modbus對(duì)應(yīng)答指令的要求,發(fā)送應(yīng)答指令(如表4)。
單片機(jī)分時(shí)處理各外圍設(shè)備的操作任務(wù),在單片機(jī)進(jìn)入處理測(cè)量設(shè)備操作任務(wù)的程序段時(shí),檢測(cè)到存儲(chǔ)區(qū)內(nèi)該標(biāo)志位被置位,發(fā)送對(duì)應(yīng)的工作指令到測(cè)量設(shè)備。這里需要注意的是,一個(gè)字節(jié)的存儲(chǔ)區(qū)內(nèi)保存了8個(gè)開(kāi)關(guān)元件的狀態(tài),因此在對(duì)標(biāo)志位進(jìn)行置位、復(fù)位操作時(shí),不能影響到該存儲(chǔ)區(qū)域內(nèi)相鄰存儲(chǔ)位的狀態(tài)。
監(jiān)測(cè)儀器的多臺(tái)測(cè)量設(shè)備是獨(dú)立的,相互之間的工作情況不受影響;一臺(tái)測(cè)量設(shè)備的多個(gè)操作不能同時(shí)進(jìn)行,在一臺(tái)設(shè)備執(zhí)行某一操作時(shí),用戶發(fā)送該設(shè)備的其他操作指令是無(wú)效的,該設(shè)備無(wú)法進(jìn)行響應(yīng)。為避免用戶誤操作,設(shè)置同一測(cè)量設(shè)備的多個(gè)位狀態(tài)切換開(kāi)關(guān)條件使能,在執(zhí)行某一操作時(shí),屏蔽其他操作;該操作完成時(shí),清除對(duì)其他操作的屏蔽[7]。
本文提出了一種Modbus協(xié)議在水質(zhì)監(jiān)測(cè)儀器中的應(yīng)用方案。該系統(tǒng)已成功應(yīng)用于近海水質(zhì)監(jiān)測(cè)中,實(shí)際應(yīng)用情況良好。觸摸屏操作簡(jiǎn)便、顯示直觀,Modbus協(xié)議在單片機(jī)中得到了實(shí)現(xiàn),單片機(jī)與觸摸屏之間的通信連接穩(wěn)定、可靠,具有典型的應(yīng)用價(jià)值。
[1]Modicon Inc.Modicon Modbus Protocol Reference Guide[Z],1996.
[2]李明偉,郭廣峰,黃鴿.PIC單片機(jī)與觸摸屏串行通信的MODBUS協(xié)議實(shí)現(xiàn)[J].電子技術(shù)應(yīng)用,2005(9):40-42.
[3]路平,薛樹琦.Modbus協(xié)議下單片機(jī)與eView觸摸屏的通信方法[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2007(1):46-48.
[4]尤慧芳.用MODBUS實(shí)現(xiàn)觸摸屏與單片機(jī)的通信[J].工業(yè)控制計(jì)算機(jī),2008,21(12):63-66.
[5]Rabbit Semiconductor.Rabbit 3000 Microprocessor Designer’s Handbook[Z],2006.
[6]Rabbit Semiconductor.Dynamic CUser’s Manual[Z],2007.
[7]KincoAutomation(Shanghai)Ltd.EV5000 使用手冊(cè)[Z],2009.
Application of Modbus Protocol in the Water Quality Monitoring Equipment
HA Qian,WANG Ning,LI Hui-qing,LI Yan,YANG Peng-cheng,DU Jun-lan
(National Ocean Technology Center,Tianjin 300112,China)
A serial communication method is introduced.With this method,the microcontroller communicates with the touch screen by means of Modbus protocol in the water quality monitoring equipment.At the same time,Modbus protocol is briefly introduced and the flow chart of the program is given.The application shows that this method could achieve stable and reliable connections between the microcontroller and the touch screen.
Modbus;touch screen;Dynamic C;multitasking process
TP311;P71
B
1003-2029(2011)04-0042-04
2011-01-18
國(guó)家高技術(shù)研究發(fā)展計(jì)劃(863計(jì)劃)資助項(xiàng)目(2007AA092101,2010AA09Z101);海洋公益性行業(yè)科研專項(xiàng)經(jīng)費(fèi)資助項(xiàng)目(200805014)