vc++6.0在串口通信开发方法.docx

上传人:太** 文档编号:46229567 上传时间:2022-09-25 格式:DOCX 页数:7 大小:15.75KB
返回 下载 相关 举报
vc++6.0在串口通信开发方法.docx_第1页
第1页 / 共7页
vc++6.0在串口通信开发方法.docx_第2页
第2页 / 共7页
点击查看更多>>
资源描述

《vc++6.0在串口通信开发方法.docx》由会员分享,可在线阅读,更多相关《vc++6.0在串口通信开发方法.docx(7页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、vc+6.0在串口通信开发方法1引言在当今的工业控制领域,串口通信是计算机与其他设备 开展数据通信时经常使用的方法,具有实现简单、使用灵活、 数据传输可靠等几个优点,特别是在实时监控系统中得到广 泛应用,在我们使用的计算机上使用的串口 一般是rs232, 使用rs232接口只能开展一对一的通信,然而在工业控制领 域往往是一台工控机和多台智能设备开展通信,并且要求传 输距离远,因为这些需求,在工控领域一般使用rs485。在Win32下,可以使用两种编程方式实现串口通信,其 一是使用mscomm控件,这种方法程序简单,但欠灵活。其 二是调用windows的api函数,这种方法可以清楚地掌握串 口通

2、信的机制,并且自由灵活。使用控件的方法在本质上也 是使用api开展串口通信,控件只不过是对api的一个封装 处理,本文只介绍使用api开展串口通信编程的方法。2串口通信的一般步骤1翻开串口在32位windows中,串口和其他通信设备(如磁盘等) 都被作为文件开展处理,在使用前必须先将其翻开,为保证 串口通信数据传输的可靠性,串口一般以非共享模式翻开, 也就是在被串口翻开后,其他程序不能在去翻开此设备。2. 2配置串口在使用串口开展数据通信前必须对其开展正确的配置, 串口需要配置的主要参数有波特率、数据位、结束位、奇偶 校验、收发数据缓冲区大小。除此之外还要对串口开展超时 设置,以防止在串口通信

3、时数据传输突然中断而导致读写操 作进入无限期等待的状态,设置了超时,如果在指定时间内 没有完成所开展的操作,那么此操作被自动放弃。2. 3读写串口在串口被翻开并设置好后,就可以使用串口开展读写数 据了,读写数据可以采用同步、异步及事件驱动等多种方式。2.4关闭串口在使用完串口后应该将其关闭,如果没有关闭,该串口 会处于翻开状态,其他的应用程序便无法翻开使用该串口。3利用api函数实现串口通信3. 1翻开串口Win32系统把文件的概念开展了扩展。无论是文件、通 信设备、命名管道、邮件槽、磁盘、还是控制台,都是用api 函数createfile来翻开或创立的。该函数的原型为:handle crea

4、tefile( Ipctstr Ipfilename,dword dwdesiredaccess, dword dwsharemode,lpsecurity_attributes Ipsecurityattributes,dword dwcreationdistribution,dword dwflagsandattributes,handle htemplatefile);各个参数说明如下:Ipfilename:将要翻开的串口逻辑名,如coml”;dwdesiredaccess:指定串口访问的类型,可以是读取、 写入或二者并列;dwsharemode:指定共享属性,由于串口不能共享,该 参数

5、必须置为0;Ipsecurityattributes:引用平安性属性构造,缺省值 为 null;dwcreationdistribution:创立标志,对串口操作该参 数必须置为open_existing;dwflagsandattributes:属性描述,用于指定该串口是 否开展异步操作,该值为fi 1 e_f 1 ag_overlapped,表示使用 异步的i/。;该值为0,表示同步i/。操作;htemplatefile:对串口而言该参数必须置为null;3. 2配置串口在翻开通讯设备句柄后,常常需要对串口开展一些初始 化配置工作。这需要通过一个deb构造来开展。deb构造包 含了诸如波特

6、率、数据位数、奇偶校验和结束位数等信息。 在查询或配置串口的属性时,都要用deb构造来作为缓冲区。 在翻开串口后,可以调用getcommstate函数来获取串口的 默认配置,该函数获取一个deb构造体,只要在该构造内对 应该先修改deb构造,然后再调用setcommstate函数以修 改后的deb构造设置串口。deb主要有以下几个重要的成员: byte bytesize; /通信字节位数byte parity; 指定奇 偶校验方法。此成员可以有以下值:evenparity偶校验 noparity 无校验markparity 标记校验 oddparity 奇校 验byte stopbits; 指

7、定结束位的位数。此成员可以有以 下值:onestopbit 1位结束位 twostopbits 2位结束 位one5stopbits 1. 5 位结束位除了使用bed设置串口的一些基本参数外,一般还需要 设置串口收发数据缓冲区的大小和超时,超时的作用是在指 定的时间内没有读入或发送指定数量的字符,读写操作仍然 会结束。windows用i/o缓冲区来暂存串口输入和输出的数 据,如果通信的速率较高,那么应该设置较大的缓冲区。我们 可以使用api函数setupcomm设置串口的输入和输出缓冲区 的大小,其原型如下:bool setupcomm( handle hfile, / 串口句柄dword d

8、winqueue, /输入缓冲区的大小(字节 数)dword dwoutqueue ); /输出缓冲区的大小(字节数)关于读写串口的超时设置,windows给我们提供一个专 门的构造体commtimeouts,其定义如下:typedef struct _commtimeouts dword readinterval timeout; /读间隔 超时 dword readtotal timeoutmultiplier; 读时 间系数dword readtotaltimeoutconstant; 读时 间常量 dword writetotaltimeoutmultiplier; / 写时间系数 d

9、word writetotaltimeoutconstant ;/ 写 时 间 常量commtimeouts,*lpcommtimeouts;commtimeouts构造的成员都以毫秒为单位。总超时的计 算公式是:总超时=时间系数义要求读/写的字符数十时间常量例如,要读入10个字符,那么读操作的总超时的计算 公式为:读 总 超时=readtotaltimeoutmultiplier X10+ readtotaltimeoutconstant通过该构造体windowsapi为我们提供两个函数: getcommtimeouts 和 setcommtimeouts, 前者获取当前的超 时设置,后者使

10、用修改后的commtimeouts设置超时,与设 置串口阐述类似。在读写串口之前,还要用purgecomm()函数清空缓冲 区,该函数原型:bool purgecomm(handle hfile, 串 口句柄dword dwflags ) ; /需要完成的操作参数dwflags指定要完成的操作,可以是以下值的组合:purge_txabort中断所有写操作并立即返回,即使写操 作还没有完成。purge_rxabort中断所有读操作并立即返回,即使读操 作还没有完成。purge_txclear去除输出缓冲区purge_rxclear去除输入缓冲区2. 3读写串口读写串口使用readfile和wri

11、tefile两个函数,其原 型如下:bool readfile( handle hfile, 串口 的句柄 Ipvoid Ipbuffer, /保存读入数据的指针,dword nnumberofbytestoread, /要读入的数据的字节数Ipdword Ipnumberofbytesread, 实际读入的字节数 Ipoverlapped Ipoverlapped ) ; / overlapped, 同步为 nullbool writefile(handle hfile, 串口 的句柄Ipcvoid Ipbuffer, /要写入数据的地址dword nnumberofbytestowrite

12、, / 要写入数据的字节 数Ipdword Ipnumberofbyteswritten, 实际写入的字节 数Ipoverlapped Ipoverlapped) ; / overlapped, 同步 为null在开展同步操作时,读写函数要等到执行完才返回, 而在异步操作时函数立即返回,但不保证读写操作完成,这 时候就需要使用overlapped构造开展异步控制,该构造体 有一个重要的成员hevent,该成员是windows事件对象的句 柄在控制线程同步及异步操作时常用到,如果是异步操作, 我们可以使用createevent ()创立事件对象并将返回值 赋给 hevent ,然后使用 wait

13、forsingleobject 或 getoverlappedresult等待读写操作完成,进而到达控制异 步操作的目的。3. 4关闭串口在不使用串口的时候应该将其 关闭,以释放windows的资源供其他程序使用,关闭串口只 需调用closehandle (hcomm/*串口句柄*/)即可。4串行通 信在世纪星组态软件中的应用作为通用的组态软件,世纪星 要与其他plc,智能仪表等设备开展通信,串行通信是主要 的方式之一,基于前面所述使用api开展串行通信开发的优 点,并考虑程序开发的便捷和可重用等,在世纪星中,我们 将串行通信api开展封装,以类的方式对串口开展操作,其 中翻开串口及配置串口参数的操作我们通过可视化窗口开 展设定,然后在封装类中实现,相关的操作处理读写数据外 基本都已实现,因为不同的设备有不同的协议,因而读写串 口的操作在驱动程序中完成,这样我们的开发人员就不必关 注太多其他的相关操作,只需根据实际设备重写读写串口的 成员函数即可。5结论windows是当前应用程序开发的主 流平台,vc+6. 0是该平台强大的开发工具,使用windowsapi 开发串口通信的程序可是使我们更加清晰的了解串口通信 的机制,并且开发人员可以根据需要使用api开展灵活的程 序设计,在scada中串行通信是必不可少的技术,所以掌握 串行通信的开发方法具有现实意义。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 解决方案

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