EtherNet/IP协议开发1:从OpENer开始

推荐一个零声学院免费教程,个人觉得老师讲得不错,
分享给大家:[Linux,Nginx,ZeroMQ,MySQL,Redis,
fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,
TCP/IP,协程,DPDK等技术内容,点击立即学习:

https://ke.qq.com/course/417774lowToken=1010783

前言

        这是最好的时代 这是最坏的时代。–《双城记》。

一 EtherNet/IP是什么

EtherNet/IP是应用层协议。是一个建立在标准TCP/IP协议之上应用层协议。

二 EtherNet/IP是谁家的-ODVA组织简介

        ODVA成立于1995年,是一个全球性协会,其成员包括世界领先的自动化公司。ODVA的使命是促进工业自动化中开放的,可互操作的信息和通信技术。ODVA将其独立于媒体的 络协议,通用工业协议或“CIPTM”以及CIP的 络改进版EtherNet/IPTM,DeviceNetTM , CompoNetTM和ControlNetTM视为其核心技术。其负责的主要内容有:

1) 设备的一致性测试认证与互操作;

2) 授权EtherNet/IP技术;

3) 发放Vendor ID代表厂商设备信息;

4) 其下的SIG小组负责各类规范、方针等内容的制定。

EtherNet/IP基础架构

本段文自和图片来自知乎,这段文件就是比较详细的说明,为什么说EtherNet/IP是应用层协议。

1 EtherNet/IP OSI参考模型

        EtherNet/IP的ISO/OSI参考模型如上图所示,其物理层、链路层、 络层、传输层均与标准以太 相同,特点在于其在传输层之上增添了一个封装层,对来自应用层的数据进行 文格式的封装;而应用层采用的是CIP协议,满足其在工业自动化领域的一些功能和服务。

        特点:

1) 服务于各类工业自动化应用;

2) 基于标准的IEEE802.3与TCP/IP Suite;

3) 应用层采用通用工业协议CIP;

4) IT集成,包括Web、OPC等服务;

5) 物理层实现基于标准的以太 控制器;

6) 规定了特定的传输端口,UDP/IP(PORT 44818),TCP/IP(PORT 44818)。

2 EtherNet/IP 各层功能特点

 物理层:

1)传输介质可选铜缆双绞线或光纤;

2)几乎可以容纳无限数量的点对点节点;

3)可以通过嵌入式交换机技术和设备级环 技术来实现线型、星型和环 拓扑;

4)可根据需求选择不同的物理接口:基本的以太 连接,支持COTS现成商用标准,适合IP 20应用;工业等级应用,需性能增强的RJ-45连接器,密封RJ-45连接器以及更紧凑的M12连接器,适合IP 67应用;

数据链路层与 络层:

EtherNet/IP的链路层帧格式如上图所示,与标准以太 没有区别,遵循IEEE 802.3规范设计,并支持全双工传输。

        同时 络层与传输层也使用TCP/IP与UDP/IP进行传输,两种方式分别传输两种不同的消息:TCP/IP是面向连接的点对点传输,并且传输的是封装CIP explicit messages(显示消息),主要用于配置信息与诊断数据的传输;UDP/IP是单对多的广播传输,主要用于实时性要求较高的数据传输,并由Timeout机制检测是否传输出错。

该怎么开发

        自己从0开始开发肯定不现实,需要找一个开源项目,开源github 址,OpENer项目。

