通过下面的代码已顺利实现与PLC通信,但是为什么输入软元件后,我点击“Command1”,“Text1.Text ”首先显示通信成功的代码,再次点击“Command1”,才出现我要的结果,为什么啊,整了一天没明白,求助csdn高手了???还有“Text1.Text ”若想显示大于65536的数怎么操作啊,多谢热心老鸟!!!
Private Sub Form_Load()
ExitFlag = False
MSComm1.CommPort = 3                        '软件刚启动时对通讯参数进行设定
MSComm1.Settings = "9600,e,8,1"
MSComm1.InBufferCount = 0
MSComm1.OutBufferCount = 0
MSComm1.RThreshold = 1
MSComm1.InputLen = 0
MSComm1.InputMode = comInputModeText
If MSComm1.PortOpen = False Then MSComm1.PortOpen = True   ' 打开通讯端口
MSComm1.Output = "cr" & vbCr                     '通讯初始化
End Sub
Private Sub Command1_Click()
Dim i As Long
     If MSComm1.PortOpen = True Then MSComm1.Output = "rd " & Text2.Text & vbCr
    'If MSComm1.PortOpen = True Then MSComm1.Output = "rd cm2060" & vbCr
    Text1.Text = Left(MSComm1.Input, 8)
 
    
End Sub

解决方案 »

  1.   

    LZ:你没有使用OnComm事件来实现接收.
    MSComm1.RThreshold设置为不等于零是实现OnComm接收事件的必要条件.
      

  2.   

    代码可参阅:http://www.vbgood.com/viewthread.php?tid=83700&highlight=
      

  3.   

    TO zdingyun 我还是不太明白OnComm怎么回事,我明天按你的代码再试试,谢谢你的指导
      

  4.   

    这样试一试:
    Private Sub Form_Load()
    ExitFlag = False
    MSComm1.CommPort = 3                        '软件刚启动时对通讯参数进行设定
    MSComm1.Settings = "9600,e,8,1"
    MSComm1.InBufferCount = 0
    MSComm1.OutBufferCount = 0
    MSComm1.RThreshold = 0
    MSComm1.InputLen = 0
    MSComm1.InputMode = comInputModeText
    If MSComm1.PortOpen = False Then MSComm1.PortOpen = True   ' 打开通讯端口
    MSComm1.Output = "cr" & vbCr                     '通讯初始化
    End Sub
    Private Sub Command1_Click()
        Dim i As Long
        dim lngP as long 
         If MSComm1.PortOpen = True Then MSComm1.Output = "rd " & Text2.Text & vbCr
        'If MSComm1.PortOpen = True Then MSComm1.Output = "rd cm2060" & vbCr
        lngP=GetTickcount
        do
            Text1.Text = Left(MSComm1.Input, 8)
        loop until Gettickcount-lngP>100
    End Sub
      

  5.   

    http://download.csdn.net/source/1262066看看这个:
      

  6.   

    不懂MSComm,不过联机帮助中确实说了:
    当接收字符后,若 Rthreshold 属性设置为 0(缺省值)则不产生 OnComm 事件。例如,设置 Rthreshold 为 1,接收缓冲区收到每一个字符都会使 MSComm 控件产生 OnComm 事件。
      

  7.   

    串口发送后要延时一段时间才能接收到数据,可以如下:Private Declare Function GetTickCount Lib "kernel32" () As LongPrivate Sub Command1_Click()    Dim i As Long     If MSComm1.PortOpen = True Then
            MSComm1.Output = "rd " & Text2.Text & vbCr
            
        End If
        TimeDelay 200
        Text1.Text = Left(MSComm1.Input, 8)
     
        
    End SubPublic Sub TimeDelay(DT As Long)
        '*延时程序(单位:毫秒)
        On Error GoTo PROC_ERR
        
        Dim tt As Long
        tt = GetTickCount
        Do
            DoEvents
        Loop Until GetTickCount - tt >= DT
        
    End Sub
      

  8.   

    问题解决把Left(MSComm1.Input, 8),改成right(MSComm1.Input, 8)。
    OnCommOnComm在学习中。谢谢各位好友。