SOEM 源码解析 ecx_init_redundant

news/2024/7/20 15:53:46 标签: 开源软件
/* Initialise lib in redundant NIC mode
 * 在冗余网卡模式下初始化lib库
 * @param[in]  context  = context struct
 *                        上下文结构体
 * @param[in]  redport  = pointer to redport, redundant port data
 *                        指向冗余端口的指针,冗余端口数据
 * @param[in]  ifname   = Primary Dev name, f.e. "eth0"
 *                        主网卡设备名称(ifname),例如“eth0”
 * @param[in]  if2name  = Secondary Dev name, f.e. "eth1"
 *                        辅助(备用)网卡设备名称(if2name),例如“eth1”
 * @return >0 if OK
 *         如果成功,返回值>0
 */
int ecx_init_redundant(ecx_contextt *context, ecx_redportt *redport, const char *ifname, char *if2name)
{
   int rval, /* 返回值 */
       zbuf;/* 临时缓冲区 */
   ec_etherheadert *ehp;/* 以太网报头定义 */

   context->port->redport /* 指向冗余端口和缓冲区的指针 */
       = redport;/* 指向冗余端口的指针,冗余端口数据 */
   ecx_setupnic(// 将 NIC 连接到套接字(socket)的基本设置。
       context->port,/* 端口(port) */
       ifname, /* 主网卡设备名称(ifname) */
       FALSE);/* 使用主堆栈 */
   rval = /* 返回值 */
       ecx_setupnic(// 将 NIC 连接到套接字(socket)的基本设置。
           context->port,/* 端口(port) */
           if2name,/* 辅助(备用)网卡设备名称(if2name) */
           TRUE);/* 使用辅助堆栈 */
   /* prepare "dummy" BRD tx frame for redundant operation */
   /* 准备“dummy”广播读(BRD) 发送帧(tx frame)以进行冗余操作 */
   ehp /* 以太网报头定义 */
       = (ec_etherheadert *)&(context->port->txbuf2);/* 临时发送缓存区 */
   ehp->sa1 =/* 源 MAC 地址 */
       oshw_htons(// 将机器上的一个无符号短整型数值(uint16)转换为网络字节序[大端模式(big - endian)]
           secMAC[0]);/* 用于 EtherCAT 的辅助源 MAC 地址。*/
   zbuf = 0;/* 临时缓冲区 */
   //在标准以太网帧中生成和设置 EtherCAT 数据报
   ecx_setupdatagram(
       context->port,/* 端口(port) */
       &(context->port->txbuf2/* 临时发送缓存区 */),// 帧缓冲区
       EC_CMD_BRD, /* 广播读(BRD) *//* Broadcast Read */
       0,/* IDX 索引 */ 
       0x0000,/* ADP 地址区 */
       0x0000,/* ADO 地址区 */
       2,/* 不包括 EtherCAT 报头的数据报长度 */
       &zbuf);/* 临时缓冲区 */
   context->port->txbuflength2 /* 临时发送缓存区长度 */
       = ETH_HEADERSIZE/* 以太网报头大小=14U */
       + EC_HEADERSIZE/* EtherCAT 报头大小=12U */
       + EC_WKCSIZE/* EtherCAT 数据报中工作计数器的大小=2U */
       + 2;

   return rval;/* 返回值 */
}

http://www.niftyadmin.cn/n/101796.html

相关文章

不需要高深技术,只需要Python:创建一个可定制的HTTP服务器!

目录 1、编写服务端代码,命名为httpserver.py文件。 2、编写网页htmlcss文件,命名为index.html和style.css文件。 3、复制htmlcss到服务端py文件同一文件夹下。 4、运行服务端程序。 5、浏览器中输入localhost:8080显示如下: 要编写一个简单的能发布…

力扣(LeetCode)424. 替换后的最长重复字符(2023.02.26)

给你一个字符串 s 和一个整数 k 。你可以选择字符串中的任一字符,并将其更改为任何其他大写英文字符。该操作最多可执行 k 次。 在执行上述操作后,返回包含相同字母的最长子字符串的长度。 示例 1: 输入:s “ABAB”, k 2 输出…

Xcode Developer Document 开发者文档

总目录 iOS开发笔记目录 从一无所知到入门 文章目录IntroDeveloper Documentation 打开方式菜单栏点击 | 快捷键方式另一种打开方式Intro 2016年我在学校学Java的时候,要查某个Java类/方法的用法还得自己手动下载一种.chm格式的开发文档文件&#xff0c…

git的使用(终端输入指令)下

文章目录前言1、git 分支创建分支查看分支切换分支合并分支删除分支2.提交到远程仓库远程提交链接一下自己仓库总结前言 上章链接 :git的使用(终端输入指令)上 我们接着上着来说 上章把 git 的 功能实现了一部分,本章我们接着上文…

【Zabbix实战之部署篇】Zabbix使用SNMP监控Linux系统

【Zabbix实战之部署篇】Zabbix使用SNMP监控Linux系统 一、SNMP协议介绍1.SNMP协议简介2.SNMP协议特点二、实践环境介绍三、检查Zabbix监控平台环境1.检查Zabbix相关组件容器状态2.检查Zabbix的首页四、被控端安装SNMP监控工具1.检查被控端服务器系统版本2.安装SNMP监控工具五、…

NCRE计算机等级考试Python真题(一)

第一套试题1、关于数据的存储结构,以下选项描述正确的是A.数据所占的存储空间量B.数据在计算机中的顺序存储方式C.数据的逻辑结构在计算机中的表示D.存储在外存中的数据正确答案: C2、关于线性链表的描述,以下选项中正确的是A.存储空间不一定…

Java实现简单KV数据库

用Java实现一个简单的KV数据库 开发思路: 用map存储数据,再用一个List记录操作日志,开一个新线程将List中的操作写入日志文件中,再开一个线程用于网络IO服务接收客户端的命令,再启动时检查日志,如果有数据就…

JVM学习笔记

JVM跨平台原理 不同操作系统上运行的JVM是不一样的,这才是JVM跨平台性的本质! 不同的操作系统都可以执行通一份字节码文件,字节码是什么呢? 就是把java文件翻译成了另一个格式,为什么要编译成class再给jvm呢&#xf…