当前位置:编程学习 > VB >>

VB串口通讯疑问寻求回答 (问题都是很菜的)

第一次来此 也是第一次接触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")  详细些啊  实在是叫大家见笑了  呵呵
 今天问题就这些 以后学习过程中 再添加问题!

在此 先谢过大家了  第一次来此 也是第一次接触VB
就想搞串口啊?
你以为搞VB的都是孙子双手奉上代码啊? 这么快就有回音 真是感到欣慰 谢谢 http://download.csdn.net/source/1262066 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") 详细些啊 实在是叫大家见笑了 呵呵
--------------------------------------------------------------
这是数据分析了,你可以抛开串口单独的理解这块,不想给你解释,你如果想学,每一个调用,注解一下,我相信你注解后自己能看懂。
--------------------------------------------------------------
今天问题就这些 以后学习过程中 再添加问题!

稍微看看提问的艺术好么?一个帖子尽量讨论一个问题,讨论多了只能让帖子没有中心,而且降低回帖积极性。分数虽然没用,但这么累傻子的行为的确不是很明智。对论坛也不是好事。
    RThreshold = N '接收缓冲区收到N个字符触发接收事件 0表示不触发接受事件
    InputLen = N     每次读取接收缓冲区的字符个数 http://download.csdn.net/source/1498637
http://download.csdn.net/source/1498644
补充:VB ,  基础类
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,