想請教各位前輩
在使用RS232通訊格式來與儀器溝通時
通常在Write跟Read之間會加個延遲時間讓儀器有時間處理訊息
延遲時間通常都是200ms~500ms左右
但當需要作多個資料傳送時,可能需要溝通10筆資料
這樣整個流程跑完可能就要2-5秒(200ms*10-500ms*10)
這樣的時間似乎挺久的
後來有個前輩教導我使用Property Node來擷取回覆資料的長短
來判斷儀器是否處理完指令並丟出回覆碼
藉此來減少整個流程的時間
但我目前發現
儀器在回覆正確的回覆碼時,Byte at port數字為3
若回覆錯誤的回覆碼,Byte at port數字為5
當錯誤的回覆碼傳出後,Labview就會卡在迴圈內,
按任何指令都無法動作
除了左上角的強制停止
想請問各位前輩,若儀器丟出錯誤的回覆碼時,我要如何讓儀器
再處理上一次的訊息讓儀器正確的回覆碼?
另外想請問,Byte at por是不是一次只能針對一個給儀器的指令
若要重複擷取Byte at port的數字,就必須再丟一次指令給儀器?
附上通訊方式

Jay101240708.9705555556
嗨嗨 大大您好
小弟沒用過Labview 不過依照正常來說.
1. 收到設備一次性的資料回覆(Byte at port數字為3) 就往下走
2. 收到設備一次性的錯誤回覆(Byte at port數字為5) 就往下走
3. 下了命令後, 一段時間(Time Out) 沒收到設備回覆或者自身遺失設備回覆
都當成錯誤, 往下走
如果是這樣的話, 您可能要作這三種的判斷試試看唷...
因為偶不知道 「Byte at port」 是Function 還是回應的 buffer
故這樣看起來 您應該僅做了第一點 第二跟第三點 您在家上去試試看 嘿
:)
Byte at port簡單的說就是有多少資料待接收.
若資料傳回的是123則Byte at port=3,資料傳回的是12345則Byte at port=5.
而且會累積,如果第一次傳回123,程式沒有將其讀出,第二次傳回12345,則Byte at port=8,讀出的資料就會是12312345.
所以一般都會有結束碼來區隔,結束碼有時1個(x0A或x0D),有時2個(0A0D或0D0A)
哦哦 原來是這樣阿。
不過如果是這樣的話, 通常會
1. 確認回應的數量 對了往下走 2 不對走 Not.
2. 確認 CRC 對了 往下走 3 不對走 Not.
3. 確認 Response 的 Command 格式 對了 往下走 4 不對走 Not.
4. 解析資料 展示於介面
Not. 發送下一次命令 / 或秀出錯誤訊息 , 等待新的回應.
在 Lv 裡面 如果要作這部份, 需要拉很多 方塊嗎?
謝謝您 :D
下面給你參考


這樣我大概知道架構是什麼了 lv 用起來還真是人性化阿。
謝謝您.... :D
另一種方法
直接把延遲拆掉
READ 給予較大的Byte by port 如20看你的資料量多大。
[QUOTE=x7355607]我有去試過 還是不行耶 連值都傳不回來到我PC上 [/QUOTE]
有一個可能是接線的問題。如果你的儀器廠商有提供現成的程式的話,可以先用它來測試。測試成功後,表示接線正常,再來看labview的通訊問題。
現在不是接線的問題就是軟體的問題,先確認接線沒問題後,再來看看是不是軟體的問題。