news 2026/10/24 8:39:41

IEC 61850客户端软件:模型、关联、报告与点表核对实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
IEC 61850客户端软件:模型、关联、报告与点表核对实战

简介:61850客户端软件配套包面向电力自动化工程师、变电站调试与运维人员,以及学习IEC 61850通信协议的学生和技术人员,提供连接智能电子设备、读取实时运行数据并进行远程监控的客户端示例。压缩包为rar格式,共7个文件,以xml配置、rpt报表、txt说明、log日志、exe可执行程序及bak备份文件为主,整体约724KB,可辅助理解客户端启动、通信参数配置与运行日志排查。包内可执行程序对应演示客户端入口,配置、报表与日志文件便于对照观察数据访问、MMS通信及异常记录,备份文件可用于恢复或比对参数设置。已有396人学习下载,适合作为搭建实验环境、验证基本通信功能和熟悉61850客户端操作界面的入门材料,也能为后续GOOSE、SV及故障录波等功能的深入学习提供参考。

1. 装置能 ping 通、客户端连不上:61850 客户端软件到底在做什么

现场最常见的画面是这样的:笔记本 ping 得通装置,网线插在保护柜的调试口上,61850 客户端软件点下“连接”之后转十几秒,弹出一串 association rejected,或者干脆超时;换同事的电脑,同样的 IP、同样走 102 端口,一连就上。差别通常不出在网络,而在客户端侧的几个关联参数,以及装置那边还剩几个空闲连接名额。这类 61850 客户端软件干的其实就四件事:把装置里的分层模型(LD/LN/DO/DA)拉下来看清楚,按功能约束把需要的点读到本地并导出成点表,打开报告控制块让装置主动推变化,需要时下发控制和定值。它不是协议教科书,而是把 MMS 和 SCL 两套东西塞进一个界面里,让调试、验收和点表核对能在同一块屏幕上完成。

它的适用人群很明确:变电站自动化现场的调试与验收人员、做系统集成和网关对接的工程师、以及需要在没有装置的情况下离线核对点表的设计人员。后面按“先看模型、再连、再读写订阅、最后排查”的顺序走,每一步都给能直接抄的参数和判断依据。

2. 模型先于连接:LD/LN/DO/DA 五层与 SCL 文件的对应关系

很多人拿到客户端的第一反应是填 IP 点连接,连上了再慢慢找点。这个顺序在小型装置上勉强能用,放到一个装了十几台 IED、几千个数据对象的间隔层里就会很快卡住:界面上的树展开一层要等好几秒,你根本不知道自己找的那个点在哪。先把模型结构搞清楚,再去连,效率差一个数量级。

2.1 五层引用长什么样:一个 Pos.stVal 背后的路径

IEC 61850 的信息模型是一个严格的树。最上层是 IED(物理装置),下面挂 Server(一般只有一个),Server 下挂若干 Logical Device(LD),LD 下挂 Logical Node(LN),LN 下挂 Data Object(DO),DO 下挂 Data Attribute(DA)。一个断路器位置,完整引用写出来是PROT/XCBR1.Pos.stVal:PROT是 LD 实例名,XCBR1是 LN 实例名(XCBR 是断路器逻辑节点类),Pos是 DO,stVal是 DA。

这串东西落到 MMS 协议里会被改写成另一种分隔符。有的装置和网关用$拼成PROT/XCBR1$ST$Pos$stVal,中间还夹一个功能约束;有的实现坚持用点号。客户端软件如果只认一种写法,你在界面上能看到树,但手工输入引用去读的时候就会一直报对象不存在。我的习惯是:先在模型树里点中目标点,看软件右侧显示的“完整引用”用的是什么分隔符,再决定批量导入点表时用哪种格式,别凭经验硬写。

LN 实例名后面的编号也不是随便取的。同一个 LN 类在一个 LD 里可以有多份实例(两台断路器就是 XCBR1、XCBR2),点表里如果只写XCBR不写编号,装置会直接拒绝。这一点在从别的项目复制点表时最容易被忽略。

2.2 功能约束 FC:同一个 DO 为什么要读两次

功能约束(FC)是 61850 里最容易被新手当成冗余设计的东西。它把同一个数据对象的属性按用途分组:状态量归 ST,测量值归 MX,控制归 CO,配置归 CF,描述归 DC,定值组归 SG,可编辑定值归 SE。一个Pos对象,stVal、q、t属于 ST,而它关联的控制块属性可能在 CO 下。

