2017-08-02 2 views
0

デルファイでzvt-protocolを実現するためのコードをいくつか作成しようとしています。端末に接続するには、ether TIDTCPClientまたはcomport-componentをturbopackで使用します。どちらもインゲニコ端末IPP480に接続できます。 2秒間テキスト行 "a32de"を表示しています。どうしてか分かりません!delphiとingenicoでZVTを使用するIPP480

zvt-ドキュメントに記載されているいくつかのコマンドラインを送信できますが、端末によって何も表示または実行されることはありません。

procedure TForm1.Button1Click(Sender: TObject); 
var 
    lSBefehl : String; 
begin 
    lSBefehl := ''; 

    IdTCPClient1.Host := eip.IPAddress; // IP des EC-Cash-Gerätes 
    IdTCPClient1.Port := eport.IntValue; 


    if not IdTCPClient1.Connected then begin 
     IdTCPClient1.Connect; //that is working! 
    end; 
    if not IdTCPClient1.Connected then begin 
     ShowMessage('not connected!'); 
    end; 

    lSBefehl := Chr(6)+Chr(0)+Chr(6)+Chr(209)+Chr(255); //Nothing! 

    IdTCPClient1.SendCmd(lSBefehl); 
end; 

zvtのバイトシーケンスのテストツールはありますか?または、バイトシーケンスの正しい順序の解を知っていますか?

ベストreqards クリスチャン

+0

端末でバイトシーケンスが必要な場合は、文字列を使用してデータを送信しないで、バイト配列を使用してください。 Delphi 2009以降のバージョンのDelphiを使用している場合、文字列を使用すると、追加する文字ごとに2バイトがあることを意味します。バイト配列を送信すると、IOHandlerのWriteメソッドも使用する必要があります。端末の仕様へのリンクを提供するのに役立つかもしれないので、他の人が予期しているデータを知ることがあります –

+0

ありがとうございます。私はDelphi Tokyoを使用しています。コードを投稿してください。 – Chris

+0

'string'は、文字列(文字列を構成する)を保持するように設計されています。文字を保持していない場合は、文字列を使用しないでください。 Byteの配列を使用します。明らかに、文字列を使用していないのは、 'Chr(0)'と2つのChr(6)値を含む1バイトの値を使用したためです。バイナリデータを保持するために文字列を使用しないで、代わりに適切なバイト配列を使用してください。文字列はバイナリデータではなく文字値の配列用です。違いを学ぶ。間違ったツールなので、あなたの植物に水を運ぶためにパスタストレーナーを使用しないでください。したがって、バイナリデータを保持しようとする文字列を使用しています。 –

答えて

0

あなたはidTcpClient.IOHandler.WriteDirectまたはidTcpClient.IOHandler.Write手順を使用しようとすることができます。

procedure TForm1.Button1Click(Sender: TObject); var wBuf : TIdBytes; begin ... SetLength(wBuf, 5); wBuf[1] := $06; wBuf[2] := $00; wBuf[3] := $06; wBuf[4] := $D1; wBuf[5] := $FF; ... if (IdTCPClient.Connected) then begin try idTcpClient.IOHandler.WriteDirect(wBuf); except on e: exception do begin showmessage('Error :'+ e.message) end; end; end; ... end;

+0

ねえ、それは素晴らしいです、私は私の端末装置に反応を得ます。どうもありがとうございました!しかし正しいバイトオーダーについて理解できるガイドがありますか?私は本当にデバイスに現金値を転送することはできません。 – Chris

+0

申し訳ありませんが、端末ではなく別の端末を使用しています。私はそれをどのように使うことができるかを示してみようとしていますが、この端末はわかりません。私はあなたのコードを使用しました:-) "lSBefehl:= Chr(6)+ ..." – Tamas

+0

私はzvtプロトコルはいつも同じだと思いますか?端末にデータが表示されない。 zvtのテストツールを使用するとデータを転送できます。シリアルSiffingツールを使用して、バイトの順序を取得しようとしましたが、アプリケーションでこのバイトの順序を取っていましたが、機能しませんでした。何か案は? – Chris

0

公式ZVTのドキュメントでは、端末に送信し、端末から受信したバイト数のバイトを含むトレースファイルのセットがあります。独自のZVT実装を開発する際に役立つことがわかりました。

関連する問題