纯软件实现串口地址转换的最大优势就在于通用性。由于不同厂家对地址码的定义不一样,软件的实现可以非常方便地设置各种不同的地址编码方案。比如有以$开头,以!开头的地址编码,只要在本软件界面的地址码前缀填写$或者!,后缀空着即可。
在同一个RS-232/RS-485总线中可以同时接入的地址转换软件的数量理论上无限。甚至可以将不同地址编码方案的软件一起使用。使用时将这地址分别设置为不同的值即可。将所有地址转换软件的上位机串口共同接入到一个总线并接到上位机的RS-232或RS-485口。 计算机必须至少有两个RS-232或者RS-485串口,扩展串口可以采用USB-串口转换器等。这样就实现了两个串口之间的地址转换。
本软件用Visual Basic软件编写,串口用MSCOMM控件实现。核心功能就是将Mscomm1接收的数据立即送到Mscomm2的发送区。难点在于对16进制数据的转换处理。
Mscomm的核心代码如下:
Private Sub MSComm1_OnComm()
Dim BytReceived() As Byte
Dim strBuff As String
Dim i As Integer
Select Case MSComm1.CommEvent '事件发生
Case 2
MSComm1.InputLen = 0 '读入缓冲区全部内容
strBuff = MSComm1.Input '读入到缓冲区
If MSComm1.InputMode = comInputModeBinary Then
BytReceived() = strBuff '如果是二进制接收模式则进行数据处理,否则直接显示字符串
For i = 0 To UBound(BytReceived)
If Len(Hex(BytReceived(i))) = 1 Then
strData = strData & "0" & Hex(BytReceived(i)) & " "
'如果只有一个字符,则前补0,如F显示0F,最后补空格
Else '方便显示观察如: 00 0F FE
strData = AdressCode+strData & Hex(BytReceived(i)) & " "
End If
Next
Text1 = strData
Call hexSend2 ' '发送一个16进制
strData = ""
Else
Text1 = Text1 & strBuff
If MSComm2.PortOpen = False Then
MsgBox "请打开串口B"
End If
On Error GoTo uerror3
MSComm2.Output = strBuff
Label14.Caption = Label14.Caption + Len(strBuff) '发送计数
End If
End Select
uerror3:
End Sub
本文介绍的串口地址转换的纯软件方法和程序,对不带地址的串口多机通信具有一定的使用价值。本软件不仅仅实现了地址的转换,还同时实现了波特率、校验位、数据位和停止位的转换。文中介绍的软件可以从波仕电子的网站下载。纯软件地址转换的不足之处在于占用了一台计算机,并且必须配有两个专门用于地址转换的串口。如果要实现方便简单的地址转换,还是要用具有双串口的单片机或者FPGA。通过对单片机或者FPGA的两个串口进行地址等格式的设置,而两个串口在内部进行数据地址帧的加减。这种产品就是硬件串口地址转换器,我们将以另外文章《串口地址转换的纯硬件实现》予以介绍。