如何利用Matlab对Comtrade99格式的故障录波文件进行数据读取

article/2025/10/22 5:33:41

如何利用Matlab对Comtrade99格式的故障录波文件进行数据读取

近来看了几个采用Matlab对标准故障录波数据进行读取的例子,自己参照着动手实践了下,发现有些问题,现在记录下来以备大家参考。
图形用户界面(Graphical User Interface,GUI)又称图形用户接口,是指采用图形方式显示的计算机操作用户界面。创建Matlab GUI界面通常有两种方式:一种是使用.m文件直接动态添加控件;另一种是使用GUIDE快速的可视化生成GUI界面。
电力系统瞬态数据交换通用格式(Common format for transient data exchange,COMTRADE)是IEEE为了解决数字故障录波装置、数字保护、微机测试装置之间的数据交换问题,于1991年提出、1999年修订和完善的一种公用的数据传输格式标准。该标准提供一种易于说明的数据交换通用格式,为不同厂家生产的设备所遵循。本文采用GUIDE方法创建Matlab GUI实现Comtrade格式录波数据显示。

1.准备资料:
matlab 就不用我说了,另外一个就是要下载 COMTRADE reader.m
或者 阅读 基于Matlab GUI的Comtrade格式录波数据显示
具体实现方法也是《基于Matlab GUI的Comtrade格式录波数据显示》来操作的,但是将其细化了。现在展示给大家供大家参考和借鉴。具体代码和文件我都有链接,文章末尾将上传,因第一次上传文章,所以要积分的哈。
2.具体实现步骤:
首先,启动matlab,在命令窗口输入guide。
输入guide

在弹出的窗口选择 Blank GUI。
新建GUI工程
这里要勾选 Save new figure as,并将其命名为guitest.fig文件。后面将会调用该文件。

随后弹出的窗口中,左侧是工具栏,可以拖拽;右侧是展示界面。
添加静态文本、坐标和按钮

左侧工具栏控件按图中顺序依次为:

按钮 Push Button 滚动条 Slider
单选按钮 Radio Button 检查框 Checkbox
可编辑文本 Edit Text 静态文本 Static Text
弹出式菜单 Popup Menu 列表框 Listbox
切换按钮 Toggle Button 表格 Table
坐标 Axes 面板 Panel
按钮组 Button Group ActiveX控件
双击控件,可以检查器中显示各控件的属性和修改
在展示界面添加静态文本、坐标和按钮,并编辑静态文本为“Comtrade格式录波数据显示”;编辑坐标为“fig”;编辑按钮为“选择文件”。显示结果如上图所示。

双击“选择文件”按钮,进一步编辑按钮的事件响应Callback,单击图中红框内的按钮:
在这里插入图片描述
跳转到脚本guitest.m:
在这里插入图片描述
在跳转到的77行 修改代码如上图所示。
增加的代码为:
[t,data]= ComtradeRead(); %% 显示
axes(handles.fig); %打开fig的句柄
subplot(3,1,1)
plot(t,data(:,1),‘r’,t,data(:,2),‘g’,t,data(:,3),‘b’)
subplot(3,1,2)
plot(t,data(:,4),‘k’)
subplot(3,1,3)
plot(t,data(:,5),‘r’,t,data(:,6),‘g’,t,data(:,7),‘b’)

% read_comtrade();%读取dat文件是ACII码时用到

这里需要特别说明的是:
ComtradeRead()函数是从《基于Matlab GUI的Comtrade格式录波数据显示》中给出的源代码,需要拷贝下面的代码并保存为ComtradeRead.m文件。[t,data]=ComtradeRead()源程序如下,相关代码已作注释:

function [t,data] = ComtradeRead()
%% 导入数据
[CFGFileName,PathName] = uigetfile(’*.cfg’,‘选择.CFG文件’); %打开.CFG文件
CFGPathFile = [PathName CFGFileName]; %读取.CFG文件路径和名称
DatFileName = [CFGFileName(:,1:length(CFGFileName)-4) ‘.dat’]; %获得.DAT文件名称
DATPathFile = [PathName DatFileName]; %获得.DAT文件路径
%% 读取配置文件
CFGid = fopen(CFGPathFile);
CFG = textscan(CFGid,’%s’,‘delimiter’,’\n’);
fclose(CFGid);
CFG_len = length(CFG{1,1});
CFG_str = cell(size(CFG{1,1}));
for i = 1:CFG_len
temp_str = char(CFG{1,1}{i});
CFG_str{i}=textscan(temp_str,’%s’,‘delimiter’,’,’);
end
% 通道数目
No_Ch = str2double(cell2mat(CFG_str{2,1}{1,1}(1)));
Ana_Ch = CFG_str{2,1}{1,1}{2,1};
Ana_Ch(length(Ana_Ch)) = [];
Ana_Ch = str2double(Ana_Ch);
Dig_Ch = CFG_str{2,1}{1,1}{3,1};
Dig_Ch(length(Dig_Ch)) = [];
Dig_Ch = str2double(Dig_Ch);
% 采样频率
samp_rate = textscan(cell2mat(CFG_str{5+No_Ch,1}{1,1}(1)),’%f’);
samp_rate = samp_rate{1,1};
% 数据长度
dat_len = textscan(cell2mat(CFG_str{5+No_Ch,1}{1,1}(2)),’%f’);
dat_len = dat_len{1,1};
% 存储格式
format=char(CFG_str{8+No_Ch,1}{1,1}(1));
%% 读取数据文件
DAT_id = fopen(DATPathFile);
algdat = zeros(dat_len,Ana_Ch+2);
num = zeros(dat_len,1);
time = zeros(dat_len,1);
if strcmpi(format, ‘BINARY’)
for i = 1:dat_len
num(i) = fread(DAT_id,1,‘int32’);
time(i) = fread(DAT_id,1,‘int32’);
row_array = fread(DAT_id,Ana_Ch+ceil(Dig_Ch/16),‘int16’);
for j=3:Ana_Ch+2
algdat(i,j) = row_array(j-2);
end
end
algdat(:,1) = num;
algdat(:,2) = time;
else
DAT = textscan(DAT_id, ‘%s’, ‘delimiter’, ‘\n’);
for i = 1:dat_len
DAT_str = textscan(char(DAT{1,:}(i)), ‘%n’, ‘delimiter’, ‘,’);
for j=1:Ana_Ch+2
algdat(i,j) = dat_string(j);
end
end
end
fclose(DAT_id);
t = algdat(:,2)./1000;
%% 获得最终数据
data = zeros(dat_len, Ana_Ch);
for i = 1:Ana_Ch
j = i+2;
var_string = strcat(‘Ch’,char((CFG_str{j,1}{1,1}{1,1})));
multiplier = str2double(CFG_str{j,1}{1,1}{6,1});
offset = str2double(CFG_str{j,1}{1,1}{7,1});
data(:,i) = algdat(:,i+2)*multiplier+offset;
end
end

保存上述的修改,然后在Matlab同一文件目录下 确保有guitest.fig 、guitest.m、ComtradeRead.m文件。回到guitest.fig界面,点击绿色的三角形 开始按钮,运行GUI。
运行GUI
单击“选择文件” 按钮,选择路径,导入 *.cfg 和 *.dat 所在的目录,选择cfg文件打开。
打开Comtrade99格式文件
以上就是完成了Comtrade 文件在matlab中的显示和读取。 各相通道数据保存在data 中。
值得注意的是,上述文件只能打开 dat文件以binary 二进制数保存的文件。如果要打开dat文件是以ASCII 保存的文件,则需要进行修改。
1.ComtradeRead.m 文件中缺少dat_string()函数。具体怎么实现,后续文章再跟进。

2.利用read_comtrade()函数实现。
修改脚本guitest.m 中第77行 function pushbutton1_Callback(hObject, eventdata, handles) 的定义
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% [t,data]= ComtradeRead(); %% 显示
% axes(handles.fig); %打开fig的句柄
% subplot(3,1,1)
% plot(t,data(:,1),‘r’,t,data(:,2),‘g’,t,data(:,3),‘b’)
% subplot(3,1,2)
% plot(t,data(:,4),‘k’)
% subplot(3,1,3)
% plot(t,data(:,5),‘r’,t,data(:,6),‘g’,t,data(:,7),‘b’)

