news 2026/6/22 22:38:26

在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/17 12:04:15

Elasticsearch下载部署后与Logstash的安全连接方法

如何在 Elasticsearch 部署后安全连接 Logstash&#xff1f;实战详解 HTTPS TLS 加密配置你是不是也经历过这样的场景&#xff1a;花了不少时间完成elasticsearch下载、解压、启动&#xff0c;终于看到{"cluster_name": ...}的响应时松了一口气——但下一秒就开始担…

作者头像 李华
网站建设 2026/6/21 18:32:32

告别机械音!CosyVoice3让AI语音更富有情感媲美真人朗读体验

告别机械音&#xff01;CosyVoice3让AI语音更富有情感媲美真人朗读体验 在播客、有声书和虚拟主播日益普及的今天&#xff0c;用户对语音合成质量的要求早已超越“能听就行”。我们不再满足于那种一字一顿、毫无起伏的机械朗读——真正打动人心的声音&#xff0c;需要情绪、节奏…

作者头像 李华
网站建设 2026/6/21 2:00:08

OllyDbg操作指南:函数调用跟踪与返回值查看

深入OllyDbg&#xff1a;函数调用追踪与返回值捕获实战指南在逆向工程的世界里&#xff0c;程序就像一座没有地图的迷宫。我们手握的不是源码&#xff0c;而是汇编指令、堆栈数据和寄存器状态。而OllyDbg&#xff08;简称OD&#xff09;&#xff0c;正是那把能帮你在这片混沌中…

作者头像 李华
网站建设 2026/6/18 19:24:25

家用电视服务升级攻略:机顶盒固件官网下载操作指南

一次彻底的电视体验升级&#xff1a;从官网刷写机顶盒固件实战全解析 你有没有遇到过这样的情况&#xff1f;家里的电视盒子看4K视频卡顿、应用频繁闪退&#xff0c;甚至某天突然连不上Wi-Fi。重启没用&#xff0c;恢复出厂设置也只是暂时缓解——问题反复出现&#xff0c;客服…

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

对比主流TTS工具CosyVoice3在中文语音合成上的优势分析

对比主流TTS工具&#xff1a;CosyVoice3在中文语音合成上的优势分析 在智能语音助手越来越“懂人心”的今天&#xff0c;你有没有发现——它们的声音开始像熟人了&#xff1f;不是千篇一律的机械朗读&#xff0c;而是带点情绪、有口音、甚至能模仿亲人的语气。这背后&#xff…

作者头像 李华