EtherCAT协议栈开发:SSC工具Excel对象描述文件创建与应用指南

天资达人 时政新闻 2026-09-29 4808 0

前言:前期我们介绍了EtherCAT数据映射关系、XML与程序的对应规则、程序源文件核心内容,以0x7000、0x1600等典型对象为例,拆解了XML配置与程序代码的关联逻辑,详解了CoE协议对象字典的内在机制,帮助大家掌握通过XML配置调整协议栈功能、程序解析落地配置的核心方法。

本期我们将聚焦SSC工具Excel对象描述文件,以5.13版本的SSC工具生成的Excel基础应用表格为例,从文件创建、语法规则、设计规范、手动映射配置等方面,全方位讲解EtherCAT从站对象字典的标准化设计流程,搞定协议栈开发的核心配置环节!

一、创建对象描述文件(Excel)

先创建一个新的SSC项目,然后通过Tool→Application→Create New即可生成(如图所示),这将创建一个新的xlsx文件,以表格形式定义应用数据。

wKgZO2q6Ds2AbmayAAISLjsxzQI308.png

二、

对象描述文件(Excel)的定义与设计语法

使用SSC TOOL创建的Excel表如下图所示,可点击表格最左侧的“2”或者“+”,展开表格。

1.注释

单行注释以//开头(如图所示),该行内容将被忽略。

wKgZO2q6DwKAMCFaAACW44oUzYI114.png

2.Index--对象索引

对象索引必须采用0xZZZZ格式(Z为十六进制值),否则整行将被跳过。

以下对象已固定包含在SSC中,不得在文件中重复定义:0x1000、0x1001、0x1008、0x1009、0x100A、0x1010、0x1011、0x1018、0x10F0、0x10F1、0x10F3、0x10F8、0x1C00、0x1C32、0x1C33。

3.ObjectCode--对象代码

有效的对象代码包括VARIABLE、ARRAY或RECORD:

VARIABLE:变量类型,指该对象只有一个类型的条目

ARRAY:数组类型,指该对象包含多个同一类型的条目

RECORD:记录/结构类型,指该对象包含多个具有不同类型的条目

不同对象代码的示例如图所示,若未设置该值,系统将根据定义的条目自动设置对象代码。

在生成的ESI文件和源代码中,代码为ARRAY或RECORD的对象会额外包含一个子索引0(Subindex0)条目,用于表示条目的数量,程序如图所示:

(1)Object0x8000 VARIABLE:

wKgZPGq6DyqATq7nAAFGmUQHd5s121.png

(2)Object0x8001 ARRAY:

wKgZPGq6DzqAb7IWAAMtQBVFpvs534.png

(3)Object0x8002 RECORD:

wKgZO2q6D0iAeuFGAAMy_ZYa2xs498.png

4.SI--子索引(Subindex)

子索引可以是1到255之间的十进制或十六进制值。

若为条目范围,应使用“n..m”语法,例如“1..15”。

若对象代码为RECORD且条目已定义名称,则可在条目名称中使用占位符“{_SI_:d}”,该占位符将被替换为子索引(按指定格式)。子索引格式的使用方法如图所示。

wKgZPGq6D1mAS5DGAAETd8MPnAc252.png

5.DataType--数据类型

支持的数据类型如下表所示。

设置条目数据类型时,应使用“Base Data Type”列或SSC中的语法。指定对象结构时,应遵守对象设计规则。若需要添加补位(16位对齐),应添加填充条目,表示法为pad_x,其中x表示位宽,范围为1到15。

