深圳市瑞申电子有限公司

深圳市瑞申电子有限公司是一家10年专业大功率电感生产加工厂商,主要以大功率,大电流、扁平线圈电感、平面变压器设计、生产、销售工厂。设计、绕线、组装、检测、包装、出货等全制程的工艺流程!拥有完整、科学的质量管理体系。专业技术团队10人,我们的诚信、实力和产品质量获得业界的认可。欢迎各界朋友莅临参观、指导和业务洽谈。 ...

按两次才能停下

时间:2020-10-20 06:02:34 点击:
最近看到去了一篇博客,亲手试验了一遍,对其中一个不甚理解,翻来覆去想好了好久,不得其解,只好求助于各位高手,博客地址如下:http://blog.csdn.net/ap0108220/article/details/16842267,其中那个“为什么在WHILE循环中使用事件结构时,停止按钮需要按两次才能结束?”很难想明白,先求助于各位(自己加了一个显示,方面跟踪事件结构)。


wangyi31 发表于 2016-12-21 14:15
首先谢谢您的回答,还有些疑问,比如:1:我按下停止按钮后,触发了事件,此时labview检测到了停止按钮数值的变化,处理了“加1”事件,此时labview是还没有读取控件的值是吗。2:我注意到,停止按钮按下一次后,他又自动弹回了,应该是labview已经读取控件的值了,此时值为1啊,为什么没有停止,就是要按第二次始终不明 ...

执行过程如下:
1.第一次进入循环,按下按钮之前程序就已经读取了按钮的值,为假。
2.第一次按下按钮之后,触发事件结构,执行完事件结构以后,本次循环就结束了,第1步时已经说了,这时候读到的按钮值是假,所以循环并不会停止,而是会开始第二次循环。
3.进入第二次循环:程序首先读取按钮的值,因为前面已经按过一次按钮了,所以这时候读到的按钮值是“真”(这里有一个知识点,是关于按钮的机械动作的,默认从while循环红点处创建的这种按钮是触发型的,带有锁存功能,只要按过一次按钮,labview下次读到的值就是“真”,读到这个“真”值以后,在下次再按下按钮以前读到的值都是“假”,这样可以防止labview漏掉真值的读取,注意并不是所有的布尔都是这样的,只有触发型的按钮才有这个特性)。接上面的继续说,读到“真”值以后,循环不会马上结束,因为事件结构还在等待中,这时候只要让事件结构执行完循环就可以结束了,也就是说如果你还有另一个按钮也做了事件的话,只要你按一下那个按钮触发事件,程序就会结束了,不一定非得按停止按钮。
建议采用如下方式来停止循环,事件结构的超时最好还是加上,你可以在超时分支里做些别的事情。


你的stop按钮应选择如图所示的  switch  until released,就可以实现按一下就停止程序


krize 发表于 2016-12-21 11:21
执行过程如下:
1.第一次进入循环,按下按钮之前程序就已经读取了按钮的值,为假。
2.第一次按下按钮之后,触发事件结构,执行完事件结构以后,本次循环就结束了,第1步时已经说了,这时候读到的按钮值是假,所以循环并不会停止,而是会开始第二次循环。

其实是执行的先后顺序的问题,循环一进入,由于事件结构处于等待,而停止按钮已经赋值给循环端子(因为程序一运行就赋值了,你再按停止按钮才执行事件结构),所以看似同时执行却是先执行停止按钮的赋值,再等你按了停止按钮后才触发事件结构,所以第一次按停止按钮只是触发事件结构而已,并非把真值赋给循环端子。第二次进入循环端子才把停止赋值,但是事件结构未响应无法退出循环,所以这时你要再次按停止按钮(这次纯粹是让事件结构响应)。比较好的理解就是把停止按钮放到停止事件里,这样才是严格的停止与事件同时发生,循环立刻停止(这里可以观察循环次数为0代表只循环一次)


本帖最后由 隔壁老wang 于 2016-12-21 15:34 编辑

这个值得深究


krize 发表于 2016-12-21 14:53
1.不是,此时labview已经读取过一次控件的值了,确切的说在你还没按按钮的时候就已经读取过控件值了,读到的值是“假”。
2.自动弹回是这个按钮的机械动作,并不代表labview已经读取了控件值。按钮按下去再自动弹回的时候labview会把值“真”锁存起来了,以保证下次程序里读取按钮值的时候能读到真值,但这跟你的程序有没 ...