FC典型内容读写常见误用
ST位置、开关状态、告警只读拿 ST 去写,必然被拒
MX电流电压功率有效值只读刷新太快导致装置 CPU 升高
CO控制对象、控制块可写不先 Select 直接 Operate
CF数据集、报告控制块配置可写改完不重新使能,配置不生效
DC描述文本只读当成可改的名字
SG / SE定值组与定值条目可写写完不切组,值不生效

理解 FC 的实际价值在于两件事。一是读的时候必须带上 FC,客户端如果是按数据集读的,数据集里每个成员本身就带 FC,一般不会错;但如果你是手工逐点读,漏了 FC 就会出现“这个点明明在树上有,就是读不出来”。二是性能,把 200 个测量点按 MX 一次性组织成命名变量表去读,比逐个读快得多,装置那边的压力也小。

2.3 SCL 五种文件的分工与离线点表

SCL 是一套基于 XML 的描述语言,衍生出五种文件,用途差别很大。

文件类型谁来提供主要用途
SSD设计方描述一次系统和变电站结构
ICD装置厂商描述装置具备的能力,未绑定实际工程
SCD系统集成方全站配置,含通信参数、数据集、报告控制块
CID集成方下装从 SCD 导出给单台装置的实际配置
IID厂商预配置好的实例描述

客户端软件通常支持两种取点方式:在线从装置拉模型,或者离线加载 SCD/CID 解析出点表和数据集。离线方式快得多,一个中等规模的 SCD 几秒钟就能把点表列全,而在线逐层 GetNameList 可能要跑几分钟。代价是 SCD 可能过期——现场改过点表但没重新导出 CID,或者装置固件升级后模型变了而 SCD 没更新。我的做法是离线建骨架、在线抽检:用 SCD 生成完整点表,再用客户端连上去随机抽二三十个点(重点抽数据集成员和报告控制块),逐个比对引用名、CDC 类型和成员数量,对不上就说明 SCD 不可信。

2.4 数据集与报告控制块在 XML 里长什么样

离线解析的关键是看懂 SCL 里LN0节点下的两段内容:DataSet和ReportControl。前者定义有哪些点会被成组上送,后者定义这些组怎么送、什么时候送。

<!-- SCL 片段:DataSet 定义成员,ReportControl 定义上送策略 --> <LN0 lnClass="LLN0" inst=""> <DataSet name="dsMeas" desc="测量数据集"> <!-- 每个 FCDA 就是一条成员,prefix/lnInst 为空表示 LLN0 自身的点 --> <FCDA ldInst="PROT" prefix="" lnClass="MMXU1" lnInst="1" doName="TotW" fc="MX"/> <FCDA ldInst="PROT" prefix="" lnClass="MMXU1" lnInst="1" doName="TotV" fc="MX"/> </DataSet> <ReportControl name="urcbMeas01" datSet="dsMeas" rptID="PROT/LLN0$RP$urcbMeas01" confRev="1" buffered="false" bufTime="200" intgPd="0"> <!-- 触发条件:数据变化、品质变化、总召 --> <TrgOps dchg="true" qchg="true" dupd="false" period="false" gi="true"/> <!-- 可选域:至少开 reasonCode、dataSet、timeStamp,否则收到报告不知道是哪条变 --> <OptFields seqNum="true" timeStamp="true" reasonCode="true" dataSet="true" dataRef="true" entryID="false" configRef="false"/> </ReportControl> </LN0>

这段配置里,FCDA的六个属性拼起来就是一个完整的点引用,缺一个都可能对不上装置内部对象。buffered="false"说明是 URCB,装置掉线期间的变化不补发;bufTime="200"是缓冲时间,两三百毫秒内多次变化合并成一条上送,设成 0 会让装置在高频变化时疯狂发包。TrgOps里dchg是数据变化触发,qchg是品质变化触发,验收时至少要开这两个,否则品质位跳变你在客户端上完全看不到。

3. 关联参数与四条数据通道:读、写、报告、控制怎么落地

模型搞清楚之后,剩下的工作就是连上去做四件事。这四件事在界面上是四个按钮,在协议层是四条完全不同的路径,出问题的表现也完全不同,所以要分开排查。

3.1 关联:TCP 握手成功只是第一步

