当前位置: 首页 > news >正文

C++结构体指针强制转换以处理电力系统IEC103报文

前言

最近依旧是开发规约解析工具的103篇,已经完成了通用分类服务部分的解析,现在着手开始搞扰动数据传输,也就是故障录波的传输。

在103故障录波(扰动数据)的报文中,数据是一个数据集一个数据集地存放,所以为了方便我们采用pData[offset]这种方式来访问到每一个数据,用结构体TJC103_Wave来定义数据集之前三行的其余字段部分,初步打算用结构体来访问其余字段部分,而用BYTE(unsigned char)型的指针来访问数据集,因为涉及到偏移量,所以采用pData[offset]这种方式来访问较为简单。
在这里插入图片描述

以下为部分代码实现:

//.h文件
//=========================新增103规约发送接收帧结构体=======================
typedef struct
{BYTE bStart;   //启动字符BYTE bLength;  //长度BYTE bControl1;//控制域1BYTE bControl2;//控制域2BYTE bControl3;//控制域3BYTE bControl4;//控制域4BYTE bType;    //类型标识BYTE bQualifier;//结构限定词BYTE bReason;  //传送原因 BYTE bAddress; //公共地址BYTE bFUN;      //功能类型BYTE bINF;     //信息序号BYTE bData;    BYTE bGenData;  //从NGD开始
} TJC103RxdFm, TJC103TxdFm;TJC103RxdFm m_pRxdFm_JC103;			//存储报文的结构体//故障录波数据准备好报文的应用服务数据格式
typedef struct
{BYTE bNotUsed;          //未用BYTE bDataType;         //数据类型WORD wFaultNumber;      //故障序号WORD wPowerGrid;        //电网故障序号(未用)BYTE NOC;               //模拟量路数WORD NOE;               //每路模拟量的点数WORD INT;               //非实际数DWORD dwNotUsed;        //没有使用,全部为零WORD StartRecordWave;   //启动与录波开始的间隔点数WORD ExitRecordWave;    //出口与录波开始的间隔周波数WORD ReturnRecordWave;  //返回与录波开始的间隔周波数BYTE bData;              //数据
} TJC103_Wave;

报文解析处理:

//.cpp文件
bool CXfloatDlg::Rxd68_JC103_Burst_Trans_Ready_26()	//扰动数据传输准备就绪
{TJC103_Wave* JC103_Wave = (TJC103_Wave*) & (m_pRxdFm_JC103->bData);SetTop_JC103("扰动数据传输准备就绪");qy.Format("%02X%s传送原因bReason:%s\r\n", m_pRxdFm_JC103->bReason, GetSpace(1), SETReason_JC103(m_pRxdFm_JC103->bReason));m_result += qy;qy.Format("%02X%s数据单元公共地址:%d\r\n", m_pRxdFm_JC103->bAddress, GetSpace(1), m_pRxdFm_JC103->bAddress);m_result += qy;qy.Format("%02X%s功能类型FUN:%d\r\n", m_pRxdFm_JC103->bFUN, GetSpace(1), m_pRxdFm_JC103->bFUN);m_result += qy;qy.Format("%02X%s信息序号INF:%d  %s\r\n", m_pRxdFm_JC103->bINF, GetSpace(1), m_pRxdFm_JC103->bINF, GetINFstrign(m_pRxdFm_JC103->bINF));m_result += qy;qy.Format("%02X%s未用\r\n", JC103_Wave->dwNotUsed, GetSpace(1));m_result += qy;qy.Format("%02X%s数据类型:%d\r\n", JC103_Wave->bDataType, GetSpace(1), JC103_Wave->bDataType);m_result += qy;//其余字段...BYTE* pData = &(JC103_Wave->bData);while (1){//循环输出数据部分..pData[wOffset++];//循环输出数据部分..}return TRUE;
}

其中最主要的代码便是这两行:

TJC103_Wave* JC103_Wave = (TJC103_Wave*) & (m_pRxdFm_JC103->bData);BYTE* pData = &(JC103_Wave->bData);

我们收到的报文内容存放在m_pRxdFm_JC103中,第一句将m_pRxdFm_JC103->bData的地址赋值给JC103_Wave,并且强制转换为TJC103_Wave类型,以 TJC103_Wave的方式来访问 m_pRxdFm_JC103->bData 的内容,并且可以通过JC103_Wave->bData来访问到数据类型的值,通过&(JC103_Wave->bData)来访问到其地址。

