json
复制代码
{
"remark": "ethercat.j2b.json",
"agreement": [
"1. macFrame_length 长度范围[64,1500) (eth→fcs,不含phy)",
"2. acq和ctrl根据EtherCatCommandType区分"
],
"schema": {
"Ethertype:enum:U16": {
"0x0806": "ARP;地址解析协议",
"0x0800": "IPv4;",
"0x86DD": "IPv6;",
"0x88A4": "EtherCAT;工业实时总线",
"0x8100": "VLAN;802.1Q VLAN",
"0x88F7": "PTP;精密时钟同步"
},
"EthernetHeader:u8[14];以太网帧头": {
"dst": ":u8[6];目标MAC",
"src": ":u8[6];源MAC",
"ethertype": "0x88A4:Ethertype:U16;以太网协议类型"
},
"EtherCatType:enum:u4;EtherCat类型": {
"0x0": "Reserved;保留/未使用",
"0x1": "Datagram数据报文帧(最常用:APRD/FPWR/LRD等命令)",
"0x2": "Reserved;保留",
"0x3": "Reserved;保留",
"0x4": "NV;网络变量帧(极少使用)",
"0x5": "Mailbox;邮箱数据帧(CoE/SoE/FoE配置用)",
"0x6": "Reserved;保留",
"0x7": "Reserved;保留",
"0x8~0xF": "Reserved;保留"
},
"EtherCatCmd:enum:u8;EtherCAT数据报命令": {
"0x01": "APRD;Auto Increment Physical Read;按链路顺序自动寻址读取slave,主要用于扫描从站和读取ESC寄存器",
"0x02": "APWR;Auto Increment Physical Write;按链路顺序自动寻址写slave,主要用于初始化和分配Station Address",
"0x03": "APRW;Auto Increment Read Write;按链路顺序自动寻址同时读写slave,主要用于初始化阶段特殊配置",
"0x04": "FPRD;Fixed Physical Read;按固定Station Address精确读取指定slave,主要用于读取PDO、DC和ESC寄存器",
"0x05": "FPWR;Fixed Physical Write;按固定Station Address精确写指定slave,主要用于配置PDO、DC、FMMU和输出数据",
"0x06": "FPRW;Fixed Physical Read Write;按固定Station Address同时读写指定slave,用于特殊ESC访问场景",
"0x07": "BRD;Broadcast Read;广播读取所有slave,主要用于部分状态统计和诊断",
"0x08": "BWR;Broadcast Write;广播写所有slave,主要用于切换AL状态和全网同步配置",
"0x09": "BRW;Broadcast Read Write;广播同时读写所有slave,工程中较少使用",
"0x0A": "LRD;Logical Read;读取逻辑PDO地址空间,主站一次Datagram可读取多个slave输入数据",
"0x0B": "LWR;Logical Write;写逻辑PDO地址空间,主站一次Datagram可控制多个slave输出数据",
"0x0C": "LRW;Logical Read Write;同时读写逻辑PDO地址空间,EtherCAT最核心的实时周期通信命令"
},
"EtherCatHeader(x,y):u8[2];EtherCAT协议头": {
"length": "x:u11;长度",
"reserved": "0:u1;保留",
"type": "y:EtherCatType:u4;EtherCAT类型"
},
"EtherCatDatagramHeader(x):u8[10];EtherCAT数据报头": {
"cmd": "x:EtherCatCmd:u8;EtherCAT命令",
"idx": ":u8;数据报索引编号",
"address:u32": {
"adp": ":u16;【物理寻址用】从站地址/【逻辑寻址用】逻辑地址高16位",
"ado": ":u16;【物理寻址用】从站内偏移地址/【逻辑寻址用】逻辑地址低16位"
},
"length:u16": {
"len": ":u11;低11位真实长度",
"reserved": ":u3;保留",
"m": "...u1;后面还有更datagram",
"c": "...u1;绕回标志,它已经经过所有从站,最后一个从站写1"
},
"irq": ":u16;IRQ字段/中断请求"
},
"MailboxType:enum:u8;EtherCAT邮箱协议类型": {
"NONE": "0x00;无/保留",
"CoE": "0x01;CANopen over EtherCAT(标准参数、PDO)",
"EoE": "0x02;Ethernet over EtherCAT(以太网透传)",
"FoE": "0x03;File over EtherCAT(文件升级、固件下载)",
"SoE": "0x04;Servo over EtherCAT(伺服驱动)",
"VoE": "0x05;Vendor over EtherCAT(厂商自定义协议)",
"Reserved":"0x06~0x1F;系统保留"
},
"MailboxHeader(x):u8[6];EtherCAT邮箱报文头": {
"length": ":u16;数据长度(不含这6字节邮箱头)",
"address": ":u16;Mailbox目标地址/ESC邮箱缓冲区地址",
"chprio:u8": {
"channel": ":u6;邮箱通道号",
"priority": ":u2;优先级(0~3)"
},
"typecnt:u8": {
"type": "x:MailboxType:u4;邮箱协议类型(CoE/FoE/SoE/EoE/VoE)",
"counter": ":u4;递增计数器(1~7循环)"
}
},
"EtherCatDatagram;EtherCatDatagram数据包": {
"header": ":EtherCatDatagramHeader:u8[10];数据报头",
"data": ":u8[length];数据区",
"wkc": ":u16;工作计数器"
},
"EtherPhyPrefix:u8[8];前导同步": {
"preamble:u8[7]": "0x55;PHY clock sync pattern",
"sfd:u8[1]": "0xD5;Start Frame Delimiter"
},
"Z8CtrlGram:u32[16]:u8[64];控制": {
"seq": ":u32;序号",
"do": ":u32;",
"df0": ":u32;",
"df1": ":u32;",
"df2": ":u32;",
"df3": ":u32;",
"da16_0": ":u32;",
"da16_1": ":u32;",
"da16_2": ":u32;",
"da16_3": ":u32;",
"reserved": ":u32[6];"
},
"Z8AcqGram:u32[16]:u8[64];采集": {
"seq": ":u32;序号",
"di": ":u32;",
"ad0": ":u32;",
"ad1": ":u32;",
"ad2": ":u32;",
"ad3": ":u32;",
"ic0": ":u32;",
"ic1": ":u32;",
"ic2": ":u32;",
"ic3": ":u32;",
"ac0": ":u32;",
"ac1": ":u32;",
"ac2": ":u32;",
"ac3": ":u32;",
"reserved": ":u32[2];保留"
},
"Z8CtrlAcqGram:u8[128]": {
"ctrl": ":Z8CtrlGram;控制",
"acq": ":Z8AcqGram;采集"
},
"EscIdentity:u8[16];ESC身份寄存器(addr=0x0000)": {
"type": ":u8;ESC芯片类型(如0x04=ET1100)",
"revision": ":u8;ESC版本号",
"build": ":u16;ESC构建号",
"fmmu_count": ":u8;支持的FMMU数量",
"sm_count": ":u8;支持的SyncManager数量",
"ram_size": ":u8;内部RAM大小(KB)",
"port_desc": ":u8;端口描述(bit[1:0]=Port0类型,bit[3:2]=Port1类型...)",
"features": ":u16;特性标志(bit0=FMMU位操作,bit1=DC支持...)",
"reserved": ":u8[6];"
},
"DiscoveryDatagram:u8[28];设备发现": {
"header": ":EtherCatDatagramHeader(0x01):u8[10]",
"data": ":EscIdentity:u8[16];从站身份区,由链路上第一个adp==0的从站填写",
"wkc": ":u16;成功响应的从站数,主站据此判断在线从站总数"
},
"PdoDatagram:u8[524];实时控制采集帧": {
"header": ":EtherCatDatagramHeader(0x0C):u8[10]",
"data:u8[512]": {
"slave0": ":Z8CtrlAcqGram:u8[128]",
"slave1": ":Z8CtrlAcqGram:u8[128]",
"slave2": ":Z8CtrlAcqGram:u8[128]",
"slave3": ":Z8CtrlAcqGram:u8[128]"
},
"wkc": ":u16;工作计数器"
},
"FpwrAlCtrlDatagram:u8[14];AL状态切换(FPWR,逐站精确写)": {
"header": ":EtherCatDatagramHeader(0x05):u8[10];cmd=FPWR,adp=目标站地址,ado=0x0120",
"data": ":AlControlReg:u8[2];目标AL状态",
"wkc": ":u16;1=成功,0=站地址不存在"
},
"SmCfgDatagram:u8[44];SyncManager配置(FPWR)": {
"header": ":EtherCatDatagramHeader(0x05):u8[10];cmd=FPWR,adp=目标站地址,ado=0x0800",
"data:u8[32]": {
"sm0": ":SmEntry:u8[8];MailboxOut",
"sm1": ":SmEntry:u8[8];MailboxIn",
"sm2": ":SmEntry:u8[8];PDO输出",
"sm3": ":SmEntry:u8[8];PDO输入"
},
"wkc": ":u16"
},
"FmmuCfgDatagram:u8[44];FMMU映射配置(FPWR)": {
"header": ":EtherCatDatagramHeader(0x05):u8[10];cmd=FPWR,adp=目标站地址,ado=0x0600",
"data:u8[32]": {
"fmmu0": ":FmmuEntry:u8[16];Output映射",
"fmmu1": ":FmmuEntry:u8[16];Input映射"
},
"wkc": ":u16"
},
"DcCfgDatagram:u8[24];DC分布时钟配置(FPWR)": {
"header": ":EtherCatDatagramHeader(0x05):u8[10];cmd=FPWR,adp=目标站地址,ado=0x0980",
"data": ":DcSyncConfig:u8[12]",
"wkc": ":u16"
}
},
"generalContent;通用帧": {
"phy": ":EtherPhyPrefix:u8[8];前导同步",
"macFrame:u8[64~1518]": {
"eth": ":EthernetHeader:u8[14]",
"ecat": ":EtherCatHeader:u8[2]",
"datagrams": "...EtherCatDatagram[?];变长包",
"pad:u8[0~46]": ";最小帧补齐",
"fcs": ":u32;CRC32校验"
}
},
"discover_content;发现帧(APRD)": {
"phy": ":EtherPhyPrefix:u8[8];前导同步",
"macFrame:u8[540]": {
"eth": ":EthernetHeader:u8[14]",
"ecat": ":EtherCatHeader(28,1):u8[2]",
"datagrams":":DiscoveryDatagram:u8[28]",
"fcs": ":u32;CRC32校验"
}
},
"config_content;配置帧(以AL状态切换为例)": {
"phy": ":EtherPhyPrefix:u8[8];前导同步",
"macFrame:u8[540]": {
"eth": ":EthernetHeader:u8[14]",
"ecat": ":EtherCatHeader(14,1):u8[2]",
"datagrams":":FpwrAlCtrlDatagram:u8[14]",
"fcs": ":u32;CRC32校验"
}
},
"pdo_content;实时控制数据流(LRW)": {
"phy": ":EtherPhyPrefix:u8[8];前导同步",
"macFrame:u8[540]": {
"eth": ":EthernetHeader:u8[14]",
"ecat": ":EtherCatHeader(524,1):u8[2]",
"datagrams":":PdoDatagram:u8[524]",
"fcs": ":u32;CRC32校验"
}
}
}