2008-11-06 6 views
14

Also habe ich versucht, die Boost :: Asio Sachen zu lernen, um mit einem seriellen Gerät über RS232 zu kommunizieren. Die Dokumentation ist spärlich und die Beispiele sind nicht existent. Kann nicht genau herausfinden, wie man mit dem Gerät kommuniziert. Das Gerät kann keine Daten senden, so dass ich nur schreiben muss, aber andere Projekte erfordern eine tatsächliche Kommunikation zwischen den beiden Seiten. Welcher Code ich bisher habe, folgt.Boost Asio serial_port - brauche Hilfe mit io

#include <boost/asio/serial_port.hpp> 
using namespace::boost::asio; 

int main() 
{ 
    io_service io; 
    serial_port port(io, "COM3"); 
    port.set_option(serial_port_base::baud_rate(19200)); 

    unsigned char commands[4] = { 1, 128, 240, 0 }; 

    // write the commands to the device 

    return 0; 
} 

Kurz gesagt: brauche Hilfe mit dem io Teil des serial_port.

Antwort

16

Zusätzlich zur Baudrate müssen Sie möglicherweise weitere Optionen wie character_size, flow_control, parity und stop_bits einstellen. Um Ihre Daten an die serielle Schnittstelle schreiben Sie folgendes tun:

boost::asio::write(port, boost::asio::buffer(commands, 4)); 

Die Bibliotheken Akzeptanz von Puffertypen ist sehr flexibel und Sie können weiterhin hier zu diesem Thema lesen möchten: Buffers.

+0

Danke, war meist mit der Anzahl der Optionen überwältigt und brauchte irgendwo um anzufangen. Ich habe Glück gehabt, weil die Standardwerte für alles außer der Baudrate das sind, was das Brett benutzt. –

15

Dank der Hilfe von hier und anderen Orten habe ich es funktioniert. Schrieb ein kleines Programm, das einigen Leuten helfen könnte, auch den Boost-Serial-Port-Kram herauszufinden.

boostserialportdemo.cpp

+1

Die Linux-Version Ihrer Demo sollte/dev/ttyS2 verwenden. Linux-Geräte verwenden 0-basierte Nummerierung –

+0

Ich bekomme 404 auf dieser Seite. Würde es dir etwas ausmachen, es woanders hochzuladen? Vielen Dank. –

+2

@TomA Link funktioniert, muss ein temporärer Ausfall gewesen sein. –

0

Wenn Sie sich fragen, warum sein Beispiel einen Compiler-Fehler gibt, ändern CSIZE auf beiden Leitungen C_SIZE. Dies ist wahrscheinlich das einzige gute Beispielprogramm im Internet.
Thanks.