第一次来此 也是第一次接触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") 详细些啊 实在是叫大家见笑了 呵呵
今天问题就这些 以后学习过程中 再添加问题!在此 先谢过大家了
望能够给更多的象我这样的小小鸟们学习进步的机会
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") 详细些啊 实在是叫大家见笑了 呵呵
今天问题就这些 以后学习过程中 再添加问题!在此 先谢过大家了
解决方案 »
- 把一个窗口的TEXTBOX的输入值传递到下一个窗口
- vb6 0怎样判断Datagrid有没有选中一行数据,没有选中的话要报错。
- 关于DrawText的使用,关于空格和字符的处理
- 关于报表中的日期转换问题
- 对不起,我是一个刚开始学编程的菜鸟,懂请大家在每句后加个注释好吗?谢谢!
- 求助:如何在自己的程序里控制其它应用程序,主要实现对另一应用程序的鼠标定时自动单击
- 怎样使工具栏可移动(像一般的软件那样可以拖放)
- 真受不了!为什么dll老是出错?????
- 怎样用MAPI函数发EMAIL?(请给点代码),谢谢
- Adodc1.Recordset.Find 的用法???
- VB textbox中显示 % 号
- 关于记录集的问题,谢谢
就想搞串口啊?
你以为搞VB的都是孙子双手奉上代码啊?
当计算机从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") 详细些啊 实在是叫大家见笑了 呵呵
--------------------------------------------------------------
这是数据分析了,你可以抛开串口单独的理解这块,不想给你解释,你如果想学,每一个调用,注解一下,我相信你注解后自己能看懂。
--------------------------------------------------------------
今天问题就这些 以后学习过程中 再添加问题!稍微看看提问的艺术好么?一个帖子尽量讨论一个问题,讨论多了只能让帖子没有中心,而且降低回帖积极性。分数虽然没用,但这么累傻子的行为的确不是很明智。对论坛也不是好事。
InputLen = N 每次读取接收缓冲区的字符个数
http://download.csdn.net/source/1498644