101、104规约解析

2023-05-16

转载:电网101、104规约解析(Java)_张二狗和苗翠花的博客-CSDN博客_iec101 java

 

1. 前言
最近在研究广东电网的101与104规约,也就是DL/T634.5101-2002和DL/T634.5104-2009。因为要做一个规约解析的软件(基于Android平台的),刚开始接触的也是一头雾水,因为没有接触过这方面的知识,所以就在网上搜索各种技术帖,大神经验什么的。

后来在网上找到了一个软件–IEC8705(报文翻译工具).exe,这个可以解析一些101(平衡式)的实例,效果图贴一下。

但有些还是解析不了,并且在网上也找不到他的源码,所以就很苦恼。也找到一些C++的源码,但是由于技术有限,我看不懂。下面就和大家来看看我写的这个简单的Java语言的规约解析。先贴一下效果图(我就在控制台简单演示一下,没有做可视化界面)。

GitHub地址:https://github.com/mujave/iec 欢迎star哦

2. Java版效果图
3. 规约详细解释
先看一下我总结的关于规约解析的几个图
101的规约总结

å¨è¿éæå¥å¾çæè¿°

104规约总结

å¨è¿éæå¥å¾çæè¿°

 

具体的104协议解释也可以参考 https://blog.csdn.net/wojiuguowei/article/details/79413142

4. 名词解释
这里所说的名词解释,并不是对一些名词的定义的解释,因为这不是我的专业领域,下面我主要针对报文所代表的名词在代码里怎样解释(解析)说一下。

控制域(平衡式)

å¨è¿éæå¥å¾çæè¿°

在报文解析中,我就是按照图里面的取值方法对对应的字节进行取值,然后进行逻辑判断,将结果加到解析结果里面,由于后四位所代表的平衡链路功能码在这里是固定的,所以可以采取枚举或者反射(常量)的方式进行解析
地址域 (以104的信息体地址为例)
在规约中地址才用的低前高后(低位在前高位在后)的规则
例如:68 10 08 00 02 00 09 01 03 00 01 00 01 40 00 2B 02 00(黄色部分为信息体地址)

å¨è¿éæå¥å¾çæè¿°

所以 这个信息体的地址为01 40 00 >> 0x004001=16385

3、时标CP56Time2a

å¨è¿éæå¥å¾çæè¿°

 

	/**
     * 时标CP56Time2a解析
     *
     * @param b 时标CP56Time2a(长度为7 的int数组)
     * @return 解析结果
     */
    public static String TimeScale(int b[]) {

        StringBuilder result = new StringBuilder();

        int year = b[6] & 0x7F;
        int month = b[5] & 0x0F;
        int day = b[4] & 0x1F;
        int week = (b[4] & 0xE0) / 32;
        int hour = b[3] & 0x1F;
        int minute = b[2] & 0x3F;
        int second = (b[1] << 8) + b[0];

        result.append("时标CP56Time2a:20");
        result.append(year).append("-");
        result.append(String.format("%02d", month)).append("-");
        result.append(String.format("%02d", day)).append(",");
        result.append(hour).append(":").append(minute).append(":");
        result.append(second / 1000 + "." + second % 1000).append("\n");

        return result.toString();
    }

4、遥测量的解析
在101的遥测中定义到有三种类型的值,分别是归一化值,标度值,短浮点数,具体的定义大家可以参考“电力101/104规约中遥测量类型转换”,下面我说一下在Java中怎么解析这三种类型的值。直接上代码了。

public class Main {

    public static void main(String[] args) {
        Telemetry telemetry = new Telemetry();
        System.out.println(telemetry.Bytes2Float_NVA(0xa4, 0x6a));// 报文数据的为A4 6A(低位在前,高位在后) ,为0x6AA4
        System.out.println(telemetry.Bytes2Float_SVA(0xa4, 0x6a));// 报文数据的为A4 6A(低位在前,高位在后) ,为0x6AA4

        System.out.println(telemetry.Bytes2Float_IEEE754("3e0779a6"));
        //报文数据 A6 79 07 3E = 0x3e0779a6 = 0.1323(IEEE754 短浮点数)http://lostphp.com/hexconvert/
    }
}

