0


EtherCat--主站开源的C语言库SOEM-环境搭建

一、SOEM主站环境搭建
(一)安装VS;

(二)下载SOEM 1.3.1 源代码:链接地址 http://openethercatsociety.github.io/

(三)安装WinPcap_4_1_3.exe:链接地址 https://www.winpcap.org/install/default.htm

二、整体目录

(一)soem目录:实现主从站功能的主要文件和源文件(头文件和源文件)
ethercatbase.c : 基于ether功能函数,将数据封装成ethercat帧;
ethercatmain.c : ethercat的初始化,从站数据的读取;
定义ec_slave[],所有从站信息都在这个结构体内;
ethercatcoe.c : CoE模块,应用层CoE协议;
ethercatfoe.c : FoE模块;
ethercateoe.c : EoE模块(设置、获取IP函数,发送、接收以太网帧);
ethercatdc.c : EtherCat分布式时钟,实现主从站之间时针同步。

(二) osal/oshw目录:操作系统接口文件
oshw.c : 网卡管理模块;
nicdrv.c : EtherCat原始套接字驱动;
osal.c : 定时器,延时函数。

(三)test目录
运行一些demo程序,可以用wireshark工具监控ethercat帧。

三、SOEM主站环境搭建

(一)SOEM代码编译

(1)打开VS的命令行工具:x86 Native Tools Command Prompt for VS 2017

(2)进入解压的SOEM目录

cd/d E:\SOEM-1.3.1

(3)编译lib(替换自己VS安装地址)

make_libsoem_lib.bat "D:\Program Files(x86)\Microsoft Visual Studio\2017\Community\VC" x86

(4)生成全部测试文件

make_test_win32_all.bat "D:\Program Files(x86)\Microsoft Visual Studio\2017\Community\VC" x86

生成全部测试文件(生成exe等文件)simple_test.exe文件,至此完成了SOEM源码的编译。

(二)获取当前网络设备

EtherCAT从站板配置好上电,通过网线连接至电脑。

(1)进入到SOEM-1.3.1\test\win32\simple_test目录。

cd test\win32\simple_test\

(2)网络设备列表获取

** 方法一**:直接运行simple_test,得到当前网络设备;

由于电脑可能有多个网络设备(无线、有线、虚拟网络等),可能不好判断实际网络设备。

simple_test

方法二:通过WinPcap来获取设备列表。(使用方法一可直接跳过

winpcap(windows packet capture)是windows平台下一个免费,公共的网络访问系统。开发winpcap这个项目的目的在于为win32应用程序提供访问网络底层的能力。它用于windows系统下的直接的网络编程。Winpcap提供了一个强大的编程接口,它很容易地在各个操作系统之间进行移植,方便程序员进行开发。

1.下载并安装WinPcap运行库:http://www.winpcap.org/install/default.htm

2.下载WinPcap开发包:http://www.winpcap.org/devel.htm

3.新建一个空项目。以管理员的权限打开VS2017,新建一个VC++的Win32控制台应用程序,设置为空项目。

4.添加wpcap.lib和ws2_32.lib两个库。

5.设置项目。打开项目属性,如图,添加WPCAP和HAVE_REMOTE这两个宏定义。

6.添加包含路径(Include和Lib目录)包含目录和库目录。(上面下载的WinPcap开发包)

7.设置UAC。(非必须,推荐设置,让生成的程序能够自主触发管理员权限对话框。无论如何,最终生成的程序都需要以管理员权限运行)

8.直接运行可能会出现,“const char * 与char * 不兼容” 的问题。

9.完成上述步骤后,向项目添加需要的源文件即可。

注意:此处配置的为x64,否则会出现“找不到pcap.h”的情况。由于开发winpcap项目的目的在于为win32应用程序提供访问网络底层的能力,因此开发包里面有大量的WIN32的标识符,直接使用会出现“未定以标识符”错误。

拷贝文件后,运行跳出窗口 显示网络设备列表。

#define WIN32
#include <iostream>
#include "pcap.h"
#pragma comment(lib,"wpcap")

using namespace std;

int  main()
{
    pcap_if_t* alldevs;
    pcap_if_t* d;
    char errbuf[PCAP_ERRBUF_SIZE];
    //获取设备列表
    if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1)
    {
        cout << "Error in pacp_findalldevs_ex:" << errbuf << endl;
        return -1;
    }
    int i = 0;
    for (d = alldevs; d != NULL; d = d->next)
    {
        cout << endl;
        cout << i++ << " " << d->name << endl;
        if (d->description)
            cout << " <" << d->description << ">" << endl;
        else
            cout << " <No description>" << endl;
    }
    if (i == 0)
    {
        cout << "No interfaces found!" << endl;
        return -1;
    }

    pcap_freealldevs(alldevs);

    return 0;
}

(三)SOEM代码测试

(1)simple_test测试

运行simple_test.exe \Device\NPF_{XXXX},其中\Device\NPF_{XXXX}是电脑的网络设备符。

simple_test.exe \Device\NPF_{XXXX}

(2)simple_test测试结果

如果出现“No slave found!”则是没有连接从站控制器,所以并没有扫描到从站信息;

尝试重连EtherCat从站后,扫面结果"1 slaves found and configured."

参考文档:

EtherCat主站开源的C语言库SOEM说明

【SOEM主站】一、SOEM主站环境搭建及连接板子测试

EtherCAT-SOEM主站搭建-windows

VS配置Winpcap环境及获取设备列表

VS2019配置WinPcap开发

标签: 学习

本文转载自: https://blog.csdn.net/qq_41931610/article/details/129304843
版权归原作者 阿凉0702 所有, 如有侵权,请联系我们删除。

“EtherCat--主站开源的C语言库SOEM-环境搭建”的评论:

还没有评论