RS232通信程序设计
- 格式:doc
- 大小:47.00 KB
- 文档页数:3
RS232通信程序设计
标签:it
【实验目的】
1、理解串口通信的原理。
2、设计在Windows环境下通过串口相互进行计算机会话的基本通信程序。
【实验性质】
综合与设计性实验
【实验条件】
需要带有RS232接口的计算机,一条RS232连接线(双机互联或一台计算机的两个串口互联)。
【实验指导】
在Windows环境下设计串口通信程序,一种途径是利用Microsoft公司提供的ActiveX控件MSComm.ocx。
它为开发RS232通信程序提供了简便方法。
1、MSComm控件的属性和事件
一个MSComm控件仅对应一个串行端口。
如果应用程序需要访问多个串口,必须使用多个控件。
MSComm控件有很多重要的属性,下面是几个最常用的属性:
1)CommPort:用于设置并返回连接的串口号,Windouws将使用该串口和外界通信。
2)Settings:用于设置并返回数据传输的通信参数。
例如设置值为:“4800,n,8,1”时,表示数据传输速率为4800bit/s,没有奇偶校验,数据位是8位,停止位是1位。
3)PortOpen:取值为true或flase,用于打开或者关闭端口。
4)InputMode:取值及其含义如表2-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机和通信设备之间为了
控制流速而设定的内部协议,取值及其含义如表2-2所示。
Value默认值为ComNone,无握手协议。
11)InBufferSize:设置或返回接收缓冲区的大小,默认值为1024B。
12)InBufferCount:设置或返回接收缓冲区等待计算机接收的字节数。
13)OnBufferSize:设置或返回发送缓冲区的大小,默认值为512B。
14)OnBufferCount:设置或返回发送缓冲区等待计算机发送的字节数。
15)CommEvent:该属性设计时无效,运行时只读。
一旦串口发生通信事件或产生错误,依据产生的事件和错误,MSComm控件为CommEvent属性赋不同的代码,同时产生OnComm事件。
用户程序就可以在OnComm事件处理程序中针对不同的代码,进行相应的处理。
CommEvent属性的代码、常数及含义如表2-3及表2-4所示。
MSComm控件只有一个事件,即OnComm事件。
当CommEvent属性的值发生变化时,就产生OnComm事件,标志发生了一个通信事件或一个错误。
在事件处理程序设计中可以根据CommEvent属性值来执行不同的操作。
2、C# 编程要点
MSComm控件可以为C#.NET、VC、VB、Delphi等Windows的编程语言所引用,下面以C#.NET为例说明在编写RS232通信程序的要点。
1)添加MSComm控件。
C# 开发平台在默认状态下工具箱中并无MSComm控件,需要在“项目”→“添加引用” →“COM”菜单栏加入Microsoft Comm Control 6.0组件,并在“工具” →“自定义工具箱”菜单中选择Microsoft Comm Control组件,这样就可以在工具箱中找到MSComm控件,把MSComm控件添加到FORM中。
2)串口属性设置。
在添加MSComm控件后,在通信之前要对属性进行设置。
根据前面的介绍,对MSComm控件设置如下:
AxMSCommLib.AxMSComm com; //定义MSComm控件变量
mPort=1; //设定串口号
If( com.PortOpen )
Com.PortOpen=false; //若该端口已经打开,则关闭该端口
Com.Rthreshold=1; //当接收到数据时就触发OnComm事件
Com.Settings=” 9600,n,8,1”; //设置参数:数据传输速率为9600bit/s,没有奇偶校验,数据//位是8位,停止位是1位
Com.Handshaking=None; //没有使用握手
协议
Com.InputMode=InputModeText; //文本形式取回
Com.InputLen=0; //当设置为0时,在Input可用时读取所有的数据
Com.OnComm+=new System.EventHandler(this.OnComm); //OnComm事件发生加入列表
Com.PortOpen=true; //打开端口
3)发送和接收数据。
数据发送容易实现,只需将要发送的数据赋值给Output,代码如下:
axMSComml.Output=”This is a test”; //发送的数据字符串
MSComm控件采用查询或事件驱动方法从串口获取数据,由于前面Rthreshold属性设置为1,所以只要有数据到达就会产生OnComm事件,实现接收数据代码如下:
Private void OnComm(object sender,System.Eventargs e)
{
string recievemsg;
if(com.InBufferCount>0) //检查接收到的数据长度是否大于0,若大于0表示接//收到数据
recievemsg= (string com.Input);
}。