Index Name Base Data Type Bit Size
0x0001 BOOLEAN BOOL/BIT 1
0x001E BYTE BYTE 8
0x001F WORD WORD 16
0x0020 DWORD DWORD 32
0x0030 BIT1 BIT1 1
0x0031 BIT2 BIT2 2
0x0032 BIT3 BIT3 3
0x0033 BIT4 BIT4 4
0x0034 BIT5 BIT5 5
0x0035 BIT6 BIT6 6
0x0036 BIT7 BIT7 7
0x0037 BIT8 BIT8 8
0x002D BITARR8 BITARR8 8
0x002E BITARR16 BITARR16 16
0x002F BITARR32 BITARR32 32
0x0002 INTEGER8 SINT 8
0x0003 INTEGER16 INT 16
0x0004 INTEGER32 DINT 32
0x0015 INTEGER46 LINT 64
0x0005 UNSIGNED8 USINT 8
0x0006 UNSIGNED16 UINT 16
0x0007 UNSIGNED32 UDINT 32
0x001B UNSIGNED64 ULINT 64
0x0008 REAL32 REAL 32
0x0011 REAL64 LREAL 64
0x0009 VISIBLE_STRING STRING(n) 8*n
0x000A OCTET_STRING ARRAY [0..n] OF BYTE 8*(n+1)
0x000B UNICODE_STRING ARRAY [0..n] OF UINT 16*(n+1)
0x0260 ARRAY_OF_INT ARRAY [0..n] OF INT 16*(n+1)
0x0261 ARRAY_OF_SINT ARRAY [0..n] OF SINT 8*(n+1)
0x0262 ARRAY_OF_DINT ARRAY [0..n] OF DINT 32*(n+1)
0x0263 ARRAY_OF_UDINT ARRAY [0..n] OF UDINT 32*(n+1)

6.Default/Min/Max Value

可在“DefaultValue”、“MinValue”、“Max Value”列中定义相关数值,格式取决于所定义的数据类型。“MinValue”和“MaxValue”列不会被SSC解析,可以留空,Excel表中默认隐藏这两列。

wKgZPGq6D4GAcHLwAAVOFKQBe68472.png

7.M/O/C, B/S and rx/tx

(1)M/O/C:定义条目是强制(M)、可选(O)还是条件(C)的。该值仅会写入ESI文件,对从站应用无影响。

M/O/C列默认隐藏,可选的PDO映射对象设为O,强制的映射对象设为M或留空。

(2)B/S:指定条目是备份对象(B)还是设置对象(S)。

(3)rx/tx:指定条目是否可映射到rx(输出)或tx(输入)PDO(这里的输入输出是以主站的角度来看的)。

PDO用于实时的数据更新,RxPDO是指以从站作为参考,从站接受主站的数据;TxPDO是指以从站作为参考,从站发给主站的数据。

8.Access

定义通过CoE协议的访问权限。访问权限(只读、只写、可读可写)在PreOP、SafeOP、OP状态下可以相同,也可以不同,条目访问权限如下表所示。

wKgZO2q6D7-ACAIIAALCJCBSJVg774.png

不同状态的访问权限用逗号“,”分隔。例如:某条目在SafeOP和OP状态下只读,在PreOP状态下可写,则访问权限应设为ro, wr_preop。

若同步管理器(SM)分配对象在PreOP状态下可写,则会下载PDO分配(ESI标志PDOAssign为true)。请注意,即使仅打算修改其中一个同步管理器分配对象,所有同步管理器分配对象都必须设置为可写。

若PDO映射对象在PreOP状态下可写,则会下载PDO配置(ESI标志PDOConfig为true)。请注意,即使仅打算修改其中一个PDO映射对象,所有PDO映射对象都必须设置为可写。

9.CoeRead/CoeWrite

若需要由应用处理CoE读和写请求,可在这两列中添加函数名,例如:CoeRead/CoeWrite,如图所示。

wKgZPGq6D6OAPPQfAAEvG_DAryc044.png

解析器将在xxxObjects.h中生成对应的函数声明,并在应用C文件不存在的情况下,在应用C文件中生成空函数体,如图所示。

wKgZPGq6D-OAbMZQAAeRZaxna0s631.png

三、对象描述文件设计规则

1.实现访问对象字典函数时,SSC 对 CoE 对象内存分配要求如下:

-长度≤8-Bit的子索引字段,必须包含在以对象起始地址的字边界偏移处分配的16bit块中(长度≤8-Bit的需要16bit对齐)。

