Ethercat学习-QT添加SOEM主站

news2024/12/23 14:11:57

文章目录

      • 简介
      • 环境搭建
        • 1.QT安装
        • 2.VS安装
        • 3.Win10 Debuggers
        • 4.QT配置
      • SOEM移植
        • 1.lib库生成
        • 2.文件移植
          • 1.文件整理
          • 2.添加文件至QT工程
      • 测试

简介

QT版本5.14.2

VS版本2017

系统Win10

环境搭建

环境搭建很简单,就是安装几个软件就好了,没有特殊的操作。

1.QT安装

在这里插入图片描述

QT安装十分简单,因为我这个是离线版本,所以电脑不联网安装的时候不需要登陆账号。在这里需要选择MSVC编译器,后面工程编译需要使用MSVC,MinGW不行。其他的模块看你需要,我后面可能需要画波形图,所以勾选了QT Charts模块。

2.VS安装

在这里插入图片描述

VS安装也很简单,只需要选择C++模块就行了。VS这个主要是提供两个功能,一个是编译SOEM代码生成lib文件供QT调用,另一个就是提供MSVC编译器。

3.Win10 Debuggers

在这里插入图片描述

上一步在安装VS的时候已经勾选了Win10 SDK,但是安装完之后,在QT中识别不到 Debuggers,所以需要安装一下WIn10SDK。这里安装的时候只需要勾选Debugging Tools for Windows就好了。

4.QT配置

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

将软件安装完成之后,打开QT,QT会自动检测到编译器和Debuggers如上图所示。

SOEM移植

1.lib库生成

在这里插入图片描述

打开VS2017的终端,通过终端进入到SOEM源码的文件加下面,在文件夹下面输入以下指令就好了,编译完成后,可以看到在build文件夹中生成了soem.lib文件。

mkdir build
cd build
cmake .. -G "NMake Makefiles"
nmake

在build文件夹下面也生成了windows中的测试程序,路径在build\test\linux下,一下就是我在中端中测试的结果,测试了slaveinfo.exe和simple_test.exe两个指令

F:\source\SOEM-master\build\test\linux\slaveinfo>slaveinfo.exe
SOEM (Simple Open EtherCAT Master)
Slaveinfo
Usage: slaveinfo ifname [options]
ifname = eth0 for example
Options :
 -sdo : print SDO info
 -map : print mapping
Available adapters
Description : Microsoft, Device to use for wpcap: \Device\NPF_{AC02A084-A1B6-47F5-BF5D-45E3B31DA4DB}
Description : Microsoft, Device to use for wpcap: \Device\NPF_{5C6F0220-964E-460F-9F00-0BCE757CA244}
Description : Realtek PCIe GbE Family Controller, Device to use for wpcap: \Device\NPF_{554640BB-2AEE-4E52-A972-FFFBD6BE41D0}
End program

F:\source\SOEM-master\build\test\linux\simple_test>simple_test.exe \Device\NPF_{554640BB-2AEE-4E52-A972-FFFBD6BE41D0}
SOEM (Simple Open EtherCAT Master)
Simple test
Starting simple test
ec_init on \Device\NPF_{554640BB-2AEE-4E52-A972-FFFBD6BE41D0} succeeded.
1 slaves found and configured.
Slaves mapped, state to SAFE_OP.
segments : 1 : 29 0 0 0
Request operational state for all slaves
Calculated workcounter 3
Operational state reached for all slaves.
Processdata cycle 1159, WKC 3 , O: 00 00 00 00 00 00 00 00 I: 00 00 00 00 00 00 00 00 T:734597119552360960
ERROR : slave 1 is in SAFE_OP + ERROR, attempting ack.
Processdata cycle 1162, WKC 3 , O: 00 00 00 00 00 00 00 00 I: 00 00 00 00 00 00 00 00 T:734597123992783400
WARNING : slave 1 is in SAFE_OP, change to OPERATIONAL.
Processdata cycle 1164, WKC 3 , O: 00 00 00 00 00 00 00 00 I: 00 00 00 00 00 00 00 00 T:734597124006343840
OK : all slaves resumed OPERATIONAL.
^Cocessdata cycle 1379, WKC 3 , O: 00 00 00 00 00 00 00 00 I: 00 00 00 00 00 00 00 00 T:734597125666392921