MMS 跑在 TCP 102 端口上,但 TCP 建链只说明网络通、端口开着,离“连上”还差一跳。报文要经过 TPKT、COTP 两层封装,最后到 ACSE 的 AARQ/AARE 才算完成关联。装置在 AARE 里会明确告诉你接受还是拒绝,而大多数客户端只把拒绝简化成一个弹窗,看不到具体原因。

参数常见取值说明
装置 IP与客户端同网段注意调试口与运行口可能不是同一组地址
TCP 端口102MMS 固定端口,不要被别的服务占用
AP-Title一串逗号分隔数字装置校验对象标识,填错直接拒绝
AE-Qualifier常见为 12与 AP-Title 配套,参考装置说明
关联超时5 到 10 秒与读写超时要分开设
认证 / 口令视装置而定部分装置启用了认证或端口锁定
重连间隔3 到 5 秒设成 0 会导致断链后疯狂重连

排查顺序建议固定:先 ping 通,再用系统的端口检测确认 102 有监听,然后抓包看有没有 AARQ 发出去、有没有 AARE 回来。如果 AARQ 发了、AARE 里是拒绝,问题在 AP-Title、AE-Qualifier 或装置的连接数上限;如果 AARQ 发出去连回音都没有,问题多半在中间设备把长连接拦了,或者装置的 102 端口被另一个客户端长期占用。

3.2 读:单点、数据集和命名变量表三档

客户端读数据一般有三档粒度:单点读、按数据集读、自定义命名变量表读。单点读适合临时看一个值,但每个点都是一次请求响应往返,几百个点会明显卡顿。按数据集读的前提是装置里已经定义好了数据集,成员固定。命名变量表读最灵活,客户端自己把任意一组点拼成一个列表提交给装置,一次读回来,这是做批量巡检的正确姿势。

不管哪一档,读的时候都要关注返回结果里的品质和时间戳,而不是只看值。很多新手看到界面显示“0”就以为装置没数据,其实q里的 validity 是 invalid,t的时间戳还是开机那一刻,说明这个点根本没被采集过。客户端如果支持列配置,建议默认把值、品质、时标三列并排显示。

3.3 写:能写不等于写得进去

写入失败的原因通常有三类。第一类是 FC 不对,ST 和 MX 的对象在装置里是只读实现,客户端允许你点“写”只是界面没拦。第二类是层级不对,定值要写到 SE 下的具体条目或者用定值组控制块切换,控制要写到 CO 下的控制对象并且要走 Select 流程,直接对一个 DO 整体写多半报类型不匹配。第三类是装置侧有软压板或远方/就地状态,协议层完全正常,装置收到也回了肯定响应,但执行被闭锁。

提示:写 CF 类的配置项(尤其是报告控制块属性)之前,先把该控制块的使能位置为 false,改完再置 true,顺序反了会出现参数改了但行为没变的情况。

3.4 报告:BRCB 与 URCB 的使能顺序

报告是客户端里最能体现价值的功能,也是最容易配错的功能。缓存报告控制块(BRCB)在装置与客户端断链期间会把变化存起来,重连后补发,代价是占用装置内存且数量有限;非缓存报告控制块(URCB)不补发,胜在轻量,一个 LD 里能开好几个。现场验收一般用 BRCB,实时监视用 URCB。

属性含义常用设置
RptID报告标识与 SCD 一致,方便对账
RptEna使能位改参数前必须为 false
OptFlds可选域打开 reasonCode、dataSet、timeStamp
TrgOps触发条件dchg、qchg 必开,gi 按需
BufTm缓冲时间100 到 500 毫秒,别设 0
IntgPd完整性周期0 为关闭,非 0 会周期性全量上送
ResvTms保留时间断链后控制块被保留的秒数

正确的使能顺序是:读一次控制块拿到当前状态,把 RptEna 置 false,写 OptFlds、TrgOps、BufTm、IntgPd,再写 RptEna 为 true,最后发一次总召唤(GI)把当前值全量刷一遍。跳过总召这一步,客户端界面上会一直空着,直到某个点发生变化才突然冒出来一条,很容易被误判成装置没上送。

3.5 控制:SBO 三步与那个容易被忽略的超时

带选择(SBO)的控制流程是 SelectWithValue、Operate、CommandTermination 三步。客户端发出带值的选择请求,装置回一个肯定响应并把该控制对象锁住;随后发执行请求,装置执行并返回;最后装置在控制对象上发一个终止事件。增强安全的控制还要多一步,检查命令终止的原因码。

