分享
 
 
 

MSComm控件属性大揭秘

王朝vc·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

MSComm控件的属性

(必须要熟悉的几个——CommPort:设置并返回通信端口号;Setting:以字符串的形式设置并返回数据传输速率、奇偶校验、数据比特、停止比特;PortOpen:设置并返回通信端口的状态,也可以打开和关闭端口;Input:从接收缓冲区返回和删除字符;Output:向传输缓冲区定一个字符串)

1)CommPort属性

void SetCommPort(short nNewValue); short GetCommPort();

这一属性设置并返回连接的串行端口号,Windows将会利用该串口和外界通信。在设计时,nNewValue可以设置成从1~16的任何数(默认值为1)。但是如果用PortOpen属性打开一个并不存在的端口时,MSComm控件会产生错误68(设备无效)。

注意:必须在打开端口之前设置CommPort属性。

2)Settings属性

void Settings(LPCTSTR lpszNewValue); String GetSettings();

该属性用于设置并返回数据传输速率、奇偶校验、数据比特、停止比特参数。当端口打开时,如果value非法,则MSComm控件产生错误380(非法属性值)。其中lpszNewValue用字符串表示,由四个设置值组成,有如下的组成格式:

“BBBB,P,D,S”

BBBB为数据传输速率,P为奇偶校验,D为数据比特,S为停止比特。Value的默认值是:“9600,N,8,1”,数据传输速率合法值可以是110、300、600、1200、2400、4800、9600、14400、19200、28800、38400、56000、57600、115200、12800、25600。

奇偶校验值可以是设置为下表的任一值。

设定值 描述

E 偶校验(EVEN)

M 标号校验(MARK)

N 无校验(NONE)

O 奇校验(ODD)

S 空格校验(SPACE)

数据比特数可以是4、5、6、7、8。

停止比特数可以是1、1.5、2。

注意:只有当通信的双方的Settings属性值都一样时,通信连接才能生效。

3)Handshaking属性

这一属性用于设置或者返回硬件握手协议,也就是PC和通信设备之间为了控制流速而设定的内部协议。属性值可以设置为下表中的任一个。

设定值 值 描述

ComNone 0 默认值,无握手协议

comXOnXOff 1 XON/XOFF握手

ComRTS 2 RTS/CTS握手

comRtsXOnXOff 3 RTS/CTS和XON/XOFF握手皆可

4)RThreshold属性

void SetRThreshold(short nNewValue); short GetRThreshold();

在MSComm控件设置CommEvent属性为comEvReceive并产生OnComm之前,RThreshold属性设置并返回的要接收的字符数。这里nNewValue是short型参数,说明在产生OnComm事件之前要接收的字符数。

当接收字符后,若RThreshold属性设置为0(默认值)则不会产生OnComm事件。否则,该属性为一阈值,当接收缓冲区内字节个数达到或超过该值后就会产生OnComm事件,例如,设置RThreshold为1,接收缓冲区收到每一个字符都会使MSComm控件产生OnComm事件。

5)CTSHolding属性

void SetCTSHolding(BOOL bNewValue); BOOL GetCTSHolding();

其属性设定值如下表所示。

设定值 功能描述

TRUE CTS线为高电平

FALSE CTS线为低电平

该属性确定是否可通过查询CTS线的状态发送数据。CTS是调制解调器发送到相连计算机的信号,指示传输可以进行。该属性在设计时无效,在运行时为只读。

如果CTS线为低电平(CTSHolding = FALSE)并且超时时,MSComm控件设置CommEvent属性为comEventCTSTO(Clear To Send Timeout)并产生OnComm事伯。CTS线用于RTS/CTS硬件握手。如果需要确定CTS线的状态,CTSHolding属性给出一种手工查询方法。

6)SThreshold属性

void SetSThreshold(short nNewValue); short GetSThreshold();

MSComm控件设置CommEvent属性为comEvSend并产生OnComm事件之前,设置并返回传输缓冲区中允许的最小字符数。这里nNewValue是short型数据,代表在OnComm事件产生之前在传输缓冲区中的最小字符数。

