CSerial类与MSComm控件.doc_第1页
CSerial类与MSComm控件.doc_第2页
CSerial类与MSComm控件.doc_第3页
CSerial类与MSComm控件.doc_第4页
CSerial类与MSComm控件.doc_第5页
全文预览已结束

下载本文档

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

文档简介

一、CSerialPort类支持多线程链接(非MODEM)的串口编程操作,其步骤如下:第一步:在*Dlg.h文件添加#include SerialPort.h(需先加入类头文件与源文件)第二步:添加成员变量 CSerialPort serialPort;第三步:在初始化对话框函数中调用serialPort.InitPort,serialPort.StartMonitoring第四步:发送,serialPort.WriteToPort(buf);第五步:接收,在类的定义中,声明消息函数afx_msg LONG OnCommunication(UINT, LONG); 在.cpp文件中添加映射ON_MESSAGE(WM_COMM_RXCHAR, OnCommunication) 并实现LONG *Dlg:OnCommunication(WPARAM ch, LPARAM port)基于单文档的应用程序,则初始化在新增加的OnInitialUpdate()中添加代码。说明:由于OnCommunication(WPARAM ch,LPARAM port)带参,所以其接收代码比MSComm控件的接收代码简单很多,不要涉及接收函数及其数据类型的转换。二、但对于MODEM控制,需要对类进行改写,采用MSComm控件比较理想。使用MSComm控件进行 编程的基本步骤:1) 在建立的工程中加入MSComm控件;2) 添加MSComm控件的ID关联变量(或者对象);3) 对串口进行初始化,设置MSComm控件的属性(一般在OnInitDialog中);4) 添加串口事件的消息处理函数OnComm(),在函数中根据应用需要,编写数据处理代码;(一般用于接收缓冲区里面的数据)5) 编写串口发送等其他代码;(一般在按钮处理函数中实现)6) 关闭串口。以上采用MSComm控件的是事件驱动方式,即通过函数OnComm()处理。主要属性,均有Get/Set属性,同时有In就由Out对除了Create()成员函数之外。MSComm 控件的常用属性MSComm 控件有很多重要的属性,但首先必须熟悉几个属性。CommPort 设置并返回通讯端口号(打开端口之前必须设置)。Settings 以字符串的形式设置并返回波特率、奇偶校验、数据位、停止位。PortOpen 设置并返回通讯端口的状态。也可以打开和关闭端口。 以上构建串口链接必须要。Input 从接收缓冲区返回和删除字符。Output 向传输缓冲区写1、Set/GetCommPort属性 设置并返回通讯端口号。语法 object.CommPortvalue (value 一整型值,说明端口号。)说明 在设计时,value 可以设置成从 1 到 16 的任何数(缺省值为 1)。但是如果用 PortOpen 属性打开一个并不存在的端口时,MSComm 控件会产生错误 68(设备无效)。注意:必须在打开端口之前设置 CommPort 属性。2、SetSettings 属性: 设置并返回波特率、奇偶校验、数据位、停止位参数。语法: object.Settings = value说明:当端口打开时,如果 value 非法,则 MSComm 控件产生错误 380(非法属性值)。Value 由四个设置值组成,有如下的格式:BBBB,P,D,SBBBB 为波特率,P 为奇偶校验,D 为数据位数,S 为停止位数。value 的缺省值是:9600,N,8,13、Set/GetPortOpen属性:用于打开或关闭串口,或者返回串口的开关状态语法:void CMSComm:SetPortOpen(BOOL bNewValue)BOOL CMSComm:GetPortOpen()说明:bNewValue设为TRUE,则打开串口;设为FALSE,则关闭串口。编程时可以在程序中打开或关闭串口,当程序终止时,MSComm控件自动关闭串口。4、Set/GetInput/Output属性:从接受缓冲区中读取/接受数据/向发送缓冲区读出数据(注意数据类型转换)VARIANT CMSComm:GetInput()void CMSComm:SetOutput(const VARIANT& newValue)返回数据类型为,该属性在串口没有打开时不能使用,在运行时为只读。5Set/GetRThreshold 属性:在 MSComm设置 CommEvent 属性为 comEvReceive 并产生 OnComm 之前,设置并返回的要接收的字符数。语法 object.Rthreshold = value (value 整型表达式,说明在产生 OnComm 事件之前要接收的字符数。 )说明 当接收字符后,若 Rthreshold 属性设置为 0(缺省值)则不产生 OnComm 事件。例如,设置 Rthreshold 为 5,接收缓冲区收到每5个字符都会使 MSComm 控件产生 OnComm 事件。6、Error 常数:常数值描述comEventBreak 1001 接收到中断信号(Break信号)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) 时的意外错误7、OnComm 常数,由GetCommEvent获取当前事件值。常数 值 描述comEvSend 1 发送事件。(发送缓冲区字符数少于SThreshold)comEvReceive 2 接收事件。(接受到Rthreshold个字符)comEvCTS 3 clear-to-send 线变化。(CTS)comEvDSR 4 data-set ready 线变化。(DSR)comEvCD 5 carrier detect 线变化。(CD)comEvRing 6 振铃检测。comEvEOF 7 文件结束。8、Set/GetInputLen 属性:设置并返回 Input 属性从接收缓冲区读取的字符数。语法 object.InputLen = valueInputLen 属性语法包括下列部分:value 整型表达式,说明 Input 属性从接收缓冲区中读取的字符数。说明:InputLen 属性的缺省值是 0。设置 InputLen 为 0 时,使用 Input 将使 MSComm 控件读取接收缓冲区中全部的内容。若接收缓冲区中 InputLen 字符无效,Input 属性返回一个零长度字符串 ()。在使用 Input 前,用户可以选择检查 InBufferCount 属性来确定缓冲区中是否已有需要数目的字符。该属性在从输出格式为定长数据的机器读取数据时非常有用。9、Set/GetInBufferSize/OutBufferSize属性:设置或返回输入/接收缓冲区的大小(提供的内存大小)。语法:void CMSComm:SetInBufferSize(short nNewValue)Short CMSComm:GetInBufferSize()说明:设置值的缺省(默认)大小为1024字节。10.Set/GetInBufferCount/ OutBufferCount属性:设置或返回输入缓冲区/发送缓冲区内等待读取/清空的字节个数。语法:void CMSComm:SetInBufferCount(short nNewValue)Short CMSComm:GetInBufferCount()说明:当设置属性值为0时,清空接受缓冲区。11、Set/GetInputMode 常数:常数 值 描述comInputModeText 0 (缺省)通过 Input 属性以文本方式取回数据。(String类型数据)comInputModeBinary 1 通过 Input 属性以二进制方式检取回数据。(需采用Byte数组型数据)如何发送接受ASCII值为0或大于128的字符,将数据保存在有长度值的字符数组中即可。串口通信默认的方式为ASCII文本方式(即字符),但可以发送接收十六进制数据。默认以ASCII文本方式是不能发送0x00字符的,即发送以十六进制显示是不能看到的,详细参考N

温馨提示

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

评论

0/150

提交评论