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 blockiertwenn 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