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/9 12:50:42

Scanner类的常用方法:新手教程从零开始

扫描器怎么用&#xff1f;Java新手避坑指南&#xff1a;Scanner类从入门到实战你是不是也遇到过这种情况&#xff1a;兴冲冲写了个程序&#xff0c;想让用户输入名字、年龄或者成绩&#xff0c;结果一运行——要么直接跳过输入&#xff0c;要么报错崩溃&#xff0c;控制台还冒出…

作者头像 李华
网站建设 2026/6/10 12:13:47

一键启动脚本揭秘:cd /root bash run.sh背后的自动化逻辑

一键启动脚本揭秘&#xff1a;cd /root && bash run.sh背后的自动化逻辑 在今天这个AI应用层出不穷的时代&#xff0c;一个开发者最怕的不是模型跑不起来&#xff0c;而是——“我明明照着文档做了&#xff0c;怎么还是报错&#xff1f;”特别是面对语音合成这类依赖庞…

作者头像 李华
网站建设 2026/6/10 12:11:28

CosyVoice3最佳实践建议:选择无噪音清晰音频样本提升克隆质量

CosyVoice3最佳实践建议&#xff1a;选择无噪音清晰音频样本提升克隆质量 在智能语音产品日益普及的今天&#xff0c;用户对“像不像”、“好不好听”的要求越来越高。无论是打造虚拟主播、制作有声书&#xff0c;还是训练专属语音助手&#xff0c;声音克隆技术正成为连接人与A…

作者头像 李华
网站建设 2026/5/1 1:36:43

CosyVoice3使用全指南:极速复刻与自然语言控制两种模式详解

CosyVoice3 使用全指南&#xff1a;极速复刻与自然语言控制深度解析 在内容创作日益依赖语音表达的今天&#xff0c;我们不再满足于“机器念字”式的合成语音。用户期待的是有温度、有个性、能传情达意的声音——就像真人主播一样自然流畅。阿里开源的 CosyVoice3 正是在这一需…

作者头像 李华
网站建设 2026/6/9 18:50:31

如何获取CosyVoice3最新版本?关注GitHub仓库及时同步更新

如何获取 CosyVoice3 最新版本&#xff1f;关注 GitHub 仓库及时同步更新 在语音交互日益普及的今天&#xff0c;用户对 TTS&#xff08;文本转语音&#xff09;系统的要求早已不再满足于“能说话”——他们需要的是有情感、有个性、会说方言、还能听懂指令的声音。阿里开源的…

作者头像 李华