AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Mehrere Bytes in Comport schreiben

Ein Thema von Adrian112 · begonnen am 12. Sep 2007 · letzter Beitrag vom 30. Okt 2009
Antwort Antwort
Seite 1 von 2  1 2      
Adrian112
(Gast)

n/a Beiträge
 
#1

Mehrere Bytes in Comport schreiben

  Alt 12. Sep 2007, 17:20
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 ) 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.
  Mit Zitat antworten Zitat
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#2

Re: Mehrere Bytes in Comport schreiben

  Alt 13. Sep 2007, 07:09
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
  Mit Zitat antworten Zitat
angos

Registriert seit: 26. Mai 2004
Ort: Rheine
549 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Mehrere Bytes in Comport schreiben

  Alt 13. Sep 2007, 08:25
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ß
Ansgar
  Mit Zitat antworten Zitat
Adrian112
(Gast)

n/a Beiträge
 
#4

Re: Mehrere Bytes in Comport schreiben

  Alt 14. Sep 2007, 12:58
Ich hab es jetzt so probiert:

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

Comport.WriteStr('0x00 0x00 TestProg'); oder

Comport.Write('0x00 0x00 TestProg'); oder

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)
  Mit Zitat antworten Zitat
angos

Registriert seit: 26. Mai 2004
Ort: Rheine
549 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Mehrere Bytes in Comport schreiben

  Alt 14. Sep 2007, 14:11
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:
SendeBefehl(CHR($00) + CHR($00) + ' Testprog'); [/Edit ende] [edit 2] humbug entfernt[/edit 2]

Gruß
Ansgar
  Mit Zitat antworten Zitat
Adrian112
(Gast)

n/a Beiträge
 
#6

Re: Mehrere Bytes in Comport schreiben

  Alt 15. Sep 2007, 13:46
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?
Angehängte Grafiken
Dateityp: jpg fehler1_689.jpg (303,9 KB, 31x aufgerufen)
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#7

Re: Mehrere Bytes in Comport schreiben

  Alt 15. Sep 2007, 18:49
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?
  Mit Zitat antworten Zitat
Adrian112
(Gast)

n/a Beiträge
 
#8

Re: Mehrere Bytes in Comport schreiben

  Alt 17. Sep 2007, 13:14
Nein, doch als ich es am nächsten Tag wieder probierte, klappte das schreiben in den Comport einwandfrei. (Warum nur? )
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?
  Mit Zitat antworten Zitat
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#9

Re: Mehrere Bytes in Comport schreiben

  Alt 17. Sep 2007, 13:26
Zitat von Adrian112:
Und wie sieht ein String mit Null Termination Byte aus?
PChar(String) //Nullterminierter String Grüße, Messie
  Mit Zitat antworten Zitat
Adrian112
(Gast)

n/a Beiträge
 
#10

Re: Mehrere Bytes in Comport schreiben

  Alt 17. Sep 2007, 13:28
Aha! Danke
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:13 Uhr.
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