ZeroOne AI
← 返回文章列表

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

运行步骤:

  1. 安装 WinPcap 运行库(或 Npcap 兼容模式);
  2. 将 WpdPack 的 Include/Lib 目录按 .pro 配置放置;
  3. qmake + 构建,以管理员权限运行(WinPcap 需要管理员权限访问网卡);
  4. 观察输出:本机所有网卡(如 "\Device\NPF_{...}")被逐一打印即表示抓包环境就绪。

五、应用价值

六、SEO关键词

SOEM、EtherCAT主站、WinPcap、WpdPack、Qt 5.8、pcap_findalldevs、网卡枚举、EtherCAT 环境搭建、源码分析、Windows 抓包

评论(0