[size=18px]用USB轉串口線進行測驗沒有問題,但接到傳感器上最多收幾個資料就不接收了,傳感器為馬波斯G25測頭會一直發資料,然后會跳進如下兩個事件 comEvDSR 4 data-set ready 線變化。
comEvCD 5 carrier detect 線變化。 求解釋

Option Explicit
Private Sub Command1_Click()
'...發送資料
MSComm1.OutBufferCount = 0 '...清空輸出暫存器
MSComm1.Output = Text1.Text '...發送資料
'MSComm1.Output = "H"
End Sub
Private Sub Command2_Click()
'...退出
With MSComm1
If .PortOpen = True Then
.PortOpen = False
End If
End With
Unload Me
End Sub
Private Sub Form_Load()
'...初始化
MSComm1.CommPort = 2 '...使用Com1口
MSComm1.Settings = "9600,n,8,1" '...設定通訊引數
'MSComm1.InputMode = comInputModeText '文本方式取回資料
MSComm1.InputLen = 0 '設定或回傳一次從接識訓沖區中讀取位元組數,0表示一次讀取所有資料
'MSComm1.InBufferCount = 0
'MSComm1.OutBufferCount = 0 '...清空輸出暫存器
MSComm1.OutBufferSize = 512
MSComm1.InBufferSize = 5120
MSComm1.RThreshold = 1
MSComm1.SThreshold = 1
MSComm1.PortOpen = True '...打開串口
End Sub
Private Sub Mscomm1_Oncomm()
'...通訊事件發生
'Dim s As String
Select Case MSComm1.CommEvent
'EVENT CASES
Case comEvReceive
'Case s = MSComm1.Input
Text2.Text = Text2.Text + MSComm1.Input + " " '...接受顯示資料
'MSComm1.InBufferCount = 0 '...清空輸入暫存器
'Case Else
Case comEvCD
MsgBox "5 carrier detect 線變化 ", vbCritical, "通訊事件:"
Case comEvCTS
MsgBox " 3 clear-to-send 線變化 ", vbCritical, " 通訊事件:"
Case comEvDSR
MsgBox " 4 data-set ready 線變化 ", vbCritical, " 通訊事件:"
Case comEvRing
MsgBox " 6 振鈴檢測 ", vbCritical, " 通訊事件:"
Case comEvSend
MSComm1.OutBufferCount = 0
'MsgBox "1 發送事件 ", vbCritical, " 通訊事件:"
Case comEvEOF
MsgBox "7 檔案結束 ", vbCritical, " 通訊事件:"
'Error cases
Case comEventBreak
MsgBox "1001 接收到中斷信號 ", vbCritical, " 通訊錯誤:"
Case comEventCTSTO
MsgBox "1002 Clear-to-send 超時 ", vbCritical, " 通訊錯誤:"
Case comEventDSRTO
MsgBox "1003 Data-set ready 超時 ", vbCritical, " 通訊錯誤:"
Case comEventFrame
MsgBox "1004 幀錯誤 ", vbCritical, " 通訊錯誤:"
Case comEventOverrun
MsgBox "1006 埠超速 ", vbCritical, " 通訊錯誤:"
Case comEventCDTO
MsgBox "1007 Carrier detect 超時 ", vbCritical, " 通訊錯誤:"
Case comEventRxOver
MsgBox "1008 接識訓沖區溢位 ", vbCritical, " 通訊錯誤:"
Case comEventRxParity
MsgBox "1009 Parity 錯誤 ", vbCritical, " 通訊錯誤:"
Case comEventTxFull
MsgBox "1010 傳輸緩沖區滿 ", vbCritical, " 通訊錯誤:"
Case comEventDCB
MsgBox " 1011 檢索埠 設備控制塊 (DCB) 時的意外錯誤 ", vbCritical, " 通訊錯誤:"
End Select
End Sub
uj5u.com熱心網友回復:

uj5u.com熱心網友回復:
剛學VB寫個串口好傷心,謝謝大家指導
uj5u.com熱心網友回復:

這是傳感器通訊要求,話說怎么關流控啊?
uj5u.com熱心網友回復:
過來學習,LZ加油uj5u.com熱心網友回復:
不要彈出對話框除錯。uj5u.com熱心網友回復:
不彈出,程式雖然可以運行,但只能接收前幾個資料后面就沒有反應了uj5u.com熱心網友回復:
不彈出,程式雖然可以運行,但只能接收前幾個資料后面就沒有反應了uj5u.com熱心網友回復:
換好一點兒的 U 轉串線試試。例如基于 FT232 芯片的。或者在有串口的機器上除錯通過,再用 U 轉串測驗。
uj5u.com熱心網友回復:
好像沒有清空輸入快取區,不知有沒有影響據我經驗
接收事件里面一般形式是這樣
Dim sdata As String
MSComm1.InputLen = 0
If MSComm1.CommEvent = comEvReceive Then
MSComm1.InputLen = 0
sdata = MSComm1.Input
MSComm1.InBufferCount = 0
End If
可以設定觸發MSComm1_OnComm條件 ------mscomm1.RThreshold =你想要的長度
uj5u.com熱心網友回復:
這兩個快取都設定成一樣的,看看行不MSComm1.OutBufferSize = 512
MSComm1.InBufferSize = 5120
uj5u.com熱心網友回復:
總之 VB 串口控制元件不好用 沒有調下去的價值,以前多串口除錯多幾個就收不到資料了,早點放棄換了吧去下個 pcommlite_1.6 很可靠好用
uj5u.com熱心網友回復:
所謂不好用,往往是不會用,用得不對。uj5u.com熱心網友回復:
簡單地說,就是“拉不出屎賴茅房”。
uj5u.com熱心網友回復:
什么人最多? 就是那些天天扯皮撕逼的人最多,其實只不過想表現自己 表現不出香來就噴噴臭,總之不能與人相同吧了,樓主的問題諸位撕逼的人做過么? 大概夢里做過夢外扯uj5u.com熱心網友回復:
為什么很多人都指望別人代替自己上廁所呢?!
uj5u.com熱心網友回復:
MSComm 控制元件的不足是有的,例如:* 最多只能支持到 COM16;
* 通訊中需要切換 Settings 時必須先關閉控制元件,而且延時較長。
如果僅僅是常規通訊不能正常進行,那往往是協議或代碼有毛病。
把 Case comEvReceive 以外的其他 Case 都注掉試試。
uj5u.com熱心網友回復:
代碼沒問題,應該是USB轉串口線或傳感器或連線有問題。轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/65413.html
標籤:控件
上一篇:求助!vb反編譯 密碼破解
