您的位置 首页 电路

运用MSCOMM32控件编写串口程序

MSCOMM32控件的基本属性MSComm控件通过串行端口传输和接收数据,为应用程序提供串行通讯功能。MSComm控件在串口编程时非常方便,程序员不

MSCOMM32控件的根本特点

MSComm 控件经过串行端口传输和接纳数据,为应用程序供给串行通讯功用。MSComm控件在串口编程时十分便利,程序员不必去花时间去了解较为杂乱的API函数,而且在VC、VB、Delphi等语言中均可运用。 Microsoft Communications Control(以下简称MSComm)是Microsoft公司供给的简化Windows下串行通讯编程的ActiveX控件,它为应用程序供给了经过串行接口收发数据的简洁办法。详细的来说,它供给了两种处理通讯问题的办法:一是事情驱动(Event-driven)办法,一是查询法。

1.MSComm控件两种处理通讯的办法

MSComm控件供给下列两种处理通讯的办法:事情驱动办法和查询办法。
1.1 事情驱动办法

事情驱动通讯是处理串行端口交互作用的一种十分有用的办法。在许多情况下,在事情发生时需求得到告诉,例如,在串口接纳缓冲区中有字符,或许 Carrier Detect (CD) 或 Request To Send (RTS) 线上一个字符抵达或一个改变发生时。在这些情况下,能够运用 MSComm 控件的 OnComm 事情捕获并处理这些通讯事情。OnComm 事情还能够查看和处理通讯过错。一切通讯事情和通讯过错的列表,参看 CommEvent 特点。在编程过程中,就能够在OnComm事情处理函数中参加自己的处理代码。这种办法的长处是程序呼应及时,可靠性高。每个MSComm 控件对应着一个串行端口。假如应用程序需求拜访多个串行端口,有必要运用多个 MSComm 控件。

1.2 查询办法

查询办法实质上仍是事情驱动,但在有些情况下,这种办法显得更为快捷。在程序的每个要害功用之后,能够经过查看 CommEvent 特点的值来查询事情和过错。假如应用程序较小,而且是自坚持的,这种办法可能是更可取的。例如,假如写一个简略的电话拨号程序,则没有必要对每接纳一个字符都发生事情,由于仅有等候接纳的字符是调制解调器的“确认”呼应。

2.MSComm 控件的常用特点
MSComm 控件有许多重要的特点,但首要有必要了解几个特点。
CommPort 设置并回来通讯端口号。
Settings 以字符串的方法设置并回来波特率、奇偶校验、数据位、中止位。
PortOpen 设置并回来通讯端口的状况。也能够翻开和封闭端口。
Input 从接纳缓冲区回来和删去字符。
Output 向传输缓冲区写一个字符串。

下面别离描绘:

CommPort特点 设置并回来通讯端口号。
语法 object.CommPort[value ] (value 一整型值,阐明端口号。)
阐明 在设计时,value 能够设置成从 1 到 16 的任何数(缺省值为 1)。可是假如用 PortOpen 特点翻开一个并不存在的端口时,MSComm 控件会发生过错 68(设备无效)。
留意:有必要在翻开端口之前设置 CommPort 特点。

RThreshold 特点:在 MSComm 控件设置 CommEvent 特点为 comEvReceive 并发生 OnComm 之前,设置并回来的要接纳的字符数。
语法 object.Rthreshold [ = value ](value 整型表达式,阐明在发生 OnComm 事情之前要接纳的字符数。 )
阐明 当接纳字符后,若 Rthreshold 特点设置为 0(缺省值)则不发生 OnComm 事情。例如,设置 Rthreshold 为 1,接纳缓冲区收到每一个字符都会使 MSComm 控件发生 OnComm 事情。

CTSHolding 特点:确认是否可经过查询 Clear To Send (CTS) 线的状况发送数据。Clear To Send 是调制解调器发送到相联计算机的信号,指示传输能够进行。该特点在设计时无效,在运行时为只读。
语法: object.CTSHolding(Boolean)

Mscomm 控件的 CTSHolding 特点设置值:
True Clear To Send 线为高电平。
False Clear To Send 线为低电平。

