尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
零基础实现IEC61850(七)细说数据更新
前言前面的文章用到了数据更新但是重点介绍的是方法然而IEC61850提供了多种数据类型都可能让使用者感觉无从下手所以需要有一篇文章进行全面的介绍本文重点根据类型区分介绍。本文所有样例源码已经上传至https://gitee.com/yunxingtianxia/yx-tools 的 yx-pis-dll\example\07 updateData 目录IEC61850都有哪些类型类型类型描述协议栈定义BOOLEAN布尔IEC61850_DATATYPE_BOOLEANINT8有符号整型IEC61850_DATATYPE_INT8INT16有符号整型IEC61850_DATATYPE_INT16INT32有符号整型IEC61850_DATATYPE_INT32INT64有符号整型IEC61850_DATATYPE_INT64INT8U无符号整型IEC61850_DATATYPE_INT8UINT16U无符号整型IEC61850_DATATYPE_INT16UINT32U无符号整型IEC61850_DATATYPE_INT32UFLOAT32单精度浮点型IEC61850_DATATYPE_FLOAT32FLOAT64双精度浮点型IEC61850_DATATYPE_FLOAT64ENUMERATED枚举IEC61850_DATATYPE_ENUMERATEDCODEDENUM枚举IEC61850_DATATYPE_CODED_ENUMOCTETSTRING八位组串IEC61850_DATATYPE_OCTET_STRINGVisibleString可视字符串IEC61850_DATATYPE_VISIBLE_STRINGUNICODESTRINGUnicode字符串IEC61850_DATATYPE_UNICODE_STRINGTimeStamp时间戳IEC61850_DATATYPE_TIMESTAMPQuality品质IEC61850_DATATYPE_QUALITY协议栈类型使用规则我们统一使用数据属性结构体IEC61850_DataAttributeData来进行数据模型中数据属性进行赋值取值的操作structIEC61850_DataAttributeData{unsignedchartype;/*! 数据类型。br取值为 enum IEC61850_DataType 类型的枚举值之一。br若数据类型为数组或者结构体则每个数组元素或结构体成员都将是一个单独的 IEC61850_DataAttributeData 类型的数据。 */intarrayIndex;/*! 数组元素索引。br若当前数据属性为数组类型数据中的某个元素时该值有效值为当前数据对应的数组元素索引否则该值无意义值为 0。 */unsignedintbitLength;/*! 数据长度信息。其值的意义因数据类型而异。br若数据类型是数组则该值代表数组元素数量br若数据类型是结构体则代表结构体成员的数量br若数据类型既不是数组也不是结构体则该值代表对应数据类型所占的实际位bit数。例如INT32 类型数据大小为 32 bit则该值对应为 32。 */void*pvData;/*! 数据值的指针。br该指针指向数据值所在的内存空间地址。br若数据类型为数组数据则该指针指向一个包含 bitLength 个 IEC61850_DataAttributeData 类型的数组元素的数组的首地址br若数据类型为结构体则该指针指向一个由 bitLength 个连续的 IEC61850_DataAttributeData 类型的结构体成员数据所构成的内存空间的首地址br若数据类型既不是数组也不是结构体则可以按照对应的数据类型对该地址解引用来获取数据值。 */}看看之前的例子IEC61850_ErrorCodeUpdateMMXUPhsAMagi(){IEC61850_ErrorCode resultS_OK;S32 newVal0;IEC61850_DataAttributeData daData{0};char*referenceTEMPLATELDevice1/MMXU0.A.phsA.cVal.mag.i;printf(Enter an S32 value: );scanf(%d,newVal);daData.bitLengthsizeof(S32)*8;daData.typeIEC61850_DATATYPE_INT32;daData.pvDatanewVal;resultIEC61850_UpdateWithReference(g_iec61850,reference,daData);}这里面和类型相关会存在差异的部分只有这四行S32 newVal0;//定义合适的变量daData.bitLengthsizeof(S32)*8;//指定数据长度daData.typeIEC61850_DATATYPE_INT32;//指定数据类型daData.pvDatanewVal;//指针指向正确的变量接下来就针对不同类型交代不同类型的这四行代码如何写建模建模工具直接访问云端版http://scl.yunxing.tech:8888也可在该地址下载桌面版。创建一个CID模型模型中尽量包含全面的数据类型。详细可查看本样例代码提供的CID文件这里为每个要更新的数据属性都设置了DAID。LNinst0lnClassGGIOlnTypeGGIO_0prefixDOIdescBehaviournameBehDAInamestValsAddr5.0.0.0.0/DAInamedsAddr5.0.0.0.1/DAInamedUsAddr5.0.0.0.2//DOIDOIdescGeneral single alarmnameAlm_boolDAInamestValsAddr0.0.0.0.1/DAInameqsAddr0.0.0.0.2/DAInametsAddr0.0.0.0.3//DOIDOIdescAnalogue inputnameAnIn_int8SDInamemagDAInameisAddr1.0.0.0.8//SDI/DOIDOIdescAnalogue inputnameAnIn_int16SDInamemagDAInameisAddr1.0.0.0.16//SDI/DOIDOIdescAnalogue inputnameAnIn_int32SDInamemagDAInameisAddr1.0.0.0.32//SDI/DOIDOIdescAnalogue inputnameAnIn_int64SDInamemagDAInameisAddr1.0.0.0.64//SDI/DOIDOIdescAnalogue inputnameAnIn_int8uSDInamemagDAInameisAddr2.0.0.0.8//SDI/DOIDOIdescAnalogue inputnameAnIn_int16uSDInamemagDAInameisAddr2.0.0.0.16//SDI/DOIDOIdescAnalogue inputnameAnIn_int32uSDInamemagDAInameisAddr2.0.0.0.32//SDI/DOIDOIdescAnalogue inputnameAnIn_float32SDInamemagDAInamefsAddr3.0.0.0.32//SDI/DOIDOIdescAnalogue inputnameAnIn_float64SDInamemagDAInamefsAddr3.0.0.0.64//SDI/DOIDOIdescDouble point controllable status outputnameDPCSO11DAInamestValsAddr6.0.0.0.0//DOI/LNBOOLEAN布尔Boolean newValTRUE;daData.bitLength8;daData.typeIEC61850_DATATYPE_BOOLEAN;daData.pvDatanewVal;INT8有符号整型S8 newVal123 daData.bitLength8;daData.typeIEC61850_DATATYPE_INT8;daData.pvDatanewVal;INT16有符号整型S16 newVal123 daData.bitLength16;daData.typeIEC61850_DATATYPE_INT16;daData.pvDatanewVal;INT32有符号整型S32 newVal123 daData.bitLength32;daData.typeIEC61850_DATATYPE_INT32;daData.pvDatanewVal;INT64有符号整型S64 newVal123 daData.bitLength64;daData.typeIEC61850_DATATYPE_INT64;daData.pvDatanewVal;INT8U无符号整型U8 newVal123;daData.bitLength8;daData.typeIEC61850_DATATYPE_INT8U;daData.pvDatanewVal;INT16U无符号整型U16 newVal123;daData.bitLength16;daData.typeIEC61850_DATATYPE_INT16U;daData.pvDatanewVal;INT32U无符号整型U32 newVal123;daData.bitLength32;daData.typeIEC61850_DATATYPE_INT32U;daData.pvDatanewVal;FLOAT32单精度浮点型Float32 newVal0.8;daData.bitLength32;daData.typeIEC61850_DATATYPE_FLOAT32;daData.pvDatanewVal;FLOAT64双精度浮点型Float64 newVal0.8;daData.bitLength64;daData.typeIEC61850_DATATYPE_FLOAT64;daData.pvDatanewVal;ENUMERATED枚举枚举类型还是有些特殊在CID建模中类型选择Enum并要其指定具体的定义不过一般我们用标准定义好的比如Beh的状态值定义如下EnumTypeidBehaviourModeKindEnumValord1on/EnumValEnumValord2blocked/EnumValEnumValord3test/EnumValEnumValord4test/blocked/EnumValEnumValord5off/EnumVal/EnumType其实所谓枚举值就是为该值赋值枚举定义的值这里面是1,2,3,4,5。以此为例代码如下tIEC61850Enum newVal1;daData.bitLengthIEC61850_ENUM_BITSIZE;daData.typeIEC61850_DATATYPE_ENUMERATED;daData.pvDatanewVal;CODEDENUM固定枚举这种是不需要自定义枚举值的而是固定的一些类型比如CID模型中的Tcmd、Dbpos等以Dbpos为例子其他的因为不常用如果确实用到可以联系我们eDbPosValues newValDBPOS_ON;daData.bitLengthIEC61850_DBPOS_BITSIZE;daData.typeIEC61850_DATATYPE_DBPOS;daData.pvDatanewVal;OCTETSTRING八位组串这个就略了因为几乎没有需要用户去更新和使用该类型的场景如果确实用到可以联系我们VisibleString可视字符串char*newValthis is new VisibleString;daData.bitLengthstrnlen(newVal,255)*8;daData.typeIEC61850_DATATYPE_VISIBLE_STRING;daData.pvDatanewVal;UNICODESTRINGUnicode字符串注意这里源码文件本身采用了utf8编码目前所使用的vs2022用安装了Force UTF-8(No Bom)2022插件char*newVal这里是中文;daData.bitLengthstrnlen(newVal,255)*8;daData.typeIEC61850_DATATYPE_UNICODE_STRING;daData.pvDatanewVal;TimeStamp时间戳IEC61850_TimeStamp t{0};IEC61850_GetTime(NULL,t);daData.bitLengthIEC61850_TIMESTAMP_BITSIZE;daData.typeIEC61850_DATATYPE_TIMESTAMP;daData.pvDatat;Quality品质IEC61850_QualityFlag qIEC61850_QUALITY_GOOD;daData.bitLengthIEC61850_QUALITY_BITSIZE;daData.typeIEC61850_DATATYPE_QUALITY;daData.pvDataq;
RELATED

