純軟件實(shí)現(xiàn)串口地址轉(zhuǎn)換的最大優(yōu)勢(shì)就在于通用性。由于不同廠家對(duì)地址碼的定義不一樣,軟件的實(shí)現(xiàn)可以非常方便地設(shè)置各種不同的地址編碼方案。比如有以$開頭,以!開頭的地址編碼,只要在本軟件界面的地址碼前綴填寫$或者!,后綴空著即可。
在同一個(gè)RS-232/RS-485總線中可以同時(shí)接入的地址轉(zhuǎn)換軟件的數(shù)量理論上無限。甚至可以將不同地址編碼方案的軟件一起使用。使用時(shí)將這地址分別設(shè)置為不同的值即可。將所有地址轉(zhuǎn)換軟件的上位機(jī)串口共同接入到一個(gè)總線并接到上位機(jī)的RS-232或RS-485口。 計(jì)算機(jī)必須至少有兩個(gè)RS-232或者RS-485串口,擴(kuò)展串口可以采用USB-串口轉(zhuǎn)換器等。這樣就實(shí)現(xiàn)了兩個(gè)串口之間的地址轉(zhuǎn)換。
本軟件用Visual Basic軟件編寫,串口用MSCOMM控件實(shí)現(xiàn)。核心功能就是將Mscomm1接收的數(shù)據(jù)立即送到Mscomm2的發(fā)送區(qū)。難點(diǎn)在于對(duì)16進(jìn)制數(shù)據(jù)的轉(zhuǎn)換處理。
Mscomm的核心代碼如下:
Private Sub MSComm1_OnComm()
Dim BytReceived() As Byte
Dim strBuff As String
Dim i As Integer
Select Case MSComm1.CommEvent '事件發(fā)生
Case 2
MSComm1.InputLen = 0 '讀入緩沖區(qū)全部?jī)?nèi)容
strBuff = MSComm1.Input '讀入到緩沖區(qū)
If MSComm1.InputMode = comInputModeBinary Then
BytReceived() = strBuff '如果是二進(jìn)制接收模式則進(jìn)行數(shù)據(jù)處理,否則直接顯示字符串
For i = 0 To UBound(BytReceived)
If Len(Hex(BytReceived(i))) = 1 Then
strData = strData & "0" & Hex(BytReceived(i)) & " "
'如果只有一個(gè)字符,則前補(bǔ)0,如F顯示0F,最后補(bǔ)空格
Else '方便顯示觀察如: 00 0F FE
strData = AdressCode+strData & Hex(BytReceived(i)) & " "
End If
Next
Text1 = strData
Call hexSend2 ' '發(fā)送一個(gè)16進(jìn)制
strData = ""
Else
Text1 = Text1 & strBuff
If MSComm2.PortOpen = False Then
MsgBox "請(qǐng)打開串口B"
End If
On Error GoTo uerror3
MSComm2.Output = strBuff
Label14.Caption = Label14.Caption + Len(strBuff) '發(fā)送計(jì)數(shù)
End If
End Select
uerror3:
End Sub
本文介紹的串口地址轉(zhuǎn)換的純軟件方法和程序,對(duì)不帶地址的串口多機(jī)通信具有一定的使用價(jià)值。本軟件不僅僅實(shí)現(xiàn)了地址的轉(zhuǎn)換,還同時(shí)實(shí)現(xiàn)了波特率、校驗(yàn)位、數(shù)據(jù)位和停止位的轉(zhuǎn)換。文中介紹的軟件可以從波仕電子的網(wǎng)站下載。純軟件地址轉(zhuǎn)換的不足之處在于占用了一臺(tái)計(jì)算機(jī),并且必須配有兩個(gè)專門用于地址轉(zhuǎn)換的串口。如果要實(shí)現(xiàn)方便簡(jiǎn)單的地址轉(zhuǎn)換,還是要用具有雙串口的單片機(jī)或者FPGA。通過對(duì)單片機(jī)或者FPGA的兩個(gè)串口進(jìn)行地址等格式的設(shè)置,而兩個(gè)串口在內(nèi)部進(jìn)行數(shù)據(jù)地址幀的加減。這種產(chǎn)品就是硬件串口地址轉(zhuǎn)換器,我們將以另外文章《串口地址轉(zhuǎn)換的純硬件實(shí)現(xiàn)》予以介紹。