没有合适的资源?快使用搜索试试~ 我知道了~
在Win32下,可以使用两种编程方式实现串口通信,其一是使用ActiveX控件,这种方法程序简单,但欠灵活。其二是调用Windows的API函数,这种方法可以清楚地掌握串口通信的机制,并且自由灵活。本文我们只介绍部分。
资源推荐
资源详情
资源评论
在工业控制中,工控机(一般都基于 平台)经常需要与智能仪表通过串
口进行通信。串口通信方便易行,应用广泛。
一般情况下,工控机和各智能仪表通过 总线进行通信。 的通信方式
是半双工的,只能由作为主节点的工控 机依次轮询网络上的各智能控制单元子节
点。每次通信都是由 机通过串口向智能控制单元发布命令,智能控制单元在接收
到正确的命令后作出应答。
在 下,可以使用两种编程方式实现串口通信,其一是使用 控
件,这种方法程序简单,但欠灵活。其二是调用 的 函数,这种方法
可以清楚地掌握串口通信的机制,并且自由灵活。本文我们只介绍 串口通信部
分。
串口的操作可以有两种操作方式:同步操作方式和重叠操作方式(又称为异步
操作方式)。同步操作时, 函数会阻塞直到操作完成以后才能返回(在多线程方
式中,虽然不会阻塞主线程,但是仍然会阻塞监听线程);而重叠操作方式, 函
数会立即返回,操作在后台进行,避免线程的阻塞。
无论那种操作方式,一般都通过四个步骤来完成:
() 打开串口
() 配置串口
() 读写串口
() 关闭串口
() 打开串口
系统把文件的概念进行了扩展。无论是文件、通信设备、命名管道、邮
件槽、磁盘、还是控制台,都是用 函数 来打开或创建的。该函数的
原型为:
!"#" $$"%&'
""""""""""""""""""("'
""""""""""""""""""(")*'
"""""""""""""""""" !+$,-$$.+$!"%/01/'
""""""""""""""""""("1/'
("21/'
!")$&%34
%&:将要打开的串口逻辑名,如“(*5;
:指定串口访问的类型,可以是读取、写入或二者并列;
)*:指定共享属性,由于串口不能共享,该参数必须置为 6;
%/01/:引用安全性属性结构,缺省值为 + ;
1/:创建标志,对串口操作该参数必须置为
(!-!$7;
21/:属性描述,用于指定该串口是否进行异步操作,
该值为 !- 7-(8! !,表示使用异步的 9(;该值为 6,表示
同步 9( 操作;
)$&%:对串口而言该参数必须置为 + ;
同步 9( 方式打开串口的示例代码:
!")&4""99全局变量,串口句柄
)&:#;(*;'99(* 口
7!!-!<7!!-$!'"99允许读和写
6'"99独占方式
+ '
(!-!$7'"99打开而不是创建
6'"99同步方式
+ 34
=#)&::# !3>3
?
=@*2.@#;打开 (* 失败A;34
/" !4
B
/"$+!4
重叠 9( 打开串口的示例代码:
!")&4""99全局变量,串口句柄
)&":#;(*;'""99(* 口
"""""""""""""7!!-!<7!!-$!'"99允许读和写
"""""""""""""6'""99独占方式
"""""""""""""+ '
"""""""""""""(!-!$7'""99打开而不是创建
""""""""""""" !-$$.+$!-(* <
!- 7-(8! !'"99重叠方式
"""""""""""""+ 34
=#)&"::8 - !-8 +!3
?
=@*2.@#;打开 (* 失败A;34
/" !4
B
"""/"$+!4
()、配置串口
在打开通讯设备句柄后,常常需要对串口进行一些初始化配置工作。这需要通
过一个 . 结构来进行。. 结构包含了诸如波特率、数据位数、奇偶校验和停止
位数等信息。在查询或配置串口的属性时,都要用 . 结构来作为缓冲区。
一般用 打开串口后,可以调用 7&& 函数来获取串口
的初始配置。要修改串口的配置,应该先修改 . 结构,然后再调用
&& 函数设置串口。
. 结构包含了串口的各项参数设置,下面仅介绍几个该结构常用的变量:
0%="/"-.?
"""CCC
"""99波特率,指定通信设备的传输速率。这个成员可以是实际波特率值或
者下面的常量值之一:
"""("./4"
.-6,.-66,.-D66,.-66,.-66,.-
66,.-ED66,.-E66, .-66,
.-D666, .-FD66, .-66, .-666,
.-D666, .-66
("=04"99"指定奇偶校验使能。若此成员为 ,允许奇偶校验检
查
"""C
.,$!".0G4"99"通信字节位数,H
.,$!"04"99指定奇偶校验方法。此成员可以有下列值:
!8!$,"偶校验 ($,"无校验
*I$,"标记校验 ($,"奇校验
.,$!"%.4"99指定停止位的位数。此成员可以有下列值:
(!$(.$" 位停止位 $($(.$" 位停止位
(!$(.$"""J 位停止位
"""CCC
""B".4
1J) 文件中定义了以上用到的常量。如下:
KL "($,""""""""""""6
KL "($,"""""""""""
KL "!8!$,""""""""""
KL "(!$(.$""""""""""6
KL "(!$(.$""""""""
KL "$($(.$"""""""""
KL ".-6"""""""""""""6
KL ".-66"""""""""""""66
KL ".-D66"""""""""""""D66
KL ".-66""""""""""""66
KL ".-66""""""""""""66
KL ".-66""""""""""""66
KL ".-ED66""""""""""""ED66
KL ".-66"""""""""""66
KL ".-E66"""""""""""E66
KL ".-66"""""""""""66
KL ".-D666"""""""""""D666
KL ".-FD66"""""""""""FD66
KL ".-66""""""""""66
KL ".-666""""""""""666
KL ".-D666""""""""""D666
7&& 函数可以获得 (* 口的设备控制块,从而获得相关参数:
.(( "7&&#
""" !")'"99标识通讯端口的句柄
""" ."%."99指向一个设备控制块(. 结构)的指针
""34
&& 函数设置 (* 口的设备控制块:
.(( "&&#
""" !")'"
""" ."%."
""34
除了在 . 中的设置外,程序一般还需要设置 9( 缓冲区的大小和超时。
用 9( 缓冲区来暂存串口输入和输出的数据。如果通信的速率较高,则应
该设置较大的缓冲区。调用 /%&& 函数可以设置串行口的输入和输出缓冲区
的大小。
.(( "/%&&#
"""" !")' 99"通信设备的句柄
""""("M//' 99"输入缓冲区的大小(字节数)
""""("(/M// 99"输出缓冲区的大小(字节数)
"""34
在用 和 读写串行口时,需要考虑超时问题。超时的作用
是在指定的时间内没有读入或发送指定数量的字符, 或 的操作
仍然会结束。
要查询当前的超时设置应调用 7&&$&/ 函数,该函数会填充一个
(**$*!(+$ 结构。调用 &&$&/ 可以用某一个
(**$*!(+$ 结构的内容来设置超时。
读写串口的超时有两种:间隔超时和总超时。间隔超时是指在接收时两个字符
之间的最大时延。总超时是指读写操作总共花费的最大时间。写操作只支持总超时,
而读操作两种超时均支持。用 (**$*!(+$ 结构可以规定读写操作的超时。
(**$*!(+$ 结构的定义为:
0%="/"-(**$*!(+$"?"""
""""("$&/4"99读间隔超时
""""("$$&/*/%4"99读时间系数
""""("$$&/4"99读时间常量
""""("$$&/*/%4"99"写时间系数
""""("$$&/4"99写时间常量
B"(**$*!(+$'N (**$*!(+$4
(**$*!(+$ 结构的成员都以毫秒为单位。总超时的计算公式是:
总超时=时间系数O要求读9写的字符数+时间常量
例如,要读入 6 个字符,那么读操作的总超时的计算公式为:
读总超时=$$&/*/%O6+
$$&/"
可以看出:间隔超时和总超时的设置是不相关的,这可以方便通信程序灵活地设置
各种超时。
剩余17页未读,继续阅读
资源评论
coolsma
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功