【笔记】VB控件MSComm功能介绍

  VB中的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 属性给出一种手工查询的方法。

  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 握手皆可。 

  OnComm 常数

  常数          值     描述 
  comEvSend       1          发送事件。 
  comEvReceive    2      接收事件。 
  comEvCTS     3      clear-to-send 线变化。 
  comEvDSR     4      data-set ready 线变化。 
  comEvCD       5      carrier detect 线变化。 
  comEvRing     6      振铃检测。 
  comEvEOF     7      文件结束。 

  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 属性来确定缓冲区中是否已有需要数目的字符。该属性在从输出格式为定长数据的机器读取数据时非常有用。



转载于:https://www.cnblogs.com/kongtiao/archive/2011/05/17/2048963.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/378420.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

string charat_Java String charAt()方法与示例

string charat字符串charAt()方法 (String charAt() Method) charAt() method is a String class method in Java, it is used to get the character from specified index from a given string. charAt()方法是Java中的String类方法,用于从给定字符串的指定索引中获…

opencv模板匹配

matchTemplate函数参数 模板匹配是通过模板在采集到的原图像进行滑动寻找与模板图像相似的目标。模板匹配不是基于直方图的方式,而是基于图像的灰度匹配。 6种匹配度量方法: 平方差匹配法CV_TM_SQDIFF 归一化平方差匹配法CV_TM_SQDIFF_NORMED 相关匹配…

Java程序设计4——集合类

1 JAVA集合概述 Java集合封装了一系列数据结构比如链表、二叉树、栈、队列等,然后提供了针对这些数据结构的一系列算法比如查找、排序、替换,使编程难度大大降低。(这句话有可能是非法…

Python中的a+=a和a=a+a的区别(认真看完后,我相信你一定会回来感谢我的)

一、先来两段代码! a 100def beyond(num):numnumprint(num)beyond(a)#结果为:200 print(a)#结果为:100a 100def beyond(num):numnumnumprint(num)beyond(a)#结果为:200 print(a)#结果为:100通过这两段代码的结果可以…

安装linux后win7引导程序,安装Windows7+Ubuntu+CentOS三系统之后的引导问题

依次安装了Windows7、Ubuntu12.04、CentOS6.3系统后,开机引导项只有CentOS和Other(即Windows7)两个选项,无法进入Ubuntu系统,所以利用Ubuntu的LiveCD光盘启动后进行如下操作对grub进行修复,步骤如下:启动Live CD&#…

Web之神php

我开始学习做网页的时候用的是asp,后来转行用php。以前只知道php很好学,并且很方便。我学习php的时候关于php的书种类很少好像那时候我在当当上面只看到3本,跟现在没法比,现在大家再学习php就简单多了,那么多书那么多资料。 现在我…

python与tensorflow知识点截图集锦(持续囤积)

目录前言conda环境管理python语法【1】语言属性【2】代码缩进问题【3】input和output函数与print函数【4】关键字与简单数据类型与简单运算符【5】利用缩进体现逻辑关系【6】数据结构:列表与元组【7】数据结构:字典【8】数据结构:集合【8】基…

string concat_Java String concat()方法与示例

string concat字符串concat()方法 (String concat() Method) concat() is a String method in Java and it is used to concatenate (add) a given string to the string. It returns a concatenated string. concat()是Java中的String方法,用于将给定的字符串连接(…

第五章 染料结构对染色性能的影响单元测验

‎1,引起染料结构发生变化的因素有() 染料商品添加剂及方法。 染料合成中间体选择及合成条件。 染色助剂。 染色温度。 2,染料结构影响染色()性能 染色热力学性能。 染色牢度。 染色动力学性能。 染色匀染性能。 3,染料精制除杂时,染液中加入的溶剂应该具有()性能 …

sql2008怎么转移到sql2005

一般来说,最新版本会向下兼容,如果旧版本想用新版本则不行。 但是还是有一些办法的,可以参考一下。-- 对象资源管理器(没有的话按F8) 连接到你的2008实例--右键你要降级的数据库-- 任务-- 生成脚本-- 在随后出现的脚本中, 单击"下一步&q…

字符搜索正则表达式语法详解

工作之余抽点时间出来写写博文,希望对新接触的朋友有帮助。明天在这里和大家一起学习一下字符搜索 作为一个术技,时常会到碰正则表达式相干的西东,很多时候忙着赶进度,都是在网上找一个可以决解的正则表达式,或是换另外…

gRPC之grpc resolver

1、grpc resolver 当我们的服务刚刚成型时,可能一个服务只有一台实例,这时候client要建立grpc连接很简单,只需要指定server 的ip就可以了。但是,当服务成熟了,业务量大了,这个时候,一个实例就…

linux测试固态硬盘读写速度,在 Linux 上检测 IDE/SATA SSD 硬盘的传输速度

你知道你的硬盘在 Linux 下传输有多快吗?不打开电脑的机箱或者机柜,你知道它运行在 SATA I (150 MB/s) 、 SATA II (300 MB/s) 还是 SATA III (6.0Gb/s) 呢?你能够使用 hdparm 和 dd 命令来检测你的硬盘速度。它为各种硬盘的 ioctls 提供了命…

stl标准模板库_C ++标准模板库(STL)中的array :: fill()

stl标准模板库fill() is a member function of "array container", which sets a given value to all array elements. It can also be used to set the value to other of containers also. Value type should be same as container type. fill()是“数组容器”的成…

Opencv——批量处理同一文件夹下的图片(解决savedfilename = dest + filenames[i].substr(len)问题)

文章目录前言一、完整代码二、实现效果前言 第一份代码实现了批量修改同一文件夹下图片的尺寸,有其他需求时仅需修改处理部分的代码以及文件夹路径。 第二份代码实现了批量截取同一文件夹下每张图片的ROI区域作为结果保存,注意截取后按下enter键才会跳到…

linux统计文件目录及其文件个数

linux下统计目录及其子目录的文件的个数 查看某目录下文件的个数 ls -l |grep "^-"|wc -l或find ./company -type f | wc -l 查看某目录下文件的个数,包括子目录里的。 ls -lR|grep "^-"|wc -l查看某文件夹下目录的个数,包括子目录里…

处理文件、摄像头和图形用户界面

1、基本I/O脚本 1.1 读/写图像文件 import numpy import cv2#利用二维Numpy数组简单创建一个黑色的正方形图像 img numpy.zeros((3,3),dtypenumpy.uint8) img #结果为:array([[0, 0, 0],[0, 0, 0],[0, 0, 0]], dtypeuint8)img.shape#结果为:(3, 3)###…

linux桌面天气,Ubuntu 14.10中安装和配置天气应用

对于操作系统平台而言,有各种小插件功能方便用户日常应用。在Ubuntu桌面中提供天气信息的功能,可以使用Unity Dash和桌面应用来获得相关信息,比如Typhoon。但对于用户而言,可以提供快速查询天气状况和温度数据,并且只需…

使用ACE_SOCK_SEQPACK_Association获取socket连接的本地及远程IP端口信息

int connect(const std::string& ip, int port){ ACE_INET_Addr portAddr(port, ip.c_str()); ACE_SOCK_Connector connector; ACE_SOCK_Stream peer; if (-1 connector.connect(peer, portAddr)) { std::cout << "连接服务器(" <&…

linux批处理操作系统_批处理操作系统

linux批处理操作系统批处理操作系统 (Batch Processing Operating System) When we are working in an environment there is a restriction of making use of computer resources effectively and improvement in the programmers output. When we are working with tapes a l…