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

如何利用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数据并显示

  • 6
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
录波原始数据转换为COMTRADE格式的代码可以使用各种编程语言实现,下面以Python代码为例进行说明。 要将录波原始数据转换为COMTRADE格式,需要先理解COMTRADE文件的结构。COMTRADE文件由配置文件数据文件组成,其中配置文件包含了录波仪的设置信息,而数据文件包含了录波原始数据。 首先,需要生成COMTRADE配置文件。配置文件是一个文本文件,按照COMTRADE标准格式进行编写。可以使用Python的文件操作方法来创建和写入配置文件。 接下来,需要将原始录波数据导入到代码中。根据录波数据格式,可以使用Python内置的文件读取方法或者第三方库来读取数据。 在读取数据后,还需要根据COMTRADE配置文件的要求,对录波数据进行处理和格式转换。例如,可能需要对时间戳进行调整、将采样数据转换为字符串格式等。 最后,根据COMTRADE文件格式,将处理后的数据写入到数据文件中。 总结起来,将录波原始数据转换为COMTRADE格式的代码,主要包括以下几个步骤: 1. 创建COMTRADE配置文件并写入相关信息。 2. 读取原始录波数据。 3. 对录波数据进行预处理和格式转换。 4. 将处理后的数据写入COMTRADE数据文件。 需要根据具体的录波数据格式COMTRADE文件要求进行适当的修改和调整。代码编写的具体细节会根据不同的编程语言和库有所差异,可以参考相关的编程文档进行实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值