当前位置:首页 > 通信技术 > 通信设计应用
[导读]   1 引 言   串行通讯是计算机与其他设备进行数据交换时经常使用的方法之一,他具有实现简单,使用灵活方便,数据传输可靠等优点,因而在工业监控、数据采集和实时监控系统中得到广泛应用.

  1 引 言

  串行通讯是计算机与其他设备进行数据交换时经常使用的方法之一,他具有实现简单,使用灵活方便,数据传输可靠等优点,因而在工业监控、数据采集和实时监控系统中得到广泛应用.

  高速串口数据采集软件的设计不同于普通串口通信,其要求在接收数据采集设备发送大量数据的同时完成对已接受到数据的实时存储,如果处理不好二者之间的关系,会造成数据的缺失甚至程序的崩溃.这就要求应用程序能够同时处理两件以上不同的任务.Win32是基于线程的抢先式多任务操作系统,使得应用程序能够同时执行多个任务,即在一个进程中可以同时运行多个线程.一个线程是指程序的一条执行路径,系统不停的在多个线程之间切换.由于时间很短,看上去多个线程在同时运行.对于通讯这种需要花费大量时间来测试I/O操作,同时又要保持响应用户其它操作的应用程序来说,创建多线程是最佳选择.

  2 系统结构

  系统的组成结构如图1所示.中央控制PC机是系统的核心,要求数据采集软件具有良好的稳定性和兼容性.所以独立设计了一套基于Visual C++ 6.0的多线程通讯软件,它与前端的扫描仪串口通信是典型的主从式,在硬件上通过MOXA公司的串口卡实现500K波特的采集速率.

 

  3 用MSComm控件实现高速串口数据采集的问题

  MSComm控件在串口编程时非常方便,程序员不必花时间去了解较为复杂的API函数,只需要在串口通信资源的属性(ProperTIes)一项中配置串口,串口通信的波特率、数据位数、停止位数、奇偶校验、发送缓冲区大小、接收缓冲区大小以及超时设置等均在此时进行配置.完成串口配置之后即可打开串口,进行数据读写.

  对于一般数据交换及串口通信来说,MSComm控件完全能够满足要求.但由于控件本身对于接收缓冲区大小设置的限定,为高速数据采集软件的设计带来了麻烦.如果接收缓冲区不能满足设计的要求,当缓冲区内数据达到消息响应值并响应存储命令时,而新采集的数据传输速度大于已接收到数据的存储速度,就会造成接收缓冲区的溢出,直接导致系统的崩溃.这一点在程序设计初期深有体会.

  在程序设计时也尝试当缓冲区达到阈值响应消息时,在消息响应中启动一个新的线程,先将缓冲区中接收到的数据取出到新开辟的内存单元中,再进行数据存储.程序可以运行,但出现了新的问题,即有的数据帧中的数据发生丢失.分析产生这种数据丢失的原因,还是由于控件本身对于接收缓冲区大小设置的限定.

  4 程序设计创新

  4.1多线程程序设计思想

  在32位Windows系统中,术语多任务是指系统可以同时运行多个进程,而每个进程也可以同时执行多个线程.进程就是应用程序的运行实例.每个进程都有自己私有的虚拟地址空间,每个进程都有一个主线程,但可以建立另外的线程.进程中的线程是并行执行的,每个线程占用CPU的时间由系统来划分.

  可以把线程看作是操作系统分配CPU时间的基本实体,系统不停的在各个线程之间切换,它对线程的中断是汇编语言级的.系统为每一个线程分配一个CPU时间段,某个线程只有在分配的时间段内才有对CPU的控制权.

  进程中所有的线程共享进程的虚拟地址空间,这意味着所有线程都可以访问进程的全局变量和资源.这一方面为编程带来了方便,但另一方面也容易造成冲突.虽然在进程中进行费时的工作不会导致系统的挂起,但会导致进程本身的挂起.所以,如果进程即要进行长期工作,又要响应用户的输入,那么它可以启动一个线程来专门负责费时的工作,而主线程仍然可以与用户进行交互.由此可见,利用Win32的重叠I/O操作和多线程特性,可以编出高效的通信程序.

  高速串口数据采集软件的特点是接收数据的速度要求很高,接收数据量很大,而控制扫描仪发送的命令字数据量很小.根据这些特性,可以在程序中创建一个辅助工作者线程专门来监视串行口的输入.由于写串口的数据量不大,不会太费时,所以在主线程中完成写端口的任务是可以的,不必另外创建线程.

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