【EtherCAT】Windows+Visual Studio配置SOEM主站——静态库配置+部署
目录
一、准备工作
1. Visual Studio 2022
2. Npcap 1.79
3. SOEM源码
二、静态库配置
1. 修改SOEM源码配置
2. 编译SOEM源码
3. 测试
三、静态库部署
1. 新建Visual Studio工程
2. 创建文件夹
3. 创建主函数
4. 复制静态库
5. 复制头文件
6. 配置头文件路径
7. 添加头文件
8. 配置静态库路径
9. 添加静态库
10. 添加宏
四、测试
1. 网卡测试
2. 问题及解决办法
3. 运行结果
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;
}


相关文章:
【EtherCAT】Windows+Visual Studio配置SOEM主站——静态库配置+部署
目录 一、准备工作 1. Visual Studio 2022 2. Npcap 1.79 3. SOEM源码 二、静态库配置 1. 修改SOEM源码配置 2. 编译SOEM源码 3. 测试 三、静态库部署 1. 新建Visual Studio工程 2. 创建文件夹 3. 创建主函数 4. 复制静态库 5. 复制头文件 6. 配置头文件…...
【Python小游戏示例:猜拳游戏】
当然可以!以下是一个简单的Python小游戏示例:猜拳游戏。在这个游戏中,玩家将与计算机进行猜拳(石头、剪刀、布)。 import randomdef get_computer_choice():choices [石头, 剪刀, 布]return random.choice(choices)d…...
多态实现的必要条件,实现多态的三个方法,输入一个URL的过程,死锁产生的原理和条件,进程和线程的定义及区别,进程通信的几种方式
继承:面相对象编程中的核心概念,子类可以使用父类的属性和方法,无需重新编写,子类还可以添加新的属性和方法来提供特定的实现多态:同一件事,发生在不同的对象上,会产生不同的结果,传递不同的对象会调用对应类中的方法重载(Overload),同一个类中多个同名的方法,参数列表不同,提高…...
Springboot+MybatisPlus项目中,数据库表中存放Date,查出后转为String
新增一条记录时,数据库表中会有一个gmt_created 的字段,存放创建时间。 该值在数据库中的默认值为:CURRENT_TIMESTAMP 在对应的JavaBean中,该值为 gmtCreated, 那么问题来了: 如何让在表中的Date类型&…...
JavaDS —— AVL树
前言 本文章将介绍 AVL 树的概念,重点介绍AVL 树的插入代码是如何实现的,如果大家对 AVL 树的删除(还是和二叉搜索树一样使用的是替换删除法,然后需要判断是否进行旋转调整)感兴趣的话,可以自行去翻阅其他…...
NSSCTF练习记录:[SWPUCTF 2021 新生赛]jicao
题目: 这段PHP代码的意思是: 对index.php文件进行语法高亮显示,插入flag.php文件,变量id的值为POST传递的值,变量json的值为GET传递的json类型的值。当id值为wllmNB且json中含有键为“x”,值为“wllm”的时…...
LabVIEW位移检测系统
工业控制器的位移检测在保证机械设备精确运行中发挥着重要的作用。开发了一种基于LabVIEW的高精度位移检测系统,该系统通过集成硬件与软件的优化配置,实现了对工业控制器位移的精确测量和分析。 项目背景 在传统工业生产中,位移检测系统往往…...
02、MySQL-DML(数据操作语言)
目录 1、添加数据(INSERT) 2、修改数据(UPDATE) 3、删除数据(DELETE) 1、添加数据(INSERT) 注意: 插入数据时,指定的字段顺序需要与值的顺序是一一对应的字符串和日期型数据应该包含在引号中插入的数据大小,应该在字段的规定范围内 给指定…...
vue3 项目部署到线上环境,初始进入系统,页面卡顿大概一分钟左右,本地正常无卡顿。localStorage缓存1MB数据导致页面卡顿。
使用vue3进行项目开发,前端框架使用jeecg-boot进行开发,项目初期,打包部署到生产环境,无异常。某天,进行前端项目打包部署到生产环境,突然出现异常情况,部署到线上环境,初始进入系统…...
软件更新中的风险识别与质量保证机制分析
您好,我是程序员小羊! “微软蓝屏”事件暴露了网络安全哪些问题? 近日,一次由微软视窗系统软件更新引发的全球性“微软蓝屏”事件,不仅成为科技领域的热点新闻,更是一次对全球IT基础设施韧性与安全性…...
QT下载与安装
我们要下载开源的QT,方式下载方式: 官网 登录地址:http://www.qt.io.com 点击右上角的Download. Try.按钮;进入一下画面: 如果进入的是以下画面: 直接修改网址:www.qt.io/download-dev; 改为w…...
Java 2.2 - Java 集合
Java 集合,也叫做容器,主要是由两大接口派生而来:一个是 Collection 接口,主要用于存放单一元素;另一个是 Map 接口,主要用于存放键值对。对于 Collection 接口,其下又有三个主要的子接口&#…...
Linux驱动.之I2C,iic驱动层(二)
一、 Linux下IIC驱动架构 本篇只分析,一个整体框架。 1、首先说说,单片机,的i2c硬件接口图,一个i2c接口,通过sda和scl总线,外接了多个设备device,通过单片机,来控制i2c的信号发生&…...
【STM32】USART串口和I2C通信
个人主页~ USART串口和I2C通信 USART串口一、串口1、简介2、电路要求3、参数及时序 二、USART外设1、USART结构2、波特率发生器 三、数据包1、HEX数据包HEX数据包接收 2、文本数据包文本数据包接收 I2C通信一、简介二、通信协议1、硬件电路2、I2C时序基本单元 三、I2C外设1、简…...
【Material-UI】按钮组:垂直按钮组详解
文章目录 一、按钮组概述1. 组件介绍2. 基本用法 二、垂直按钮组的应用场景1. 导航菜单2. 表单操作3. 选项切换 三、按钮组的样式定制1. 变体(Variants)2. 颜色(Colors) 四、垂直按钮组的优势1. 空间利用2. 可读性与易用性3. 视觉…...
DDR5 的优势与应用
DDR5 是新一代 DRAM 内存,具有一系列强大的功能,可提升可靠性、可用性和可维护性 (RAS),降低能耗并显著提高性能。请查看下方表格,了解 DDR4 和 DDR5 之间的一些主要特性差异。 DDR5 的优势 特性/选项 DDR4DDR5DDR5 优势数据速率…...
STM32 - 笔记
1 STM32的串口通信 【keysking的STM32教程】 第8集 STM32的串口通信_哔哩哔哩_bilibili 波特律动 串口助手...
基于QT实现的简易WPS(已开源)
一、开发工具及开源地址: 开发工具:QTCreator ,QT 5 开源地址: GitHub - Whale-xh/WPS_official: Simple WPS based on QTSimple WPS based on QT. Contribute to Whale-xh/WPS_official development by creating an acc…...
Flask-WTF 表单处理详细教程(第六阶段)
目录 Flask-WTF 表单处理详细教程1. 安装 Flask-WTF2. 创建 Flask 应用3. 创建表单类表单字段解释: 4. 渲染表单渲染模板CSRF 保护 5. 表单验证6. 处理错误7. 完整示例8. 结论 Flask-WTF 表单处理详细教程 Flask-WTF 是 Flask 框架的一个扩展,简化了 We…...
C语言 | Leetcode C语言题解之第330题按要求补齐数组
题目: 题解: int minPatches(int* nums, int numsSize, int n) {int patches 0;long long x 1;int index 0;while (x < n) {if (index < numsSize && nums[index] < x) {x nums[index];index;} else {x << 1;patches;}}retu…...
C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
基于Uniapp开发HarmonyOS 5.0旅游应用技术实践
一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...
深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...
省略号和可变参数模板
本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...
android13 app的触摸问题定位分析流程
一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...
tomcat指定使用的jdk版本
说明 有时候需要对tomcat配置指定的jdk版本号,此时,我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...
