GOOSE报文分析_详解GOOSE服务

2023-05-16

https://www.cnblogs.com/software4y/p/10017602.html

http://blog.sina.com.cn/s/blog_af8298410102wnvm.html

https://www.cnblogs.com/software4y/p/10017930.html

https://wenku.baidu.com/view/d47c10c389eb172ded63b75e.html

以上四篇文章整理如下文。

面向通用对象的变电站事件模型GOOSE

图片出自《浅谈GMRP在变电站中的应用》一文

       在分布式的变电站自动化系统中,IED共同协助完成自动化功能的应用场合越来越多,如间隔层的设备之间的防误闭锁、分布式母线保护等,这些功能得以完成的重要前提条件是IED之间数据通信的可靠性和实时性。基于此,IEC61850中定义了通用变电站事件(Generic Substation Event,GSE)模型,该模型提供了在全系统范围内快速可靠地输入、输出数据值的功能。

      GSE分为两种不同的控制类和报文结构:①面向通用对象的变电站事件(Generic Object Oriented Substation Event,GOOSE),支持由数据集(Data-Set)组织的公共数据交换:②通用变电站状态事件(Generic Substation State Event,GSSE),用于传输状态变位信息(双比特)。如果只从抽象通信服务模型控制块(Control Block)的属性和服务定义两方面比较,GOOSE和GSSE差异不大,但实际上,两者的报文传输内容和实现机制截然不同。GSSE报文传输服务均映射于OSI的7层协议堆栈中,一方面存在协议堆栈传输延时,另一方面,此报文仍基于传统的以太网实现,不支持报文优先级和虚拟局域网、无特定的多播地址等。这使得当网络负荷较重时,难以保证报文传输的实时性。GSSE目前较少使用。下面主要介绍应用最多的GOOSE的服务。

       IEC61850中定义的面向通用对象的变电站事件(GOOSE)以快速的以太网多播报文传输为基础,代替了传统的智能电子设备IED之间的硬接线的通信方式,为逻辑节点间的通信提供了快速且高效可靠的方法。GOOSE服务主要用于传输变电站内保护跳闸、断路器位置、测控联锁等实时性要求的数据,还可以传输如温湿度等模拟量信息,甚至可以传输时间同步信息等。

2 GOOSE发送机制及其特点 

2.1 发送机制

        GOOSE报文的发送采用心跳报文和变位报文快速重发相结合的机制,按图1所示的规律执行。

        其中T0又称心跳时间,在GOOSE数据集中的数据没有变化的情况下,装置平均每隔T0时间发送一次当前状态,即心跳报文,报文中的状态序号stNum(StateNumber用于记录GOOSE数据发生变位的总次数)不变,顺序sqNum(SequenceNumber用于记录稳态情况下报文发出的帧数)递增。

       当装置中有事件发生(如开关状态变位)时,GOOSE数据集中的数据就发生变化,装置立刻发送该数据集的所有数据,然后间隔T1发送第2帧及第3帧,间隔T2、T3发送第4、5帧,T2为2T1,T3为4T1,后续报文以此类推,发送间隔以2倍的规律逐渐增加,直到增加到T0,报文再次成为心跳报文。当数据变位后的第1帧报文中stNum增加1,sqNum从零开始,随后报文中stNum不变,sqNum递增。

       工程应用中,T0设为5s,T1设为2ms。GOOSE状态变位过程共发5帧数据,即以2ms—2ms—4ms—8ms的时间间隔重发GOOSE报文,连续发5帧后便以5s时间间隔变成心跳报文。

       GOOSE接收可以根据报文允许存活时间来检测链路中断,定义报文允许存活时间为2T0,接收方若超过2倍允许存活时间没有收到GOOSE报文即判为中断,发GOOSE断链报警信号。由此,通过GOOSE通信机制也实现了装置间二次回路状态在线监测。

                                                                         图1 GOOSE报文传输时间

 

        T0—稳定条件下,心跳报文传输间隔;(T0)—稳定条件下,心跳报文传输可能被事件打断;T1—事件发生后,最短的重传间隔;T2、T3一直至获得稳定条件的重传间隔。

         GOOSE采用发布者/订阅者通信结构,此通信结构支持多个通信节点之间的对等直接通信。与点对点通信结构和客户/服务器通信结构相比,发布者/订阅者通信结构是一个或多个数据源(即发布者)向多个接收者(即订阅者)发送数据的最佳解决方案,尤其适合数据流量大且实时性要求高的数据通信。发布者/订阅者通信结构符合GOOSE报文传输本质,是事件驱动的。

