Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Einzelnes BYTE über RS232 senden (https://www.delphipraxis.net/159004-einzelnes-byte-ueber-rs232-senden.html)

schwa226 10. Mär 2011 17:53

Einzelnes BYTE über RS232 senden
 
Hallo!

Ich habe diese 2 Funktionen um ein Byte über die RS232 zu senden und zu empfangen:

Delphi-Quellcode:
function TComport.SendByte(const Buffer : Byte) : Boolean;
var BytesWritten: Cardinal;
begin
  Result := False;
  tb := Buffer;
  if (fHandle <> INVALID_HANDLE_VALUE) then
  begin
    WriteFile(fHandle, Buffer, 1, BytesWritten, NIL);
    Result := BytesWritten = 1;
  end;
end;

function TComPort.ReadByte(var Output : Byte): Boolean;
var Dat: Byte;
    BytesRead: Cardinal;
begin
 Output := 0;
 if (fHandle <> INVALID_HANDLE_VALUE) then
 begin
   ReadFile(fHandle,Output,1,BytesRead,NIL);
   Result := BytesRead = 1;
 end;
end;
Ich habe mit aus der TComPort diese Sachen rausgesucht, da ich nicht alles brauche und auch nicht extra eine Komponente dafür verwenden will.
http://sourceforge.net/projects/comport/

Nun geht das schon recht gut.
Aber es geht nicht wenn ich Buffer = 0 senden will.

Mit OutputDebugString sehe ich, dass eine 0 gesendet werden soll. Das Echo der RS232 gibt mir aber $FE zurück. Es muss aber eine 0 zurückkommen.
Fehlt mir da noch was im setzten der Parameter der RS232 oder ist es was anderes?

Eine andere Testanwendung in VC++ sendet eine 0 und bekommt auch eine 0 zurück.
Auch das lesen mit ReadFile hat keine Probleme eine 0 zu lesen. Es muss also etwas mit dem WriteFile zu tun haben.

Reinhard Kern 10. Mär 2011 18:23

AW: Einzelnes BYTE über RS232 senden
 
Zitat:

Zitat von schwa226 (Beitrag 1087413)
Hallo!

Auch das lesen mit ReadFile hat keine Probleme eine 0 zu lesen. Es muss also etwas mit dem WriteFile zu tun haben.

Hallo,

das ist eine passende Gelegenheit, das Ergebnis von WriteFile (Error oder nicht, welcher?) auszuwerten. Und wenn passendes Equipment vorhanden ist, würde ich einfach mal nachschauen, was tatsächlich über die Leitung geht.

Gruss Reinhard

schwa226 10. Mär 2011 18:59

AW: Einzelnes BYTE über RS232 senden
 
Also GetLastError bleibt immer auf 0.
Egal ob ReadFile oder WriteFile.
Auch ist das Ergebnis immer True (also OK)

Es handlet sich um einen VCP (Virtual COM Port). Muss mal nachsehen ob man den Softwaremässig Sniffen kann.

EDIT:
Habe nun einen Sniffer gefunden der unter Win7 x64 läuft:
http://www.aggsoft.com/

Damit habe ich rausgefunden, dass mit dem VC++ Programm Parity Even verwendet wird.
Ich hatte None... Mit Even bekomme ich nun die gleiche Antwort!


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:37 Uhr.

Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf