如何利用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。

在弹出的窗口选择 Blank 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。

单击“选择文件” 按钮,选择路径,导入 *.cfg 和 *.dat 所在的目录,选择cfg文件打开。

以上就是完成了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 所在的目录和文件
,会弹出一个选择界面

运行结果如下:

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

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

  1. 手把手教使用matlab完成Comtrade99格式的故障滤波文件进行数据读取并完成低通滤波器滤波

    Comtrade99格式文件(.cfg),例如:配电网络发生故障时生成的信号波形. 直接进入正题:作者使用的是matlab R2016a版本. 一.实现步骤 打开matlab R2016a,在命令窗口 ...

  2. matlab segy文件,利用matlab实现segy格式数据的读写研究和分析.ppt

    利用matlab实现segy格式数据的读写研究和分析 2.SEGY数据格式 地震数据一般以地震道为单位进行组织,采用SEG-Y文件格式存储.SEG-Y格式是由SEG (Society of Explo ...

  3. 利用matlab将.mat格式文件转换成wav文件

    利用matlab将.mat格式文件转换成wav文件 clc; clear all; clear all;filenames = dir('f16.mat') n = numel(filenames)f ...

  4. matlab读取其他位置,将文件的数据读取到matlab中,进行编辑,然后将其保存到其他位置...

    将文件的数据读取到matlab中,进行编辑,然后将其保存到其他位置 我有一个名为EXP1_SQ1_Template.txt的文件.这是一个简单的文本文件,包含以下8行: LOAD BOX 1 SUBJ ...

  5. 利用matlab处理tiff格式的遥感图像

    需求:需要对tiff格式的sar遥感图像进行检测,因此通过matlab进行预处理,将tiff格式转化为jpg格式,并且提取其中的经纬度信息到txt中.最后将检测完毕的图像写回遥感图像. 实现:利用ma ...

  6. 利用Python将WEBVTT格式的视频字幕文件转为SRT格式

    1 WebVTT & SRT 格式 WebVTT字幕格式与SRT字幕格式主要区别在于时间格式的区分. 下面是一个WebVTT格式的字幕文件 WEBVTT1 00:00:20.000 --> ...

  7. java校验文件格式_Java 判断文件是否为文本格式,并获取文件编码格式,读取内容!...

    我们经常会遇到读取文件内容的情况,就需要判断文件是否为文本文件,及文件编码格式,防止无法读取内容或乱码出现情况. 根据文件扩展名判定不太准确,可能会遇到未知扩展名或被修改了扩展名,下面的测试类使用文件 ...

  8. java下载文件excel格式错乱,excel获取文件表格数据格式化-excel表格里的文件突然格式全部乱了,怎么恢复?...

    JAVA实现EXCEL表格文件(.xls格式)的读取.修改.... 在excel中,找打开按钮,选择文件格式为 .csv的,然后选择你要导入的CSV文件,会自动弹出文本导入向导,选择数据的分隔符,可以 ...

  9. 利用Matlab将任意曲线旋转任意角度

    利用Matlab将任意曲线旋转任意角度 公式计算 数据 matlab代码 结果 公式计算 对于如上图所示的任意曲线,需要绕固定点O旋转某一角度,取曲线上任意一点A计算旋转后的坐标值. 设OA的长度为L ...

最新文章

  1. c语言顺序结构程序设计第4章答案,第4章顺序结构程序设计习题及答案.doc
  2. 2016-05-09的POC Yaas Open Event的代码审查
  3. Excel和Word 简易工具类,JEasyPoi 2.1.7 版本发布
  4. 使用ffmpeg来探测GB28181的ps流
  5. ESP32 ESP-IDF开发环境搭建,Windows下基于ESP-IDF | Cmake | VScode插件的 ESP32 开发环境搭建
  6. 由浅入深,逐步了解 Java 并发编程中的 Synchronized!
  7. 有安全研究者混入了 PHP 8.0 开发组!
  8. 简单PHP留言板之二 —— PHP的数据库连接文件
  9. 大学生集成电路设计大赛资源
  10. ASUS TUF Gaming B460M PLUS+RX570+BCM94360CD黑苹果EFI引导文件
  11. Markdown编辑器 - 字体颜色表(颜色名、十六进制颜色值、颜色)
  12. elasticsearch 在不是 not_analyzed 的前提下如何全匹配的效果
  13. Xperf 使用方法
  14. bootstrap----导航栏 图片布局
  15. python opendr_《网络工程师的Python之路》出书了!
  16. 出现Only the original thread that created a view hierarchy can touch its views.的错误
  17. 未来已来让闲置回归价值
  18. python与人工智能有关系吗_Python与人工智能到底有什么关系呢?Python学习
  19. install vanish3.0.2
  20. Qt: 记事本源代码

热门文章

  1. 计算机二级access公共基础知识,计算机二级ACCESS考试
  2. 音频剪辑文件 audition3.0(英文破解)与audition(中文直接安装板)
  3. 上网助手(集成ipv6)-windows版
  4. Java之父呼吁大家弃用Java 8
  5. 言语理解与表达之片段阅读
  6. SSR、SSE、SST、R^2、调整R^2
  7. iOS 用内置浏览器Safari 打开网页
  8. Cause: java.sql.SQLException: connection closed
  9. Debian9.5 下使用360随身Wifi二代
  10. 数图复习---第二章