2.2 报文结构     

   GOOSE报文的传输过程与普通的网络报文不同,它是从应用层经过表示层ASN.1编码后,直接映射到底层的数据链路层和物理层(如图2所示),而不经TCP/IP协议,即不经网络层和传输层。这种映射方式避免了通信堆栈造成的传输延时,从而保证了报文传输的快速性。其中,ASN.1基本编码规则采用的编码结构由标记(Tag)、长度(Length)以及内容(Value)三个部分组成。

       Goose报文在网络上传输时采用的是OSI模型,但只用到OSI网络模型七层中的四层,应用层、表示层、数据链路层和物理层,传输层和网络层为空。应用层定义协议数据单元PDU,经过表示层编码后,不采用TCP/IP协议,而是直接映射到数据链路层和物理层。这种映射方式的目的是避免通信堆栈造成传输延时,从而保证报文传输、处理的快速性。

                                         图2 GOOSE报文结构

3 GOOSE接收机制

3.1 GOOSE单网接收机制

        装置的单网GOOSE接收机制,如图3 所示,装置的GOOSE接收缓冲区接收到新的GOOSE报文,接收方严格检查GOOSE报文的相关参数后,首先比较新接收帧和上一帧GOOSE报文中的StNum(状态号)参数是否相等。若两帧GOOSE报文的StNum相等,继续比较两帧GOOSE报文的SqNum(顺序号)的大小关系,若新接收GOOSE帧的SqNum大于上一帧的SqNum,丢弃此报文,否则更新接收方的数据。若两帧GOOSE报文的StNum不相等,更新接收方的数据。

3.2 GOOSE双网接收机制

        接受方和发送方都采用自动信息处理装置并通过双网相连,两个网络同时工作,装置的GOOSE接收缓冲区接收到新的GOOSE报文,接收方严格检查GOOSE报文的相关参数后,首先比较新接收帧和上一帧GOOSE报文中的StNum。

若StNum大于上一帧报文,则判断为新数据,更新老数据。

若StNum等于上一帧报文,再将SqNum与上一帧进行比较,如果SqNum大于等于上一帧,则判断是重传报文而丢弃,

                                          如果SqNum小于上一帧,则判断发送方是否重启装置,是则更新数据,否则丢弃数据。

若StNum小于上一帧报文,则判断发送方是否重启装置,是则更新数据,否则丢弃报文。在丢弃报文的情况下,判断该网络故障,通过网络切换装置切换到备用网络进行传输。这种方法采用双网同时工作的模式,保证了传输的快速性,由接收方判别是否通信中断并决定是否更新数据,当接收到重传或因某一网络故障而传输的错误信息时,并不会更新数据,从而保证了数据的可靠性。

4 GOOSE报文帧结构

来源见水印

       规定表示层格式,以便通用于不同的数据处理机制。

       根据IEC61850标准,GOOSE报文在数据链路层上采用ISO/IEC 8802-3以太网协议,GOOSE报文由报文头和协议数据单元PDU两部分组成,报文头部分如图5 所示,协议数据单元PDU部分如图6 所示。

      GOOSE报文在MAC层的帧结构包括:源MAC地址、目的地址即组播地址、报文类型、四字节Tag、APPID、报文长度、四字节的保留和APDU。

      ASN.1 BE R 编码形式: 编码规则遵循标记TAG(也有称TYPE)、长度LENGTH、值VALUE的格式,简称TLV。

Tag + Length + Value 的形式:

1)Tag 与数据类型标记的编码一致;     

2)Length 表示后面 Value 的长度;

3)Value 应用 ASCII 码进行编码解析。

ASN.1 allData{   }中数据类型

                                                图5  GOOSE报文头    

Header MAC

MAC目的地址(6字节)

6个字节的目的地址“01 0c cd 01 00 33”。前三个字节固定为“01-0C-CD”,第四个字节为“01”时代表GOOSE。IEC61850规定GOOSE报文目的地址取值范围为01-0C-CD-01-00-00~01-0C-CD-01-01-ff。