/**
 * 遥测量解析
 *
 * @author zhangyu
 */

public class Telemetry {

    /**
     * 归一化值
     */
    public static float Bytes2Float_NVA(int low, int high) {
        float fVal;
        int nva = (high << 8) + low;
        // 符号位1位,0为正数,1为负数,后面的为补码表示,
        // 正数的补码和原码相同不需要转换。对于负数,先取反码再加1得到补码的补码,就是原码了。
        int symbol = (high & 0x80);//符号位:0表示正数,1表示负数
        if (symbol == 0x80)
            fVal = -1 * (((nva ^ 0xffff) + 1) & 0x7fff);//  (nva ^ 0xffff) + 1 :补码的补码  ,取出后面的15位数据乘上-1得到值
        else fVal = nva;
        return fVal / 32767;//这里的32767值的是一个量纲,一般这个参数是主站和从站商定的
    }

    /**
     * 标度化值
     */
    public static float Bytes2Float_SVA(int low, int high) {
        float fVal;
        int nva = (high << 8) + low;
        int symbol = (high & 0x80);//0表示正数,1表示负数
        if (symbol == 0x80)
            fVal = -1 * (((nva ^ 0xffff) + 1) & 0x7fff);
        else fVal = nva;
        return fVal;
    }

    /**
     * 短浮点数
     *
     * @param data 从低位到高位按顺序
     * @return
     */
    public static float Bytes2Float_IEEE754(String data) {

        return Float.intBitsToFloat(Integer.valueOf(data, 16));
    }
}

 对于短浮点数的计算,在Java的文档里有这样的说明。

å¨è¿éæå¥å¾çæè¿° 

 还有一些ASDU里的信息体的解析过程代码,有点多,就不一一贴出来了
代码已经发布到GitHub,需要的伙伴可以直接下载

5.104规约解析遇到的一些难题

  1. 报文类型的区分
    101报文区分定长和变长两种,而104规约都是变长的报文。但是对于104来说,其控制域决定了104报文分别属于三种类型(I帧S帧U帧)。所以在解析104到控制域的时候,是在解析104的第一个难题。我先说一下我自己的区分逻辑。

å¨è¿éæå¥å¾çæè¿°

 我是用控制域的第一字节去和3做位运算(因为和3做位运算就可以得到第一字节的D1/D0两位),从上面的图中我们可以看到,结果如果是1的话就是S格式,如果是3的话就是U格式,其他 的结果就是I格式的报文。
第二种方式是我在和一个网友交谈中得到的,他是运用奇数或者偶数来区分的,这里我列一个表格 ,这样的话如果第一个字节是偶数就是I帧,否则判断第三字节是0就是U帧。这样也可以区分报文的类型
但是我认为还是做位运算效率会更高,计算奇偶性还需要用到%这样的运算。

位运算的运用
在解析规约的时候,我一般都是运用的位运算(&),这样既可以提高程序的效率,也有助于理解。首先在规约的定义中有很多的一个字节中的不同位代表一个含义,这种时候就运用到了位运算,这样就可以直接将对应位的值提取出来,例如那可变结构限定词这个字节来举个例子。最高位的D7代表的是信息元素地址的连续性,其中0不连续1连续,所以我们只需要拿这个字节和128(0x80)做位运算就可以得到D7这一位,如果结果是10000000就说明是1连续。这个地方更直观一点的判断方法就是((B&0x80)>>7)==1?连续 : 不连续。

å¨è¿éæå¥å¾çæè¿°

时标的解析

å¨è¿éæå¥å¾çæè¿°

 