阐明:假如 Clear To Send 线为低电平 (CTSHolding = False) 而且超不时,MSComm 控件设置 CommEvent 特点为 comEventCTSTO (Clear To Send Timeout) 并发生 OnComm 事情。

Clear To Send 线用于 RTS/CTS (Request To Send/Clear To Send) 硬件握手。假如需求确认 Clear To Send 线的状况,CTSHolding 特点给出一种手艺查询的办法。

详细信息 有关握手协议,请参看 Handshaking 特点。

SThreshold 特点: MSComm 控件设置 CommEvent 特点为 comEvSend 并发生 OnComm 事情之前,设置并回来传输缓冲区中答应的最小字符数。

语法 object.SThreshold [ = value ]
value 整形表达式,代表在 OnComm 事情发生之前在传输缓冲区中的最小字符数。

阐明:若设置 Sthreshold 特点为 0(缺省值),数据传输事情不会发生 OnComm 事情。若设置 Sthreshold 特点为 1,当传输缓冲区彻底空时,MSComm 控件发生 OnComm 事情。假如在传输缓冲区中的字符数小于 value,CommEvent 特点设置为 comEvSend,并发生 OnComm 事情。comEvSend 事情仅当字符数与 Sthreshold 穿插时被激活一次。例如,假如 Sthreshold 等于 5,仅当在输出行列中字符数从 5 降到 4 时,comEvSend 才发生。假如在输出行列中从没有比 Sthreshold 多的字符,comEvSend 事情将绝不会发生。

Handshake 常数

常数 值 描绘
comNone 0 无握手。
comXonXoff 1 XOn/Xoff 握手。
comRTS 2 Request-to-send/clear-to-send 握手。
comRTSXOnXOff 3 Request-to-send 和 clear-to-send 握手皆可。

comEVENT的值在发生事情时,将会是下面的这些值:代表不同的事情发生。

OnComm 常数

常数 值 描绘
comEvSend 1 发送事情。
comEvReceive 2 接纳事情。
comEvCTS 3 clear-to-send 线改变。
comEvDSR 4 data-set ready 线改变。
comEvCD 5 carrier detect 线改变。
comEvRing 6 振铃检测。
comEvEOF 7 文件完毕。

Error 常数

常数 值 描绘
comEventBreak 1001 接纳到中止信号
comEventCTSTO 1002 Clear-to-send 超时
comEventDSRTO 1003 Data-set ready 超时
comEventFrame 1004 帧过错
comEventOverrun 1006 端口超速
comEventCDTO 1007 Carrier detect 超时
comEventRxOver 1008 接纳缓冲区溢出
comEventRxParity 1009 Parity 过错
comEventTxFull 1010 传输缓冲区满
comEventDCB 1011 检索端口 设备操控块 (DCB) 时的意外过错

InputMode 常数
常数 值 描绘
comInputModeText 0 (缺省)经过 Input 特点以文本办法取回数据。
comInputModeBinary 1 经过 Input 特点以二进制办法检取回数据。

CDHolding 特点:经过查询 Carrier Detect (CD) 线的状况确认当时是否有传输。Carrier Detect 是从调制解调器发送到相联计算机的一个信号,指示调制解调器正在联机。该特点在设计时无效,在运行时为只读。

语法 object.CDHolding
设置值:CDHolding 特点的设置值为:
设置 描绘
True Carrier Detect 线为高电平
False Carrier Detect 线为低电平
阐明:留意当 Carrier Detect 线为高电平 (CDHolding = True) 且超不时,MSComm 控件设置CommEvent 特点为 comEventCDTO(Carrier Detect 超时过错),并发生 OnComm 事情。
留意 在主机应用程序中捕获一个丢掉的传输是特别重要的,例如一个布告板,由于呼叫者能够随时挂起(抛弃传输)。
Carrier Detect 也被称为 Receive Line Signal Detect (RLSD)。
数据类型 Boolean

