当前位置: 首页 > news >正文

【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

0764c6f72328418199a3e06308146f78.png

        安装步骤:三个全选

8a895d2f353a44e89e73a5c1b11601ff.png

3. SOEM源码

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

 

二、静态库配置

1. 修改SOEM源码配置

f7e6e9645af049cf8ea17fb1dd88fc32.png

        ① 双击打开CMakeLists.txt

        ② 找到最后一行

9a0b5351163f4b8b8faf31b98e09c1c4.png

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

ed8f5cd9e1ec4e0db7cc145eb66c55b8.png

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

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

583f88cef67b4b008058a3d672f6e758.png

2. 编译SOEM源码

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

79bc6a897a7a46e982645163c2381de9.png

        ② 切换到SOEM根目录

d3b37adffec1475ea36d294a8351b24f.png

        ③ 创建build文件夹  mkdir build

0898792f092e4ccd9e64ae7b81a5dd91.png

        ④ 进入build文件夹  cd build

4dcc646d21f24a6f9f66ed78947495c4.png

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

54d36068f4c24f62af6d593ca9720ad2.png

        ⑥ 编译:nmake

989bcbcc212d457e97e2cf3689d99154.png

3. 测试

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

ce6b30080451460492d6cc587ca839aa.png

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

8b90ace2f4314e69adb1fdda5f3f5b8e.png

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

456629a0c78e46d980de9816638c948f.png

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

7c128cd8c0424ec8859ebc2794fe78bf.png

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

fe131b2767354d42bb7cbca17ab15854.png

 

三、静态库部署

1. 新建Visual Studio工程

9861b4c7463a4962ba70c7553dc216a4.png

668271170c574d239dedd02973dd7d89.png

c482b8ac8a024e77b21fb339a8b58663.png

2. 创建文件夹

        创建inc、src、lib文件夹

975104429dd24c31aa98890221ef556d.png

3. 创建主函数

        在src文件夹中创建main.c

6329b13b8992422088c5da048da7df02.png

939a278fe92642008a511ea47bd6eae5.png

2726a81e8d394bea8b473f79ca13c98c.png

3c943a4675644da2856cadcee3577ead.png

4. 复制静态库

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

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

bff6f958ca2b463ab675387560fe98bb.png

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文件夹

72cff87f7aec40bb99ad4e3f6a37de99.png

6. 配置头文件路径

125b0b7798574d06a41e6831d761170e.png

bed8a67b6a1b45c5a117e79f4c4452a3.png

eff633958456407795b89fd328bf7300.png

f59ecab04ad84f148c8f015b71e436dd.png

7100f88278ea47418c1459414b3248b4.png

7. 添加头文件

99c3a2db13764f4ebbd617ed266aaa48.png

8f1c3fb02e75425d95314732b2054628.png

ac89a8d3c1c843b898302ad274406a4c.png

743e0190ea5d49d795806d6be9ce5fe2.png

65130316ba7444619a950b86920c35ac.png

8. 配置静态库路径

        打开属性

3174c088e8b84e1a8e437125fa7a9b90.png

047cd82848c24fb0b5aee840ee76862d.png

660ad6c1d9104e0e96238a58a7fdd774.png

6bea57de926e4630954f26e6ec265654.png

9. 添加静态库

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

19280eea5f6b4815aea3b9fd5e04831e.png

db6317a3280c43eeba4a5942c7f6f40f.png

10. 添加宏

       添加宏:_CRT_SECURE_NO_WARNINGS、WIN32

55c5043de02d4cd08c62692342efd854.png

dc96273f216f44ff8ec65435ac82ba23.png

 

四、测试

1. 网卡测试

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

f98875c0b0ac4848b68f7381ec516c50.png

2. 问题及解决办法

        ① 找不到头文件

2016aed6c4cd43c496e46754c35d38da.png

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

c13ebb3da2f94cefbbf16656f7d92310.png

6d2a2ed4745d4025adc0c95762476f07.png

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

f842180c71094c90a9f1e9b49f2d5b8c.png

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

3. 运行结果

5aa146b3b42d4c068b91a64acc892d27.png

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;
}

890165a085bf4bb185deee7c8f620781.png

