国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

可二次開(kāi)發(fā)壓力校準(zhǔn)手操器的研究與實(shí)現(xiàn)

2020-05-04 12:36
儀器儀表用戶(hù) 2020年5期
關(guān)鍵詞:二次開(kāi)發(fā)限值串口

高 楠

(蘇州市計(jì)量測(cè)試院,江蘇 蘇州 215128)

在工業(yè)現(xiàn)場(chǎng)應(yīng)用中,需要對(duì)大量壓力儀表進(jìn)行信息錄入、數(shù)據(jù)采集、計(jì)量校準(zhǔn)和故障診斷。鋰電池供電的手持設(shè)備(手操器)是一種較好的解決方案,由于其體積小、硬件接口靈活且支持二次開(kāi)發(fā),與常規(guī)的上位機(jī)軟件和臺(tái)式儀表裝置比較更具有應(yīng)用優(yōu)勢(shì)。現(xiàn)有的手持設(shè)備主要有3種開(kāi)發(fā)模式:基于單片機(jī)液晶驅(qū)動(dòng)的底層開(kāi)發(fā),應(yīng)用μCOS和EMWIN的界面開(kāi)發(fā),以及帶有嵌入式操作系統(tǒng)的開(kāi)發(fā)(如wince系統(tǒng)、linux系統(tǒng))。手操器采用第二種方案進(jìn)行設(shè)計(jì)開(kāi)發(fā)[1,2]。

1 界面設(shè)計(jì)

可二次開(kāi)發(fā)的壓力校準(zhǔn)手操器采用μCOS-II實(shí)時(shí)操作系統(tǒng)和EMWIN界面平臺(tái)進(jìn)行開(kāi)發(fā),與常規(guī)的底層開(kāi)發(fā)方式比較,開(kāi)發(fā)更便捷易于升級(jí)和維護(hù)。以主界面對(duì)話(huà)框的初始化函數(shù)為例,可以應(yīng)用GUIBuilder軟件設(shè)計(jì)出軟件框架,再針對(duì)性地修改具體顯示屬性就能完成界面設(shè)計(jì)[3]。

//壓力計(jì)量管理系統(tǒng)對(duì)話(huà)框資源

const GUI_WIDGET_CREATE_INFO ExampleDialog[] =

{

{ FRAMEWIN_CreateIndirect, "壓力計(jì)量管理系統(tǒng)", 1000, 0, 0, 240, 320, 0, 0 },

{ TEXT_CreateIndirect, "程序主界面",

GUI_ID_TEXT0, 0, 10, 234, 30, 0},

{ BUTTON_CreateIndirect, "儀表信息",

GUI_ID_BUTTON0, 10, 50, 90, 60, 0},

{ BUTTON_CreateIndirect, "數(shù)據(jù)采集",

GUI_ID_BUTTON1, 10,130, 90, 60, 0},

{ BUTTON_CreateIndirect, "實(shí)時(shí)曲線",

GUI_ID_BUTTON2, 10,210, 90, 60, 0},

{ BUTTON_CreateIndirect, "歷史數(shù)據(jù)",

GUI_ID_BUTTON3, 130,50, 90, 60, 0},

{ BUTTON_CreateIndirect, "參數(shù)設(shè)置",

GUI_ID_BUTTON4, 130,130, 90, 60, 0},

{ BUTTON_CreateIndirect, "退出程序",

GUI_ID_BUTTON5, 130,210, 90, 60, 0},

};

