精华内容
下载资源
问答
  • 帧代码错误
    2020-09-13 17:56:09

    0 背景

    就算是TCP传输,也会存在因为网络不稳定或其他原因,导致传输到客户端的数据丢失了部分数据,导致拆包的时候,无法正常拆包(比如帧头带的长度显示整个帧体(包括帧头的长度是10个字节),但是实际收到的只有7个长度,这就会导致把下一帧的枕头错误的读3个字节到上一帧的帧体中,导致数据错位,)。那如何处理呢?

    1 解决

    丢掉本次接收的接收的数据,也就是进行一次下面的操作,然后再按正常拆包流程继续拆包:

    QTcpSocket* tcpSocket;
    tcpSocket->readAll()

    但是这样的做法十分不科学,会导致丢失大量的数据。

    合理的做法是继续往下寻找合法的帧头:

     QByteArray data = tcpSocket->readAll();
     QByteArray  m_cache = data;
     //记录帧头的位置
     int headSeq=0;
     while(findhead(m_cache,headSeq))
      {
      //移除前面非法数据
       m_cache.remove(0,headSeq);
    	//把剩余的合法带帧头的套接字加在下一次处理的套接字里面  
    	//code 
      }
    

    寻找合法帧头:

    bool findhead(QByteArray &buffer, int &index)
    {
        char * ptr= buffer.data();
    
        int i =0;
        int frameLength = 4;//帧头长度
        for(i = 0;i < buffer.size()- frameLength;++i)
        {
            /*
                * 找到头部,并将头部所在下标传给index
                */
                
    	  //依次寻找合法帧头
            if((quint8)ptr[i] == (quint8)0xff &&
               (quint8)ptr[i+1] == (quint8)0xcb &&
                (quint8)ptr[i+2] ==(quint8)0xbc &&
                (quint8)ptr[i+3] == (quint8)0xff)
            {
                index = i;
                return true;
            }
        }
        return false;
    }
    
    更多相关内容
  • CAN总线协议学习不难,但是错误帧错误状态很抽象,资料也很多,但是想讲的通俗易懂不容易,希望或多或少可以帮助到初学者;


    一、五种CAN总线可能发生的错误

    1、CRC错误:

    接收节点计算出的CRC校验值,与发送节点计算的结果不一致;

    2、格式错误:

    传输的数据帧格式,与任何一种帧格式都不符;

    3、应答错误:

    ACK段,发送节点没有收到接收节点发出的应答(显性位);

    单节点的CAN设备发送数据帧时为发生应答错误;

    4、位发送错误:

    发送过程中,发送节点发送的同时监听总线电平,如果总线电平和发送的不一致;

    在仲裁域发现不同不报错,因为就是要仲裁掉优先级低的报文;

    发送被动错误标志、主动错误标志期间检测总线电平有6个相同位时;

    5、位填充错误:

    帧起始到CRC之间,接收节点检测到有6个连续相同的位电平时,也就是违反5位相同位插入1位相反位的“位填充”原则;

    因为ACK域和帧结束域电平固定,也无需填充;

     

    二、三种错误状态

    主动错误标识——6个显性位、由主动错误节点发出

    被动错误标识——6个隐性位、由被动错误标志发出

    错误界定符——8个隐性位

    1、主动错误 

    因为主动错误标识由6个显性位组成,可以理解为破坏“位填充”原则,一个节点发现通信错误时,它会主动将帧彻底破坏掉,让其他节点知道它接收出错了;

    CAN总线的特点是“广播”,也就是总线上一个节点发出,其余所有节点均能正确接收,如果有一个或多个节点由于某种原因出现接收错误,那么这个节点会主动站出来,通过发送不符合“位填充”规则的帧错误帧,来彻底把这一帧破坏掉,以通知其他节点“这一帧我接收错了,不算数,重来”,其他节点也许没有错,但是也会在收到主动错误标识后发出一个主动错误标识;发送节点在发送的同时也会监听总线数据,当发现数据被其他节点“破坏”后,会主动进行数据重发。

    CAN控制器自动完成。 

    错误不多,不是我导致的,我主动发送错误标识,通知其他节点放弃这一帧,我正常收发;

    2、被动错误 

    错误比较多,很可能错误是由我导致的,我通知其他节点有错但是不干扰他们正常收发数据,也不要求重发,同时我不能连续发送了,得再插入8位隐性位的“延迟传送”段;这样是为了让其他正常节点(处于主动错误)优先使用总线;

    被动错误的节点很可能存在硬件故障,不能让它拖累整个网络;

    3、总线关闭

       错误太多,是我的问题,我停止收发并脱离总线;

       总线上数据的收发都被禁止;

    展开全文
  • 最近在研究CAN总线的驱动,需要详细了解数据/标准/扩展/远程/错误帧这几种的详细组成格式,于是收集了一下,统一放在这里进行对比和记录,以便日后需要时查阅

    最近在研究CAN总线的驱动,需要详细了解数据帧/标准帧/扩展帧/远程帧/错误帧这几种帧的详细组成格式,于是收集了一下,统一放在这里进行对比和记录,以便日后需要时查阅。

    1、数据帧-标准帧

    CAN 标准数据帧如下图所示。与其他所有帧一样,帧以起始帧 (SOF)位开始, SOF 为显性状态,允许所有节点的硬同步。

    SOF之后是仲裁字段,由12个位组成,分别为11个标识位和一个远程发送请求(Remote Transmission
    Request, RTR)位。 RTR 位用于区分报文是数据帧(RTR 位为显性状态)还是远程帧 (RTR 位为隐性状态)。

    仲裁字段之后是控制字段,由 6 个位组成。控制字段的第一位为标识扩展(Identifier Extension,IDE)位,该位应是显性状态来指定标准帧。标识扩展位的下一位为零保留位(RB0),CAN 协议将其定义为显性位。控制字段的其余 4 位为数据长度码 (Data Length Code,DLC),用来指定报文中包含的数据字节数 (0 到 8 字节)。

    控制字段之后为数据字段,包含要发送的任何数据字节。数据字段长度由上述 DLC 定义 (0 到 8 字节)。数据字段之后为循环冗余校验(CRC)字段,用来检测报文传输错误。CRC 字段包含一个 15 位的 CRC 序列,之后是隐性的 CRC 定界位。

    最后一个字段是确认字段 (ACK),由 2 个位组成。在确认时隙(ACK Slot)位执行期间,发送节点发出一个隐性位。任何收到无错误帧的节点会发回一个显性位(无论该节点是否配置为接受该报文与否)来确认帧收到无误。确认字段以隐性确认定界符结束,该定界符可能不允许被改写为显性位。
    在这里插入图片描述

    2、数据帧-扩展帧

    在扩展 CAN 数据帧中(如下图所示),紧随 SOF 位的是 32 位的仲裁字段。仲裁字段的前 11 位为 29 位标识符的最高有效位(Most Significant bit,MSb)(基本lD) 。紧随这 11 位的是替代远程请求(Substitute Remote Request, SRR)位,定义为隐性状态。 SRR位之后是 lDE 位,该位为隐性状态时表示这是扩展的CAN 帧。

    应该注意的是,如果发送完扩展帧标识符的前 11 位后,总线仲裁无果,而此时其中一个等待仲裁的节点发出标准 CAN 数据帧 (11 位标识符),那么,由于节点发出了显性 lDE 位而使标准 CAN 帧赢得总线仲裁。另外,扩展 CAN 帧的 SRR 位应为隐性,以允许正在发送标准CAN 远程帧的节点发出显性 RTR 位。

    SRR和lDE位之后是标识符的其余18位(扩展lD)及一个远程发送请求位。

    为使标准帧和扩展帧都能在共享网络上发送,应将29位扩展报文标识符拆成高 11 位和低 18 位两部分。拆分后可确保 lDE 位在标准数据帧和扩展数据帧中的位置保持一致。

    仲裁字段之后是 6 位控制字段。控制字段前两位为保留位,必须定义为显性位。其余 4 位为 DLC,用来指定报文中包含的数据字节数。

    扩展数据帧的其他部分 (数据字段、 CRC 字段、确认字段、帧结尾和间断)与标准数据帧的结构相同。
    在这里插入图片描述

    3、远程帧

    通常,数据传输是由数据源节点(例如,传感器发出数据帧)自主完成的。但也可能存在目标节点向源节点请求发送数据的情况。要做到这一点,目标节点需发送一个远程帧,其中的标识符应与所需数据帧的标识符相匹配。随后,相应的数据源节点会发送一个数据帧以响应远程帧请求。

    远程帧 与数据帧存在两点不同:

    1)远程帧的 RTR 位为隐性状态;
    2)远程帧没有数据字段。

    当带有相同标识符的数据帧和远程帧同时发出时,数据帧将赢得仲裁,因为其标识符后面的 RTR 位为显性。这样,可使发送远程帧的节点立即收到所需数据。
    在这里插入图片描述

    4、主动错误帧

    当错误主动节点检测到一个总线错误时,这个节点将产生一个主动错误标志来中断当前的报文发送。主动错误标志由 6 个连续的显性位构成。这种位序列主动打破了位填充规则。所有其他节点在识别到所生成的位填充错误后,会自行产生错误帧,称为错误反射标志。

    错误标志字段因此包含 6 到 12 个连续显性位 (由 1 个或多个节点产生)。错误定界字段 (8 个隐性位)为错误帧划上句号。在错误帧发送完毕后,总线主动恢复正常状态,被中断的节点会尝试重新发送被中止的报文。
    在这里插入图片描述

    5、过载帧

    过载帧与主动错误帧具有相同的格式。

    但是,过载帧只能在帧间间隔产生,因此可通过这种方式区分过载帧和错误帧 (错误帧是在帧传输时发出
    的)。过载帧由两个字段组成,即过载标志和随后的过载定界符。过载标志由 6 个显性位和紧随其后的其他节点产生的过载标志构成 (而主动错误标志最多包含 12个显性位)。过载定界符包含 8 个隐性位。节点在两种情况下会产生过载帧:

    1)节点在帧间间隔检测到非法显性位。在 IFS 的第三位期间检测到显性位除外。这种情况下,接收器会把它看作一个 SOF 信号。
    2)由于内部原因,节点尚无法开始接收下一条报文。节点最多可产生两条连续的过载帧来延迟下一条报文的发送。
    在这里插入图片描述

    展开全文
  • CAN的报文格式 在总线中传送的报文,每由7部分组成。CAN协议支持两种报文格式,其唯一的...RTR位标明是数据还是请求,在请求中没有数据字节。 控制场包括标识符扩展位(IDE),指出是标准格式还是扩展格...
    1. CAN的报文格式

      在总线中传送的报文,每帧由7部分组成。CAN协议支持两种报文格式,其唯一的不同是标识符(ID)长度不同,标准格式为11位,扩展格式为29位。

      在标准格式中,报文的起始位称为帧起始(SOF),然后是由11位标识符和远程发送请求位(RTR)组成的仲裁场。RTR位标明是数据帧还是请求帧,在请求帧中没有数据字节。

      控制场包括标识符扩展位(IDE),指出是标准格式还是扩展格式。它还包括一个保留位 (ro),为将来扩展使用。它的最后四个位用来指明数据场中数据的长度(DLC)。数据场范围为0~8个字节,其后有一个检测数据错误的循环冗余检查(CRC)。

      应答场(ACK)包括应答位和应答分隔符。发送站发送的这两位均为隐性电平(逻辑1),这时正确接收报文的接收站发送主控电平(逻辑0)覆盖它。用这种方法,发送站可以保证网络中至少有一个站能正确接收到报文。

      报文的尾部由帧结束标出。在相邻的两条报文间有一很短的间隔位,如果这时没有站进行总线存取,总线将处于空闲状态。

      如图11所示,具体某一位或某几位下面会详细介绍。

      图11 CAN总线报文结构

    2. 数据帧

      数据帧是使用最多的帧,结构上由7段组成,其中根据仲裁段ID码长度的不同,分为标准帧(CAN2.0A)和扩展帧(CAN2.0B)。

      数据帧是由:帧起始,仲裁断,控制端,数据段,CRC段,ACK段和帧结束构成。

      如图21所示(具体的帧结构下面会详细介绍)。

      图2–1数据帧类型及结构

    3. 帧起始和帧结束

      帧起始:由单个显性位组成,总线空闲时,发送节点发送帧起始,其他接收节点同步于该帧起始位。

      帧结束:由7个连续的隐形位组成。

      (注:显性电平和隐性电平是相对于CAN_H和CAN_L而言的差分信号电平,并非TTL电平上的高低电平,需要注意)如图2-2所示。

       

      图2–2帧起始和帧结束

    4. 仲裁段

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

      CAN-bus并没有规定节点的优先级,但通过仲裁段帧ID规定了数据帧的优先级。根据CAN2.0标准版本不同,帧ID分为11位和29位两种。如图23所示

       

      图2–3数据帧结构

      如图24所示CAN控制器在发送数据的同时监测数据线的电平是否与发送数据对应电平相同,如果不同,则停止发送并做其他处理。

      图2–4仲裁处理

      假设节点A、B和C都发送相同格式相同类型的帧,如标准格式数据帧,它们竞争总线的过程是(如图16所示):

      图2–5仲裁机制

      从该分析过程得出结论是:帧ID值越小,优先级越高;

      对于同为扩展格式数据帧、标准格式远程帧和扩展格式远程帧的情况同理

    5. 控制段

      控制段共6位,标准帧的控制段由扩展帧标志位IDE、保留位r0和数据长度代码DLC组成;扩展帧控制段则由IDE、r1、r0和DLC组成如图17所示。

      图2–6数据帧结构

    6. 数据段

      一个数据帧传输的数据量为0~8个字节,这种短帧结构使得CAN-bus实时性很高,非常适合汽车和工控应用场合如图27所示。

      图2–7数据段

      数据量小,发送和接收时间短,实时性高,被干扰的概率小,抗干扰能力强。

    7. CRC段

      CAN-bus使用CRC校验进行数据检错,CRC校验值存放于CRC段。 CRC校验段由15位CRC值和1位CRC界定符构成如图28所示。

      图2–8CRC段

    8. ACK段

      当一个接收节点接收的帧起始到CRC段之间的内容没发生错误时,它将在ACK段发送一个显性电平如图29所示。

      图2–9 ACK段

    9. 远程帧

      与数据帧相比,远程帧结构上无数据段,由6个段组成,同理分为标准格式和扩展格式,且RTR位为1(隐性电平)如图31所示。

      图3–1远程帧结构

      如下图所示由于数据帧的RTR位为显性电平,远程帧的RTR位为隐性电平。

      所以帧格式和帧ID都相同情况下,数据帧的优先级比远程帧优先级高如图32所示:

      图3–2数据帧于远程帧仲裁机制

       

      图3–3数据帧远程帧比较

      数据帧与远程帧的区别如图33所示。

       

    10. 错误帧

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

      图4–1错误帧类型

      当出现5种错误类型之一时,发送或接收节点将发送错误帧。错误帧的结构如下,其中错误标识分为主动错误标识和被动错误标识如图42所示。

      图4–2错误帧电平结构

      为防止自身由于某些原因导致无法正常接收的节点一直发送错误帧,干扰其他节点通信,CAN-bus规定了节点的3种状态及其行为如图43所示。

      图4–3错误处理机制

      (注:这些错误处理的机制是由硬件自主完成的这样做的目的就是只要CAN在收到数据肯定是正确的数据)。

       

    11. 过载帧与帧间隔

    12. 过载帧

      当某个接收节点没有做好接收下一帧数据的准备时,将发送过载帧以通知发送节点;过载帧由过载标志和过载帧界定符组成如所示图51。

      图5–1过载帧结构

      由于存在多个节点同时过载且过载帧发送有时间差问题,可能出现过载标志叠加后超过6个位的现象如所示图52。

      图5–2过载帧具体结构

    13. 帧间隔

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

      帧间隔过后,如果无节点发送帧,则总线进入空闲。

      帧间隔过后,如果被动错误节点要发送帧,则先发送8个隐性电平的传输延迟,再发送帧。

    14. CAN总线发送总流程

      CAN-bus整个链路层处理数据的流程是如图61所示:

      图6–1CAN总线发送总流程

       

    15. 参考资料

      《项目驱动--CAN-BUS现场总线基础教程----周立功,黄晓清》。

      《现场总线技术及其应用第二版–清华大学出版社》。

    展开全文
  • CAN总线之CAN的报文格式--错误帧

    千次阅读 2018-10-15 09:41:29
    错误帧:任何单元检测到一总线错误就发出错误帧。 过载:过载用以在先行的和后续的数据(或远程)之间提供一附加的延时。 同时间空间用来间隔数据/远程与其他。 1.数据 一个完整的数据有7...
  • 设计PCM30基群同步电路 电路功能说明: 1.输入码流DATA,速率为2.04Mb/S;每256bit,其中前8bit为同步码;偶数同步码为10011011...3.系统处于同步态后,当连续四检出的同步码均错误,则系统转为失步态
  • 错误现象:stm32单步调试发现在can初始化后,配置完can滤波器后can错误寄存器ESR立马检测到错误,但是can的errorcode为0 找了一块正常的板子在线调试,正常的情况下在can初始化滤波器配置后can的ESR寄存器应该都...
  • 错误代码:-1609629695 于是亲测该PR模板:PR模板 卖房售房租房酒店促销等产品幻灯片展示PR视频模板 找到了解决办法。 如果你也遇到同样问题,可以尝试下面的方法哦。 1、点击菜单“文件”,选则“项目设置”,点击...
  • 完整的蓝屏错误代码大全详解

    千次阅读 2021-06-18 13:43:35
    完整的BSOD错误代码列表从STOP 0x1到STOP 0xC0000221 一个死机(BSOD)的蓝屏,技术上称为一个STOP错误,若在Windows遭受了严重的错误,被迫“停”的问题。 在任何Windows操作系统中都会出现BSOD错误,包括Windows...
  • 找的其他代码错误,自己编写了一个。 斜方向的距离用的两倍,使用者可自行设置大小。如有错误请指正!
  • 经常使用Windows系统的应该少不了蓝屏的时候...一个死机(BSOD)的蓝屏,技术上称为一个STOP错误,若在Windows遭受了严重的错误,被迫“停”的问题。 在任何Windows 操作系统中都会出现BSOD错误,包括Windows 10,Wind...
  • 对H.264视频码流的内编码(I)进行空域错误掩盖时,单纯使用加权像素平均插值算法或方向插值算法不能得到满意的效果。因此,使用一种基于方向熵的自适应选择算法,根据丢失宏块周围的边缘信息自适应地选择加权...
  • 同时基于图像信号的相关性、光滑性及一致性的假设,分别对 MPEG-2的 I-、P-和 B-图像提出了相应的错误隐藏技术。此外通过分析直流系数的错误结果后,提出了直流系数的错误隐藏方法。该文算法简单,适于实时处
  • Python:使用Katna提取视频关键

    千次阅读 2022-04-13 20:33:40
    ,尤其是在长时间拍摄类似镜头的场景中,对图像进行重复数据消除将有助于过滤掉大多数“噪声”,并最大程度地提取视频的核心内容。如果你把这些图片一张一张地放在面前,你也可以做到像文本内容一样一目十行,减少...
  • 主要介绍四种运动目标检测的算法代码,每段代码博主实测可运行。当前主流的混合高斯背景模型,VIBE算法代码转载自他处。另外GMG算法,KNN算法在朱伟的书中有讲
  • CAN总线报文错误基础知识

    千次阅读 2022-04-25 16:01:34
    认识CAN 总线错误的第一步就是了解认识CAN 总线协议和它的具体功能,这样...对于标准CAN 数据而言,它有一个更详细的版本(如下图所示),它可以帮助我们了解错误位的位置和工作原理。 ●分隔符位:它们是隐...
  • 错误代码判定总结

    2012-10-21 20:47:52
    测BIOS芯片CS有无片选:  (1)、有片选:换BIOS、测BIOS的OE是否有效、测PCI的AD线、测CPU 复位有无1.5V--0V跳... (2)、无片选:测PCI的FRAME、测CPU的DBSY ADS#,如不正常则北桥坏、若周期信号不正常则南桥坏
  • 恰好碰到同学项目需要,了解了一下关于利用深度学习视频插的相关知识,在这里做一个简单的记录。 一、方法+论文 1.DAIN (Depth-Aware Video Frame Interpolation) 论文:https://arxiv.org/pdf/1904.00830.pdf ...
  • 'data' ): os.makedirs( 'data' ) # 如果未创建,则引发错误 except OSError: print ( 'Error: Creating directory of data' ) # frame currentframe = 0 while ( True ): # reading from frame ret, frame = cam....
  • 汽车CAN总线数据分类及格式详解

    千次阅读 2020-12-10 16:25:31
    CAN协议的报文传输过程中有:数据、远程错误帧、过载间隔。 1.数据:用于发送节点向接收节点传送数据的。 2.远程:用于接收节点向具有相同ID的发送节点传送数据的。 3.错误帧:用于当检测...
  • Capl编程xml标签语法(4)——CAN报文周期检测/错误帧检测/信号改变检测。。。
  • 直接上代码 /************************************************************************** * @brief 串口错误回调函数 * @retval ***********************************************************.
  • 先说明一下处理缺页错误的过程: 分页硬件在通过页表转换地址时会注意到无效位被设置,从而陷入操作系统,这种陷阱是因为操作系统未能将所需要的页面调入内存引起的。 处理缺页错误: 1、检查这个进程的内部表,确定...
  • 行为识别C3D代码(pytorch)实现过程及常见错误

    千次阅读 多人点赞 2021-01-31 11:46:31
    行为识别C3D代码(pytorch)实现过程及常见错误 1.C3D网络代码 C3D(pytorch)实现代码链接: C3D代码 2.C3D代码复现过程 (1)环境要求 pytorch版本: (1)数据集的制作 首先将UCF-101的数据集结构存储为以下形式: ...
  • python实现视频关键提取(基于间差分)

    万次阅读 多人点赞 2018-12-05 20:35:17
    python实现视频关键提取(基于间差分) 在很多场景下,我们不想或者不能处理视频的每一图片,这时我们希望能够从视频中提取出一些重要的进行处理,这个过程我们称为视频关键提取。 关键提取算法多种多样...
  • python cv2实现视频抽

    千次阅读 2022-01-26 10:42:41
    start_frame 处 while status and count , frame1 = self.cap.read() if status: videoWriter.write(frame1) count += 1 else: if count == 0: print('视频打开错误') self.cap.release() videoWriter.release() ...
  • [文章导读] 蓝屏是操作系统为了保护硬件而产生的蓝屏,但蓝屏代码有上百种,有些网友对于蓝屏代码比较...一个死机(BSOD)的蓝屏,技术上称为一个STOP错误,若在Windows遭受了严重的错误,被迫“停”的问题。在任何Win...
  • HTTP状态代码(各种错误代码集合) 100 Continue 初始的请求已经接受,客户应当继续发送请求的其余部分。(HTTP 1.1新) 101 Switching Protocols 服务器将遵从客户的请求转换到另外一种协议(HTTP 1.1新) 200 OK ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 100,711
精华内容 40,284
关键字:

帧代码错误