2017-10-09 85 views
1

我目前正在使用C#,POS for .NET和霍尼韋爾POS4NET套件來控制霍尼韋爾Genesis 7580G掃描儀。我想獲得當前的串行讀超時,所以我從POS4NET以下列方式稱爲DIRECTIO()方法:如何在POS for .NET中使用DirectIO()發送查詢命令?

string command = "TRGSTO?."; 
DirectIOData response = scanner.DirectIO(18, 1024, Encoding.ASCII.GetBytes(command)); 
byte[] buffer = (byte[])response.Object; 
Console.WriteLine("$: Response: " + Encoding.ASCII.GetString(buffer)); 

此代碼打印:

「$:響應:TRGSTO20」其中缺少三個零(時間單位是毫秒)和[ACK]字符。 我期待這個...

「$:響應:TRGSTO20000 [ACK]」

但是,如果我改變命令來獲取不同的設置...

string command = "BEPPWR?."; 
DirectIOData response = scanner.DirectIO(18, 1024, Encoding.ASCII.GetBytes(command)); 
byte[] buffer = (byte[])response.Object; 
Console.WriteLine("$: Response: " + Encoding.ASCII.GetString(buffer)); 

代碼按預期工作,並打印

「$:響應:BEPPWR1 [ACK]」

什麼是發送使用DIRECTIO()查詢命令的正確方法是什麼?

回答

0

響應數據是否可能已經正確到達並被轉換爲字符串以便它被認爲以零結尾?

請使用BitConverter.ToString()而不是Encoding.ASCII.GetString()來檢查字節數組數據的內容。

+1

我調查了相關規範。 查看「Genesis 7580g用戶指南」第162頁中的「串行觸發模式:讀取超時」項目,設置範圍爲0到300000,因此最多爲6位數字,但數字參數部分命令是4位數。 但是,設置相同的值範圍「免提超時」(第163頁),該命令的數字參數部分爲6位數。 對於「串行觸發模式:讀取超時」,文檔/服務對象/固件之一可能不正確。 請與供應商確認哪些信息是正確的。 – kunif

相關問題