如何 在指令時間之前,維持之前的移動指令。

各位新進大家好,我想設計一個程式但,似乎沒有找到我要的解答,向各位請教。

我會在該控制時間點前 『告訴我某時間點會 給出移動指令值,並用該移動指令去做計算』,在指令時間之前,維持之前的移動指令。

假設12:00移動指令為100,在下個指令來之前都以100做計算,
若到了12:02時移動指令為105,在下個指令來之前都以105做計算,
若到了12.29時移動指令為151,在下個指令來之前都以151做計算,…依此類推。
更新移動指令指令.vi (10.5 KB)

更新移動指令指令_簡易版.vi (11.0 KB)

從你敘述中,大致都已經知道
在甚麼時間點下甚麼指令了.

我不懂你為何要糾結再維持之前的移動指令呢?

預設時間指令.vi (47.1 KB)

抱歉剛下班,現在才回訊息,謝謝您的用心回復。
下列敘述是我真正需解決的,簡易版那個似乎行不通。

因為我要控制的是「基準頻率調整指令」,而這在真正要控制的前1分鐘,
台電才會告訴我們 1.時間 2.基準頻率調整指令,所以我當下其實並不知道未來的指令為何?
所以須收到指令後1分鐘後動作,即便現在接收到新的指令,但這是下一分鐘才要動作的指令,現在還是要維持上分鐘的指令做動作。

台電說 :「基準頻率調整指令,透過遙測通訊模組,每分鐘會給予一個指令。
每分鐘做發送,但大部分時間都是60Hz,若新的這分鐘收到新的頻率指令時,就必須在下一分鐘做調整。」

我建議 程式架構 使用 Producer/Consumer Design Pattern

你可以試著把 預設時間指令.vi
程式架構改為 Producer/Consumer Design Pattern
上面 迴圈 Event 偵測觸發事件 ( 調整指令 & 發送指令 )
下面 迴圈 執行移動指令.

Producer/Consumer Design Pattern 程式架構
程式架構設計範例.vi (55.3 KB)

謝謝您的解釋,對我幫助甚大,這程式我需要花些時間理解一下,我問您在請教您。非常感謝~

如果在程式中 你只需 維持在之前的移動指令.
而不需考量因人為輸入操作錯誤或其他會造成運行錯誤的因素.

那就參考下圖.


FeedbackNodeatLoop.vi (12.6 KB)


從上圖中你會發現 跟簡易版的很相似
其實 只是將原本使用 Shift Register 改變為使用 Feedback Node
當你在 While Loop 迴圈內
修改變更 移動指令 時 舊指令 也會變更
所以你必須在 While Loop 中
使用 Shift Register 或 Feedback Node
得到上一次的值 (舊指令)

另外 你說 簡易版那個似乎行不通
是有遇到甚麼問題? 可以說明一下嗎?

非常謝謝您的回復~
因為原意為這列這句:
台電說 :「基準頻率調整指令,透過遙測通訊模組,每分鐘會給予一個指令。
每分鐘做發送,若新的這分鐘收到新的頻率指令時,就必須在下一分鐘做調整。」

1:59 時發送 2:00的指令為60.00 (1:59:00 ~ 1:59:59 未有指令)
2:00 時發送 2:01的指令為60.01 (2:00:00 ~ 2:00:59 指令原為60.00),【因為程式的問題,到 2:01:00時因為同時接收到2:01時發送的指令60.02,所以原本該出60.01的指令會變成60.02。】
2:01 時發送 2:02的指令為60.02
2:02 時發送 2:03的指令為60.01

雖然程式有維持之前指令的的方法,但若同時收到新指令與原本在該指令維持的時間在同一時刻發生時,會有問題,想請問有無善方法~謝謝~
更新移動指令指令_簡易版2.0.vi (11.1 KB)

設置 移動指令-時間點 & Current Time
按滑鼠右鍵選擇 Display Format
將 %X 改為%.3X

這方法似乎可行,非常的感謝您~ \ (^ _^ ) /