OpENer是什么

        OpENer is an EtherNet/IP? stack for I/O adapter devices; supports multiple I/O and explicit connections; includes objects and services to make EtherNet/IP?- compliant products defined in THE ETHERNET/IP SPECIFICATION and published by ODVA (http://www.odva.org).

       翻译一下:OpENer用于EtherNet/IP设备端开发,然后又说OpENer很牛,很厉害。最重要的是OpENer的规范是由https://www.odva.org/发布的。

        

        Users and developers of OpENer can join the respective Google Groups in order to exchange experience, discuss the usage of OpENer, and to suggest new features and CIP objects, which would be useful for the community.

Developers mailing list: https://groups.google.com/forum/#!forum/eip-stack-group-opener-developers

Users mailing list: https://groups.google.com/forum/#!forum/eip-stack-group-opener-users

        这段是说,如果想参与OpENer的开发或者使用,可以加入这两个 区参与讨论,可惜这两个 区都是CSDN。都是google。

        

        OpENer has been developed to be highly portable. The default version targets PCs with a POSIX operating system and a BSD-socket network interface. To test this version we recommend a Linux PC or Windows with Cygwin (http://www.cygwin.com) installed. You will need to have the following installed:

  • CMake
  • gcc
  • make
  • binutils
  • the development library of libcap (libcap-dev or equivalient)

for normal building. These should be installed on most Linux installations and are part of the development packages of Cygwin.

If you want to run the unit tests you will also have to download CppUTest via https://github.com/cpputest/cpputest

For configuring the project we recommend the use of a CMake GUI (e.g., the cmake-gui package on Linux, or the Installer for Windows available at CMake)

         这段文件是说OpENer是高度可移植的,支持poisx接口和BSD-socket接口。测试此版本之前,建议电脑上安装linux系统或者Cygwin ,并且安装了

-cmake、

-gcc、

-make、

-binutils工具(binutils是一个工具箱,里面包含as,ld等等等,基本上安装gcc的时候会自动安装的)、

-libcap库(Libpcap是Packet Capture Libray的英文缩写,即数据包捕获开源的C函数库,用于捕获 卡数据或分析pcap格式的抓包 文。Tcpdump和wireshark均是以此为基础的。
主要功能有: 络 文抓取; 络 文的构建;抓包文件的分析;自定义BFP过滤。)

如果还想做单元测试的话,还得安装CppUTest ,下载地址,先下载下来备用。

开始编译-Compile for Linux/POSIX:

  1. Make sure all the needed tools are available (CMake, make, gcc, binutils)
  2. Change to the /bin/posix
  3. For a standard configuration invoke 
    1. Invoke the  command

    2. Grant OpENer the right to use raw sockets via 

    3. Invoking OpENer:

      e.g. 

OpENer also now has a real-time capable POSIX startup via the OpENer_RT option, which requires that the used kernel has the full preemptive RT patches applied and activated. If you want to use OpENer_RT, instead of step 2, the has to be run to grant OpENEr , , and the  capabilities, needed for the RT mode

OpENer can also be built and installed as a library by setting the CMake flag . To build a shared library, the global option  should also be set. It has only been tested under Linux/POSIX platform.

翻译一下:

第一步,确保工具都安装齐全了,我的电脑ubuntu这些工具应该都有,没有的时候会 错的, 错的时候再说吧。

第二步,看看有没有/bin/posix文件夹,要是没有就新建一个,然后跳进去。操作步骤如下所示:

(⊙o⊙)…,不是这样的(⊙o⊙)…,这样理解是错误的,留着不删当然不是为了筹字数,是为了防止读到此文的人也犯相同的错误。

第二步更正,首先下载OpENer源码,创建一个文件夹,用于放源代码:开始下载,这个有点慢,可以先休息一下:

下载完成以后,会多出一个名为OpENer的文件夹:

进入OpENer文件夹,浏览其中的文件:

进入bin/posix目录如下所示,不是/bin/posi

我们一直posix接口,所以要关注setup_posix.sh文件,改文件的内容如下所示:

cmake -DCMAKE_C_COMPILER=gcc -DOpENer_PLATFORM:STRING=”POSIX” -DCMAKE_BUILD_TYPE:STRING=”” -DBUILD_SHARED_LIBS:BOOL=OFF ../../source

直接执行这个脚本:

有一个警告,不解决也没关系,如果已经安装了doxygen,就不会有这个警告出现的。

不过为了考虑广大开发者的需要,还是解决了吧,安装doxygen软件:

重新执行setup_posix.sh,看到– Doxygen setup done了吧,说明这个问题解决了。

还是这个文件夹,使用ls命令看看,里面多了什么/p>

里面有Makefile文件了,有经验的小伙伴马上就能想到下一步该干什么了,没错make:


  1. lkmao@ubuntu:~/opener/OpENer/bin/posix$ make
  2. Scanning dependencies of target Utils
  3. [ 2%] Building C object src/utils/CMakeFiles/Utils.dir/random.c.o
  4. [ 4%] Building C object src/utils/CMakeFiles/Utils.dir/xorshiftrandom.c.o
  5. [ 6%] Building C object src/utils/CMakeFiles/Utils.dir/doublylinkedlist.c.o
  6. [ 8%] Building C object src/utils/CMakeFiles/Utils.dir/enipmessage.c.o
  7. 声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年11月7日
下一篇 2022年11月7日

相关推荐