MAC源地址(6字节)

6个字节的源地址“00 10 00 00 00 33

Priority tagged

TPID(2字节标记)= 0x8100

TCI(2字节)

“8000”包括三个部分,用户优先级前三个Bit位“100”优先级为4,CFI占第四个Bit位“0”,VLAN ID占最后十二个Bit位全0=0。

(TPID + TCI ) 部分可以不使用,但强烈建议以太网传输的时候加入。

网络数据类型

Ethertype(2字节)=0x88B8

IEC 61850中各种报文的以太网类型已经由IEEE的著作权注册机构进行了注册,GOOSE报文的以太网类型值是0x88B8。

APPID (2字节)=0x0000~0x3FFF

应用标识APPID“00 33”,该值全站唯一。

Length(2字节)= 8+m

0x00B6十进制数为182,表示数据帧从APPID开始到应用协议数据单元APDU结束的部分共有182个字节。

Reserved 1(2字节)=0x0000

Reserved 2(2字节)=0x0000

APDU,详述见下方表格

                                                           

                                          

                                                                图6  GOOSE PDU部分

GOOSE的APDU报文格式见下表

APDU数据T-L

标记61H,长度。

此长度占用可能为1,2,3...字节,具体格式如下方右侧图。ASN.1的字节数都在用此方式。

  

GoCBRef字符串

标记80H,长度≤65(占用字节数不确定,参考),GOOSE控制块索引

由分层模型中的逻辑设备名、逻辑节点名、功能约束和控制块名级联而成。

允许生存时间

标记81H,长度,t

该参数值一般为心跳时间T0值的2倍,如果接收端超过2T0时间内没有收到报文则判断报文丢失,在4T0时间内没有收到下一帧报文即判断为GOOSE通信中断,判出中断后装置会发出GOOSE断链报警。

Datset字符串

标记82H,长度≤65,Datset字符串

即GOOSE控制块所对应的GOOSE数据集引用名,由逻辑设备名、逻辑节点名和数据集名级联而成。报文中Data部分传输的就是该数据集的成员值。

GoID

标记83H,长度≤65

该参数是每个GOOSE报文的唯一性标识,该参数的作用和目的地址、APPID的作用类似。接收方通过对目的地址、APPID和goID等参数进行检查,判断是否是其所订阅的报文。

StNum 时间

标记84H,长度=8,t

即Event TimeStamp,事件时标,其值为GOOSE数据发生变位的时间,即状态号stNum加1的UTC时间

此时间格式共占8个字节,其中的前四个字节是从1970年1月1日0时0秒0分0秒至今流过的秒数,紧跟着的3个字节是秒的小数部分,最后的一个字节是时间的品质和精度 

StNum 值

标记85H,长度≤5,StNum值

即StateNumber,状态序号,用于记录GOOSE数据发生变位的总次数

SqNum

标记86H,长度≤5,SqNum值

即SequenceNumber,顺序号SqNum,用于记录稳态情况下报文重复发出的帧数,装置每发出一帧GOOSE报文,SqNum应加1;当有GOOSE数据变化时,该值归0,从头开始重新计数。

Test位

标记87H,长度=1,test值

布尔型变量,检修标识,用于表示发出该GOOSE报文的装置是否处于检修状态。当检修压板投入时,test标识应为True。

配置版本号

标记88H,长度≤5,ConfRev

配置版本号,Config Revision是一个计数器,代表GOOSE数据集配置被改变的次数。当对GOOSE数据集成员进行重新排序、删除等操作时,GOOSE数据集配置被改变。配置每改变一次,版本号应加1。

未配置好标志

标记89H,长度=1,Needs commissioning

该参数是一个布尔型变量,用于指示GOOSE是否需要进一步配置。

GOOSE的ASN.1编码单元个数

标记8aH,长度≤5,总个数

NumDataSetEntries:即数据集条目数,图中其值为“19”,代表该GOOSE数据集中含有19个成员,相应地报文Data部分含有19个数据条目。(alldata中数据链的个数)

GOOSE数据T-L

标记abH,长度

