货车油量监控系统设计及基于Windows CE上位机软件的实现

2014-01-15 09:59魏玉晶刘锐锐
电子设计工程 2014年16期
关键词:油量调用上位

魏玉晶,刘锐锐

(长安大学 信息工程学院,陕西 西安 710064)

载货汽车是中国汽车产品中的传统主力产品,它被用于城市与城市之间货物的运输。在当今时代的背景下,由于汽油燃料的价格飞速的上涨,导致运输成本增加。在货车司机之中,存在因私利偷油的行为更加加重了运输的成本,为了防止这一行为的发生,设计了货车油量监控系统。在国外,并没有此类系统的相关设计,在国内,此类系统是一种新型设计,参考信息有限。

1 系统设计

货车运输油量实时监控系统主要由三大部分组成,主要包括下位机、中位机、上位机。如图1所示。系统主要流程为:下位机用于信号采集,主要包括的物理器件有GPS信号接收器、流量传感器和液位传感器,完成对信号的采集功能,它将采集到的信息交于中位机,中位机是用于信号传输部分,主要包括的物理器件有ZigBee模块和GSM短信模块,完成信号的传输功能,它确保信息可靠地传输到上位机,上位机是用于信息的处理与综合显示,主要包括的物理器件有监控设备和手机,完成信息的综合处理、判断油量正常使用与否和异常情况下及时报警的功能,上位机是ARM 6410嵌入式开发平台,它提供了触摸屏、7笗宽屏彩色液晶面板、移动终端的电源、USB:2PORT、UART:4Ports、以太网接口:CS8900、SD/MMC:1 PORT、HDD:1 PORT、VIDEO (TV-OUT):1PORT、VGA:1PORT。

2 开发环境

嵌入式操作系统的选取:

1)Windows CE

图1 货车运输油量实时监控的三大组成部分Fig.1 The three components of Trucking oil real-time monitoring

Windows CE[1]是Windows的嵌入式系统版本,具有类似Windows风格的用户界面以与Windows环境下的软件很方便地接口。但是,它的代码是不开放的。

2)Linux

Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于Posix和Unix的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的Unix工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

3)μC Linux

μC Linux是一个缩减的Linux系统,特别适合于用在不需要内存管理的高级单片嵌入式系统上。

4)eCOS

eCOS是一个代码开放的嵌入式操作系统,具有良好的系统功能和应用支持,可以在许多高级单片上运行,eCOS最大的特点是内核可配置。

5)VxWorks

VxWorks是一个功能完善的嵌入式操作系统,但是它的代码也是不开放的,大多数用于军工方面。

6)RTX51

RTX51是专门针对8051设计的操作系统,代码紧凑,体积小巧。已经在很多应用中证明这是一个成功的8位单片机的操作系统,代码完全开放。

7)μC/OS

μC/OS是一个特别风格的嵌入式操作系统,它有多种版本,可以适应从x86到8051的各种不同类型不同规模的嵌入式系统,代码开放。但是,它的一些改进版本,开始放弃代码开放的原则。

文中选择了Windows CE操作系统,因为它具有类似Windows风格的友好用户界面以及拥有与其相配的EVC编程软件,更好的符合货车油量监控系统的设计要求。

3 上位机软件的需求分析

为了完成在货车运输过程中对油量的实时监控,该系统需要具有方便携带、快捷监督等优势,所以决定上位机选择RAM6410开发平台;与此同时为了直观的显示数据和油量的变化,选择运用EVC编程软件来编写友好界面;最后为了实现报警机制,选择短信报警与音频报警两种方式。

4 概要设计

上位机主要完成了4个功能模块,功能模块框图如图2所示。

图2 功能模块框图Fig.2 Black diagram of function module

第一个模块:显示实时数据模块。这个模块完成实时观察液位值和流量值。

第二个模块:记录本次数据模块。模块记录实时的数据,当出现报警情况时,有数据可依来进行分析。

