news 2026/4/30 15:11:11

在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/4/22 21:49:47

中盐股份冲刺上交所:半年营收31亿,净利1.6亿 拟募资16亿

雷递网 雷建平 1月1日中国盐业股份有限公司&#xff08;简称&#xff1a;“中盐股份”&#xff09;日前递交招股书&#xff0c;准备在上交所主板上市。中盐股份计划募资16亿&#xff0c;其中&#xff0c;5.25亿用于中盐东兴盐化股份有限公司制盐装置智能化绿色化技术升级改造项…

作者头像 李华
网站建设 2026/5/1 3:01:52

CosyVoice3能否用于无障碍服务?视障人士语音辅助解决方案

CosyVoice3能否用于无障碍服务&#xff1f;视障人士语音辅助解决方案 在智能手机几乎人人拥有的今天&#xff0c;仍有一群人无法“看见”屏幕上的信息。对于全球超过2亿视障人士而言&#xff0c;视觉障碍不仅是生活中的不便&#xff0c;更是数字鸿沟的起点。他们依赖听觉获取信…

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

如何录制prompt音频文件?CosyVoice3支持实时录音与本地上传两种方式

如何录制prompt音频文件&#xff1f;CosyVoice3支持实时录音与本地上传两种方式 在语音合成技术飞速发展的今天&#xff0c;用户不再满足于“机器念字”式的生硬输出。越来越多的应用场景——从虚拟主播到智能客服&#xff0c;从有声书制作到个性化语音助手——都要求声音不仅清…

作者头像 李华
网站建设 2026/5/1 4:06:55

CosyVoice3如何切换推理模式?3s极速复刻 vs 自然语言控制对比分析

CosyVoice3如何切换推理模式&#xff1f;3s极速复刻 vs 自然语言控制对比分析 在短视频内容爆炸、虚拟人设崛起的今天&#xff0c;用户不再满足于“机器朗读”式的冰冷语音。他们想要的是像真人一样的声音——既能精准模仿某个主播的声线&#xff0c;又能根据剧情需要“悲伤地…

作者头像 李华
网站建设 2026/5/1 4:06:11

CosyVoice3语音生成失败怎么办?五大常见问题排查与解决方法

CosyVoice3语音生成失败怎么办&#xff1f;五大常见问题排查与解决方法 在智能语音应用日益普及的今天&#xff0c;声音克隆技术正从实验室走向大众。阿里开源的 CosyVoice3 凭借“3秒复刻音色”“自然语言控制语气”等亮点功能&#xff0c;迅速成为开发者和内容创作者的新宠。…

作者头像 李华
网站建设 2026/5/1 4:06:54

YOLOFuse机器人导航辅助:提升复杂环境感知能力

YOLOFuse机器人导航辅助&#xff1a;提升复杂环境感知能力 在深夜的工业园区里&#xff0c;一台巡检机器人缓缓穿行于设备之间。周围没有灯光&#xff0c;空气中弥漫着轻微水雾——这对依赖可见光摄像头的传统视觉系统来说&#xff0c;几乎是一场“失明”的灾难。然而&#xff…

作者头像 李华