2013-04-09 18 views
0

当连接到通信端口时,我在文本框中获取垃圾值是因为我的比特率错误,那么我如何识别正确的比特率?我使用VB6从微控制器连接到的通信端口获取数据使用通信端口接收文本框中的垃圾数据

在这里,我已经编写了用于接收19200比特率数据的代码。我只是想知道如何避免垃圾值,但似乎我的微控制器的比特率是19200

Private Sub Command1_Click() 
    If (MSComm1.PortOpen = False) Then opening port 
    MSComm1.PortOpen = True 
    End If 
    Command1.Enabled = False 
    Command2.Enabled = True 
End Sub 

Private Sub Command2_Click() 
    If (MSComm1.PortOpen = True) Then 
    MSComm1.PortOpen = False 
    End If 
    Command1.Enabled = True 
    Command2.Enabled = False 
End Sub 

Private Sub Form_Load() 
    With MSComm1 
    .CommPort = 1    
    .RThreshold = 1 
    .RTSEnable = True 
    .Settings = "19200,N,8,1" 
    .InputLen = 1000 
    .SThreshold = 1 
    .PortOpen = True 
    End With 
End Sub 

Private Sub Form_Unload(Cancel As Integer) 
    If (MSComm1.PortOpen = True) Then 
    MSComm1.PortOpen = False 
    End If 
End Sub 

Private Sub MSComm1_OnComm() 
Dim Buffer As String 

    Select Case MSComm1.CommEvent  
    Case comEvReceive 
     Text1.Text = " " 
     Buffer = MSComm1.Input 
     Text1.Text = Text1.Text & Buffer 
    End Select 
End Sub 

回答

1

很简单,你需要知道控制器正在使用的比特率,停止位和奇偶校验设置。你可以通过循环遍历所有可能的组合来做到这一点),但是联系控制器软件供应商并询问它们会更快。

但是我会尝试9600,8,N,1开始。

+0

如果我正在使用试验和错误,我应该尝试改变最多 – user1963933 2013-04-09 08:56:32

+0

我也应该改变inputlen吗? – user1963933 2013-04-09 08:58:09

+0

@ user1963933波特率可以变化。大多数设备使用8,N,1。 InputLen对收到的数据的完整性没有影响,并且只限制您在每次读取控件时收到多少。 – Deanna 2013-04-09 09:11:07

0
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) 

Private Sub Command1_Click() 
If (MSComm1.PortOpen = False) Then 
MSComm1.PortOpen = True 
End If 
Command1.Enabled = False 
Command2.Enabled = True 
End Sub 

Private Sub Command2_Click() 
If (MSComm1.PortOpen = True) Then 
MSComm1.PortOpen = False 
End If 
Command1.Enabled = True 
Command2.Enabled = False 
End Sub 

Private Sub Command3_Click() 
Text1.Text = " " 
End Sub 

Private Sub Form_Load() 

MSComm1.CommPort = 1 
    MSComm1.Settings = "9600,N,8,1" 
    MSComm1.DTREnable = True 
    MSComm1.Handshaking = comRTS 
    MSComm1.InBufferSize = 1 
    MSComm1.RThreshold = MSComm1.InBufferSize 
    MSComm1.RTSEnable = True 
    MSComm1.InputLen = 1 
    MSComm1.InputMode = comInputModeText 
    MSComm1.NullDiscard = True 
    MSComm1.OutBufferSize = 0 
    MSComm1.SThreshold = MSComm1.OutBufferSize 

    MSComm1.PortOpen = True 

End Sub 

Private Sub Form_Unload(Cancel As Integer) 
If (MSComm1.PortOpen = True) Then 
MSComm1.PortOpen = False 
End If 
End Sub 

Private Sub MSComm1_OnComm() 
Dim Buffer As String 

Select Case MSComm1.CommEvent 
Case comEvReceive 

Text1.Text = " " 
Buffer = MSComm1.Input 
Text1.Text = Text1.Text & Buffer 
End Select 
End Sub