要求每次发送一个命令就按键盘Enter键,就发送出去,不管是新命令还是就命令以按Enter键为确认,发送命令,我利用了事件结构,还利用了一个发送键,发送键我利用了advanced>key navigation定义它一个Enter.这样做能够大体上起到这种要求,但是我总觉得有点不对劲,因为程序运行开始,对于PIDP控件,第一次操作会有不反应,一旦有了第一次就不会出现什么问题.而且我总觉得有点不方便,可不可以不要发送键呢?或者有其他更好的技巧?请各位提点意见,我想不出什么好办法,我做的见附件!事件结构5.vi,
我用7.1版本,pro2000系统,谢谢!
是不是我的问题没有描述清楚呢?请问有其它思维方式解决这个问题吗?谢谢
(因簡體文的問題,描述物件名稱時可能會有所出入,
有錯誤地方,請指正)
剛看了你的程式有個小問題,
控制元「楷冞」的觸發動作必需放在「Event Structure」中。
不然一旦程式流程進入「Event Structure」、
而 控制元「楷冞」的值也早就被送出之後,
再按下 Enter 的動作就無法被偵測到。
所以我想 控制元「楷冞」的動作有時正常、有時不正常,
應該是這個原因。
谢谢Airbolt!
由于出差,今天才回来看到你的回复,我先利用你的提议试试,然后再来讨论!
另外:「楷冞」应该是指我的发送(send)按钮
<span =bold>Airbolt
你好,你所所说的“「楷冞」”『应该是指我的发送(send)按钮』放在「Event Structure」中,不知道具体怎么放,我是把“「楷冞」”也作为一个事件放在「Event Structure」中,好像效果更差!不知道是否我理解你的意思错误?能否具体指导一下,谢谢!
我先提一個點。
你的程式,主要功能應該是,對某個指定裝置送出不同的指令,
每當參數改變時,就將新的指令送出。
(沒錯吧?!)
你的程式裡有兩個 Loop,設法將其中一個去除,並將 write 放入 Loop 中即可。
如果動作不正常時,你可以試著將程式架構修改。
改成每當我改變參數時,我必需按下一個 Enter 鍵,才將新的指令送出。
(將 Send 控制元 的 快速鍵 設為 Enter)
這樣一來,不僅程式簡化了,而且程式的操作方式也比較容易懂。
(Event Structure 就只處理「Send」、「Stop」兩個事件)
Airbolt38658.5568865741
Airbolt:你好!
“你的程式,主要功能應該是,對某個指定裝置送出不同的指令,
每當參數改變時,就將新的指令送出。
(沒錯吧?!)”你说的就是我想要的,而且不改变参数,只要重复原来的值,按下ENTER也同样发送我想发送的指令!
“你的程式裡有兩個 Loop,設法將其中一個去除,並將 write 放入 Loop 中即可。”你说的有道理,我用两个loop只是把最外面作为程序一直运行状态,内loop用来响应写,在两个loop之间还有其他处理,例如读、数据处理等等。问题在这里外loop体现确实有点多余。
“如果動作不正常時,你可以試著將程式架構修改。
改成每當我改變參數時,我必需按下一個 Enter 鍵,才將新的指令送出。
其实我就是利用了(將 Send 控制元 的 快速鍵 設為 Enter),只有按下enter才发送我想发送的指令!问题就是刚开始运行的时候,参数事件结构响应了,但enter开始是false,等下次才是ture,以后才会趋向正常,感觉enter慢一个响应。
“這樣一來,不僅程式簡化了,而且程式的操作方式也比較容易懂。
(Event Structure 就只處理「Send」、「Stop」兩個事件)”你的意思是指指令参数改变不作为事件结构响应?这样一来的话,虽然enter响应了,但不知道发送哪个指令啊,也许我还是不理解你的用意,请再明确,谢谢!
[QUOTE=along]
(省略)
“如果動作不正常時,你可以試著將程式架構修改。
改成每當我改變參數時,我必需按下一個 Enter 鍵,才將新的指令送出。
其实我就是利用了(將 Send 控制元 的 快速鍵 設為 Enter),只有按下enter才发送我想发送的指令!问题就是刚开始运行的时候,参数事件结构响应了,但enter开始是false,等下次才是ture,以后才会趋向正常,感觉enter慢一个响应。
“這樣一來,不僅程式簡化了,而且程式的操作方式也比較容易懂。
(Event Structure 就只處理「Send」、「Stop」兩個事件)”你的意思是指指令参数改变不作为事件结构响应?这样一来的话,虽然enter响应了,但不知道发送哪个指令啊,也许我还是不理解你的用意,请再明确,谢谢!
[/QUOTE]
針對你的第一個問題:
你試著執行我上傳的程式:Simulated Process.vi

