You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于PyASN1的IEC 61850 SavPDU类型类定义是否正确?

关于PyASN1实现IEC 61850-9-2 SavPdu类的合规性验证

ASN.1定义(来自IEC 61850-9-2第8.5.2节表14)

SavPdu ::= SEQUENCE {
        noASDU   [0] IMPLICIT INTEGER (1..65535),
        security [1] ANY OPTIONAL,
        asdu     [2] IMPLICIT SEQUENCE OF ASDU        
}

ASDU ::= SEQUENCE {
    svID        [0] IMPLICIT VisibleString,
    datset      [1] IMPLICIT VisibleString OPTIONAL,
    smpCnt      [2] IMPLICIT OCTET STRING (SIZE(2)),
    confRev     [3] IMPLICIT OCTET STRING (SIZE(4)),
    refrTm      [4] IMPLICIT UtcTime OPTIONAL,
    smpSynch    [5] IMPLICIT OCTET STRING (SIZE(1)),
    smpRate     [6] IMPLICIT OCTET STRING (SIZE(2)) OPTIONAL,
    sample      [7] IMPLICIT OCTET STRING (SIZE(n)),
    smpMod      [8] IMPLICIT OCTET STRING (SIZE(2)) OPTIONAL
}

自行实现的Python类(ASDU类已在其他位置定义)

from pyasn1.type import constraint, namedtype, tag, univ

class SavPdu(univ.Sequence):
    componentType = namedtype.NamedTypes(
        namedtype.NamedType('noASDU', univ.Integer().subtype(subtypeSpec=constraint.ValueRangeConstraint(1,65535), implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))),
        namedtype.OptionalNamedType('security', univ.Any().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1))), 
        namedtype.NamedType('asdu', univ.SequenceOf(componentType=ASDU()).subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple,2)))
    )

合规性分析与结论

整体实现符合ASN.1模型定义和PyASN1库规范,但有一处细节可优化以贴合PyASN1最佳实践:

  • 定义SEQUENCE OF ASDU时,SequenceOf的componentType参数应传入类型类(ASDU)而非实例(ASDU())。SequenceOf需要的是类型模板,传递实例可能引入不必要的状态,调整后代码如下:
    namedtype.NamedType('asdu', univ.SequenceOf(componentType=ASDU).subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple,2)))
    

另外需确认已定义的ASDU类是否满足以下要求:

  • 各字段的隐式标签与ASN.1定义完全匹配
  • OCTET STRING的SIZE约束已正确设置(如smpCnt需添加constraint.ValueSizeConstraint(2, 2))
  • 可选字段已通过OptionalNamedType定义

内容的提问来源于stack exchange,提问作者TWhite

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 15:53:14