论文部分内容阅读
一、串行通讯的基本原理
串行通讯是指外设和计算机之间使用一根数据信号线,数据在该信号线上按位进行传输,每一位数据都占据一个固定的时间长度。串行口的本质就是实现CPU与外围数据设备的数据格式转换(或者称为串并转换器),即当数据从外围设备输入计算机时,数据格式由位(bit)转化为字节数据;反之,当计算机发送下行数据到外围设备时,串口又将字节数据转化为位数据。
串行通讯方式常采用RS-232串行通讯方式,一个完整的RS-232接口有22根线,采用标准的25芯插头座(或者9芯插头座),25芯和9芯的主要信号线相同。串行通讯口的连接采用7根线直接连接方式,通过两对应答信号线相连,可进行全双工传输。
在Windows操作系统下,串行通讯在程序设计中实现一般有四种实现途径:① 汇编嵌入技术;②利用Windows API函数;③利用面向对象的软件开发工具编写串行通信类(即第3方提供的动态链接库)来实现;④利用串行通信控件MSComm实现。无论使用哪一种途径,其基本的操作步骤大致是一样的:首先初始化串口,比如端口号,波特率等属性,然后打开端口,通过接收缓冲区读上行数据,通过发送缓冲区写下行数据。最后通过事件驱动反映数据的到达与发送过程。
二、串行通讯在VB中的实现
Visual Basic 6.0提供的标准控件MSComm (Microsoft Communications Contro1)是Microsoft公司提供的简化Windows下串行通信编程的ActiveX控件,它为应用程序提供了通过串行接口收发数据的简便方法。使用MSComm控件主要是通过事件来处理串行口的交互,例如,在串口接收缓冲区中有字符,CD或者RTS线上一个字符到达或一个变化发生时,可以利用MSComm 控件的OnComm事件捕获并处理这些通讯事件。OnComm 事件还可以检查和处理通讯错误。在实际应用中,一个MSComm控件对应一个串行端口。如果应用程序需要访问多个串行端口,必须有相应数量的MSComm控件与之对应。下面介绍一下此控件的主要属性:
CommPort——设置或者返回串行端口号
Settings——以字符串的形式设置和返回波特率,奇偶校验,数据位和停止位
PortOpen——设置或返回通讯端口的状态,也可以打开和关闭一个端口
Input——从接收缓冲区里获取或删除数据
Output——给发送缓冲区里写数据
在VB6开发环境当中,单击“工程”菜单栏,在下拉列表框中选择“部件”,之后将“Microsoft Comm Control 6.0”前面的方框打勾,再单击“确定”命令按钮即可。在窗体中添加一个加入MSComm控件,简单安排好窗体布局。
(1)通讯参数设置:使用MSComm控件进行串口通讯之前,首先要对MSComm删控件进行初始化设置,初始化设置工作包括选择端口号、波特率、奇偶校验、数据位和停止位;设置通讯协议;设置输入、输出缓冲区的大小并清除输入输出缓冲区;设置接收到多少个字符才产生OnComm的接收事件;设置1次读取的字符数;设置接收数据的格式是二进制形式还是字符形式;最后打开串口。具体有关程序及说明如下。
Option Explicit
Public bdl As String’波特率
Public jym As String’校验位
Public sjw As String’数据位数
Public tzw As String’停止位数
Public dkh As String’端口号
Public jymsz As String’端口设置字符串
Private Sub Command1_Click()
’设置波特率
bdl = Combo1.Text
’设置校验码
If Combo2.Text = "无校验" Thenjym = "n"
Else If Combo2.Text = "偶数校验" Thenjym = "e"
Else If Combo2.Text = "标记校验" Thenjym = "m"
Else If Combo2.Text = "奇数校验" Thenjym = "o"
Else If Combo2.Text = "空格校验" Thenjym = "s"
End If
’设置使用的端口号
dkh = Combo3.Text
’设置数据位数
sjw = Combo4.Text
’设置停止位数
tzw = Combo5.Text
’设置使用的校验码方式
jymsz = bdl & "," & jym & "," & sjw & "," & tzw
Form2.Show
Unload Me
Unload Me
End Sub
Private Sub Form2_Load()
Combo1.Text = bdl
Combo2.Text = jym
Combo3.Text = sjw
Combo4.Text = tzw
Combo5.Text = dkh
MSComm1.Settings = jymsz
’设置输入、输出缓冲区的大小
MSComm1.InBufferSize = 1024
MSComm1.OutBufferSize = 512
’清除输入、输出缓冲区
MSComm1.InBufferCount = 0
MSComm1.OutBufferCount = 0
’设置接收到1个字符就产生接收的OnComm事件
MSComm1.RThreshold = 1
’设置一次读取所有的字符
MSComm1.InputLen = 0
’设置接收数据的格式为文本形式
MSComm1.InputMode = comInput ModeText
If MSComm1.PortOpen = False Then
MSComm1.PortOpen = True
End If
’打开串口
If MSComm1.PortOpen = False Then
MSComm1.PortOpen = True
End If
End Sub
(2)发送过程。数据的发送是将数据发送到计算机的串口缓存,通过调用MSComm控件的Output属性来实现。发送过程:
Private Sub Command1_Click()
MSComm1.Output = Text1.Text
End Sub
(3)接收过程。数据的接收是一个从计算机串口缓存读取数据的过程。采用MSComm控件的OnComm事件处理,利用MSComm控件INPUT属性实现数据的接收。接收过程:
Private Sub MSComm1_OnComm()
’先将原文本框清空
Text2.Text = ""
’接收发送的文本数据,如果收到则在文本框中显示,否则该文本框无显示
Text2.Text = Trim(MSComm1.Input)
End Sub
(4)程序执行完后关闭端口。
Private Sub Form_Unload(Cancel As Integer)
MSComm1.PortOpen = False
Unload Me
End Sub
三、小结
本文的例子虽然实现的功能很简单,但通过VB控件MSComm的Input和Output属性可以很方便的接收和发送串口缓冲区的数据,当然如果要编制较完善的通讯应用程序,还需要进行更深入的研究,比如通过使用“握手”的机制来增强通讯的安全性和稳定性,另外通过数据的重复发送达到收发数据的准确性等。
串行通讯是指外设和计算机之间使用一根数据信号线,数据在该信号线上按位进行传输,每一位数据都占据一个固定的时间长度。串行口的本质就是实现CPU与外围数据设备的数据格式转换(或者称为串并转换器),即当数据从外围设备输入计算机时,数据格式由位(bit)转化为字节数据;反之,当计算机发送下行数据到外围设备时,串口又将字节数据转化为位数据。
串行通讯方式常采用RS-232串行通讯方式,一个完整的RS-232接口有22根线,采用标准的25芯插头座(或者9芯插头座),25芯和9芯的主要信号线相同。串行通讯口的连接采用7根线直接连接方式,通过两对应答信号线相连,可进行全双工传输。
在Windows操作系统下,串行通讯在程序设计中实现一般有四种实现途径:① 汇编嵌入技术;②利用Windows API函数;③利用面向对象的软件开发工具编写串行通信类(即第3方提供的动态链接库)来实现;④利用串行通信控件MSComm实现。无论使用哪一种途径,其基本的操作步骤大致是一样的:首先初始化串口,比如端口号,波特率等属性,然后打开端口,通过接收缓冲区读上行数据,通过发送缓冲区写下行数据。最后通过事件驱动反映数据的到达与发送过程。
二、串行通讯在VB中的实现
Visual Basic 6.0提供的标准控件MSComm (Microsoft Communications Contro1)是Microsoft公司提供的简化Windows下串行通信编程的ActiveX控件,它为应用程序提供了通过串行接口收发数据的简便方法。使用MSComm控件主要是通过事件来处理串行口的交互,例如,在串口接收缓冲区中有字符,CD或者RTS线上一个字符到达或一个变化发生时,可以利用MSComm 控件的OnComm事件捕获并处理这些通讯事件。OnComm 事件还可以检查和处理通讯错误。在实际应用中,一个MSComm控件对应一个串行端口。如果应用程序需要访问多个串行端口,必须有相应数量的MSComm控件与之对应。下面介绍一下此控件的主要属性:
CommPort——设置或者返回串行端口号
Settings——以字符串的形式设置和返回波特率,奇偶校验,数据位和停止位
PortOpen——设置或返回通讯端口的状态,也可以打开和关闭一个端口
Input——从接收缓冲区里获取或删除数据
Output——给发送缓冲区里写数据
在VB6开发环境当中,单击“工程”菜单栏,在下拉列表框中选择“部件”,之后将“Microsoft Comm Control 6.0”前面的方框打勾,再单击“确定”命令按钮即可。在窗体中添加一个加入MSComm控件,简单安排好窗体布局。
(1)通讯参数设置:使用MSComm控件进行串口通讯之前,首先要对MSComm删控件进行初始化设置,初始化设置工作包括选择端口号、波特率、奇偶校验、数据位和停止位;设置通讯协议;设置输入、输出缓冲区的大小并清除输入输出缓冲区;设置接收到多少个字符才产生OnComm的接收事件;设置1次读取的字符数;设置接收数据的格式是二进制形式还是字符形式;最后打开串口。具体有关程序及说明如下。
Option Explicit
Public bdl As String’波特率
Public jym As String’校验位
Public sjw As String’数据位数
Public tzw As String’停止位数
Public dkh As String’端口号
Public jymsz As String’端口设置字符串
Private Sub Command1_Click()
’设置波特率
bdl = Combo1.Text
’设置校验码
If Combo2.Text = "无校验" Thenjym = "n"
Else If Combo2.Text = "偶数校验" Thenjym = "e"
Else If Combo2.Text = "标记校验" Thenjym = "m"
Else If Combo2.Text = "奇数校验" Thenjym = "o"
Else If Combo2.Text = "空格校验" Thenjym = "s"
End If
’设置使用的端口号
dkh = Combo3.Text
’设置数据位数
sjw = Combo4.Text
’设置停止位数
tzw = Combo5.Text
’设置使用的校验码方式
jymsz = bdl & "," & jym & "," & sjw & "," & tzw
Form2.Show
Unload Me
Unload Me
End Sub
Private Sub Form2_Load()
Combo1.Text = bdl
Combo2.Text = jym
Combo3.Text = sjw
Combo4.Text = tzw
Combo5.Text = dkh
MSComm1.Settings = jymsz
’设置输入、输出缓冲区的大小
MSComm1.InBufferSize = 1024
MSComm1.OutBufferSize = 512
’清除输入、输出缓冲区
MSComm1.InBufferCount = 0
MSComm1.OutBufferCount = 0
’设置接收到1个字符就产生接收的OnComm事件
MSComm1.RThreshold = 1
’设置一次读取所有的字符
MSComm1.InputLen = 0
’设置接收数据的格式为文本形式
MSComm1.InputMode = comInput ModeText
If MSComm1.PortOpen = False Then
MSComm1.PortOpen = True
End If
’打开串口
If MSComm1.PortOpen = False Then
MSComm1.PortOpen = True
End If
End Sub
(2)发送过程。数据的发送是将数据发送到计算机的串口缓存,通过调用MSComm控件的Output属性来实现。发送过程:
Private Sub Command1_Click()
MSComm1.Output = Text1.Text
End Sub
(3)接收过程。数据的接收是一个从计算机串口缓存读取数据的过程。采用MSComm控件的OnComm事件处理,利用MSComm控件INPUT属性实现数据的接收。接收过程:
Private Sub MSComm1_OnComm()
’先将原文本框清空
Text2.Text = ""
’接收发送的文本数据,如果收到则在文本框中显示,否则该文本框无显示
Text2.Text = Trim(MSComm1.Input)
End Sub
(4)程序执行完后关闭端口。
Private Sub Form_Unload(Cancel As Integer)
MSComm1.PortOpen = False
Unload Me
End Sub
三、小结
本文的例子虽然实现的功能很简单,但通过VB控件MSComm的Input和Output属性可以很方便的接收和发送串口缓冲区的数据,当然如果要编制较完善的通讯应用程序,还需要进行更深入的研究,比如通过使用“握手”的机制来增强通讯的安全性和稳定性,另外通过数据的重复发送达到收发数据的准确性等。