论文部分内容阅读
串口通信技术广泛用于远程监控和工业自动化领域,如视频、控制和数据采集等。而在实际工程中各种实时数据的保存,以及日后的查询功能往往是必不可少的。串口具有连接线少,通讯简单,得到了广泛使用。
一、PC的RS-232接头
PC的机箱后面都有串口。在应用中,不同系统连接方式不同,形式多种多样,其中最常用的连接方式是三线制连接,即使用软件握手信号或不用握手信号,也就是所说的流控制。这样就可以放弃复杂的硬件交换,而只使用XON/XOFF协议,在接收方不能接收更多数据时,可以发送一个XOFF(DC3即ASC13H);当它可以接收数据时,发送一个XON(DC1即ASC11H)来通知发送方可以接收更多的数据。 但应该注意,若传输的是二进制数据,标志字符也有可能在数据流中出现而引起误操作,这是软件流控制的缺陷,而硬件流控制不会有这个问题。
二、硬件基础
PC机共有四个串行端口可被寻址,但是这其中只有两个可以用来连接外部设备,每个基地址都是作为一个初始化偏移量用在八个寄存器内,这些寄存器由串行端口控制寄存器8250来使用。
三、基于WindowsXP下的应用程序
Visual Basic6.0(以下简称VB)以其简单易学、32位面向对象的程序设计等特点,倍受广大计算机程序开发者的青睐。一般用VB开发串行通信程序有两种方法:一是利用Windows的通信 API函数,另一种是采用VB标准控件Mscomm来实现。
利用API编写串口通信程序较为复杂,需要掌握大量通信知识,其优点在于可实现的功能更丰富、应用面更广泛,更适合于编写较为复杂的低层次通信程序。采用这种方法编写串行端口通信程序一般可分为以下几个步骤:
1.初始化串行端口
首先用CreateFile函数打开指定串口,置参数中访问类型为GENER IC_READ |GENERIC _WRITE、共享模式为0、创建标志为OPEN_EXISTIN G、模板句柄为NULL。
2.配置串口
使用CommConfigDialog函数以对话框方式,设置波特率 、数据位、奇偶校验、停止位和流控制方式,并且可以恢复缺省值。
3.超时控制
调用GetCcommTimeO uts函数获得当前的设置,用SetCommTim eOuts函数来完成设置。
4.数据传输
读写串行端口与读写文件采用的函数相同,即ReadFile、WriteFi le。读写操作可分四种方式: 查询方式、同步I/O、异步(后台)I/O和事件驱动I/O。
5.关闭串口
程序的终止可以自动关闭串口,也可用函数CloseHandle(),以便释放所独占资源。VB通信控件Mscomm
在VB6.0開发环境中,MSComm通信控件可直接从VB的ToolBox中加入窗体Form,即可用其进行通信。若ToolBox中无此控件,则用Tools的Custom Controls将MSComm,VBX从Windows的System子目录中加入VB的ToolBox中。
MSComm控件有许多属性(Property),其中一些重要的属性如下:
CommPort:设置串口号,类型为short ;
Settings:设置串口通信参数,类型为Csting;
PortOpen:设置或返回通信口的状态,类型为BOOL;
InputMode:设置从缓冲区读取数据的格式,类型为long;
Input:从接收缓冲区读取数据,类型为VARIANT;
Output:向发送缓冲区写入数据,类型为VARIANT;
InBufferCount:接收缓冲区中的字节数,类型为short ,
OutBufferCount:发送缓冲区中的字节数,类型为short ,
CommEvent:设置或返回Input每次读出的字节数,类型为short ,
CommEvent:串口事件,类型为short 。
其中串口号(CommPort)设置为1、2等,表示COM1、COM2。参数设置(Settings)的格式为“B,P,D,S”,B表示波特率,P表示奇偶校验(N:无校验,E:偶校验,O:奇校验),D表示字节有效位数,S表示停止位数。串口状态为BOOL变量,TRUE表示打开串口,FALSE表示关闭串口。InputMode使程序能方便地选择从缓冲区读取数据的格式,设置为0时,为字符串格式(Text);设置为1时,为二进制格式(Binary)。InputLen设置或返回的是用Input从缓冲区读字符串时每次读出的字符个数,这个性质对于读出数据块中长数据串非常有用。
四、VB标准控件Mscomm编程实例
1.PC机执行串口测试(COM1口2、3短接)
(1)添加一个MSComm控件,Name属性为MSComm1,用来建立与串口的连接;
(2)添加二个Text控件,Name属性分别为Text1、Text2;
(3)添加三个CommandButton控件,Name属性分别为CmdSend 、CmdReceive、CmdExit 分别用来实现传送、接收、退出。
2.部分源程序
(1)使用命令按钮控件关闭通信端口结束系统:
Private Sub CmdExit_Click()
MSComm1.PortOpen = False
End
End Sub
(2)使用命令按钮控件接收由通信端口传过来的字符串,并对其进行判断:
Private Sub CmdReceive_Click()
Dim buf$
buf = Trim(MSComm1.Input)
If Len(buf) = 0 Then
txtReceive.Text = "Empty"
Else
txtReceive.Text = buf
End If
End Sub
(3)使用命令按钮控件将数据由通信端口传送出去:
Private Sub CmdSend_Click()
MSComm1.Output = Trim(txtSend.Text)
一、PC的RS-232接头
PC的机箱后面都有串口。在应用中,不同系统连接方式不同,形式多种多样,其中最常用的连接方式是三线制连接,即使用软件握手信号或不用握手信号,也就是所说的流控制。这样就可以放弃复杂的硬件交换,而只使用XON/XOFF协议,在接收方不能接收更多数据时,可以发送一个XOFF(DC3即ASC13H);当它可以接收数据时,发送一个XON(DC1即ASC11H)来通知发送方可以接收更多的数据。 但应该注意,若传输的是二进制数据,标志字符也有可能在数据流中出现而引起误操作,这是软件流控制的缺陷,而硬件流控制不会有这个问题。
二、硬件基础
PC机共有四个串行端口可被寻址,但是这其中只有两个可以用来连接外部设备,每个基地址都是作为一个初始化偏移量用在八个寄存器内,这些寄存器由串行端口控制寄存器8250来使用。
三、基于WindowsXP下的应用程序
Visual Basic6.0(以下简称VB)以其简单易学、32位面向对象的程序设计等特点,倍受广大计算机程序开发者的青睐。一般用VB开发串行通信程序有两种方法:一是利用Windows的通信 API函数,另一种是采用VB标准控件Mscomm来实现。
利用API编写串口通信程序较为复杂,需要掌握大量通信知识,其优点在于可实现的功能更丰富、应用面更广泛,更适合于编写较为复杂的低层次通信程序。采用这种方法编写串行端口通信程序一般可分为以下几个步骤:
1.初始化串行端口
首先用CreateFile函数打开指定串口,置参数中访问类型为GENER IC_READ |GENERIC _WRITE、共享模式为0、创建标志为OPEN_EXISTIN G、模板句柄为NULL。
2.配置串口
使用CommConfigDialog函数以对话框方式,设置波特率 、数据位、奇偶校验、停止位和流控制方式,并且可以恢复缺省值。
3.超时控制
调用GetCcommTimeO uts函数获得当前的设置,用SetCommTim eOuts函数来完成设置。
4.数据传输
读写串行端口与读写文件采用的函数相同,即ReadFile、WriteFi le。读写操作可分四种方式: 查询方式、同步I/O、异步(后台)I/O和事件驱动I/O。
5.关闭串口
程序的终止可以自动关闭串口,也可用函数CloseHandle(),以便释放所独占资源。VB通信控件Mscomm
在VB6.0開发环境中,MSComm通信控件可直接从VB的ToolBox中加入窗体Form,即可用其进行通信。若ToolBox中无此控件,则用Tools的Custom Controls将MSComm,VBX从Windows的System子目录中加入VB的ToolBox中。
MSComm控件有许多属性(Property),其中一些重要的属性如下:
CommPort:设置串口号,类型为short ;
Settings:设置串口通信参数,类型为Csting;
PortOpen:设置或返回通信口的状态,类型为BOOL;
InputMode:设置从缓冲区读取数据的格式,类型为long;
Input:从接收缓冲区读取数据,类型为VARIANT;
Output:向发送缓冲区写入数据,类型为VARIANT;
InBufferCount:接收缓冲区中的字节数,类型为short ,
OutBufferCount:发送缓冲区中的字节数,类型为short ,
CommEvent:设置或返回Input每次读出的字节数,类型为short ,
CommEvent:串口事件,类型为short 。
其中串口号(CommPort)设置为1、2等,表示COM1、COM2。参数设置(Settings)的格式为“B,P,D,S”,B表示波特率,P表示奇偶校验(N:无校验,E:偶校验,O:奇校验),D表示字节有效位数,S表示停止位数。串口状态为BOOL变量,TRUE表示打开串口,FALSE表示关闭串口。InputMode使程序能方便地选择从缓冲区读取数据的格式,设置为0时,为字符串格式(Text);设置为1时,为二进制格式(Binary)。InputLen设置或返回的是用Input从缓冲区读字符串时每次读出的字符个数,这个性质对于读出数据块中长数据串非常有用。
四、VB标准控件Mscomm编程实例
1.PC机执行串口测试(COM1口2、3短接)
(1)添加一个MSComm控件,Name属性为MSComm1,用来建立与串口的连接;
(2)添加二个Text控件,Name属性分别为Text1、Text2;
(3)添加三个CommandButton控件,Name属性分别为CmdSend 、CmdReceive、CmdExit 分别用来实现传送、接收、退出。
2.部分源程序
(1)使用命令按钮控件关闭通信端口结束系统:
Private Sub CmdExit_Click()
MSComm1.PortOpen = False
End
End Sub
(2)使用命令按钮控件接收由通信端口传过来的字符串,并对其进行判断:
Private Sub CmdReceive_Click()
Dim buf$
buf = Trim(MSComm1.Input)
If Len(buf) = 0 Then
txtReceive.Text = "Empty"
Else
txtReceive.Text = buf
End If
End Sub
(3)使用命令按钮控件将数据由通信端口传送出去:
Private Sub CmdSend_Click()
MSComm1.Output = Trim(txtSend.Text)