2.文件移植

1.文件整理

这一步可以不做,可以直接将编译过的soem源码文件夹复制到QT工程下面,然后向工程里添加头文件和库文件。我是为了让整个工程更加清晰,所以才做的。

在这里插入图片描述

新建一个QT工程,在QT工程下面新建一个soem文件夹,用来存放soem的头文件和lib。

在这里插入图片描述

我这里又在soem文件夹下面新建了两个文件夹,一个soem_h存储头文件,一个soem_lib存储lib文件。还有一个wpcap文件夹,不是我创建的,是我从SOEM-master\oshw\win32下面拷贝的。这个文件夹下面所有的头文件和lib文件也需要加入到QT工程里面。接下来就是向soem_h和soem_lib文件夹中拷贝文件了。

  1. 拷贝build文件夹中生成的soem.lib文件到soem_lib文件夹
  2. 拷贝SOEM源码文件夹中soem下的头文件到soem_h文件夹
  3. 拷贝SOEM源码文件夹中oshw\win32下的头文件到soem_h文件夹,wpcap已经拷贝过了,不需要再拷贝了。
  4. 拷贝SOEM源码文件夹中osal\win32下的头文件到soem_h文件夹,还有一个osal文件夹下的osal.h头文件也需要拷贝
2.添加文件至QT工程
soem += $$PWD/soem

INCLUDEPATH += \
    $${soem}/soem_h\
    $${soem}/wpcap/Include \
    $${soem}/wpcap/Include/pcap\

LIBS += \
    $${soem}/soem_lib/soem.lib    \
    $${soem}/soem_lib/wpcap/Lib/x64/Packet.lib    \
    $${seom}/soem_lib/wpcap/Lib/x64/wpcap.lib     \
    $${soem}/soem_lib/wpcap/Lib/Packet.lib        \
    $${soem}/soem_lib/wpcap/Lib/wpcap.lib \

在工程的pro文件中加入如上语句,将lib库和头文件加入工程中。添加方式有多种看个人喜好。编写一个简单的测试程序,编译发现报了许多错误。

CC:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\ratio(73): error C2065: “INTMAX_MAX”: 未声明的标识符
:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\ratio(73): error C2065: “INTMAX_MAX”: 未声明的标识符
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\ratio(75): note: 参见对正在编译的 类 模板 实例化 "std::_Safe_add<_Ax,_Bx>" 的引用

在pro文件中加入:

DEFINES +=__STDC_LIMIT_MACROS

编译后报错

:-1: error: LNK1104: 无法打开文件“\wpcap\Lib\x64\wpcap.lib”

不太理解,别的库都没问题,就它不行,我把这句话注释掉了,通过右键->添加库的方式把这个库添加了一下。

编译后报错:

soem.lib(osal.c.obj):-1: error: LNK2019: 无法解析的外部符号 __imp_timeBeginPeriod,该符号在函数 osal_getrelativetime 中被引用

这还是缺少库,在main函数中添加

#pragma comment( lib, "Winmm" )
#pragma comment(lib,"ws2_32.lib")

编译后,这次没有问题了。

最终的pro文件所添加的东西如下:

soem += $$PWD/soem

INCLUDEPATH += \
    $${soem}/soem_h\
    $${soem}/wpcap/Include \
    $${soem}/wpcap/Include/pcap\

LIBS += \
    $${soem}/soem_lib/soem.lib    \
    $${soem}/wpcap/Lib/x64/Packet.lib    \
#    $${seom}/wpcap/Lib/x64/wpcap.lib     \
    $${soem}/wpcap/Lib/Packet.lib        \
    $${soem}/wpcap/Lib/wpcap.lib

DEFINES +=__STDC_LIMIT_MACROS


win32: LIBS += -L$$PWD/soem/wpcap/Lib/x64/ -lwpcap
win32:!win32-g++: PRE_TARGETDEPS += $$PWD/soem/wpcap/Lib/x64/wpcap.lib

测试

在这里插入图片描述

编写了一个简单的测试代码,可以看到软件检测到了网卡,并成功将从站配置为OP状态。

测试代码链接https://github.com/IJustLoveMyself/csdn-example/tree/main/example3

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

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

相关文章

快速排序及优化

