首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

mscomm控件始终没法收到数据

2013-01-01 
mscomm控件始终无法收到数据很简单的一个程序但是始终弄不通,就是发送命令,然后收回来。请各位帮忙看看。东

mscomm控件始终无法收到数据
很简单的一个程序但是始终弄不通,就是发送命令,然后收回来。请各位帮忙看看。东拼西凑的程序也是。一个温度采集装置的通信

Private Sub Form_Load()
MSComm1.CommPort = 1                  ' 设置通信端口号为COM1
MSComm1.Settings = "9600,n,8,1"           ' 设置串口1参数
MSComm1.InputMode = comInputModeText                   ' 接收文本型数据
MSComm1.RThreshold = 1
MSComm1.InputLen = 0
If MSComm1.PortOpen = True Then MSComm1.PortOpen = False
If MSComm1.PortOpen = False Then MSComm1.PortOpen = True ' 打开通信端口1
End Sub
Private Sub Command1_Click()
MSComm1.OutBufferCount = 0
MSComm1.Output = Text1.Text
End Sub

Private Sub Command2_Click()
Select Case MSComm1.CommEvent
Case comEvReceive '...有接受事件发生
Text2.Text = MSComm1.Input '...接受显示数据
MSComm1.InBufferCount = 0 '...清空输入寄存器
End Select
End Sub
Private Sub MSComm1_OnComm() '接收数据
    Dim strBuff As String
    Text2 = ""
    Select Case MSComm1.CommEvent
        Case 2
            MSComm1.InputLen = 0
            strBuff = MSComm1.Input
            BytReceived() = strBuff
            jieshou
            Text2 = strData
    End Select
End Sub

Public Sub jieshou() '接收处理为16进制显示
    Dim i As Integer
    For i = 0 To UBound(BytReceived)
        If Len(Hex(BytReceived(i))) = 1 Then
            strData = strData & "0" & Hex(BytReceived(i))
        Else
            strData = strData & Hex(BytReceived(i))
        End If
    Next
End Sub

[解决办法]
Private Sub MSComm1_OnComm() 在这设置断点,单步调试。

[解决办法]
Option Explicit

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Sub Form_Load()
    MSComm1.CommPort = 1 ' 设置通信端口号为COM1
    MSComm1.Settings = "9600,n,8,1" ' 设置串口1参数
    MSComm1.InputMode = comInputModeText ' 接收文本型数据
    MSComm1.RThreshold = 1
    MSComm1.InputLen = 0
    If MSComm1.PortOpen = True Then MSComm1.PortOpen = False
    If MSComm1.PortOpen = False Then MSComm1.PortOpen = True ' 打开通信端口1


End Sub
Private Sub Command1_Click()
    MSComm1.OutBufferCount = 0
    MSComm1.Output = Text1.Text
    Sleep 30    '延迟30ms,以便通信发出,信号返回
End Sub


Private Sub MSComm1_OnComm() '接收数据
    Dim strBuff As String
    Select Case MSComm1.CommEvent
        Case 2
            MSComm1.RThreshold = 0
            Do
                strBuff = strBuff & MSComm1.Input
            Loop Until MSComm1.InBufferCount = 0
            Text2.Text = strBuff
            MSComm1.RThreshold = 1
    End Select
End Sub

[解决办法]
首先:
1.建议使用一个串口工具先对等通讯设备进行通讯测试,确认通讯良好,也即排除掉接口松脱,线断等问题,关于类似的串口工具网上有很多
2.在判断通讯良好的情况下再进行操作,如你的程序中.
3.断点的设置可以在ONCOMM事件的那一行的最前面点一下,即会出现一个褐色的大点点,即为断点.....
通过断点一般都能很快找出问题点
4.你的设备回传回来的字符串是否有结束字符?以结束字符作为结束判断标志

[解决办法]
有时断点可能有些问题看不到,用debug辅助调试

热点排行