EtherCAT从站代码注释(部分)

整体软件架构

intmain(void)

{

HW_Init();        /*初始化,包括硬件和A/D、SPI口读写配置*/

MainInit();       /*主函数初始化包含:ESC 
和COE   */

bRunApplication = TRUE;      /*处于运行状态标志*/

do

{

MainLoop();   /*主循环函数,实现周期性和非周期性数据交换*/

} while (bRunApplication == TRUE); 
/*检查是否处于运行状态*/

HW_Release();     //无意义的函数

return 0;        
//设置正确返回

}

Testappl.c

测试应用程序是一个特定的奴隶堆栈提供大部分的指定的EtherCAT

特点和生成机制,这是奴隶的行为不符合

标准。这可以用来检查主行为不正确的奴隶的行为。

反应

Cia402appl从栈代码包含的cia402驱动剖面样品的实现

在[ 1 ]。此实现提供了运动控制器之间的接口应用层通信。

以下功能的支持:

- cia402对象(见8.1章对象)

- cia402状态机(见8.2章状态机)

这支持同步循环位置(CSP)和同步循环

速度(CSV)的操作模式。反应

EL9800appl应用程序层

void APPL_Application(void) 该函数在同步模式和自由模式中均被调用

void    APPL_AckErrorInd(UINT16 stateTrans)        
//当发生主站承认发生错误时调用改程序

下面是包含状态转换函数

UINT16 APPL_StartMailboxHandler(void)   
//从初始化状态向预运行状态转换

UINT16 APPL_StopMailboxHandler(void)   
//从预运行状态向初始化状态转换

UINT16 APPL_StartInputHandler(UINT16*pIntMask)   //从预运行状态向安全运行状态转换

UINT16 APPL_StopInputHandler(void)             //从安全运行状态向预运行状态转换

UINT16 APPL_StartOutputHandler(void)
//从安全运行状态向运行状态转换

UINT16 APPL_StopOutputHandler(void)
//从运行状态向安全运行状态转换

UINT16 APPL_GenerateMapping(UINT16*pInputSize,UINT16* pOutputSize)计算过程数据的位数

voidAPPL_InputMapping(UINT16* pData)    
//copies the inputs from the local memory to the ESC memory

voidAPPL_OutputMapping(UINT16* pData) ESC->code

voidAPPL_Application(void)                              
//8位灯控制函数LATB8-LATB15   
端口控制

UINT8 ReadObject0x1802处理SD0给TxPDO的读取应答

Main函数

intmain(void)

{

/* initialize the Hardware and the EtherCATSlave Controller */

HW_Init();        /*初始化,包括硬件和A/D、SPI口读写配置*/

MainInit();       /*主函数初始化包含:ESC 
和COE   */

bRunApplication = TRUE;      /*处于运行状态标志*/

do

{

MainLoop();   /*主循环函数,实现周期性和非周期性数据交换*/

} while(bRunApplication == TRUE); 
/*检查是否处于运行状态*/

HW_Release();     //无意义的函数

return 0;        
//设置正确返回

}

Tiescappl.c

前面是一些变量定义

voidPDO_ResetOutputs(void)  复位输出

{

sDOOutputs.LEDs = 0x00;

sDO1Outputs.Cmd = 0x00;

sDO1Outputs.Count = 0x00;

sDO1Outputs.MotorData = 0x1000;

}

后面是与el9800appl内容一样

Ecatappl.c

voidPDO_InputMapping()//
执行输入数据操作

voidPDO_OutputMapping()                   
/*将ESC缓存中的输出数据拷贝到当地缓存区

voidECAT_CheckTimer(void)

如果开关ecat_timer_int是,在不用中断的情况下实现看门狗的控制

在这种情况下,每ecat_main周期检查本地一个定时器寄存器

该函数在毫秒触发

voidPDI_Isr(void)                              
//PDI接口中断函数同步模式处理周期性数据 中断向量INT1对应该中断程序

voidSync0_Isr(void)            
//中断中断向量,本程序INT3不使能中断,(分布时钟不用)

voidECAT_SetLedIndication(void)
//根据灯的状态设置运行或故障

voidECAT_Init(void)

{

UINT8 i;                                      
//定义位整形变量

/*Get Maximum Number of SyncManagers*/

UINT16 TmpVar = 0;                            
//定义位整形变量

