libmodbus相关资料整理

/******************************************************************************
 *                         libmodbus相关资料整理
 * 说明:
 *     目测后续可能要折腾这个modbus,先找点资料看看情况,防止一问三不知。
 *
 *                                         2017-3-14 深圳 南山平山村 曾剑锋
 *****************************************************************************/

一、参考文档:
    1. Modbus通讯协议
        http://baike.baidu.com/item/Modbus%E9%80%9A%E8%AE%AF%E5%8D%8F%E8%AE%AE/5972462
    2. libmodbus(7) Manual Page
        http://libmodbus.org/docs/v3.0.6/
    3. 使用libmodbus實作Modbus協定
        http://felix-lin.com/linux/%E4%BD%BF%E7%94%A8libmodbus%E5%AF%A6%E4%BD%9Cmodbus%E5%8D%94%E5%AE%9A/
    4. Libmodbus 编程说明
        http://shaocheng.li/post/blog/2015-05-24
    5. libmodbus的移植
        http://46aae4d1e2371e4aa769798941cef698.devproxy.yunshipei.com/fulinus/article/details/37659661
    6. modbus?關於modbus RTU的使用說明II
        http://www.xuan.idv.tw/wordpress/?p=2427
    7. modbus?關於modbus RTU的使用說明
        http://www.xuan.idv.tw/wordpress/?p=1705
    8. linux下使用libmodbus库实现modbusTCP与modbusRTU功能
        http://www.ithao123.cn/content-10779860.html

二、Ubuntu安装libmodbus:
    sudo apt-get install libmodbus5 libmodbus-dev

三、交叉编译:
    1. libmodbus.so与modbus_rtu_test.c应当放在同一文件夹下
    2. arm-linux-gcc -o modbus_rtu_test modbus_rtu_test.c -L. -lmodbus

四、Ubuntu编译、测试:
    1. 测试代码:
        #include <stdio.h>
        #include <stdlib.h>
        #include <stdbool.h>
        #include <modbus/modbus.h>

        int main(void)
        {
          modbus_t *mb;
          uint8_t bit_status[2] = {0};

          mb = modbus_new_rtu("/dev/ttyUSB0",9600,'N',8,1);//open port
          modbus_set_slave(mb, 1); //set slave address
          modbus_set_debug(mb, true);

          modbus_connect(mb);

          struct timeval t;
          t.tv_sec=0;
          t.tv_usec=1000000;        //set modbus time 1000ms
          modbus_set_response_timeout(mb,&t);

          modbus_read_bits(mb, 0, 2, bit_status);

          printf("%d %d\n", bit_status[0], bit_status[1]);

          modbus_close(mb);
          modbus_free(mb);

          return 0;
        }
    2. 编译:
        gcc main.c -lmodbus
    3. 没有连接设备输出结果:
        Qt@zengjf:~/modbus$ ./a.out
        Opening /dev/ttyUSB0 at 9600 bauds (N, 8, 1)
        [01][01][00][00][00][02][BD][CB]
        Waiting for a confirmation...
        <01><01><00><00><00>
        ERROR CRC received 0 != CRC calculated 2190
        0 0
    4. 逻辑分析仪抓图数据:
        

posted on 2017-03-14 10:51  zengjf  阅读(3499)  评论(2编辑  收藏  举报

导航