news 2026/6/10 14:46:36

在SSC(EtherCAT从站协议栈代码)中添加PDO的方法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
在SSC(EtherCAT从站协议栈代码)中添加PDO的方法

作为在SSC(EtherCAT从站协议栈代码)中添加SDO的方法-CSDN博客的延伸,如果将

0x604D加入到0x1601中作为RX PDO使用,将0x60FD加入到0x1A01作为TX PDO使用时如何适配代码呢。

本文将以上述需求为例进行展开叙述。

目录

XML内修改内容

1、修改XML内相应字段,扩充0x604D 0x60FD对象

2、修改XML内相应字段,将0x604D 0x60FD对象分别加入到0x1601 0x1A01中

3、将修改好的XML导入到上位机中,可以在PDO配置界面已经添加好了

SSC内修改内容

1、在TOBJ1601 TOBJ1A01中添加上述实例所需的空间

2、在 TCiA402PDO1601 TCiA402PDO1A01中扩充上述成员

3、在CiA402Objects结构体中扩充上述成员

4、在asEntryDesc0x1601 asEntryDesc0x1A01中扩充上述成员

5、在cia402appl.h中扩充0x604D 0x60FD的实例

6、在DefCiA402AxisObjDic中扩充相关实例

7、在DefCiA402ObjectValues默认参数中扩充相关实例

8、在CiA402_Init中添加实例初始化代码

9、在APPL_OutputMapping APPL_OutputMapping中添加相应实例

上位机验证


XML内修改内容

1、修改XML内相应字段,扩充0x604D 0x60FD对象

2、修改XML内相应字段,将0x604D 0x60FD对象分别加入到0x1601 0x1A01中

<RxPdo Fixed="true"> <Index>#x1601</Index> <Name>Receive PDO mapping 1</Name> <Exclude>#x1600</Exclude> <Exclude>#x1602</Exclude> #code <Entry> <Index>#x640D</Index> <SubIndex>0</SubIndex> <BitLen>32</BitLen> <Name>P040D Torque Mode Velocity Limit</Name> <Comment>object 0x640D:0</Comment> <DataType>DINT</DataType> </Entry> #code </RxPdo> <TxPdo Fixed="true"> <Index>#x1a01</Index> <Name>Transmit PDO mapping 1</Name> <Exclude>#x1A00</Exclude> <Exclude>#x1A02</Exclude> #code <Entry> <Index>#x60FD</Index> <SubIndex>0</SubIndex> <BitLen>32</BitLen> <Name>Digital Inputs</Name> <Comment>object 0x60FD:0</Comment> <DataType>UDINT</DataType> </Entry> #code </TxPdo>

3、将修改好的XML导入到上位机中,可以在PDO配置界面已经添加好了

SSC内修改内容

1、在TOBJ1601 TOBJ1A01中添加上述实例所需的空间

本例在扩充之前为10成员,扩充后为11个成员。

2、在 TCiA402PDO1601 TCiA402PDO1A01中扩充上述成员

3、在CiA402Objects结构体中扩充上述成员

