2017-08-02 24 views
0

我嘗試在delphi中創建一些代碼來實現zvt協議。爲了連接到終端,我使用了ether TIDTCPClient或turbopack的comport-component。兩者都可以連接到工程終端IPP480。它顯示一個文本行「a32de」2秒。我不知道爲什麼!在delphi和ingenico中使用ZVT IPP480

我可以發送zvt-documentation中描述的幾個命令行,但終端沒有顯示或執行任何操作。

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

非常感謝。我正在使用德爾福東京。你可以發表一段代碼嗎? – Chris

+0

「字符串」用於存放字符(組成字符串)。如果你不持有字符,不要使用字符串;使用一個Byte數組。顯然,你沒有使用字符串,因爲你已經使用了單字節值,包括'Chr(0)'和兩個Chr(6)值,所有這些值都是不可打印的。停止使用字符串來保存二進制數據,而是使用適當的字節數組。字符串用於字符值數組,而不是二進制數據。瞭解差異。你不使用麪食過濾器爲你的植物提供水,因爲它是錯誤的工具。所以使用一個字符串來嘗試保存二進制數據。 –

回答

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實施時很有用。