1、MSComm控件的属性和事件
(1)CommPort:用于设置并返回连接的串口号,Windows将使用该串口和外界通信。
(2)Settings:用于设置并返回数据传输的通信参数。例如设置值为“9600,n,8,<?xml:namespace prefix = st1 />1”时,表示数据传输速率为9600bit/s,没有奇偶校验,数据位是8位,停止位是1位。
(3)PortOpen:取值为true或false,用于打开或者关闭端口。
(4)InputMode:取值及其含义如表所示,用于设置或返回Input属性取回的数据的类型。
InputMode属性的设置值
常数
值
含义描述
ComInputModeText
0
数据通过Input属性以文本形式取回(默认)
ComInputModeBinary
1
数据通过Input属性以二进制形式取回
5)Inputlen:设置或返回一次从接收缓冲区中读取的字节数。
6)InPut:用于从接收缓冲区读取Inputlen长度的数据,并将接收到的数据赋予变量。
7)OutPut:用于向发送缓冲区写数据,OutPut属性可以发送文本或二进制数据。
8)Rthreshold:该属性为一阀值,当接收缓冲区中字符数达到该值时,MSComm控件设置Commevent属性为ComEvReceive,并产生OnComm事件,用户可在OnComm事件处理程序中进行相应处理,若Rthreshold属性设置为0,则不产生OnComm事件。
9)Sthreshold:该属性亦为一阀值,当发送缓冲区中字符数小于该值时,MSComm控件设置Commevent属性为ComEvSend,并产生OnComm事件,若Sthreshold属性设置为0,则不产生OnComm事件。要特别注意的是,仅当发送缓冲区中字符数小于该值的瞬间才产生OnComm事件,其后就不再产生OnComm事件。
10)Handshaking:用于设置或者返回硬件握手协议,即PC机和通信设备之间为了控制流速而设定的内部协议。
11)InBufferSize: 设置或返回接收缓冲区的大小,默认值为1024B。
12)InBufferCount:设置或返回接收缓冲区中等待计算机接收的字节数。
13)OutBufferSize:设置或返回发送缓冲区的大小,默认值为512B。
14)OutBufferCount:设置或返回发送缓冲区中等待计算机发送的字节数。
(2)C#编程要点
1)串口属性设置
AxMSCommLib.AxMSComm com; //定义MSComm控件变量
com.CommPort = 1; //设定串口号
if(com.PortOpen)
com.PortOpen = false; //若该端口已经打开,则关闭该端口
com.RThreshold = 1; //当接收到数据时就触发OnComm事件
//设置参数:数据传输速率为9600bit/s,没有奇偶校验,数据位是8位,停止位是1位
com.Settings = " 9600,n,8,1";
com.Handshaking = MSCommLib.HandshakeConstants.comNone; //没有使用握手协议
com.InputMode = MSCommLib.InputModeConstants.comInputModeText;//文本形式取回
com.InputLen = 0; //当设置为零时,在Input可用时读取所有的数据
com.OnComm += new System.EventHandler(this.OnComm); //OnComm事件发生,加入列表
com.PortOpen = true; //打开端口
2)发送和接收数据数据发送的容易实现,只需将要发送的数据赋值给 Output,代码如下:
axMSComm1.Output="This is a test"; //发送的数据字符串
MSComm 控件采用查询或事件驱动方法从串口获取数据,由于前面 Rthreshold 属性设置为 1,所以只要有数据到达就会产生 OnComm 事件,实现接收数据代码如下:
private void OnComm(object sender, System.EventArgs e)
{
string recievemsg; //检查接收到的数据长度是否大于0,若大于0表示接收到数据
if(com.InBufferCount > 0)
recievemsg =(string)com.Input;