沒有任何辦法單獨檢測串口是否連接你只能實時向串口發(fā)送測試數(shù)據(jù),這個測試數(shù)據(jù)必須要能夠被串口連接的設(shè)備識別并且有返回數(shù)據(jù)才行。如果上面的工作你都沒問題,那么每個時間間隔,你都發(fā)送測試數(shù)據(jù),如果你能接收到正確的返回值,自然就連接了,如果不能接收正確的返回值,那說明沒連接設(shè)備。當(dāng)然,如果你發(fā)送些無效的不能被串口已經(jīng)連接的設(shè)備所理解并能給你回送數(shù)據(jù)的東西,也不會得到任何回應(yīng)。
創(chuàng)新互聯(lián)建站為客戶提供專業(yè)的網(wǎng)站設(shè)計制作、成都網(wǎng)站建設(shè)、程序、域名、空間一條龍服務(wù),提供基于WEB的系統(tǒng)開發(fā). 服務(wù)項目涵蓋了網(wǎng)頁設(shè)計、網(wǎng)站程序開發(fā)、WEB系統(tǒng)開發(fā)、微信二次開發(fā)、手機(jī)網(wǎng)站制作等網(wǎng)站方面業(yè)務(wù)。
關(guān)于串口通訊的問題:
很明顯,你還不知道(不會、不習(xí)慣)使用事件驅(qū)動的方式接收數(shù)據(jù)。
建議你仔細(xì)看看串口組件(無論VB6還是VB.net)的OnComm事件,你的問題很容易解決。
關(guān)于以太網(wǎng)通訊:
在TCP通訊中端口確實可以重用,你百度一下“TCP端口重用”能查到很多示例。
但絕大多數(shù)情況下不推薦端口重用,而應(yīng)該采取服務(wù)器端建立連接池的方法。
或者,干脆不用TCP,用UDP解決也可以。
如下是檢測串口是否存在,是否被占用的代碼:
Option Explicit
Dim a As Integer
Private Sub Form_Load()
MSComm1.Settings = "9600,n,8,1"
MSComm1.InputMode = comInputModeBinary '采用二進(jìn)制傳輸
MSComm1.InBufferCount = 0 '清空接受緩沖區(qū)
MSComm1.OutBufferCount = 0 '清空傳輸緩沖區(qū)
MSComm1.RThreshold = 1 '產(chǎn)生MSComm事件
MSComm1.InBufferSize = 1024
Shape1.FillStyle = 0
OpenPortNum
End Sub
Private Sub OpenPortNum()
On Error GoTo uerror
For a = 1 To 16
MSComm1.CommPort = a
MSComm1.PortOpen = True
If MSComm1.PortOpen = True Then
Print "可用Com號= "; a
MSComm1.PortOpen = False
End If
Next
Exit Sub
uerror:
Print "出錯或占用Com號= "; a
Resume Next
End Sub
如要探測某個COM口是否有數(shù)據(jù)輸入則需在打開某個串口后,用OnComm事件來接收.
j = 0
For i = 1 To 16 Step 1
If comISP.PortOpen = True Then '先關(guān)閉串口
comISP.PortOpen = False
End If
comISP.CommPort = i
On Error Resume Next '說明當(dāng)一個運(yùn)行時錯誤發(fā)生時,控件轉(zhuǎn)到緊接著發(fā)生錯誤的語句之后的語句,并在此繼續(xù)運(yùn)行。訪問對象時要使用這種形式而不使用 On Error GoTo。
comISP.PortOpen = True
If Err.Number 8002 Then '無效的串口號。這樣可以檢測到虛擬串口,如果用Err.Number = 0的話檢測不到虛擬串口
If j = 0 Then
j = i
End If
cboPort.AddItem "COM" i '生成串口選擇列表
End If
comISP.PortOpen = False
Next i
If j = 1 Then
cboPort.Text = "COM" j '自動打開可用的最小串口號
comISP.CommPort = j
comISP.PortOpen = True
cmdOpenCom.Caption = "關(guān)閉串口"
shpCOM.FillColor = vbGreen
If Err.Number = 8005 Then '串口已打開,vbExclamation '
comISP.PortOpen = False
cboPort.Text = ""
cmdOpenCom.Caption = "打開串口"
shpCOM.FillColor = vbRed
End If
End If
不是很明白你的題意
strHex = strHex + [String].Format("{0:X2} "
這里的意思是把每個字節(jié)數(shù)據(jù)轉(zhuǎn)換成了十六進(jìn)制,每個字節(jié)占兩個字符
如果你串口收到的4個字節(jié)數(shù)據(jù):43,27,56,200
那么你的結(jié)果是:2B1B38C8
即receivebytes.Text="2B1B38C8"
不足兩位的補(bǔ)0
如果你串口收到的4個字節(jié)數(shù)據(jù):3,27,56,200
那么你的結(jié)果是:031B38C8
即receivebytes.Text="031B38C8"
不會吧!可能有些東西需要你打開。
例如: dtE 等,還有是不是 需要廠家的 API 或 SDK 啊
參數(shù)等。
要不就是打開方式不一樣,例如使用文件方式打開 。