LabVIEW Pro 專業論壇--Serial Port 讀寫之間時間一問
 
     
 
 
 
LabVIEW 討論區基礎教學每月專題分享技術問題精選online Test
技術討論區 程式分享區 教育訓練與認證區 閒話家常區 工作機會討論區 回報區 ✦LabVIEW NXG 特區✦ 高手專訪系列
 熱門關鍵字 
    CLD 考前衝刺    TOP 資源排行榜    3小時內學會 LabVIEW    取得 NI 協助    量測概念充電站
 您的位置:首頁 > > Serial Port 讀寫之間時間一問
    板主:
 之1(6篇)
Serial Port 讀寫之間時間一問 
 
kaanthony
暱稱:Ka
經驗值:376
等級:導師
發文:5
回文:12
版本:LabVIEW 2016
闖關狀態:
迷霧之森
前往地圖:
 
字級設定

[+]放大圖片
 
[+]放大圖片
 

我現在利用Labview與馬達驅動做連接,但是我讀值時,若果讀寫指令之間的等待時間不足25ms的話,會出現讀取的值錯誤。但我利用原廠的程式,發現讀寫之間時間少約1ms(如圖一),請問一下使用Labview可以做到這個事情嗎?謝謝

 

  文章人氣: 1696 讚:0 文章日期:2018/02/09 07:52
kzkobe87

暱稱:KZ
經驗值:663
等級:高手
發文:0
回文:40
版本:LabVIEW 2010
闖關狀態:
飄渺嶺
前往地圖:
1樓
字級設定

不好意思,你的程式圖跟問題所說的delay要25ms是同一個嗎?

因為你的程式圖在迴圈就Delay50ms,Write後又delay1s。

還有一個問題想問你一下,你的資料錯誤是格式錯誤?還是讀到上一筆資料呢?

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    讚:0 文章日期:2018/02/09 17:13
labviewjc

暱稱:olenjerry
經驗值:1202
等級:堂主
發文:3
回文:125
版本:LabVIEW 2014
闖關狀態:
飄渺嶺
前往地圖:
2樓
字級設定

帥哥: 您的問題我不是非常清楚耶. 你是說你看了原廠的程式和資料, 發現他們是用 24ms 的間距來控制和讀寫, 然後你想要在 labview 也做到一樣的 timing 24ms, 是嗎?

 

你現在的程式碼跑完一個 loop 是1.5秒. 我建議你拆成兩部分寫(利用 sequence 架構在 while loop 裡面) ......

 

            -----------------------  我是 while loop -------------------------------------------

            ------                                                                                            -------

Init =>  ------     1. 寫入 + (你的)delay ==> 2. 讀取 + (你的 delay)      ------  close vi

            -----                                                                                             -------

           -------------------------------------------------------------------------------------------

 

根據上面的寫法, 你盡量把你的兩個 delay 時間變小, 我建議從 15ms 開始往下降, 看他們的 buffer 可以抓到多小會開始出現錯誤, 因為你提到圓廠說 25 ms. 所以 15ms + 15 ms = 30ms. 你是個幾次應該就找出來臨界點了.

 

另外以 NI 官方回答是, 一個空的 while loop 即現應該在 1ms 會跑一次, 因為 labview 是高階語言, 加上 library 和 labview engine + api programs 暫聚大量的 memory 資源, 所以每家公司的 api program 在你電腦上跑的時間也不一定. 這也是高階語言的宿命, C# 也是極限在 1 ms loop timing. 所以結論是可能會有一點點差距. 比如你測出來的會有 23ms / 25 ms 也不一定在 labview 上面. 

 

另外你的 time delay 也取決於你的 讀寫 vi buffer 大小, 這些都要你一照我上面的圖去跑個幾下測出結果的. Good luck and wish you the best. 

 

Jerry

    讚:1 文章日期:2018/02/12 08:57
kzkobe87

暱稱:KZ
經驗值:663
等級:高手
發文:0
回文:40
版本:LabVIEW 2010
闖關狀態:
飄渺嶺
前往地圖:
3樓
字級設定

前輩,不好意思

他好像蠻多地方都解釋不太好

第一他的圖(一)他所謂的原廠程式讀到寫只要1ms其實是10ms

第二他說他LabVIEW程式讀到寫必須要delay25ms要不然會資料錯誤,但是他卻附了delay1.05s的圖(???)

至於他可能希望的是如何讓LabVIEW做到跟原廠程式一樣的速度

 

引言自 labviewjc:

帥哥: 您的問題我不是非常清楚耶. 你是說你看了原廠的程式和資料, 發現他們是用 24ms 的間距來控制和讀寫, 然後你想要在 labview 也做到一樣的 timing 24ms, 是嗎?

 

你現在的程式碼跑完一個 loop 是1.5秒. 我建議你拆成兩部分寫(利用 sequence 架構在 while loop 裡面) ......

 

            -----------------------  我是 while loop -------------------------------------------

            ------                                                                                            -------

Init =>  ------     1. 寫入 + (你的)delay ==> 2. 讀取 + (你的 delay)      ------  close vi

            -----                                                                                             -------

           -------------------------------------------------------------------------------------------

 

