一、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
#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 << " " << 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开发