許 萌,李 斌,姚 駿
(上海大學(xué)機(jī)電工程與自動(dòng)化學(xué)院,上海 200072)
MCGS組態(tài)環(huán)境下的MSP430單片機(jī)驅(qū)動(dòng)開發(fā)
許 萌,李 斌,姚 駿
(上海大學(xué)機(jī)電工程與自動(dòng)化學(xué)院,上海 200072)
MCGS是一款基于Windows平臺(tái)的上位機(jī)監(jiān)控組態(tài)軟件系統(tǒng),其包含了多種通用設(shè)備驅(qū)動(dòng)程序。但在實(shí)際項(xiàng)目中,有時(shí)MCGS組態(tài)軟件所提供的設(shè)備驅(qū)動(dòng)程序也無法滿足用戶的需求。因此,MCGS提供了一款腳本驅(qū)動(dòng)開發(fā)工具。用戶可通過該工具便捷地創(chuàng)建符合項(xiàng)目需求的設(shè)備驅(qū)動(dòng)構(gòu)件。腳本驅(qū)動(dòng)開發(fā)工具內(nèi)含大量的庫函數(shù),能夠在充分滿足用戶需求的同時(shí),使得驅(qū)動(dòng)的開發(fā)更加便捷?;贛CGS組態(tài)軟件的MSP430單片機(jī)的驅(qū)動(dòng)構(gòu)件,根據(jù)自助洗車機(jī)的實(shí)際需求進(jìn)行開發(fā)。首先,制定了通信協(xié)議;然后,根據(jù)項(xiàng)目需求設(shè)置相應(yīng)的設(shè)備通道,編寫了所需的設(shè)備命令;最后,通過驅(qū)動(dòng)的安裝和掛接,實(shí)現(xiàn)了設(shè)備驅(qū)動(dòng)的開發(fā)。實(shí)際運(yùn)行結(jié)果表明了該驅(qū)動(dòng)構(gòu)件的高效性、便捷性。該研究為常規(guī)的驅(qū)動(dòng)程序設(shè)計(jì)提供了思路。
監(jiān)控系統(tǒng); 觸摸屏; 單片機(jī); 上位機(jī); 人機(jī)界面; MCGS組態(tài)軟件; 腳本驅(qū)動(dòng); 通信
隨著計(jì)算機(jī)技術(shù)和網(wǎng)絡(luò)技術(shù)的飛速發(fā)展,傳統(tǒng)的顯示儀表、信號(hào)指示燈、操作按鈕等已不能完全滿足工業(yè)自動(dòng)化的需要。觸摸屏作為一種新型的人機(jī)界面,從一出現(xiàn)就備受關(guān)注。其具有簡(jiǎn)單易用、功能強(qiáng)大、穩(wěn)定性優(yōu)異的特點(diǎn),非常適用于工業(yè)環(huán)境。
目前市場(chǎng)上的觸摸屏產(chǎn)品多種多樣。由北京昆侖通態(tài)自動(dòng)化軟件科技有限公司開發(fā)的觸摸屏使用較為廣泛。其開發(fā)的MCGS軟件也具有穩(wěn)定性高、成本低、速度快、功能強(qiáng)的特點(diǎn)。MCGS[1]作為一款上位機(jī)監(jiān)控軟件,支持多種運(yùn)行環(huán)境,使用方便、快捷。
本文基于MCGS的MSP430單片機(jī)驅(qū)動(dòng)構(gòu)件,以自助洗車機(jī)項(xiàng)目為背景,通過腳本驅(qū)動(dòng)開發(fā)工具進(jìn)行開發(fā)。
自助洗車機(jī)采用北京昆侖通態(tài)研發(fā)的型號(hào)為TPC7062Ti的嵌入式一體化觸摸屏來進(jìn)行人機(jī)交互。自助洗車機(jī)讀卡器板采用超低功耗單片機(jī)MSP430F5438A[2]。
MSP430與觸摸屏的通信框圖如圖1所示。MSP430單片機(jī)通過RS-232串口通信與觸摸屏進(jìn)行連接,實(shí)現(xiàn)觸摸屏對(duì)自助洗車機(jī)[3]讀卡器板的數(shù)據(jù)傳輸和監(jiān)控,完成自助洗車機(jī)的人機(jī)交互。
圖1 通信框圖
以往的MCGS驅(qū)動(dòng)構(gòu)件開發(fā)大都采用 Active DLL 構(gòu)件的方式來實(shí)現(xiàn)設(shè)備驅(qū)動(dòng)程序,然后通過調(diào)用一些接口函數(shù)來實(shí)現(xiàn)用戶所需的功能。通過使用規(guī)范的OLE接口,使驅(qū)動(dòng)程序完成在組態(tài)軟件中的掛接。這樣,在組態(tài)軟件中就可以方便地使用驅(qū)動(dòng)構(gòu)件。OLE是一種面向?qū)ο蟮募夹g(shù)。用戶可以使用VB、VC等語言編制MCGS的設(shè)備驅(qū)動(dòng)程序,實(shí)現(xiàn)對(duì)驅(qū)動(dòng)構(gòu)件的開發(fā)[4-6]。
本文的驅(qū)動(dòng)構(gòu)件采用腳本驅(qū)動(dòng)開發(fā)。該版本驅(qū)動(dòng)由MCGS編程語言實(shí)現(xiàn)的驅(qū)動(dòng)程序。相對(duì)于采用Active DLL構(gòu)件方式實(shí)現(xiàn)的驅(qū)動(dòng)程序,腳本驅(qū)動(dòng)的開發(fā)更方便、快捷,而且具有開發(fā)步驟標(biāo)準(zhǔn)和驅(qū)動(dòng)構(gòu)件可移植性好的優(yōu)點(diǎn)。MCGS腳本驅(qū)動(dòng)的開發(fā)使用了其自帶的腳本編程語言。其包含了大量的庫函數(shù),不僅滿足了用戶的功能需求,而且提供了必要的容錯(cuò)處理。這就不必像以往的設(shè)備驅(qū)動(dòng)開發(fā)那樣考慮過多的技術(shù)細(xì)節(jié),也不必花費(fèi)過多的時(shí)間學(xué)習(xí)大量的接口技術(shù)和計(jì)算機(jī)技術(shù),切實(shí)提高了開發(fā)效率。這些優(yōu)點(diǎn)都體現(xiàn)了腳本驅(qū)動(dòng)的人性化。用戶使用腳本驅(qū)動(dòng)工具進(jìn)行驅(qū)動(dòng)程序開發(fā),可以節(jié)省大量時(shí)間來提高通信效率[7]。
對(duì)MCGS設(shè)備驅(qū)動(dòng)的開發(fā)有以下2個(gè)步驟:
①通信協(xié)議的制定;
②腳本驅(qū)動(dòng)程序的設(shè)計(jì)。
通信協(xié)議是指通信雙方為了達(dá)到通信目標(biāo)所必須遵守的規(guī)范和法則。
通信規(guī)則:觸摸屏每隔1 s發(fā)送1次命令到讀卡器板。如果觸摸屏沒有操作,即持續(xù)發(fā)送狀態(tài)查詢命令;否則,發(fā)送對(duì)應(yīng)的操作命令。
信號(hào)幀格式包括幀頭、長(zhǎng)度、當(dāng)前頁、操作類型、數(shù)據(jù)、校驗(yàn)及幀尾。但在具體的項(xiàng)目需求下,信號(hào)幀的內(nèi)容視情況有所變動(dòng)。
在本系統(tǒng)中,所制定的通信協(xié)議信號(hào)幀格式如表1所示[8]。
表1 信號(hào)幀格式
①幀頭。
幀頭用來判斷本幀是否屬于串口通信協(xié)議,同時(shí)也用來作為是否通信的標(biāo)志。自助洗車機(jī)的項(xiàng)目中規(guī)定,幀頭占2 B。當(dāng)幀頭為0xFA0xFA時(shí),表示觸摸屏發(fā)送數(shù)據(jù)到讀卡器板;當(dāng)幀頭為0xF50xF5時(shí),表示讀卡器板發(fā)送數(shù)據(jù)到觸摸屏。
②長(zhǎng)度。
長(zhǎng)度用來描述數(shù)據(jù)包含的字節(jié)數(shù)。在通信雙方進(jìn)行通信時(shí),通過長(zhǎng)度來檢驗(yàn)通信的數(shù)據(jù)。數(shù)據(jù)長(zhǎng)度占2 B。
③當(dāng)前頁。
當(dāng)前頁用來顯示觸摸屏的當(dāng)前頁數(shù)信息。觸摸屏發(fā)送的每個(gè)命令都帶有當(dāng)前頁數(shù)信息,讀卡器板應(yīng)答時(shí)也帶有頁數(shù)。
④操作類型。
通信中,需要傳輸不同的幀類型,有狀態(tài)查詢、應(yīng)答、初始化等。幀傳輸?shù)膬?nèi)容由操作類型給出,它在幀中占1 B。本項(xiàng)目中的操作類型及代碼如表2所示。
表2 操作類型及代碼
⑤數(shù)據(jù)。
所傳輸數(shù)據(jù)的內(nèi)容、長(zhǎng)度由操作類型決定。
⑥校驗(yàn)。
校驗(yàn)采用求和校驗(yàn),可以保證數(shù)據(jù)傳輸?shù)臏?zhǔn)確率。
⑦幀尾。
幀尾表示該信號(hào)幀的結(jié)束,占1 B。本項(xiàng)目中規(guī)定幀尾為0xF0。
MCGS腳本驅(qū)動(dòng)程序設(shè)計(jì)主要步驟如下:
①定義設(shè)備屬性;
②建立設(shè)備通道;
③編寫設(shè)備命令;
④編寫自定義子函數(shù);
⑤編輯設(shè)備腳本。
完成以上步驟后,對(duì)腳本程序進(jìn)行檢查調(diào)試,并生成1個(gè)MDR文件,用于腳本的發(fā)布與使用。
3.2.1 定義設(shè)備屬性
定義設(shè)備屬性就是對(duì)體現(xiàn)設(shè)備驅(qū)動(dòng)特性的變量進(jìn)行設(shè)置。變量包括設(shè)備地址以及通信延時(shí)。設(shè)備屬性對(duì)于所有的設(shè)備腳本都是可見的,而且只能作為1個(gè)全局常量,能讀不能寫。在本次自助洗車機(jī)項(xiàng)目中,對(duì)參數(shù)設(shè)置沒有特殊要求。
3.2.2 建立設(shè)備通道
建立設(shè)備通道就是設(shè)置驅(qū)動(dòng)所需的內(nèi)部變量。根據(jù)自助洗車機(jī)項(xiàng)目的需求,定義了如表3所示的設(shè)備通道。表3中,數(shù)據(jù)類型均為整型。
表3 設(shè)備通道
當(dāng)子設(shè)備被添加到父設(shè)備下時(shí),通過設(shè)備通道驅(qū)動(dòng)程序,可以將組態(tài)軟件中的實(shí)時(shí)數(shù)據(jù)庫與設(shè)備通道相連接,以實(shí)現(xiàn)數(shù)據(jù)的交換。
3.2.3 編寫設(shè)備命令
設(shè)備命令是用來對(duì)腳本驅(qū)動(dòng)進(jìn)行控制的程序。通過腳本驅(qū)動(dòng)開發(fā)工具強(qiáng)大的函數(shù)庫,可以更加快捷地進(jìn)行數(shù)據(jù)的命令傳遞和收發(fā)操作。結(jié)合此次項(xiàng)目的需求,設(shè)備命令如表4所示。表4中,各命令所含參數(shù)均為Retry(整型)和WaitDelay(整型)。
表4 設(shè)備命令
以SendAdBlueCommand設(shè)備命令為例。
!GetIntChannelValueByName(“ButtonID”,buttonID)
!GetIntChannelValueByName(“MoneyHigh”,moneyHigh )
!GetIntChannelValueByName(“MoneyLow”,moneyLow)
!GetIntChannelValueByName(“UseTimeHigh”,useTimeHigh)
!GetIntChannelValueByName(“UseTimeLow”,useTimeLow)
SetServiceParameter(bytCommand,buttonID,moneyHigh,moneyLow,useTimeHigh,useTimeLow,Retry,WaitDelay)
通過調(diào)用“!GetIntChannelValueByName”函數(shù),讀取“ButtonID”、“MoneyHigh”、“MoneyLow”、“UseTimeHigh”、“UseTimeLow”這5個(gè)設(shè)備通道的值,并把它們保存到對(duì)應(yīng)的整型變量中。然后,通過調(diào)用自定義子函數(shù)“SetServiceParameter”來設(shè)置服務(wù)參數(shù)。
3.2.4 編寫自定義子函數(shù)
將自定義子函數(shù)看作1個(gè)模塊,以完成特定的服務(wù)或任務(wù)。自定義子函數(shù)與一般編程語言中的子函數(shù)功能類似,通過函數(shù)對(duì)輸入進(jìn)行處理,然后返回1個(gè)值供用戶使用。此次項(xiàng)目中的自定義子函數(shù)如表5所示。表5中,子函數(shù)所含參數(shù)均為整型。
表5 自定義子函數(shù)
以“SetServiceParameter”子函數(shù)為例。
①首先編寫通信所需的幀結(jié)構(gòu),設(shè)置相應(yīng)的幀頭、長(zhǎng)度、操作類型等。
②編寫發(fā)送和接收數(shù)據(jù)的方式。
tmpInteger=1
//設(shè)置判斷標(biāo)志位為1
while tmpInteger<=Retry
nReturn = !DevWriteAndReadByteArr(SendByteArr,intOutBufferLength ,ReceiveBuffer,intInBufferLength ,WaitDelay)
//往串口中發(fā)送幀,發(fā)送完畢
后,再從父設(shè)備讀取數(shù)據(jù),如果已經(jīng)讀到intInBufferLength
長(zhǎng)度字節(jié)或者WaitDelay毫秒尚未讀取完畢,則返回
if nReturn <> intInBufferLength then
//如果WaitDelay毫秒后
未讀取完畢,且是最后一次嘗試重新通信,則表示通信出錯(cuò)
if tmpInteger=Retry then
!SetSingleChannelValueByName(“通信狀態(tài)”,2)
!SetSingleChannelValueByName(“CommunicationRetry”,Retry)
exit
endif
else
nReturn = ProcessCommandResponse(intInBufferLength)
//讀取完畢后調(diào)用子函數(shù)進(jìn)行命令應(yīng)答處理
if nReturn=0 then//如果返回值為0則表示通信成功
!SetSingleChannelValueByName(“通信狀態(tài)”,0)
!SetSingleChannelValueByName(“CommunicationRetry”,0)
exit
endif
endif
tmpInteger=tmpInteger+1
endwhile
3.2.5 編輯設(shè)備腳本
設(shè)備腳本包括初始化腳本、單通道寫腳本、采集腳本和退出腳本。
①初始化腳本即對(duì)腳本內(nèi)的一些變量進(jìn)行初始化,并向一些端口賦初值。本項(xiàng)目對(duì)此并沒有特殊的要求。
②單通道寫腳本可以實(shí)現(xiàn)向設(shè)備發(fā)送命令的功能。但與設(shè)備命令有所區(qū)別。如果使用設(shè)備命令,則在組態(tài)環(huán)境下需要顯示調(diào)用設(shè)備命令。通常要添加1個(gè)按鈕構(gòu)件,并在按鈕構(gòu)件的腳本調(diào)用設(shè)備命令。而對(duì)于單通道寫腳本,只需要在組態(tài)環(huán)境下將實(shí)時(shí)數(shù)據(jù)對(duì)象關(guān)聯(lián)到編輯框中即可。每次改變數(shù)據(jù)后,可在運(yùn)行環(huán)境下隱式地調(diào)用單通道寫腳本。本項(xiàng)目不需要使用單通寫腳本。
③采集腳本在每個(gè)特定的時(shí)間周期到達(dá)之后,對(duì)變量的值進(jìn)行采集,并上報(bào)處理。本項(xiàng)目使用采集腳本來進(jìn)行命令查詢[9]。
④退出腳本總是在實(shí)用程序的最后被運(yùn)行,用來執(zhí)行運(yùn)行結(jié)束后退出組態(tài)環(huán)境的操作,同時(shí)進(jìn)行一些清理操作。本項(xiàng)目對(duì)此沒有特定要求。
腳本驅(qū)動(dòng)的發(fā)布就是將腳本驅(qū)動(dòng)相關(guān)文件放置到適當(dāng)?shù)哪夸浵?以確保MCGS組態(tài)軟件可被調(diào)用。開發(fā)好的腳本驅(qū)動(dòng)相關(guān)文件為1個(gè)MDR主文件。如果驅(qū)動(dòng)具有幫助功能,則還會(huì)多1個(gè)幫助文件。發(fā)布開發(fā)好的腳本驅(qū)動(dòng)有以下2種方法[10]。
①將驅(qū)動(dòng)相關(guān)文件拷貝到MCGS安裝目錄 “ProgramDrivers”路徑下的任意文件夾。
②使用設(shè)備管理對(duì)話框中的安裝功能,完成安裝。但這種方法不會(huì)拷貝腳本驅(qū)動(dòng)的幫助文件。
在MCGS組態(tài)軟件中使用腳本驅(qū)動(dòng)。首先,將腳本驅(qū)動(dòng)安裝到設(shè)備管理的設(shè)備工具箱中。然后,在設(shè)備串口下,對(duì)串口父設(shè)備進(jìn)行基本設(shè)置,如波特率、COM口等。最后,在父設(shè)備下掛接已經(jīng)發(fā)布安裝的腳本驅(qū)動(dòng)子設(shè)備,并對(duì)設(shè)備通道及其相對(duì)應(yīng)的數(shù)據(jù)對(duì)象進(jìn)行連接。
將采用MCGS組態(tài)軟件開發(fā)的觸摸屏用作上位機(jī)監(jiān)控,具有系統(tǒng)配置簡(jiǎn)便、開發(fā)周期短、能夠適應(yīng)各種設(shè)備、可靠性高等特點(diǎn)。利用昆侖通泰研發(fā)的腳本驅(qū)動(dòng)開發(fā)工具,用戶可以更加高效地開發(fā)設(shè)備驅(qū)動(dòng)。
該方法也可以廣泛應(yīng)用于工程中的腳本驅(qū)動(dòng)。經(jīng)過實(shí)際運(yùn)行,證明了本文開發(fā)的基于MCGS的MSP430單片機(jī)驅(qū)動(dòng)構(gòu)件具有良好的通信效果,數(shù)據(jù)傳遞快速、可靠;在滿足項(xiàng)目要求的同時(shí),也更加地方便、快捷。該方法為開發(fā)適應(yīng)實(shí)際項(xiàng)目需求的設(shè)備驅(qū)動(dòng)程序提供了思路。
[1] 包建華,丁啟勝,張興奎.工控組態(tài)軟件MCGS及其應(yīng)用[J].工礦自動(dòng)化,2007(3):92.
[2] 向楠,黃道業(yè).基于MSP430F5438A單片機(jī)的磁懸浮控制器設(shè)計(jì)[J].長(zhǎng)江大學(xué)學(xué)報(bào)(自然科學(xué)版),2014,11(7):64-66.
[3] 楊一帆.基于物聯(lián)網(wǎng)的自助洗車機(jī)遠(yuǎn)程監(jiān)控系統(tǒng)的研究與設(shè)計(jì)[D].上海:上海大學(xué),2017.
[4] 王曉光,鄭萍,馬巧娟,等.基于 MCGS 的 51系列單片機(jī)通用驅(qū)動(dòng)程序設(shè)計(jì)[J].儀表技術(shù)與傳感器,2010(5):38.
[5] 潘崢嶸,張巖,郭凱.基于MCGS的C8051F020單片機(jī)驅(qū)動(dòng)程序的設(shè)計(jì)與應(yīng)用[J].微計(jì)算機(jī)應(yīng)用,2009,30(2):48-52.
[6] 包建華,張興奎,胡福年.MCGS 平臺(tái)下 51 單片機(jī)驅(qū)動(dòng)構(gòu)件開發(fā)與應(yīng)用[J].自動(dòng)化儀表,2011,32(11):35.
[7] 張能,張曉思.基于MCGS的飲用水水質(zhì)安全監(jiān)測(cè)系統(tǒng)的軟件設(shè)計(jì)[J].自動(dòng)化與儀器儀表,2014(12):61.
[8] 桂江華,邵健,潘邈.一種高可靠串行通信協(xié)議[J].電子與封裝,2016,16(2):40.
[9] 黎志剛,王俊元,劉波.基于MCGS的SMC電動(dòng)執(zhí)行器控制方法研究[J].制造業(yè)自動(dòng)化,2014,36(7):16.
[10]王傳艷,陳婧.MCGS觸摸屏組態(tài)控制技術(shù)[M].北京:北京師范大學(xué)出版社,2015.
DevelopmentoftheDriversofMSP430MicrocontrollerinMCGSConfigurationEnvironment
XU Meng,LI Bin,YAO Jun
(College of Mechatronics Engineering and Automation,Shanghai University,Shanghai 200072,China)
MCGS is a Windows based host computer monitoring configuration software system,which contains a variety of universal device drivers.But in the actual projects,the device drivers provided by MCGS configuration software are sometimes unable to meet the needs of users,so a set of script driven development tools is provided in MCGS,through which the user can conveniently create the device driver component needed.Script driven development tools contain a large number of library functions,which can fully meet the needs of users; in addition,it also makes the development of drivers more convenient and efficient.The driving component of MSP430 microcontroller based on MCGS configuration software is developed with the background of the actual needs of self-service car washing machine.Firstly,the communication protocol is setup.Then the corresponding equipment channel is set according to the requirements of the project,and the required device commands are written.Finally,through the installation and connection of driver,the development of device drivers is implemented.The results of actual operation demonstrate the efficiency and convenience of the driver development.The study provides a new idea for the general driver design.
Monitoring system; Touch screen; Microcontroller; Host computer; Human-machine interface; MCGS configuration software; Script-driven; Communication
修改稿收到日期:2017-06-14
許萌(1993—),男,在讀碩士研究生,主要從事儀表自動(dòng)化方向的研究,E-mail:271323088@qq.com;李斌(通信作者),男,博士,教授,主要從事檢測(cè)及自動(dòng)化方向的研究,E-mail:sulibin@shu.edu.cn
TH-39;TP273+.5
A
10.16086/j.cnki.issn1000-0380.201712012