LabVIEW串口異步查詢方式操作

發送命令Visa Write發送命令時,其按初始化打開串口的格式操作,如波特率,奇偶檢驗,結束符等。返回變量 return count 大小僅指 write buffer 的長度,write buffer "#01",那麼return count 返回3

 

讀取緩衝區Visa Read首先應該輸入想要讀取多少字節 byte countreturn count爲實際讀取到的字節數量。讀取之後串口緩衝區字節數將相應減少return count。比如緩衝區現在存有22個字節,

如果輸入 byte count 等於22,那麼將讀出所有22字節,同時 return count返回22

如果輸入 byte count 等於20,那麼將讀出緩衝區前面20字節,return count返回20,此時緩衝區內還有2字節,這時如緊接着Visa Read調用串口屬性 Number of Bytes at Serial Port,其值爲2,在其它情況下,其值爲0。但是如果在 Visa Read後先調用VISA高級節點Visa Flush IO Buffer,清空緩衝區,再調用屬性 Number of Bytes at Serial Port,其值也將返回0

如果輸入 byte count 大於22,那麼將讀出所有22字節,同時 return count返回22

 

串口寫入讀取操作的以上特點,決定了在實際編寫串口程序時應考慮的一些問題:

通常情況下,一個串行通信程序由數據採集與信號控制組成。數據採集需要循環採集,而信號控制只在有需要時發出控制命令。控制命令發出後,一般需要判斷設備是否響應了命令,這就需要讀取輸入緩衝區。但在發送控制命令時,數據採集命令可能也正在發送,因爲數據採集是不斷循環採集的,因此此時輸入緩衝區可能是採集到的數據,也有可能是控制命令的響應報文,採集的數據與控制命令響應報文在字節大小與報文格式上一般不同。比如採集的數據爲: >+0022.3 ,控制命令響應報文爲 !01 ,那麼此時

如果程序先讀取數據,那麼讀取byte count等於8,之後緩衝區大小爲0,而此時再讀取響應就爲空,程序會認爲設備未能正確響應控制,將放棄此次操作,重新發送控制命令;

如果程序先讀取響應,那麼讀取 byte count等於3,如果此時對應的緩衝區爲 >+0022.3,那讀取到的格式與響應報文不一致,程序應判斷爲設備未正常響應控制命令,應放棄此次操作。讀取響應之後緩衝區變爲022.3,此時讀取採集數據,將只讀到5個字節,且與數據格式不一致,程序應放棄數據,重新發送數據採集命令。

這就會造成在發送控制命令時,採集與控制混亂。可能造成報文丟失,且程序需多次發送命令,運行效率降低。

解決辦法:設置一採集中斷位,在發送信號控制命令前,採集中斷位置位,然後再發送控制命令,待控制命令正常響應後,採集中斷位復位。

 

示例程序:

數據採集:

信號控制:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章