若设置Sthreshold属性为0(默认值),数据传输事件不会产生OnComm事件。若设置Sthreshold属性为0,当传输缓冲区完全空时,MSComm控件产生OnComm事件。如果在传输缓冲区的字符数小于value,CommEvent属性设置为comEvSend,并产生OnComm事件。comEvSend事件仅当字符数与Sthreshold交叉时被激活一次。例如,如果Sthreshold等于5,仅当在输出队列中字符数从5降到4时,comEvSend才发生。如果在输出队列中从没有比Sthreshold多的字符,comEvSend事件将绝不会发生。

7)InputMode属性

void SetInputMode(long nNewValue); long GetInputMode();

访属性用于设置或者返回传输数据的类型。其取值和基本含义如下表所示。

设定值 值 描述

ComInputModeText(缺省) 0 通过Input属性以文本方式取回数据

ComInputModeBinary 1 通过Input属性以二进制方式取回数据

8)InputLen属性

void SetInputLen(short nNewValue); short GetInputLen ();

该属性用于设置并返回Input属性从接收缓冲区读取的字符数。nNewValue是short型数值,说明Input属性从接收缓冲区中读取的字符数。

InputLen属性的默认值是0。当设置InputLen为0时,使用Input将使MSComm控件读取接收缓冲区中全部的内容。若接收缓冲区中InputLen字符无效,Input属性返回一个零长度字符串(“”)。在使用Input前,用户可以选择检查InBufferCount属性来确定缓冲区中是否已有需要数目的字符。该属性在从输出格式为定长数据的机器读取数据时非常有用。

9)InBuffersize属性

void SetBufferSize(short nNewValue); short GetInBufferSize();

InBuffersize属性用于设置或返回输入缓冲区的大小,默认值为1024字节。

10)InBufferCount属性

void SetInBufferCount(short nNewValue); short GetInBufferCount();

InBufferCount属性用于返回输入缓冲区内的等待读取的字节个数,可以通过该属性值为0来清除接收缓冲区。

11)Input属性

VARIANT GetInput();

Input属性表示从接收缓冲区移走一串字符,将缓冲区中收到的数据读入变量。属性值为VARIAN型变量。该属性在端口未打开时不可用,在运行时是只读的。

注意:当InputMode属性值 为0时(文本模式),变量中含String型数据。当InputMode属性值为1(二进制模式),变量中含Byte型数组数据。

12)PortOpen属性

void SetPortOpen(BOOL bNewValue); BOOL GetPortOpen();

PortOpen属性用于打开或者关闭端口。如果bNewValue设为TRUE,可以打开端口;设为FALSE时可以关闭端口。一般情况下在程序开始时打开端口,在程序结束时关闭端口。当应用程序终止时,MSComm控件将自动关闭串口。在打开端口前,确定CommPort属性调协为正确的端口号。而且,用户的串口设备必须支持Settings属性中的设置。如果硬件设备不支持Settings属性中的一些设置,则硬件工作或许不正确。

13)OutBuffersize属性

void SetOutBufferSize(short nNewValue);

OutBuffersize属性用于设置或者返回发送缓冲区的大小,值为整形表达式,表示传输缓冲区的字节数,默认值为512字节。对发送缓冲区设置得越大,应用程序可以使用的内存就越小。然而,如果发送缓冲区太小,缓冲区将会溢出,除非使用握手协议。

14)OutBufferCounter属性

void SetOutBufferSize(short nNewValue); short GetOutBufferSize();

OutBufferCounter属性用于返回发送缓冲区内等待发送的字节数,可以通过设置该属性为0来清空发送缓冲区。

15)Output属性

void SetOutput(const VARIANT & newValue);

Output属性用于向发送缓冲区写数据流。属性为VARIANT变量。该属性在端口未打开时不可用,在运行时只是写的。

注意:Output属性可以发送文本数据或二进制数据。传输文本数据时,应该将字符型 数据放入VARIANT变量中;传输二进制数据(即按字节传送)时,应将字节型数据放入VARIANT型变量中。如果通常给应用程序发送ANSI字符串,可以以文本方式发送。如果数据包含了内嵌控制字符、NULL字符等,必须将其作为二进制传递过去。

16)CommEvent属性

short GetCommEvent();

如果在通信过程中发生错误或事件,将会引发OnComm事件并且改变其属性值。CommEvent属性值反映错误或者事件类型,通信的设计中可以根据该属性值执行同的操作。该属性在端口未打开时不可用,在运行时是只读的。通信错误及通信事件的设定值分别如下两表所示。

