我现在在做一个程序,用于计算机和另一台设备的串口通信,现在我的计算机已经可以写数据到那台设备上,可是在读数据时却从串口缓冲区读不到任何数据,以下是我读数据的模块,请大家看看有没有什么问题?
Private Sub cmdRead_Click()
Dim strCmdUp As StringMSComm1.InputLen = 0
MSComm1.RThreshold = 0
MSComm1.CommPort = 1
MSComm1.InputMode = comInputModeTextMSComm1.PortOpen = True
strCmdUp = MSComm1.Input
frmTest.MSComm1.PortOpen = False
Text1.Text = strCmdUp
End Sub
由于现在计算机和那台设备无法联调,所以我现在也不好确定问题到底在哪边,如果我的程序没有问题,是否可以确定是对方的数据根本没有发送出来,或者还有其它的原因?请各位大虾帮忙分析分析!小弟在此先谢过啦!

解决方案 »

  1.   

    MSComm1.RThreshold = 0应大于1
      

  2.   

    MSDN中说:“当接收字符后,若 Rthreshold 属性设置为 0(缺省值)则不产生 OnComm 事件。”而且我将RThreshold改为1或2或其它的值,依然接收不到任何数据
      

  3.   

    Private Sub Form_Load()
        MSComm1.InputLen = 0
        MSComm1.RThreshold = 0
        MSComm1.CommPort = 1
        MSComm1.InputMode = comInputModeText
        MSComm1.PortOpen = True
    End Sub
    Private Sub cmdRead_Click()
        Dim strCmdUp As String
        strCmdUp = MSComm1.Input
        frmTest.MSComm1.PortOpen = False'这一句不知道用途
        Text1.Text = strCmdUp
    End Sub
      

  4.   

    sxs69(): 我不知道你的程序和我的有多大的区别,不过我也试过了,结果还是一样的
      

  5.   

    添加OnComm 事件看看有没有数据过来。或Private Sub cmdRead_Click()
    Dim strCmdUp As StringMSComm1.InputLen = 0
    MSComm1.RThreshold = 0
    MSComm1.CommPort = 1
    MSComm1.InputMode = comInputModeTextdim lDataLen As LongMSComm1.PortOpen = True
    lDataLen = MSComm1.InBufferCount '看看数据接收缓冲区的字符数
    strCmdUp = MSComm1.Input
    frmTest.MSComm1.PortOpen = False
    Text1.Text = strCmdUp
    End Sub
      

  6.   

    建议先用"RS-232/RS-485 串口通讯调试器 XP"软件调试一下,确定计算机和设备通讯没问题后在察看你的程序。下载网址:www.tsfigure.com.cn
      

  7.   

    dyx(天火) :非常感谢你提供的程序,我现在已经基本可以确定只是我的程序有问题。
    可是现在我还是想不通我的程序到底哪儿出了问题,不管我用什么方法调试,接收缓冲区中总是空空如也,包括使用kmcyz(阿成)建议的两种调试方法 。请大家再帮我分析分析。
      

  8.   

    改为这样看看
    Private Sub MSComm1_OnComm()
    Dim strCmdUp() As ByteMSComm1.InputLen = 0
    MSComm1.RThreshold = 0
    MSComm1.CommPort = 1
    MSComm1.InputMode = comInputModeBinaryMSComm1.PortOpen = True
    strCmdUp = MSComm1.Input
    'frmTest.MSComm1.PortOpen = False
    Text1.Text = strCmdUp
    End Sub
      

  9.   

    终于自己找到原因了,原因如下,供大家吸取经验教训:
    mscomm1.portopen=true
    'Code used to write data
    mscomm1.portopen=flase         '此句执行后,串口缓冲区中的所有数据都会清空,所以在下面的读数据的过程中,是读不出来任何数据的。
    ...
    mscomm1.portopen=true
    'Code used to read data
    mscomm1.portopen=false程序修改如下:
    mscomm1.portopen=true
    'code used to write data
    'code used to read data
    mscomm1.portopen=false