MSComm控件参考_第1页
MSComm控件参考_第2页
MSComm控件参考_第3页
MSComm控件参考_第4页
MSComm控件参考_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第 1 页 共 6 页 MSComm 控件参考控件参考 MSComm 是 Microsoft Communications Control 的简称 它是 Microsoft 公司提供的简化 Windows 下串口编程的 ActiveX 控件 它为应用程序提供了通过串行接口收发数据的简便方法 一 一 MSComm 控件的属性控件的属性 MSComm 控件有很多重要的属性 但首先必须熟悉几个属性 CommPort 设置并返回通信端口 号 Settings 以字符串的形式设置并返回数据传输速率 奇偶校验 数据比特 停止比特 PortOpen 设置并返回通信端口的状态 也可以打开和关闭端口 Input 从接收缓冲区返回和删除 字符 Output 向传输缓冲区写一个字符串 下面分别描述 MSComm 控件的属性 1 CommPort 属性 void SetCommPort short nNew Value short GetCommPort 这一属性用于设置并返回连接的串行端口号 Windows 将会利用该串口和外界通信 在设计时 nNewValue 可以设置成从 1 16 的任何数 默认值为 1 但是如果用 PortOpen 属性打开一个并不 存在的端口时 MSComm 控件会产生错误 68 设备无效 注意 必须在打开端口之前设置 CommPort 属性 2 Settings 属性 void Settings LPCSTR IpszNewValue String GetSettings 该属性用于设置并返回数据传输速率 奇偶校验 数据比特 停止比特参数 当端口打开时 如果 value 非法 则 MSComm 控件产生错误 380 非法属性值 其中 IpszNewValue 用字符串表示 由四个设置值组成 有如下的组成格式 BBBB P D S 这里 BBBB 为数据传输速率 P 为奇偶校验 D 为数据比特数 S 为停止比特数 value 的默认 值是 9600 N 8 1 表示传输速率为 9600bit s 无奇偶校验 8bit 数据比特 1bit 停止比特 数据 传输速率的合法值可以是 110 300 600 1200 2400 4800 9600 14 400 19 200 28 800 38 400 56 000 57 600 115 200 12 800 25 600 奇偶校验值可以设置为表 1 的任一值 表 1 奇偶校验设定值 设定值 描述 E偶校验 EVENT M标号校验 MARK N无效验 NONE O奇校验 ODD S空格校验 SPACE 数据比特数可以是 4 5 6 7 8 停止比特数可以是 1 1 5 2 注意 只有当通信的双方的 Settings 属性值都一样 通信连接才能生效 3 Handshaking 属性 这一属性用于设置或者返回硬件握手协议 也就是 PC 机和通信设备之间为了控制流速而设定的内 部协议 属性值可以设置为表 2 中的任一个 表 2 硬件握手协议设定值 设定值 值 描述 ComNone 0 默认值 无握手协议 comXonXOff 1 XON XOFF 握手 ComRTS 2Request To Send Clear To Send 握手 comRtsXonXoff 3Request To Send Clear To Send 握手皆可 4 RThreshold 属性 void SetRThreshold short nNew Value short GetRThreshold 在 MSComm 控件设置 CommEvent 属性为 comEvReceive 并产生 OnComm 之前 RThreshold 属 性设置并返回的要接收的字符数 这里 nNewValue 是 short 型参数 说明在产生 OnComm 事件之前 要接收的字符数 当接收字符后 若 RThreshold 属性设置为 0 默认值 则不产生 OnComm 事件 否则 该属性 为一阈值 当接收缓冲区那字节个数达到或超过该值后就会产生 OnComm 事件 例如 设置 第 2 页 共 6 页 RThreshold 为 1 接收缓冲区收到每一个字符都会使 MSComm 控件产生 OnComm 事件 4 CTSHolding 属性 void SetCTSHolding BOOL bNewValue BOOL GetCTSHolding 其属性设定值见表 3 表 3 CTSHolding 属性设定值 设定值 功能描述 TRUEClear To Send 线为 高电平 FALSEClear To Send 线为 低电平 该属性确定是否可通过查询 Clear To Send CTS 线的状态发送数据 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 线的状态 CTSHolding 属性 给出一种手工查询的方法 5 SThreshold 属性 void SetSThreshold short nNewValue short GetSThreshold MSComm 控件设置 CommEvent 属性为 comEvSend 并产生 OnComm 事件之前 设置并返回传输 缓冲区中允许的最小字符数 这里 nNewvalue 是 short 型数据 代表在 OnComm 事件产生之前在传 输缓冲区中的最小字符数 若设置 SThreshold 属性为 0 默认值 数据传输事件不会产生 OnComm 事件 若设置 SThreshold 属性为 1 当传输缓冲区完全空时 MSComm 控件产生 OnComm 事件 如果在传输缓冲 区的字符数小于 Value CommEvent 属性设置为 comEvSend 并产生 OnComm 事件 comEvSend 事件仅当字符数与 SThreshold 交叉时被激活一次 例如 如果 SThreshold 等于 5 仅当 在输出队列中字符数从 5 降到 4 时 comEvSend 才发生 如果在输出队列中从没有比 SThreshold 多 的字符 comEvSend 事件将绝不会发生 6 InputMode 属性 void SetInputMode long nNewValue long GetInputMode 该属性用于设置或者返回传输数据的类型 其取值和基本含义如表 4 所示 表 4 InputMode 属性及含义 设定值 值 描述 ComInputModeText 缺省 0通过 Input 属性以文本方式取回数据 comInputModeBinary 1通过 Input 属性以二进制方式检取回数据 7 InPutLen 属性 void SetInPutLen short nNewValue short GetInPutLen 该属性用于设置并返回 Input 属性从接收缓冲区读取的字符数 nNewvalue 是 short 型数值 说明 Input 属性从接收缓冲区读取的字符数 InPutLen 属性的默认值是 0 当设置 InPutLen 为 0 时 使用 Input 将 MSComm 控件读取接收缓 冲区中全部的内容 若接收缓冲区中 InPutLen 字符无效 Input 属性返回一个零长度字符串 在使用 Input 前 用户可以选择检查 InBufferCount 属性来确定缓冲区中是否已有需要数目的字符 该属性在从输出格式为定长数据的机器读取数据时非常有用 8 InBuffersize 属性 void SetInBufferCount short nNewValue short GetInBufferSize InBuffersize 属性用于设置或返回输入缓冲区的大小 默认值为 1024 字节 9 InBufferCount 属性 void SetInBufferCount short nNewValue short GetInBufferCount InBufferCount 属性用于返回输入缓冲区内的等待读取的字节个数 可以通过该属性值为 0 来清 除接收缓冲区 10 Input 属性 VARIANT GetInput Input 属性表示从接收缓冲区移走一串字符 将缓冲区中收到的数据读入变量 属性值为 Variant 第 3 页 共 6 页 型变量 该属性在端口未打开时不可用 在运行时是只读的 注意 当 InputMode 属性值为 0 时 文本模式 变量中含 String 型数据 当 InputMode 属性值为 1 二进制模式时 变量中含 Byte 型数组数据 11 PortOpen 属性 void SetPortOpen BOOL bNewValue BOOL GetPortOpen PortOpen 属性用于打开或者关闭端口 如果 bNewValue 设为 True 可以打开端口 设为 False 时可以关闭端口 一般情况下在程序开始时打开端口 在程序结束时关闭端口 当你的应用程序终 止时 MSComm 控件将自动关闭串口 在打开端口前 确定 CommPort 属性设置为正确的端口号 而且 用户的串口设备必须支持 Settings 属性中的设置 如果硬件设备不支持 Settings 属性中的一些 设置 则硬件工作或许不正确 12 OutBuffersize 属性 void SetOutBufferSize short nNewValue OutBuffersize 属性用于设置或者返回发送缓冲区的大写 值为整型表达式 表示传输缓冲区的字 节数 默认值为 512 字节 对发送缓冲区设置的越大 应用程序可以使用的内存就越少 然而 如 果你的发送缓冲区太小 缓冲区将会溢出 除非使用握手协议 13 outBufferCounter 属性 void SetOutBufferSize short nNew Value short GetOutBufferSize outBufferCounter 属性用于返回发送缓冲区内等待发送的字节数 可以用来清空发送缓冲区 14 OutPut 属性 void SetOutput const VARIANT OutPut 属性用于向发送缓冲区写数据流 属性为 Variant 变量 该属性在端口未打开时不可用 在运行时是只写的 注意 OutPut 属性 可以发送文本数据或二进制数据 传输文本数据时 应该将字符型数据放入 Variant 型标量中 传输二进制数 据 即按字节传送 时 应将字节型数据放入 Variant 型变量中 如果通常给应用程序发送 ANSI 字符串 可以以文本方 式发送 如果数据包含了内嵌控制字符 Null 字符等 必须将其作为二进制传递过去 15 CommEvent 属性 short GetCommEvent 如果在通信过程中发生错误或事件 将会引发 OnComm 事件并且改变其属性值 CommEvent 属 性值反映错误或者事件类型 通信程序的设计中可以根据该属性值执行不同的操作 该属性在端口 未打开时不可用 在运行时是只读的 通信错误的设定值如表 5 所示 通信事件的设定值如表 6 所 示 表 5 通信错误设定值 设定值 值 描述 comEventBreak1001接收到中断信号 comEventCTSTO 1002Clear to send 超时 comEventDSRTO 1003Data set ready 超时 comEventFrame 1004帧错误 硬件检测到一个帧错误 当双方设值的格式不一致时 就会 引发此错误 comEventOverrun 1006端口超速 一个字符没有在下一个字符到达之前被硬件读取 该字符 丢失 comEventCDTO 1007Carrier detect 超时 comEventRxOver 1008接收缓冲区溢出 comEventRxParity 1009奇偶校验错误 comEventTxFull 1010传输缓冲区溢出 表明输出缓冲区已满 不能再将字符排入输出缓冲 区 comEventDCB 1011检索端口 设备控制块 DCB 时的意外错误 表 6 通信事件设定值 设定值 值 描述 comEvSend 1发送事件 发送缓冲区的内容少于 SThreshold 指定的值 comEvReceive 2接收事件 接收缓冲区内字符数达到 Rthreshold 值 该事件在缓冲区内数据 第 4 页 共 6 页 被移走前将持续产生 利用此事件可编写接收数据的过程 ComEvCTS 3Clear to send 线变化 ComEvDSR 4Data set ready 线变化 ComEvCD 5Carrier detect 线变化 comEvRing 6振铃检测 comEvEOF 7文件结束 接收数据中出现文件结束 ASCII 码 26 字符 16 DTREnable 属性 void SetDTREnable BOOL bNewValue BOOL GetDTREnable DTREnable 属性确定在通信时是否使 DTR Data Terminal Ready 线有效 DTR 使计算机发送到调 制解调器的信号 表明计算机在等待数据传输 17 RTSEnable 属性 void SetRTSEnable BOOL bNewValue BOOL GetRTSEnable RTSEnable 属性确定是否使 RTS Request To Send 线有效 一般情况下 由计算机发送 RTS 信号 到连接的调制解调器 请求允许发送数据 18 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 字符 19 CDHolding 属性 void SetCDHolding BOOL bNewValue BOOL GetCDHolding 通过查询 Carrier Detect CD 线的状态确定当前是否有传输 Carrier Detect 是从调制解调器发送 到相联计算机的一个信号 指示调制解调器正在联机 该属性在设计时无效 在运行时为只读 属 性的设置值为 当 bNewValue 为 True 时 Carrier Detect 线为高电平 当 bNewValue 为 False Carrier Detect 线为低电平 注意当 Carrier Detect 线为高电平 CDHolding True 且超时时 MSComm 控件设置 CommEvent 属性为 comEventCDTO Carrier Detect 超时错误 并产生 OnComm 事件 注意 在主机应用程序中捕获一个丢失的传输是特别重要的 例如一个公告板 因为呼叫者可以随时挂起 放弃传输 Carrier Detect 也被称为 Receive Line Signal Detect RLSD 20 DSRHolding 属性 void SetDSRHolding BOOL bNewValue BOOL GetDSRHolding 确定 Data Set Ready DSR 线的状态 Data Set Ready 信号由调制解调器发送到相联计算机 指示 作好操作准备 该属性在设计时无效 在运行时为只读 DSRHolding 属性返回为 True 时 表示 Data Set Ready 线高 DSRHolding 属性返回值为 False 时 表明 Data Set Ready 线低 当 Data Set Ready 线为高电平 DSRHolding True 且超时时 MSComm 控件设置 CommEvent 属性为 comEventDSRTO 数据准备超时 并产生 OnComm 事件 当为 Data Terminal Equipment DTE 机器写 Data Set Ready Data Termial Ready 握手例程时该属性是十分有用的 二 二 MSComm 控件串口编程控件串口编程 基本流程基本流程 VC 6 0 提供的 MSComm 控件通过串行端口发送和接收数据 为应用程序提供串行通信功能 使用非常方便 但可惜的是 少有介绍 MSComm 控件的资料 下面就对 VC 6 0 中使用 MSComm 进行通信编程进行简单介绍 2 1 在当前 Project 中插入 MSComm 控件 打开 Project Add to Project Components and Controls Registered ActiveX controls 菜单选 择 Components Microsoft Communications Control version 6 0 命令插入到当前的 Project 中 结果就 添加了类 CMSComm 类 CMSComm 的相关文件 mscomm h 和 mscomm cpp 也一并加入 Project 中 如果 Project 是基于对话框的或 Project 中的视类是基于 CFormView 的 那么创建 CMSComm 类 第 5 页 共 6 页 是相当简单的 只需在 CFormView 对应的对话框体中插入 MSComm 控件 再在视类的 ClassWizard 中为该控件声明一个变量即可 本文中设为 m Com 这样在程序运行中 该 MSComm 控件都将是 有效的 在对话框中创建 MSComm 控件的过程也是相似的 如果视类不是基于 CFormView 的 那么就需要建立一个 MSComm 控件 创建的方法与普通的 ActiveX 控件的创建相类似 下面就是一个简单的例子 在 MainFrm h 中添加下面声明语句 projected CMSComm m Com 在 Mainfrm cpp OnCreate 函数中添加下列创建控件的语句 DWORD style WS VISIBLE WS CHILD if m Com Create NULL style CRect 0 0 0 0 this ID COMMCTRL TRACE0 Failed to create OLE Communications Control n return 1 fail to create 2 2 初始化并打开串口 对串口进行初始化一般来说要完成以下几个设置 设定通信端口号 即 CommPort 属性 设定通信协议 即 HandShaking 属性 设定传输速率等参数 即 Settings 属性 设定其它参数 有必要时再加上其它的属性设定 打开通信端口 即将 PortOpen 属性设为 TRUE 下面通过一段简单的源代码对上述步骤进行说明 这里假定 m Com 是有效的 CMSComm 对象 这个假定对于下文同样有效 m Com SetCommPort 1 选择 COM1 m Com SetInBufferSize 1024 设置输入缓冲区的大小 Bytes m Com SetOutBufferSize 512 设置输入缓冲区的大小 Bytes if m Com GetPortOpen 打开串口 m Com SetPortOpen TRUE m Com SetInputMode 1 设置输入方式为二进制方式 m Com SetSettings 9600 n 8 1 设置数据传输速率等参数 m Com SetRThreshold 1 为 1 表示有一个字符引发一个事件 m Com SetInputLen 0 2 3 捕捉串口事项 MSComm 控件可以采用查询或事件驱动的方法从端口获取数据 这里介绍使用比较广泛的事件 驱动方法 有事件 如接收到数据 发生时通知程序 并在程序中需要捕获并处理这些通信事件 下面的例子就简单地实现了对串口事项的捕捉 在 MainFrm h 中添加 protected afx msg void OnCommMscomm DECLARE EVENTSINK MAP 在 M

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论