精华内容
下载资源
问答
  • 一套比较完整的OBDII CAN协议解析代码,遵循ISO15765 CAN协议标准,对于在汽车电子行业想解析OBDII CAN协议的朋友非常有帮助。
  • 原始数据的获取:一般除了德系车以外,汽车上面一般都只有一条CAN总线,并且联到 了汽车的OBD口CAN引脚上,波特率500K的高速CAN,这个时候可以直接在OBD口读取CAN 数据。一般的德系车如大众,汽车上面有多达5-6条CAN...
  • can协议解析字符串的原理

    千次阅读 2018-09-12 18:10:25
    这里的数据使用的是标准的can设备产生的can信号(扩展帧发送数据ID=0x11121181 Data=0x06 0x08) 信号的波形如图1所示,这里示波器的探头接的是CAN_H,探头的夹子接的是CAN_L: 图1 示波器显示波形 首先根据本...

    这里的数据使用的是标准的can设备产生的can信号(扩展帧发送数据ID=0x11121181 Data=0x06 0x08)

    信号的波形如图1所示,这里示波器的探头接的是CAN_H,探头的夹子接的是CAN_L:

    图1 示波器显示波形

    首先根据本博客中前面写的一篇如何测量can总线波特率获取总线的波特率,然后依据波特率和上面的波形读出具体的数据

    从上面的波形中读取到的数据是

    10111011101100011110111001111101011111001111101001111100111101111011011101

    根据标准can2.0b协议可以讲该字符串解析出来,标准的扩展协议如图2所示

    图2 can扩展消息格式

    然后将数据根据格式划分成各个有意义的字段,如图3所示,这里我自己将高电平编码为1,低电平编码为0。但是在can协议中,他将高电平定义为显性位,逻辑上定义为0,将低电平定义为隐形位,逻辑上定义为1,我们前面先不管这个。

    图3 数据分割

    在can的协议中当连续出现5个高电平时就需要插入一个低电平,所以在解析的过程中需要将这些插入的数据删除,就是图3中用红线删除的那些数据。

    在删除这些数据之后根据图2的格式可以将各个字段分割出来

    解析信息:

    29位ID:0 1110 1110 1101 1110 1110 0111 1110,从右到左每4位一个字段,这里需要将其在转换回can协议定义的逻辑电平的形式---即将0变为1,将1变为0,这样便符合我们日常的编码习惯。解析出来的ID=0x11121181,与我们发送的数据是相符合的。

    DLC:1101 转换成十进制为2 表示这一帧中有两个数据,接下来的16个字节便表示2个数据

    D1:11111001 = 0x06

    D2:11110111 = 0x08

    这样便解析出了我们需要的数据,这是和我发送的数据一致的。

     

    这里需要注意的有两点:

    1、在can的协议中当连续出现5个高电平时就需要插入一个低电平;

    2、在can协议中将CAN_H和CAN_L的差值为高电平时定义为显性,逻辑上表示为0,为低电平时定义为隐形,逻辑上表示为1。这在解码的过程中需要注意。

    展开全文
  •  本书旨在为从事CAN总线应用层协议的开发者提 供实例化的研发思路和软、硬件技术参考,能够使开 发者快速地由CAN总线应用层协议解析进入实战开发应 用,提高研发工程师的工作效率,缩短研发时间。 本书可供工业...
  •  本书旨在为从事CAN总线应用层协议的开发者提 供实例化的研发思路和软、硬件技术参考,能够使开 发者快速地由CAN总线应用层协议解析进入实战开发应 用,提高研发工程师的工作效率,缩短研发时间。 本书可供工业...
  • 主要对OBD硬件接口、协议解析说明、obd接口以CAN格式读取 车辆obd信息为例。
  • CAN协议深度解析-简单易懂协议详解

    千次阅读 2021-01-12 11:43:23
    CAN-bus通信帧共分为数据帧、远程帧、错误帧、过载帧和帧间隔五种类型。 显形隐形电平 CAN-bus发布了ISO11898和ISO11519两个通信标准,此两个标准中差分电平的特性不相同。 显性电平:总线上只要有1个节点驱动为...

    CAN-bus通信帧共分为数据帧、远程帧、错误帧、过载帧和帧间隔五种类型。

    1. 显形隐形电平

    CAN-bus发布了ISO11898和ISO11519两个通信标准,此两个标准中差分电平的特性不相同。
    在这里插入图片描述
    显性电平:总线上只要有1个节点驱动为显性,则总线表现为显性位电平,逻辑解析为“0”。

    隐形电平:只有总线上的各节点都不将总线驱动成显性电平,总线才表现为隐形位对应的电平,逻辑解析为“1”。

    位填充:位填充是为防止突发错误而设定的功能。当同样的电平持续 5 位时,则添加一个位的反型数据。

    1. 数据帧

    数据帧结构上由7个段组成,其中根据仲裁段ID码长度的不同,分为标准帧(CAN2.0A)和扩展帧(CAN2.0B)。
    在这里插入图片描述
    2.1帧起始、帧结束

    帧起始和帧结束用于界定一个数据帧,无论是标准数据帧或扩展数据帧都包含这两个段。
    在这里插入图片描述
    2.2仲裁段

    CAN-bus是如何解决多个节点同时发送数据,即总线竞争问题?该问题由仲裁段给出答案。

    CAN-bus并没有规定节点的优先级,但通过仲裁段帧ID规定了数据帧的优先级。根据CAN2.0标准版本不同,帧ID分为11位和29位两种。帧ID值越小,优先级越高。
    在这里插入图片描述
    2.3 控制段

    控制段共6位,标准帧的控制段由扩展帧标志位IDE、保留位r0和数据长度代码DLC组成;扩展帧控制段则由IDE、r1、r0和DLC组成。
    在这里插入图片描述
    2.4 数据段

    一个数据帧传输的数据量为0~8个字节,这种短帧结构使得CAN-bus实时性很高,非常适合汽车和工控应用场合。
    在这里插入图片描述
    与其他总线协议相比,CAN-bus的短帧结构具有以下优势:

    优势1:数据量小,发送和接收时间短,实时性高。

    优势2:数据量小,被干扰的概率小,抗干扰能力强。

    2.5 CRC段

    CAN-bus使用CRC校验进行数据检错,CRC校验值存放于CRC段。CRC校验段由15位CRC值和1位CRC界定符构成。
    在这里插入图片描述

    //算法1
    U16 Can_FD_Analyzer::ComputeCrc15(std::vector<BitState> &bits, U32 num_bits)
    {
        //X15 + X14 + X10 + X8 + X7 + X4 + X3 + X0.
        U16 crc_result = 0;
        for (U32 i = 0; i < num_bits; i++) {
            BitState next_bit = bits[i];
    
            //Exclusive or
            if ((crc_result & 0x4000) != 0) {
                next_bit = Invert(next_bit);    //if the msb of crc_result is zero, then next_bit is not inverted; otherwise, it is.
            }
            crc_result <<= 1;
    
            if (next_bit == mSettings->Recessive()) { //normally bit high.
                crc_result ^= 0x4599;
            }
        }
    
        return crc_result & 0x7FFF;
    }
    
    //算法2
    U16 Can_FD_Analyzer::MakeCRC15(std::vector<BitState> &bits, U32 num_bits)
    {
        //X15 + X14 + X10 + X8 + X7 + X4 + X3 + X0.
        U16 CRC[15] = { 0 };
        for (U32 i = 0; i < num_bits; i++) {
            U32 DoInvert = (bits[i] == mSettings->Recessive()) ^ CRC[14]; //XOR required?
            CRC[14] = (CRC[13] ^ DoInvert); //14
            CRC[13] = CRC[12];
            CRC[12] = CRC[11];
            CRC[11] = CRC[10];
            CRC[10] = (CRC[9] ^ DoInvert); //10
            CRC[9] = CRC[8];
            CRC[8] = (CRC[7] ^ DoInvert); //8
            CRC[7] = (CRC[6] ^ DoInvert); //7
            CRC[6] = CRC[5];
            CRC[5] = CRC[4];
            CRC[4] = (CRC[3] ^ DoInvert); //4
            CRC[3] = (CRC[2] ^ DoInvert); //3
            CRC[2] = CRC[1];
            CRC[1] = CRC[0];
            CRC[0] = DoInvert;
        }
    
        U16 result = 0; // CRC Result
        for (U32 i = 0; i < 15; i++) {
            result = result | (CRC[i] << i);
        }
        return (U16)result;
    }
    

    2.6 ACK段

    当一个接收节点接收的帧起始到CRC段之间的内容没发生错误时,它将在ACK段发送一个显性电平。
    在这里插入图片描述
    3. 远程帧

    与数据帧相比,远程帧结构上无数据段,由6个段组成,同理分为标准格式和扩展格式,且RTR位为1(隐形电平)。
    在这里插入图片描述
    v 数据帧与远程帧的区别
    在这里插入图片描述
    4. 错误帧

    4.1 CAN-bus 错误类型

    尽管CAN-bus是可靠性很高的总线,但依然可能出现错误;CAN-bus的错误类型共有5种。

    错误类型详细
    CRC错误发送节点计算得到的CRC值与接收到的CRC值不同
    格式错误传输的数据帧格式与任何一种合法的帧格式不符
    应答错误发送节点再ACK阶段没有接收到应答信号
    位发送错误发送节点在发送时发送总线电平与发送电平不同
    位填充错误通信线缆上传输信号违反“位填充”规则

    当出现5种错误类型之一时,发送或接收节点将发送错误帧。错误帧的结构如下,其中错误标识分为主动错误标识和被动错误标识。
    在这里插入图片描述
    为防止自身由于某些原因导致无法正常接收的节点一直发送错误帧,干扰其他节点通信,CAN-bus规定了节点的3种状态机器行为。
    在这里插入图片描述

    1. 过载帧

    当某些接收节点没有做好接收下一帧数据的准备时,将发送过载帧以通知发送节点;过载帧由过载标志和过载帧界定符组成。过载帧结构如下:
    在这里插入图片描述
    由于存在多个节点同时过载且过载帧发送有时间差问题,可能出现过载标志叠加后超过6个位的现象。
    在这里插入图片描述

    1. 帧间隔

    帧间隔用于将数据帧或远程帧和他们之前的帧分离开,但过载帧和错误帧前面不会插入帧间隔。
    在这里插入图片描述
    在这里插入图片描述

    1. CAN-bus整个链路层处理数据流程
      在这里插入图片描述

    8.波形实例

    本实例使用 Kingst LA5016 usb 逻辑分析仪检测CAN数据通讯。下图2是一个完整的数据包分析截图。从图中可以看到,LA5016的CAN解析模块,将协议数据分析为 ID(协议id号),RTR(远程帧/数据帧标识), DLC(数据长度),Data(传输数据), CRC, ACK/NAK 。

    图1数据包的ID号为0x002, RTR:false(数据帧), DLC:0x8(8个数据),Data:数据,CRC为0x3845(15位), ACK:应答。

    圆形白点:逻辑数据。

    方形白点:填充位。

    图1 CAN解析参数设置在这里插入图片描述
    图2 CAN标准帧
    在这里插入图片描述
    图3 仲裁域
    在这里插入图片描述

    图4 CRC域及ACK
    在这里插入图片描述

    另外,CAN解析参数显示的格式可以分为:二进制,十进制,十六进制,ASCII,及 ASCII&十六进制。同时可以将协议数据按包格式导出。
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • CAN数据解析程序

    2014-07-11 14:32:10
    CAN解析程序用于解析can采集设备数据可信性高
  • 1.可以根据DBC文件自动解析实时收发的CAN数据 2.可以把cantest软件保存的CAN数据(txt文件)进行解析后导出保存 3.可以自定义选取某个帧内容显示实时曲线 4.可以保存已接收的数据帧 5.可以主动发送单个数据或导入文件...
  • USBCAN-E(2E)-U每个CAN通道都可以独立支持车载CAN-bus应用协议的解析,只要用户在CANtest软件中导入相关的DBC文件,即可实现应用层数据的解析。可用于车辆CAN协议解析、车辆测试维修、破解车辆CAN协议等
  • cpp-can-parser:用于解析CAN数据库的C ++库(当前仅使用DBC格式)
  • 1.解析*.dbc文件格式文件 2.解析CANTest保存的CAN数据(txt文件),翻译成可以直接看懂的数据 3..显示某个帧ID的帧内容的实时曲线图 4.接收实时CAN数据翻译后保存为txt文件 5.可以收发调试CAN数据
  • OBD-II PIDs (On-board diagnostics Parameter IDs) are codes used to request data from a vehicle, used as a diagnostic tool. SAE standard J1979 defines many OBD-II PIDs. All on-road vehicles and trucks...
  • CAN总线应用层协议实例解析&CAN;总线嵌入式开发
  • 这里的数据使用的是标准的can设备产生的can信号(扩展帧发送数据ID=0x11121181 Data=0x06 0x08) 信号的波形如图1所示,这里示波器的探头接的是CAN_H,探头的夹子接的是CAN_L: 图1 示波器显示波形 首先根据本博客...

    这里的数据使用的是标准的can设备产生的can信号(扩展帧发送数据ID=0x11121181 Data=0x06 0x08)

    信号的波形如图1所示,这里示波器的探头接的是CAN_H,探头的夹子接的是CAN_L:

    在这里插入图片描述

    图1 示波器显示波形

    首先根据本博客中前面写的一篇如何测量can总线波特率获取总线的波特率,然后依据波特率和上面的波形读出具体的数据

    从上面的波形中读取到的数据是

    10111011101100011110111001111101011111001111101001111100111101111011011101

    根据标准can2.0b协议可以讲该字符串解析出来,标准的扩展协议如图2所示

    在这里插入图片描述

    然后将数据根据格式划分成各个有意义的字段,如图3所示,这里我自己将高电平编码为1,低电平编码为0。但是在can协议中,他将高电平定义为显性位,逻辑上定义为0,将低电平定义为隐形位,逻辑上定义为1,我们前面先不管这个。

    图3 数据分割

    在can的协议中当连续出现5个高电平时就需要插入一个低电平,所以在解析的过程中需要将这些插入的数据删除,就是图3中用红线删除的那些数据。

    在删除这些数据之后根据图2的格式可以将各个字段分割出来

    解析信息:

    29位ID:0 1110 1110 1101 1110 1110 0111 1110,从右到左每4位一个字段,这里需要将其在转换回can协议定义的逻辑电平的形式—即将0变为1,将1变为0,这样便符合我们日常的编码习惯。解析出来的ID=0x11121181,与我们发送的数据是相符合的。

    DLC:1101 转换成十进制为2 表示这一帧中有两个数据,接下来的16个字节便表示2个数据

    D1:11111001 = 0x06

    D2:11110111 = 0x08

    这样便解析出了我们需要的数据,这是和我发送的数据一致的。

    这里需要注意的有两点:

    1、在can的协议中当连续出现5个高电平时就需要插入一个低电平;

    2、在can协议中将CAN_H和CAN_L的差值为高电平时定义为显性,逻辑上表示为0,为低电平时定义为隐形,逻辑上表示为1。这在解码的过程中需要注意。

    展开全文
  • CAN报文解析:根据实际值、精度、偏移量计算16进制数据; CAN负载率:计算总线负载率百分比; 静态电流:根据静态电流大小计算可存放天数; 助力转向匹配:EPS系统基本匹配计算; 仪表速比:组合仪表车速速比计算。
  • ![图片说明](https://img-ask.csdn.net/upload/201605/09/1462799145_673074.jpg) 请问一下,这个协议具体的意思。该如何解析这个协议。 共八字节的数据,如何分别解析呀?
  • CANopen协议以太网报文,可以用wireshark软件打开,适用于学习CANopen报文解析,学习各种工业以太网协议可参考本人其他下载文件
  • CAN及CANOPEN协议解析
  • CAN报文的解析与应用

    2018-12-25 15:03:56
    本文论述CAN报文定义、接收CAN报文的方法以及CAN报文的组成与帧结构;通过实解析电动汽车整车控制与电池管理系统之间CAN通信报文的含义,并分析如何应用CAN报文的解析来诊断有关电动汽车的故障。
  • can数据解析说明

    2018-10-10 18:33:23
    intel与Motorola格式的区别,CAN协议解析说明 sdf asd f
  • CAN详解--协议详解

    万次阅读 多人点赞 2018-11-27 21:21:38
    基础知识一、背景二、发展三、总线要点四、参考 ...1、随着车用电气设备增加,对应的电气节点剧增(高档车节点有上千之多),一般的通信协议需要的线束太多。 2、 二、发展 1、 三、总线要点 1、 四、参考 1、 ...

    一、背景

    1、随着车用电气设备增加,对应的电气节点剧增(高档车节点有上千之多),一般的通信协议需要的线束太多。需要减少线束,支持更多节点的协议。
    ECU分布

    二、发展

    1、CAN ( Controller Area Network ) 即控制器局域网络。由于其高性能、高可靠性、及独特的设计,CAN越来越受到人们的重视。CAN最初是由德国的BOSCH公司为汽车监测、控制系统而设计的。现代汽车越来越多地采用电子装置控制,如发动机的定时、注油控制,加速、刹车控制(ASC)及复杂的抗锁定刹车系统(ABS)等。由于这些控制需检测及交换大量数据,采用硬接信号线的方式不但烦琐、昂贵,而且难以解决问题,采用CAN总线上述问题便得到很好地解决。
    2、1983-1986年 大众与Bosch制定 软件协议,由Intel 生产控制器。
    3、1990年 首次应用于汽车 奔驰 S级 12 缸发动机的汽车。
    4、1991年9月,NXP半导体公司制定并发布CAN技术规范CAN2.0A/B,其中CAN2.0A协议规范定义了标准帧格式,CAN2.0B协议规范定义了扩展帧格式。
    5、1993年11月,ISO组织正式颁布CAN国际标准ISO11898(高速应用,数据传输速率小于1Mbps)和ISO11519(低速应用,数据传输速率小于125Kbps)。
    6、1996年 用于奥迪 A8 D2自动变速器 3.7升 V8 01V AG5的汽车。
    7、1997年 用于帕萨特 B5 AG。
    8、1998年 用于宝来、高尔夫 A4 AG。
    9、VAN Bus 用于标志、雷诺、雪铁龙等,菲利普公司产品。
    10、J1850-HBCC 用于福特,莫托罗拉公司产品。
    11、J1850-DLC 用于通用,莫托罗拉公司产品。

    三、总线优点

    1、数据传递更安全可靠;
    2、低成本(通信介质可采用双绞线,同轴电缆和光导纤维,一般采用廉价的双绞线即可,无特殊要求);
    3、高速实时传递;
    4、有条件实现单线功能;
    5、适用于各种汽车;
    6、开放的标准。

    四、总线要点

    1、CAN的应用

    (1)车载网络构想

    车载网络构想

    (2)应用实例

    应用实例

    (3)连接图

    CAN连接图

    2、CAN协议基本概念

    (1)ISO模型与CAN协议

    ISO与CAN

    (2)ISO11898 和 11519-2 物理层的主要不同点

    ISO11898 和 11519-2 物理层的主要不同点

    (3)通信速度和最大总线长度

    通信速度和最大总线长度

    (4)ISO11898、ISO11519-2 的物理层特征

    ISO11898、ISO11519-2 的物理层特征

    (5)CAN 协议和标准规格

    CAN 协议和标准规格

    (6)通信协议分类

    通信协议分类

    3、CAN协议

    帧的种类及用途

    在这里插入图片描述

    (1)数据帧

    A、数据帧的构成

    数据帧的构成
    数据帧由7个段构成,分别是:
    (1) 帧起始:表示数据帧开始的段。
    (2) 仲裁段:表示该帧优先级的段。
    (3) 控制段:表示数据的字节数及保留位的段。
    (4) 数据段:数据的内容,可发送 0~8 个字节的数据。
    (5) CRC 段:检查帧的传输错误的段。
    (6) ACK 段:表示确认正常接收的段。
    (7) 帧结束:表示数据帧结束的段。

    (2)遥控帧

    A、遥控帧的构成

    在这里插入图片描述
    遥控帧由6个段构成,分别是:
    (1) 帧起始(SOF):表示帧开始的段。
    (2) 仲裁段:表示该帧优先级的段。可请求具有相同 ID 的数据帧。
    (3) 控制段:表示数据的字节数及保留位的段。
    (4) CRC 段:检查帧的传输错误的段。
    (5) ACK 段:表示确认正常接收的段。
    (6) 帧结束:表示遥控帧结束的段。

    (3)错误帧

    A、错误帧的构成

    在这里插入图片描述
    (1) 错误标志
    错误标志包括主动错误标志和被动错误标志两种。
    主动错误标志:6 个位的显性位。
    被动错误标志:6 个位的隐性位。
    (2) 错误界定符
    错误界定符由 8 个位的隐性位构成

    (4)过载帧

    A、过载帧的构成

    在这里插入图片描述
    (1) 过载标志
    6 个位的显性位。
    过载标志的构成与主动错误标志的构成相同。
    (2) 过载界定符
    8 个位的隐性位。
    过载界定符的构成与错误界定符的构成相同。

    (5)帧间隔

    A、帧间隔的构成

    在这里插入图片描述
    帧间隔是用于分隔数据帧和遥控帧的帧。数据帧和遥控帧可通过插入帧间隔将本帧与前面的任何帧(数据帧、遥控帧、错误帧、过载帧)分开。
    过载帧和错误帧前不能插入帧间隔。
    (1) 间隔
    3 个位的隐性位。
    (2) 总线空闲
    隐性电平,无长度限制(0 亦可)。本状态下,可视为总线空闲,要发送的单元可开始访问总线。
    (3) 延迟传送(发送暂时停止)
    8 个位的隐性位。只在处于被动错误状态的单元刚发送一个消息后的帧间隔中包含的段。

    五、补充要点

    1、信号传输技术数据

    (1)CAN bus最高传播速度:1 Mbps
    (2)ISO 分类:
    低速型 低于10 kbps (用于后视镜调整、电动窗、灯光照明、雨刷器等,称作LIN总线)
    低速型 10 -125 kbps (用于舒适系统、仪表显示等)
    高速型 125 kbps -1Mbps (用于发动机控制、ABS、传动控制等)
    (3)最多接入控制单元数:32个
    (4)通用版本:Bosch CAN 2.0

    2、干扰问题

    (1)两条数据线相互缠绕,防止电磁波干扰和向外辐射,规定绞距20mm。

    3、can收发器接口

    (1)常用三种接口器件
    M12小型连接器、OPEN5连接端子、DB9插座

    4、显性电平和隐性电平

    总线上的电平有显性电平和隐性电平两种。
    总线上执行逻辑上的线“与”时,显性电平的逻辑值为“0”,隐性电平为“1”。“显性”具有“优先”的意味,只要有一个单元输出显性电平,总线上即为显性电平。并且,“隐性”具有“包容”的意味,只有所有的单元都输出隐性电平,总线上才为隐性电平。(显性电平比隐性电平更强。)

    六、参考

    1、《上海大众帕萨特CAN数据总线的结构原理》
    2、《CAN 入门书》 作者 瑞萨科技
    3、CAN总线要点

    展开全文
  • C# CAN信号解析算法

    2020-11-17 09:21:33
    CAN信号值解析 本文提供一种可以解析CAN信号各信号值的一种方法并进行说明。 一般情况下,高端一点的设备会计算每一个信号的值,但是接受到CAN信号的报文实际上有各种情况,如何通过设定的起始位和数据长度来获取...
  • python,解析CAN协议--------随意写

    千次阅读 2018-08-17 10:13:55
     f = open(r'.\cfg\CAN协议总结.cfg')  for line in f:  if line[5:10] =="CANID":  self.combox = self.combox + (line[11:14],)  f.close()    self.combox = tuple(set(self.combox)) #去重  ...
  • CAN总线协议详解

    千次阅读 2020-10-27 10:50:27
    can总线,两条线,CANH和CANL,电位差判断总线电平,采用差分信号,有显性电平和隐形电平。 报文结构: 数据帧:大多数情况下使用的报文结构 从标识符长度上,又可以把数据帧分为标准帧 (11 位标识符 ) 和...
  • can分析工具

    2017-04-18 13:13:12
    can分析工具
  • 如果需要自行去调试逻辑时,需要一些符合协议的测试数据,对照协议去凑去组包,也很费劲,特别是协议中的CAN数据上报,一堆几百个字节甚至一两K的字节,看着就头大。后来又需要调试UART串口,将MCU传输的协议数据分...
  • CAN总线简介,CAN物理层数据交换原理,CAN报文格式分析,J1939协议介绍,PDU格式,报文实例分析,PGN报文实例分析,J1939的传输协议-连接管理和多包传输,Intel与Motorola格式的区别
  • CAN协议.dbc

    2019-08-08 08:18:12
    适合初学者参考学习!

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 42,913
精华内容 17,165
关键字:

can协议解析