控制里有几个参数值得单独设:控制序号(ctlNum)每次操作应当递增,复用同一个序号在某些装置上会被当成重复命令丢弃;超时时间(T)一般设 30 秒左右,超时后装置会自动释放选择锁,但客户端界面上可能还显示“已选择”,这时候再点执行会被拒;选择超时和操作超时是两个不同的计时器,别混着调。遥控被拒时先去读装置的闭锁状态和远方/就地位置,别一头扎进报文里找,八成的拒绝都不是协议问题。

4. 排查记录:连不上、读不到、值不刷新、遥控被拒的五种现场

这些是反复遇到的、表现相似但根因完全不同的情况。每一条都按现象、原因、解决写,遇到时按顺序对号入座即可。

4.1 关联被拒:AP-Title 不匹配或者连接名额满了

现象:客户端点连接,几秒后提示关联被拒绝,抓包能看到 AARQ 发出、AARE 带回否定结果。换一台电脑或换一个客户端版本有时能连上。

原因:两种可能。一是 AP-Title 和 AE-Qualifier 与装置期望的不一致,有些客户端默认填了一套通用值,碰上校验严格的装置就被拒。二是装置同时支持的 MMS 连接数有限,前一个客户端异常断开后连接没有及时释放,新连接进来被拒。

解决:先从装置说明或 SCD 的通信参数段里确认正确的对象标识,逐字填进去;再确认没有其他客户端或后台服务占着这个装置。如果确实是连接泄漏,等装置的连接老化时间过去,或者重启装置的通信服务。日常调试时养成习惯——用完在客户端里正常断开,而不是直接关窗口。

4.2 读回来的对象不存在或访问被拒

现象:模型树能展开,但按引用读某个点时返回对象不存在,或者访问被拒。

原因:引用分隔符用错(点号与美元符号混用)、LN 实例编号漏写、FC 填错,这三种占了绝大多数。还有一种情况是从别的项目复制过来的点表,前缀字段不一样。

解决:从模型树里点中该点,用软件显示的完整引用反查,确认分隔符和层级;再核对 FC 是不是该点实际所属的分组。批量导入点表时,先拿十条做试读,通过了再全量跑。

4.3 报告开不起来,或者只来一条就没了

现象:控制块使能成功,总召也发了,界面上偶尔蹦一条数据,之后长时间没动静。

原因:第一种是使能顺序错了,先置 true 再改参数,参数被装置忽略。第二种是控制块被另一个客户端抢占,URCB 的保留位是独占的,第二个客户端一使能,第一个就被踢掉,界面上还显示着已使能。第三种是 OptFlds 没开 reasonCode 或 dataSet,客户端收到报告后无法把它映射回具体的数据集成员,只能丢弃。

解决:按“先关使能、改参数、再开使能、最后总召”的顺序重来一遍;确认没有第二个客户端连着同一台装置;把 OptFlds 按需打开后重新使能。如果用了 BRCB,还要检查 EntryID 是否被正确处理,否则重连后可能重复补发旧事件。

4.4 遥控下发被拒或者执行了但没反应

现象:选择请求返回肯定,执行请求也被接受,但开关没动;或者执行请求直接被拒。

原因:被拒多半是控制模式不匹配——装置配置的是增强安全的 SBO,客户端按直控发的,或者反过来。执行了没反应通常是装置侧的闭锁条件没满足,比如就地位置、压板退出、联锁条件不成立。

解决:先读控制对象关联的控制模式属性,确认用哪种流程;再读装置的闭锁和位置状态。别急着重发命令,重复下发在部分装置上会触发防误逻辑,反而需要等超时解锁。

4.5 时间戳差了几个小时,品质位一直是无效

现象:数值对得上,但时间戳跟本地时间差整整一个时区;或者品质位长期显示 invalid。

原因:协议里的时标是 UTC,客户端显示时如果没有做本地时区转换,就会整齐地差 8 小时。品质位 invalid 一般是装置侧没有对时源,或者对时信号丢失后时标标记位被置位。

解决:在客户端里确认时区转换开关,别把 UTC 直接当本地时间看;品质位要去查装置的对时状态,看时钟同步标志位是不是置位了。做 SOE 分析时尤其要注意这一点,顺序错乱往往不是装置的问题。