首先时标这里一共有7个字节,下面对这几个字节的含义以及解析方法做一下解释:

年(byte 7):这里只有后面的7位有效,但是第8位填充的是0,所以这一个字节直接转换形成int就可以了。
月(byte 6):同上
小时(byte 4):同上
分钟(byte 3):同上
日(byte 5[bit 1~5]):第五字节的后5位表示的是日,byte5 & 0x1F 就可以得到(0x1F = 0001 1111),例如第五字节是87(87 = 0x57 = 0101 0111),其中010指的是星期,10111指的是day。这里使用87 & 0x1F就可以得到23。使用87 & 0xE0就可以得到64,然后再用这个结果除以32就可以得到结果,如果说除以32不太理解的话,也可以用结果右移运算64>>5也可以得到结果 。
毫秒(byte 1 and byte 2):这个地方首先是低前高后的问题(这个为题不太明白的可以先翻一下下面的第四个问题),( byte 2 << 8 ) + byte 1 ,这个地方我用一个表格说明一下(例如第一字节是6E,第二字节是2A)。

å¨è¿éæå¥å¾çæè¿°

低前高后的问题

这里讲一下低前高后的问题,拿这个104规约的信息对象地址举例。例如34 12 00这是原报文的字节,再具体解析的时候我们要把它转成0x001234=4660,其实这里和上面的毫秒的解析方式一样。、

å¨è¿éæå¥å¾çæè¿°

 ————————————————
版权声明:本文为CSDN博主「张二狗和苗翠花」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ZhangYu971014/article/details/79841555

 

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

101、104规约解析 的相关文章

  • 柔性上肢康复机器人研究中的VR技术

    上肢康复机器人用于对脑卒中患者进行上肢康复治疗 xff0c 能够维持和扩大患者关节活动度 增强肌肉力和协调性 xff0c 以防止肌肉萎缩 关节痉挛等各类症状的出现 xff0c 最终重建肢体功能 xff0c 以便回归正常生活 现有的上肢康复机
  • 动作捕捉在动物神经与运动研究领域的应用

    对于由神经系统疾病引起的运动障碍的康复治疗方案 xff0c 需要预先进行动物实验 xff0c 利用结果分析病症机理 xff0c 并为制定治疗 康复方案提供实验依据 脊髓损伤是中枢神经损伤的一种 xff0c 它会引发运动功能部分或完全丧失 研
  • 工业机器人协作控制研究

    当前工业焊接大多由工业机器人完成 在弧焊焊接领域 xff0c 传统的由焊接机器人 43 变位机 43 工装夹具组成的焊接工作站已不能满足当前小批量 定制化的柔性自动化生产需求 而由多个机器人构成的协作焊接系统具有更强的作业能力 更大范围的工
  • 几种智能机器人室内定位方法对比

    近年来随着控制算法的研究进展 xff0c 无人机 无人车等智能机器人在各领域中发展迅速 研发人员在对智能机器人进行相关研究时 xff0c 通常需要完成室内环境下的模拟调试实验 xff0c 在这些实验中 xff0c 确定各智能体自身定位以及与
  • NOKOV度量动作捕捉用于多智能体协同系统等效验证实验

    现代战争中 xff0c 无人机 无人车及无人艇等无人系统已逐渐在战场部署 xff0c 但是无人系统单体存在负载和任务能力有限 作战能力单一等不足 为了弥补单体能力不足 xff0c 同时提高其对作战任务的适应能力 xff0c 无人系统可以以集
  • NOKOV度量动捕软件教程(2):系统标定

    1 确认场地中央已放置好 L 型标定杆 xff0c 并将场地内的其他反光标识点遮挡或移出场地 xff1b 2 可通过点击 XINGYING 软件界面右下方的 全开 按钮 xff0c 同时观察全部镜头 xff08 如图 1 xff09 xff
  • NOKOV度量动捕软件教程(3):数据采集

    1 采集数据前 xff0c 需确保软件已加载配置文件 xff0c 可通过 文件 加载标定文件 选项进行加载 xff0c 或者通过通过标定生成一个新的配置文件 xff1b 2 将被捕捉物贴好反光标识点 xff0c 放入场地内 图 1 3 在软
  • NOKOV度量动捕软件教程(4):创建刚体与markerset

    一 创建 Markerset xff08 刚体 xff09 1 XINGYING软件支持在实时下创建 Markerset 刚体 xff0c 需在场地内放置有已贴好反光标识点的刚体 xff0c 并且能在软件中的 3D 视图下看到每一个反光标识
  • NOKOV度量动捕软件教程(5):数据处理

    目录 一 导入数据 二 建立MarkerSet 三 调用已有的MarkerSet 四 数据修复 五 建立刚体 六 实时应用MarkerSet 一 导入数据 1 点击 XINGYING 软件界面右下角的 后处理模式 按钮 xff0c 进入后处