该部分是GOOSE报文所传输的数据当前值。Data部分各个条目的含义、先后次序和所属的数据类型都是由配置文件中的GOOSE数据集定义的。

GOOSE状态

标记83H,长度=1,stVal

标记84H,长度=2,q

标记91H,长度=8,t

GOOSE整型

标记85H,长度=4,值(4字节)

GOOSE浮点

标记87H,长度=5,08H,浮点(4字节)

……

           

解析注意事项:

1.Length-ASN.1的字节数不确定。假定数据域的字节数为n。按ASN.1的编码规则,当n≤127时Length只有一个字节,值为n;当n>127时,Length有2~127字节,第一个字节的Bit7为1,Bit0~6为Length总字节数减1,第二个字节开始给出n,基于256,高位优先(例子:200用ASN.1表示就是0x81C8)

2.GOOSE数据部分,数据集中具体的数据顺序,需要根据goose配置文件进行解析

5 GOOSE报文分析

5.1 例程1

GOOSE报文在MAC层的帧结构包括:源MAC地址、目的地址即组播地址、报文类型、四字节Tag、APPID、报文长度、四字节的保留和GOOSEPDU。Goose具体报文格式如图0所示。

 

图0 Goose报文格式

Goose举例报文(十六进制):

01 0C CD 01 00 51 00 1E 4F D3 AE 41 81 00 80 42 88 B8 00 33 00 90 00 00 00 00 61 81 85 80 08 67 6F 63 62 52 65 66 31 81 05 00 00 00 27 10 82 07 64 61 74 53 65 74 31 83 05 67 6F 49 44 31 84 08 4E F2 85 E1 F7 CE D9 00 85 05 00 00 00 00 01 86 05 00 00 00 00 01 87 01 00 88 05 00 00 00 00 01 89 01 00 8A 05 00 00 00 00 09 AB 36 83 01 00 84 03 03 00 00 91 08 00 00 00 00 00 00 00 00 83 01 00 84 03 03 00 00 91 08 00 00 00 00 00 00 00 00 83 01 00 84 03 03 00 00 91 08 00 00 00 00 00 00 00 00

分析如下(可结合Ethereal解析):

1、01 0C CD 01 00 51

目的MAC地址

2、00 1E 4F D3 AE 41

源MAC地址

3、81 00 80 42

GOOSE报文支持IEEE 802.1Q/P优先级技术,IEEE 802.1Q为VLAN技术的标准,IEEE 802.1P为报文优先级标准。

这4个字节共同组成goose报文的tag位。Tag是有两个字节的TPID(标签协议标识)和2个字节的TCI(标签控制信息)组成。TPID配置为0x8100表示goose报文加入了优先级标识。TPID和TCI组成如图1所示:

 

图1:PID和TCI组成

TCI中12位VID,1位CFI和3位Priority(优先级)。12位VID可以配置4096个VLAN,CFI一般配置为0,3位Priority可以分为8个优先级:其中只配置了0-4级,5、6、7及保留未来使用。

4、88 B8 

以太网类型值

0x88 B8为goose,0x88 B9为GSE,0x88 BA为采样值。如图3所示

 

图3 以太网类型值分配

5、00 33

APPID

两字节的最高两位对照图3解释。所以此处APPID=51(D)

6、00 90

长度=144(D)

长度字节数包含从APPID开始以太网PDU头和APDU(应用协议数据单元)的长度。长度是8+m,m是APDU的长度,m<1492。

为什么是8+m?这个8个字节分别是APPID 2个字节,长度2个字节,以及后面的保留1、保留2各两个字节。对应到本帧报文的8个字节为:00 33 00 90 00 00 00 00。

7、00 00 00 00

保留1、保留2。为将来的应用扩展使用,缺省值为0。

8、61 81 85

GoosePDU开始(APDU应用协议数据单元)

搞清楚这个,得看ASN.1编码,此处稍作解释。ASN.1的传输基于八位位组的字节序列来进行的,它的编码规则遵循标记TAG(也有称TYPE)、长度LENGTH、值VALUE的格式,简称TLV,如图4所示。

 

图4 ASN.1编码格式

对图4解释:

TAG:

一般占1或者2个字节。TAG的组成如图5所示,

 

图5 TAG编码格式

Bit7 Bit6 :Type of Tag ,如上图。