5. GOOSE 与 SV 订阅:第二层报文为什么总在客户端“看得见抓不着”

MMS 走 TCP,有连接有端口,抓包相对简单。GOOSE 和采样值走的是二层以太网,没有 IP 层,客户端要直接打开网卡抓帧,翻车的概率高得多。很多人第一次配订阅,界面上什么也不显示,抓包工具里却能看到报文在飞。

5.1 网卡、VLAN 和混杂模式:三个开关缺一不可

GOOSE 报文用固定的组播目的地址和专属以太网类型,采样值用另一个类型。客户端订阅时必须做三件事:绑定到正确的物理网卡(笔记本上有虚拟网卡、无线网卡、扩展坞网卡时特别容易选错);允许网卡进入混杂模式,因为组播帧的目的地址不是本机地址;如果报文带 VLAN 标签,要么在网卡驱动层剥掉,要么在客户端里指定 VID 和优先级。

虚拟化环境是重灾区。宿主机上装了虚拟交换机之后,物理网卡被接管,客户端抓到的可能只是虚拟网卡上的流量。我一般的做法是先把虚拟网卡全部禁用,用一根网线直连装置的调试口,确认能收到帧之后再逐步加回环境。

5.2 stNum 与 sqNum:判断链路好坏最快的一招

GOOSE 帧里有两个计数器。stNum在数据状态发生变化时加一,sqNum在每次重传时加一、状态变化时归零。正常情况下你会看到 sqNum 稳定递增、按重传间隔发包;一旦开关注入变位,stNum 跳一下,sqNum 归零,然后继续递增。

判断订阅是否正常,不需要看数据内容,只看这两个数就够:sqNum 完全不涨,说明客户端根本没收到帧;sqNum 在涨但 stNum 长期不变,说明收到了心跳但装置侧没有状态变化,链路是好的;两者都乱跳或者帧间隔远超配置的最大生存时间,说明网络有丢包或者有人在反复插拔网线。帧里的配置版本号也要跟 SCD 对一下,版本不一致意味着装置里的配置被改过。

5.3 SV 采样值:smpCnt 与同步标志能说明什么

采样值帧里有个采样计数器,正常情况按固定步长严格递增,一旦跳变就说明采样丢帧。另一个字段是同步标志,用来表示采样是否与全局时钟同步、是本地同步还是未同步。做合并单元相关调试时,这两个字段比数值本身更能说明问题:数值看起来平滑,计数器却在跳,说明中间丢过样本,做保护算法验证时这种数据不能用。

订阅采样值对网卡的压力比 GOOSE 大得多,一个合并单元每秒几千帧是常态。客户端如果同时开了多个订阅通道再加上 MMS 连接,界面卡顿往往不是软件写得差,是网卡缓冲被占满。这时候减少订阅通道、关掉不必要的解析显示,比换电脑管用。

5.4 时标与品质:值对了时间不对

GOOSE 帧里的时标是 8 字节:4 字节表示当天内的毫秒偏移,3 字节表示从 1984 年 1 月 1 日起的天数,剩下 1 字节是时标品质,其中几个标志位分别表示闰秒已知、时钟故障、时钟未同步。客户端必须把这套结构还原成可读时间,再做时区转换。

品质位同理,13 个位里有效性、旧数据、故障、不一致、来源(过程/取代/默认)各有含义。现场最常遇到的是“值是对的老是那个数”,一查品质,旧数据位置位了,说明装置侧数据源已经停了但还在照旧广播。养成看品质位的习惯,能省掉很多来回扯皮。

6. 点表核对与回归:两份导出文件的 diff 和三条验证

真正把客户端用出价值的地方,不是手动点几下看值,而是把它当成点表的生产和校验工具。装置固件升级、SCD 改版、系统扩容,每次都会带来点表变化,人工一行行对几千条引用是不现实的。我的做法是:客户端导出两份 CSV(改前一份、改后一份),用脚本做结构化 diff。

