【EtherCAT】Windows+Visual Studio配置SOEM主站——源码配置

news2025/1/24 1:35:22

目录

一、准备工作

1. Visual Studio 2022

2. Npcap 1.79

3. SOEM源码

二、源码部署

1. 新建Visual Studio工程

2. 创建文件夹

3. 创建主函数

4. 复制源代码

5. 删除无关项

6. 将soem源码添加进工程

7. 添加soem头文件

8. 配置头文件路径

9. 配置静态库和静态库路径

10. 定义宏

三、运行测试

1. 网卡测试

2. 问题及解决办法

3. 运行结果

4. 连接从站测试


一、准备工作

1. Visual Studio 2022

        下载地址:略

        安装步骤:略

2. Npcap 1.79

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

0764c6f72328418199a3e06308146f78.png

        安装步骤:三个全选

8a895d2f353a44e89e73a5c1b11601ff.png

3. SOEM源码

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

 

二、源码部署

1. 新建Visual Studio工程

629d7ee1eb7446509f743c27ade4a2dd.png

dbee70ff25b941869f53a0a34d1d353c.png

f28a490482ae4ddb9ca72258f8398770.png

2. 创建文件夹

       在第1步,⑤位置设置的路径下,创建inc、src、soem三个文件夹。

c70a066dd1b4471f8d45d2533080ff97.png

3. 创建主函数

        在第2步创建的src文件夹下,创建主函数main.c

9aca7485d54d4d74bc491693288b4c6a.png

0fc1f2e1731641f5bec7aec1d9ab3efb.png

1b80b31d47dd4a9ebebe8cd05acd72b2.png

cfb5dc111ffd4f54967ce07ebae5ad11.png

4. 复制源代码

        复制SOEM源代码中的osal、oshw、soem三个文件夹,到步骤2创建的soem文件夹下

bef0cb40078b4fcf8c8f35296b9a6b79.png

5. 删除无关项

         ① 进入步骤2创建的soem文件夹下

5701bb8c67da488a88aea4ded900f501.png

9ff40037209c4a959422d43497cf03f0.png

        ② 进入osal文件夹,保留win32文件夹和osal.h文件,其余删除

2e9a1e327f7640e5bce158e274c2074a.png

  • 在osal文件夹中创建src、inc文件夹;
  • 将win32文件夹中的c源代码复制到src文件夹;
  • 将win32文件夹中的头文件复制到inc文件夹;
  • 将osal.h文件复制到inc文件夹;
  • 删掉其余文件,只保留inc、src文件夹。

64f6c8a235c64f4191e22b6db3633055.png

d2f8403ba3424f59a6ed3f47328bd40a.png

d79c40006dee4882a9f33023a41a08a8.png

        ③ 进入oshw文件夹,保留win32文件夹,其余删除

  • 在oshw文件夹中创建src、inc文件夹;
  • 将win32文件夹中的c源代码复制到src文件夹;
  • 将win32文件夹中的头文件复制到inc文件夹;
  • 将win32文件夹中的wpcap文件夹复制到oshw文件夹下;
  • 删掉其余文件,只保留inc、src文件夹、wpcap文件夹。

125f923285b04dff9f1a88feb4e715d3.png

b5fd9f75e9f0423aa4415cf0993565d2.png

fd872cb501ed4f918027ab3891720c52.png

3b222e2b44534ac6a4ed8dede0d67bc9.png

        ④ 进入soem文件夹

  • 在soem文件夹中创建src、inc文件夹;
  • 将soem文件夹中的c源代码复制到src文件夹;
  • 将soem文件夹中的头文件复制到inc文件夹;
  • 删掉其余文件,只保留inc、src文件夹。

a7b5e677c0c740bdb3698b81f43821ea.png

4c06e0d77b98434f89d0f97fdfdc12e4.png

8eb18010c06d4808920cea4dc2d1f1b2.png

6. 将soem源码添加进工程

89cae660f7004bc197459a4f586d6258.png

fbf5071162d245dcbf17aab92e895172.png

8a0b5ded73b440c097433694652dd350.png

1f873e2c63dc4c05bc2b965fb1b03444.png

d448ed6468664ae982047def24d85bc6.png

e65f6f293af7465da62857476205a847.png

        重复步骤①、②、③

e3d2717b3dca474aa9749f8dfb4484aa.png

eedc271ee37a47b8b67f24a4b37d1373.png

3d063a1b82324d249302f69e73214ccd.png

        重复步骤①、②、③

7b70b100a94a48bba79363ecd1e9bf21.png

f32853f6fc6848459e1f6ba898f957e3.png

5067148f99274a1194fae1dbfd7e8d6f.png

e82ad4615d7a454692632eecbabe89b7.png

7. 添加soem头文件

84303b3b55504d6d8f66da11c6bbd354.png

1774522ac679416c8adaec5937644def.png