read_comtrade();%读取dat文件是ACII码时用到
保存后,拷贝read_comtrade.m 到guitest.m 文件所在目录。 点击 运行 按键,打开 *.cfg 和 *.dat 所在的目录和文件
,会弹出一个选择界面
选择 ALL Channels
运行结果如下:
运行结果

以上就是整个的运行结果,后续将奉上对其数据进行数据处理的详细过程和代码。
为了方便大家,我将所有源码进行了打包,方便大家对其结果进行验证测试。不过需要收取一定积分,尽请谅解。
附件: 本文源代码 Matlab读取Comtrade数据并显示


http://chatgpt.dhexx.cn/article/XFJs2MNC.shtml

相关文章

一带一路专题:农业、经济、地理距离、友好城市等七大维度面板数据

一、中国对一带一路沿线国家农产品进出口额 1、数据来源:UN comtrade数据库 2、时间跨度:2008-2020 3、区域范围:世界 4、指标说明: 数据中包含原始处理数据 部分数据如下: 二、一带一路人均GDP数据和经济自由度…

中国纺织业对“一带一路”沿线国家出口数据(含64个国家经纬度数据)

数据集名称:中国纺织业对“一带一路”沿线国家出口数据(含64个国家经纬度数据) 数据来源:联合国商品贸易统计数据库(https://comtrade.un.org/data) 相关说明:统计单位为亿美元。采用的是HS&a…

Market

Problem B. Market(market.c/cpp/pas) Input file: market.in Output file: market.out Time limit: 1 seconds Memory limit: 128 megabytes 在比特镇一共有n 家商店,编号依次为1 到n。每家商店只会卖一种物品,其中第i 家商店的物品 单价为ci&#xff0…

COMTRADE录波数据导入MATLAB分析的方法

各路大佬发表了很多用Python编程、MATLAB编程实现COMTRADE录波数据提取的方法,对我这种小白来说属实是看不懂(也不想去看),只想怎么快点把数据提取出来做研究。 这里介绍一种极其简单的数据提取方法,简单到完全不需要编…

TraDeS解读

这篇TraDeS是MOT领域的新作,收录于CVPR2021,作者来自纽约州立大学等机构,在多个基准任务上均达到SOTA水平,包括2D跟踪、3D跟踪和分割级跟踪。 简介 大多数现有的online MOT方法的检测部分在整个网络中都是独立进行的,…

swing版电力系统故障录波comtrade文件离线分析软件

电力系统的故障录波comtrade格式的文件的分析软件,swing实现。 功能包括: 1、支持打开标志的电力系统故障录波comtrade格式文件。 2、可对波形进行横向放大缩小、纵向放大缩小和复原的功能; 3、可以向上、向下移动波形,以及叠加多…

python 联合国农产品数据分析

目录: 一、项目描述 二、项目环境 三、项目步骤 四、项目实现 4.1、创建一个需求文档存放需求文件,文件内包含本次项目的所有需求 4.2、新建一个配置文件config.py,用来存放配置条目,如农产品的种类、所查询的年份、进口国、…

[Python] 使用 UN Comtrade API 高效获取数据

本文最初写成于 2021 年 7 月,由于作者的拖延问题以致今天才得以和各位同学(即便大概率是自说自话了)见面,因此文中具体细节可能已经发生变化。 Cover Photo by Maksym Kaharlytskyi on Unsplash 使用 UN Comtrade API 批量下载数…

Python实现comtrade文件读取

最近在学习python,发现这个语言挺有意思,写起来比较轻松。后面打算用它代替matlab来做数据分析。写了一个comtrade格式录波文件的读取类。目前仅支持读取comtrade的binary格式文件。仅读取模拟量,不解析开关量。上comtrade类代码。 #!/usr/b…

Comtrade格式录波数据显示

本文介绍几种comtrade格式的电力录波查看方法,并给出相关的下载链接 这几个软件的具体使用方法就不一一详述了,最后给出使用MATLAB GUI的录波数据查看步骤 具体还是要自己动手实现 几个软件实现效果图以及相关下载链接 仅供参考 ScopeView Download 效…

COMTRADE格式录波数据分析以及函数实现(一)

一、首先,看一下COMTARDE是什么 COMTRADE是IEEE标准电力系统暂态数据交换通用格式。标准为电力系统或电力系统模型采集到的暂态波形和事故数据的文件定义了一种格式。该格式意欲提供一种易于说明的数据交换通用格式。IEEE于1991年提出,并于1999进行了修…

如何申请免费SSL证书?宝塔面板SSL证书安装部署完整教程

如何申请免费SSL证书?宝塔面板SSL证书安装部署完整教程 现在很多网站都由原来的http://www.xxx.com转换为https://www.xxx.com,这就是说从http协议转到了https协议。如果说网站不是https协议,Chrome浏览器会提示不安全。https比http协议安全性…

HTTPS证书及其安装

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 HTTPS证书及其安装 HTTPS证书一、 试查http协议1启动jmeter,添加测试元件1)添加缓存管理器2)添加cookie管理器3)添加http请求默…