import csv, sys def load(path): """把导出的点表读成字典,用 引用+FC 做联合主键""" rows = {} with open(path, newline="", encoding="utf-8-sig") as f: for r in csv.DictReader(f): # 同一个 DO 在不同 FC 下是不同对象,主键必须带 FC key = f"{r['reference'].strip()}|{r['fc'].strip().upper()}" rows[key] = r return rows old = load(sys.argv[1]) new = load(sys.argv[2]) added = sorted(set(new) - set(old)) removed = sorted(set(old) - set(new)) # CDC 变了意味着模型类型变了,映射规则通常也要跟着改 changed = [k for k in set(old) & set(new) if old[k]['cdc'] != new[k]['cdc']] print(f"新增 {len(added)},删除 {len(removed)},类型变化 {len(changed)}") for k in removed[:20]: print("删", k) for k in added[:20]: print("增", k) for k in changed[:20]: print("改", k, old[k]['cdc'], "->", new[k]['cdc'])

主键选“引用 + FC”是关键,不带 FC 会把同一个 DO 下的不同分组当成同一条,diff 结果全是噪声。cdc字段比对的是公共数据类,类型从单点状态变成双点状态这类改动,下游的映射、报警文案、界面图标全都要跟着改,所以单独列出来看。

除了 diff,我还会跑三条固定验证:一是配置版本一致性,把装置在线读到的数据集版本和 SCD 里的比对,不一致就说明有一侧没更新;二是数据集成员数量核对,SCD 里写几个成员,在线读回来就必须是几个,少一个往往是 FC 混用导致的静默丢弃;三是报告连续性,开一个 BRCB 连续观察一段时间,看序号有没有断档,断档就说明装置侧的缓冲被打满了,得调大缓冲时间或者减少触发点。

还有一个习惯是从那以后一直保持的:任何一次点表变更,都强制走一遍“导出两份、跑 diff、抽十条上线试读、确认配置版本”这个流程,哪怕只是改了一个描述字段。跳过这一步省下的十分钟,往往要在现场用两小时找回来。希望帮到你。

本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/24 8:36:24

ACC-C++组初赛全攻略:考点拆解、备赛清单与赛场实战复盘

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/24 8:31:47

螺栓锈蚀检测数据集详解:VOC与YOLO双格式训练实践

说实话&#xff0c;第一次公开分享这类工业视觉数据集&#xff0c;我还是酝酿了很久。平时很多读者私信问我&#xff0c;说市面上公开的螺栓锈蚀检测数据要么太学术、要么场景单一&#xff0c;真正拿到现场根本跑不动。这次我把手头整理的“螺栓锈蚀螺栓生锈检测数据集”完整讲…

作者头像 李华
网站建设 2026/10/24 8:31:29

2026年房源管理系统核心功能与选型指南

1. 2026年房源管理系统市场格局解析2026年的房产科技赛道已经呈现出明显的分化趋势。根据第三方测评机构PropTech Lab最新发布的季度报告显示&#xff0c;当前主流房源管理系统主要围绕三个核心维度展开竞争&#xff1a;智能化程度、数据整合能力以及合规适配性。与三年前相比&…

作者头像 李华
网站建设 2026/10/24 8:28:56

从抓包调试到HTTPS防护:移动端接口技术的合规实践

简介&#xff1a;这是一份围绕词达人词汇学习工具与Fiddler抓包调试的整合压缩包&#xff0c;面向希望观察应用与服务器间数据交互、理解单词查询与学习进度同步机制的英语学习者及具备基础网络知识的开发者。包内共92个文件&#xff0c;以dll动态库、exe可执行程序、pdb调试符…

作者头像 李华
网站建设 2026/10/24 8:25:17

Shiro550(CVE-2016-4437)漏洞复现记录

Shiro550(CVE-2016-4437)Apache Shiro 1.2.4 及以下版本存在反序列化漏洞&#xff0c;攻击者可利用硬编码密钥构造恶意序列化数据执行任意命令。漏洞原理 本质 Shiro 的 “记住我”&#xff08;RememberMe&#xff09;功能在服务端处理 Cookie 时&#xff0c;会依次执行&#x…

作者头像 李华
网站建设 2026/10/24 8:22:28

STM32与hi3516dv300平台下的PWM控制蜂鸣器

目录 1.蜂鸣器的分类 &#x1f50c; 驱动方式与电路设计的差异 2.如何使用PWM控制无源蜂鸣器 2.1.STM32平台&#xff1a;硬件定时器PWM 2.2.hi3516dv300平台&#xff1a;操作系统Linux 3.播放《Do-Re-Mi》示例 1.蜂鸣器的分类 蜂鸣器分为有源蜂鸣器和无源蜂鸣器&#xff0…

作者头像 李华