3fbc214921cf47fe934c8a317154266c.png

3e0dfe4012134d23a1edca2d8d180984.png

4ecfaf6ef10045f3b6c08b64b51172ee.png

cfa7d9632a2e4d25a2b3692f2b1ff20b.png

eac5fe7977674579bd5043a560a78dd5.png

8. 配置头文件路径

2976c73fd3f343c7a4d08fad50146dda.png

5c9dbeb0734d4446ae45d2fc524fb718.png

690ef02ed4bf415f9a301d2bef3289c2.png

5fd6fa0e904e417c94171bbdfefac300.png

        重复⑤、⑥

6ec4fd95f4034dee83bbb8d07a56ccd8.png

        重复⑤、⑥

2755a2320527423c85670732aa589890.png

        重复⑤、⑥

d407b6dd7b974b38ba3a75f2d6c59d80.png

        重复⑤、⑥

f3e1b2d133d8448ab75491495ad6b1d2.png

c0d1beb53605480ebd55b3964f63d819.png

bbe05d58ff05471caca71084a50710b3.png

9. 配置静态库路径和静态库

        同第8步的①、②,打开属性

dd2f233666b54cc7896bfae1e01586ee.png

f661f3b81b104dcc9e311c3bf2921452.png

ef82d7cc6666478bb5f69dde18b3a725.png

441bdfc5bb9d4f2ab6a275629f257e55.png

bee0af56e0c34049a0c8df8523c20d10.png

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

79d5e6a872064a82806f2d87a864733b.png

10. 定义宏

         同第8步的①、②,打开属性

fa82807a319e44d09d6bdef143010366.png

        添加宏:_CRT_SECURE_NO_WARNINGS、WIN32

ec6c460ef94d4c9885479a8d75db148f.png

三、运行测试

1. 网卡测试

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

13ddb1f5076e479eb23e69313c10b3f9.png

a24e22cb5f7f4106a2c07995d8975b25.png

2. 问题及解决办法

        ① 指针未初始化

0830bdd555874254b1fc5035851d8b9b.png

           解决办法:双击上图红色行,跳转到oshw.c文件;第42行,对prev_adapter指针初始化。

50b4fb8b6f1e49f6b1059d5f3023b1df.png

        ② 无法解析外部符号,“x86”与“x64”冲突

106155935d1c45d3a638a88ddb774e0e.png

          解决办法:参考源码部署的“9. 配置静态库和静态库路径”,重新配置静态库路径为:\soem\oshw\wpcap\Lib\x64(原始的静态库路径为:\soem\oshw\wpcap\Lib)

0172a265ac0244e7b7da924caae83c56.png

3. 运行结果

97a520523ae54d2786b83747deab1e57.png

4. 连接从站测试

  • 找到自己的网卡名称,第3步的“运行结果”可以查看自己的网卡名称为:\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;
}

be3e0058c62b4e2cb285c730ad8c2a41.png

610197ef864a42f0a25d8f6846a8c813.png

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1978023.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

xdma的linux驱动编译给arm使用(中断检测-测试程序)

1、驱动链接 XDMA驱动源码官网下载地址为:https://github.com/Xilinx/dma_ip_drivers 下载最新版本的XDMA驱动源码,即master版本,否则其驱动用不了(xdma ip核版本为4.1)。 2、驱动 此部分来源于博客:xd…

多模态MLLM都是怎么实现的(12)-Florence-2

最近一直在打艾尔登法环DLC,疏于更新了,罪过罪过,今天把拉塔恩给过了,也该更新了,停更期间,催更的信息主要是啥时候更新GPU系列的第五篇,不是不更,是刚打完,正好有客户要…

C# Unity 面向对象补全计划 七大原则 之 里氏替换

本文仅作学习笔记与交流,不作任何商业用途,作者能力有限,如有不足还请斧正 本系列作为七大原则和设计模式的进阶知识,看不懂没关系 请看专栏:http://t.csdnimg.cn/mIitr,尤其是关于继承的两篇文章&#xff…

算法022:寻找峰值

寻找峰值. - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/find-peak-element/ 这个题跟上一个题很像,也是寻找一个峰值。此题还特意强调了如果有多个峰…

【数学思维培养】罗博深小学数学青少年数学思维分级课程(3-4年级)

