代码编织梦想

/* LWR "logical memory write" primitive. Blocking.
 * 逻辑写(LWR) Logical write 原语 阻塞
 * @param[in] port        = port context struct
 *                          端口(port)结构体
 * @param[in] LogAdr      = Logical memory address
 *                          逻辑内存地址
 * @param[in] length      = length of databuffer
 *                          数据缓冲区的长度
 *                          DATA 数据区域的长度
 * @param[in] data        = databuffer to write to slave.
 *                          要写入从站的数据缓冲区
 * @param[in] timeout     = timeout in us, standard is EC_TIMEOUTRET
 *                          超时时间[单位:us(微秒)],标准是EC_TIMEOUTRET[=2000us(微秒)]
 * @return Workcounter or EC_NOFRAME
 *  返回值  工作计数器 或 EC_NOFRAME(无数据帧返回=-1)
 */
int ecx_LWR(ecx_portt *port, uint32 LogAdr, uint16 length, void *data, int timeout)
{
   uint8 idx;/* IDX 索引 */
   int wkc;/* 工作计数器 */
   /* get fresh index *//* 获取最新索引 */
   idx =/* IDX 索引 */
       ecx_getindex(//获取新的帧标识符索引并分配相应的发送缓存区
           port);/* 端口(port)结构体 */
   /* setup datagram *//*设置数据报*/
   ecx_setupdatagram(//在标准以太网帧中生成和设置 EtherCAT 数据报
       port,/* 端口(port)结构体 */
       &(port->txbuf/* 发送缓存区 */[idx/* IDX 索引 */]),
       EC_CMD_LWR, /* 逻辑写(LWR) *//* Logical write */
       idx,/* IDX 索引 */
       LO_WORD(/* 取DWORD低位WORD的宏*/
           LogAdr), /* 逻辑内存地址 */
       HI_WORD(/* 取DWORD高位WORD的宏*/
           LogAdr), /* 逻辑内存地址 */
       length, /* 数据缓冲区的长度 */
       data); /* 要写入从站的数据缓冲区 */
   /* send data and wait for answer *//* 发送数据并等待应答 */
   wkc = /* 工作计数器 */
       ecx_srconfirm(// 发送和接收帧(阻塞)
           port, /* 端口(port)结构体 */
           idx,/* IDX 索引 */
           timeout); /* 超时时间[单位:us(微秒)] */
   /* clear buffer status *//* 清除缓冲区状态 */
   ecx_setbufstat(// 设置发送缓存区(rx buffer)状态
       port, /* 端口(port)结构体 */
       idx,/* IDX 索引 */
       EC_BUF_EMPTY);/* 缓存区状态:空=0 */

   return wkc;/* 工作计数器 */
}

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_25047389/article/details/127156847

EtherCAT主站SOEM函数详解---- ecx_readstate、ecx_writestate-爱代码爱编程

EtherCAT主站SOEM函数详解----状态读取函数 ecx_readstateecx_writestate 在控制驱动器等从站中,经常需要只知道从站的状态,在SOEM开发的主站中,如何读取从站的工作状态是非常重要的,本文将重点讲解SOEM中读取从站工作状态的函数。 ecx_readstate 该函数在ethercatmain.h文件中

EtherCAT主站SOEM函数详解---- ecx_statecheck-爱代码爱编程

EtherCAT主站SOEM函数详解---- ecx_statecheck ecx_statecheck头文件ecx_statecheck源码 介绍状态检测函数,该函数内部调用了状态读取函数,状态读写可以看另一篇博客EtherCAT主站SOEM函数详解---- ecx_readstate、ecx_writestate,本章涉及到相关知识只做简单