j2b描述ethercat

参考

用JSON 定义二进制结构j2b.csdn

MAC,PHY,变压器,RJ45.csdn

ethercat.j2b.json5

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校验"
    }
  }
}
相关推荐
June bug13 小时前
【AI赋能软件测试】6RAG知识库基础
学习·职场和发展
Keep Running *13 小时前
Hermes_学习笔记
笔记·学习
z2005093013 小时前
【linux学习】进程的概念和在linux系统下的基本实现情况01
linux·网络·学习
EntyIU13 小时前
Python学习笔记
笔记·python·学习
魔法阵维护师13 小时前
从零开发游戏需要学习的c#模块,第二十四章(场景管理 —— 标题、游戏、结束画面)
学习·游戏·c#
wuxinyan12313 小时前
工业级大模型学习之路025:问题解决-检索质量全为0
人工智能·python·学习·langchain
happymaker062613 小时前
SpringBoot学习日记——DAY05(SpringBoot整合MyBatis-plus实现增删改查)
spring boot·学习·mybatis
吃好睡好便好13 小时前
用直接输入的方式创建矩阵
开发语言·人工智能·学习·线性代数·算法·matlab·矩阵
秋雨梧桐叶落莳14 小时前
iOS——UIStackView学习
学习·macos·ios·objective-c·cocoa