Hallo!
Ich habe vor Jahren mich mit Delphi in der Schule beschäftigt. Bin leider mittlerweile leicht aus der Übung.
Nichts destotrotz soll ich ein Projekt umsetzen. Es sollen Daten an die Serielle Schnittstelle geschrieben und auch ausgelesen werden. Damit soll man ein Netzteil einstellen können.
Die Schnittstellenparameter vom Netzteil sind:
Baudrate: 57600 baud
Datenbits: 8
Parity: keine
Protokoll: <STX>/<ETX>
Mit meinem Code kommt nur unverständliche Zeichen zurück (
Rot ist der gesendete Befehl):
OUT:UOUTS??t?ÝÀý
OUT:UOUTS??@õÁð
Prinzibiell scheint der Code OK zu sein. Wenn ich ein embeded System (Soekris) anschließe kommen lesbare Zeichen zurück.
Hier nun der Code
Delphi-Quellcode:
procedure TMainForm.cpDrvReceiveData(Sender: TObject; DataPtr: Pointer;
DataSize: Cardinal);
var iLastLine, i: integer;
s, ss: string;
begin
// Convert incoming data into a string
s := StringOfChar( ' ', DataSize );
move( DataPtr^, pchar(s)^, DataSize );
// Exit if s is empty. This usually occurs when one or more NULL characters
// (chr(0)) are received.
while pos( #0, s ) > 0 do
delete( s, pos( #0, s ), 1 );
if s = '' then
exit;
// Remove line feeds
i := pos( #10, s );
while i <> 0 do
begin
delete( s, i, 1 );
i := pos( #10, s );
end;
// Don't redraw the rich edit control until we finished updating it
//IncomingRichEdit.Lines.BeginUpdate;
// Get last line index
iLastLine := Console.ConsoleOutput.Lines.Count-1;
// If the rich edit is empty...
if iLastLine = -1 then
begin
// Remove line feeds from the string
i := pos( #10, s );
while i <> 0 do
begin
delete( s, i, 1 );
i := pos( #10, s );
end;
// Remove carriage returns from the string (break lines)
i := pos( #13, s );
while i <> 0 do
begin
ss := copy( s, 1, i-1 );
delete( s, 1, i );
Console.ConsoleOutput.Lines.Append( ss );
i := pos( #13, s );
end;
Console.ConsoleOutput.Lines.Append( s );
end
else
begin
// String to add is : last line added + new one
s := Console.ConsoleOutput.Lines[iLastLine] + s;
// Remove carriage returns (break lines)
i := pos( #13, s );
while i <> 0 do
begin
ss := copy( s, 1, i-1 );
delete( s, 1, i );
if iLastLine <> -1 then
begin
Console.ConsoleOutput.Lines[iLastLine] := ss;
iLastLine := -1;
end
else
Console.ConsoleOutput.Lines.Append( ss );
i := pos( #13, s );
end;
if iLastLine <> -1 then
Console.ConsoleOutput.Lines[iLastLine] := s
else
Console.ConsoleOutput.Lines.Append( s );
end;
//IncomingRichEdit.Lines.EndUpdate;
// Scroll incoming text rich edit
SendMessage( Console.ConsoleOutput.Handle, EM_SCROLLCARET, 0, 0 );
end;
Bitte bitte helft mir!
Grüße!