第三个模块:实时报警模块。当液位变化与流量值之差超出阈值时,说明有偷油的现象产生,提醒相关人员进行处理。

第四个模块:绘制曲线图模块。便于观察液位值和流量值的变化情况。

5 详细设计

5.1 上位机软件流程

在完成上位机的设计中,软件流程如图3所示。

图3 软件流程图Fig.3 Flowchart of software

5.2 上位机软件设计

1)欢迎界面

当运行程序时,首先会调出主界面,主界面是货车油量监控系统的欢迎界面。

2)基本信息界面

当点击主界面的进入按钮时,会调用Void CSysDlg:OnButtonl()函数:

void CSysDlg::OnButton1()

{

Cbase base1;

base1.DoModal();

}

然后进入基本信息界面,可以看到司机的基本信息、货车的基本信息、路线。

3)数据显示分析界面

当点击基本信息界面的显示分析按钮时,会调用void cbase::OnButtonl()函数:void Cbase::OnButton1(){

Cshow show1;

show1.DoModal();

}

然后进入数据显示分析界面,在初始化界面的同时,对串口初始化,设置串口和波特率并打开串口。在软件设计中与Windows下MFC中的设计不同的是,在MFC中有串口通信MSComm这个控件,但是在EVC中并没有这个控件,所以我们要用CSerial类[2]方法,用这种方法来打开串口,进行串口数据的接收,代码如下:

bool CSerial::OpenPort (CString lpszPortName, HWND hWnd, UINT m_strCom1)

{

m_hWnd=hWnd;//将调用对话框的窗口句柄赋给m_hWnd,以备在ReadPortThread中使用

DWORD dwError, dwThreadID;

if(hPort)//如果 hport为 0 说明串口没有打开

{

MessageBox (NULL, TEXT ("repeat!"),TEXT("Error!"), MB_OK);

return FALSE;

}

}//打开串口

打开串口后,当有数据时,会调用ShowReceiveStr(WPARAM wParam)函数对传来的数据进行显示和处理。

显示实时数据界面,分为三部分,一部分是货车运行地图,它主要是根据接收到的北纬和东经进行比例计算,在图中相应的点上绘制红色的圆圈,以表示货车现在所在的位置;第二部分是曲线图,红色代表液位的变化,绿色代表消耗的流量,把接收到的液位和流量根据坐标在界面上的位置,按照比例换算,在坐标中画出曲线,运用了函数line1()和line2(),两个函数调用了 pDC->MoveTo()和 pDC->LineTo()方法[3]绘图实现;第三部分是有6个编辑框和6个文本框组成的,它完成将接收到的值分别填写在相应的编辑框里显示出来。最下面添加了两个按钮,历史数据按钮可以进入记录数据模块,如图4所示。

图4 接收正常数据界面Fig.4 Receive normal data interface

4)历史数据显示

当点击历史数据按钮时,会调用Void Cshow:OnButton3()函数:

void Cshow::OnButton3()

{

m_ListTotal.ShowWindow(SW_SHOWNORMAL);

}

进入历史数据显示,调用OnPaint()函数,添加一个表格图,表格图是9行6列,可以记录历史数据,根据左右,上下的位置添加相应的数据,界面如图5所示。

图5 历史数据界面Fig.5 Historical data interface

5)实时报警

在调用 ShowReceiveStr(WPARAM wParam)函数[4]进行处理时,首先将上一次的液位记录与后一次的液位记录进行减法计算:

r6[h-1]=r3[h-1]-r3[h-2];

然后与本次的耗油量相比较,在这里设置了阈值:

if(r6[h-1]-r2[v-1]<-800)

{OnButton2(); }

if(r6[h-1]-r2[v-1]>800)

{OnButton2(); }

如果实际的油量与消耗的油量不相符时,就会调用void Cshow::OnButton2()函数:

void Cshow::OnButton2()

{

Cwarm warm1;

warm1.DoModal();

}

