分享

(三)MSComm控件进行串口编程的基本步骤

 newencn 2011-10-25
MSComm控件进行串口编程的基本步骤
1在建立的工程中插入MSComm控件
2添加MSComm控件ID的控制变量或对象
3对串口进行初始化,设置MSComm控件的属性
4添加串口事件的消息处理函数OnComm()函数,在函数中根据应用需要,编写数据处理代码
5编写串口发送等其他代码
6关闭串口


个MSComm控件只能对应一个串口,如果应用程序需要访问多个串口,必须使用多个MSComm控件。

处理通信问题的方式:事件驱动方式(与中断原理类似,触发一个事件处理函数),查询方式。

MSComm控件的重要属性中的一部分
CommPort设置并返回通信端口号
Settings以字符串的形式设置并返回波特率、奇偶校验、数据位、停止位。
PortOpen设置并返回通信端口的状态。可以用来打开和关闭端口
Input从接受缓冲区返回和删除字符串
Output向传输缓冲区写一个字符串
每个属性都通过Get/Set函数对来获取或设置控件的属性


属性简介

CommPort
设置并返回端口号
void CMSComm::SetCommPort(short nNewValue)
short CMSComm::GetCommPort()

RThreshold
在MSComm控件设置CommEvent属性为comEvReceive并产生OnComm之前,设置并返回要接收的字符数。达到设定值则触发OnComm。
void CMSComm::SetRThreshold(short nNewValue)
short CMSComm::GetRThreshold()


CTSHolding
确定是否可通过查询CTS线的状态发送数据。硬件握手的手工查询
void CMSComm::SetCTSHolding(BOOL bNewValue)
BOOL CMSComm::GetCTSHolding()

SThreshold
在MSComm控件设置CommEvent属性为comEvSend并产生OnComm之前,设置并返回传输缓冲区中允许的最小字符数。
void CMSComm::SetSThreshold(short nNewValue)
short CMSComm::GetSTreshold()

Handshaking
设置或返回硬件握手状态,使用内部通信协议
void CMSComm::SetHandshaking(long nNewValue)
long CMSComm::GetHandshaking()

InputMode
设置或返回传输数据的类型
void CMSComm::SetInputMode(long nNewValue)
long CMSComm::GetInputMode()
DSRHolding
确定DSR线的状态。
void CMSComm::SetDSRHolding(BOOL bNewValue)
BOOL CMSComm::GetDSRHolding()

Settings
设置并返回波特率、奇偶校验、数据位、停止位参数
void CMSComm::SetSettings(LPCTSTR lpszNewValue)
CString CMSComm::GetSettings()
"BBBB,P,D,S"BBBB为波特率,P为奇偶校验,D为数据位数,S为停止位数
缺省值为"9600,N,8,1"

InputLen
设置并返回Input属性从接收缓冲区读取的字符数
void CMSComm::SetInputLen(short nNewValue)
short CMSComm::GetInputLen()
缺省值为0,使用Input将使MSComm控件读取接收缓冲区中的全部的内容。在使用Input前,可检查InBufferCount属性来确定缓冲区中是否已有需要数目的字符。此属性在从输出格式为定长数据的机器读取数据时非常有用。

InBufferSize
设置或返回输入缓冲区的大小
void CMSComm::SetInBufferSize(short nNewValue)
short CMSComm::GetInBufferSize()
默认为1024Byte

InBufferCount
设置或返回输入缓冲区内等待读取的字节个数
void CMSComm::SetInBufferCount(short nNewValue)
short CMSComm::GetInBufferCount()
当设置InBufferCount属性的值为0时,可以清空接收缓冲区(很有用的功能)

OutBufferSize
设置或返回发送缓冲区的大小
void CMSComm::SetOutBufferSize(short nNewValue)
short CMSComm::GetOutBufferSize()
默认为512字节。此值不能太小,否则缓冲区易溢出,但太大会不必要地占用内存。

OutBufferCount
返回发送缓冲区的字节数或者清空发送缓冲区
void CMSComm::SetOutBufferCount(short nNewValue)
short CMSComm::GetOutBufferCount()
设置值为0时清空发送缓冲区

InPut
从接收缓冲区内读出数据
VARIANT CMSComm::GetInPut()
返回为VARIANT型变量
当InPutMode为0时,检取数据为文本方式,变量中含有String型数据类型,当InPutMode为1时,检取数据为二进制方式,变量中含Byte数组型数据。

OutPut
向发送缓冲区写数据,或返回发送缓冲区当前的数据
void CMSComm::SetOutPut(const VARIANT&newValue)
VARIANT CMSComm::GetOutPut()

PortOpen
用于打开或关闭串口,或返回串口的开、关状态
void CMSComm::SetPortOpen(BOOL bNewValue)
BOOL CMSComm::GetPortOpen()
TURE打开串口,FALSE关闭串口,程序终止后,MSComm控件自动关闭串口

EOFEnable
确定在输入过程中MSComm控件是否寻找文件结尾EOF字符,如果找到EOF字符,将停止输入并激活OnComm事件,此时CommEvent属性设置为ComEvEOF
void CMSComm::SetEOFEnable(BOOL bNewValue)
BOOL CMSComm::GetEOFEnable()

DTREnalbe
设置或返回DTR线状态。
void CMSComm::SetDTREnable(BOOL bNewValue)
BOOL CMSComm::GetDTREnable()

RTSEnable
确定是否使RTS线有效
void CMSComm::SetRTSEnable(BOOL bNewValue)
BOOL CMSComm::GetRTSEnable()

Break
设置或清除中断信号的状态
void CMSComm::SetBreak(BOOL bNewValue)
BOOL CMSComm::GetBreak()

CommID
返回一个说明通信设备的句柄。
void CMSComm::SetCommID(long nNewValue)
long CMSComm::GetCommID()
该值与WindowsAPICreateFile函数返回的值一致。

NullDiscard
确定Null字符是否从端口传送到接收缓冲区
void CMSComm::SetNullDiscard(BOOL bNewValue)
BOOL CMSComm::GetNullDiscard()

OnComm事件和CommEvent属性
设置或返回无论何时当CommEvent属性的值变化时,就产生OnComm事件,标志发生了一个通信事件或一个错误。CommEvent属性值反映错误或者事件类型,通常在程序中的事件消息处理函数中对CommEvent事件进行处理。
void CMSComm::SetCommEvent(short nNewValue)
short CMSComm::GetCommEvent()
通常由函数GetCommEvent()得到当前事件值,再进行相应的处理。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多