相关推荐

KytyPS5 开源PS5模拟器完全指南:手把手在 PC 上编译并首次启动

KytyPS5 开源PS5模拟器完全指南:手把手在 PC 上编译并首次启动

KytyPS5 开源PS5模拟器完全指南:手把手在 PC 上编译并首次启动 【免费下载链接】KytyPS5 PlayStation 5 translation layer for Windows, Linux and macOS 项目地址: https://gitcode.com/gh_mirrors/ky/KytyPS5 想不装主机、直接在 PC 上玩 PS5 游戏&#x…

📅 2026/11/5 6:31:46
SuperSplat 高斯泼溅编辑 3 坑排查指南

SuperSplat 高斯泼溅编辑 3 坑排查指南

SuperSplat 高斯泼溅编辑 3 坑排查指南 【免费下载链接】super-splat 3D Gaussian Splat Editor 项目地址: https://gitcode.com/gh_mirrors/su/super-splat 在浏览器里直接做 3D Gaussian Splat 编辑的人,多半会先碰到 SuperSplat。真正卡人的很少是渲染&am…

📅 2026/11/5 6:31:46
uPlot 轻量级时序图表快速上手指南:48 KB 的库,25 ms 画出 16 万个数据点

uPlot 轻量级时序图表快速上手指南:48 KB 的库,25 ms 画出 16 万个数据点

