RS232 Hex senden
-
buffer[0]
ist vom Datentypchar
,IntToHex
liefert einenAnsiString
zurück. Klingelt da was?
-
Wie deklariere ich einen Hex-Wert ?
char c = 0x56;
-
So soll es gehen:
var b: byte; Vacomm.WriteBuf(b,1);
Hier kommt nix an. Was ich auch nicht verstehe - mit dem anderen Programm hab ich das ohne 0x davor übergeben, da lief das.
Also muss ich irgendwie als Hex 56000000 übergeben. Und da komm ich nicht weiter.char buffer[4]; buffer[0] = 0x56; buffer[1] = 0x00; buffer[2] = 0x00; buffer[3] = 0x00; Ok = VaComm1->WriteBuf(buffer, 4);
-
Du scheinst nicht verstanden zu haben, dass du ein textbasiertes Protokoll hast. Du musst deine Binärdaten als 2-stellige Hexzahlen formatieren, aneinanderhängen und das Resultat verschicken.
-
Kannst mir da bitte nen Tip geben. Ich hab alles mögliche versucht, komm aber nicht klar.
-
Hallo
wenn es Textbas. ist.
dann moeglicherweise so
char buffer[4]; buffer[0] = '5'; buffer[1] = '6'; buffer[2] = '0'; usw..
gibst sicher bessere Loesungen
aber die findest du dann schonmfg
Klaus
-
Bei mir haut das alles nicht hin. Ich hab jetzt noch ne Stunde zum Probieren und wenn nicht hau ich das Morgen früh ins Projektforum, dann findet sich vielleicht gegen Bezahlung jemand der mit dem TeamViewer einen Blick drauf wirft.
-
Auch wenn´s weh tut:
Die Aufgabe ist so trivial, wenn du daran scheiterst fehlen dir zu viele Grundlagen und du hast dich an der Aufgabe verhoben.
Das Forum gibt gern Hilfestellungen und Tipps zu konkreten Problemen. Alles, was du zu deiner Problemlösung benötigst, wurde hier bereits erwähnt. Programmieren hat wenig mit mit Probieren zu tun, du solltest schon wissen, was du tust.
-
OK, bevor das richtig Geld kostet können wir das doch mal probieren.
Poste bitte mal den Code, wo du die Verbindung aufbaust und die Daten verschickst.
Um zu gucken, was tatsächlich auf der Schnittstelle passiert kannst du Serial Monitor installieren.
-
Komponente:
Baudrate: br57600
Databits: db8
DeviceName: COM7
PortNum: 7
Stopbits: sb1
FlowControl:
ControlDtr: dtrDisabled
ControlRts: rtsHandshake
DsrSensitivity: False
OutCtsFlow: False
OutDsrFlow: False
TxContinueOnXoff: False
XonXoffIn: False
XonXoffCut: False
MonitorEvents
reCts: True, alles andere falseComboPortNum->ItemIndex = ComboPortNum->Items->IndexOf("7");
ComboBaudrate->ItemIndex = ComboBaudrate->Items->IndexOf("br57600");ComboDatabits->ItemIndex = ComboDatabits->Items->IndexOf("db8");
ComboParity->ItemIndex = ComboParity->Items->IndexOf("paNone");
ComboStopbits->ItemIndex = ComboStopbits->Items->IndexOf("sb1");
VaComm1->SetRTS(true);VaComm1->Open(); AnsiString S = ""; Boolean Ok; int i; char buffer[4]; buffer[0] = '0x76'; buffer[1] = '0x00'; buffer[2] = '0x0A'; buffer[3] = '0x00'; Ok = VaComm1->WriteBuf(buffer, 4); /* S = EditTransmit->Text; VaComm1->WriteText(sCode); i = S.Length(); */ if (!Ok) Memo1->Lines->Add("Error writing to: " + Format("Port %d", ARRAYOFCONST(((int)VaComm1->PortNum)))); else Memo1->Lines->Add(Format("Writing %d characters", ARRAYOFCONST(((int)i))));
-
Hallo
und das laesst sich uebersetzen ohne Fehler/Warnings ?
Mfg
Klaus
-
Jepp.
Aber stimmt - 2 Sachen hatte ich geändert - String S statt AnsiString und beim Senden (S) statt (sCode). Nachdem ich hier aber mit WriteBuf zgegriffen hab ist das nicht aufgefallen.
Basis von dem Ganzen ist die Demo der TMS Komponente.
-
Hallo
keine Warning W8071
mfg
Klaus
-
-
ok, ich passe das an.
char buffer[8];
buffer[0] = "0x7";
buffer[1] = "0x6";
...
buffer[7] = "0x0";Brachte nix, aber das andere war falsch.
-
immer noch falsch
wo ist der Fehler in
buffer[0] = "0x7";
sollte es nicht
buffer[0] = '7';
sein
mfg
Klaus
-
Hab ich doch auch schon gemacht. Ich glaub dass Einstellungen in der Komponente nicht stimmen.
-
Hallo
hast du mit SerialMon getestet was du sendest
(wie schon DocShoe gepostet hat)oder zeig mal was du bisher hast
Mfg
Klaus
-
Der Monitor funktioniert nicht. Vielleicht weil es über USB läuft ? Wird als Com-Port eingetragen.
Was ich bisher habe zeigen ?
Falls Du das Projekt meinst: www.gsd-radionik.de/TMSDemo.zip.
Falls Du Code meinst:char buffer[8]; buffer[0] = '7'; buffer[1] = '8'; buffer[2] = '0'; buffer[3] = '0'; buffer[4] = '0'; buffer[5] = 'a'; buffer[6] = '0'; buffer[7] = '0'; bool Ok = VaComm1->WriteBuf(buffer, 8);
Ich glaub ich gesteh mir einfach ein dass ich für diesen Bereich der Programmierung nicht gemacht bin und hau das auf MyHammer rein.
-
Was ist denn der Rückgabewert des Aufrufs?
Bietet die Komponente weitere Funktionen zur Fehlersuche?Edit:
Dein Aufruf in der Form// Beispieldaten unsigned char Data[8] = { 0x56, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00 }; bool Result = VAComm->WriteBuf( Data, 8 ); if( !Result ) { // gibt´s Möglichkeiten, an detaillierte Fehlerbeschreibungen zu kommen? // oder gibt´s tatsächlich nur ja/nein? }
sollte eigentlich richtig sein.