由于顯示的內(nèi)容包含漢字,所以設(shè)置字體為GUI_FontHZ16,且注意在Button控件復(fù)制粘貼后,需要給后續(xù)的Button重新指定不同的ID值,不然會(huì)出現(xiàn)顯示錯(cuò)誤問(wèn)題[4],具體的設(shè)備主界面如圖1所示。壓力校準(zhǔn)手持設(shè)備,一般需要具備的功能有壓力儀表或傳感器數(shù)據(jù)的實(shí)時(shí)采集,通過(guò)MBUS、RS485、RS232、TTL或者紅外實(shí)現(xiàn)壓力儀器的校準(zhǔn),工業(yè)壓力儀表一般通過(guò)串口實(shí)現(xiàn)多點(diǎn)標(biāo)定,或者應(yīng)用HART通用命令在兩線制的基礎(chǔ)上實(shí)現(xiàn)零點(diǎn)和滿(mǎn)量程校準(zhǔn)。圖形界面往往需要設(shè)置壓力顯示的數(shù)值精度,如量程變送上限值和小數(shù)點(diǎn)位數(shù),再根據(jù)現(xiàn)場(chǎng)需要設(shè)置顯示單位,如MPa、kPa、Bar等。實(shí)時(shí)壓力曲線一般以Chart控件形式顯示,X軸是計(jì)量時(shí)間、Y軸是壓力傳感器數(shù)值。為了方便用戶(hù)觀察還可以在曲線上設(shè)置實(shí)時(shí)壓力數(shù)值顯示區(qū)域和標(biāo)題Label,用于記錄儀功能的壓力采集,往往還需要顯示出采集開(kāi)始至當(dāng)前階段的壓力最大值、最小值和平均值。如果采集多個(gè)通道的壓力值,就涉及到Y(jié)軸坐標(biāo)軸上限值設(shè)定的問(wèn)題,例如:兩個(gè)通道的量程范圍分別為0MPa~6MPa和0MPa~60MPa,通常的設(shè)置方法有兩種,第一種方式是操作者根據(jù)實(shí)際需要手工設(shè)置對(duì)應(yīng)通道的量程上限值,如分別設(shè)置6MPa和60MPa;第二種方式是操作者無(wú)需設(shè)置通道的量程上限值,控件的通道上限值設(shè)置為默認(rèn)0,這樣采集的過(guò)程中通道曲線上限值根據(jù)采集值不斷調(diào)整,將之前采集過(guò)的壓力最大值作為通道的上限值。從而避免了通道量程上限值相同,有些通道變化幅度過(guò)小情況下,曲線波動(dòng)趨勢(shì)不明顯的問(wèn)題。操作者設(shè)置的參數(shù)往往具有保持功能,儀表程序退出時(shí)將多個(gè)參數(shù)值都設(shè)置在DB數(shù)據(jù)庫(kù),儀表上電時(shí)將DB數(shù)據(jù)庫(kù)的參數(shù)值導(dǎo)入內(nèi)存中,從而避免手持儀表重新上電,并且還需要重新設(shè)置參數(shù)的問(wèn)題。

圖1 壓力計(jì)量手持設(shè)備主界面圖Fig.1 Main interface diagram of pressure metering handheld devices

2 系統(tǒng)設(shè)置

為了方便使用C或者C++的數(shù)據(jù)類(lèi)型,將常用的數(shù)據(jù)類(lèi)型定義如下:typedef unsigned int U32;調(diào)用鍵盤(pán)函數(shù),返回值如下值:#define KEY_NUM0 0x30 //對(duì)應(yīng)鍵盤(pán)“0”按鍵,等手操器共24個(gè)不同的物理按鍵對(duì)應(yīng)值。手操器當(dāng)前文件系統(tǒng)文件名長(zhǎng)度不能超過(guò)31個(gè)ASCII字符(中文占兩個(gè)ASCII字符位置),超過(guò)部分將被截?cái)?。?shù)據(jù)庫(kù)規(guī)定單個(gè)記錄最大字段數(shù)目為100個(gè),可滿(mǎn)足常規(guī)的應(yīng)用要求。系統(tǒng)可以和多種串口設(shè)備通信,串口支持7、8、9位數(shù)據(jù)位通信。如:#define UART_MODE_8B_NONE_1S 3 //8位數(shù)據(jù)位,無(wú)校驗(yàn),一位停止位。

