RS232 Hex senden



  • 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.


  • Mod

    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 schon 🕶

    mfg
    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 false

    ComboPortNum->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))));
    

  • Mod

    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.


  • Mod

    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.


  • Mod

    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.


  • Mod

    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.


  • Mod

    Hallo

    hast du dem ComPort auch geaeffnet ?
    (VaComm1->Open();)

    mfg
    Klaus



  • Mir mangelt es sicherlich an einigem, aber geöffnet hab ich ihn !

    Ich schau mich mal nach nem Monitor um, denn ich bekomm als Reply ein empty Signal, aber der Stick blinkt, er arbeitet also. Beim erneuten Öffnen kommen auch wirre Zeichen.


Anmelden zum Antworten