| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1955 人关注过本帖
标题:求助Mscomm接收数据后Mid截取字符问题
只看楼主 加入收藏
孙文
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2016-5-5
结帖率:50%
收藏
 问题点数:0 回复次数:5 
求助Mscomm接收数据后Mid截取字符问题
Option Explicit
Dim indata As String
Private Sub Command1_Click()
  Dim aa(46) As Byte
  aa(0) = &H55
  aa(1) = &H55
  aa(2) = &HF0
  aa(3) = &H29
  aa(4) = &HE7
  aa(5) = &H4C
  aa(6) = &H61
  aa(7) = &H63
  aa(8) = &H6B
  aa(9) = &H20
  aa(10) = &H6F
  aa(11) = &H66
  aa(12) = &H20
  aa(13) = &H5A
  aa(14) = &H65
  aa(15) = &H72
  aa(16) = &H6F
  aa(17) = &HA
  aa(18) = &H52
  aa(19) = &H65
  aa(20) = &H70
  aa(21) = &H6F
  aa(22) = &H72
  aa(23) = &H74
  aa(24) = &H20
  aa(25) = &H54
  aa(26) = &H69
  aa(27) = &H6D
  aa(28) = &H65
  aa(29) = &H3A
  aa(30) = &HA
  aa(31) = &H30
  aa(32) = &H34
  aa(33) = &H2F
  aa(34) = &H31
  aa(35) = &H32
  aa(36) = &H20
  aa(37) = &H20
  aa(38) = &H31
  aa(39) = &H34
  aa(40) = &H3A
  aa(41) = &H30
  aa(42) = &H32
  aa(43) = &HF0
  aa(44) = &HD
  aa(45) = &H55
  aa(46) = &H55
  Text1.Text = ""
  Text2.Text = ""
  indata = ""
  MSComm1.InBufferCount = 0
  MSComm1.OutBufferCount = 0
  MSComm1.Output = aa   '发送数据
End Sub

Private Sub Form_Load()
   = 3
  MSComm1.Settings = "9600,N,8,1"
  MSComm1.InBufferSize = 1024
  MSComm1.OutBufferSize = 4096
  MSComm1.InBufferCount = 0
  MSComm1.OutBufferCount = 0
  MSComm1.SThreshold = 1
  MSComm1.RThreshold = 1
  MSComm1.InputMode = 1
  MSComm1.InputLen = 0
  MSComm1.PortOpen = True
  Text2.Text = ""
  indata = ""
End Sub

Private Sub MSComm1_OnComm()
Dim InByte() As Byte
Dim i As Integer
  Select Case
     Case comEvReceive
       InByte = MSComm1.Input      '读取数据
       For i = LBound(InByte) To UBound(InByte)
           If Len(Hex(InByte(i))) = 1 Then
              indata = indata & "0" & Hex(InByte(i)) & Chr(32)
           Else
              indata = indata + Hex(InByte(i)) + Chr(32)
           End If
       Next i
     Text1.Text = Trim(indata)
     Text4.Text = Mid(Trim(indata), 18, Len(indata) - 27)   '问题代码行
  End Select
End Sub

想请教下Mid(Trim(indata), 18, Len(indata) - 27)这段代码为何报错(报错内容为:实时错误‘5’,无效的过程调用或参数),我是做单机发送及接收数据的,根据显示变量indata当作的长度为140,也就是a()数组当中的数据,为什么把Len(indata) - 27这段改成"数值"就可以,而用表达式就不行

[此贴子已经被作者于2016-12-29 14:36编辑过]

搜索更多相关主题的帖子: 湖光山色 世外桃源 而且 洛阳 梦幻 
2016-12-29 13:42
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4941
专家分:30047
注 册:2008-10-15
收藏
得分:0 
手机上回的。
这行看不也问题,那你把这行拆开来写吧
text4.text=mid(trim(indata),18)
text4.text=left(text4.text,len(text4.text)-27)
试试吧,不行一步一步看报错在那里
---------
这里优化下
      If InByte(i)<16 Then   '小于16,转出来只有一位,不需要去判断转后结果
      indata = indata & "0" & Hex(InByte(i)) & " "   'chr(32) 就是空格,也可以常量写
      Else
      indata = indata & Hex(InByte(i)) & " "   '字符串连接都使用&符号,不要一些用加号,一些用 & ,把看代码的人给看晕了
      End If

授人于鱼,不如授人于渔
早已停用QQ了
2016-12-29 20:21
孙文
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2016-5-5
收藏
得分:0 
回复 2楼 风吹过b
根据您说的那样去弄,还是出现同样的问题:实时错误‘5’,无效的过程调用或参数
2017-01-03 11:09
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4941
专家分:30047
注 册:2008-10-15
收藏
得分:0 
那你在哪一步报错,变量当前类型是什么,值是什么?
根据这些再去处理。

授人于鱼,不如授人于渔
早已停用QQ了
2017-01-03 20:48
xzlxzlxzl
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖北
等 级:贵宾
威 望:125
帖 子:1091
专家分:5825
注 册:2014-5-3
收藏
得分:0 
1,题主试下在问题代码行前面加句调试语句“msgbox Len(indata) - 27”,我怀疑这是一个负数。
2,源字符串不能使用trim,否则在len里也要使用trim,因为Trim(indata)和Len(indata)可能不在同一个长度的字符串里操作,导致获取的字符串不是自己想要的,这句应这样写才合理:Text4.Text = Mid(Trim(indata), 18, Len(Trim(indata)) - 27)
2017-01-03 21:11
孙文
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2016-5-5
收藏
得分:0 
回复 5楼 xzlxzlxzl
这个问题已解决,由于是串口异步问题造成的,谢谢!
2017-01-04 01:55
快速回复:求助Mscomm接收数据后Mid截取字符问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026012 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved