麒麟系统开发笔记(十四):在国产麒麟系统上编译libmodbus库、搭建基础开发环境和移植测试Demo

若该文为原创文章,转载请注明原文出处
本文章博客地址:https://hpzwl.blog.csdn.net/article/details/140387947

长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…

国产麒麟系统相关开发

上一篇:《麒麟系统开发笔记(十三):在国产麒麟系统上编译OSG库、搭建基础开发环境和移植测试Demo》
下一篇:敬请期待…


前言

  在国产麒麟系统上实现modbusTcp和modbus232/485通讯,使用libmodbus库。
  本篇在厂家指定的麒麟系统上编译libmodbus库,迁移modbusTcpDemo工程。


相关博客

  《案例分享:Qt modbus485调试工具(读写Byte、Int、DInt、Real、DReal)(当前v1.3.0)》
  《案例分享:Qt modbusTcp调试工具(读写Byte、Int、DInt、Real、DReal)(当前v1.0.0)》
  《台达PLC开发笔记(一):台达PLC连接介绍,分别使用485、网口与台达PLC建立连接》
  《台达PLC开发笔记(二):台达PLC设置主机通讯参数为RTU并成功通讯》
  《西门子PLC开发笔记(一):PLC介绍,西门子S1200系列接线、编程、下载和仿真》
  《libModbus库开发笔记(一):libmodbus库介绍、编译和基础工程模板》
  《libModbus库开发笔记(二):libmodbus介绍、编译、modbusTcp连接台达PLC和modbusTcp基础模板》
  《麒麟系统开发笔记(十四):在国产麒麟系统上编译libmodbus库、搭建基础开发环境和移植测试Demo》
  《案例分享:Qt西门子PLC调试模拟工具(包含PLC上位机通讯,PLC服务器,读写Byte、Int、DInt、Real)(持续更新,当前v1.6.0)》


补充

  modbus232/485的demo就不移植了,可以查看相关博客,移植按照本文一样,主要修改配置引用。


国产麒麟系统版本

  在这里插入图片描述


libModbus介绍

  libmodbus是一个免费软件库,可根据Modbus协议发送/接收数据。该库用C编写,并支持RTU(串行)和TCP(以太网)通信。


编译libmodbus(国产麒麟V10)

  步骤一:下载解压
  https://github.com/stephane/libmodbus
  在这里插入图片描述

步骤二:配置configure

cd
cd work/src/libmodbus-3.1.6
cCd libmodbus-3.1.6
ls

  在这里插入图片描述

  以下是动态库:

./configure --prefix=/home/yang/work/src/libmodbus-3.1.6/install

  若是需要静态库可更改如下:

./configure --prefix=/home/yang/work/src/libmodbus-3.1.6/installStatic –enable-static

  在这里插入图片描述

  在这里插入图片描述

步骤三:编译make

make -j16

  在这里插入图片描述

  再单线程确认一下
  在这里插入图片描述

步骤四:安装make install

make install

  在这里插入图片描述

步骤五:稍微核对下文件

  在这里插入图片描述

  在这里插入图片描述

  与windows下相比,就是.a变成了.so,这是动态库,可以编译成静态库:
  在这里插入图片描述

  下面这是静态库的(静态库依赖编译出来,也需要运行库,这点没深究了,可能还需要其他基础动态库依赖吧?):
  [外链图片转存中…(img-hrOmwtJQ-1720838579353)]

步骤六:安装到系统

  为了运行时不单独去链接运行库,重新来一次,装到系统里面去。

./configure
make -j8
make
sudo make install
sudo ldconfig

获取台达PLC的IP地址

  (注意:经手过三个台达了,基本默认地址都是192.168.1.5)

步骤一:下载安装COMMGR

  从台达官网下载最新的通讯软件。
  官网:https://downloadcenter.delta-china.com.cn/DownloadCenter?v=1&CID=06&itemID=060301&downloadID=AS%E7%B3%BB%E5%88%97&dataType=8&sort_expr=cdate&sort_dir=DESC

  下载最新的探索驱动软件:
  在这里插入图片描述

  在这里插入图片描述

步骤二:探测台达PLC地址

  点开:
  在这里插入图片描述

  在这里插入图片描述

  在这里插入图片描述

  点击“搜寻”,电脑必须和PLC在同一个网段,这里都是1网段:
  在这里插入图片描述

  搜索到了如下图:
  在这里插入图片描述

  这样,我们就获取到了PLC的网络地址。


模块化

  在windows上加上兼容麒麟系统:
   在这里插入图片描述

modbusTcpManager.pri

INCLUDEPATH += $$PWD
DEPENDPATH += $$PWDHEADERS += \$$PWD/ModbusTcpManager.hSOURCES += \$$PWD/ModbusTcpManager.cpp# libmodbus-3.1.6win {INCLUDEPATH += $$PWD/libmodbus-3.1.6/includeLIBS += -L$$PWD/libmodbus-3.1.6/lib -lmodbus -lws2_32
}
unix {INCLUDEPATH += $$PWD/libmodbus-3.1.6_kylin/includeLIBS += -L$$PWD/libmodbus-3.1.6_kylin/lib -lmodbus
}

Demo

#ifndef MODBUSTCPMANAGER_H
#define MODBUSTCPMANAGER_H#include <QObject>
#include <QMutex>union RealByte {float f;quint8 buf[4];
};union DRealByte {double f;quint8 buf[8];
};// libmodbus
#include "modbus/modbus.h"
#include "modbus/modbus-version.h"
#include "modbus/modbus-rtu.h"
#include "modbus/modbus-tcp.h"class ModbusTcpManager : public QObject
{Q_OBJECT
private:explicit ModbusTcpManager(QObject *parent = 0);public:bool testEnvAndRtu();public:static ModbusTcpManager *getInstance();public:void setIp(const QString &ip);void setPort(const quint16 &port);void setTimeOutMs(int timeOutMs);public:QString getIp() const;quint16 getPort() const;int getTimeOutMs() const;signals:void signal_connected(bool connected);void signal_disConnected();void signal_readBitsResult(bool result, int startAddr, QList<bool> listBool);void signal_readIntsResult(bool result, int startAddr, QList<int> listInt);void signal_readDIntsResult(bool result, int startAddr, QList<int> listInt);void signal_readRealsResult(bool result, int startAddr, QList<float> listFloat);void signal_readDRealsResult(bool result, int startAddr, QList<double> listDouble);void signal_writeBitsResult(bool result, int startAddr, QList<bool> listBool);void signal_writeIntsResult(bool result, int startAddr, QList<int> listInt);void signal_writeDIntsResult(bool result, int startAddr, QList<int> listInt);void signal_writeRealsResult(bool result, int startAddr, QList<float> listFloat);void signal_writeDRealsResult(bool result, int startAddr, QList<double> listDouble);public slots:void slot_start();void slot_stop();void slot_connect();void slot_disConnect();void slot_readBits(int startAddr, int size);void slot_readInts(int startAddr, int size);void slot_readDInts(int startAddr, int size);void slot_readReals(int startAddr, int size);void slot_readDReals(int startAddr, int size);void slot_writeBits(int startAddr, QList<bool> listBool);void slot_writeInts(int startAddr, QList<int> listInt);void slot_writeDInts(int startAddr, QList<int> listInt);void slot_writeReals(int startAddr, QList<float> listFloat);void slot_writeDReals(int startAddr, QList<double> listDouble);private:static ModbusTcpManager *_pInstance;static QMutex _mutex;private:QString _ip;quint16 _port;int _timeOutMs;private:bool _running;bool _connected;private:modbus_t *_pModbus;};#endif // MODBUSTCPMANAGER_H

Demo演示

  连接台达PLC测试:
  在这里插入图片描述


工程模板v1.1.0

  在这里插入图片描述


上一篇:《麒麟系统开发笔记(十三):在国产麒麟系统上编译OSG库、搭建基础开发环境和移植测试Demo》
下一篇:敬请期待…


本文章博客地址:https://hpzwl.blog.csdn.net/article/details/140387947

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/871702.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java--接口的定义与实现

1.Java的接口是一种约束 2.定义一些方法&#xff0c;让不同的人实现 3.方法都是 public abstract 4.常量都是public static final 5.接口不能被实例化&#xff1a; 接口中没有构造方法 6.接口可以多继承&#xff1a; 使用implements即可实现 7.必须要重写接口中的方法…

在家上网IP地址是固定的吗?

在数字化时代&#xff0c;互联网已成为我们日常生活中不可或缺的一部分。无论是工作、学习还是娱乐&#xff0c;我们都离不开网络的支持。然而&#xff0c;当我们在家中接入互联网时&#xff0c;可能会产生这样一个疑问&#xff1a;在家上网IP地址是固定的吗&#xff1f;下面一…

秋招Java后端开发冲刺——MyBatisPlus总结

一、 基本知识 1. 介绍 yBatis-Plus 是一个 MyBatis 的增强工具&#xff0c;在 MyBatis 的基础上增加了大量功能和简化操作&#xff0c;以提高开发效率。 2. 特点 无侵入&#xff1a;只做增强不做改变&#xff0c;引入它不会对现有项目产生影响。依赖少&#xff1a;仅仅依赖 …

CV05_深度学习模块之间的缝合教学(1)

1.1 在哪里缝 测试文件&#xff1f;&#xff08;&#xff09; 训练文件&#xff1f;&#xff08;&#xff09; 模型文件&#xff1f;&#xff08;√&#xff09; 1.2 骨干网络与模块缝合 以Vision Transformer为例&#xff0c;模型文件里有很多类&#xff0c;我们只在最后…

嘉立创EDA隐藏地线或者

https://prodocs.lceda.cn/cn/pcb/side-panel-left-net/#%E9%A3%9E%E7%BA%BF

50+dfm模型素人网红路人实时直播替换DFLive模型dfm格式

作为一名直播达人&#xff0c;我投入了大量时间和精力在网上收集和购买各种直播所需的模型资源。这些资源不仅包括男模、女模&#xff0c;还有明星脸、大众脸、网红脸以及各类稀有的素人模型。为了回馈广大直播爱好者&#xff0c;我将这些宝贵资源整理成一个合集&#xff0c;供…

elasticsearch性能调优方法原理与实战

❃博主首页 &#xff1a; 「码到三十五」 &#xff0c;同名公众号 :「码到三十五」&#xff0c;wx号 : 「liwu0213」 ☠博主专栏 &#xff1a; <mysql高手> <elasticsearch高手> <源码解读> <java核心> <面试攻关> ♝博主的话 &#xff1a…

ROS1导航状态机与ROS2导航行为树

ROS1和ROS2导航框架中用到的各种底层算法基本相同&#xff0c;比如代价地图&#xff0c;全局路径规划和局部路径规划等&#xff0c;它们最大的不同在于整个系统框架设计。 一&#xff0c;ROS1 导航状态机 ROS1导航功能包move_base是一个状态机&#xff0c;从软件设计上来看&am…

sip协议栈简介

SIP协议栈简介 SIP协议栈流程 数据链路层&#xff1a;当SIP消息从网络中传输到达TCP/IP协议栈时&#xff0c;首先被接收到的是数据链路层的数据帧。数据链路层会对数据帧进行解封装&#xff0c;得到网络层的IP数据报。 网络层&#xff1a;网络层会对IP数据报进行解析&#xf…

【GDCPC2024】【min_25筛】J.另一个计数问题

题目 传送门 思路 考场上的思路和正解差远了&#xff0c;属实是反演学魔怔了。 首先&#xff0c;对于所有的 x x x&#xff0c;它可以通过 2 x 2x 2x 和 2 2 2 连通&#xff0c;而 2 2 2 又可以和所有 m i n p ≤ ⌊ n 2 ⌋ minp\leq \left\lfloor\frac{n}{2}\right\…

浏览器插件利器--allWebPluginV2.0.0.16-alpha版发布

allWebPlugin简介 allWebPlugin中间件是一款为用户提供安全、可靠、便捷的浏览器插件服务的中间件产品&#xff0c;致力于将浏览器插件重新应用到所有浏览器。它将现有ActiveX插件直接嵌入浏览器&#xff0c;实现插件加载、界面显示、接口调用、事件回调等。支持chrome、FireFo…

江协科技51单片机学习- p27 I2C AT24C02存储器

&#x1f680;write in front&#x1f680; &#x1f50e;大家好&#xff0c;我是黄桃罐头&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流 &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd;​…

Wikijs 部署教程

以下是一个 Wikijs 部署的简单教程&#xff0c;涵盖了使用 Docker 和直接安装两种方式&#xff1a; 方法一&#xff1a; 使用 Docker (推荐) Docker 是一个方便快捷的方式来部署 Wikijs&#xff0c;它可以避免许多手动配置步骤。 安装 Docker: 按照 https://docs.docker.com/…

JRE、JVM、JDK分别是什么。

JDK JDK的英文全称是Java Development Kit。JDK是用于制作程序和Java应用程序的软件开发环境。JDK 是 Java 开发工具包&#xff0c;它是 Java 开发者用来编写、编译、调试和运行 Java 程序的集合。JDK 包括了 Java 编译器&#xff08;javac&#xff09;、Java 运行时环境&…

【已解决】如何在一篇笔记中呈现另一篇笔记的内容,hover editor插件?obsidian

问题 问题&#xff1a;【已解决】如何让一篇笔记内容在另一篇的笔记里呈现&#xff1f; - 疑问解答 - Obsidian 中文论坛 如何在一篇笔记里&#xff0c;在插入内链接时&#xff0c;同时展示内链接的笔记中的内容&#xff1f; 比如&#xff1a; 哲学是一门[[学问]]这篇笔记…

2024年上半年信息系统项目管理师——综合知识真题题目及答案(第1批次)(3)

2024年上半年信息系统项目管理师 ——综合知识真题题目及答案&#xff08;第1批次&#xff09;&#xff08;3&#xff09; 第41题&#xff1a;在应用集成中&#xff0c;有多个组件帮助协调连接各种应用。其中&#xff08;&#xff09;利用特定的数据结构&#xff0c;帮助开发人…

电脑硬盘里的文件能保存多久?电脑硬盘文件突然没了怎么办

在数字化时代&#xff0c;电脑硬盘作为我们存储和访问数据的重要设备&#xff0c;承载着无数珍贵的回忆、工作成果和创意灵感。然而&#xff0c;硬盘里的文件能保存多久&#xff1f;当这些文件突然消失时&#xff0c;我们又该如何应对&#xff1f;本文将深入探讨这两个问题&…

13-《鸭跖草》

鸭跖草 鸭跖草&#xff0c;拉丁学名&#xff1a;&#xff08;Commelina communis&#xff09;&#xff0c;别名碧竹子、翠蝴蝶、淡竹叶等。属粉状胚乳目、鸭跖草科、鸭跖草属一年生披散草本。鸭跖草叶形为披针形至卵状披针形&#xff0c;叶序为互生&#xff0c;茎为匍匐茎&…

实验发现AI提高了个人创造力,但降低了整体创造力

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

【ingress-nginx】安装配置及Helm工具安装

【ingress-nginx】安装配置及Helm工具安装 安装时候需要用到一个工具——Helm【相当于linux中的yum工具】。 一&#xff0c;Helm安装 官网&#xff1a;https://helm.sh/docs/intro/install # 下载 wget https://get.helm.sh/helm-v3.2.3-linux-amd64.tar.gz# 解压 tar -zxv…