您好:按照您的方法,数据已经读出,可是我自己处理数据时碰到了一些问题还望指教,只剩下50分了,都给了!!
Option Explicit
Private strRecbuf As String
Dim s As Integer
Dim zfi As Integer
Dim zfs, zft As StringPrivate Sub Command1_Click()
On Error Resume Next
With MSComm1
.CommPort = 1 '你可以选择你的端口号
.Settings = "9600,n,8,1"   '这个可以根据你的要求来改成4800,19200等
.InputLen = 0
.RThreshold = 1
.InputMode = comInputModeText
End With
If MSComm1.PortOpen = False Then
MSComm1.PortOpen = True
End If
'Text1.Text = strRecbuf
Command4.Visible = True
Command1.Visible = FalseEnd SubPrivate Sub Command4_Click()
  If MSComm1.PortOpen = True Then MSComm1.PortOpen = False
  Text2.Text = ""
  txtRec.Text = ""
  Command1.Visible = True
  Command4.Visible = FalseEnd Sub
Private Sub MSComm1_OnComm()
On Error Resume Next
Select Case MSComm1.CommEvent
            Case comEvReceive
            strRecbuf = strRecbuf & MSComm1.Input
                If strRecbuf <> strRecbuf Then
                  txtRec.SelText = ""
                End If
            '加上这个
            txtRec.SelText = Mid(strRecbuf, 13)
           
            Case Else
        End Select
If InStr(strRecbuf, Chr(8)) Then  '就是你的LF字符,也许不是chr(10),你自己定就可以了
strRecbuf = ""
txtRec.SelText = Chr(8)
Exit Sub
End IfEnd SubPrivate Sub txtRec_Change()
zfs = ""
For zfi = 1 To Len(txtRec.Text)
zft = Mid(txtRec.Text, zfi, 1)
If Asc(zft) > 47 And Asc(zft) < 58 Then
zfs = zft
End If
Next
Text1.Text = zfs
End Sub
以上是我自己改动的,我知道用txtRec_Change()作为事件不妥,因为是主动发送,每发送一次就作为一次事件,造成Text1.Text读数累计,下面就是读出的格式
txtRec中:
  8.23   cm
ust gst  8.23   cm
ust gst  8.23   cm  6.21   cm
ust gst  6.21   cm
ust gst  6.21   cm
每次变化都是这三个值,8.23是测量值我在text1中只想得到稳定的8.23,可是实际出来的是
8.238.238.238.238.238.238.238.238.238.236.216.216.216.21   
2个2个往出蹦,
我知道这是由于用txtRec_Change()作为事件造成的,我想在text1中直接看到当时每次测量的结果,如果我将MultiLine改为false,显示的为最后一行吗?如果要进行取数字还是一个一个往出蹦,您能在帮我想想怎么解决吗?
还有,那三个铁子都结铁散分了,可是有一个现实不出来,我是真的结分了!!

解决方案 »

  1.   

    是呀,就是这样,Winters_lee(其实我真的叫迪米亚路) 好像不在,不过我没分了,没法发贴了!!哎,怎办呢?
      

  2.   

    不要用change事件了
    我遇到类似的问题,不稳定。换个写法吧。
      

  3.   

    用什么都行只要不用txtRec_Change
      

  4.   

    思路有问题!
    首先不应用Text1.Text 取数字,这里不合适,首先添加一timer控件
    定义一下时间
    timer1()
    txtRec.SelText = strRecbuf应该改两句txtRec.SelText = Mid(strRecbuf, text2.text,text3.text)和If InStr(strRecbuf, Chr(text4.text)) Then  '就是你的LF字符,也许不是chr(10),你自...然后运行程序分别在text2.text,text3.text,text4.text里调整数字,都是0-9的范围,先定义text4.text,可能会出现很多位带数字的,然后再调整text2.text,text3.text要找出一位能够显示及时变化的数字,可定能找到!!这也是我多年的经验,抛砖引玉!!!!
      

  5.   

    这个问题很简单啊,OnChange事件是由什么引起的?MSComm1_OnComm事件里对txtRec内容进行了修改,当然引起了OnChange事件,那么你在OnChange事件里需要处理的工作为何不直接在MSComm1_OnComm里对txtRec内容进行修改时一并处理呢
      

  6.   

    sunruyu(sunruyu)的方法正确,应该从串口处理数据,而不是读出一堆后剪裁数据,授人以渔
      

  7.   

    你在这里:
    If InStr(strRecbuf, Chr(8)) Then  
    strRecbuf = ""
    Exit Sub
    End If这里是接收完毕的判断,你可以在这里添加所有的处理事件,如果你只是要显示当前的测量值:
    ust gst  8.23   cm是你接收的所有信息,那么你取数据段就可以,从gst的t后面开始,到cm的前面一位。If InStr(strRecbuf, Chr(8)) Then 
    txtRec.text=cdbl(mid(strRec,7,9))'这里处理你的数据,你自己看看,那个Mid里面的参数试着改变一下。
    strRecbuf = ""
    Exit Sub
    End If
      

  8.   

    另:
    SelText是将string添加到文本框里面去的,你如果只要显示固定的内容,就只能用Text属性,最好不要在Text的Change事件里面做,直接在接收完毕之后对strRec进行操作就可以了。(这几天都没上网,兄弟真是太客气了,这里很多高手,不必指定我来解答的,这样别人都不会来看了)
      

  9.   

    cpu的占用率太高了,关闭时只能用ctrl+alt+del!!!!!因为在不停的读!!