2008-11-06 27 views
14

Así que he estado tratando de aprender cosas de boost :: asio para comunicarme con un dispositivo serie usando RS232. La documentación es escasa y los ejemplos son inexistentes. No se puede averiguar exactamente cómo comunicarse con el dispositivo. El dispositivo no puede enviar datos, por lo que todo lo que tengo que hacer es escribir, pero otros proyectos requieren una comunicación real de ida y vuelta, por lo que se agradecerá su ayuda. ¿Qué código tengo hasta ahora?Boost Asio serial_port - necesito ayuda con 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; 
} 

En resumen: necesito ayuda con la parte io del puerto serial.

Respuesta

16

Además de la velocidad en baudios, también puede necesitar establecer otras opciones como: character_size, flow_control, parity y stop_bits. Para escribir los datos en el puerto serie se puede hacer lo siguiente:

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

El bibliotecas aceptación de tipos de tampón es muy flexible y es posible que desee leer más sobre este tema aquí: Buffers.

+0

Gracias, fue sobre todo abrumado con la cantidad de opciones y necesitaba un lugar para comenzar. Tuve suerte porque los valores predeterminados para todo excepto por la velocidad en baudios son los que usa la placa. –

15

Gracias a la ayuda de aquí y de otros lugares lo conseguí trabajando. Escribió un pequeño programa que podría ayudar a algunas personas a descubrir el impulso del puerto serie también.

boostserialportdemo.cpp

+1

la versión de Linux de su demostración debe usar/dev/ttyS2. Los dispositivos Linux usan la numeración 0 –

+0

Estoy recibiendo 404 en esa página. ¿Te importaría subirlo a otro lado? Gracias. –

+2

@TomA Link está funcionando, debe haber sido una interrupción temporal. –

0

Si se preguntan por qué su ejemplo da un error de compilación, el cambio CSIZE a C_SIZE en ambas líneas. Este es probablemente el único buen ejemplo de programa en la web.
Thanks.