NI LabVIEW,CVI,数据采集等产品讨论区

取消
显示结果 
搜索替代 
您的意思是: 

事件

编程中遇到了问题,请教一下
这个程序中要完成二件事
1. 通过"用户事件",从设备得到数据(如1),做一些处理,得到一个新的数组,这个数组中包括二部分:
  a) 数据(根据得到的数据而变化的),如输入数据为1时,此数组10,12,20;如输入数据为2时,此数组为5,9,13
  b) 一定时间格式(固定的),如0.5,3,2并且这是一个反复的循环的过程
2. 将处理后的数据数组输出至设备,此数组是根据时间的格式输出数据至设备的,所以我用了"超时事件".  如若从设备得到数据1,则开始时发出数据10,0.5秒后发出数据12,再3秒后发出数据20,再过了2秒后进行下一个循环.

我现在分别用了二个事件结构来分别处理"用户事件"和"超时事件"的,现在的问题是,当"超时事件"正在运行时,如果有"用户事件"的新数据(如2,那么新的数据为5,9,13),如何马上按照原来的时间格式输出新的数据.
如原来正在处理:开始时发出数据10,0.5秒后发出数据12,但这时,有新的"用户事件"发生了,所以必须在3秒后发出数控数据13,再过了2秒后进行下一个循环,这时数据已经完全是新的了:
开始时发出数据5,0.5秒发出数据9,3秒后发出数据13,2秒进入下一个循环.

太罗嗉了,不知说明白了吗?

0 项奖励
1 条消息(共 4 条)
4,306 次查看

关于事件结构,首先有一个原则,就是每个事件中的代码不应该很复杂,最好只是一些状态的转移。

所以建议你不要在超时事件中做文章,而是采用基于事件的生产者消费者结构(这种代码框架在LabVIEW"新建"中有的)。一个事件到来只决定状态的转换,具体每种状态的处理放在下面的消费者循环中去处理。那么这里涉及到一个问题,就是可能处理中有新的事件到来(生产者循环捕捉到新的事件),需要马上中断消费者循环中对以前事件的处理。那么这个使中断前面处理的步骤可以放在事件结构内部处理,具体做什么样的操作需要结合你的具体应用,但是也要注意代码尽量简短。

 

NI AE

0 项奖励
2 条消息(共 4 条)
4,271 次查看

"那么这里涉及到一个问题,就是可能处理中有新的事件到来(生产者循环捕捉到新的事件),需要马上中断消费者循环中对以前事件的处理。那么这个使中断前面处理的步骤可以放在事件结构内部处理"

谢谢,生产者消费者我是试过的,中断在事件结构内部我还没试过.

再试试

谢谢

0 项奖励
3 条消息(共 4 条)
4,268 次查看
从设备读取数据,数据处理后输出到设备,这样的过程是非常常见的,硬件相关程序没有必要放在事件结构中,应该使用单独的线程,比如状态机。
陈树学
QQ:276509891 .
EMAIL:CSXCS_366@126.COM
qq群:78561268 80754347 37591940
http://labview.weebly.com/
新书《LabVIEW实用工具详解》已经发售,敬请关注。
0 项奖励
4 条消息(共 4 条)
4,263 次查看