-长度>8-Bit的子索引字段,必须始终从对象起始地址的字边界偏移处开始(起始位置必须是2的倍数)。

2.PDO映射和同步管理器分配对象生成规则

从站应用数据以对象的形式组织,仅允许定义制造商特定范围(0x2000–0x5FFF)和配置文件特定范围(0x6000–0x9FFF)内的对象。

0x2000–0x5FFF对象会被添加到在线和离线对象字典中,但不会被添加到映射对象中;

0x6000–0x9FFF适用映射和分配规则,如图所示。

wKgZO2q6D_mAJvjxAAGj2R1EFq4440.png

其中0x6000---0x9FFF,是Input/Output对象,是用来定义数据对象的;

0x1600---0x17FF和0x1A00---0x1BFF,是PDO Mapping,是为数据建立映射的;

0x1C10---0x1C2F是分配的SM assign,依次添加映射到SM0---SM31,以便在主站和从站的通信中传输数据。

以0x7000,0x1600,0x1C12为例,具体解释三者的映射关系:

(1)0x7000定义了一个数据对象。

(2)0x1600为0x7000建立了一个映射,用于在SM通道中传输对象字典0x7000中的数据。

(3)0x1C12把0x1600建立的映射添加到SM2中,以便在主站和从站的通信中传输数据。

以下对象已固定包含在SSC(从站堆栈代码)中,不得在文件中重复定义:0x1000、0x1001、0x1008、0x1009、0x100A、0x1010、0x1011、0x1018、0x10F0、0x10F1、0x10F3、0x10F8、0x1C00、0x1C32、0x1C33。

四、手动定义PDO映射和SM分配对象

开发者可以只定义Input/Output对象,SSC TOOL可自动生成SM对象和PDO Mapping,这是最简单和快捷的对象设计方式。开发者也可以自己实现映射和分配,这就是所谓的手动映射和分配。为了支持灵活的过程数据配置,应手动定义PDO映射和SM分配对象。

1.手动定义PDO映射和SM分配对象

第一步:分配Input/Output对象(主索引、子索引)及通信、配置对象,如图所示:

wKgZO2q6EBKAJAW-AAEqsRyQ69c595.png

Subindex0在Excel表格中是隐藏的,从Subindex1开始进行设计,导入SSC工具后Subindex0会自动添加。对象中的Subindex0占用16bit,但使用范围是8bit(0-255)。

第二步:将Input/Output对象映射到PDO Mapping中,如图所示:

DefaultValue0x70000101:“7000”代表索引号7000,“01”代表索引7000的第1位SI(子索引),“01”代表数据大小,1位。

注意,0x70000101是十六进制,例如0x70100A10:“7010”代表索引号7010,“0A”代表索引7010的第10位SI(子索引),“10”代表数据大小,16位

wKgZO2q6ECWABtG5AAGAx7_H8Q8321.png

第三步:添加PDO Mapping到SM对象中,如图所示:

wKgZO2q6EHmAGt7kAACwZyaKhvU208.png

2.关于补位的说明

对象具体的条目设计或填写时要注意对齐问题。需要16bit对齐,具体形式如下表所示。

wKgZPGq6EIyALDNQAAC4S_6TRaE805.pngwKgZPGq6EJmAV7GsAADwKflkZ0E425.png

pad_x起到对齐的作用,类型位置留空,其中x表示位宽,范围为1到15。当应用对象子索引中存在pad_x时,该条目也应该按顺序添加到PDO Mapping对象的条目中,也算作一个mapping对象。

3.将表格导入SSC项目

关闭Excel文件,或选择工具→应用→导入,即可将表格中定义的应用自动导入到SSC项目中,导入成功后会有弹窗提示,需确保弹窗内无报错提示。

wKgZPGq6EOuABUMLAAD_XaUxdak893.png

参考文献:[1].AN_ET9300_V1i10.pdf

审核编辑 黄宇