• 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
    ", 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. 逻辑分析仪抓图数据:
            

  • 相关阅读:
    IntelliJ IDEA 偏好设置
    Unix环境下的5中IO模型
    Hbase原理、基本概念、基本架构
    可参考的技术博客
    Hadoop生态系统介绍
    oracle 添加表分区和索引分区,修改索引分区默认表空间
    koa redis 链接
    Node-APN 开源推送服务
    NodeJs 笔记
    windows防火墙无法启动,服务不存在
  • 原文地址:https://www.cnblogs.com/zengjfgit/p/6547324.html
Copyright © 2020-2023  润新知