comport/serial: kann öffnen aber nicht senden oder emfpangen?!



  • Hallo Leute

    Ich hab mit der Klasse die ich hier gefunden habe
    Serielle Daten
    in mein Prog einzubinden.
    Ich brauche folgende Eintstellungen

    baudrate: 9600
    Data Len: 8 Bit
    Stop Parity: 1 Bit
    Parity: None
    Protocol: XON_XOFF

    soweit so gut. (Mit Hyperterminal getestet klappt prima!)

    ich hab alles auch schön einbinden können in mein prog... aber

    CSERIELL port;
    
    [...]
    
    // TODO: code your application's behavior here.
    //CSERIELL::Init(int iPort, int iBaud, int iSize, int iParity, int stopbit, int fRtsControl, int iTimeout, int iTotalTimeout)
    
    getch();
    port.Init(2,9600,8,0,1,1,0,0);
    
    //Send(void *puffer, unsigned int len)
    //port.Send("mka?",4);
    
    getch();
    port.Close();
    

    Ich sehe auf meine Port Analyzer dass zwar der Comport 2 geöffnet wird (und sich auch wieder schliesst), aber weder kann ich daten senden noch empfangen.

    Ich versteh' das nicht so ganz. Das Endgerät macht auch keine Reaktion. Im Hyperterminal konnte ich alles verfizieren (mit den oben genannten Einstllungen), also müsste gehen.

    Ich um Tipps oder Ratschläge ziemlich dankbar...

    Danke!



  • Wenn es mit dem Hyperterminal klappt und mit dem Gerät nicht, dann stimmen die Einstellungen nicht (Gerät hat andere) oder Du sendest falsche Befehle an das Gerät.



  • Also mit dem Gerät und dem Hyperterminal klappt alles prima. Und die selbe Befehle versuche ich nun über CSERIAL Klasse zu senden. Aber irgendwie funktioniert das nicht und seh' nicht warum.

    😕 😕 😕 ????



  • Und mit deinem Programm und dem Hyperterminal auch ?



  • stop. ich glaube wir reden sonst aneinander vorbei.
    also cih hab zwei szenarien.

    1. hypterterminal - Gerät (!)
      -> Einstellunge wie oben 9600b,8,one stopbit, no parity,xonxoff.
      -> alles getest. Komminkation klappt prima: Empfangen und Senden!

    2. MFC App mit der CSERIAL Klasse - Gerät
      -> die selben Einstellungen.
      -> Gerät reagiert überhaupt nicht! (Partanalyzer meldet aber dass der Comport geöffnet wird)! Gerät spring nicht remote modus, scheint somit keine befehle zu erhalten, welche die selben waren wie beim ersten Szenario.

    Ich hoffe, ich hab den Port richtig initlaiisert in der App. Zumindest hab ich die Funktion so verstanden.

    Ich kann mir irgendwie so keine wirklich reim darauf machen, besonders weil mein PortMonitoring zeigt das sich da eindeutig was tut, aber es geschieht nicht.

    Umgebung V C++ 7, Win 2000 Sp3. Und die Einstellunge wegen der übertragungen sollten so sein wie oben beschreiben... oder ist vielleicht die klasse nicht so angebracht?!

    keine ahnung?! 😕



  • ...oder kennt eventuell jemand eine klasse, die besser/geeigneter/komfortabler zum arbeiten ist? 😕 😕 😕



  • sende einfach an das hyperterminal und wenn nichts erscheind hast du ein bug in deinem quellcode 😉



  • yip das meinte ich ja schon die ganze Zeit nur ich finden den Bug im Quellcode nicht.

    Also ich sende (mit den oben genannten Eintsellung) folgende Zeile an das Gerät
    "mka?", was mit dem Hyperterminal klappt. Nutzer ich die selbe Zeit in dem Quellcode (ebefalls am Anfang gepostet) dann klappts nicht. Ist dort irgendetwas anders bzgl. der Einstellung oder Initialisierung? 😞 😞



  • teste mal

    port.Send("mka?",5);

    port.Send("mka?\n",5);

    port.Send("mka?\n",6);



  • GEIL!!!!!
    newline war's! Keine Ahnung warum. Ich hab das selbe wie bei der GPIB Implementation getan, dort brauchte ich das "\n" nicht. Mein Gott warum bin ich nicht früher darauf gekommen!

    Supervielen DANK!!!!! 😃

    p.s. hat das was mit dem spollbyte zu tun?!



  • Frage:

    warum geht es nur mit dieser Eintsellung

    port.Send("MKA?\n",5);

    nicht aber mit
    port.Send("MKA?\n",6); oder
    port.Send("MKA?\n",4); ???

    Ich teils strings deren länge ich nicht vorher absehen kann, sprich bei programmieren, weil die mit zahlen zusammengesetzt werden. Muss ich das jetzt jedesmal beim senden des Befehls auslesen?

    Danke!


Anmelden zum Antworten