2013-09-21 3 views
0

Это мой первый раз, когда я использую boost, и я уверен, что есть что-то простое, что мне не хватает. Я пытаюсь отправить 3 байта данных через последовательный порт. Эти три байта:Неожиданные результаты с Boost SerialPort

день = 2; month = 1; год = 13;

Со следующим кодом отправляется только первый байт.

io_service Link; 
serial_port serial(Link); 
serial.open("/dev/ttyUSB0"); 
if(serial.is_open()) 
{ 
    qDebug() <<"open"; 
    serial.set_option(serial_port_base::baud_rate(9600)); 
    //send data 
    boost::array<int,3> array ={{day,month,year}}; 
    qDebug()<<serial.write_some(boost::asio::buffer(array,3)); 
    serial.close(); 
} 

Устройство, которое я отправляю в отчеты, возвращает мне (в шестнадцатеричном виде) значения, которые он получает. Он получает значения 0x02,0x00,0x00. Теперь донастроить код, так что я могу получить все три байта, посланные на устройство:

io_service Link; 
serial_port serial(Link); 
serial.open("/dev/ttyUSB0"); 
if(serial.is_open()) 
{ 
    qDebug() <<"open"; 
    serial.set_option(serial_port_base::baud_rate(9600)); 
    //send data 
    boost::array<int,1> array ={{day}}; 
    qDebug()<<serial.write_some(boost::asio::buffer(array,1)); 
    array={{month}}; 
    qDebug()<<serial.write_some(boost::asio::buffer(array,1)); 
    array={{year}}; 
    qDebug()<<serial.write_some(boost::asio::buffer(array,1)); 
    serial.close(); 
} 

Устройство Читает: 0x02,0x01,0x0D. Это очень неправильно, и я хотел бы правильно использовать эти библиотеки. Я подозреваю, что я не правильно использую классы буфера и массива boost, но я действительно не знаю. Есть идеи?

+0

Определить «чувствует себя очень неправильно»? –

+0

Передача массива с одним значением три раза, кажется, приводит к тому, что массив имеет массив. Почему массив не может содержать все три элемента и отправляться один раз? Если я делаю это правильно, я был бы рад стереть вопрос. – CountMurphy

ответ

1

Вы никогда не создали структуру данных, содержащую три байта , которые вы хотели отправить. Вы создали только структуру данных, содержащую три значения , которые вы хотели отправить. Ни в коем случае вы не конвертировали эти значения из формата, в котором ваш компьютер хранит их в формате проводов, в котором они должны были быть отправлены. Поэтому, если бы ваш код действительно работал, это было бы совершенно случайно.

Конечно, ваш компьютер не хранит целые числа в виде одиночных байтов. Если бы это было так, как вы могли бы представить 300? Так что это не сработает.

boost::array<int,3> array ={{day,month,year}}; 
qDebug()<<serial.write_some(boost::asio::buffer(array,3)); 

Первая строка создает структуру данных, содержащую три значения вы хотите отправить. Вторая строка посылает эти значения as-is, не превращая их в точный поток байтов, который должен быть отправлен по проводу.

Если вы ожидаете, что определенный поток байтов будет отправлен на последовательный порт, где-то ваш код должен составить точный поток байтов и отправить его.

+0

«Итак, если ваш код действительно работает, это было бы совершенно случайно» Хех, это звучит правильно. Я собираюсь немного изменить код, чтобы изучить это дальше. Спасибо. – CountMurphy

Смежные вопросы