《ethercat通讯协议例程.docx》由会员分享,可在线阅读,更多相关《ethercat通讯协议例程.docx(6页珍藏版)》请在第壹文秘上搜索。
1、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)
2、-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”组下将“EL9800AP
3、PLICATION”设置为0,将“SAMPLE.APPLICATION”设置%Io保存工程并创建新的文件(PrOjeCt-CreatenewSlaveFiles%基于已创建的ESl文件,编辑从站EEPRoM。基于生成的源文件创建MPLAB工程。SSC可以创建基础例程,具体的创建步骤,在ApplicationNoteET9300其他章节也介绍,后面单独列一章来介绍SSC。这里重点关注如何新增过程数据。2.新增过程数据2.1 在SamPIeaPPLh中新增ReSUlt对象创建为过程数据“32BitReSUe创建入口描述(EntryDescription),对象名和对象实例。Object0x6010
4、:resultobjecttifdef_0BJD_*Entrydescription*/objconsttsdoinfoentrydescobjmemEntryDescOxeoio=(deftype_unsigned32,0x10,ACCESS_READOBJACCESS_TXPDOMAPPING);*Objectname*/一定义一个新的ObjentrydescOBJCONSTUCHAROBJMEMaName0x6010Result,;DataType=int32#endif/#ifdef_OBJD_DataLength=16*Variabletohandletheobjectdata*/A
5、ccess-read&txl,doMappingPROTOUlNT32ReSUItobj6010;可以使用ar作为。bj的handle要在EtherCAT中新增过程数据,首先就需要在代码中新增对象。关于寸象字典“可以参考我的另一篇博客。2.2 在SampIeappLh中修改OutputValue对象在对象0x7010(32BitOutputCOUnterj的基础上进行修改,将对象0x7010修改成Record型对象,Record型对象可以操作超过1个的过程数据(译者注:原有的OutputCounter是Var型对象,只能有1个子项;Record型对象类似于结构体,一个对象中可以有多个子项)。O
6、uputCounter原本只有一个子项(类似与0x6010的结构),现在需要2个子项,同时还需要增加SubIndexO的参数。对象名称需要与Entry相对应(每个子名称以,00(结尾,整个对象名称以“377”结尾)。还需要根据对象的参数定义一个结构体,使其包含SubIndexO以及2个过程数据。更多的细节信息请参见章节11。Object0x7010:outputvaluesobjectfifdefJDBJJobjconst TsdoinfoentrydescOBJMEMasEntryDesc0x7010(*Entry description of SubindexO */ DEFTYPE-UN
7、SIGNED8, 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* /020,ACCESS READ OBJACCESS RXPDOMAPPING);*Name of the object and t
8、he entries */ OBJCONST UCHAR OBJMEM aName0x7010( - wOutput values000Valuel000Value2000377;tendif /Iifdef OBJDZObjNane 包含对象名及其子项名,年个名称以000”结尾,破后以“377结尾.3.Obj handle对象的结构体定义,并将其实例化。*Structuretohandletheobjectdata*/typedefstructOBJ_STRUCT_PACKED_STARTUINT16uieSubYndexO;-UINT32Valuel;UINT32Value2;OBJ_ST
9、RUCT_PACKED_ENDTOBJ7010;一PROTOTOBJ7010OutputData#ifdef_SAMPLE_APPLICATION=0x0270x00,0x00)endif2.3 在SampIeappLh中修改PDO-map对象在PDo-MaPPing对象中,为新增的过程数据添加信息。修改的代码被标注为红色。DefinitiontorTXPDO(OXlAOO)(handlingtheInPUtProCeS8data)*ObjectOxlAOO:TxPDOifdef_OBJD_objconstTsdoinfoentrydescobjmemasEntryDesciA=DEFTYPE
10、-UNSIGNED8,0x8,ACCESS_READ),DEFTYPE二UNSlGNED32,0x20,ACCESS-READ),*referencetothenewprocessdata.TheinformationdoesNOTdescribetheprocessdataitself,thatmeansiftheprocessdataisanUNSIGNED8valuethedeftypeinthisdescriptionisstillUNSIGNED32*/(DEFTYPE_UNSIGNED32z0x20,ACCESS-READ);*Onlytheobjectnameisdescribe
11、dallentriesareautomaticallynamesaswSubIndex000”(000isincrementedforeachentry)*/OBJCONSTUCHAROBJMEMaName0xlA00=,TxPDO-Map000377,;Iendif/tifdef_OBJD_typedefstructOBJ_STRUCT_PACKED_STARTUINT16ul6SubIndexO;-*Addoneadditionalarrayelementforthereferencetothenewprocessdata*/UINT32aEntries(2);OBJ_STRUCT_PAC
12、KED_ENDTOBJlA00;一PROTOTOBJ1AOOTxPDOMapIifdefSAMPLEAPPLICATION(2/-theobject?.snowtwoentrd,0x60000020z0x60100020*mCferenCetoobject0x06010SubindexOand32Bitlength*/)endifDefinitionforRXPDO(OXleOl)(handlingtheOUtPUtProCeSSdata)/W*Object01601:RxPDOtifdef_OBJD_objconstTsdoinfoentrydescobjmemasEntryDesci6i(
13、=DEFTYPEjJNSlGNED8,0x8,ACCESS_READ),(DEFTYPE二UNSIGNED32,0x20,ACCESS-READr*referencetothenewprocessdata.TheinformationdoesNOTdescribetheprocessdataitself,thatmeansiftheprocessdataisanUNSIGNED8valuethedeftypeinthisdescriptionisstillUNSlGNED32*/DEFTYPE_UNSIGNED32z0x20rACCESS_READ;*Onlytheobjectnameisde
14、scribedallentriesareautomaticallynamesasSubIndex000”(000isincrementedforeachentry)*/OBJCONSTUCHAROBJMEMaName01601(-RxPDO-Map000377;#endif/#ifdef_OBJD_typedefstructOBJ_STRUCT_PACKED_STARTUINT16ul6SubTndexO;-*Addoneadditionalarrayelementforthereferencetothenewprocessdata*/UINT32aEntries(2;OBJ_STRUCT_P
15、ACKED_ENDTOBJl601;一PROTOTOBJl601RxPDOMap#ifdef_SAMPLE_APPLICATION_2*theobjecthasnowtwoentries*r070100120r0x70100220*Referencetoobject0x07010Subindex2and32Bitlength*/)Iendif2.4 在SamPIeaPPLh中更新对象字典的参考TOBJECTOBJMEMAppIicationObjDic=*Object0x1601/(NULL,NULL,0x1601,DEFTYPE_PDOMAPPING,2(OBJCODE_REC8),asEntryDesc0xl601raName01601,&RxPDOMap