编程中遇到了问题,请教一下
这个程序中要完成二件事
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秒进入下一个循环.
太罗嗉了,不知说明白了吗?
关于事件结构,首先有一个原则,就是每个事件中的代码不应该很复杂,最好只是一些状态的转移。
所以建议你不要在超时事件中做文章,而是采用基于事件的生产者消费者结构(这种代码框架在LabVIEW"新建"中有的)。一个事件到来只决定状态的转换,具体每种状态的处理放在下面的消费者循环中去处理。那么这里涉及到一个问题,就是可能处理中有新的事件到来(生产者循环捕捉到新的事件),需要马上中断消费者循环中对以前事件的处理。那么这个使中断前面处理的步骤可以放在事件结构内部处理,具体做什么样的操作需要结合你的具体应用,但是也要注意代码尽量简短。
NI AE