当前位置: 首页 > 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…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》

引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架&#xff0c;支持"一次开发&#xff0c;多端部署"&#xff0c;可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务&#xff0c;为旅游应用带来&#xf…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现

摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序&#xff0c;以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务&#xff0c;提供稳定高效的数据处理与业务逻辑支持&#xff1b;利用 uniapp 实现跨平台前…...

如何为服务器生成TLS证书

TLS&#xff08;Transport Layer Security&#xff09;证书是确保网络通信安全的重要手段&#xff0c;它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书&#xff0c;可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

AI,如何重构理解、匹配与决策?

AI 时代&#xff0c;我们如何理解消费&#xff1f; 作者&#xff5c;王彬 封面&#xff5c;Unplash 人们通过信息理解世界。 曾几何时&#xff0c;PC 与移动互联网重塑了人们的购物路径&#xff1a;信息变得唾手可得&#xff0c;商品决策变得高度依赖内容。 但 AI 时代的来…...

嵌入式学习笔记DAY33(网络编程——TCP)

一、网络架构 C/S &#xff08;client/server 客户端/服务器&#xff09;&#xff1a;由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序&#xff0c;负责提供用户界面和交互逻辑 &#xff0c;接收用户输入&#xff0c;向服务器发送请求&#xff0c;并展示服务…...

基于SpringBoot在线拍卖系统的设计和实现

摘 要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统&#xff0c;主要的模块包括管理员&#xff1b;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...

基于Springboot+Vue的办公管理系统

角色&#xff1a; 管理员、员工 技术&#xff1a; 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能&#xff1a; 该办公管理系统是一个综合性的企业内部管理平台&#xff0c;旨在提升企业运营效率和员工管理水…...

LangFlow技术架构分析

&#x1f527; LangFlow 的可视化技术栈 前端节点编辑器 底层框架&#xff1a;基于 &#xff08;一个现代化的 React 节点绘图库&#xff09; 功能&#xff1a; 拖拽式构建 LangGraph 状态机 实时连线定义节点依赖关系 可视化调试循环和分支逻辑 与 LangGraph 的深…...