1、导言
近年来,“嵌入式”一词越来越多的被人们提及,嵌入式产品被运用到各行各业。与嵌入式相关的技能如嵌入式产品,嵌入式体系的研讨等也被列为“十五”家开展的关键方向。
嵌入式体系(Embedded System)被界说为:以运用为中心,以核算机技能为根底,软件硬件可裁剪,适应对功用、牢靠性、本钱、体积、功耗严格要求的专用核算机体系。
跟着工业自动化的开展,依据PLC,单片机等设备的自动化体系,自动化设备越来越遍及,简直遍及一切自动化范畴,与之相应的人机交互体系也应运而生,并得到同步开展。依据嵌入式技能的工业人机界面是人机交互体系中一颗耀眼的明星。高牢靠,寿数,体积小,高功能,多线程,多任务,强实时等特色使嵌入式工业人机界面越来越遭到自动化体系集成商,自动化设备制造商的喜爱。它能够抱负,生动地显现PLC,单片机等工业设备上的数据信息,功用强大,运用方便。它作为PLC等操控设备的上端设备在用户和机器之间架设了一条桥梁。该产品现在广泛运用在工业自动化体系,医疗,金融等职业的自动化设备。
跟着越来越多的工程项目选用了嵌入式人机界面,相应的,用户对与嵌入式硬件配套运用的监控体系(SupervisoryControlandDataAcquisiTIon,SCADA)等运用软件的需求也在添加。这也正是本文所要评论的问题。这儿讲的嵌入式监控体系,其硬件为嵌入式智能人机界面;其软件为嵌入式操作体系,另加自己开发的运用程序。本文后边首要介绍这个监控运用程序,关键介绍运用程序中通讯部分的完成原理。
当今,已开展有多种嵌入式操作体系,如Linux,VxWorks,WinCE.net等,彻底可在其上开宣布图文并茂、界面友爱的运用,以满意监控体系的种种要求。仅仅由于嵌入式技能相对是一门新式的抢先技能,进入的人相对还比较少,所以这样的运用现在还比较少。本文介绍的嵌入式监控体系算是一个实例吧。
2、体系组成
咱们所开发的这套嵌入式监控体系,上位机是沈阳鹭岛资讯科技有限公司开发的嵌入式智能工业操控人机界面(以下简称人机界面)。其嵌入式工业操控器是以GeodeX86为中心处理器,包含网络通讯,数据通讯,大尺度接触屏及液晶显现的硬件渠道,在其上运转WinCE操作体系。供给20个通用IO点供用户运用,物理层支撑ProfiBus等现场总线,支撑16位真彩TFTLCD显现,有64MSDRAM内存,64MFLASH闪存,据有USB接口,10/100MEthernet网络通讯接口,以及串口,并口,VGA口等通用接口。
下位机用日本OMRON公司的PLC,或SIMENSPLC,或施耐德NEZAPLC,或日本三菱公司的PLC,等等当时比较盛行的PLC,当然温控表,单片机,智能模块等工业现场操控设备也能够。
操控目标(比方锅炉等)的作业由上述操控设备(各种PLC等)操控;而操控目标的状况则用人机界面及在其上开发的运用程序进行监控。
人机界面的操作体系选用了微软的WinCE.net。WinCE.net是为各种嵌入式体系和产品规划的一种紧凑,高效,可弹性的操作体系(OS),首要面向各种嵌入式体系和产品。其多线程、多任务、彻底抢占式的特色是专门针对资源有限而规划的。OEM开发商可依据自己硬件组成的特色对WinCE.net进行挑选裁剪,然后装备出安稳高效并且是特有的WinCE.net操作体系和相应的SDK开发包。在运用上,WinCE.net支撑超越1000个公共MicrosoftWin32API和几种附加的编程接口,用户可运用它们来开发运用程序。别的,微软为开发WinCE.net运用程序的人员供给了与VisualC++相似、支撑MFC的MicrosofteMbeddedVisualC++言语。下面咱们将介绍一下开发进程的细节问题。
3、软件流程
运用程序开发是在个人核算机上进行的。个人核算机的操作体系为WINDOWS2000。运用程序的开发渠道是MicrosofteMbeddedVisualC++集成开发环境。
在运用程序开发时,还能够运用微软供给的测验模拟器(Emulator)。有了它可做到,即便没有人机界面,也可进行程序调试。
开发终究生成的可履行文件,可运用Microsofte Mbedded Visualc++开发环境供给的下载功用,经过串口或局域网,下载给人机界面。
作业时,PLC等工控设备运转它的操控程序,而人机界面则运转这个下载的可履行文件。两者经过串口进行通讯,但通讯的自动方为人机界面。人机界面依监控要求,向PLC等发送通讯指令,PLC则作相应的应对。
人机界面从PLC上收到应对的数据后,在接触屏上,以图表、动画,文字等的界面显现出来,供用户调查。还可把这些数据进行存贮、打印,甚至于向ERP等管理信息体系传送。
如须对PLC或操控目标进行干涉,也可在人机界面的接触屏上,经过接触键或接触鼠标,向PLC发送指令或数据,以完成相应的操控。
这个运用的履行流程框图为:
图1 履行流程框图
4、画面构成
一般的工程监控画面有:文字显现,出产工艺流程显现(包含动画,柱状图显现等),报警,人员操作,趋势曲线等等。咱们的体系架构是做一个依据主对话框的程序。再将这些不同的画面用子对话框表现出来。
主对话框担任初始化串口,翻开串口,发动读串口线程等;而各子对话框则守时或依据需求向串口发送各种指令,经过主对话框的线程读回指令的应对,再在子对话框中以必定的办法供给给用户,以供监控现场作业。这其间首要的技能便是串口通讯。下面咱们关键叙述通讯的完成。
5、通讯完成
人机界面供给的串口是契合通用规范的。WinCE.net下的串口通讯与Windows下的串口通讯原理相同。都是运用程序
不直接操控硬件,而是经过操作体系供给的设备驱动程序,来进行数据传递。
WinCE.net是Win32编程。串口在Win32中是作为文件来进行处理的,不是直接对端口进行操作。关于串行通讯,Win32供给了相应的文件I/O函数与通讯函数。
可是也要留意WinCE.net所能支撑的API函数仅仅WindowAPI函数的子集。Windows有的,WinCE.net下不必定能运用。一起,WinCE.net字符集相似于WindowsNT而不同于Windows9x,它是依据Unicode的。这也是开发程序进程中从WINDOWS转到WinCE.net的程序员遇到问题最多的当地。别的在Windows下常用的一些通讯控件如MSComm等在WinCE.net下就不能正确运用了。
本监控体系选用API函数完成串口通讯。以下分几个问题介绍串口通讯及整个体系的完成。
5.1翻开串口
首先是翻开串口,这是串口通讯的榜首步。其代码为:
BOOLCMainDlg::OnInitDialog()
{
。。。。。。
m_hComm=CreateFile(_T(“COM1:“),GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,0);//翻开串口的操作,需求留意
WinCE.net体系与Windows体系表达办法的纤细不同,WinCE.net需求在串口后加上冒号;
SetupComm(m_hComm,1024,1024);//初始化串口的输入,输出缓冲区参数;
SetCommState(m_hComm,&m_dcb);//装备串口参数;m_dcb为设置好的参数结构;
。。。。。。
SetCommTImeouts(m_hComm,&TImeout);//设置通讯超时时刻参数;
PurgeComm(m_hComm,PURGE_TXCLEAR|PURGE_RXCLEAR);
//清空输入,输出缓冲区的字符,为开端承受数据,进入监控状况做好预备;
。。。。。。
}
5.2读串口线程
其次是发动读串口线程,它让读串口程序不停地在后台运转,而不影响前台程序的作业。与此有关的代码为:
BOOLCMainDlg::OnInitDialog()
{
。。。。。。
ReadFile(m_hComm,inBuffer+iBufLen,INBUFFERLEN-iBufLen,&dwBytes,NULL);//从串口读数据;
iBufLen+=dwBytes;
for(inti=”0“;i{
if(inBuffer[i]==”\r“)//以衔接的设备为OMRONPLC为例,其通讯协议规则应对应当以”\r“完毕;
inBuffer[i]=0;//字符串完毕标志;
switch(m_iDlgType)//m_iDlgType为代表不同对话框的标志变量;
{
case子对话框1标志:
子对话框1.ProcData(inBuffer,i);//不同对话框中对指令应对的处理,ProcData为处理函数名;
break;
。。。。。。
}
。。。。。。
}
5.3各子对话框发送写指令
各个子对话框依据需求,选用守时器的办法,守时向PLC发送指令。以OMRONPLC为例,在发送指令时,依据OMRONPLC的通讯协议,还需对发送的指令字符串加校验码。这些程序代码为:
void子对话框1类::OnTimer(UINTnIDEvent)
{
。。。。。。
strcpy(m_szC
md,”@00RR00000001“);//OMRONPLC的指令字符串;
GenXor(m_szCmd,result);//进行校验码核算,调用GenXor函数;
sprintf(szTailer,”%02X*\r“,result);//OMRONPLC通讯协议以“*\r”完毕;
strcat(m_szCmd,szTailer);//构成完好的通讯协议指令字符串;
WriteFile(m_hComm,m_szCmd,strlen(m_szCmd),&dwWriten,NULL);
//将指令字符串写入串口;
。。。。。。
}
以下为上面所调用的核算校验码的代码:
voidGenXor(LPCSTRstrSource,char&result)//为核算校验码的函数,进行异或运算:
{
result=0;//为校验码赋初值;
intlen=“strlen”(strSource);//指令协议字符串的长度;
for(inti=“0”;iresult^=strSource[i];//按位进行异或;
}
5.4显现界面处理
终究,读线程读到的数据,交由对应的子对话框进行处理。要对这些数据进行剖析,并以动画,柱状图,趋势曲线等表现出来。以所衔接的为OMRONPLC为例,其代码为:
void子对话框1类::ProcData(char*buffer,intlen)
{
。。。。。.sscanf(buffer+7,“%04X”,&wData);//依据OMRONPLC的指令规约,从应对中将需求的数据取出到变量wData中;
。。。。。。。//对取得的变量值依据需求进行处理,如以文字或动画等办法在子对话框中进行显现;
}
在进行界面处理时,有一些技巧,如动画显现时,能够用一个守时器操控图片的轮流显现。(在本体系中动画是经过CbitmapButton这个控件进行显现的。)
switch(m_iImage)//m_iImage为界说的动画显现标志;
{
case1://显现榜首幅图片,一起将动画显现标志置为2;
CBitmapButton控件变量.LoadBitmaps(图片标志1);
m_iImage=2;
break;
case2://显现第二幅图片,一起将动画显现标志置为1;
CBitmapButton控件变量.LoadBitmaps(图片标志2);
m_iImage=1;
break;
}
在显现实时曲线时,选用循环数组的办法,在内存中拓荒必定巨细的空间,使读上来的数构成一个循环数组,在界面上动态的显现出来。
本体系中以20个模拟量为一个数组巨细,也便是实时趋势曲线一向显现20个点的信息,但由于运用了循环数组的技能,所以看上去很有动感。
void子对话框类::循环数组函数(intiValue)//iValue为从指令应对中解析出来的有用数据;
{
intindex=(m_iBegin+m_iCount)%20;//核算循环数组的下标,初始从0开端;
m_aryValue=iValue;//为循环数组赋值;
m_iCount++;//循环数组的个数加1;
if(m_iCount》20)//判别个数是否超越20个,如是,将下一个数组下标从1开端,依此类推;
{
m_iCount=20;
m_iBegin=(m_iBegin+1)%20;
}
。。。。。。
}
通讯是本体系的要害。咱们的实践证明,以上四步是完成整个监控体系根本之关键。
6、定论
总归,本监控体系软件的根本架构能够以下面这幅图直观的表示出来:
图2 监控体系软件的根本架构
跟着嵌入式操作体系的鼓起,各组态软件的开发商也纷繁开宣布了嵌入式版的组态软件。但在
实践运用中咱们发现有许多企业,他们的出产操控流程比较固定,需求的人机界面的数量又比较大,对他们来说,按这儿介绍的办法,针对企业本身的出产工艺特色进行开发,供给给用户的是终究的运转体系,不需求用户再进行组态的二次开发。这样的体系对这样的用户来说,从时刻,价格或功能上来说都比较合适。本体系在鹭岛公司研制的LEODO嵌入式工业操控人机界面上经过了测验运转,证明其运转速度较快,比较安稳。作用很好,比较合适工业现场运用。当然LEODO品牌的人机界面也内置了一套简明有用,画面资源丰富的ET组态软件,用户可依据实践情况决议自己用高档言语开发,仍是用组态软件开发。
总归,能够看出,人机界面运用MicrosofteMbeddedC++开发运用程序,与在Windows体系下用MicrosoftVisualC++开发程序,有许多相象的当地。凭借这个软、硬件渠道,大都用户彻底能够开宣布合适自己需求的运用程序。