ethercat通讯协议例程.docx
ethercat通讯协议例程本例程介绍了如何在基础例程(SAMPLE-ApplicatioN)的基础上添加新的过程数据。默认的基础例程提供了一下的过程数据:32Bit的InputCounter(OxGOOO)32Bit的OutputCounter(0x7010)当OutputCounter为0时,InputCounter每个cycle自力口1;否则InPUtCounter等于OutputCounter+lo本例程中新增的过程数据:32Bit的InputCounter(OxGOOO)32Bit的ResuIt(OxGOlO)OutputValue(0x7010)-Sll:Valuel(32Bit)-SI2:Value2(32Bit)Result(0x6010)½SlI(OX7010.1)和SI2(0x7010.2)之和。InputCe)Unter(OX6000)每个cycle自力口1。L创建基础例程这一节简单介绍一下如何在倍福EL9800评估板上创建基础例程。当然,也可以在已有的其他类似的例程上进行新增过程数据的修改。按照章节3.1USSCTOoI中的步骤17进行操作(这里的章节3.1是指ApplicationNoteET9300SSC的3.1)。选择”EL9800I8BitDigitall0,16BitAnalogInPUt”的配置。在“APPliCatiOn”组下将“EL9800APPLICATION”设置为0,将“SAMPLE.APPLICATION”设置%Io保存工程并创建新的文件(PrOjeCt->"CreatenewSlaveFiles'%基于已创建的ESl文件,编辑从站EEPRoM。基于生成的源文件创建MPLAB工程。SSC可以创建基础例程,具体的创建步骤,在ApplicationNoteET9300其他章节也介绍,后面单独列一章来介绍SSC。这里重点关注如何新增过程数据。2.新增过程数据2.1 在SamPIeaPPLh中新增ReSUlt对象创建为过程数据“32BitReSUe创建入口描述(EntryDescription),对象名和对象实例。Object0x6010:resultobjecttifdef_0BJD_*Entrydescription*/objconsttsdoinfoentrydescobjmemEntryDescOxeoio=(deftype_unsigned32,0x10,ACCESS_READOBJACCESS_TXPDOMAPPING);*Objectname*/一定义一个新的ObjentrydescOBJCONSTUCHAROBJMEMaName0x6010"Result',;DataType=int32#endif/#ifdef_OBJD_DataLength=16*Variabletohandletheobjectdata*/Access-read&txl,doMappingPROTOUlNT32ReSUItobj6010;可以使用ar作为。bj的handle要在EtherCAT中新增过程数据,首先就需要在代码中新增对象。关于"寸象字典“可以参考我的另一篇博客。2.2 在SampIeappLh中修改OutputValue对象在对象0x7010(32BitOutputCOUnterj的基础上进行修改,将对象0x7010修改成Record型对象,Record型对象可以操作超过1个的过程数据(译者注:原有的OutputCounter是Var型对象,只能有1个子项;Record型对象类似于结构体,一个对象中可以有多个子项)。OuputCounter原本只有一个子项(类似与0x6010的结构),现在需要2个子项,同时还需要增加SubIndexO的参数。对象名称需要与Entry相对应(每个子名称以,00(结尾,整个对象名称以“377”结尾)。还需要根据对象的参数定义一个结构体,使其包含SubIndexO以及2个过程数据。更多的细节信息请参见章节11。Object0x7010:outputvaluesobjectfifdefJDBJJobjconst TsdoinfoentrydescOBJMEMasEntryDesc0x7010(*Entry description of SubindexO */ DEFTYPE-UNSIGNED8, 0x08, ACCESS_READ), * Entry description of the first entry ''Valuel* */Obj需要定义3个东西1. Entry DescriptionDEFTYPEjJNSlGNED32,*Entry descriptionDEFTYPEUNSlGNED32,0x20,ACCESS_READ OBJACCESS_RXPDOMAPPING), of the second entry ''Value2* /0×20,ACCESS READ OBJACCESS RXPDOMAPPING);*Name of the object and the entries */ OBJCONST UCHAR OBJMEM aName0x7010( - wOutput values000Valuel000Value2000377"tendif /Iifdef OBJDZObjNane 包含对象名及其子项名,年个名称以"000”结尾,破后以“'377"结尾.3.Obj handle对象的结构体定义,并将其实例化。*Structuretohandletheobjectdata*/typedefstructOBJ_STRUCT_PACKED_STARTUINT16uieSubYndexO;-UINT32Valuel;UINT32Value2;OBJ_STRUCT_PACKED_ENDTOBJ7010;一PROTOTOBJ7010OutputData#ifdef_SAMPLE_APPLICATION=0x0270x00,0x00)endif2.3 在SampIeappLh中修改PDO-map对象在PDo-MaPPing对象中,为新增的过程数据添加信息。修改的代码被标注为红色。DefinitiontorTXPDO(OXlAOO)(handlingtheInPUtProCeS8data)*ObjectOxlAOO:TxPDOifdef_OBJD_objconstTsdoinfoentrydescobjmemasEntryDesciA=DEFTYPE-UNSIGNED8,0x8,ACCESS_READ),DEFTYPE二UNSlGNED32,0x20,ACCESS-READ),*referencetothenewprocessdata.TheinformationdoesNOTdescribetheprocessdataitself,thatmeansiftheprocessdataisanUNSIGNED8valuethedeftypeinthisdescriptionisstillUNSIGNED32*/(DEFTYPE_UNSIGNED32z0x20,ACCESS-READ);*OnlytheobjectnameisdescribedallentriesareautomaticallynamesaswSubIndex000”(000isincrementedforeachentry)*/OBJCONSTUCHAROBJMEMaName0xlA00=,TxPDO-Map000377,;Iendif/tifdef_OBJD_typedefstructOBJ_STRUCT_PACKED_STARTUINT16ul6SubIndexO;-*Addoneadditionalarrayelementforthereferencetothenewprocessdata*/UINT32aEntries(2);OBJ_STRUCT_PACKED_ENDTOBJlA00;一PROTOTOBJ1AOOTxPDOMapIifdefSAMPLEAPPLICATION(2/-theobject?.snowtwoentr"d,0x60000020z0x60100020*mCferenCetoobject0x06010SubindexOand32Bitlength*/)endifDefinitionforRXPDO(OXleOl)(handlingtheOUtPUtProCeSSdata)/W*Object0×1601:RxPDOtifdef_OBJD_objconstTsdoinfoentrydescobjmemasEntryDesci6i(=DEFTYPEjJNSlGNED8,0x8,ACCESS_READ),(DEFTYPE二UNSIGNED32,0x20,ACCESS-READr*referencetothenewprocessdata.TheinformationdoesNOTdescribetheprocessdataitself,thatmeansiftheprocessdataisanUNSIGNED8valuethedeftypeinthisdescriptionisstillUNSlGNED32*/DEFTYPE_UNSIGNED32z0x20rACCESS_READ;*Onlytheobjectnameisdescribedallentriesareautomaticallynamesas''SubIndex000”(000isincrementedforeachentry)*/OBJCONSTUCHAROBJMEMaName0×1601(-"RxPDO-Map000377"#endif/#ifdef_OBJD_typedefstructOBJ_STRUCT_PACKED_STARTUINT16ul6SubTndexO;-*Addoneadditionalarrayelementforthereferencetothenewprocessdata*/UINT32aEntries(2;OBJ_STRUCT_PACKED_ENDTOBJl601;一PROTOTOBJl601RxPDOMap#ifdef_SAMPLE_APPLICATION_2*theobjecthasnowtwoentries*r0×70100120r0x70100220*Referencetoobject0x07010Subindex2and32Bitlength*/)Iendif2.4 在SamPIeaPPLh中更新对象字典的参考TOBJECTOBJMEMAppIicationObjDic=*Object0x1601/(NULL,NULL,0x1601,DEFTYPE_PDOMAPPING,2(OBJCODE_REC«8),asEntryDesc0xl601raName0×1601,&RxPDOMap