基于VC++ 6.0的高速串口通信数据采集系统_第1页
基于VC++ 6.0的高速串口通信数据采集系统_第2页
基于VC++ 6.0的高速串口通信数据采集系统_第3页
基于VC++ 6.0的高速串口通信数据采集系统_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于 VC 6 0 的高速串口通信数据采集系统 1 引 言 串行通讯是计算机与其他设备进行数据交换时经常使用的方法之一 他具有实现简单 使用灵活方便 数据传 输可靠等优点 因而在工业监控 数据采集和实时监控系统中得到广泛应用 高速串口数据采集软件的设计不同于普通串口通信 其要求在接收数据采集设备发送大量数据的同时完成对 已接受到数据的实时存储 如果处理不好二者之间的关系 会造成数据的缺失甚至程序的崩溃 这就要求应用程序 能够同时处理两件以上不同的任务 Win32 是基于线程的抢先式多任务操作系统 使得应用程序能够同时执行多个 任务 即在一个进程中可以同时运行多个线程 一个线程是指程序的一条执行路径 系统不停的在多个线程之间切 换 由于时间很短 看上去多个线程在同时运行 对于通讯这种需要花费大量时间来测试 I O 操作 同时又要保持 响应用户其它操作的应用程序来说 创建多线程是最佳选择 2 系统结构 系统的组成结构如图 1 所示 中央控制 PC 机是系统的核心 要求数据采集软件具有良好的稳定性和兼容性 所以独立设计了一套基于 Visual C 6 0 的多线程通讯软件 它与前端的扫描仪串口通信是典型的主从式 在硬 件上通过 MOXA 公司的串口卡实现 500K 波特的采集速率 图 1 数据采集系统结构 3 用 MSComm 控件实现高速串口数据采集的问题 MSComm 控件在串口编程时非常方便 程序员不必花时间去了解较为复杂的 API 函数 只需要在串口通信资源 的属性 Properties 一项中配置串口 串口通信的波特率 数据位数 停止位数 奇偶校验 发送缓冲区大小 接收缓冲区大小以及超时设置等均在此时进行配置 完成串口配置之后即可打开串口 进行数据读写 对于一般数据交换及串口通信来说 MSComm 控件完全能够满足要求 但由于控件本身对于接收缓冲区大小设 置的限定 为高速数据采集软件的设计带来了麻烦 如果接收缓冲区不能满足设计的要求 当缓冲区内数据达到消 息响应值并响应存储命令时 而新采集的数据传输速度大于已接收到数据的存储速度 就会造成接收缓冲区的溢 出 直接导致系统的崩溃 这一点在程序设计初期深有体会 在程序设计时也尝试当缓冲区达到阈值响应消息时 在消息响应中启动一个新的线程 先将缓冲区中接收到 的数据取出到新开辟的内存单元中 再进行数据存储 程序可以运行 但出现了新的问题 即有的数据帧中的数据 发生丢失 分析产生这种数据丢失的原因 还是由于控件本身对于接收缓冲区大小设置的限定 4 程序设计创新 4 1 多线程程序设计思想 在 32 位 Windows 系统中 术语多任务是指系统可以同时运行多个进程 而每个进程也可以同时执行多个线程 进 程就是应用程序的运行实例 每个进程都有自己私有的虚拟地址空间 每个进程都有一个主线程 但可以建立另外 的线程 进程中的线程是并行执行的 每个线程占用 CPU 的时间由系统来划分 可以把线程看作是操作系统分配 CPU 时间的基本实体 系统不停的在各个线程之间切换 它对线程的中断是 汇编语言级的 系统为每一个线程分配一个 CPU 时间段 某个线程只有在分配的时间段内才有对 CPU 的控制权 进程中所有的线程共享进程的虚拟地址空间 这意味着所有线程都可以访问进程的全局变量和资源 这一方 面为编程带来了方便 但另一方面也容易造成冲突 虽然在进程中进行费时的工作不会导致系统的挂起 但会导致 进程本身的挂起 所以 如果进程即要进行长期工作 又要响应用户的输入 那么它可以启动一个线程来专门负责 费时的工作 而主线程仍然可以与用户进行交互 由此可见 利用 Win32 的重叠 I O 操作和多线程特性 可以编出 高效的通信程序 高速串口数据采集软件的特点是接收数据的速度要求很高 接收数据量很大 而控制扫描仪发送的命令字数 据量很小 根据这些特性 可以在程序中创建一个辅助工作者线程专门来监视串行口的输入 由于写串口的数据量 不大 不会太费时 所以在主线程中完成写端口的任务是可以的 不必另外创建线程 4 2 多线程程序设计 数据采集程序流程 根据多线程程序的开发思想 该数据采集软件由负责人机交互的多线程和对串口进行 处理的后台辅助线程组成 主线程是数据采集程序的管理者 用来初始化串口 通过调用 Win32 API 函数 自定义 通信事件消息 创建 删除辅助线程 进行人机交互的操作及协调好各线程的运行 程序流程如图 2 所示 图 2 数据采集程序框图 后台辅助线程分析 后台辅助线程是数据采集软件的核心 包括串口监视线程 读线程 串口监视线程在 后台对串口进行实时监视 当监视到预定义的事件时 立即调用相应的线程进行处理并向主线程发相应的消息 如接收到数据就调用读线程自动接收数据并进行处理 同时向主线程发送接收到数据的消息 串口监视线程发 送完此消息后就执行后面的程序代码 继续对串口进行监视 做到了处理消息与监视串口两不误 即保证了数 据采集的实时性 又避免了资源的浪费 其处理过程如图 3 所示 图 3 串口监视线程的实现 5 结束语 多线程技术能很好地解决各种逻辑并发和物理并发问题 使软件的各

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论