串口設(shè)備支持普通串口、低速紅外、高速紅外、條碼掃描、GPRS通訊、CDMA通訊、RS485通訊、RS232通訊等多種應(yīng)用,并且定義了命令、數(shù)據(jù)和讀取狀態(tài)3種工作模式。手操器開(kāi)發(fā)系統(tǒng)具有強(qiáng)大的輸入法,能夠支持?jǐn)?shù)字、英文、中文輸入,中文輸入法支持拼音輸入和筆畫(huà)輸入,漢字庫(kù)標(biāo)配GB2312字庫(kù),可以選用GBK字庫(kù)。顯示液晶的坐標(biāo)系以左上角為零點(diǎn),橫向?yàn)閄軸,軸向?yàn)閅軸,只有1個(gè)象限。彩屏屏幕X軸方向像素?cái)?shù)目為240(0~239),彩屏屏幕Y軸方向像素?cái)?shù)目為320(0~319)。結(jié)構(gòu)體類(lèi)型定義主要包括:sFILE文件結(jié)構(gòu)體、sDBF數(shù)據(jù)庫(kù)結(jié)構(gòu)體、sRTC時(shí)鐘結(jié)構(gòu)體、sUART串口結(jié)構(gòu)體和sMENU菜單結(jié)構(gòu)體[5]。

圖2 實(shí)時(shí)顯示時(shí)鐘界面Fig.2 Real-time display clock interface

3 實(shí)時(shí)時(shí)鐘

手持設(shè)備采用μCOS-II和EMWIN進(jìn)行開(kāi)發(fā)編程,如圖2所示,在對(duì)話(huà)框資源頁(yè)設(shè)置顯示內(nèi)容:

const GUI_WIDGET BusinessDialog[] =

{

{ FRAMEWIN_CreateIndirect,"實(shí)時(shí)顯示時(shí)間",

1000, 0, 0, 240, 320, 0, 0 }, //標(biāo)題內(nèi)容

{ TEXT_CreateIndirect, "當(dāng)前時(shí)間:",

GUI_ID_TEXT0, 0, 20, 234, 30, 0},//文本

{ TEXT_CreateIndirect," ",

GUI_ID_TEXT1, 0, 60, 234, 30, 0},//時(shí)鐘

{ BUTTON_CreateIndirect, "退出",

GUI_ID_BUTTON0, 0,220, 90, 60, 0}, //按鈕

};

手持設(shè)備采用stm32F407主芯片,其內(nèi)部具有RTC時(shí)鐘硬件,進(jìn)行實(shí)時(shí)時(shí)鐘獲取時(shí),需調(diào)用RtcGetDate和RtcGetDate兩個(gè)主函數(shù),然后調(diào)用Lib_sprintf函數(shù),將顯示內(nèi)容進(jìn)行格式處理,后續(xù)將函數(shù)供回調(diào)函數(shù)調(diào)用以實(shí)現(xiàn)實(shí)時(shí)時(shí)鐘更新[6,7]。

void CheckUpdateTime( WM_HWIN hDlg )

{

WM_HWIN hObj;

char time[40];

U8 year,month,day,hour,minute,second;

RtcGetDate(&year,&month,&day);//日期

RtcGetTime(&hour,&minute,&second);//時(shí)鐘

Lib_sprintf(time,"20%02d-%02d-%02d %02d:%02d:%02 d",year,month,day,hour,minute,second);

hObj =WM_GetDialogItem( hDlg,

GUI_ID_TEXT1 );//獲取文本信息

TEXT_SetText( hObj,time); //更新顯示

}

4 邏輯處理

