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

  • 相关阅读:
    Linux Sever简单笔记(第十二堂课)之linux下的系统故障分析和排查
    Linux Sever简单笔记(第十一堂课)之linux下的备份和恢复及rsync还有inotify和dump以及restore
    Linux Sever简单笔记(第十堂课)之linux下的任务计划及相关的命令
    ubuntu18.04设置apt源(国内)
    shell简单常用脚本实例
    装完ubuntu系统之后,不能ssh正常连接
    mysql主从复制以及读写分离
    复习计划
    linux下dhcp的安装及配置
    日常问题
  • 原文地址:https://www.cnblogs.com/zengjfgit/p/6547324.html
Copyright © 2020-2023  润新知