HW_EscReadWord(TmpVar, ESC_COMM_INFO_OFFSET); 
//读FMMU数 0-8个可配置

TmpVar = SWAPWORD(TmpVar);                    
//交换字 高低位互换

nMaxSyncMan = (UINT8) ((TmpVar & ESC_SM_CHANNELS_MASK)>>ESC_SM_CHANNELS_SHIFT);  
/*nMaxSyncMan变量中位表示当前需要配置的SM通道数,

,用于下面使能代码, 执行完后留下TmpVar的低位*/

/* disable all Sync Manager channels,初始化时将所有的SM通道屏蔽,在应用层中根据需要使能相应的SM通道*/

for (i = 0; i < nMaxSyncMan;i++)             
//不使能所有的单元

HW_DisableSyncManChannel(i);              
//每个SM通道操作不使能

/* initialize the mailbox handler */

MBX_Init();                                   
//邮箱通信机制初始化

/* initialize variables */

bApplEsmPending = FALSE;                      
//AL访问ESM标志

bEcatWaitForAlControlRes = FALSE;             
//ESCAT等待AL控制寄存器

bEcatFirstOutputsReceived = FALSE;            
//ESCAT输入输出正确标志mainloop函数中用

bEcatOutputUpdateRunning = FALSE;            
//运行模式下,输出更新运行标志mainloop函数中用

bEcatInputUpdateRunning = FALSE;             
//安全运行或运行模式下、输入更新运行标志mainloop函数中用

bWdTrigger = FALSE;                           
//SM2看门狗使能不使能标志

EcatWdValue = 0;

Sync0WdCounter = 0;

Sync0WdValue = 0;

bDcSyncActive = FALSE;                        
//分布时钟同步使能,mainloop函数中用

bLocalErrorFlag = FALSE;

u16LocalErrorCode = 0x00;                     
//错误标志

u16ALEventMask = 0;                           
//在预运行和安全运行状态下将被赋给X204

/* initialize the AL Status register */

nAlStatus    = STATE_INIT;                    
//AL状态赋值X01  初始化状态

SetALStatus(nAlStatus, 0);                    
//初始化通信变量和外设灯控制情况 ,只设置al  故障状态指示led

nEcatStateTrans = 0;                          
//状态切换标志为

u8EcatErrorLed = LED_OFF;                      //错误指示灯,运行状态错误指示灯初始值为

bEscIntEnabled = FALSE;                       
//ESC中断SM2/3使能标志,mainloop函数中用

/* initialize the COE part */

COE_Init();                                   
//COE部分变量初始化

}

void COE_Init(void)

{

pCoeSendStored = 0;

nSdoInfoFragmentsLeft = 0;

}

PROTO   TMBX MBXMEM * VARMEM pCoeSendStored;

/** if the mailbox service could not be sent(or stored),                                                               the CoE service will be stored in this variable

and will be sentautomatically from the mailbox handler                                                               (COE_ContinueInd) when the send mailbox will be read

the next time from themaster

/ **如果邮箱服务无法发送(或存储),COE服务将被存储在该变量,

当邮箱下次读取主战的时候,将自动从邮箱处理程序发送

* /

PROTO UINT16          VARMEM                nSdoInfoFragmentsLeft;
/**< \brief Number of fragments which need to betransmitted*/需要被传输的片段数量

Ecatappl.c中

Mainloop()

运行模式判断:

输入输出状态判断,并置为相应的标志位

Ecatapplication

APPL_Application();          /*/该函数主要实现个灯和个开关量以及一路A/D转换值,备与主站之间数据交换

位于tiescappl中,该函数被SYNCISR 调用,或在sync不被支持时被mainloop调用。

*/

调用ECAT-Main;完成非周期数据操作,实现ESM和mailbox

调用ECATCheckError

时间: 2024-12-25 18:28:59

EtherCAT从站代码注释(部分)的相关文章

EtherCAT从站代码配置

从站代码配置 参考EtherCATSlave Implementation Guide(EtherCAT从站实施指南)作为从站实施的开始 Beckhoff将从站协议栈代码(SSC)-源代码免费开放给所有ETG会员. EtherCAT从站实施套件也可以从相关供应商获取.EtherCAT从站协议栈可以从倍福官网获取. 图中各设备规范解释如下: FoE:File overEtherCAT; EoE:Ethernetover EtherCAT; SoE:SERCOSover EtherCAT; CoE:

倍福提供的EtherCAT从站代码包解析

用倍福的从站配置工具得到的源代码有以下 1 主要代码 ecatappl.c ecatappl.h Ecatappl:  EtherCAT从站应用层接口,整个协议栈运行的核心模块, EtherCAT从站状态机和过程数据接口.Main()函数的定义,输入输出程数据 对象的映射处理,ESC与处理器本地内存的输入输出过程数据的交换等; ecatslv.c ecatslv.h Ecatslv:处理EtherCAT状态机模块.状态机转换请求由主站发起,主 站将请求状态写入A1Control寄存器中,从站采用

Beckoff的EtherCAT从站代码架构解析

用倍福的从站配置工具得到的源代码有以下 2014/12/26  11:24             1,021 1.TXT 2014/12/26  11:24                 0 2.txt 2012/04/11  20:43            22,131 aoeappl.c 2012/04/11  20:43             1,578 aoeappl.h 2012/04/11  20:43             1,757 bootmode.c 2012/04

如何开发EtherCAT从站设备

作为新型工业以太网,EtherCAT网络由于开放性.系统构建成本低和快速性被广泛关注,开发相应的从站设备可以把该网络引入自动化领域,将对自动化传输领域起到很大的推动作用.EtherCAT网络从站设备分为简单从站设备和复杂从站设备,简单从站设备位I/O从站,一般只需要从站接口控制器提供的资源就可以实现,复杂从站控制器则需要应用程序控制器,应用程序控制器完成网络数据的存取和具体应用程序的执行. 在硬件上,主要考虑从站接口控制器的选择和从站应用程序控制器的选择.从站接口控制器可以为ASIC芯片或FPG

PHPDocumentor代码注释规范说明

   PHPDocumentor是一个的用PHP写的道具,对于有规则注释的php程序,它能够快速生成具有相互参照,索引等功能的API文档. 标记 用途 描述 @abstract   抽象类的变量和方法 @access public, private or protected 文档的访问.使用权限. @access private 表明这个文档是被保护的. @author 张三 <[email protected]> 文档作者 @copyright 名称 时间 文档版权信息 @deprecate

EA强大功能之代码注释

前面讲了EA如何方便我们生成代码,这次讲一下,如何生成详细的注释. 1.文件表头注释 (1)点击工具----选项 在常规项里修改作者: 在代码工程中修改代码工程的默认语言. (2)修改文件模板 点击代码工厂模板以后如图: 修改语言--点击File,修改模板.点击保存.完成. 2.类表头注释:(以SqlUserDAL类为例) 修改类的信息,如图所示: 3.方法前注释 添加一个类的方法,填写齐全的信息.如图: 法前的注释主要是介绍本方法的功能以及参数,所以填写全这两个就行. 4.参数的注释 点击编辑

vs2010代码注释自动生成api文档

最近做了一些接口,提供其他人调用,要写个api文档,可是我想代码注释已经写了说明,能不能直接把代码注释生成api?于是找到以下方法 环境:vs2010 先下载安装Sandcastle 和Sandcastle Help File Builder 下载地址 http://sandcastle.codeplex.com/ http://shfb.codeplex.com/ 其中Sandcastle Help File Builder安装较复杂,安装红框内的即可 安装完成后,然后让要使用的项目输出xml

词法分析器:代码注释

前沿:词法分析器是将一段程序的代码按照类别分开.一般来说是将关键字, 变量名  , 常数 运算符( + _ * / )和界符分类词法分析算是编译的基础把今天上编译原理的实验课, 看了看  老师给的代码 添加了一些注释大致的流程是这样的:规定关键字的符号是10数字的符号是数字本身+ - *  = 这些符号代码中的case里面有(分别是13 14 ...),可以看懂的首先, 把程序存到制定的内存区域, 这里是划出了一个连续的空间(放到字符数组);然后再按字节读取里面的内容 , 当读到空格(" &qu

DZ3.2文章内容页代码注释,很不错的。

DZ3.2文章内容页代码注释,很不错的.<!--{template common/header}--><!--e之路网络科技--文章页--> <script type="text/javascript" src="{$_G['setting']['jspath']}forum_viewthread.js?{VERHASH}"></script><script type="text/javascript&