【Linux】宝塔面板 SSL 证书安装部署

宝塔面板 SSL 证书安装部署 前言证书下载宝塔配置SSL注意事项 前言 前期有讲过Tomcat和Nginx分别部署SSL证书,但也有好多小伙伴们私信我说,帮忙出一期宝塔面板部署SSL证书的教程,毕竟宝塔的用户体量也是蛮大的,于是宠粉的博主&am…

宝塔面板 SSL 证书安装部署

注册与购买域名-Tencent Cloud 腾讯云、华为云、阿里云等都可以购买域名并备案做dns解析。需要主要:域名的购买可以任意选云服务厂商,但是dns解析时只能指向dns服务商的主机。简单的说:腾讯云的dns服务器可以解析腾讯云的云服务器(ECS),不能…

javaScript中的鼠标事件

鼠标点击事件 onclick单击事件 鼠标单击时事件处理函数 <input type"button" id"bt" value"点击"> <script> //找到按钮并设置点击事件document.getElementById("bt").onclick function (){//被点击后弹出弹出框alert…

JavaScript鼠标事件与函数

通过鼠标触发事件&#xff0c;类似用户的行为&#xff1a; 鼠标事件列表&#xff0c;要在(body)里设一个div,id名要为box&#xff0c;style里设置它的的宽、高&#xff0c;然后再script里设置脚本语言&#xff0c;使他在里面能够运行。下面script都例了鼠标每一样事件&#xff…

java鼠标js触发事件吗,JavaScript鼠标事件是什么?JavaScript鼠标事件详解

js中是比较简单的语言&#xff0c;然而js的精髓就是js事件&#xff0c;这也是js当中最重要的部分&#xff0c;很多人对JavaScript鼠标事件是什么还不是很了解&#xff0c;下面我们对JavaScript鼠标事件进行详解。 一&#xff1a;在js中&#xff0c;鼠标事件有很多&#xff0c;其…

Js鼠标事件与函数

鼠标事件&#xff08;Mouse Events&#xff09; 通过鼠标触发事件, 类似用户的行为: 鼠标事件列表&#xff0c;要在body里设一个div&#xff0c;id名要为box&#xff0c;style里设置它的宽、高&#xff0c;然后再script里设置脚本语言&#xff0c;使它在里面能够运行。下面scr…

JS鼠标事件(非常详细)

这里写目录标题 一、 常用到的鼠标事件鼠标点击鼠标移动鼠标经过鼠标来源鼠标定位鼠标按键 一、 常用到的鼠标事件 在 JavaScript 中&#xff0c;鼠标事件是 Web 开发中最常用的事件类型&#xff0c;鼠标事件类型详细说明如下表所示&#xff1a; 鼠标事件类型 项目Valueclick…