ethercat通讯协议例程.docx

上传人:李司机 文档编号:4836610 上传时间:2023-05-18 格式:DOCX 页数:6 大小:52.34KB
返回 下载 相关 举报
ethercat通讯协议例程.docx_第1页
第1页 / 共6页
ethercat通讯协议例程.docx_第2页
第2页 / 共6页
ethercat通讯协议例程.docx_第3页
第3页 / 共6页
ethercat通讯协议例程.docx_第4页
第4页 / 共6页
ethercat通讯协议例程.docx_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《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),asEn

16、tryDesc0xl601raName01601,&RxPDOMapzNULL,NULL,OxOOOO),*ObjectOxlAOO*/NULL,NULL,OxlAOO,DEFTYPE-PMAPPING,2(OBJCODE_REC8),SsEntryDescOxlAOO,aName0xlA00,TPDOMap,NULL,NULL,OxOOOOr这里把*Object 06010 /entry,objName,BjHanle填入ObjDiCNULL,NULL,0x6010,(DEFTYPE_UNSIGNED32,O(OBJCODE_VAR8)f6EntryDesc0x6010zaName0x601

17、0r&ResultObj6010,NULL,NULL,0x0000),/Object0x7010T(NULL,NULL,0x7010,DEFTYPE_RECORDr2(OBJCODE_REC8),asEntryDesc0x7010,aName0x7010,&OutputData,NULL,NULL,OxOOOO),NULL,NULL,OxFFFF,0,0,NULL,NULL,NULL,NULL);2.5 在sampleappl.c中更新过程数据大小更新过程数据大小(过程数据大小应该与对应的SM大小一致)。注:如果某一个变量与ESl文件中记录的信息不一致,从站状态无法从PreoP转入SafeOP

18、,并会发送OxIE-OxID的错误码。译者注:APPLGenerateMaPPing用于计算输入过程数据和输出过程数据的长度,后面进行内布拷贝的时候,会根据这里计算出的长度来进行拷贝。2.6 在sampleappl.c中修改InPUtMaPPing()函数更新输入过程数据映射函数,将新增的过程数据本地拷贝到ESC内存中。ReSUIt(OX6010)对象是输入过程数据,这里使用MEMCPY,将本地内存中的Result0bj6010拷贝到ESC中(PData是ESC的地址)。2.7 在sampleappl.c中修改OUtPUtMaPPing()函数更新输出过程数据映射函数,将新增的过程数据从ESC

19、内存中拷贝到本地。2.8 在sampleappl.c中更新应用程式修改应用程序,Result=Output.valuel+0utput.value2,lnputCounter+o2.9 更新ESI文件根据步骤3,更新ESI中RxPdo和TXPdO的Entry0主站会使用ESI文件中的信息来计算SM的长度(SM长度应该与步骤5中的长度一致),并会将过程数据展示给用户(图11:EtherCAT从站RxPdo的数据)。2.10 更新ESl文件根据RxPdoAxPdoEntry的位宽更新SM的默认位宽。2.11 更新ESI文件更新离线对象字典(元素:ProfiIe/Dictionary)。a.新增对象0x6010(此对象无需结构体定义,因为此对象仅包含了一个基础数据类型的变量)。b为对象0x7010新增结构体定义c.更新对象0x7010d.更新PDO映射对象结构体注:对象0x1601和对象OxlAOo都可以使用”DTl601”的定义,因为这两个对象的结构体是一致的。e.更新PDO映射对象对象字典在SSC和ESI上是一式两份,SSC和ESI上都需要对对象的结构体定义,对象名称,对象映射关系等进行修改。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号