关于labview状态机事件结构的疑问
但是遇到点问题
举个简单例子,说明下我遇到的问题
前面板有两个按钮,按下1按钮灯亮,按下2按钮灯灭
因此将程序分为两个条件
分别为灯亮 和 灯灭
灯亮条件结构中有个事件结构,就是当1按钮按下灯亮。
灯灭条件结构中也有个事件结构,是当2按钮按下灯灭。
程序按照先按1,再按2。这样运行没有错
但是先按2,程序界面就被锁死
当我将事件结构中锁定屏幕去掉后,程序就不会被锁死
换句话说,其他条件中的事件结构被相应,但没有执行
但是逻辑上来说,这不符合实际,因为没有执行的条件,事件结构如何能够相应
这是BUG还是我事件结构的原理没搞清楚?
请大家帮忙解答
没有人会吗。
还没听说有这样一个“状态机事件结构”。你一运行程序,因为你的初始值是“灯亮”,相对应是“灯亮”的条件执行,先按下“1”,再按下“2”,没有问题。要是先按下“按钮2”自然没有反应了。另外做事件结构的时候,控件最好放到事件结构里面。
小编不用这么复杂的,
我并不是想要问如何点亮灯和熄灭灯,而是程序架构需要
我只是将灯的熄灭与闪烁当个列子,真正使用不是这么简单的程序
光一个事件结构太难维护了
下面是我项目中的编写,可以看出很有条理
维护起来非常好维护。
如果这个程序变成一个事件结构,你想想看的过来吗
建议考虑一下:生产者/消费者设计模式(事件),用这个做框架,可以省不少事。
顶一下!顶一下!
个人感觉
状态机+事件结构 和 生产者和消费者
两种框架各有利弊把
生产者 和 消费者 明显在测控比较合适吧,将数据采集与处理分开
但是做一个偏向应用和管理的软件,感觉不大适合把。
毕竟离不开事件,当然这只是个人对生产者和消费者的理解
我说的是按下后程序被锁死
2按钮按下没反应我可以理解
可是界面被锁死是什么原因?
事件结构执行了?没有吧。
那为什么锁死,你可以解释一下吗
在labview帮助文档,事件结构中说“避免在同一个循环中放置两个事件结构”,这样容易造成前面板锁死,小编可以参考一下。
可以看看JKI的state machine ;JKI官网可以下载的,VIPM里面也可以下载的,
很简单,因为你初始状态定义为灯亮,所以只能执行先执行CASE结构中的真条件,所以你点先点灯灭,肯定不行的,因为在CASE结构的假分支里,不可能执行的
学习一下。
路过学习一下下。
标记
路过学习。
相信小编已经解决了这个问题了。
刚好正在学状态机,说一下自己对这个问题的理解。
小编说的锁定屏幕我没有看到,所以不对这个进行理解。
因为while循环外的移位寄存器初始化值是“灯亮”,所以程序一运行,就会进入到灯亮的条件结构中,而灯亮的条件结构中存在“1”值的事件结构,事件结构本身存在等待的动作,所以程序就一开始就一直处于“灯亮”条件结构内的事件结构外等待中。
另外,While循环外的移位寄存器赋值最好使用枚举的格式,While循环的停止条件不应该为空,应该随时保持赋值状态。以免出错。
个人觉的,来个高亮程序执行就知道问题出在哪里了,调试程序bug我基本的思路就是,重现问题,用高亮去追踪问题出在哪里,再分析,最后得出解决方法。
这问题其实不是出在状态机上,而是出在事件结构上
事件结构并没有遵守域的规则
你这是JKI状态机?