随机推荐

  • 大小端模式

    数据在内存中以字节形式存放 xff0c X86结构是小端模式 xff0c 而KEIL C51则为大端模式 很多的ARM xff0c DSP都为小端模式 有些ARM处理器还可以随时在程序中 在ARM Cortex 系列使用REV REV16
  • c语言中的__FILE__和__LINE__的作用

    这是编译器内置宏 xff0c 这些宏定义不仅可以帮助我们完成跨平台的源码编写 xff0c 灵活使用也可以巧妙地帮我们输出非常有用的调试信息 例如 xff1a printf 34 FILE d LINE d s n 34 34 FILE LI
  • NOKOV度量动捕软件教程(6):数据分析

    1 点击界面上方 窗口分割 2 个窗口 xff1a 上 下 选项 xff0c 让主界面分割为上下两个窗格 xff08 如图 xff09 xff0c 选中窗格时会有橙色边框 xff0c 此时点击 视图类型 xff0c 让其中一个窗口显示 3D
  • crazyswarm+crazyflie+NOKOV动捕飞控方案操作说明(3):通过VRPN协议对接

    一 crazyflie配置 1 查看 crazyflie 固件更新完毕后 xff0c 取下crazyflie xff0c 并连接电池 xff0c 把crazyradio接上电脑usb口 xff0c 运行以下命令 xff1a rosrun c
  • crazyswarm+crazyflie+NOKOV动捕飞控方案操作说明(4):SDK对接

    一 crazyswarm nokov 支持 1 更换libmotioncapture crazyswarm 支持nokov首先需要更换nokov专有libmotioncapture xff0c 进入路径 xff1a cd crazyswar
  • UE5与NOKOV度量动捕系统连接教程

    目录 一 动捕软件安装与数据准备 二 插件安装与 UE5 设置 一 xff09 插件安装 二 xff09 UE5 设置 xff08 实时播放模式 使用设备 xff1a 从仔动作捕捉套装 xff08 NOKOV度量 xff09 软件 xff1
  • Unity与NOKOV度量动捕系统连接教程

    目录 一 动捕软件安装与数据准备 二 插件安装与 Unity 设置 xff08 实时播放模式 xff09 三 插件安装与 Unity 设置 xff08 后处理下实时模式 xff09 使用设备 xff1a 从仔动作捕捉套装 xff08 NOK
  • MotionBuilder与NOKOV度量动捕系统连接教程

    目录 一 动捕软件安装 二 数据录制 导入与导出 xff08 一 xff09 创建 Markerset xff08 二 xff09 数据采集 xff08 三 xff09 数据导入 xff08 四 xff09 数据导出 三 插件安装与 Mot
  • NOKOV动作捕捉系统使多场协同无人机自主建造成为可能

    近年来 xff0c 工业机器人的兴起使得建造的效率和安全性得以提升 xff0c 但由于机器人由于大小与活动范围的限制 xff0c 在大型建筑上难以施展拳脚 上海同济大学建筑系的无人机自主建造小组 xff0c 正在进行以无人机取代工业机器人进
  • 多智能体系统集群协同控制实验平台详解与典型案例

    目录 一 机器人实验是智能体集群研究必要手段 二 动作捕捉系统解决智能体集群实验系统多个痛点 三 多智能体集群协同控制实验平台 1 Crazyswarm多无人机集群编队实验平台 2 Robotarium机器人平台 3 中科院自动化所智能集群
  • NOKOV度量动作捕捉协助完成无人机室内定位研究

    随着工业发展 技术进步 xff0c 无人机的使用在各行各业愈发普遍 xff0c 开始出现无人机飞行送外卖 智能无人机自主巡检等多方面应用 在这一过程中 xff0c 无人机飞行定位就成为了重中之重 西北工业大学无人机特种技术国防科技重点实验室
  • 光学动作捕捉系统构成

    一套光学动作捕捉系统由红外动作捕捉镜头 动作捕捉软件 反光标识点 POE交换机 和若干配件组成 xff08 如标定框和镜头固定装置等 xff09 其本质是定位系统 xff0c 通过计算分析 xff0c 来获取与其相关的速度 加速度等多种运动
  • vscode命令行起本地服务,可发送http请求

    在我们vscode中默认打开的是file协议 xff0c 但是往往我们会有ajax等请求 xff0c 需要发送http等其他协议 xff0c 所以我们需要搭起本地服务器 xff1a 1 xff1a cd 进去到文件位置 xff0c 运行 n
  • 动作捕捉用于仿生机器人的运动规划

    随着机器人 三维动画 虚拟现实等产业的发展 xff0c 关于仿生机器人的动作研究早已成为重要的热点课题 如何让机器人或虚拟人物做出合理 流畅的姿态呢 xff1f 这就要涉及到逆运动学算法研究 人体很复杂 xff0c 传统算法需优化 由于人体
  • 智能化人机协作 遮挡情况下准确识别目标信息

    研究背景 废旧产品 xff08 end of life products xff09 的拆卸是工程全生命周期管理的一个基本步骤 在减少资源消耗和温室气体排放的同时 xff0c 回收可重复使用的部件可能创造相当的经济价值 xff0c 同时也能
  • 线下·香港 | 工业大数据与智能系统前沿会议

    由香港理工大学主办的工业大数据与智能系统前沿会议将于2023年4月28日至5月1日在香港举行 届时来自海外 内地及香港的知名科学家将聚首 xff0c 将围绕大会主题 面向人机共融的工业转型 发表演讲 xff0c 分享他们的独到见解并探讨最新
  • 人机耦合模型研究及其在下肢外骨骼机器人设计中的应用

    在外骨骼研究中 xff0c 一个合适的人机耦合模型非常重要 xff0c 它可以帮助预测外骨骼系统直接作用于人体产生的影响 xff0c 避免不必要的伤害和能量损失 xff0c 同时也有助于优化外骨骼系统的设计和控制 xff0c 提高其佩戴的舒
  • STM32】 DMA原理,步骤超细详解,一文看懂DMA

    如需转载请注明地址 xff1a https blog csdn net as480133937 article details 104927922 DMA的基本介绍 什么是DMA DMA的基本定义 DMA xff0c 全称Direct Me
  • float类型数据在报文中的传输方法

    方法1 xff1a 转化成整型传输 假如保留float类型数据为两位小数 xff0c 我们可以将float数据 100 转换成整型数据传输 xff0c 对端收到后 xff0c 再 100 xff0c 转换成float类型 方法2 xff1a
  • 101、104规约解析

    转载 xff1a 电网101 104规约解析 xff08 Java xff09 张二狗和苗翠花的博客 CSDN博客 iec101 java 1 前言 最近在研究广东电网的101与104规约 xff0c 也就是DL T634 5101 200