完全不必改变。不过,你可能要根据情况改变串口号。看一下 U 转串映射的虚拟串口号。如果是 FT232 芯片,则可以在操作系统下直接改虚拟串口的串口号,如果与 PC 上固有串口不冲突的话。
我已经在设备管理器里面更改串口号了,并无冲突,对了,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 StringDo 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 Val(lblPoint.Text) = uCnt Then '求已测试的点数uCnt是否与指标相等 (lblPoint控件用于存取某品番需测试的点数) Num = Num + 1 '求已测试的制品根数 lblResCn(0).Caption = Num Call uflWriteLot uCnt = 0 End If
U 转串所用的芯片有多种,线也良莠不齐。我用过最好的是 FT232 芯片的,稳定。
我的程序也一样,用串口时程序稳定,接收数据正常,由于笔记本没有串口,所以用usb转串口,驱动我也安装上去了,可程序就是接收不了数据,程序也没任何报错,不知道为什么,是不是转后程序的通讯方式得改变啊?求解答,谢谢!
我已经在设备管理器里面更改串口号了,并无冲突,对了,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 StringDo
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
LoopEnd Sub