进入报警界面,在界面进行初始化时,会调用计时器函数:void Cwarm::OnTimer(UINT nIDEvent)

{

u++;

if(nIDEvent==1)

{

if(u==1)

{

PlaySound (MAKEINTRESOURCE (IDR_WAVE1),AfxGetResourceHandle (),SND_ASYNC|SND_RESOURCE|SND_NODEFAULT);

CDC*pDC=GetDC();

CDC mDC5;

CBitmap bitmap5;

mDC5.CreateCompatibleDC(pDC);

bitmap5.LoadBitmap(IDB_TB1);

CBitmap *pOldBit5=mDC5.SelectObject(&bitmap5);

pDC->BitBlt(310,100,300,300,&mDC5,1,1,SRCCOPY);

mDC5.SelectObject(pOldBit5);

mDC5.DeleteDC();

bitmap5.DeleteObject();

ReleaseDC(&mDC5);

ReleaseDC(pDC);

}

else if(u==2)

{

CDC*pDC=GetDC();

CDC mDC5;

CBitmap bitmap5;

mDC5.CreateCompatibleDC(pDC);

bitmap5.LoadBitmap(IDB_TB2);

CBitmap *pOldBit5=mDC5.SelectObject(&bitmap5);

pDC ->BitBlt (310,100,300,300,&mDC5,1,1,SRCCOPY);

mDC5.SelectObject(pOldBit5);

mDC5.DeleteDC();

bitmap5.DeleteObject();

ReleaseDC(&mDC5);

ReleaseDC(pDC);

u=0;

}

}

//TODO:Add your message handler code here and/or call default

CDialog::OnTimer(nIDEvent);

}

函数中运用了:

PlaySound (MAKEINTRESOURCE (IDR_WAVE1),AfxGetResourceHandle (),SND_ASYNC|SND_RESOURCE|SND_NODEFAULT)[5];来进行声音的报警并且根据两张图的替换加载,来让偷油的老鼠闪烁起来。另外一种报警方式是短信报警,这是在界面初始化时,调用 ab->WritePort(tp,11)函数[6],进行短信的发送,短信会发送车牌号到管理人员。

报警界面如图6所示。

图6 报警界面Fig.6 Alarm interface

6 实验测试

选择在6410平台上运行上述设计程序,从上位机界面中可以看到所接收的实时数据显示。在曲线图中可观测液位值和消耗的油量值,两者的变化趋势。当超出阈值时,会启动报警模块。在上述的图例中已经有所展示。

7 结束语

文中基于RAM的Windows CE系统和EVC编程环境,设计并实现了货车油量监控系统的上位机,设计过程中充分考虑了功能的全面性、实用性和直观性。实现了实时对数据进行显示与处理,以得出油量的变化达到监控的目的,该系统安全、稳定、简单并且价格低廉,对货车运输管理部门来说是一个很好的解决方案。

[1]何宗键.Windows CE嵌入式系统[M].北京:北京航空航天大学出版社,2006.

[2]李大为.Windows CE工程实践完全解析[M].北京:北京航空航天大学出版社,2008.

[3]王浩,林意春.Windows CE嵌入式高级编程及实例详解[M].北京:中国电力出版社,2010.

[4]华清远见嵌入式培训中心.Windows CE嵌入式开发高级教程[M].北京:人民邮电出版社,2010.

[5]张冬松.Windows CE6.0嵌入式高级编程[M].北京:清华大学出版社,2009.

[6]王田苗.嵌入式系统设计与实例开发[M].北京:清华大学出版社,2003.

猜你喜欢
油量调用上位
核电项目物项调用管理的应用研究
LabWindows/CVI下基于ActiveX技术的Excel调用
特斯拉 风云之老阿姨上位
自制油量表
“三扶”齐上位 决战必打赢
基于系统调用的恶意软件检测技术研究
基于ZigBee和VC上位机的教室智能监测管理系统
通信用固定柴油发电机油量分析
高芳烃环保橡胶填充油量产
以新思路促推现代农业上位