Bit5:Primitive or Constructed Flag =0表示VALUE为简单结构,即只包含数值内容。

                                                             =1表示VALUE为复合结构,即VALUE还包含了TLV结构,直至TLV结构中Bit5为0.

Bit4~0:由于最高的3位(7、6、5)作为它用,因此TAG(bit4~0)只能表示到11111(b)=31(D)。若想表示>31是,此时TAG就要占2个字节(第1个字节后面的被称为扩展字节)。此时TAG编码格式如图6所示。

 

图6  大于31时TAG编码

对图6解释:

此时字节1中Bit7~5不变,Bit4~0全为1,字节2表示真正的TAG值,可表示0~255。

LENGTH:

紧跟TAG后面的length,它描述后续的VALUE值是由多少个字节数所构成。若VALUE长度≤127,则LENGTH占1个字节,字节最高位为Bit7=0;若VALUE长度>127,则LENGTH第1个字节最高位Bit7=1,Bit6~0表示的是LENGTH本身所占的字节数,从第2个字节开始到最后1个字节表示的是VALUE的长度。如图7所示。

 

图7 LENGTH编码格式

VALUE:

Tag Value 值。实际所要传递的编码内容,具体编码规则,根据不同的标记类型,采用不用的编码规范。

因此,结合上述,对61 81 85解释为:TAG=0x61,APPLICATION应用,复合结构,tag值为1。0x81最高位为1,表示VALUE长度>127,LENGTH本身长度为1,即:0x85。后续VALUE长度为0x85=133(D)个字节。

9、之后的字节排列顺序如图8所示

 

图8 IECGoosePDU报文格式

10、80 08 67 6F 63 62 52 65 66 31

gocbRef字符串

ASN.1编码格式TLV。80为TAG,08为LENGTH,后面的为VALUE, 67 6F 63 62 52 65 66 31转换成字符为gocbRef1。

11、81 05 00 00 00 27 10

timeAllowedtoLive(报文存活时间,单位ms)

ASN.1编码格式TLV。81为TAG,05为LENGTH,后面的为VALUE,00 00 00 27 10转成10进制为10000,即10s。

Goose接收方的中断时间一般定为大于2* timeAllowedtoLive即报Goose中断告警。

由于Goose报文的重要性,即使外部状态不再变换,也应重发。此参数提示订阅者等待下一报文到来的最长时间。当等待事件大于timeAllowedtoLive值仍未收到有效报文时,订阅者认为通信联系失去,采用预先定义的默认值取代。

12、82 07 64 61 74 53 65 74 31

datSet字符串

ASN.1编码格式TLV。82为TAG,07为LENGTH,后面的为VALUE, 64 61 74 53 65 74 31转换成字符为datSet1。

13、83 05 67 6F 49 44 31

goID字符串

ASN.1编码格式TLV。83为TAG,05为LENGTH,后面的为VALUE, 67 6F 49 44 31转换成字符为goID1。

14、84 08 4E F2 85 E1 F7 CE D9 00

t,stnum加1时的时间,精确到毫秒。

Goose报文产生时的时标。通常作为驱动事件的发生时标(若有特殊要求,驱动事件的发生时标可另外包含在数据集中)。

ASN.1编码格式TLV。84为TAG,08为LENGTH,后面的为VALUE。

第8个字节代表品质因数。

15、85 05 00 00 00 00 01 86 05 00 00 00 00 01

stnum值  85 05 00 00 00 00 01

sqnum值 86 05 00 00 00 00 01

装置发送方:后面allData数据跟上一次的allData值不一致时stnum+1,sqnum=0。一致时stnum不变,sqnum+1。上电第1帧时stnum=1,sqnum=1。stnum、sqnum加到最大值时都从1开始。

装置接收方:上电时stnum=sqnum=0。

16、87 01 00

test位

当装置检修压板投入时,装置发送的GOOSE报文中的test应置位。Goose接收装置应将接收的Goose报文中的test位与装置自身的检修压板状态比较,只有两者一致时才将信号作为有效进行处理或动作。

17、88 05 00 00 00 00 01

confRev()

配置版本号(配置次数)。表示Data-Set配置改变的计数器,例如当Data-Set里某个成员被删除或成员重新排序等均会导致confRev数值改变。