uPlot 轻量级时序图表快速上手指南:48 KB 的库,25 ms 画出 16 万个数据点 【免费下载链接】uPlot 📈 A small, fast chart for time series, lines, areas, ohlc & bars 项目地址: https://gitcode.com/gh_mirrors/up/uPlot 监控页…

📅 2026/11/5 6:31:45
MORE NEWS

更多资讯

📰

物联网视频融合平台架构与关键技术解析

1. 物联网视频融合平台的现状与挑战在当今万物互联的时代,视频数据已成为物联网感知层最重要的信息载体之一。据统计,全球物联网设备产生的视频数据量正以每年40%的速度增长,但同时也面临着三大核心痛点:协议碎片化问题&#xff1…

📰

VMware Ubuntu网络问题排查与解决指南

1. 问题现象与初步排查最近在VMware Workstation Pro 17上安装Ubuntu 22.04 LTS时遇到了网络连接问题。主机是Windows 11系统,能正常上网,但虚拟机里的Ubuntu却显示网络不可用。这种问题在实际开发环境中很常见,特别是刚接触虚拟化的开发者。…

📰

XD转Sketch的三种可靠方法:保真、可控与自动化

1. 项目概述:为什么“XD转Sketch”至今仍是设计协作中的高频痛点“XD文件转换为sketch的三种方法”——这个标题看似简单,实则背后牵扯的是国内大量中小型设计团队、外包工作室乃至独立设计师在真实工作流中反复踩坑、反复试错、反复妥协的缩影。我接触过…

📰

商业分析AI工具横评:9大平台实战对比与选型指南

1. 项目背景与核心价值作为一位在商业分析领域深耕多年的从业者,我深知MBA学员和商业分析师在选择AI工具时面临的困境。市面上号称能"降低AI使用门槛"的平台层出不穷,但真正经得起实战检验的却寥寥无几。这次我耗时三个月,自费测试…

📰

工业智能化转型:核心技术架构与实战应用

1. 工业智能化转型的必然趋势十年前走进工厂车间,你会看到流水线上密密麻麻的工人重复着机械动作;如今同样场景里,机械臂的轨迹比老师傅更精准,视觉检测系统比质检员更敏锐。这种变革背后是工业领域正在经历的三重颠覆&#xff1a…

📰

AD封装库全流程:原理图库、PCB库与3D库管理避坑

简介:面向Altium Designer用户的元器件库合集,覆盖原理图绘制到PCB布局布线的常见需求,适合刚入门AD、需要快速补齐基础库的电子工程师与在校学生,也便于有经验的设计者减少重复建库。压缩包共117个文件,约464.27MB&am…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