oneforlove 发表于 2007-1-31 10:19:12

串口延时数据清除

请教一下大家:怎么样清除串口中等待时间数据。如下字符。
|
/
-
\
|
/
-
\
|
/
-
\
|
/
-

oneforlove 发表于 2007-1-31 10:23:37

我的意思是指,在串口中不接收此些等待时间字符。

ricken 发表于 2007-1-31 11:42:14

你等待时不读取串口不就可以了吗?再要读时将缓冲区清空后再读啊

oneforlove 发表于 2007-1-31 12:57:53

谢谢ricken的回复。

   怎么可以状态串口是在等待状态呢?LV中有没有相关的VI呢,或是什么事件可以对些等待进行判断的?谢谢!

ricken 发表于 2007-1-31 13:48:02

我不知道你读取串口是如何安排的,你可以发送一个命令到串口,然后读取指定数量的数据.另一种方式是定时读取串口的数据,每次读取时对回来的数据做判断,只用合适的数据,其他的舍掉不保留.

oneforlove 发表于 2007-1-31 14:00:56

我的对BUFFER内的内容进行查询,如果里面有数据的话就读取,没有就不读取了。
我现在主要问题是在给下位机发送命令后,下位机执行相应的命令会有一个时间待的问题,然后会产生上在提到的那些字符,所以不需要他们。
我自己做的这个程序会有这些字符收到,但是用WINDOWS自带的HYPERTERMINAL运行相同的命令后却不会显示出些字符,所以现在不知道如果处理,现在急得晕呀。

lgh269 发表于 2007-1-31 15:46:48

你可以做个CHECK动作,接收到这些字符丢掉就好了,

oneforlove 发表于 2007-1-31 16:13:53

lgh269兄,谢谢你的回复。

   你前面回了我一个关于设置LF的问题,我在用HYPERTERMINAL的时候如果不设置加入LF的话串口回显的时候就不会有这些字符,但如果加入此LF的话就会显示出这此符号,我现在想要做的就是在LV中不加入此LF时,回显的数据中也不包含此些数据。

ricken 发表于 2007-2-1 10:36:03

那就要看你的上下位机的通信协议是如何规定 的了.你可以发送命令时只读取指定数量的数据.或是说当你的buffer中有一定的数据时再进行触发读取啊,可以对buffer中的数据先进行判断,不是想要的就丢掉.

oneforlove 发表于 2007-2-1 16:53:33

如果这样的话,我要对太多的字符进行check了。
等待时的字符有:- \ / |.不是对这些收到的字符进行一一检查吧。

ricken 发表于 2007-2-2 10:46:58

那就还是要看你的通信协议了,你可以定时读取啊,在发送读取命令前先清空缓冲区里的数据,再读取指定数量的数据,通信协议中应规定回来的数据格式吧,从回来的数据中选出你想要的数据就可以了.如果你是一直不停的读那就难办了哦.只好读取一个字符就判断.

下位机执行相应的命令会有一个时间待的问题,然后会产生上在提到的那些字符

我在做上位机与下位机通信时是这样处理的,每发送一次命令,下位机都会送回来相同格式的数据,也就是说这个格式是下位机在设计时就已规定好的,不可能每次都会变的.然后从读回来的数据里选出自己想要的.
因为是采用串行通信,所以每次下位机都是传回数据后上位机才可以发下一个命令的.下位机执行命令肯定是需要时间的,但是上位机发送的同一命令,下位机返回的数据格式应该都是一样的,不可能每次都是变化的,要是这样的话就是你的下位机设计有问题.

oneforlove 发表于 2007-2-2 10:58:01

谢谢ricken兄的回复,但我的下位机的数据是会变化的,随着你输入给串口不同的命令,返回的也不同的数据,根本不确定。如果对数据进限制性的读取这样会很慢的,因为发送一个命令后返回的数据量比较大,如果像上面提到的等待时间字符处理那要发很多时间。

我想再问一下,如果对|-\/有没有可以以这些字符进行扫描,可以使用vi中的scan string for token.vi吗? 谢谢!

ricken 发表于 2007-2-2 13:38:31

我认为你还是针对每一个命令写一个subvi吧,把处理的过程封装起来,用的时候再调用就可以了.按道理你的上位机发送完一个命令后,下位机是按照通信协议返回数据的,即使是等待过程中返回的数据也是指定的格式,并不是乱的.
不过你可以试一下你所说的那个VI,还有就是看看有没有高手吧.
页: [1]
查看完整版本: 串口延时数据清除