通信错误设定值

设定值 值 描述

comEventBreak 1001 接收到中断信号

comEventCTSTO 1002 CTS超时

comEventDSRTO 1003 DSR超时

comEventFrame 1004 帧错误,硬件检测到一个帧出错,双方设置的格式不一致时,就会引发此错误

comEventOverrun 1006 端口超速。一个字符没有在下一个字符到达之前被硬件读取,该字符丢失

comEventCDTO 1007 数据检测超时

comEventRxOver 1008 接收缓冲区溢出

comEventRxParity 1009 奇偶校验错误

comEventTxFull 1010 传输缓冲区溢出,表明输出缓冲区已满,不能再将字符输出到缓冲区

comEventDCB 1011 检索端口、设备控制块(DCB)时的意外错误

通信事件设定值

设定值 值 描述

comEvSend 1 发送事件。发送缓冲区的内容少于SThreshold指定的值

comEvReceive 2 接收事件。接收缓冲区内字符数达到RThreshold值,该事件在缓冲区内数据被移走前将持续产生,利用此事件可编写接收数据的过程

comEvCTS 3 CTS线变化

comEvDSR 4 DSR线变化

comEvCD 5 CD线变化

comEvRing 6 振铃检测

comEvEOF 7 文件结束。接收数据中出现文件结束(ASCII 码26)字符

17)DTREnable属性

void SetDTREnable(BOOL bNewValue); BOOL GetDTREnable();

DTREnable属性确定在通信时是否使用DTR线有效,DTR是计算机发送到调制解调器的信号,表明计算机在等待数据传输。

18)RTSEnable属性

void SetRTSEnable(BOOL bNewValue); BOOL GetRTSEnable();

RTSEnable属性确定是否使用RTS线有效。一般情况下,由计算机发送RTS信号到连接的调制解调器,请求允许发送数据。

19)EOFEnable属性

void SetEOFEnable(BOOL bNewValue); BOOL GetEOFEnable();

EOFEnable属性确定在输入过程中MSComm控件是否寻找文件结尾(EOF)字符。如果找到EOF字符,将停止输入并激活OnComm事件,此时CommEvent属性设置为comEvEOF,这里bNewValue为布尔表达式,确定当找到EOF字符时,OnComm事件是否被激活。当bNewValue的设置值TRUE时,EOF字符找到时OnComm事件被激活。否则当VALUE值设为FALSE(默认)时,EOF字符找到时OnComm事件不被激活。

注意:当EOFEnable属性设置为FALSE时,OnComm控件将不在输入流中寻找EOF字符。

20)CDHolding属性

void SetCDHolding(BOOL bNewValue); BOOL GetCDHolding();

通过查询CD线的状态确定当前是否有传输。CD是从调制解调器发送到相连计算机的一个信号,指示调制解调器正在联机。该属性在设计时无效,在运行时为只读。属性的设置值为:当bNewValue为TRUE时,CD线为高电平;当bNewValue为FALSE时,CD线为低电平。注意当CD线为高电平(CDHolding=TRUE)且超时时,MSComm控件设置CommEvent属性为comEventCDTO(CD超时错误),并产生OnComm事件。

注意:在主机应用程序中捕获一个丢失的传输是特别重要的,例如一个公告板,因为呼叫者可以随时挂起(放弃传输)。CD也被称为Receive Line Signal Detect(RLSD)。

21)DSRHolding属性

void SetDSRHolding(BOOL bNewValue); BOOL GetDSRHolding();

确定DSR线的状态。DSR信号由调制解调器发送到相连计算机,指示作好操作准备。该属性在设计时无效,在运行时为只读。DSRHolding属性返回为TRUE时,表示DSR线高,返回FALSE时,表示DSR线低。当DSR线为高电平时(DSRHolding=TRUE)超时时,MSComm控件设置CommEvent属性为comEventDSRTO(数据准备超时)并产生OnComm事件。当为DTE(Data Terminal Equipment)机器写DSR/DTR握手例程时该属性是分有用的。

作者:blindpoint

主页:www.blindpoint.net

注意:有任何问题到www.blindpoint.net/bbs论坛下进行咨询探讨

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有