wangyi31 发表于 2016-12-21 14:15
首先谢谢您的回答,还有些疑问,比如:1:我按下停止按钮后,触发了事件,此时labview检测到了停止按钮数值的变化,处理了“加1”事件,此时labview是还没有读取控件的值是吗。2:我注意到,停止按钮按下一次后,他又自动弹回了,应该是labview已经读取控件的值了,此时值为1啊,为什么没有停止,就是要按第二次始终不明 ...

wangyi31 发表于 2016-12-21 14:15
首先谢谢您的回答,还有些疑问,比如:1:我按下停止按钮后,触发了事件,此时labview检测到了停止按钮数值的变化,处理了“加1”事件,此时labview是还没有读取控件的值是吗。2:我注意到,停止按钮按下一次后,他又自动弹回了,应该是labview已经读取控件的值了,此时值为1啊,为什么没有停止,就是要按第二次始终不明 ...

静夜style 发表于 2016-12-21 16:54
其实labview有个强大的功能就是看数据流动,你把程序框图上的小灯泡打开,运行,就可以直观的看到数据流动以及执行的先后顺序了,另,沙发说的很明白

静夜style 发表于 2016-12-21 16:54
其实labview有个强大的功能就是看数据流动,你把程序框图上的小灯泡打开,运行,就可以直观的看到数据流动以及执行的先后顺序了,另,沙发说的很明白

跟着楼主一起学习一下  


wangyi31 发表于 2016-12-21 17:58
谢谢您的耐心回到,我按照您的说法做了一下,我按下第一次的时候,看了一下,过程是这样的:首先事件结构由于按键的值改变,触发了事件, 显示值加1 ,labview读取了按键的值,为“T”,我的疑问既然读取的值为“T“了,为什么循环还要进行下去,是要将本次循环进行完毕算结束吗? ...

本帖最后由 静夜style 于 2016-12-22 16:09 编辑

wangyi31 发表于 2016-12-21 17:58
谢谢您的耐心回到,我按照您的说法做了一下,我按下第一次的时候,看了一下,过程是这样的:首先事件结构由于按键的值改变,触发了事件, 显示值加1 ,labview读取了按键的值,为“T”,我的疑问既然读取的值为“T“了,为什么循环还要进行下去,是要将本次循环进行完毕算结束吗? ...

补充一点,因为按钮没有按下,所以第一次读到的是F值,(”多线程“导致按钮的值先事件结构被送到结束条件,所以第一次循环读取按钮值已经结束,所以你按按钮也不能结束循环,对,就是时序问题,你只要想办法让读取按钮的值在触发事件结构之后就不会导致这样的现象出现,所以如2楼所言,把按钮放到事件结构里面就好了)


有个好玩的地方在于如果你把按钮的值初始设置成T,那么你按下按钮之后程序不会像你所想的一样进入第二次循环,而是会直接结束,这样一来你应该就懂了吧


静夜style 发表于 2016-12-22 16:13
有个好玩的地方在于如果你把按钮的值初始设置成T,那么你按下按钮之后程序不会像你所想的一样进入第二次循环,而是会直接结束,这样一来你应该就懂了吧

补充一点,因为按钮没有按下,所以第一次读到的是F值,

大功率电感厂家 |大电流电感工厂

  • 一种嵌入式语音识别模块的设计与实现
    服务机器人以服务为目的,因此人们需要一种更方便、更自然、更加人性化的方式与机器人交互,而不再满足于复杂的键盘和按钮操作。基于听觉的人机交互是该领域的一个重要发展方向。目前主流的语音识别技术是基于统计模
  • 基于单片机AT89C2051的电子钟设计方案
    电路见图1.一片20引脚的单片机AT89C2051为电子钟主体,其显示数据从P1口分时输出,P3.0~3.3则输出对应的位选通信号。由于LED数码管点亮时耗电较大,故使用了四只PNP型晶体管VT1~
  • 车载数码相机充电适配器设计
    附图为数码相机充电适配器电路。电路采用一对晶体管差分放大器和一级电流放大器.分别输出恒定的电压和要求的电流。晶体管T1和T2构成一对差分放大器.T1基极电压由稳压二极管ZD1稳定在3V.T2基极电压则
  • 大功率电感