MSComm控件是微软公司开发的专门用于串行通信的控件。通过设置控件的几个属性,然后添加空间的事件响应代码,就可以使串口按照要求进行工作。
MSComm最常用的属性
1. CommPort属性: 设置或获取使用的串口编号(必须在打开串口之前设置)
void SetCommPort(short nNewValue); //设置串口编号
short GetCommPort(); //返回正在使用的串口编号
2. Settings属性:设置或获取串行通信的通信参数,参数包括波特率、奇偶校验类型、数据位数及停止位数等4个参数(通信双方的Settings参数设置必须相同,否则无法通信)
void SetSettings(LPCTSTR lpszNewValue); //设置通信参数,由lpszNewValue来表示
CString GetSettings(); //读取当前串口通信参数
3. PortOpen属性:打开或关闭串口
void SetPortOpen(BOOL bNewValue);
BOOL GetPortOpen();
4. Input属性:从串口通信输入缓冲区获取数据。注意: 执行该函数 ,返回并删除接受缓冲区中的数据。默认情况下读取缓冲区中的全部内容,若设置InputLen属性值大于0,则读取的字符数量由InputLen属性值决定。
VARIANT GetInput();
5. Output属性: 向串口通信输出缓冲区写入数据,然后通过串口将数据发送出去。
void SentOutput(const VARIANT& newValue);
注意: 串口通信缓冲区中的数据都是VARIANT类型的数据,所以在写入或者读取的时候都需要进行数据类型转换。
与输出操作有关的属性
1. InputLen属性:默认值为0,读取整个缓冲区的内容
void SetInoutLen(short nNewValue);
short GetInputLen();
2. InputMode属性:设置读取数据的方式,为0:表示以文本方式从输入缓冲区读取数据;为1:表示以二进制方式从输入缓冲区读取数据。
void SetInputMode(long nNewValue);
long GetInputMode();
3. InBufferSize属性: 默认值1024(字节)
void SetInBufferSize(short nNewValue);
short GetInBufferSize();
4. InBufferCount属性:可以读取的有效数据个数
short GetInBufferCount();
void SetInBufferCount(short nNewValue); //nNewValue为0时,清空输入缓冲区,其他参数都将导致函数出错
5. RThreshold属性:该属性代表一个阀值。当接受缓冲区中的字符达到该阀值时,MSComm控件就会产生OnComm事件,并且CommEvent属性会被设置为CommEvReceive,即接受事件。
void SetRThreshold(short nNewValue); //若该值为0,将不会产生OnComm事件
short GetRThreshold();
6. CommEvent属性: 当控件运行错误或产生事件时,向程序报告事件类型
short GetCommEvent();
void SetCommEvent(short nNewValue);
7. EOFEnable属性:决定在输入过程中,控件是否寻找文件结尾EOF字符
void SetEOFEnable(BOOL bNewValue);
BOOL GetEOFEnable();
与输出操作有关的属性
1. OutBufferSize属性:指示输出缓冲区的长度
void SetOutBufferSize(short nNewValue);
short GetOutBufferSize();
2. OutBufferCount属性:输出缓冲区中的有效可用字符个数
short GetOutBufferCount();
void SetOutBufferCount(short nNewValue);
3. SThreshold属性:该属性代表一个阀值。当接受缓冲区中的字符达到该阀值时,MSComm控件就会产生OnComm事件,并且CommEvent属性会被设置为CommEvSend
void SetSThreshold(short nNewValue); //若该值为0,将不会产生OnComm事件
short GetSThreshold();
与传输控制有关的属性
如果在串口通信时使用硬件握手信号,那么应该在程序中操作这些硬件握手信号;否则,MSComm控件将按照无握手进行操作。
1. Handshaking属性:确定是否使用握手及采取何种握手方式。
2. DTREnable属性:Data Terminal Ready
3. RTSEnable属性:Request To Send
4. DSRHolding属性: Data Set Ready
5. CTSHolding属性: Clear To Send
6. CDHolding属性: Carrier Detect
MSComm控件事件
MSComm控件只有一个事件,无论何时当CommEvent属性的值变化时,就会激发OnComm事件,根据CommEvent属性值判断具体事件。在OnComm事件的响应代码断内使用Switch函数根据CommEvent值来分别执行各种情况下的处理程序。