首页 > 编程问答 >IEC 61850 样本值 SavPDU 类型的 pyasn1 数据结构是否正确?

IEC 61850 样本值 SavPDU 类型的 pyasn1 数据结构是否正确?

时间:2024-07-23 04:11:30浏览次数:7  
标签:python pyasn1

我是使用 pyasn1 的新手,正在尝试按照 Berkeley 发布的 PyASN1 程序员手册 文档

IEC 61850-9-2 第 8.5.2 节表 14 将 SEQUENCE 类型转换为 python 类模型SavPdu 的编码定义为

    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 类:

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

class SavPdu(univ.Sequence):
    componentType = namedtype.NamedTypes(
        namedtype.NamedType('noASDU', univ.Integer(suptypeSpec = constraint.ValueRangeConstraint(1,65535)).tagSet.tagImplicitly(tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))),
        namedtype.NamedType('security', univ.Any), 
        namedtype.NamedType('asdu', univ.Sequence(ASDU).tagSet.tagImplicitly(tag.tagClassContext, tag.tagFormatSimple, 2))
    )

其中 ASDU 是文件中其他位置定义的另一个 python 类。

我是否正确地定义了我的类关于模型和库?


关于 SavPDU 类型的 pyasn1 数据结构几乎是正确的。这里有一些小修改和需要考虑的地方:

1. 可选字段:

在的 SavPdu 定义中, security 字段是可选的。需要在 pyasn1 中明确地将其标记为可选的。

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

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

2. SEQUENCE OF 类型:

SavPdu 定义中将 asdu 字段定义为 univ.Sequence(ASDU) 。这表示 asdu 应该只包含一个 ASDU 实例。但是,根据 IEC 61850-9-2 标准, asdu 字段应该是 ASDU 类型的序列。因此,需要使用 univ.SequenceOf 来表示它:

        namedtype.NamedType('asdu', univ.SequenceOf(componentType=ASDU()).tagSet.tagImplicitly(tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 2)))

3. ASDU 类的定义:

没有提供 ASDU 类的定义,但我假设已经根据 IEC 61850-9-2 标准正确定义了它。请确保在 ASDU 类定义中也正确地处理了可选字段和数据类型。

4. 其他注意事项:

  • 隐式和显式标签: 在的代码中,将所有标签都定义为隐式标签。请仔细检查 IEC 61850-9-2 标准,以确认哪些标签应该是隐式标签,哪些应该是显式标签。
  • 约束: 确保为每个字段定义了正确的约束,例如值范围、大小限制等。

通过进行这些更改,的 pyasn1 数据结构应该能够正确地表示 IEC 61850 样本值 SavPDU 类型。

标签:python,pyasn1
From: 78780563

相关文章

  • Python 套接字请求在很多情况下都会失败
    我在python中尝试了超过5种不同的方法,尽管人们说它在其他论坛上有效,但所有这些方法都惨遭失败。importsocketmessage="test"clientsocket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)clientsocket.connect(('1.1.1.1',80))clientsocket.send(mes......
  • Python 网络套接字
    我一直尝试通过Python访问该网站的websocket,但是需要绕过CloudFlare,现在我尝试通过cookie进行绕过,但是这不起作用。我已经尝试在没有cookie的情况下执行此操作,但这也不起作用。importwebsocketimportbase64importosdriver=selenium.webdriver.Firefox()driver.ge......
  • 如何在Python中使用Selenium提取data-v-xxx?
    因为我想查看每个class='num'内的文本是否大于0。如果测试通过,那么我需要获取venuen-name内的文本。我观察到,data-v是相同的。所以我的方法是获取相同的data-v-<hashvalue>来查找场地名称。我尝试了不同的方法来提取,但仍然无法提取。有什么建议吗?这是DOM<div......
  • Python:添加异常上下文
    假设我想提出一个异常并提供额外的处理信息;最好的做法是什么?我想出了以下方法,但对我来说有点可疑:definternal_function():raiseValueError("smellysocks!")defcontext_function():try:internal_function()exceptExceptionase:......
  • 【视频】Python遗传算法GA优化SVR、ANFIS预测证券指数ISE数据-CSDN博客
    全文链接:https://tecdat.cn/?p=37060本文旨在通过应用多种机器学习技术,对交易所的历史数据进行深入分析和预测。我们帮助客户使用了遗传算法GA优化的支持向量回归(SVR)、自适应神经模糊推理系统(ANFIS)等方法,对数据进行了特征选择、数据预处理、模型训练与评估。实验结果表明,这些方法......
  • Python学习笔记42:游戏篇之外星人入侵(三)
    前言在之前我们已经创建好了目录,并且编写好了游戏入口的模块。今天的内容主要是讲讲需求的分析以及项目各模块的代码初步编写。在正式编写代码前,碎碎念几句。在正式编写一个项目代码之前,实际是有很多工作要做的。就项目而言,简单的定项,需求对齐,项目架构设计,实际的代码编写,......
  • Python入门知识点 5--流程控制语句
    先来分享一个pycharm使用小技巧   红色波浪线:提醒可能报错   黄色波浪线:提醒书写不规范,ctrl+alt+l去掉黄线   code--Reformatcode,就可以去掉黄线,调整代码格式1、程序三大执行流程(1)顺序执行        程序执行时,代码从上往下,从左往右执行,中间......
  • python里读写excel等数据文件的几种常用方式
    python处理数据文件第一步是要读取数据,文件类型主要包括文本文件(csv、txt等)、excel文件、数据库文件、api等。下面整理下python有哪些方式可以读取数据文件。1.python内置方法(read、readline、readlines)read():一次性读取整个文件内容。推荐使用read(size)方法,size越大......
  • python+flask计算机毕业设计鲜花坊销售平台(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着电子商务的迅猛发展,线上购物已成为人们日常生活的重要组成部分,尤其在追求生活品质与个性化的今天,传统鲜花销售行业正经历着深刻的变革......
  • python+flask计算机毕业设计快递驿站管理系统(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着电子商务的迅猛发展,快递行业迎来了前所未有的繁荣期,快递包裹量急剧增长,对快递末端配送服务提出了更高的要求。传统的快递配送模式面临......