快速排序及优化 概要 关于快速排序的原理不赘述&#xff0c;可以查看912. 排序数组 - 力扣&#xff08;Leetcode&#xff09; 本篇文章旨在提供快速排序的C#实现&#xff0c;并通过随机pivot&#xff0c;三数取中&#xff0c;小区间使用插入排序&#xff0c;栈实现&#xff…

Makefile学习

什么是Makefile 使用 GCC 编译器在 Linux 进行 C 语言编译&#xff0c;通过在终端执行 gcc 命 令来完成 C 文件的编译&#xff0c;如果我们的工程只有一两个 C 文件还好&#xff0c;需要输入的命令不多&#xff0c;当文件有几十、上百甚至上万个的时候用终端输入 GCC 命令的方…

NIFI大数据进阶_实时同步MySql的数据到Hive中去_可增量同步_实时监控MySql数据库变化_操作方法说明_01---大数据之Nifi工作笔记0033

然后我们来看如何把mysql数据实时同步到hive中去 可以看到,其实就是使用 CaptureChangeMySql来获取mysql中变化的数据,具体就是增删改数据 然后再用RouteOnAttribute通过属性,也就是根据是增删改的话,根据这个属性进行路由 把数据路由到不同的位置 然后再用EvaluateJsonPa…

创客匠人人物访谈:客户,如何反推创业发展? |

古语有云&#xff1a;“君者&#xff0c;舟也&#xff1b;庶人者&#xff0c;水也&#xff1b;水则载舟&#xff0c;水则覆舟”。 从创业的角度来看&#xff0c;客户&#xff0c;就是创业这艘小船在市场的海洋里能够安稳航行的必要条件。 在创业的过程中&#xff0c;一定是先有…

STC89C52串口通信当中的UART

1.串口介绍 串口是一种应用十分广泛的通讯接口&#xff0c;串口成本低、容易使用、通信线路简单&#xff0c;可实现两个设备的互相通信。 单片机的串口可以使单片机与单片机、单片机与电脑、单片机与各式各样的模块互相通信&#xff0c;极大的扩展了单片机的应用范围&#xf…

Vue 也能复用模板了

文章目录Vue 也能复用模板了1. 怎么用1.1 基本使用1.2 传递参数2. 怎么实现的3. 注意事项4. 未来发展Vue 也能复用模板了 相信很多使用 Vue 的同学会遇到这样一个问题&#xff1a; “组件里有几个部分的模板&#xff08;html 结构&#xff09;是相同的&#xff0c;要想复用的…

使用线性回归构建波士顿房价预测模型

使用线性回归构建波士顿房价预测模型 描述 波士顿房价数据集统计了波士顿地区506套房屋的特征以及它们的成交价格&#xff0c;这些特征包括周边犯罪率、房间数量、房屋是否靠河、交通便利性、空气质量、房产税率、社区师生比例&#xff08;即教育水平&#xff09;、周边低收入…

前馈PID控制(热交换器/反应釜温度控制)

如何利用PID进行温度控制请参看下面博客文章: 博途PID 1200/1500PLC PID_Compact比例作用权重b微分作用权重c解读(PI-D控制器 I-PD控制器)_RXXW_Dor的博客-CSDN博客很多人会问PLC自带的PID指令和我们自己设计的PID有什么区别,这个问题要看你和什么PID控制器作对比,PID负反…

python真的如此好吗?

作为一名合格的&#xff08;准&#xff09;程序员&#xff0c;必做的一件事是关注编程语言的热度&#xff0c;编程榜代表了编程语言的市场占比变化&#xff0c;它的变化更预示着未来的科技风向和机会&#xff01; Python霸占榜首 只因它真的很强 Python&#xff0c;年龄可能比…

2023年的深度学习入门指南(5) - HuggingFace Transformers库

2023年的深度学习入门指南(5) - HuggingFace Transformers库 这一节我们来学习下预训练模型的封装库&#xff0c;Hugging Face的Transformers库的使用。Hugging Face的库非常活跃&#xff0c;比如支持LLaDA大规型的类&#xff0c;是在本文开始写作的前一天发布的。 库新到这种…

JavaWeb——锁策略, cas和synchronized优化过程

