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()得到当前事件值,再进行相应的处理。 |
|