Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Mehrere Bytes in Comport schreiben (https://www.delphipraxis.net/99470-mehrere-bytes-comport-schreiben.html)

Adrian112 12. Sep 2007 16:20


Mehrere Bytes in Comport schreiben
 
Hallo,

ich bastle grad wieder mal an meinem 'Wunschproject' (Das will ich schon seit bestimmt 2 Jahren proggrammieren, nur bisher hat mir das nötige Grundlagenwissen gefehlt :oops: ) der NXTComander. Mit ihm soll man einen Lego NXT Roboter fernsteuern können. Im Bluetooth SDK für Mindsorms NXT Roboter steht, dass man beispielweise um die Firmware Version zu erhalten 4 Bytes senden muss. Dann ist noch aufgeführt, was diese 4 Bytes enthalten sollen.
Nur Wie kann ich 4 Bytes auf einmal in den Comport schreiben?
Ich verwende die Komponente TComPort.

Reinhard Kern 13. Sep 2007 06:09

Re: Mehrere Bytes in Comport schreiben
 
Zitat:

Zitat von Adrian112
Hallo,

ich bastle grad wieder mal an meinem 'Wunschproject' (Das will ich schon seit bestimmt 2 Jahren proggrammieren, nur bisher hat mir das nötige Grundlagenwissen gefehlt :oops: ) der NXTComander. Mit ihm soll man einen Lego NXT Roboter fernsteuern können. Im Bluetooth SDK für Mindsorms NXT Roboter steht, dass man beispielweise um die Firmware Version zu erhalten 4 Bytes senden muss. Dann ist noch aufgeführt, was diese 4 Bytes enthalten sollen.
Nur Wie kann ich 4 Bytes auf einmal in den Comport schreiben?
Ich verwende die Komponente TComPort.

Hallo,

SendString statt SendByte - das Schreiben von Strings (nullterminiert im C-Stil, in Pascal also PChar) ist bei Comports der Normalfall.

Gruss Reinhard

angos 13. Sep 2007 07:25

Re: Mehrere Bytes in Comport schreiben
 
Hi Adrian,

das dürfte so auch funktionieren. An die Funktion übergibst du einfach deinen Befehl als string ;)

Delphi-Quellcode:
procedure SendeBefehl(sBefehl: String[255]);
var
 aBuff: Array[0..255] of Char;
 i, Laenge: Integer;
begin
  Laenge := Length(sBefehl);
  for i := 1 to Laenge do aBuff[i-1] := sBefehl[i];
  ComportMain.Write(aBuff, Length(sBefehl));
end;

Gruß

Adrian112 14. Sep 2007 11:58

Re: Mehrere Bytes in Comport schreiben
 
Ich hab es jetzt so probiert:

Delphi-Quellcode:
Comport.WriteStr(PChar('0x00 0x00 TestProg')); // Diese Bytefolge, soll das Programm TestProg auf dem NXT starten
oder

Delphi-Quellcode:
Comport.WriteStr('0x00 0x00 TestProg');
oder

Delphi-Quellcode:
Comport.Write('0x00 0x00 TestProg');
oder

Delphi-Quellcode:
Comport.Write(PChar('0x00 0x00 TestProg'));
Keines dieser Beispiele hat funktioniert. Ich konnte zwar alle ohne Fehlermeldung kompilieren, doch wenn ich dann auf meinen Button klickte, passierte rein garnichts. Man sah zwar, dass etwas gesendet wurde (das Lämpchen am Bluetoothstick blinkte schneller), aber der Roboter reagierte nicht. Also muss ja irgendetwas mit den Beispielen nicht stimmen. Also wie kann ich Bytes keine Strings in den Comport schreiben? (Das Conected vom TComPort steht auf True)

angos 14. Sep 2007 13:11

Re: Mehrere Bytes in Comport schreiben
 
Hallo Adrian,

hast du meine Idee versucht?

[edit]... ich glaub ich weis wo dein Fehler liegt ;)

mit 0x00 ist wahrscheinlich keine Zeichenkette sondern das Zeichen Hex 00 gemeint. Das ganze kannst du dann so lösen:

Delphi-Quellcode:
procedure SendeBefehl;
var
  aBuff: Array[0..255] of Char;
begin
  aBuff[0] := CHR($00);
  aBuff[1] := CHR($00);
  aBuff[2] := ' ';
  aBuff[3] := 'T';
  aBuff[4] := 'e';
  aBuff[5] := 's';
  aBuff[6] := 't';
  aBuff[7] := 'p';
  aBuff[8] := 'r';
  aBuff[9] := 'o';
  aBuff[10] := 'g';

  ComportMain.Write(aBuff, 11);
end;
und damit du das nicht für jeden Befehl soo umständlich machen musst nutzt du meine Funktion von oben, dann sieht das ganze nur noch so aus:
Delphi-Quellcode:
SendeBefehl(CHR($00) + CHR($00) + ' Testprog');
[/Edit ende] [edit 2] humbug entfernt[/edit 2]

Gruß

Adrian112 15. Sep 2007 12:46

Re: Mehrere Bytes in Comport schreiben
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habs jetzt mal probiert, doch sobald ich auf meinen Senden Button Clicke, kommen folgende Fehlermeldungen (siehe Anhang).
Woran liegt dass, oder wie kann ich es umgehen?

Muetze1 15. Sep 2007 17:49

Re: Mehrere Bytes in Comport schreiben
 
WinAPI Fehlercode 6: ERROR_INVALID_HANDLE

Der COM Port wurde nicht geöffnet oder das Öffnen ist fehlgeschlagen. Schonmal bei der Komponente Bescheid gegeben, dass sie den Port nach deinen Einstellungen (Baud, Bit/Byte, Parity, Flusskontrolle, etc) öffnen soll?

Adrian112 17. Sep 2007 12:14

Re: Mehrere Bytes in Comport schreiben
 
Nein, doch als ich es am nächsten Tag wieder probierte, klappte das schreiben in den Comport einwandfrei. (Warum nur? :gruebel: )
Im Bluetooth Manager sieht man auch, dass die entsprechende Anzahl Bytes in den Comport geschrieben wird.
Laut Bluetooth NXT SDK, müsste man einen String so in den Comport schreiben:
Zitat:

MESSAGEWRITE

Byte 0: 0x00 or 0x80
Byte 1: 0x09
Byte 2: Inbox number(0 - 9)
Byte 3: Message size
Byte 4 - N: Message Data, where N = Message size + 3

Message Data is treated as a string; it must include null termination to be accepted. Accordingly,
Message size must include the null termination Byte.
müsste das also so ausehen:

Byte 0 = 0x00 / $00
Byte 1 = 0x09 / $09
Byte 2 = 1 / $1
Byte 3 = 5 / $5
Byte 4 = ???
...

Ich verstehe die erklärung im Bluetooth SDK nicht richtig. Also die Message mus ein string sein und das Null termination Byte haben. Aber was bedeutet das:
Zitat:

Byte 4 - N: Message Data, where N = Message size + 3
@ Edit: Und wie sieht ein String mit Null Termination Byte aus?

messie 17. Sep 2007 12:26

Re: Mehrere Bytes in Comport schreiben
 
Zitat:

Zitat von Adrian112
Und wie sieht ein String mit Null Termination Byte aus?

Delphi-Quellcode:
PChar(String) //Nullterminierter String
Grüße, Messie

Adrian112 17. Sep 2007 12:28

Re: Mehrere Bytes in Comport schreiben
 
Aha! Danke


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:07 Uhr.
Seite 1 von 2  1 2      

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