18、89 01 00

ndsCom

表示此控制块配置的必要性,当属性dataset值为NULL时,ndsCom值应为TRUE,表示此控制块需进一步配置。

19、8A 05 00 00 00 00 09

numDatSetEntries

表示allData中有多少个数据项,此处表示有9个

20、AB 36

从这开始到结束为allData内容

TAG=0xAB,上下文关联,复合结构,即VALUE也是有TLV组成。

LENGTH=0x36=54(D)

21、83 01 00 84 03 03 00 00 91 08 00 00 00 00 00 00 00 00

时间t表示最后一次状态变位发生的时间,是格林威治时间,即比当前时间晚了8个小时。时间品质反应最后一次状态变位发生时候的时间品质,而不是当前状态的时间品质。

22、83 01 00 84 03 03 00 00 91 08 00 00 00 00 00 00 00 00

83 01 00 84 03 03 00 00 91 08 00 00 00 00 00 00 00 00

21

5.2  例程2

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GOOSE报文分析_详解GOOSE服务 的相关文章

  • 在TX2上配置ORB-SLAM2错误总结

    Pangolin 错误描述 usr lib gcc aarch64 linux gnu 5 aarch64 linux gnu libGL so undefined reference to 96 drmFreeDevice 解决方法 cd
  • docker镜像迁移/移植

    docker镜像迁移 移植 或者docker save 镜像名 版本号 o 路径 保存的包名 tar 通过这两个命令保存保存镜像 xff0c 下载到本地再上传到其他服务器 然后通过docker load lt 保存的包名 tar 完成镜像移
  • 安装并运行VINS-Mono

    0 A Robust and Versatile Monocular Visual Inertial State Estimator VINS Mono是单目视觉惯性系统的实时SLAM框架 它使用基于优化的滑动窗口配方来提供高精度的视觉惯性
  • 使用小觅双目-惯性相机运行VINS-Mono

    步骤 1 下载相机驱动MYNT EYE SDK 2 xff0c 然后make ros xff08 注意 xff1a 前面的Ubuntu安装也要操作 xff09 xff1b 2 安装VINS Mono xff1b 3 在MYNT EYE VI
  • 在TX2上安装VIINS-Mono——问题总结

    1 ceres solver 我们一般通过以下命令安装Eigen xff1a sudo apt get install libeigen3 dev 默认安装在 usr include eigen3 在CMakeList txt中一般用以下语
  • LeGO-LOAM初探:原理,安装和测试

    前言 最近要搞3D激光SLAM xff0c 先后测试了Autoware xff0c cartographer xff0c loam和LeGO LOAM 今天就带来LeGO LOAM的使用体验 Github xff1a https githu
  • IMU噪声标定——加速度计和陀螺仪的白噪声和零偏不稳定性

    前言 imu utils是一个用于分析IMU性能的ROS工具包 参考资料 Allan Variance Noise Analysis for Gyroscopesvectornav gyroscopeAn introduction to i
  • TF坐标变换

    文章目录 TF坐标变换TF功能包TF工具乌龟例程中的TF创建TF广播器创建TF监听器实现乌龟跟随运动 存在的问题总结参考 TF坐标变换 坐标变换是机器人学中一个非常基础 xff0c 同时也是非常重要的概念 机器人本体和机器人的工作环境中往往
  • Linux下目录文件的操作(opendir,readdir,closedir) 以及DIR,dirent,stat等结构体详解

    From http blog chinaunix net uid 27213819 id 3810699 html 注 xff1a 为什么要说 目录文件 xff1f 其实在linux中 目录也是一种 文件 xff0c 只是它的内容是上级的
  • 堆栈的工作原理

    声明 xff1a 以下均为个人收集的一些资料 xff0c 非原创 每一个使用c语言的都应该知道栈的重要性 xff0c 我们能够使用C C 43 43 语言写出诸多复杂的程序 xff0c 很大功劳一部分有归于栈的实现 xff0c 因为它可以帮
  • RTK+GPS提高定位精度原理解析(一个小白写给另一个小白系列)

    RTK 43 GPS提高定位精度原理解析 xff08 一个小白写给另一个小白系列 xff09 GPS定位原理回顾RTK基本概念RTK组成RTK传输差分示意RTK数据链接坐标转换RTK应用后记 我们在上一篇文章导航定位系统的原理解析 xff0
  • Python 嵌套函数中内部函数引用外部函数循环变量情况

    Python 嵌套函数中内部函数引用外部函数循环变量情况 Python中的嵌套函数也称为闭包 xff08 Closure xff09 有一个特点就是内部函数可以引用外部函数内的变量并且在外部函数返回后保存该引用变量的值 xff1b 但是如果
  • Git查看版本改动—— git diff

    HEAD 表示当前版本 xff0c 也就是最新的提交 上一个版本就是 HEAD xff0c 上上一个版本就是 HEAD xff0c 往上100个版本写100个 比较容易数不过来 xff0c 所以写成 HEAD 100 HEAD 2 相当于
  • PyQt5编程-鼠标事件

    处理鼠标事件的频率不低于键盘事件 包括按下 松开鼠标按键 xff1b 移动鼠标到特定区域或离开特定区域 xff1b 更改鼠标指针的形状 xff0c 等等 1 按下 松开鼠标按键 按下并释放鼠标按钮时 xff0c 将调用以下方法 xff1a
  • latex 正文设置为双栏,图片如何占两栏

    xff08 1 xff09 插入一栏图片时 xff0c 使用的是 xff1a begin figure end figure 96 xff08 2 xff09 插入双栏图片时 xff0c 需在figure的上标中加入星号 begin fig
  • VIO松耦合和紧耦合对比

    松耦合 xff08 结果级融合 xff09 xff1a 两个独立的运动估计过程中分别处理视觉和惯性测量的信息 xff0c 最终将他们的输出 xff08 位置和姿态 xff09 融合作为结果 紧耦合 xff08 特征级融合 xff09 xff
  • zed2相机运行VINS-mono

    zed2相机标定请参考专栏前面博文 xff01 一 zed2相机运行VINS mono 1 下载VINS mono mkdir p vins ws src cd vins ws src git clone https github com
  • C语言指针笔试题

    1 我们先来看第一段代码和它的输出 span class token keyword int span span class token function main span span class token punctuation spa

