SSC 内存管理

对于提供一块本地内存给EtherCAT主站,它应该可以作为一个对象被处理

 

一个数据对象被唯一地定义有下面的特征

1、本地内存(6.1是本地内存的定义)

2、入口的描述(6.2 是入口地址的描述)

3、数据对象名称(6.3 是数据对象名称的描述)

4、数据对象的描述(6.4是数据对象的描述)

所有数据对象的描述被收集在一个框架上,即是对象字典。这个对象字典展现了给EtherCAT主站的接口。在这一段里,我们把所有的对象字典分类成三种不同的类型,分别是VARIBLE,ARRAY和RECORD。对于VARIABLE的数据对象仅仅包括一个基本数据类型作为对象。ARRAY的数据对象把不同的基本数据类型的集合作为对象。对于RECORD的数据对象暴扣多种不同的基本数据类型作为对象。

在下一章,数据对象的特征进一步被描述,通过分析SSC的例子。

 

6.1 本地内存的定义

根据对象(VARIABLE,ARRAY和RECORD)来为本地内存分配数据对象

在大部分情况对象代码VARIABLE的情况下,如果希望的对象大小等于平台定义的数据类型,通过定义一个变量来分配VARIABLE的内存。

 

例子:定义一个本地内存(对象代码VARIABLE)

UINT32 u32VarObject;

 

其它两种对象(ARRAY和RECORD)将被定义成数据结构的形式。它包括一个8位的变量作为第一个成员(Subindex0),它包含了最高的子索引(最后一个对象的入口)

在SSC里,Subindex0将经常被定义为16位的变量因为,字节对齐的原因

 

typedef struct{

       UINT16  u16SubIndex0;

       UINT32  aEntries[4];

}  _ARR_OBJ_DEF;

 

_ARR_OBJ_DEF  ArrObj;

 

Define local memory(Object Code RECORD)

typedef  struct{

       UINT16  u16SubIndex0;

       UINT8    u8FirstEntry;

       UINT32  u32SecondEntry;

       INT16   i16ThirdEntry;

} _REC_OBJ_DEF;

  _REC_OBJ_DEF  RecObj;

 

6.2 入口的描述

一个单一的入口描述是在TSDOINFOENTRYDESC里定义的。一个对象的所有入口描述是在一个队列里被引用的。在数据对象ARRAY的情况下,只要第一个入口是需要被描述的。

TSDOINFOENTRYDESC 成员变量

DataType        unsigned 16bit        在【REF2】中定义的基本数据类型的索引

BitLength        unsigned 16bit        数据对象的长度

ObjAccess      unsigned 16bit        bit 0:在Pre-Op在读接口

                                                             bit1:在Safe-Op读接口

                                                             bit2:在Op读接口

                                                             bit3:Pre-Op写接口

                                                             bit4:Safe-Op写接口

                                                             bit5:Op写接口

                                                             bit6:映射使能RxPDO

                                                             bit7:映射使能TxPDO

                                                             bit8:backup入口

                                                             bit9:settings入口

                                                             bit10:安全入口

                                                             bit11:安全出口

                                                             bit12:安全参数

对象描述

TSDOINFOENTRYDESC VarObjectEntryDesc =

{ DEFTYPE_UNSIGNED32,0x20,(ACCESS_READ|OBJACCESS_TXPDOMAPPING)};

 

Object description(Object Code ARRAY)

TSDOINFOENTRYDESC ArrObjEntryDesc[] = {

       {DEFTYPE_UNSIGNED8,0x08,ACCESS_READ},

       {DEFTYPE_UNSIGNED32,0x20,ACCESS_READ};

}

Note:The object entry only describes the Subindex0 and one entry because all entries are equal.

 

TSDOINFOENTRYDESC RecObjEntryDesc[]={

        {DEFTYPE_UNSIGNED8,0X08,ACCESS_READ},

        {DEFTYPE_UNSIGNED8,0X08,ACCESS_WRITE_PREOP},

        {DEFTYPE_UNSIGNED32,0X20,(ACCESS_WRITE|OBJACCESS_RXPDOMAPPING)},

        {DEFTYPE_INTEGER16,0X10,ACCESS_WRITE}

};