說明:
1. 圖中兩個 LED 是用來顯示 目前的 程序進行狀態,燈亮 表示 程序進行中,燈熄 表示 程序結束。
操作:
1. 你快速地改變數值,PIDP 及 PWM 兩個數值,你會發現當停止改變數值的動作時,
程序 依然在持續在進行中。
=> 這是用來說明,當「程式本身的執行速度」或「儀器接受指令的反應速度」跟不上操作者的動作時,
便會出現反應不及,甚至遺漏掉操作者所下達的動作。
=> 由其是你現在用的旋轉式元件,你可能只是旋轉了一下,但是可能觸發了好幾個 Event
=> 想辦法用其它方式來避免這種情況發生,改變元件型式? 改變輸入方式?
針對你的第二個問題:
如果你要的是能夠及時反應 操作者的所有動作 (改變數據 所觸發的 Event),那麼你原來的作法才是你想要的。
至於我說的做方法,給操作者不是那麼直接了,你可能會需要一個功能選單來選擇目前所指定的動作為何,
但是卻可以確保在指定的情況下才觸發 Event。
這變成是「GUI 的設計」及「程式架構」上,雙方面的考量了,
或者是在 給儀器送出指令 後,給予一定的 Delay Time ,也說不定可以解決問題,
試試看吧!!!
Airbolt38659.4604166667
along
10
Airbolt:你好!
根据你的分析和说明,我再一次考虑了我的程序,我的问题越来越明确,我的程序主要存在要解决两个问题:
1: 对面板上各指令的操作(key down 与value change)都要有反应,(key down 的作用是PIDP数值不改变只要按下Enter,也要产生的Event,重复发送指令。)这一点我的程序已经勉强做到了。
2:对于1)的操作,正如你所说的“尤其是你現在用的旋轉式元件,你可能只是旋轉了一下,但是可能觸發了好幾個 Event”以及PIDP等值进行数值更改产生value change的Event一样每键入一个数字就产生一个Event,例如PIDP键入值为5.45600就产生7个Event。这又不是我所要的,我希望旋轉式元件旋轉了一下到达目的时才产生Event或者说才发送终了值,例如我的程序PWM旋转按钮从P10到P50,可能产生4个Event,当然我希望只产生一个Event最好,如果是四个Event,我希望的结果就是,只有到达P50时才发送指令;同样的键入PIDP的值也可能产生几个Event,但是不管它产生几个Event,我希望直到数字键入完毕,经确认后(也可以说是我需要最后的一个Event),按下Enter键后才发送我的指令。
总结1)与2),简单的说就是,我的程序对面板控件既要对操作动作有响应(Event),又要提取我需要的响应(Event),发送指令。
因此,我目前还没有好的结果,我还要继续努力,希望进一步交流,谢谢!
(如果你已經快有解決之道時,先不要看底下的內容,讓自己腦力激盪一下。)
你可以試著從 Event 去做調整。
思考一下,我們怎麼完成所需要的功能?
當我們在改變旋轉鈕時,其上的數據是不斷在改變的,什麼時候該數據是我們要的?
如果有辦法從動作上讓旁人知道你所改變的數據正是所想要的,那麼這個需求多半
可以在程式上完成。
「人們可以解讀的動作原理,大多數都可以在程式上完成。」
=> 因為必有其依據
分析:
1. 滑鼠在旋轉鈕上按下左鍵,開始做調整,直到我放開左鍵的那一剎那,
該數據正是我想要的。
2. 當我用鍵盤鍵入我要的值時,在輸入完數據時,按下 Enter 鍵時,
該數據正是我想要的。
3. 但是當我做了上述的動作,卻沒有改變數據時 (可能把數據 10 -> 50 -> 10)
我不希望程式依然會去做該程序。
試試看,從一個 idea 誕生是最難的,接下來的程式完成便不是什麼難事了。
留一些思考空間給你。
Airbolt38659.5430555556
along
12
谢谢,我现在只是旋转按钮改成menu ring,其它除了有这种理念外,我还是没有好的解决办法,其实这个问题我考虑很久了,没有什么进展!我还要继续努力!你们有什么好的,也及时指点我。
範例:Simulated Process_m1.vi

這是之前我寫的範例,你參考一下,整個動作都是照上面的分析所完成的。
另外,那個 PWM 旋轉鈕,動作怪怪的,我替換成內建的,動作就正常了,可能是該 Controller 設定的問題吧。
利用Register For Events也可以在使用者放開滑鼠左鍵時,產生Event事件.
其動作原理及程序為:
1)程式一開始將Dial觸發事件設定為MouseDown,當使用者按下Dial物件後,觸發事件變為ValueChange.
2)在ValueChange過程中,將觸發事件再設定為MouseUp事件.
3)當使用者放開滑鼠左鍵時,觸發MouseUp事件,Dial將參數傳入Numeric裡,並將觸發事件改為MouseDown.
Dial_RegEvent_Control.vi
哇! jimmy-Chen 提供的方式更簡潔有力,
而且少了一堆 local 在那邊傳來傳去的,
這招要學起來,謝謝 jimmy-Chen 。
along
16
谢谢两位,我收获不少,看来事件结构细节问题我得好好学习和琢磨。我从你们给得例子中,还有还有一个问题好像不能兼顾,就是key down 和value change不能同时成立,也就是说,当值没有变化,我想key down控件时也发送指令。不过我从你们得思路得到很大启发,真的很谢谢!我也修改了一下,我自己觉得不管值改变还是key down,只要是按下ENTER健,就发送!请帮我看看有什么不好得地方,程序见附件!自己修改Simulated_Process_m2.vi