2008-11-06 3 views
14

그래서 RS232를 사용하여 시리얼 장치와 통신하기 위해 boost :: asio 항목을 배우려고했습니다. 다큐멘터리는 드물고 예제는 존재하지 않습니다. 장치와 정확히 통신하는 방법을 알아낼 수 없습니다. 장치는 데이터를 전송할 수 없기 때문에 쓰기 만하면되지만 다른 프로젝트에서는 실제 통신을 필요로하므로 도움을 받으실 수 있습니다. 지금까지 내가 가지고있는 코드는 다음과 같습니다.부스트 Asio serial_port - 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; 
} 

요약하면 serial_port의 io 부분에 대한 도움이 필요합니다.

답변

16

전송 속도 외에도 character_size, flow_control, parity 및 stop_bits와 같은 다른 옵션을 설정해야 할 수도 있습니다. 버퍼 타입의

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

라이브러리의 수용은 매우 유연하고 여기에 그 주제에 더 읽을 수 있습니다 : 당신이 다음을 수행 할 수있는 시리얼 포트에 데이터를 기록 할 Buffers.

+0

감사합니다. 대부분 옵션으로 인해 압도 당했고 시작하기위한 곳이 필요했습니다. 보레이트 (baud rate)를 제외한 모든 것에 대한 디폴트 값은 보드가 사용하는 값이기 때문에 나는 운이났다. –

15

여기와 다른 곳에서 도움을 얻은 덕분에 나는 그것을 작동 시켰습니다. 어떤 사람들은 시리얼 포트를 향상시키는 데 도움이되는 작은 프로그램을 작성했습니다. 그의 예는 컴파일 오류를 제공 이유를 궁금해하는 경우

boostserialportdemo.cpp

+1

데모의 리눅스 버전은/dev/ttyS2를 사용해야합니다. 리눅스 장치는 0을 기준으로 번호 매기기를 사용합니다. –

+0

해당 페이지에서 404가 표시됩니다. 다른 곳으로 업로드 하시겠습니까? 감사. –

+2

@TomA Link가 작동 중이며 일시적으로 중단 된 상태 여야합니다. –

0

변경 CSIZE 두 라인에 C_SIZE합니다. 이것은 아마도 웹상의 유일한 좋은 예제 프로그램 일 것입니다.
Thanks.

관련 문제