基于vc++的串口通信调试软件的设计_第1页
基于vc++的串口通信调试软件的设计_第2页
基于vc++的串口通信调试软件的设计_第3页
基于vc++的串口通信调试软件的设计_第4页
全文预览已结束

下载本文档

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

文档简介

基于vc++的串口通信调试软件的设计

随着粒子发生器技术的发展,越来越多的控制设备被用于离子源系统、真空系统、辐射流量诊断系统等。这些设备的通信接口繁杂,有RS-232、RS-485以及网络接口等。在设备的安装调试过程中,不同的接口需要使用不同的调试软件,设备调试很不方便。另外,在加速器控制领域,为了保护人身安全远离辐射,需要远程控制各种设备,RS-232/RS-485接口的设备需通过串口服务器或者PC机接入以太网实现远程控制。这就导致同一款设备在本地和远程调试时需要使用不同的调试工具,非常麻烦。因此,设计一款能够稳定可靠完成串口和网络接口设备的调试软件非常有必要。本文介绍了在VC++平台下实现的多功能的网络及串口调试工具的设计。1基本技术原则1.1客户端的通信模式实现网络通信的方式有多种,WinSock是一种比较简单的实现方法。WinSock提供了在Windows平台下网络编程的接口,是连接控制软件和网络驱动程序的桥梁。它以动态链接库形式提供给用户,具备支持多种协议和开放式的特点,其工作流程如图1所示。WinSock支持面向连接的流式套接字TCP(TransmissionControlProtocol)和无连接服务的数据报式套接字UDP(UserDatagramProtocol)。加速器工作在强磁场强辐射的环境中,选择基于TCP协议的面向连接的流式套接字编程方式,能够保证可靠的数据传输。通信结构采用C/S(客服端/服务器)方式,被控设备作为服务器,远端PC机的控制软件作为客户端。因此设备调试工具的网络通信只需完成客户端的通信功能。基于TCP的客户端网络程序编写流程如下:(1)WinSock的初始化创建套接字,通过WSAStartup()函数完成加载套接字库,同时指定套接字库的版本以及套接字类型。(2)发出连接请求选择非对称式的C/S通信结构,客户端程序无需调用bind()绑定IP和端口。只需声明地址结构体(SOCKADDR_IN)用于指定服务器的IP和端口,然后通过connect函数可以与被控设备(服务器)建立连接。(3)进行通信当连接建立后,C/S就可进行通信。客户端使用recv()接收设备的数据,用send()向设备发送命令及数据。通信模式有阻塞和非阻塞两种。阻塞方式下,客服端接收数据时会阻塞等待数据接收完毕,超时则作废。在非阻塞模式下,采用事件驱动机制,当数据准备完成才去通知客服端接收,这种模式下客服端可响应多个socket连接。通过WSAAsyncSelect()实现异步非阻塞模式选择。(4)释放连接通信结束后需调close()关闭套接字,释放为此套接字分配的资源,最后再调用WSACleanup()函数终止对套接字库Winsock.dll的连接。1.2多端口监控存储串口通信用到的通信线少、方式简单,在加速器现场的很多控制设备通过串口进行通信。VC环境下,串口的编程有两种方式:一是调用微软公司提供的ActiveX的控件MSComm,控件简单易操作,开发者只需了解控件的属性和事件,但多串口程序需要添加多个控件不灵活;二是利用Windows的API函数,实现设备的无关性,编程虽比较复杂,但访问串口功能丰富,可访问多串口,该方法更为灵活,本设计选择API函数方式实现。其通信过程图2所示。(1)打开串口(COM)打开串口通过调用CreateFile()函数,调用成功则返回一个句柄,该句柄在整个通信中都被使用。若调用失败,则函数返回INVALID_HANDLE_VALUE。(2)串口配置串行传输的最大特点按位进行发送和接受数据,因此需对串口进行一些初始化配置。通过DCB(DeviceControlBlock)结构来实现,DCB包含了波特率、数据位、停止位、奇偶校验方法等信息。调用GetCommState()可获取串口现有的配置写入DCB结构中。调用SetCommState()将指定的DCB配置当前串口。(3)读写串口通过ReadFile()和WriteFile()实现串口实时通信。WriteFile()将数据送到lpBuffer指针指向的数据缓冲区,再由串口将并行数据转为串行比特数由TXD发送出去。ReadFile()指定串口接收的数据存储在lpBuffer指针指向存储区域并接收数据。(4)关闭串口串口通信结束之后需要关闭串口,调用CloseHandle()关闭句柄就可实现。2软件方案的设计基于网络和串口通信的编程技术设计出满足多种需求的调试软件,下面详细论述本调试软件的关键之处。2.1监视线程技术在加速器现场由于其环境恶劣,往往会因为各种因素导致网络或者串口中断。如:高压导致一些控制器的损坏,从而导致连接的中断,TCP内部机制决定了长时间不进行通信就会导致连接中断等。因此在网络串口的编程技术上,引入了监视线程技术。在开启串口和网络同时调用AfxBeginThread开启工作者线程,进入自定义MonitorThread()监视函数对串口及网络实时监测,以网络编程为例其线程监视主要代码如下所示:2.2自动识别校验在调试软件和被控设备之间进行数据传输不仅要考虑其传输平台、接口方式,还要考虑其数据格式即通信协议。在调试过程中发现,不同设备遵循不同的通信协议,比如Modbus、DCON和一些设备自定义协议。Modbus协议采用RTU模式(十六进制)或ASCII码发送,DCON协议采用字符发送。为方便调试人员,调试软件支持这两种不同的数据传输方式。用户界面输入命令均为ASCII码,其含8bit字节(两位十六进制字符)。十六进制字符命令用ASCII码中‘1’(30H)~‘9’(39H)及‘A’(41H)~‘F’(46H)字符表示十六进制标识1~9、A~F,所以利用查表1对应关系可进行ASCII码转换成十六进制字符码。接收数据均用十六进制表示,显示十六进制和ASCII码,十六进制显示就是将每一个十六进制数转换成对应的表1中的ASCII码。而ASCII显示则是通过ASCII码表查找显示。同时该软件添加了多种校验方式,CRC、LRC和奇偶校验,这些校验方式原理并不难,但计算却相对复杂,人工计算繁琐而且无法保证准确性,所以根据加速器现场设备常用的几种校验方式,集成了校验组供操作人员选择。点击软件中校验按钮出现校验选择对话框,如图3,点击OK就会将发送数据生成校验码并直接添加在要发送数据后面,简单可靠。2.3控制命令的多种类型为了更好适应调试设备,调试软件增加了实用的辅助功能。笔者所在的科研小组自主研制了一些控制设备,这些设备遵行自定义数据格式。此外还采用一些商用的AD、DA、继电器模块等。这导致了控制命令复杂多样,不方便记忆,给调试带来不便。因此,本调试软件将常用模块的控制命令制作了一个命令集参考库。如图4所示,当需要控制某模块时,选择相应的模块类型,软件将会自动弹出该模块的常用命令,双击需要的命令就可以完成命令的发送,大大提高了调试效率。当然该软件还具备自动发送数据、文件方式存储数据和计数统计等辅助功能。3软件的基本情况调试软件目前已经在近代物理研究所的负氢离子源、治癌离子源等控制系统调试中得到实际应用,本软件很好地完成了调试任务。网络通信界面如图5所示,该界面显示的是测试泓格I-7017AD模块。在图中的右上方网络连接模块,提供协议选择、IP及端口号,然后点击连接网络,若连接成功指示灯亮,否则为灰色。在软件运行过程中,发生中断,软件将会进行自动重连。串口通信界面如图6所示。打开串口之前,需要配置好串口如串口号、波特率、校验码等等。软件支持十六进制发送或者字符发送,支持十六进制显示或者字符显示。4系统调试软件模块本调试软件以加速器现场的设备调试需求为基点,以VC++为平台,采用多线程串口及网络的通信方式、集成多种通信数据格式转换及校验功能,提供常用模块的命令格式,以方便调试人员进行设备调试。同时本调试软件也为以后的

温馨提示

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

评论

0/150

提交评论