做一個檢測設備,檢測物件發送資料16進制資料3B 86到電腦,要求4ms之內電腦回復58,表示接收成功,請問MSCOMM控制元件可以做到嗎?我自己寫了個程式用的ONCOMM試了下,似乎不行。。。
uj5u.com熱心網友回復:
4ms……應該可以吧uj5u.com熱心網友回復:
如果你的PC機的COM口硬體沒問題,而且采取OnComm事件,代碼處理得當,應該沒問題.uj5u.com熱心網友回復:
就時間而言,沒有問題。uj5u.com熱心網友回復:
測驗表明采用PC機自帶的COM口,發送0X3B86到收到0X58時間<10MS,能否滿足要求看來有點問題.代碼如下:
Private Sub Command1_Click()
Dim sendsj(1) As Byte
sendsj(0) = &H3B
sendsj(1) = &H86
Debug.Print 0, Timer
MSComm1.Output = sendsj
End Sub
Private Sub Form_Load()
MSComm1.CommPort = 1
MSComm2.CommPort = 3
MSComm1.PortOpen = True
MSComm2.InputMode = comInputModeBinary
MSComm1.InputMode = comInputModeBinary
MSComm2.PortOpen = True
MSComm1.RThreshold = 1
MSComm2.RThreshold = 1
End Sub
Private Sub MSComm1_OnComm()
Dim Bytsj() As Byte
Dim i As Long
Dim hexstr As String
Select Case MSComm1.CommEvent
Case 2
Debug.Print 2, Timer
Bytsj = MSComm1.Input
For i = 0 To UBound(Bytsj)
hexstr = hexstr & Right("0" & Hex(Bytsj(i)), 2)
Next
If Mid(hexstr, 1, 2) = "58" Then
Text1 = 58
End If
End Select
End Sub
Private Sub MSComm2_OnComm()
Dim Bytsj() As Byte
Dim i As Long
Dim hexstr As String
Select Case MSComm2.CommEvent
Case 2
Debug.Print 1, Timer
Bytsj = MSComm2.Input
For i = 0 To UBound(Bytsj)
hexstr = hexstr & Right("0" & Hex(Bytsj(i)), 2)
Next
If Mid(hexstr, 1, 4) = "3B86" Then
Dim sendsj(0) As Byte
sendsj(0) = &H58
MSComm2.Output = sendsj
End If
End Select
End Sub
0 76475.41
1 76475.42
2 76475.42
uj5u.com熱心網友回復:
謝謝zdingyun,我原來一直做硬體,第一次用VB寫串口程式,所以很多不懂,我實際用示波器測驗了一下,我寫的程式收到檢測物件發來的3B,86后,經程序式的判斷,35ms后才發出去58,顯然是嚴重超時,不滿足4ms的需要。。看到您的程式我似乎有所啟發,有什么不懂的還想向您請教。。。uj5u.com熱心網友回復:
vb時間回應都很慢的,最快我見到回應時間大約15msuj5u.com熱心網友回復:
條件太苛刻,未必能滿足。
假定無奇偶位,只有 1 個停止位且位元組間無延遲,每個位元組需要 10 個位元;假定你的傳輸波特率是 9600 bps,僅傳輸 3 個位元組,就需要 3.125 毫秒。加上你的接收回應和處理時間,就非常的緊。如果作業系統多任務處理的時間片是以毫秒為單位的,你就就一定會超時。
uj5u.com熱心網友回復:
同意 8 樓。就算波特率極大,不考慮傳輸耗時。
在多任務系統下也不能保證 4ms 就能喚醒任務。
這樣的需求是無法滿足的,考慮單任務的單片機吧。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/147707.html
標籤:控件