回調(diào)函數(shù)處理包括:處理觸摸屏和按鍵消息,以及界面初始化3個(gè)部分。核心的程序框架如下所示,在手操器彩色觸摸屏上可以根據(jù)用戶(hù)的動(dòng)作識(shí)別是哪個(gè)按鍵被觸發(fā),也可以根據(jù)用戶(hù)對(duì)機(jī)械按鍵的操作識(shí)別是哪個(gè)按鍵被觸發(fā);可以根據(jù)不同的觸發(fā)事件編寫(xiě)對(duì)應(yīng)的邏輯處理函數(shù)子程序,這樣就能實(shí)現(xiàn)手操器的人機(jī)交互。與傳統(tǒng)的單片機(jī)開(kāi)發(fā)不同,需要在EMWIN下對(duì)每個(gè)窗口的回調(diào)函數(shù)進(jìn)行框架設(shè)計(jì)[8]。

void ExampleCbFuntion( WM_MESSAGE*pMsg )

{

int NCode, Id;

WM_HWIN hDlg;

hDlg = pMsg->hWin;

switch ( pMsg->MsgId )

{

case WM_INIT_DIALOG:

//創(chuàng)建對(duì)話(huà)框初始化

break;

case WM_PAINT:

//窗口變?yōu)闊o(wú)效并應(yīng)重繪

break;

case WM_NOTIFY_PARENT:

//告知父窗口子窗口中發(fā)生改變-觸摸屏

Id = WM_GetId( pMsg->hWinSrc );

NCode = pMsg->Data.v;

switch ( NCode )

{

caseWM_NOTIFICATION_RELEASED:

//觸摸屏消息

switch ( Id )

{

case GUI_ID_BUTTON1:

//屏上按鈕1觸發(fā)的動(dòng)作

break;

case GUI_ID_BUTTON2:

//屏上按鈕2觸發(fā)的動(dòng)作

break;

}

break;

case WM_KEY:

//按下按鍵后發(fā)送到包含焦點(diǎn)的窗口-按鍵 switch ( ( ( WM_KEY_INFO

* )( pMsg->Data.p ) )->Key )

{

case GUI_KEY_NUM1:

//按鍵1觸發(fā)的動(dòng)作

break;

case GUI_KEY_NUM2: //按鍵2觸發(fā)的動(dòng)作 break;

}

break;

default:

WM_DefaultProc( pMsg );

}

}

5 結(jié)論

本文闡述了應(yīng)用EMWIN平臺(tái)和嵌入式實(shí)時(shí)操作系統(tǒng)μCOS-II,實(shí)現(xiàn)可二次開(kāi)發(fā)壓力校準(zhǔn)手操器的研發(fā)過(guò)程。儀表可以實(shí)現(xiàn)信息錄入、數(shù)據(jù)采集、實(shí)時(shí)曲線和歷史查詢(xún)等功能,且具備二次開(kāi)發(fā)接口。經(jīng)測(cè)試,壓力校準(zhǔn)手操器可以穩(wěn)定高效地實(shí)現(xiàn)壓力儀表的計(jì)量校準(zhǔn)和信息采集,達(dá)到了預(yù)期的設(shè)計(jì)效果。

猜你喜歡
二次開(kāi)發(fā)限值串口
ICNIRP限制電磁場(chǎng)暴露的導(dǎo)則(100kHz~300GHz)解讀
淺談AB PLC串口跟RFID傳感器的通訊應(yīng)用
西門(mén)子Operate高級(jí)編程的旋轉(zhuǎn)坐標(biāo)系二次開(kāi)發(fā)
淺談Mastercam后處理器的二次開(kāi)發(fā)
西門(mén)子Easy Screen對(duì)倒棱機(jī)床界面二次開(kāi)發(fā)
2017年北京將實(shí)施“世界最嚴(yán)”鍋爐排放標(biāo)準(zhǔn)
數(shù)字電源內(nèi)部數(shù)據(jù)傳輸?shù)拇谕ㄐ欧椒▽?shí)現(xiàn)
USB接口的多串口數(shù)據(jù)并行接收方法探索
串口技術(shù)的實(shí)物調(diào)試和虛擬仿真聯(lián)合教學(xué)模式
ANSYS Workbench二次開(kāi)發(fā)在汽車(chē)穩(wěn)定桿CAE分析中的應(yīng)用