第二句则是将JC103_Wave->bData的地址赋值给pData,并且可以通过pData[0] 、pData[1]来访问到后续的值。

例如报文:
68 0C 18 00 04 00 1A 81 1F 01 FF 00 00 01
由103规约可知,1A是类型标识是26,进入上面我们提到的Rxd68_JC103_Burst_Trans_Ready_26函数,并且可以知道此时m_pRxdFm_JC103->bData的值便是最后一个00,而最后的00 01其实在内存中就是紧跟在m_pRxdFm_JC103->bData的值00之后的,所以我们这时可以通过JC103_Wave 来接管后面两个字节的监控,同时可以用JC103_Wave->bNotUsed来访问到这个最后的00 ,用JC103_Wave->bDataType访问到最后的01。

因为我们最后要操作数据,并且数据是一个数据集一个数据集地存放,所以我们需要通过pData[offset]这种方式来访问到每一个数据,所以我们将JC103_Wave->bData的地址在赋值给一个BYTE型指针,这样我们就可以一个字节一个字节地访问到每一个数据了。

相关文章:

C++结构体指针强制转换以处理电力系统IEC103报文

前言 最近依旧是开发规约解析工具的103篇,已经完成了通用分类服务部分的解析,现在着手开始搞扰动数据传输,也就是故障录波的传输。 在103故障录波(扰动数据)的报文中,数据是一个数据集一个数据集地存放&a…...

vue3.0脚手架、路由、Element Plus安装案例:收录于Vue 3.0 后台管理系统案例

目录 环境配置 Vue 3.0 脚手架(Vite)安装 node版本查询与切换 创建一个vue应用 Vue Router安装 安装vue-router4 配置路由 安装配置 展示路由 Element UI安装 安装element-plus 引入element-plus 使用element-plus 用户登录 环境配置 Vue 3…...

JS中原型相关的十个知识点总结

JavaScript 中的原型(Prototype)是理解对象和继承机制的核心概念。以下是我对 JavaScript 原型相关知识点的总结和详细讲解: 1. 原型对象(Prototype Object) 在 JavaScript 中,每个对象都有一个关联的对象…...

使用DevKit套件调优 --未完

基于鲲鹏开发板使用DevKit套件调优 鲲鹏开发板平台使用体验 我们使用的硬件平台是Orange Pi Kunpeng Pro,外观如下图 我们看到我们的Orange Pi 颜值相当的高,我们使用远程连接后就能看见我们非常漂亮的openEuler的桌面。 openEuler操作系统已经预装好了&#xf…...

Vue3+ElementUI中的Table组件的使用

Vue3ElementUI中的Table组件的使用 校验表格内多个输入框校验 表格滚动到底部 校验 表格内多个输入框校验 注意prop如何写。实现:一旦输入框内部有更改,清空校验;实现:自定义校验错误提示信息样式;实现:在…...

Highcharts 条形图:数据可视化的利器

Highcharts 条形图:数据可视化的利器 引言 在数据分析和可视化领域,Highcharts 是一个广受欢迎的 JavaScript 图表库。它以其易用性、灵活性和丰富的图表类型而著称。其中,条形图作为一种基础但功能强大的图表类型,被广泛应用于各种场景,以直观地展示数据分布和比较。本…...

嵌入式初学-C语言-二四

Void与void*的区别 定义: Void:空类型,是数据类型的一种 Void*:是指针类型,是指针类型的一种,可以匹配任何类型的指针,类似于通配符 Void 说明:void作为返回值类型使用&#xf…...

tcpdump入门——每种flag分别表示什么意思

