libserial rs232 Probleme



  • Hallo, versuche gerade mit der libserial Daten über rs232 zu empfangen.
    Folgender code:

    ...
    ...
    #include <SerialStream.h>
    using namespace LibSerial ;
    SerialStream rs232 ;
    ...
    ...
    // Port öffnen
    void plot232Dialog::OnOpen(wxCommandEvent& event)
    {
    
        rs232.Open( "/dev/ttyUSB0" );
        rs232.SetBaudRate( SerialStreamBuf::BAUD_115200 );
        rs232.SetCharSize( SerialStreamBuf::CHAR_SIZE_8 );
        rs232.SetNumOfStopBits(1);
        rs232.SetParity( SerialStreamBuf::PARITY_ODD );
        rs232.SetFlowControl( SerialStreamBuf::FLOW_CONTROL_HARD );
        StaticText1->SetLabel(_("port open"));
    
    }
    ...
    ...
    // port schliessen
    void plot232Dialog::OnClose(wxCommandEvent& event)
    {
        rs232.Close();
    }
    ...
    ...
    // zum testen ein byte lesen.. 
    void plot232Dialog::OnTest(wxCommandEvent& event)
    {
    
        char next_char;
        rs232.get(next_char);
        wxString str;
        str<<next_char;
        StaticText1->SetLabel(str);
    }
    

    wenn ich jetzt den Port öffne scheint er irgdnwie offen zu sein,
    zumindest ist er danach blockiert 😕 wenn ich ihn wieder schliesse
    rs232.close() ist er trotzdem noch blockiert...
    und beim Lesen kommt immer nur 0 raus.
    Muss gerade jedes mal neustarten, weil nachdem ich den Port einmal geöffnet habe gibt es einen input/output error..



  • Probier das Programm mal als root aus, schätze du hast nicht die entsprechenden Rechte.



  • habe ich schon gemacht, ändert aber nichts 😞
    irgdnwie scheint die libserial nicht so super zu sein.. gibt es denn noch alternative serielle Bibliotheken??



  • Ok, bin etwas weiter und verwirrt.

    Wo ist denn der Unterschied zwischen diesen beiden codes? (bis auf die Buttonverteilung?

    using namespace std;
    using namespace LibSerial;
    
    SerialStream rs232;
    ...
    ...
    // OPEN PORT
    void plot232V1_1Dialog::OnOpen(wxCommandEvent& event)
    {
        rs232.Open( "/dev/ttyUSB0") ;
        rs232.SetBaudRate( SerialStreamBuf::BAUD_9600 ) ;
        rs232.SetCharSize( SerialStreamBuf::CHAR_SIZE_8 ) ;
        rs232.SetFlowControl( SerialStreamBuf::FLOW_CONTROL_NONE ) ;
        rs232.SetParity( SerialStreamBuf::PARITY_NONE ) ;
        rs232.SetNumOfStopBits(1) ;
        rs232.SetVTime(1);
        rs232.SetVMin(100);
    }
    // CLOSE PORT
    void plot232V1_1Dialog::OnClosePort(wxCommandEvent& event)
    {
         rs232.Close();
    }
    // READ TXT
    void plot232V1_1Dialog::OnButton4Click(wxCommandEvent& event)
    {
    char next_char[100];
        // READ
        rs232.read(next_char,100);
        wxString str(next_char,wxConvUTF8);
           StaticText1->SetLabel(str);
    
        Layout();
    }
    
    using namespace std;
    using namespace LibSerial;
    
    SerialStream rs232;
    ...
    ...
    // OPEN PORT
    void plot232V1_1Dialog::OnOpen(wxCommandEvent& event)
    {
    
        rs232.Open( "/dev/ttyUSB0") ;
        rs232.SetBaudRate( SerialStreamBuf::BAUD_9600 ) ;
        rs232.SetCharSize( SerialStreamBuf::CHAR_SIZE_8 ) ;
        rs232.SetFlowControl( SerialStreamBuf::FLOW_CONTROL_NONE ) ;
        rs232.SetParity( SerialStreamBuf::PARITY_NONE ) ;
        rs232.SetNumOfStopBits(1) ;
        rs232.SetVTime(1);
        rs232.SetVMin(100);
        char next_char[100];
        // READ
        rs232.read(next_char,100);
        wxString str(next_char,wxConvUTF8);
        StaticText1->SetLabel(str);
        Layout();
        rs232.Close();
    }
    

    Ist genau der selbe code, nur einmal auf 3 Buttons verteilt (öffnen,lesen,schliessen) und einmal alles in einem Button.
    Wenn alles in einem Button ist läuft es ohnen Probleme, bei der verteilten Version ist hinterher immer die Schnittstelle tot -> geht nur ganz kurz.
    Kann das was mit nem timeout zu tun haben? Oder sonst jemand eine Idee??

    Danke schon mal


Anmelden zum Antworten