好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

《VC++下对大量实时数据的采集处理》.docx

5页
  • 卖家[上传人]:嘀嘀
  • 文档编号:264580179
  • 上传时间:2022-03-12
  • 文档格式:DOCX
  • 文档大小:15.17KB
  • / 5 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • VC++下对大量实时数据的采集处理论文导读:下面以VisualC++{以下简称VC++)为例,说明采用多线程的处理方式关键词:VC++,实时数据,采集 1.问题的提出随着自动化水平的日益提高,许多工业过程控制都采用了二级或多级计算机系统进行处理在这些控制场合中,DDC一般都有串行口,通过它们可以方便地进行数据传输,上位机采用面向对象的语言,设计一个友好的人机界面,这样一来,我们就可以很方便的在控制室的计算机上对现场数据进行监控,可随时统计生产数据,动态显示、存储和输出生产报表等对于这样一个有着非常友好人机界面的系统,如果它以图形、图像的方式来显示设备的状况,那么系统要花相当的CPU时间去处理这一部分特别对于实时系统或采样频率较高、每帧数据量又很大的系统,若采用单线程处理,系统的响应时间,屏幕的刷新时间都会增加,导致系统性能降低但是如果采用多线程方式处理,效果就会好得多发表论文发表论文下面以Visual C++{以下简称VC++)为例,说明采用多线程的处理方式2.系统的设计实施在VC++中,开发串行通信主要有以下四种方式:(1)用V C++提供的串行口通信控件M5Comm,它简单易用,但不灵活;(2)用单线程的方法实现自定义串口通信类(封装API),它比MSComm要简单,可用于简单系统;(3)用多线程的方法实现自定义串行通信类,这种方法较灵活,且CPU利用率高;(4)直接读写串行口(自己编写驱动程序),这需要编写大量的底层软件,较复杂。

      在我们的系统中采用了多线程方式,DDC不断地将数据传送给上位机,上位计算机采用被动接收数据的方式,主线程用来处理现场数据的统计、数据的存储与输出,以及用户界面的消息处理此外,再设两个线程,线程1(RxThreadFunc)用来监视串行口,采集数据并将数据存放到一个环形缓冲区中线程2 (Handle ThreadFunc)用来从环形缓冲区中取数据进行动态显示和保存数据系统首先对两个线程进行说明,然后创建它们,具体过程如下:在头文件中说明发表论文static UINT RxThreadFunc(LPVOID);static UINT Handle ThreadFunc(LPVOID);程序初始化时可加入如下代码创建线程CWin Thread*_p RxThread;CWin Thread*_p Handle Thread;_pRxThread=AfxBeginThread(RxThreadFunc,NULL,THREAD_PRIORITY_NORMAL,0,0,//Start the thread immediately after creationNULL);_pHandle Thread= AfxBeginThread(Handle ThreadFunc,NULL,TH READ_PRIORITY_NORMAL,0,0,//Start the thread immediately after creationNULL);这样创建后,这种两个线程就可以和主线程并发执行了,设备数据显示的动态刷新和用户界面消息的处理也就可以独立的运行。

      AfxBeginThread各参数的含义可参考微软的MSDN主线程及线程2 (Handle ThreadFunc)与一般的编程处理并无二样,所以下面着重说明接收数据线程(RxThreadFunc )首先生成一个串行口操作类,串行口类构造函数如下:CCommunication::CCommunication ( ){ m_hComm=NULL;m_bOpened=false;BaudRate=CBR_9600;ByteSize=8;fParity=FALSE;Parity=NOPARITY;StopBits=ONESTOPBIT;}它的读操作如下:Int CCommunication::CComRead (LPVOID pData,intn nLen){DWORD dwBytesRead;DWORD dwError;COMSTAT ComStat;if(m_hComm==NULL) return-1;if(!ReadFile(mhComm,(LPVOID)pData,nLen,&dwBytesRead,NULL)){dwError=GetLastError( );}If(dwBytesRead((DWORD)nLen)ClearCommError (m_hComm,&dwError, &ComStat);return dwBytesRead;}接收线程程序如下(在启动线程之前应先打开串口):CCommunication vSerialPort;UINTRxThreadFunc(LPVOID ThreadArg){DWORD dwArg=*(DWORD*)ThreadArg;unsigned char temparr[10];while(1) {if( vSerialPort.ComRead(&emparr,l)>0) {//也可读入多个字节vCircBuf.AddItem s (&temparr,1) ;//存入缓冲区中}else{Sleep(0) :}}return 0 ;}程序中vCircBuf为对缓冲区操作类,此缓冲区为临界资源,应互斥使用。

      当然程序在此也可对读入的数据进行其他方式的处理3.结束语我们用一个RxThreadFunc( LPVOIDThreadArg)工作线程在后台单独接收数据,保证了实时接收数据的不丢失,减少了用户界面消息处理的响应时间,提高了系统的性能参考文献:[1]李于剑.VisualC++实践与提高.中国铁道出版社,2001.[2]官章全,唐晓卫.Visual C++6.0编程实例详解.电子工业出版社,2000.  。

      点击阅读更多内容
      相关文档
      《公共文化体育设施条例》深度解读课件.pptx 《法律援助条例》深度解读课件.pptx 《广播电视设施保护条例》深度解读课件.pptx 社区关于2025年夏季基孔肯雅热疫情防控工作的经验总结报告材料.docx 2025关于转型实践中汲取发展思考的学习心得体会.docx 2025关于“学论述、谈体会、抓落实”活动的学习心得体会.docx 2025教育系统党徽党旗及其制品使用管理情况自查自纠报告.docx 熔铸忠诚之魂夯实平安之基 锻造政法铁军在县委政法委员会2025年第三次全体(扩大)会议上的讲话发言.docx 县委2025年新兴领域“两个覆盖”集中攻坚工作进展情况汇报材料.docx 在2025年市关于建强基层组织体系专题会议上的讲话发言.docx 在共青团县委2025年全体团员干部会议上的党课讲稿:用团结奋斗开辟美好未来.docx 在2025年片区农业产业发展专题工作会议上的讲话发言材料.docx 在市保险领域民事检察协同监督工作推进会上的讲话发言材料.docx 县自然资源局人才工作情况汇报材料.docx 在2025年县委办公室“病灶”清除行动警示教育暨作风建设深化推进会上的讲话发言.docx 在市防汛工作会议上的讲话发言材料2篇.docx 在区村(社区)“两委”换届工作调度会上的讲话发言.docx 在2025年全区年轻干部座谈会上的发言材料.docx 在全区茶产业高质量发展推进会议上的讲话发言材料.docx 在烟草专卖局(公司)系统2025年半年工作会议上的讲话发言.docx
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.