SOEM-EtherCAT 源代码解析(附加1):通讯运行环境搭建(WinPcap + Qt)
👁 1
分类:机器人自动化
搭建 SOEM EtherCAT 主站代码分析的运行环境:Win10 + Qt 5.8 + WinPcap(WpdPack 4.1.2),通过 Qt 工程配置与 pcap_findalldevs 枚举网卡代码,验证网卡抓包环境是否就绪。
SOEM-EtherCAT 源代码解析(附加1):通讯运行环境搭建(WinPcap + Qt)
一、项目背景
在正式剖析 SOEM EtherCAT 主站源码之前,需要先准备一套便于编程和调试的代码运行环境。EtherCAT 主站底层依赖网卡驱动进行原始数据帧收发,而 Windows 平台凭借成熟的图形化调试工具和丰富的网络库支持,是前中期代码分析的理想平台。
本篇文章搭建一套"Win10 + Qt + WinPcap"的最小验证环境,先让网卡抓包通道跑通,为后续的报文收发、从站扫描等源码实验打好基础。
二、技术方案:环境选型
| 组件 | 版本/选型 | 用途 |
|---|---|---|
| 操作系统 | Windows 10 | 开发与调试平台 |
| 编译环境 | Qt 5.8.0 | 提供 qmake 工程构建与便捷的 qDebug 输出 |
| 网卡抓包库 | WinPcap(WpdPack 4.1.2) | 提供原始数据包收发接口 pcap_* |
WinPcap 是 Windows 下最经典的抓包/发包库,SOEM 在 Windows 平台的网卡驱动正是基于 WinPcap 实现。通过 WpdPack 开发包,我们可以直接调用 pcap_findalldevs() 枚举本机全部网卡,验证底层通讯通道是否就绪。
三、系统架构:Qt 工程配置
新建 Qt Console 工程,在 .pro 文件中链接 WinPcap 库:
QT += core
QT -= gui
CONFIG += c++11
TARGET = WincapTest
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += main.cpp
DEFINES += QT_DEPRECATED_WARNINGS
# 引入 WinPcap 头文件与库文件路径
INCLUDEPATH += $$PWD/../Wincap/Include
DEPENDPATH += $$PWD/../Wincap/Lib
LIBS += -L$$PWD/../Wincap/Lib/ -lpacket
LIBS += -L$$PWD/../Wincap/Lib/ -lwpcap
关键点:INCLUDEPATH 指向 WpdPack 的 Include 目录(含 pcap.h),LIBS 分别链接 packet 库与 wpcap 库。
四、实施过程:网卡枚举验证代码
main.cpp 中使用 pcap_findalldevs() 枚举本机所有网卡并打印:
#include <QCoreApplication>
#include <QDebug>
#include "pcap.h"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
pcap_if_t *alldevs;
pcap_if_t *d;
int getSize = 0;
char errbuf[PCAP_ERRBUF_SIZE];
// 枚举本机所有网卡设备
if (pcap_findalldevs(&alldevs, errbuf) == -1)
{
qDebug() << errbuf;
}
// 遍历打印每个网卡的名称与描述
for (d = alldevs; d; d = d->next)
{
qDebug() << ++getSize << d->name;
if (d->description)
qDebug() << d->description;
else
qDebug() << "No description available ";
}
// 未找到任何网卡时提示检查 WinPcap 安装
if (0 == getSize)
{
qDebug() << "No interfaces found! Make sure WinPcap is installed";
}
pcap_freealldevs(alldevs);
return a.exec();
}
运行步骤:
- 安装 WinPcap 运行库(或 Npcap 兼容模式);
- 将 WpdPack 的 Include/Lib 目录按 .pro 配置放置;
- qmake + 构建,以管理员权限运行(WinPcap 需要管理员权限访问网卡);
- 观察输出:本机所有网卡(如 "\Device\NPF_{...}")被逐一打印即表示抓包环境就绪。
五、应用价值
- 环境验证:在写任何 EtherCAT 业务代码之前,先用最小程序确认网卡原始帧通道可用,避免把环境问题误判为协议问题;
- 调试基础:SOEM 在 Windows 下的
osal_win32与nicdrv模块正是基于 pcap 接口,本环境可直接单步调试 SOEM 的收发流程; - 后续铺垫:此环境可作为后续"通讯运行环境搭建"系列实验的通用平台,支持从站扫描、报文捕获与分析。
六、SEO关键词
SOEM、EtherCAT主站、WinPcap、WpdPack、Qt 5.8、pcap_findalldevs、网卡枚举、EtherCAT 环境搭建、源码分析、Windows 抓包
