目录
[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;
}