现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

使用boost库进行串行通讯

2014-03-02 06:36 工业·编程 ⁄ 共 1525字 ⁄ 字号 暂无评论

    现代的计算机技术进步很快,各种的通讯也日新月异,像USB、网络、蓝牙、WIFI等通讯技术飞速地出现,改变了整个计算机的通讯能力,速度已经达到GBit级别。但是有一种最原始的通讯方式,还是保留了30年,它就是串行接口通讯。前一些年,有很多计算机已经准备把这个接口去掉,全部换USB了,近年来又看到串口恢复过来,重新成为基本计算机配置。那为什么呢?其实串口具体一个大特点,就是简单,它简单到不需要什么驱动代码,不用担心中间有什么复杂处理出错。在计算机与外设通讯速度不高的情况下,它还是很合适的接口,比如在工业里一些简单监控,一些命令发送;在嵌入式软件开发里,调试软件信息显示和自动化测试。这时需要开发一些开发工具或者自动化测试工具辅助要完成这个任务,那么怎么样才能用C++最快捷,又简单地完成任务呢?下面就来看看使用boost库里提供的类,很容易就完成了这个任务,其实只需要开发10多分钟就可以了,例子的代码如下:

// boost_029.cpp : Defines the entry point for the console application.

//

#include "stdafx.h"

#include <boost/asio.hpp>

#include <boost/asio/serial_port.hpp>

#include <iostream>

#include <fstream>

//

//串口接收,并把收到数据写到文件里。

//软件开发人员: 蔡军生  2013-09-01

//QQ: 9073204

//

void ComOutputToFile(void)

{

    //设置本化的UNICODE输出

    std::wcout.imbue(std::locale("chs"));

    std::wcout << L"开始写串口数据到文件..." << std::endl;

    //创建保存串口输出的文件.

    std::ofstream outfile("Com2File.dat", std::ios::binary | std::ios::out);

    if (!outfile.good())

    {

        std::wcout << L"出错了" << std::endl;

        return;

    }

    outfile.flush();

    //创建IO服务

    boost::asio::io_service ioService;

    //创建串口对象。

    boost::asio::serial_port port(ioService);

    //打开串口1

    port.open("COM1");

    //设置通讯波特率

    port.set_option(boost::asio::serial_port_base::baud_rate(115200));

    //循环地接收串口的数据。

    char chRecv = 0;

    const int nOneByte = 1;

    do   

    {

        //每次收到一个字符就输出到文件。

        boost::asio::read(port, boost::asio::buffer(&chRecv,nOneByte));

        std::cout << chRecv;

        outfile<<chRecv;

        //立即输出到文件。

        outfile.flush();

    }

    while(true);

    

    port.close();

}

int _tmain(int argc, _TCHAR* argv[])

{

    ComOutputToFile();

    return 0;

}

给我留言

留言无头像?