VB中实现9位数据格式的串行通信
IT商界
在多机通信中经常要用到9位数据格式的串行通信,而第9位数据则通常用于区分地址帧与数据帧,一般第9位是1的数据为地址,第9位是0的则为数据。异步串行通信的数据格式是:起始位+数据+奇偶校验位+停止位。其中,起始位1位;数据位位7位或者8位;奇偶校验位0或者1位;停止位1、1.5、或者2位。PC机上要传输9位数据的串行通信,可以通过设置奇偶检验位来实现。
一、VB中串行通信的编程
VB中可以使用MSCOMM控件实现串行通信。具体步骤如下:
1.新建一个工程。
2.在工具箱右击,选择“部件”,将“Microsoft Comm Control 6.0”选上。
3.在Form1中加入MSComm1、Command1、Text1。
4.初始化。
Private Sub Form_Load()
Me.MSComm1.CommPort=1 'COM1
'波特率9600,无奇偶检验,8位数据,一位停止位
Me.MSComm1.Setting="9600,n,8,1"
'输入缓冲区有一个字节数据就触发OnComm事件
Me.MSComm1.RThreshold = 1
Me.MSComm1.InputLen = 1 '接收长度为1个字节
'二进制接收方式
Me.MSComm1.InputMode = comInputModeBinary
Me.MSComm1.PortOpen = True '打开串口
End Sub
5.发送数据。
Private Sub Command1_Click()
'发送的数据定义成Byte型数据
Dim DataToSend(1 To 100) As Byte
Dim i As Integer
For i = 1 To 100 '假设发送数据1 到 100
DataToSend(i) = i
Next i
Me.MSComm1.Output = DataToSend '发送数据
End Sub
6.接收数据。
Private Sub MSComm1_OnComm()
Dim DataReceive() As Byte
Select Case Me.MSComm1.CommEvent
Case comEvReceive: '接收到数据
DataReceive = Me.MSComm1.Input '接收数据
'显示数据
Me.Text1.Text = CStr(DataReceive(0))
Case Else:
'其它事件处理
End Select
End Sub
二、第9位数据的实现
奇偶检验中有MASK和SPACE两个值,当设置成MASK时输出的数据中奇偶检验位始终为1,如果设置为SPACE则输出的数据的奇偶检验位始终为0,因而可以通过这种方式来实现9位数据格式的传输。
1.发送第9位为1的数据。
Private Sub sendaddress(ByVal address As Byte)
Dim tmp(1 To 1) As Byte
tmp(1) = address
If Me.MSComm1.PortOpen=True Then
Me.MSComm1.PortOpen = False '修改设置前必须先关闭串口
End if
Me.MSComm1.Settings = "9600,m,8,1" '修改设置
Me.MSComm1.PortOpen = True
Me.MSComm1.Output = tmp
End Sub
2.发送第9位为0的数据。
发送第9位为0的数据只要将上面的设置改为“9600,s,8,1“就可以了。
Private Sub senddata(ByVal data As Byte)
Dim tmp(1 To 1) As Byte
tmp(1) = data
If Me.MSComm1.PortOpen=True Then
Me.MSComm1.PortOpen = False '修改设置前必须先关闭串口
End if
Me.MSComm1.Settings = "9600,s,8,1" '修改设置
Me.MSComm1.PortOpen = True
Me.MSComm1.Output = tmp
End Sub
通过sendaddress、senddata就可以对数据进行简单的打包传输了。
以上代码在VB6.0中测试通过,且在笔者的直流电流传感器的调试中使用过。