6.3 对象的名字

数据对象的名字是一个ASCII编码的名字。数据对象的名字VARIABLE和ARRAY是被一个名字描述包括“\0”.

如果数据对象的名字是RECORD,每个入口(除了Subindex0)被描述。在两个名字之间队列“\000”需要被添加。

UCHAR VarObjName [] = 'Test var obj";

 

UCHAR ArrObjName [] = "Array Obj";

 

UCHAR RecObjName[] = "Record Obj \000First Entry \000 Second Entry \000Third Entry \000\377";

 

6.4 数据对象的描述

数据对象的描述包含了所有的对象特性进去一个类型TOBJECT的数据结构。OBJECT里的成员变量包括下表SSC 内存管理_第1张图片

 

Example:Object dictionary entry description(Object Code VARIABLE)

TOBJECT VarObj_ODEntryDesc = {0x6000,{DEFTYPE_UNSIGNED32, 0|(OBJCODE_VAR<<8), &VarObjectEntryDesc,VarObjName,&u32VarObject,NULL,NULL,0x0000}}

 

TOBJECT ArrObj_ODEntryDesc = {0x9000,{DEFTYPE_UNSIGNED32,5 | (OBJCODE_ARR<<8)},ArrObjEntryDesc,ArrObjName,&ArrObj,NULL,NULL,0x0000};

 

6.5 索引范围

在SSC里面用到的基本索引范围如下

索引范围                                                                  描述

0x0000-0x0FFF                                               数据类型区

0x1000-01FFF                                                 通信区

0x1600-0x19FF                                               RXPDO映射区

0x1A00-0x1BFF                                              RXPDO映射区

0x1c10-0x1C2f                                                同步管理器 PDO的分配

0x1C30-0x1C2F                                              同步管理器的参数

0x2000-0x5FFF                                               制造商的特殊区

0x6000-0x6FFF                                               输入区

0x7000-0x7FFF                                                输出区

0x8000-0x8FFF                                                配置区

0x9000-0x9FFF                                                信息区

0xA000-0xAFFF                                               诊断区

0xB000-0xBFFF                                              服务转移区

0xC000-0xEFFF                                              保持区

0xF000-0xFFF                                                 设备区

在EL9800应用的对象的索引,根据模块设备简介,被应用的EL9800的应用层对象。

如下图

SSC 内存管理_第2张图片

6.6 应用实例

6.6.1 每一个Enum对象的定义应该在范围为0x800-0x0FFF的范围内。一个Enum定义的内容是在【2】里面定义的。

每一个enum的值是一个4字节的无符号整型和一个名字。4字节的无符号整型是Byte灵活编码的。

“\058 = 5*8 + 8 =48 = 0x30 ”

CHAR sEnum0801_Value00[ ]= "\000\000\000\000Startup";

CHAR sEnum0801_Value01[ ]= "\001\000\000\000Running";

CHAR sEnum0801_Value02[ ]= "\012\000\000\000End";

 

CHAR *apEnum0801 [ ]={ sEnum0801_Value00, sEnum0801_Value01,sEnum0801_Value02};

 

OBJCONST TSDOINFOENTRYDESC  OBJMEM  asEntryDesc0x0801 [ ] =

{{DEFTYPE_UNSIGNED8, 8,ACCESS_READ | OBJACCESS_NOPDOMAPPING},

{DEFTYPE_OCTETSTRING, 8*SIZEOF(sEnum0801_Value00),ACCESS_READ|OBJACCESS_NOPDOMAPPING},

{DEFTYPE_OCTETSTRING,8*SIZEOF(sEnum0801_Value01),ACCESS_READ|OBJACCESS_NOPDOMAPPING}};

 

Define Object dictionary entry:ENUM Object

{NULL,NULL,0x0801,{DEFTYPE_ENUM,0x03|(OBJCODE_REC << 8)},asEntryDesc0x0801,0,apEnum0801},

 

Define New Object(using ENUM)

OBJCONST TSDOINFOENTRYDESC  OBJMEM sEntryDesc0x2001 = {0x801,0x20,ACCESS_READ};

 

 

你可能感兴趣的:(SSC 内存管理)