f92c4c5776d14363a805c5a29fafd614.png

 

 

相关文章:

【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小游戏示例:猜拳游戏】

当然可以&#xff01;以下是一个简单的Python小游戏示例&#xff1a;猜拳游戏。在这个游戏中&#xff0c;玩家将与计算机进行猜拳&#xff08;石头、剪刀、布&#xff09;。 import randomdef get_computer_choice():choices [石头, 剪刀, 布]return random.choice(choices)d…...

多态实现的必要条件,实现多态的三个方法,输入一个URL的过程,死锁产生的原理和条件,进程和线程的定义及区别,进程通信的几种方式

继承:面相对象编程中的核心概念,子类可以使用父类的属性和方法,无需重新编写,子类还可以添加新的属性和方法来提供特定的实现多态:同一件事,发生在不同的对象上,会产生不同的结果,传递不同的对象会调用对应类中的方法重载(Overload),同一个类中多个同名的方法,参数列表不同,提高…...

Springboot+MybatisPlus项目中,数据库表中存放Date,查出后转为String

新增一条记录时&#xff0c;数据库表中会有一个gmt_created 的字段&#xff0c;存放创建时间。 该值在数据库中的默认值为&#xff1a;CURRENT_TIMESTAMP 在对应的JavaBean中&#xff0c;该值为 gmtCreated&#xff0c; 那么问题来了&#xff1a; 如何让在表中的Date类型&…...

JavaDS —— AVL树

前言 本文章将介绍 AVL 树的概念&#xff0c;重点介绍AVL 树的插入代码是如何实现的&#xff0c;如果大家对 AVL 树的删除&#xff08;还是和二叉搜索树一样使用的是替换删除法&#xff0c;然后需要判断是否进行旋转调整&#xff09;感兴趣的话&#xff0c;可以自行去翻阅其他…...

NSSCTF练习记录:[SWPUCTF 2021 新生赛]jicao

题目&#xff1a; 这段PHP代码的意思是&#xff1a; 对index.php文件进行语法高亮显示&#xff0c;插入flag.php文件&#xff0c;变量id的值为POST传递的值&#xff0c;变量json的值为GET传递的json类型的值。当id值为wllmNB且json中含有键为“x”&#xff0c;值为“wllm”的时…...

LabVIEW位移检测系统

工业控制器的位移检测在保证机械设备精确运行中发挥着重要的作用。开发了一种基于LabVIEW的高精度位移检测系统&#xff0c;该系统通过集成硬件与软件的优化配置&#xff0c;实现了对工业控制器位移的精确测量和分析。 项目背景 在传统工业生产中&#xff0c;位移检测系统往往…...

02、MySQL-DML(数据操作语言)

目录 1、添加数据(INSERT) 2、修改数据(UPDATE) 3、删除数据(DELETE) 1、添加数据(INSERT) 注意&#xff1a; 插入数据时&#xff0c;指定的字段顺序需要与值的顺序是一一对应的字符串和日期型数据应该包含在引号中插入的数据大小&#xff0c;应该在字段的规定范围内 给指定…...

vue3 项目部署到线上环境,初始进入系统,页面卡顿大概一分钟左右,本地正常无卡顿。localStorage缓存1MB数据导致页面卡顿。

使用vue3进行项目开发&#xff0c;前端框架使用jeecg-boot进行开发&#xff0c;项目初期&#xff0c;打包部署到生产环境&#xff0c;无异常。某天&#xff0c;进行前端项目打包部署到生产环境&#xff0c;突然出现异常情况&#xff0c;部署到线上环境&#xff0c;初始进入系统…...

软件更新中的风险识别与质量保证机制分析

​ ​ 您好&#xff0c;我是程序员小羊&#xff01; “微软蓝屏”事件暴露了网络安全哪些问题&#xff1f; 近日&#xff0c;一次由微软视窗系统软件更新引发的全球性“微软蓝屏”事件&#xff0c;不仅成为科技领域的热点新闻&#xff0c;更是一次对全球IT基础设施韧性与安全性…...

QT下载与安装

