2017-10-09 1 views
1

私は現在、HoneywellのC#、POS for .NETおよびPOS4NET Suiteを使用してHoneywell Genesis 7580Gスキャナを制御するプロジェクトに取り組んでいます。私は、現在のシリアルリードタイムアウトを取得したいと思いますので、私は次のようにPOS4NETからDIRECTIO()メソッドを呼び出し:POSIO for .NETでDirectIO()を使用してinquiryコマンドを送信する方法はありますか?

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 $::レスポンス」

3つのゼロ(時間単位はミリ秒)と[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

応答データが正しく到着し、文字列として変換されてゼロで終わったと見なされる可能性はありますか?

Encoding.ASCII.GetString()の代わりにBitConverter.ToString()を使用してバイト配列データの内容を確認してください。

+1

私は関連する仕様を調べました。 「Genesis 7580g User's Guide」の162ページの「Serial Trigger Mode:Read Time-Out」の項目を見ると、設定範囲は0〜300000なので、最大6桁ですが、コマンドは4桁です。 ただし、「ハンズフリータイムアウト」(163ページ)と同じ範囲の値を設定すると、コマンドの数値パラメータ部分は6桁になります。 "シリアルトリガモード:読み取りタイムアウト"の場合、ドキュメント/サービスオブジェクト/ファームウェアの1つが正しくない可能性があります。 ベンダーに正しいかどうか確認してください。 – kunif

関連する問題