最近寫一個上位機,發送16進制指令給下位機然后接收顯示!用rsr232通信很穩定,但用到USB轉一下資料干擾極大,接回來的資料前面產生2-4的干擾資料,并且打開串口時就會產生一個錯誤comevcts,請熟悉這方面的高手幫忙解決一下,感激不盡!
uj5u.com熱心網友回復:
硬體或驅動問題,USB轉接頭常遇到的問題,如無意外,你用的USB轉換頭肯定是那種15左右的。建議你更換好一些的。uj5u.com熱心網友回復:
U 轉串所用的芯片有多種,線也良莠不齊。我用過最好的是 FT232 芯片的,穩定。
uj5u.com熱心網友回復:
我的程式也一樣,用串口時程式穩定,接收資料正常,由于筆記本沒有串口,所以用usb轉串口,驅動我也安裝上去了,可程式就是接收不了資料,程式也沒任何報錯,不知道為什么,是不是轉后程式的通訊方式得改變啊?求解答,謝謝!
uj5u.com熱心網友回復:
完全不必改變。不過,你可能要根據情況改變串口號。看一下 U 轉串映射的虛擬串口號。如果是 FT232 芯片,則可以在作業系統下直接改虛擬串口的串口號,如果與 PC 上固有串口不沖突的話。
uj5u.com熱心網友回復:
我已經在設備管理器里面更改串口號了,并無沖突,對了,usb轉串口后程式雖沒報錯,但PLC其他設備報錯,不能正常運行,用串口時程式和設備一切正常,我猜測是usb轉串口后不能正常通訊,設備快取滿了,所以PLC設備運行到一半時就報錯了。不知道為什么。
'*************************************************
'初始化MSCOMM控制元件
'*************************************************
Private Function uflInitRS()
On Error GoTo ErrorTrap:
If Not comLaser.PortOpen Then
comLaser.CDTimeout = 0
comLaser.CTSTimeout = 0
comLaser.DSRTimeout = 0
comLaser.RTSEnable = True
comLaser.DTREnable = True
comLaser.CommPort = 1
comLaser.Settings = "9600,N,8,1"
comLaser.InputLen = 0
comLaser.PortOpen = True
End If
uflInitRS = 0
Exit Function
ErrorTrap:
uflInitRS = Err
End Function
'*************************************************
'關閉MSCOMM
'*************************************************
Private Function uflQuitRS()
If comLaser.PortOpen Then
comLaser.PortOpen = False
End If
End
End Function
'*************************************************
'程式運行時MSCOMM讀取資料
'*************************************************
Private Sub Ceshi()
Dim bufInput As String
Dim RecData As String
Do
If comLaser.InBufferCount > 0 Then
RecData = ""
comLaser.InputLen = 1 '確定input屬性讀取的字符數為1位
Do
If comLaser.InBufferCount >= 0 Then '如果接識訓沖區中存在資料大于或等于零
bufInput = comLaser.Input
Select Case bufInput
Case Chr(10) '換行
Exit Do
Case Chr(13) '回車
uCnt = uCnt + 1
Exit Do
Case Else
RecData = RecData & bufInput
End Select
Else
RecData = ""
Exit Do
End If
Loop
Call Sleep(100)
'--- 資料格式
'--- P0:********19.7895**P5:*********0.0328** 字串長度40,CR數:1
If Format(Val(Mid(RecData, 4)), "0.0000") <= 0 Or Format(Val(Mid(RecData, 24)), "0.0000") <= 0 Then
GoTo AA:
End If
If uCnt = 1 Then
Call uflRegClear '清除 Inpt(uCnt).Gaik和Inpt(uCnt).Fure資料
lstResult(0).AddItem "Point OD Offset" ‘ lstResult(0)是ListBox控制元件
lstResult(0).AddItem Right(Format(uCnt, " #:"), 3) & " " & Format(Val(Mid(RecData, 4)), "0.0000") & " " & Format(Val(Mid(RecData, 24)), "0.0000")
Else
lstResult(0).AddItem Right(Format(uCnt, " #:"), 3) & " " & Format(Val(Mid(RecData, 4)), "0.0000") & " " & Format(Val(Mid(RecData, 24)), "0.0000")
End If
Inpt(uCnt).Gaik = Format(Val(Mid(RecData, 4)), "0.0000") '外徑值
Inpt(uCnt).Fure = Format(Val(Mid(RecData, 24)), "0.0000") '偏心值
If Val(lblPoint.Text) = uCnt Then '求已測驗的點數uCnt是否與指標相等 (lblPoint控制元件用于存取某品番需測驗的點數)
Num = Num + 1 '求已測驗的制品根數
lblResCn(0).Caption = Num
Call uflWriteLot
uCnt = 0
End If
End If
AA:
DoEvents
Loop
End Sub
uj5u.com熱心網友回復:
改回原來預設的串口號試試。記住,VB 代碼中也要改。uj5u.com熱心網友回復:
你說的這個似乎首先要排除硬體問題,我用PL2303,很穩定的飄過!轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/120527.html
上一篇:為什么我的Visual Studio2005里工具列的控制元件都是灰色不可用的,網上百度重置工具箱都不行,一定是要重新安裝的節奏嚒,畢設一拖再拖桑不起啊
下一篇:行 17: 控制元件 ProgressBar1 的類 MSComctlLib.ProgressBar 不是一個已加載的控制元件類。