DSRHolding 特点:确认 Data Set Ready (DSR) 线的状况。Data Set Ready 信号由调制解调器发送到相连计算机,指示作好操作预备。该特点在设计时无效,在运行时为只读。
语法:object.DSRHolding
object 地点处表明目标表达式,其值是“应用于”列表中的目标。
DSRHolding 特点回来以下值:
值 描绘
True Data Set Ready 线高
False Data Set Ready 线低
阐明:当 Data Set Ready 线为高电平 (DSRHolding = True) 且超不时,MSComm 控件设置 CommEvent 特点为 comEventDSRTO(数据预备超时)并发生 OnComm 事情。
当为 Data Terminal Equipment (DTE) 机器写 Data Set Ready/Data Terminal Ready 握手例程时该特点是十分有用的。
数据类型:Boolean

Settings 特点: 设置并回来波特率、奇偶校验、数据位、中止位参数。

语法: object.Settings[ = value]
阐明:当端口翻开时,假如 value 不合法,则 MSComm 控件发生过错 380(不合法特点值)。
value 由四个设置值组成,有如下的格局:
“BBBB,P,D,S”
BBBB 为波特率,P 为奇偶校验,D 为数据位数,S 为中止位数。value 的缺省值是:
“9600,N,8,1”

InputLen 特点:设置并回来 Input 特点从接纳缓冲区读取的字符数。

语法 object.InputLen [ = value]
InputLen 特点语法包含下列部分:
value 整型表达式,阐明 Input 特点从接纳缓冲区中读取的字符数。
阐明:InputLen 特点的缺省值是 0。设置 InputLen 为 0 时,运用 Input 将使 MSComm 控件读取接纳缓冲区中悉数的内容。

若接纳缓冲区中 InputLen 字符无效,Input 特点回来一个零长度字符串 (“”)。在运用 Input 前,用户能够挑选查看 InBufferCount 特点来确认缓冲区中是否已有需求数目的字符。该特点在从输出格局为定长数据的机器读取数据时十分有用。

EOFEnable 特点:确认在输入过程中 MSComm 控件是否寻觅文件结束 (EOF) 字符。假如找到 EOF 字符,将中止输入并激活 OnComm 事情,此刻 CommEvent 特点设置为 comEvEOF,
语法:object.EOFEnable [ = value ]
EOFEnable 特点语法包含下列部分:
value 布尔表达式,确认当找到 EOF 字符时,OnComm 事情是否被激活,如“设置值”中所描绘。
value 的设置值:
True 当 EOF 字符找届时 OnComm 事情被激活。
False (缺省)当 EOF 字符找届时 OnComm 事情不被激活。
阐明:当 EOFEnable 特点设置为 False,OnComm 控件将不在输入流中寻觅 EOF 字符。

过错音讯(MS Comm 控件)

下表列出 MSComm 控件能够捕获的过错:

值 描绘
380 无效特点值 comInvalidPropertyvalue
383 特点为只读 comSetNotSupported
394 特点为只读 comGetNotSupported
8000 端口翻开时操作不合法 comPortOpen
8001 超时值有必要大于 0
8002 无效端口号 comPortInvalid
8003 特点只在运行时有用
8004 特点在运行时为只读
8005 端口现已翻开 comPortAlreadyOpen
8006 设备标识符无效或不支持该标识符
8007 不支持设备的波特率
8008 指定的字节巨细无效
8009 缺省参数过错
8010 硬件不可用(被其它设备确定)
8011 函数不能分配行列
8012 设备没有翻开 comNoOpen
8013 设备现已翻开
8014 不能运用 comm 告诉
8015 不能设置 comm 状况 comSetCommStateFailed
8016 不能设置 comm 事情屏蔽
8018 仅当端口翻开时操作才有用 comPortNotOpen
8019 设备忙
8020 读 comm 设备过错 comReadError
8021 为该端口检索设备操控块时的内部过错 comDCBError

弥补,假如是偶校验则将ole_1.object.settings=”1200,n,8,1″ 中的n改为e,奇校验为o
w1 = asc(ole_1.object.input)
//假如读入的是7位的acs码,则将w1 – 48 既为所要的值,48的16进制是30H,是十进制的0
假如ole_1.object.commevent的回来值为3 :clear-to-send 线改变,则是由于设备与电脑的连接线有问题,需求将规范rc-232线进行调线,行将2线和3线进行交流。行将设备的发送接到电脑的接纳上,将设备的接纳接到电脑的发送上。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/dianlu/210940.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部