Ethercat学习-QT添加SOEM主站

简介

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

SOEM主站移植到QT测试程序中需要以下步骤: 1. 首先,确保Qt开发环境已经正确安装并配置好。可以从官方网站下载Qt开发环境,并按照说明进行安装。 2. 打开Qt开发环境,创建一个新的Qt项目。可以选择一个合适的项目模板,如“Qt Widgets Application”。 3. 在项目中引入SOEM主站源代码文件。将SOEM主站的源代码文件拷贝到项目目录下,然后在Qt项目中添加这些文件。 4. 配置Qt项目以使用SOEM主站的功能。在Qt项目的.pro文件中,添加SOEM源代码文件的路径,并添加相关的编译和链接选项。可以参考SOEM的文档说明来了解所需的配置选项。 5. 在Qt项目中编写测试程序。根据需要,编写测试程序以调用和测试SOEM主站提供的功能。可以使用Qt的界面设计工具来创建界面,以便与SOEM主站进行交互。 6. 编译和运行Qt测试程序。使用Qt开发环境提供的编译和运行功能,对项目进行编译和运行。确保编译过程中没有错误,并且程序能够正确运行。 7. 进行测试和调试。通过与SOEM主站进行交互,测试和调试Qt测试程序。可以使用Qt的调试工具来分析程序的运行情况,并进行必要的修复和改进。 8. 最后,进行部署和发布。将完成测试和调试的Qt测试程序进行部署和发布。可以根据需要,打包程序并发布给其他用户使用。 通过以上步骤,我们可以将SOEM主站移植到Qt测试程序中,并进行测试和调试,以确保程序能够正常运行。
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值