【数学思维培养】罗博深小学数学青少年数学思维分级课程(3-4年级) 背景前摇: 虽然我是学理工科计算机的,但我感觉我在数学方面一直都存在劣势,无论是写程序到了涉及数学计算的地方(比如向量、余弦等&#…

【数据分析--带你认识数据分析,了解数据分析的】

前言: 💞💞大家好,我是书生♡,本阶段和大家一起分享和探索数据分析—基础介绍,本篇文章主要讲述了:数据分析的介绍,Python开源库,配置Jupyter等等。欢迎大家一起探索讨论…

C++程序的编译链接过程

一、预处理 (1) 将所有的#define删除,并且展开所有的宏定义 (2) 处理所有的条件预编译指令,如#if、#ifdef (3) 处理#include预编译指令,将被包含的文件插入到该预编译…

html+css 实现hover边框彩色流动

前言:哈喽,大家好,今天给大家分享htmlcss 绚丽效果!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 文…

人工智能深度学习系列—深入探索IoU Loss及其变种:目标检测与分割的精度优化利器

文章目录 1. 背景介绍2. Loss计算公式3. 使用场景4. 代码样例5. 总结 1. 背景介绍 在深度学习的目标检测和分割领域,评估预测结果与真实标注之间的一致性是提升模型性能的关键。IoU Loss(Intersection over Union Loss)及其变种损失函数&…

【人工智能五】人工智能基础习题

文章目录 壹. 内容补充一. VR/AR/MR的区别1. 三者概念2. 区别 二. 深度学习重要算法及人物介绍1. 反向传播算法2. 卷积神经网络 贰. 习题精选1一. 选择二. 判断题三. 填空题四. 简单题1. 综合2. 深度学习与神经网络 壹. 内容补充 一. VR/AR&…

人工智能与机器学习的相关介绍

文章目录 人工智能的发展历程人工智能与机器学习关系图谱数据处理机器学习ML和深度学习DL的区别人工智能按照学习方式划分监督学习算法无监督学习算法总结 人工智能的发展历程 重要的时间点了解一下: 早在1950年人工智能就已经开始兴起 1997年deep blue战胜了人类国…

一款功能强大的屏幕演示工具,免费版足够使用!

鼠标换肤 | 屏幕画笔 | 放大镜 | 聚光灯 | 屏幕放大 | 倒计时,功能强大的屏幕演示工具 屏幕演示工具适用于Windows平台,特别是Windows 10及以上版本。该软件提供了多种实用功能,包括鼠标换肤、屏幕画笔、放大镜、聚光灯、屏幕放大和倒计时等…

k8s集群的资源发布方式(滚动/蓝绿/灰度发布)及声明式管理方法

目录 1.常见的发布方式 2.滚动发布 3.蓝绿发布 4.实现金丝雀发布(Canary Release) 5.声明式管理方法 1.常见的发布方式 蓝绿发布:两套环境交替升级,旧版本保留一定时间便于回滚优点:用户无感知,部署和回滚速度较…

基于强化学习算法玩CartPole游戏

什么事CartPole游戏 CartPole(也称为倒立摆问题)是一个经典的控制理论和强化学习的基础问题,通常用于测试和验证控制算法的性能。具体来说,它是一个简单的物理模拟问题,其目标是通过在一个平衡杆(倒立摆&a…

Cesium初探-坐标转换

Cesium的坐标系分三种:屏幕坐标、笛卡尔空间直角坐标、地理坐标。 屏幕坐标 屏幕坐标系是一个是平面直角坐标系,即二维笛卡尔坐标系,屏幕左上角为原点(0,0),单位为像素值,屏幕水平方向为X轴&a…

Python | SyntaxError: invalid syntax 深度解析

Python | SyntaxError: invalid syntax 深度解析 在Python编程中,SyntaxError: invalid syntax是一个常见的错误,它表明Python解释器在尝试解析代码时遇到了语法问题。这个错误通常是由于代码中存在拼写错误、缺少符号(如括号、冒号或逗号&a…

Java中的Map(如果想知道Java中有关Map的知识点,那么只看这一篇就足够了!)

前言:在Java编程语言中,集合框架(Collection Framework)提供了一系列用于存储和操作数据的接口和类。其中,Map和Set是两个非常重要的接口,分别用于存储键值对和无重复元素的集合。 ✨✨✨这里是秋刀鱼不做梦…

Nerd Fonts

文章目录 关于 Nerd Fonts重要告示TL;DR字体的各种下载选项 特点 Glyph Setsshell中的图标名称 修补字体Variations 字体安装Option 1: Release Archive DownloadOption 2: Homebrew FontsOption 3: Unofficial Chocolatey or Scoop RepositoriesOption 4: Arch Extra Reposito…

AI在医学领域:医学成像中针对深度神经网络(DNN)的对抗性攻击及其防御策略

关键词:对抗性攻击、医学图像、深度神经网络、模型安全、鲁棒性 机器学习(ML)是医学领域快速发展的一个分支,它利用计算机科学和统计学的方法来解决医学问题。众所周知,攻击者可能通过故意为机器学习分类器创建输入来…

C++11 包装器

1.function包装器 1.1 概念介绍 ret func(x); 上面 func 是什么呢?那么 func 可能是函数名,函数指针,函数对象 ( 仿函数对象 ), 也可能是lamber 表达式对象,这些都是可调用的类型。 函数包装器,也称为函…