我们要下载开源的QT&#xff0c;方式下载方式&#xff1a; 官网 登录地址&#xff1a;http://www.qt.io.com 点击右上角的Download. Try.按钮&#xff1b;进入一下画面&#xff1a; 如果进入的是以下画面&#xff1a; 直接修改网址&#xff1a;www.qt.io/download-dev; 改为w…...

Java 2.2 - Java 集合

Java 集合&#xff0c;也叫做容器&#xff0c;主要是由两大接口派生而来&#xff1a;一个是 Collection 接口&#xff0c;主要用于存放单一元素&#xff1b;另一个是 Map 接口&#xff0c;主要用于存放键值对。对于 Collection 接口&#xff0c;其下又有三个主要的子接口&#…...

Linux驱动.之I2C,iic驱动层(二)

一、 Linux下IIC驱动架构 本篇只分析&#xff0c;一个整体框架。 1、首先说说&#xff0c;单片机&#xff0c;的i2c硬件接口图&#xff0c;一个i2c接口&#xff0c;通过sda和scl总线&#xff0c;外接了多个设备device&#xff0c;通过单片机&#xff0c;来控制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. 变体&#xff08;Variants&#xff09;2. 颜色&#xff08;Colors&#xff09; 四、垂直按钮组的优势1. 空间利用2. 可读性与易用性3. 视觉…...

DDR5 的优势与应用

DDR5 是新一代 DRAM 内存&#xff0c;具有一系列强大的功能&#xff0c;可提升可靠性、可用性和可维护性 (RAS)&#xff0c;降低能耗并显著提高性能。请查看下方表格&#xff0c;了解 DDR4 和 DDR5 之间的一些主要特性差异。 DDR5 的优势 特性/选项 DDR4DDR5DDR5 优势数据速率…...

STM32 - 笔记

1 STM32的串口通信 【keysking的STM32教程】 第8集 STM32的串口通信_哔哩哔哩_bilibili 波特律动 串口助手...

基于QT实现的简易WPS(已开源)

一、开发工具及开源地址&#xff1a; 开发工具&#xff1a;QTCreator &#xff0c;QT 5 开源地址&#xff1a; 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. 创建表单类表单字段解释&#xff1a; 4. 渲染表单渲染模板CSRF 保护 5. 表单验证6. 处理错误7. 完整示例8. 结论 Flask-WTF 表单处理详细教程 Flask-WTF 是 Flask 框架的一个扩展&#xff0c;简化了 We…...

C语言 | Leetcode C语言题解之第330题按要求补齐数组

题目&#xff1a; 题解&#xff1a; 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…...

[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?

&#x1f9e0; 智能合约中的数据是如何在区块链中保持一致的&#xff1f; 为什么所有区块链节点都能得出相同结果&#xff1f;合约调用这么复杂&#xff0c;状态真能保持一致吗&#xff1f;本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里&#xf…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命

在华东塑料包装行业面临限塑令深度调整的背景下&#xff0c;江苏艾立泰以一场跨国资源接力的创新实践&#xff0c;重新定义了绿色供应链的边界。 跨国回收网络&#xff1a;废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点&#xff0c;将海外废弃包装箱通过标准…...

sqlserver 根据指定字符 解析拼接字符串

DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展&#xff0c;光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域&#xff0c;IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选&#xff0c;但在长期运行中&#xff0c;例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

ip子接口配置及删除

配置永久生效的子接口&#xff0c;2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)

前言&#xff1a; 最近在做行为检测相关的模型&#xff0c;用的是时空图卷积网络&#xff08;STGCN&#xff09;&#xff0c;但原有kinetic-400数据集数据质量较低&#xff0c;需要进行细粒度的标注&#xff0c;同时粗略搜了下已有开源工具基本都集中于图像分割这块&#xff0c…...

云原生安全实战:API网关Kong的鉴权与限流详解

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关&#xff08;API Gateway&#xff09; API网关是微服务架构中的核心组件&#xff0c;负责统一管理所有API的流量入口。它像一座…...

C语言中提供的第三方库之哈希表实现

一. 简介 前面一篇文章简单学习了C语言中第三方库&#xff08;uthash库&#xff09;提供对哈希表的操作&#xff0c;文章如下&#xff1a; C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...