根據上面的寫法, 你盡量把你的兩個 delay 時間變小, 我建議從 15ms 開始往下降, 看他們的 buffer 可以抓到多小會開始出現錯誤, 因為你提到圓廠說 25 ms. 所以 15ms + 15 ms = 30ms. 你是個幾次應該就找出來臨界點了.

 

另外以 NI 官方回答是, 一個空的 while loop 即現應該在 1ms 會跑一次, 因為 labview 是高階語言, 加上 library 和 labview engine + api programs 暫聚大量的 memory 資源, 所以每家公司的 api program 在你電腦上跑的時間也不一定. 這也是高階語言的宿命, C# 也是極限在 1 ms loop timing. 所以結論是可能會有一點點差距. 比如你測出來的會有 23ms / 25 ms 也不一定在 labview 上面. 

 

另外你的 time delay 也取決於你的 讀寫 vi buffer 大小, 這些都要你一照我上面的圖去跑個幾下測出結果的. Good luck and wish you the best. 

 

Jerry

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    讚:0 文章日期:2018/02/12 11:24
labviewjc

暱稱:olenjerry
經驗值:1202
等級:堂主
發文:3
回文:125
版本:LabVIEW 2014
闖關狀態:
飄渺嶺
前往地圖:
4樓
字級設定

好 .... 攘我們來好好分析玩一下好了

 

1. 照閣下的一路回答, 我猜這兩張圖 的 refererce 應該是原廠提供的參考對吧?那如果看第一張圖, 你會發現它都有 ioctl 的字樣 ---> 加上他執行速度粉快, 我猜是底層的驅動程式. 這張參考價值大不大我不知道, 因為我從頭到尾沒有看過這份 reference, 也不知道你現在要做的東西. 但是可以大概抓到的是, 我會把裡面兩個 "read" 的中間時間都抓起來然後相加, 我就應該可以猜到他底層跑的時候兩個 read 之前會需要多少時間. 

 

2. 如果第二張圖也是參考原廠提供的, 那也沒多大用處 . 因為寫了以後再讀, 中間停止一秒, 這也太久了. 然後 labview while loop 在執行下一個 loop 之前, 又等待 0.5 秒. 我認為第二張只是參考用的罷了. 最終你還是要照我一開始 po 給你的流程, 把你要的讀寫兩部分 vi 執行時間大概抓到, 前提是他們要沒有 error 出來. 

 

3. 要我是你, 我會把 while loop 拿掉. 然後單跑一次看看會不會有 error, 然後時間慢慢減少直到有 error 出來. 那時候你的讀寫時間才是最低沒錯誤出現的臨界值. 把 while loop 拿掉是因為你如果有操作錯誤而每一次都有最左邊的 initial 動作, 然後中間有錯誤, 沒跑完最右邊的 close 流程, 你的 memory 就會推機一次這次沒做完 close 的動作程式. 半天下來妳就藍螢幕 memory 爆了. 你先這樣做看看然後就算有錯誤, 你再提出來吧. 看看那 error code 是寫啥東東?

    讚:0 文章日期:2018/02/12 14:33
jason1

暱稱:jason
經驗值:2242
等級:舵主
發文:0
回文:86
版本:請選擇
闖關狀態:
英雄殿
前往地圖:
5樓
字級設定

1.第一個圖不是原廠程式,是一般的RS232測試程式

2.一筆完整資料是從3A開始,到0D 0A結束,上面的截圖不完整,應該要從write開始,收到完整資料結束,看一個寫,讀動作需要多少時間

3.從截圖只能猜測,write後10ms才讀到3A,從3A到完整的0D 0A又需要10ms,write後需要20ms才能讀取完整回應--write到read的等待時間至少要20ms--所以訂25ms應該合理,,設備沒回應,read快也沒用

4.若要達到最快的控制速度,就不能用wait,write後就要一直read,到取得0D 0A後,read結束,再進行下一個write動作,,用這種方式比較耗cpu資源,控制速度取決於設備回應的速度,以後若是換了別的硬體,也不需要調整wait時間

    讚:0 文章日期:2018/02/17 11:03
kennes1102


2013 LabVIEW 至尊爭霸賽參賽者    
暱稱:kennes
經驗值:4936
等級:總舵主
發文:3
回文:1121
版本:LabVIEW 2015
闖關狀態:
無垠海域
前往地圖:
6樓
字級設定

通常我會用兩個迴圈配合FGV去處理傳送和接收

[+]放大圖片
 

[+]放大圖片
 
[+]放大圖片
 
[+]放大圖片
 

參考看看吧

    讚:0 文章日期:2018/02/21 11:43
 之1(6篇)
 
 
   會員中心 
帳號:
     
密碼:
     
  以後自動登入
 
註冊
   待回覆文章 
1. [已解決]
2. 電漿((亞森科技, AIT-300-1...
3.
 
   Top 5 熱門討論 
1. [已解決]
2. [已解決]string矩陣內容替換問題
3. 電漿((亞森科技, AIT-300-1...
4. Actor Framework 求助
5. 有關於資料傳送的問題
 
 
 
LabVIEW討論區 站長信箱 關於我們 站內聲明
國家儀器股份有限公司贊助;Sponsored by NI.
© 2010 National Instruments, Taiwan. All rights reserved. design by begonia