目录 一、锁策略 1、悲观锁和乐观锁 2、轻量级锁和重量级锁 3、自旋锁和挂起等待锁 4、互斥锁和读写锁 5、可重入锁和不可重入锁 6、公平锁和非公平锁 二、cas和synchronized 优化过程 1、CAS&#xff08;compare and swap&#xff09; &#xff08;1&#xff09;、原…

企业网站架构部署与优化

系列文章目录 文章目录系列文章目录一、LAMP概述与简介1.LAMP2.各组件的主要作用如下&#xff1a;二、1.编译安装Apache http服务2.编译安装 Mysql 服务3.编译安装 PHP 解析环境总结一、LAMP概述与简介 1.LAMP LAMP架构是目前成熟的企业网站应用模式之一&#xff0c;指的是协…

如何高效建立知识库?

建立知识库是为了更好地管理和传承知识&#xff0c;提高团队的效率和成果。在建立知识库的过程中&#xff0c;需要注意一些关键点&#xff0c;以确保知识库的高效性和可持续性。本文将介绍如何高效建立知识库以及需要注意的事项。 一、建立知识库的步骤 1.明确知识库的目的和…

SpringBoot 默认数据库连接池 HikariCP

目录 引言 1、问题描述 2、SpringBoot默认的数据库连接池 3、HikariCP是什么 4、测试依赖 5、配置文件 5.1、数据库连接参数 5.2、连接池数据基本参数 5.3、连接检查参数 5.4、事务相关参数 5.5、JMX参数 6、HikariCP源码浅析 6.1、HikariConfig--连接池配置的加载…

Observability:使用 OpenTelemetry 和 Elastic 监控 OpenAI API 和 GPT 模型

作者&#xff1a;David Hope ChatGPT 现在很火&#xff0c;它打破了互联网。 作为 ChatGPT 的狂热用户和 ChatGPT 应用程序的开发者&#xff0c;我对这项技术的可能性感到无比兴奋。 我看到的情况是&#xff0c;基于 ChatGPT 的解决方案将呈指数级增长&#xff0c;人们将需要监…

Shiro概述

文章目录1.权限的管理1.1 什么是权限管理1.2 什么是身份认证1.3 什么是授权2.Shiro概述2.1 什么是Shiro2.2 Shiro 与 SpringSecurity 的对比2.3 基本功能3.shiro的核心架构4.shiro中的认证4.1 认证4.2 shiro中认证的关键对象4.3 身份认证流程4.4.登录认证实例4.5 自定义Realm5.…

Python标记数组的连通域

文章目录连通域标记structure参数操作连通域定位连通域连通域标记 通过label函数&#xff0c;可以对数组中的连通区域进行标注&#xff0c;效果如下 from scipy.ndimage import label import numpy as np a np.array([[0,0,1,1,0,0],[0,0,0,1,0,0],[1,1,0,0,1,0],[0,0,0,1,0…

虚拟机里安装ubuntu-23.04-beta-desktop-amd64,开启SSH(换源、备份),配置中文以及中文输入法

一、下载 官网 清华镜像站(推荐) 二、配置虚拟机 【自定义】 点击“下一步”&#xff0c;此处【默认】&#xff0c;再点击“下一步”。 点击“稍后安装操作系统”&#xff0c;再点击“下一步”。 点击“Linux(L)”&#xff0c;版本选择【Ubuntu 64 位】&#xff0c;再点击…

轻量级网页RSS阅读器selfoss

什么是 selfoss &#xff1f; selfoss 是一个多用途的 RSS 阅读器和提要聚合 Web 应用程序。它使您可以在一个地方轻松关注来自不同网站、社交网络和其他平台的更新。它是用 PHP 编写的&#xff0c;基本上可以让您在任何地方运行它。 安装 在群晖上以 Docker 方式安装。 在注…

【前沿技术】问答pk【ChatGPT Vs Notion AI Vs BAT AI 】

目录 写在前面 问题&#xff1a; 1 ChatGPT 1.1 截图 ​1.2 文字版 2 Notion AI 2.1 截图 2.2 文字版 3 BAT AI 3.1 截图 3.2 文字版 总结 序言 所有幸运和巧合的事&#xff0c;要么是上天注定&#xff0c;要么是一个人偷偷的在努力。 突发奇想&#xff0c;问三个…