前言前面的文章用到了数据更新但是重点介绍的是方法然而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;
企业数字化 ERP 产品动态
相关推荐
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:27
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:27
Google Attestation Key 1 简介
因为最近要用到这个,所以简单写写。
定义: Attestation Key是Android Key Attestation 的信任根,用来给设备TEE/StrongBox里的认证证书链做信任背书,让后端服务器可信地确认:这个密钥真的跑在安全硬件里&… · 2026/11/5 6:30:27
OpenClaw 2026版核心能力与京东云部署指南 1. OpenClaw(Clawdbot)2026版核心能力解析OpenClaw作为新一代AI助理框架,在2026年3月发布的版本中实现了多项突破性升级。与市面上常见的聊天机器人不同,它真正实现了从"对话交互"到"任务执行"的跨越。我在实… · 2026/11/5 7:15:37
推荐系统架构设计与工程实践:从实时处理到多目标优化 1. 推荐系统的演进与挑战十年前我刚入行推荐系统时,业界还在用基于物品协同过滤的静态模型。记得当时为了提升3%的准确率,团队花了两个月调整相似度计算公式。如今在电商平台工作,每天要处理20亿的用户行为事件,模型更新频率从周级… · 2026/11/5 7:15:37
基于STM32F407的嵌入式示波器设计与实现 简介:本资源是一套基于STM32F407微控制器实现的嵌入式数字示波器完整开发工程,面向嵌入式初学者、电子类专业学生及硬件开发者,解决低成本、可定制化信号采集与实时波形显示的学习与实践需求。项目深度整合ADC高速采样、FIFO数据缓存、Cortex… · 2026/11/5 7:15:37
二叉树硬币分配算法:后序遍历与递归解法 1. 问题理解与解法思路这道题目要求我们在二叉树中重新分配硬币,使得每个节点恰好有1枚硬币。我们可以通过递归遍历二叉树来解决这个问题。关键在于理解每个节点的"过载量"(即该节点的硬币数与1的差值),以及如何将这些过… · 2026/11/5 7:15:37
网络安全运维学习路线:从零基础到专业进阶 1. 网络安全运维学习路线解析作为一名在网络安全行业摸爬滚打十年的老兵,我见过太多转行者因为学习顺序错误而浪费时间和精力。今天我就来分享一套经过实战验证的网络安全运维学习路线,帮助零基础的朋友少走弯路。1.1 为什么学习顺序如此重要网络安全运维… · 2026/11/5 7:15:37
商业航天与卫星通信技术解析及应用场景 1. 商业航天与卫星通信行业概述2000年初,我参与第一个卫星地面站建设项目时,商业航天还只是各国航天局的专属领域。如今SpaceX的猎鹰火箭已实现常态化回收,OneWeb和星链正在近地轨道展开激烈竞争——这个曾经由国家主导的行业,正在… · 2026/11/5 7:14:37
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38
多智能体协作系统架构设计与实践优化 1. 多智能体协作系统的时代背景2017年Transformer架构的诞生彻底改变了人工智能的发展轨迹。当行业还沉浸在单一大模型带来的性能突破时,Anthropic的研究团队已经将目光投向了更前沿的领域——如何让多个智能体通过协作产生超越单体能力的系统智能。这就像交响乐团中… · 2026/11/5 0:00:39
大模型系统性入门实战指南:从原理到部署微调的全链路路线 提到大模型的系统性入门,我先说个结论:这事真不难,难的是资料太散、路线太多,今天这个框架明天那个工具,新人很容易在“收藏夹吃灰”和“教程看到一半放弃”之间反复横跳。市面上关于大模型的内容少说有几十万篇&#… · 2026/11/5 0:00:39
鸿蒙文件系统沙箱机制解析与开发实践 1. 鸿蒙文件系统沙箱机制深度解析作为一名从Android转向鸿蒙开发的工程师,我深刻体会到文件系统访问是迁移过程中最先遇到的"拦路虎"。在Android上运行良好的文件读写代码,在鸿蒙真机环境却频频出现文件写入后神秘消失或直接抛出权限拒绝错误的… · 2026/11/5 0:00:39
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38