第一次来此 也是第一次接触VB 不会编只会拼程序 由此产生了些存在的一些困惑 网坛内朋友们多多指教 
望能够给更多的象我这样的小小鸟们学习进步的机会
Q1:
  当计算机从COM口发送读仪表数据时,仪表返回给给计算机的数据,是自动放到输入缓存区里,直到用INPUT读取走。
  可以这么理解吗?
Q2: 
  假如Rthreshold设置为1(ASCII方式)
  当设备发送10个字符进来,产生OnComm事件后。在处理中断时候,此时 A=MSComm1.input  A中的字符个数是1个还是10个?(字符是否是一个接一个得传到缓存区里?还是~?)
Q3:
  if Len(Trim(Mid(buffer,1,2)))=1 then
         date(i)=Val("&H"&Mid(buffer,3,2)&Str("0")&Mid(buffer,1,2))*0.1
  else
         date(i)=Val("&H"&Mid(buffer,3,2)&Mid(buffer,1,2))*0.1
  Eed If其中第二行中 为什么要加上一个0字符  &Str("0")  详细些啊  实在是叫大家见笑了  呵呵
 今天问题就这些 以后学习过程中 再添加问题!在此 先谢过大家了 

解决方案 »

  1.   

    第一次来此 也是第一次接触VB
    就想搞串口啊?
    你以为搞VB的都是孙子双手奉上代码啊?
      

  2.   

    http://download.csdn.net/source/1262066
      

  3.   

    Q1:
      当计算机从COM口发送读仪表数据时,仪表返回给给计算机的数据,是自动放到输入缓存区里,直到用INPUT读取走。
      可以这么理解吗?
    A1:
     天底下没有永动机,能量不会凭空产生,当然数据也不会自动放到输入缓存,更不是等你读的时候才清空。
     串口作为底层硬件,由操作系统或第三方公司(串口卡或usb转串口卡等外设)提供,9根线中,2根数据线负责收发,1根线表示标准电压,其他都是握手协议使用的线,用于控制底层收发时序,但除了model还真没用到过这些。数据由操作系统底层中断触发存入一个数组实现的循环队列中,队列长度可以定义,我相信你在MsComm控件中找的到这个设置,当数据存放满后,会逐个的“顶”掉之前的数据,因为实际底层是逐个字节读取插入这个循环队列的。如果你来不及用,当然不会在缓存中,而是被丢弃,缓存最大只保存你设置的字节数。
      Input属性是一个一次性读取系统缓存,清空系统缓存的属性。根据vb的延迟绑定功能和你设置的模式,可以是String类型,也可以是byte()类型,这个运行时决定。
    --------------------------------------------------------------
    Q2:  
      假如Rthreshold设置为1(ASCII方式)
      当设备发送10个字符进来,产生OnComm事件后。在处理中断时候,此时 A=MSComm1.input A中的字符个数是1个还是10个?(字符是否是一个接一个得传到缓存区里?还是~?)
    A2:
    这个不一定,因为你实际上,执行OnComm的时候可能离那个数据到达已经过了很长时间了,有几毫秒了,windows是一个非实时的操作系统,所有进程、线程顺序的执行模拟并行,所以不会很及时的处理,但根据优先级,底层驱动则是不停的接收。所以如果你软件界面延迟较大,2次产生OnComm瞬时的字节数是一致,是你设置的触发阀值,但你读取的时候未必就是1个或你设置的那么多字节,软件非常及时的响应则可以找到一些规律,但不是一定的。
    ---------------------------------------------------------------
    Q3:
      if Len(Trim(Mid(buffer,1,2)))=1 then
      date(i)=Val("&H"&Mid(buffer,3,2)&Str("0")&Mid(buffer,1,2))*0.1
      else
      date(i)=Val("&H"&Mid(buffer,3,2)&Mid(buffer,1,2))*0.1
      Eed If其中第二行中 为什么要加上一个0字符 &Str("0") 详细些啊 实在是叫大家见笑了 呵呵
    --------------------------------------------------------------
    这是数据分析了,你可以抛开串口单独的理解这块,不想给你解释,你如果想学,每一个调用,注解一下,我相信你注解后自己能看懂。
    --------------------------------------------------------------
    今天问题就这些 以后学习过程中 再添加问题!稍微看看提问的艺术好么?一个帖子尽量讨论一个问题,讨论多了只能让帖子没有中心,而且降低回帖积极性。分数虽然没用,但这么累傻子的行为的确不是很明智。对论坛也不是好事。
      

  4.   

        RThreshold = N '接收缓冲区收到N个字符触发接收事件 0表示不触发接受事件
        InputLen = N     每次读取接收缓冲区的字符个数
      

  5.   

    http://download.csdn.net/source/1498637
    http://download.csdn.net/source/1498644