在 tcpdump 的输出中,TCP 标志位(Flags)通常用简写字符表示。以下是每种 TCP 标志位的含义及其对应的简写字符: TCP 标志位及其简写 SYN (Synchronize) 作用:用于初始化连接。简写字符:S ACK (Acknowledgm…...

Qt如何封装工具

在Qt中封装工具类或库是一种常见的开发模式,通过封装可以提高代码的可重用性、可维护性和模块化。以下是封装工具类的一些步骤和最佳实践: ### 1. 创建工具类 首先,创建一个新的C类作为你的工具类。在Qt Creator中,可以通过右键点…...

vue3进阶用法之通过调用函数动态加载组件用法及示例

业务场景 假设现在有一个可能在全局任何地方调用的vue组件你会怎么办&#xff1f;非常简单&#xff0c;在app.vue下的router-view同级写上这个组件&#xff0c;在全局中加一个变量v-if判断这个变量就解决了&#xff01; tempalte中 <div><router-view /><You…...

线程和进程的关系

计算机是如何运行的&#xff1f;CPU 操作系统 进程管理 CPU 多核心 充分利用-> 并发编程&#xff0c;并发执行就算分时复用&#xff0c; 包括多进程编程。 多进程编程进程太重&#xff0c;创建进程&#xff0c;销毁进程开销比较大 &#xff0c;不利于频繁创建销毁进程&…...

《AI视频类工具之十二——​ EbSynth》

一.简介 官网:https://ebsynth.com/?ref=ai-bot.cn EbSynth是一款功能强大的视频风格转换工具,它利用先进的图像处理和计算机视觉技术,将静态艺术风格应用到视频中的每一帧,为视频创作者提供了全新的创作方式。 二.功能介绍 主要功能 视频转换:EbSynth 可以将视频转换…...

Facebook国内企业户、海外户、国内二不限户以及三不限户区别何在?

Facebook广告账户的类型和设置对于企业在不同市场中的广告活动至关重要。了解国内企业户、海外企业户&#xff0c;以及国内二不限户和三不限户的区别&#xff0c;可以帮助你更好地选择和管理广告账户。以下是对这些账户类型的详细解析。 一、Facebook海外企业广告账户 海外企业…...

修改 ASP.NET Core 应用程序运行后的默认端口

可以通过以下几种方法来实现。具体选择哪种方法取决于项目需求和环境设置。 方法 1&#xff1a;使用 appsettings.json 配置文件 你可以在 appsettings.json 中设置 Kestrel 的配置来更改默认端口。 打开 appsettings.json 文件&#xff0c;添加 Kestrel 配置&#xff1a; { …...

维基知识库系统Wiki.js本地Linux环境部署并配置公网地址远程访问

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

010集——按值传递、按引用传递等方法——C#学习笔记

按值传递参数 这是参数传递的默认方式。在这种方式下&#xff0c;当调用一个方法时&#xff0c;会为每个值参数创建一个新的存储位置。 实际参数的值会复制给形参&#xff0c;实参和形参使用的是两个不同内存中的值。所以&#xff0c;当形参的值发生改变时&#xff0c;不会影…...

Linux系统调优技巧

Linux系统调优技巧 Linux 性能调优技巧的深度分析及场景案例目录 1. Linux 性能调优的基础概念1.1 性能调优的目标1.2 常见的性能瓶颈 2. 系统监控与性能分析工具2.1 常用工具介绍2.2 实战案例&#xff1a;如何通过工具定位性能问题 3. CPU 性能调优3.1 CPU 负载分析3.2 CPU 调…...

计算机学习

不要只盯着计算机语言学习&#xff0c;你现在已经学习了C语言和Java&#xff0c;暑假又规划学习Python&#xff0c;最后你掌握的就是计算机语言包而已。 2. 建议你找一门想要深挖的语言&#xff0c;沿着这个方向继续往后学习知识就行。计算机语言是学不完的&#xff0c;而未来就…...

数字医学影像系统PACS源码,三甲以下医院都能满足,C#语言开发,C/S架构系统成熟稳定,支持二次开发项目使用。

数字医学影像系统&#xff08;RIS/PACS&#xff09;源码&#xff0c;三甲以下的医院都能满足。开发技术&#xff1a;C/S架构&#xff0c;C#开发语言&#xff0c;数据库服务器采用Oracle数据库。 PACS系统模块组成 &#xff1a; 工作站&#xff1a; 分诊工作站、超声工作站、放…...

C++语言基础|循环结构

C语言基础|循环结构 循环1. for语句2. while循环3. do…while语句 循环 在程序中&#xff0c;常常需要重复地执行某些操作。C提供了3种循环语句&#xff1a;for语句、while语句和do-while语句。在循环语句中&#xff0c;重复执行的操作叫做循环体。循环体可以是单条语句、块语…...

省市区县四级联动数据获取指南:基于高德API的geoJSON数据自动更新方案

省市区县四级联动数据获取指南&#xff1a;基于高德API的geoJSON数据自动更新方案 行政区划数据是地理信息系统和数据分析领域的基础要素之一。无论是制作可视化地图、进行区域统计分析&#xff0c;还是开发基于位置的服务应用&#xff0c;准确、实时的行政区划数据都至关重要。…...

WebLaTeX:重构LaTeX创作流程的颠覆式解决方案

WebLaTeX&#xff1a;重构LaTeX创作流程的颠覆式解决方案 【免费下载链接】WebLaTex A complete alternative for Overleaf with VSCode Web Git Integration Copilot Grammar & Spell Checker Live Collaboration Support. Based on GitHub Codespace and Dev contai…...

避坑指南:UR5e机器人SpeedL模式下的笛卡尔空间控制,如何避免奇异点和超限?

UR5e机器人SpeedL模式避坑实战&#xff1a;笛卡尔空间控制的三大安全策略 实验室里&#xff0c;机械臂突然发出刺耳的警报声——这可能是每个UR5e初学者都经历过的噩梦。当你在笛卡尔空间用SpeedL指令控制机器人画复杂轨迹时&#xff0c;关节超限、奇异点问题和自碰撞就像三个隐…...

用FastMCP中间件给你的AI应用加把锁:手把手实现MySQL数据库鉴权(附完整代码)

用FastMCP中间件构建企业级AI服务安全网关 当团队内部的AI工具从原型走向生产环境时&#xff0c;安全往往成为最容易被忽视的环节。上周我接手了一个金融数据分析平台的审计工作&#xff0c;发现开发团队竟然直接将未加密的股票查询接口暴露在公网&#xff0c;仅通过IP白名单控…...

Visual Studio 2019安装Python组件失败?教你手动定位installer目录完成安装

Visual Studio 2019安装Python组件失败的终极解决方案 当你在Visual Studio 2019中尝试安装Python组件时&#xff0c;突然遇到"安装程序不完整"的错误提示&#xff0c;这确实令人沮丧。作为一名长期使用VS进行Python开发的工程师&#xff0c;我完全理解这种中断对工作…...

YOLOv11目标检测与伏羲气象模型的融合应用:灾害天气图像识别预警

YOLOv11目标检测与伏羲气象模型的融合应用&#xff1a;灾害天气图像识别预警 最近几年&#xff0c;极端天气好像越来越频繁了。有时候&#xff0c;一场突如其来的暴雨或浓雾&#xff0c;就能让整个城市的交通陷入瘫痪&#xff0c;甚至带来不小的经济损失。传统的天气预报&…...

2026年03月26日全球AI前沿动态

一句话总结全球AI领域密集发布技术、产品、企业动态&#xff0c;覆盖通用/垂直大模型、专项技术、智能体、机器人、硬件基建等全赛道&#xff0c;中国AI在视频、音乐、办公智能体领域领跑&#xff0c;OpenAI关停Sora战略转型&#xff0c;Arm、苹果、腾讯等大厂新品落地&#xf…...

LazyLLM架构设计揭秘:低代码如何支撑复杂多Agent系统

LazyLLM架构设计揭秘&#xff1a;低代码如何支撑复杂多Agent系统 【免费下载链接】LazyLLM 项目地址: https://gitcode.com/gh_mirrors/la/LazyLLM 在当今AI应用开发领域&#xff0c;构建复杂的多Agent系统往往需要大量的工程投入和专业知识。然而&#xff0c;LazyLLM框…...

SDMatte Web端体验优化:首屏加载速度与模型预热机制说明

SDMatte Web端体验优化&#xff1a;首屏加载速度与模型预热机制说明 1. 引言 在电商、设计、内容创作等领域&#xff0c;高质量的图像抠图已经成为刚需。SDMatte作为一款专注于复杂边缘和透明物体处理的AI抠图工具&#xff0c;其Web端体验直接影响用户的使用感受。本文将详细…...

SEER‘S EYE模型辅助计算机组成原理教学:概念可视化与问答

SEERS EYE模型辅助计算机组成原理教学&#xff1a;概念可视化与问答 计算机组成原理这门课&#xff0c;对很多学生来说&#xff0c;就像在学一门“外星语”。CPU、寄存器、流水线、缓存……这些词听起来就够抽象的&#xff0c;更别说理解它们是怎么协同工作的了。传统的教学方…...