Einzelnen Beitrag anzeigen

blackmice

Registriert seit: 24. Okt 2007
Ort: Niederkrüchten
28 Beiträge
 
Delphi 5 Standard
 
#3

Re: Readfile liefert TRUE aber 0 BytesTransferred

  Alt 15. Nov 2007, 11:05
Ok, also dann hier mal ein bischen mehr Code. Ich versuche damit Hardware auszulesen. Diese Hardware ist im Entwicklungsstadium, aber ich kann nicht beeinflussen, was ich bekomme. Ich muss nur weiterverarbeiten, was dann kommt.

Delphi-Quellcode:
//==============================================================================
// Diese Funktion schreibt über die Serielle Schnittstelle
//==============================================================================
function WriteSeri(Buffer: pchar; wlaenge: DWord):Integer;
var
  BytesTransferred: DWord;
begin
  WriteFile(Seri, Buffer^, wlaenge, BytesTransferred, nil);
  WriteSeri:=BytesTransferred;
end;

//==============================================================================
// Diese Funktion liest die Serielle Schnittstelle aus
//==============================================================================
function ReadSeri(Buffer: pchar; rlaenge: DWord): Integer;
var
  BytesTransferred: DWord;
  test : boolean;
  lasterr : dWord;
begin
  test := ReadFile(Seri, Buffer^, rlaenge, BytesTransferred, nil);
  ReadSeri:=BytesTransferred;

end;

//==============================================================================
// Diese Funktion öffnet die Serielle Schnittstelle
//==============================================================================
procedure OpenSeri;
var CommTimeOut : TCOMMTIMEOUTS;
    Status : Boolean;
    CommBuffer : Integer;
    DCBdaten : TDCB;

begin
  if Seri<>0 then exit;
  Seri := CreateFile('Com1', GENERIC_WRITE or GENERIC_READ, 0, nil, OPEN_EXISTING, 0, 0);
  if Seri = INVALID_HANDLE_VALUE then
  begin
     Form1.StatusBar1.Simpletext:='Error opening COM';
    Seri := 0;
    exit;
  end;

      ...... // Hier sind noch ein paar Einstellungen, aber die sind für den Programmablauf nicht wirklich wichtig

  Form1.StatusBar1.Simpletext:= 'RS232 at COM1 ready!';
end;

//==============================================================================
// Testfunktion
//==============================================================================
procedure TForm1.Button2Click(Sender: TObject);
var buf : array [0..12] of Char;
    ack : array [0..12] of Char;
    i,a : Integer;
    itest : integer;
    ihelp : integer;
begin

  OpenSeri;
  // String zum Schreiben zusammenstellen
  buf[0] := Chr(7);
  buf[1] := Chr(0);
  buf[2] := Chr(0);
  buf[3] := Chr(0);
  buf[4] := Chr(0);
  buf[5] := Chr(0);
  buf[6] := Chr(0);
  buf[7] := Chr(0);
  buf[8] := Chr(0);
  buf[9] := Chr(0);
  buf[10] := Chr(0);
  buf[11] := Chr(0);
  buf[12] := Chr(0);
  itest := writeSeri(buf, 13);
  form1.ListBox1.items.add('Bytes transferred: ' + IntToStr(itest) + ' Seri: ' + IntToStr(SERI));
  itest := readSeri(ack,13);
  form1.ListBox1.items.add('Bytes received: ' + IntToStr(itest) + ' Seri: ' + IntToStr(SERI));
  if itest > 0 then
  begin
    .....
  end;
end;
Und ich habe den kompletten Source durchgebuggt. Schreiben klappt einwandfrei und wenn ich über Terminal den gleichen Befehl wie über Delphi absetze, dann kommt auch ne Rückmeldung. Ich hab auch schon ein Terminal ans andere Ende der COM gesetzt und geguckt, ob das was Delphi sendet auch ok ist, und da gibt es dann auch keine Klagen.
Blackmice
Debuggers don't remove bugs, they only show them in slow-motion.
  Mit Zitat antworten Zitat