/** * \addtogroup CiA402Objects CiA402 Axis Objects * @{ */ /** \brief Data structure to handle the axis specific object data*/ typedef struct OBJ_STRUCT_PACKED_START { //code INT32 objTorqueModeVelocityLimit; /**< \brief Torque mode velocity limit (0x604D)*/ UINT32 objDigitalInputs;/**< \brief Digital Inputs(0x60FD)*/ //code }OBJ_STRUCT_PACKED_END CiA402Objects;

4、在asEntryDesc0x1601 asEntryDesc0x1A01中扩充上述成员

5、在cia402appl.h中扩充0x604D 0x60FD的实例

/** \brief Object 0x604D Torque mode velocity limit*/ OBJCONST TSDOINFOENTRYDESC OBJMEM sEntryDesc0x604D = {DEFTYPE_INTEGER32, 0x20, (ACCESS_READWRITE | OBJACCESS_RXPDOMAPPING)}; /** \brief Object 0x604D Torque mode velocity limit*/ OBJCONST UCHAR OBJMEM aName0x604D[] = "Torque mode velocity limit"; /** \brief Object 0x60FD Digital Inputs*/ OBJCONST TSDOINFOENTRYDESC OBJMEM sEntryDesc0x60FD = {DEFTYPE_INTEGER32, 0x20, (ACCESS_READ | OBJACCESS_TXPDOMAPPING)}; /** \brief Object 0x60FD Digital Inputs*/ OBJCONST UCHAR OBJMEM aName0x60FD[] = "Digital Inputs";

6、在DefCiA402AxisObjDic中扩充相关实例

注意:0x1601 0x1a01内的成员数需要从10扩充到11。

/** *\brief Object dictionary related to on CiA402 Axis */ PROTO TOBJECT OBJMEM DefCiA402AxisObjDic[] #ifdef _CiA402_ = { //code /* Object 0x1601 */ {NULL,NULL, 0x1601, {DEFTYPE_PDOMAPPING, 11 | (OBJCODE_REC << 8)}, asEntryDesc0x1601, aName0x1601,NULL, NULL, NULL, 0x0000 }, //code /* Object 0x1A01 */ {NULL,NULL, 0x1A01, {DEFTYPE_PDOMAPPING, 11 | (OBJCODE_REC << 8)}, asEntryDesc0x1A01, aName0x1A01, NULL, NULL, NULL, 0x0000 }, //code /* Object 0x604D */ {NULL,NULL, 0x604D, {DEFTYPE_INTEGER32 , 0 | (OBJCODE_VAR << 8)}, &sEntryDesc0x604D, aName0x604D, NULL, NULL, NULL, 0x0000 }, //code /* Object 0x60FD */ {NULL,NULL, 0x60FD, {DEFTYPE_INTEGER32 , 0 | (OBJCODE_VAR << 8)}, &sEntryDesc0x60FD, aName0x60FD, NULL, NULL, NULL, 0x0000 }, //code } #endif

7、在DefCiA402ObjectValues默认参数中扩充相关实例

8、在CiA402_Init中添加实例初始化代码

///////////////////////////////////////////////////////////////////////////////////////// /** \return 0 Init CiA402 device successful ALSTATUSCODE_XX Init CiA402 device failed \brief This function initializes the Axes structures *//////////////////////////////////////////////////////////////////////////////////////// UINT16 CiA402_Init(void) { //code case 0x604D: pDiCEntry->pVarPtr = &LocalAxes[AxisCnt].Objects.objTorqueModeVelocityLimit; break; //code case 0x604D: pDiCEntry->pVarPtr = &LocalAxes[AxisCnt].Objects.objTorqueModeVelocityLimit; break; //code }

9、在APPL_OutputMapping APPL_OutputMapping中添加相应实例

上位机验证

将代码更新到从站内,通过上位机连接从站,选择PDO配置为0x1601 0x1A01,可以看到正常通讯:

更多知识分享:

b站,知乎同名:沧海一条狗

咸鱼ID:tb764914262

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 14:10:17

内存转储文件怎么查?WinDbg分析DMP蓝屏文件实战演示

蓝屏崩溃后怎么查根因&#xff1f;用 WinDbg 深度解析 DMP 文件实战指南你有没有遇到过这样的场景&#xff1a;一台关键服务器突然蓝屏重启&#xff0c;日志里只留下一句“意外关机”&#xff0c;用户抱怨不断&#xff0c;而你却无从下手&#xff1f;或者你的开发驱动在测试机上…

作者头像 李华
网站建设 2026/6/10 17:56:05

ISR与主程序协作机制:快速理解上下文切换

ISR与主程序协作机制&#xff1a;深入理解上下文切换的底层逻辑你有没有遇到过这样的情况&#xff1f;系统明明在正常运行&#xff0c;但某个按键按下后却毫无反应&#xff1b;或者串口接收数据时&#xff0c;偶尔会丢失几个字节。这些问题&#xff0c;往往不是代码写错了&…

作者头像 李华
网站建设 2026/6/9 21:34:49

YOLOFuse权重初始化策略:Kaiming Normal还是Xavier?

YOLOFuse权重初始化策略&#xff1a;Kaiming Normal还是Xavier&#xff1f; 在构建多模态目标检测系统时&#xff0c;我们常常把注意力集中在网络结构设计、融合方式创新或数据增强策略上&#xff0c;却容易忽略一个看似微小却影响深远的环节——权重初始化。尤其是在YOLOFuse这…

作者头像 李华
网站建设 2026/5/29 13:42:22

YOLOFuse CIoU loss 引入:提升边界框回归精度

YOLOFuse CIoU Loss 引入&#xff1a;提升边界框回归精度 在智能安防、自动驾驶等现实场景中&#xff0c;目标检测不仅要“看得见”&#xff0c;更要“辨得准”。尤其是在夜间、烟雾或强光干扰下&#xff0c;单一可见光图像常常力不从心。这时&#xff0c;融合红外&#xff08;…

作者头像 李华
网站建设 2026/5/31 12:31:37

支持WAV和MP3格式:CosyVoice3对prompt音频文件的采样率与时长要求

支持WAV和MP3格式&#xff1a;CosyVoice3对prompt音频文件的采样率与时长要求 在语音合成技术快速演进的今天&#xff0c;声音克隆已不再是实验室里的概念&#xff0c;而是走进了智能客服、虚拟主播、个性化有声书等真实场景。阿里开源的 CosyVoice3 正是这一浪潮中的代表性项目…

作者头像 李华