【EtherCAT】Windows+Visual Studio配置SOEM主站——静态库配置+部署

目录

一、准备工作

[1. Visual Studio 2022](#1. Visual Studio 2022)

[2. Npcap 1.79](#2. Npcap 1.79)

[3. SOEM源码](#3. SOEM源码)

二、静态库配置

[1. 修改SOEM源码配置](#1. 修改SOEM源码配置)

[2. 编译SOEM源码](#2. 编译SOEM源码)

[3. 测试](#3. 测试)

三、静态库部署

[1. 新建Visual Studio工程](#1. 新建Visual Studio工程)

[2. 创建文件夹](#2. 创建文件夹)

[3. 创建主函数](#3. 创建主函数)

[4. 复制静态库](#4. 复制静态库)

[5. 复制头文件](#5. 复制头文件)

[6. 配置头文件路径](#6. 配置头文件路径)

[7. 添加头文件](#7. 添加头文件)

[8. 配置静态库路径](#8. 配置静态库路径)

[9. 添加静态库](#9. 添加静态库)

[10. 添加宏](#10. 添加宏)

四、测试

[1. 网卡测试](#1. 网卡测试)

[2. 问题及解决办法](#2. 问题及解决办法)

[3. 运行结果](#3. 运行结果)

[4. 连接从站测试](#4. 连接从站测试)


一、准备工作

1. Visual Studio 2022

下载地址:略

安装步骤:略

2. Npcap 1.79

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

安装步骤:三个全选

3. SOEM源码

下载地址:GitHub - OpenEtherCATsociety/SOEM: Simple Open Source EtherCAT Master

二、静态库配置

1. 修改SOEM源码配置

① 双击打开CMakeLists.txt

② 找到最后一行

③ 注释掉原来内容,添加:add_subdirectory(test/win32/slaveinfo)

④ 进入SOEM源代码的路径:\test\linux\slaveinfo

⑤ 复制CMakeLists.txt到路径:\test\win32\slaveinfo

2. 编译SOEM源码

① 开始菜单栏打开命令行。(二选一,如果后续测试遇到问题:无法解析外部符号,"x86"与"x64"冲突,换另外一个重新编译。这里使用x64编译,x86相同)

② 切换到SOEM根目录

③ 创建build文件夹 mkdir build

④ 进入build文件夹 cd build

⑤ 编译:cmake .. -G "NMake Makefiles"

⑥ 编译:nmake

3. 测试

① 编译完成后,build文件夹下会多出一堆文件

② 查看路径:\build\test\win32\slaveinfo 中出现slaveinfo.exe,则编译成功

③ 进入路径:\build\test\win32\slaveinfo cd ./test/win32/slaveinfo

④ 运行测试 slaveinfo.exe (弹出框点是)

⑤ 连接从站测试 slaveinfo.exe \Device\NPF_{xxxx} (弹出框点是)

三、静态库部署

1. 新建Visual Studio工程

2. 创建文件夹

创建inc、src、lib文件夹

3. 创建主函数

在src文件夹中创建main.c

4. 复制静态库

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

② 将SOEM源码路径:SOEM-master_x64\oshw\win32\wpcap\Lib中的Packet.lib、wpcap.lib复制到第2步中创建的lib文件夹

5. 复制头文件

  • 将SOEM源码路径:SOEM-master_x64\osal中的osal.h复制到第2步中创建的inc文件夹
  • 将SOEM源码路径:SOEM-master_x64\osal\win32中的inttypes.h、osal_defs.h、osal_win32.h、stdint.h复制到第2步中创建的inc文件夹
  • 将SOEM源码路径:SOEM-master_x64\osal\win32中的inttypes.h、osal_defs.h、osal_win32.h、stdint.h复制到第2步中创建的inc文件夹
  • 将SOEM源码路径:SOEM-master_x64\oshw\win32中的nicdrv.h、oshw.h复制到第2步中创建的inc文件夹
  • 将SOEM源码路径:SOEM-master_x64\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-master_x64\oshw\win32\wpcap\Include\pcap中的bluetooth.h、bpf.h、namedb.h、pcap.h、sll.h、usb.h、vlan.h复制到第2步中创建的inc文件夹
  • 将SOEM源码路径:SOEM-master_x64\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文件夹

6. 配置头文件路径

7. 添加头文件

8. 配置静态库路径

打开属性

9. 添加静态库

添加静态库 soem.lib、Packet.lib、wpcap.lib、winmm.lib、ws2_32.lib

10. 添加宏

添加宏:_CRT_SECURE_NO_WARNINGS、WIN32

四、测试

1. 网卡测试

  • 打开SOEM源文件夹路径:SOEM-master\test\win32\slaveinfo
  • 打开slaveinfo.c,复制所有程序到主函数main.c中
  • 运行代码

2. 问题及解决办法

① 找不到头文件

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

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

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

3. 运行结果

4. 连接从站测试

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

  • 复制网卡名称

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

    char ifbuf[1024] = "\Device\NPF_(xxxxxxxxxxx)";

    int main(int argc, char* argv[])
    {
    ec_adaptert* adapter = NULL;
    printf("S0EM (Simple Open EtherCAT Master)\nSlaveinfo\n");

    复制代码
      /* start slaveinfo */
      slaveinfo(ifbuf);
    
      printf("End program\n");
      return 0;

    }

相关推荐
我不是懒洋洋3 天前
【C++】string(string的成员变量、auto和范围for、string常用接口的说明、OJ题目、string的模拟实现)
c语言·开发语言·c++·visual studio
C++ 老炮儿的技术栈4 天前
Ubuntu root账号自动登陆
linux·运维·服务器·c语言·c++·ubuntu·visual studio
A.零点4 天前
【2个月 C 语言从入门到精通:零基础系统教程】第十二讲:深入了解指针(五)
c语言·开发语言·网络·笔记·visual studio
彷徨而立4 天前
【VS2026】介绍 Visual Studio 几个重要配置项
visual studio
AndyHuang19764 天前
【避坑指南】Visual Studio 插件报错 “Windows Terminal (wt.exe) was not found in PATH“ 完美解决
ide·windows·visual studio
彷徨而立4 天前
【Visual Studio】msbuild 使用举例
ide·visual studio
blueman88885 天前
VS2022 切换定义(F12 / Go to Definition)反应慢
c++·visual studio
周杰伦fans5 天前
记一次 Visual Studio 突然报错“未能加载 Microsoft.Internal.VisualStudio.Interop”的奇葩经历
microsoft·log4j·visual studio
x138702859576 天前
c语言中srtlen(指针使用计算字符长度)、传值和传址调用
c语言·开发语言·算法·visual studio
robot_???7 天前
Visual studio2022:找不到指定的SDK“Microsoft.NET.Sdk”
microsoft·.net·visual studio