如何解決 讀取兩個 Modbus 程式剛起動會時"重秒"

讀取兩個 Modbus 程式剛起動會時"重秒"

程式邏輯:
有兩顆電表一顆專讀頻率,一顆讀取其它參數
《電表1》讀取其他參數,每秒只讀取1次
《電表2》只讀頻率1秒讀10次,然後再平均後得出=1秒1個頻率值

裡面的for loop(10)代表頻率1秒讀10次
外面的for loop(10)代表將讀取到的參數每10秒做成一個檔案

所以一秒會有頻率&其他參數
每10秒會再將這些參數 之後做成一個檔案
將這些參數整合後須再做其他處理,但是目前Modbus程式會遇到,程式剛起動會"重秒"

用成毫秒觀察發現,在第1秒時或第2秒時可能會在一秒內讀取兩次
將小數點顯示至小數第二位後,就發現了原因,
"可能"除了開頭第1秒的(第一&二個) & (第二&三個)外
之後的其他秒數都是X.80毫秒(都每隔1000ms整跳一秒)
image
N+1個迴圈後 秒數小數點都是X.80

《《以下的截圖都是程式剛剛啟動第一個迴圈時的畫面》》
image
所以如果程式開始的瞬間是在X.80~X99之間,就不會發生重秒的問題

image
但若程式開始瞬間是在X.00~X.79的話就會發生"重秒"

image
有時候也會發生在第2和3格才出現重秒的情況

重秒影片.7z (2.8 MB)
Modbus重秒.vi (32.5 KB)

請問各位高手,如何讓Modbus程式不要剛起動時有"重秒"發生 ~ 謝謝。

把毫秒歸零 應該就可以了
image

謝謝您的建議 但是這樣把毫秒歸零,還是會重秒。
image

image

且若只剩讀取一個Modbus也依然會出現這種情況
只有一個Modbus.vi (20.8 KB)

我在想說是否要讓讓程式在最一開始的時候判斷秒數是否有重秒,
沒重秒依然維持原樣,
有重秒的話,把第二個重秒的那行移除,用後一個取代
但是就是會怕資料秒數雖然依照順序,但其資料內容,會有差一秒的資料數據。

TimeLoop
TimeLoop.vi (32.8 KB)

把 For Loop 改成 Time Loop
Modbus Ver2.vi (38.0 KB)

我推測主要原因
應該是你使用了 Wait Until Next ms Multipe 這個物件
你可以把它改成 Wait(ms) 試試看.

image

# Wait(ms)函數和Wait Until Next ms Multiple函數之間的區別

沒想到是時間元件使用錯誤,謝謝斗笠的幫忙,後來用Wait(ms)後已解決問題了 謝謝~