环境准备

  • 操作系统:Windows 7/10/11(64位推荐)
  • 开发工具:Visual Studio 2022社区版、QT5.12.12
  • 依赖库:SOEM源码(需从官方GitHub下载)、NPcap(网络驱动支持)
  • SOEM源码编译工具:CMake
  • 硬件要求:支持EtherCAT的网卡(如Intel I210)

下载与编译

  • 获取SOME源文件

支持cmake的SOME(编译为VS项目,方便调试)的源文件,从网站https://github.com/OpenEtherCATsociety/SOEM/releases 上下载V1.4.0版本的软件。

  • 下载安装网络抓包软件NpCap

下载地址:Npcap: Windows Packet Capture Library & Driver

安装步骤:选下面两项

  • 下载安装CMake

方法一:

优先下载最新版,下载地址:https://cmake.org/download/

方法二:

【也可以使用chocoley方式下载(引用地址:Building SOEM — SOEM documentation)】:


其中installChocolatey.cmd内容源文为:

@echo off

SET DIR=%~dp0%

::download install.ps1

%systemroot%\System32\WindowsPowerShell\v1.0\powershell.exe -NoProfile -ExecutionPolicy Bypass -Command "((new-object net.webclient).DownloadFile('https://community.chocolatey.org/install.ps1','%DIR%install.ps1'))"

::run installer

%systemroot%\System32\WindowsPowerShell\v1.0\powershell.exe -NoProfile -ExecutionPolicy Bypass -Command "& '%DIR%install.ps1' %*"

运行installChocolatey.cmd安装Chocolatey,以管理员身份运行指令窗口cmd.exe,安装CMake。

安装CMake的指令为:

C:\Windows\system32>cd C:\ProgramData\chocolatey
C:\Windows\system32>choco install -y cmake

卸载CMake的指令为:

C:\Windows\system32>cd C:\ProgramData\chocolatey
C:\ProgramData\chocolatey>choco install -y cmake

  • 编译生成SOEM静态库

zip压缩包到本地,文件结构是这样的:

将压缩包解压到本地,就可以利用CMake进行配置了。

 

设置源代码路径为D:/SOEM(带有CMakeLists.txt文件),设置构建目录为D:/SOEM/build,设置好后点击Configure按钮,进行编译环境配置,这里选择VS2022(也可以根据自己安装的VS版本选择对应的版本),最后点Finish

 

回到主界面,等待config完成,点击Generate,等待处理完成。

【注意】此时大概率会报错

此时需要修改CMakeLists.txt中内容,然后再执行上述操作。

修改第一行,可根据具体报错提示修改新版本号

修改最后几行

不出意外应该会在D:\SOEM\build下生成一个SOEM的解决方案工程

工程已经配置好了

直接生成就可以得到soem.lib文件,这样就可以在自己的项目中引用了。

【注意】这是一个静态库,引用的时候是将整个lib编译进可执行文件,如果需要进行动态引用就需要编译成动态库(.dll)。

静态库部署

  • 新建Visual Studio工程

 

 

 

  • 创建文件夹

创建SOEM_LIB_x64文件夹,并在该文件家中创建inclib子文件夹

 

  • 复制静态库

SOEM源码路径:SOEM\build中的soem.lib复制到第2步中创建的lib文件夹

SOEM源码路径:SOEM \oshw\win32\wpcap\Lib\x64中的Packet.libwpcap.lib复制到第2步中创建的lib文件夹

  • 复制头文件

  • 将SOEM源码路径:SOEM\osal中的osal.h复制到第2步中创建的inc文件夹
  • 将SOEM源码路径:SOEM\osal\win32中的inttypes.h、osal_defs.h、osal_win32.h、stdint.h复制到第2步中创建的inc文件夹
  • 将SOEM源码路径:SOEM\oshw\win32中的nicdrv.h、oshw.h复制到第2步中创建的inc文件夹
  • 将SOEM源码路径:SOEM\oshw\win32\wpcap\Include中的bittypes.h、ip6_misc.h、Packet32.h、pcap-bpf.h、pcap-namedb.h、pcap-stdinc.h、remote-ext.h、Win32-Extensions.h复制到第2步中创建的inc文件夹(不要复制pcap.h)
  • 将SOEM源码路径:SOEM\oshw\win32\wpcap\Include\pcap中的bluetooth.h、bpf.h、namedb.h、pcap.h、sll.h、usb.h、vlan.h复制到第2步中创建的inc文件夹
  • 将SOEM源码路径:SOEM\soem中的ethercat.h、ethercatbase.h、ethercatcoe.h、ethercatconfig.h、ethercatconfiglist.h、ethercatdc.h、ethercateoe.h、ethercatfoe.h、ethercatmain.h、ethercatprint.h、ethercatsoe.h、ethercattype.h复制到第2步中创建的inc文件夹

  • 配置头文件路径

    

  • 添加头文件

添加现有项

 

  • 配置静态库路径​​​​​​​

打开属性

   

  • 添加静态库​​​​​​​

添加静态库 soem.libPacket.libwpcap.libwinmm.libws2_32.lib

  • 添加宏​​​​​​​

添加宏:_CRT_SECURE_NO_WARNINGSWIN32__STDC_LIMIT_MACROS

测试

  • 网卡测试​​​​

右键项目->添加->新建项

打开SOEM源文件夹路径:SOEM\test\win32\slaveinfo

打开slaveinfo.c,复制所有程序到主函数slaveInfo.cpp中,将原来的main函数名改为mainSlaveInfo,并在slaveInfo.h中声明

在main.cpp中调用

运行代码。

  • 问题及解决办法

找不到头文件

**解决办法:**双击跳转到下图,修改为#include <bpf.h>

 

无法解析的外部符号,"x86""x64冲突"

**解决办法:**SOEM源码路径:SOEM-master_x64\oshw\win32\wpcap\Lib\x64中的Packet.libwpcap.lib复制到lib文件夹

  • 运行结果​​​​​​​

mainSlaveInfo函数中设置断点,进入断点时,可查看到获取的网卡信息

  • 连接从站测试​​​​​​​

找到自己的网卡,上一步成功运行可以查看自己的网卡名称为:\Device\NPF_{xxx}

复制网卡名称

修改主函数代码:(注:网卡名称中"\",要用"\\"表示)

slaveinfo函数内打断点,可以正常运行到内部信息,也可以使用Qt函数自行打印读取的从站信息。

下方为具体信息内容(这个是控制台应用程序调用静态库时,打印的信息,具体配置方法可查看网页【EtherCAT】Windows+Visual Studio配置SOEM主站——静态库配置+部署 - 技术栈

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