随机推荐

  • Gazebo 官网教程学习笔记--Model Editor

    终端打开Gazebo Gui 界面 然后快捷键CTRL 43 M 打开 Model Editor xff0c 或者在edit 下选择model editor 界面如下 1 工具栏 包含用于编辑模型的工具 2 调色板 也称为左面板 有两个选项
  • 《大厂算法面试》小书

    算法面试是大多数小伙伴的弱势 xff0c 但是大厂几乎都会考算法 xff0c 如果在面试过程中不刻意准备一下算法 xff0c 很大概率被挂 其实对于前端和移动端来说 xff0c 算法要求的并不是很高 xff0c 只要把一些常见的算法题刷完
  • ROS通信架构上——Topic和Msg

    Topic 异步通信方式 Node间通过publish subscribe机制通信 相关的命令 xff1a rostopic rostopic list 列出当前所有topicrostopic info topic name 显示某个top
  • Type-C显示器是什么,Type-C显示器的5大优势

    在显示器领域内 xff0c USB Type C接口还处于发展阶段 xff0c 目前已经在新推出的一些高端显示器和旗舰显示器中有配置 USB Type C接口的出现 xff0c 将会形成以显示器为核心的桌面解决方案 xff0c 用户可以把任
  • SLAM综述

    SLAM综述 前言一 概述二 Lidar SLAM激光雷达传感器激光雷达SLAM系统 xff08 Lidar SLAM System xff09 2D SLAM3D SLAM深度学习与激光雷达Feature amp Detection xf
  • VisionPro使用 C# 开发

    VisionPro 常用控件的说明 工具设置窗体 CogPMAlignEditV2 模版匹配设置窗体控件 CogPMAlignEditV2 Subject 工具关联对象 如 xff1a CogPMAlignEditV2 Subject 61
  • rosdep update 失败及解决办法

    一 问题 reading in sources list data from etc ros rosdep sources list d Hit https raw githubusercontent com ros rosdistro m
  • 在STM32上运行ROS节点——rosserial&stm32开发及调试方法

    近期接手了一些ROS机器人项目 xff0c 这里将开发中遇到的问题和解决方法记录下来 stm32强大的外设资源为机器人底层设备控制带来了极大的便利 xff0c 本文简述借助rosserial项目在stm32中运行ROS节点的方法 基本原理
  • 动态存储区、静态存储区、堆和栈的区别

    C c 43 43 程序经过编译连接后形成的二进制映像文件 xff0c 这文件包含 xff1a 栈 xff0c 堆 xff0c 数据段 xff08 只读数据段 xff0c 已经初始化读写数据段 xff0c 未初始化数据段即BBS xff09
  • kubemini-基础使用

    起始 minikube 是一个本地的 k8s 专注于为 k8s 创建一个简单的学习和开发环境 你只需要一个 Docker 或者类似兼容的 容器 xff0c 或者一个虚拟机环境 xff0c k8s 只需要一个单独的命令 xff1a minik
  • 详解信号量和互斥锁之间的区别和联系

    一 xff1a 信号量与互斥锁之间的区别 xff1a 1 xff1a 互斥量用于线程的互斥 xff0c 信号线用于线程的同步 这是互斥量和信号量的根本区别 xff0c 也就是互斥和同步之间的区别 2 xff1a 互斥量值只能为0 1 xff
  • python基础学习(十二)——python中代码的执行顺序以及if __name__ ==‘__main__‘作用和原理

    xff08 1 xff09 代码执行顺序 python程序是顺序执行的 xff0c Python中首先执行最先出现的非函数定义和非类定义的没有缩进的代码 python程序执行时 按照自上而下的顺序 xff1a 首先执行没有缩进的代码 xff
  • c学习--不同c文件中的同名全局变量及同名函数53

    如果在不同的c文件中定义了同名的全局变量 xff0c 则它们会占用相同的内存空间 xff0c 而且编译链接时不会报错 xff01 这可以参考全局变量的内存初始化顺序 对于局部变量而言 xff0c 内存分配的顺序和代码的顺序是一样的 全局变量
  • 基于STM32的FreeRTOS学习之任务基础知识(六)

    记录一下 xff0c 方便以后翻阅 RTOS系统的核心是任务管理 xff0c 初学RTOS系统必须先掌握任务的创建 删除 挂起和恢复等操作 1 什么是多任务系统 玩裸机一般都是在main函数里用while 1 做一个死循环完成所有处理 xf
  • git 推送出现 “fatal: The remote end hung up unexpectedly“ 解决方案

    https blog csdn net qq 41241767 article details 98181952 git 推送出现 34 fatal The remote end hung up unexpectedly 34 解决方案 h
  • 操作系统的设计指导思想——主奴机制

    在学习操作系统的过程中我们会发现一个问题 xff1a 应用程序是应用程序 xff0c 操作系统也是程序 xff0c 操作系统程序凭什么能对应用程序进行组织 管理和协调而不受应用程序损害呢 xff1f 我们认为凭的是特权机制 要想让操作系统做
  • VScode如何配置Git

    注意 xff1a 食用本篇博客的前提是你已经安装好了Git xff0c 并且也有一定的Git基础 因为有些git中比较常用的功能我会略过 第一步 xff1a 配置Git环境变量 右键 我的电脑 xff0c 选择 属性 xff0c 在弹出的对
  • FMC/FSMC/EXMC总线NORFlash/PSRAM接口(异步-复用-不突发/同步-复用-突发)

    请勿转载 目录 1 简介 1 1 框图 1 2 接口定义 1 3 读写时序图 时序配置参数 1 4 PSRAM控制器异步工作模式分类 1 5 PSRAM寄存器配置 1 5 1 控制寄存器BCR 1 5 2 片选时序寄存器BTR 1 5 3
  • 开平方_复数有效值+角度的verilog代码

    1 逐位比较法 二进制 FPGA篇 xff08 一 xff09 基于verilog的定点开方运算 1 逐次逼近算法 该篇文章中有详细描述 假设被开方数rad i 7 0 xff0c 则结果qout 3 0 位宽为4位 xff0c 从最高位到
  • GOOSE报文分析_详解GOOSE服务

    https www cnblogs com software4y p 10017602 html http blog sina com cn s blog af8298410102wnvm html https www cnblogs co