%% 标准地铁实时数据分析
clear;
close all;
%system('taskkill -f -im EXCEL.EXE');
% a = (22312.5 - 16665) / (7.8 - 55.3);
% b = 22312.5 - 7.8 * a;
titleStr = '太原地铁2号线2021年运行数据与2023年运行数据对比分析报告';
folderPath = '.\实时数据\20230426\';
xlsFiles = ls([folderPath,'*.csv']);%列出该地址下的所有文件%站名:西桥站 化章西街站 通达街站 康宁街站 电子西街站 嘉节站 龙城公园站 龙兴街站 晋阳街站 南中环站 学府街站 长风街站 王村南街站 南内环站 体育馆站 大南门站 开化寺街站 府西街站 缉虎营站 大北门站 胜利街站 涧河站 尖草坪站
% Station=[{'西桥站'}; {'通达街站'}; {'康宁街站'}; {'电子西街站'}; {'嘉节站'}; {'龙城公园站'}; {'龙兴街站'}; {'晋阳街站'}; {'南中环站'}; {'学府街站'};
% {'长风街站'}; {'王村南街站'}; {'南内环站'}; {'体育馆站'}; {'大南门站'}; {'开化寺街站'}; {'府西街站'}; {'缉虎营站'}; {'大北门站'}; {'胜利街站'}; {'涧河站'}; {'尖草坪站'};];
Station=[{'西桥站'}; {'通达街站'}; {'康宁街站'}; {'电子西街站'}; {'嘉节站'}; {'龙城公园站'}; {'龙兴街站'}; {'晋阳街站'}; {'南中环站'}; {'学府街站'};
{'长风街站'}; {'王村南街站'}; {'南内环站'}; {'体育馆站'}; {'大南门站'}; {'开化寺街站'}; {'府西街站'}; {'缉虎营站'}; {'大北门站'}; {'胜利街站'}; {'涧河站'};
{'尖草坪站'};{'涧河站'};{'胜利街站'};{'大北门站'}; {'缉虎营站'}; {'府西街站'}; {'开化寺街站'};{'大南门站'}; {'体育馆站'}; {'南内环站'};{'王村南街站'};
{'长风街站'}; {'学府街站'};{'南中环站'}; {'晋阳街站'}; {'龙兴街站'};{'龙城公园站'}; {'嘉节站'};{'电子西街站'}; {'康宁街站'}; {'通达街站'};{'西桥站'}; ];
%% 数据
dataLine_26 = 0;
dataTitle_26 = 0;
dataLine_29 = 0;
dataTitle_29 = 0;
%% 读取文件及数据拼接
leng = length(xlsFiles(:,1));%文件个数-13,与pn对应
for n = 1:leng
file = [folderPath xlsFiles(n,:)];
fid = fopen(file,'rt');
[num,txt] = xlsread(file,1);
fclose(fid);
if n == 1
dataLine_26 = num;
dataTitle_26 = txt(1,2:end)';
timeInfo_26 = txt(2:end,1);
else
dataLine_29 = num;
dataTitle_29 = txt(1,2:end)';
timeInfo_29 = txt(3:end,1);
end
end
tilletmp = txt(1,2:end)';
ES_26 =dataLine_26(:,1 );
ECF_26 =dataLine_26(:,2 );
CTSN_26 =dataLine_26(:,3 );
PER_26 =dataLine_26(:,4 );
VEL_26 =dataLine_26(:,5 );
BCHRATE_26 =dataLine_26(:,6 );
UDCACRMS_26 =dataLine_26(:,7 );
VL_26 =dataLine_26(:,8 );
P_26 =dataLine_26(:,9 );
B_26 =dataLine_26(:,10);
GST_26 =dataLine_26(:,11);
GST_D_26 =dataLine_26(:,12);
%%
ES_29 =dataLine_29(:,1 );
ECF_29 =dataLine_29(:,2 );
CTSN_29 =dataLine_29(:,3 );
PER_29 =dataLine_29(:,4 );
VEL_29 =dataLine_29(:,5 );
BCHRATE_29 =dataLine_29(:,6 );
UDCACRMS_29 =dataLine_29(:,7 );
VL_29 =dataLine_29(:,8 );
P_29 =dataLine_29(:,9 );
B_29 =dataLine_29(:,10);
GST_29 =dataLine_29(:,11);
GST_D_29 =dataLine_29(:,12);
StatonStartIndex_26=zeros(1,1);
StatonStopIndex_26=zeros(1,1);
Station2StationJuli_26 = 0;
StatonStartIndex_29=zeros(1,1);
StatonStopIndex_29=zeros(1,1);
Station2StationJuli_29 = 0;
%% 站台分隔
%% 数据分块
% 依据速度信息将每次跑的数据进行分块
StationIndex = 1;
StationStart = 0;
StationCnt = 1;
StationStopCnt = 0;
StationStartCnt = 0;
for k =1:length(VEL_26)
%判断启动
if (P_26(k)==1)&&(StationStart==0)&&(VEL_26(k)>0.2)
StationStartCnt = StationStartCnt + 1;
if StationStartCnt > 2
StationStart = 1;
StationStartCnt = 0;
if k > 3
StatonStartIndex_26(StationCnt)=k-2;
else
StatonStartIndex_26(StationCnt)=k;
end
end
end
%判断停止
if ((VEL_26(k)<0.3)&&(StationStart==1))
StationStopCnt = StationStopCnt + 1;
if StationStopCnt > 6
StationStart = 0;
StationStopCnt=0;
StatonStopIndex_26(StationCnt)=k-4;
StationCnt = StationCnt + 1;
StationIndex = StationIndex +1;
end
end
if StationStart == 1
if k > 1
Station2StationJuli_26(k) = Station2StationJuli_26(k-1) + VEL_26(k)/3.6*0.2;
end
else
Station2StationJuli_26(k) = 0;
end
end
if length(StatonStartIndex_26)-length(StatonStopIndex_26)>0
StatonStopIndex_26(StationCnt) = length(VEL_26);
end
% 依据速度信息将每次跑的数据进行分块StationIndex = 1;
StationStart = 0;
StationCnt = 1;
StationStopCnt = 0;
StationStartCnt = 0;
for k =1:length(VEL_29)
%判断启动
if (P_29(k)==1)&&(StationStart==0)&&(VEL_29(k)>0.2)
StationStartCnt = StationStartCnt + 1;
if StationStartCnt > 2
StationStart = 1;
StationStartCnt = 0;
if k > 3
StatonStartIndex_29(StationCnt)=k-2;
else
StatonStartIndex_29(StationCnt)=k;
end
end
end
%判断停止
if ((VEL_29(k)<0.3)&&(StationStart==1))
StationStopCnt = StationStopCnt + 1;
if StationStopCnt > 6
StationStart = 0;
StationStopCnt=0;
StatonStopIndex_29(StationCnt)=k-4;
StationCnt = StationCnt + 1;
StationIndex = StationIndex +1;
end
end
if StationStart == 1
if k > 1
Station2StationJuli_29(k) = Station2StationJuli_29(k-1) + VEL_29(k)/3.6*0.2;
end
else
Station2StationJuli_29(k) = 0;
end
end
if length(StatonStartIndex_29)-length(StatonStopIndex_29)>0
StatonStopIndex_29(StationCnt) = length(VEL_29);
end
%% 计算站间牵引能耗
% 按照CTSN的正负值判定能耗方向,统计牵引和电制的能耗,综合能耗为牵引能耗减去电制能耗
% 有两个时间段的数据,因此需要分两个部分进行计算
P_e_26 = zeros(1,length(StatonStartIndex_26(:)));
B_e_26 = zeros(1,length(StatonStartIndex_26(:)));
Pe_e_26 = zeros(1,length(StatonStartIndex_26(:)));
for k = 1:length(StatonStartIndex_26(:))
for m = StatonStartIndex_26(k):1:StatonStopIndex_26(k)
if CTSN_26(m) > 0
P_e_26(k) = P_e_26(k) + CTSN_26(m)*ECF_26(m)*0.2*0.001/3600;
else
B_e_26(k) = B_e_26(k) + CTSN_26(m)*ECF_26(m)*0.2*0.001/3600;
end
end
end
Pe_e_26 = P_e_26 + B_e_26;
P_e_29 = zeros(1,length(StatonStartIndex_29(:)));
B_e_29 = zeros(1,length(StatonStartIndex_29(:)));
Pe_e_29 = zeros(1,length(StatonStartIndex_29(:)));
for k = 1:length(StatonStartIndex_29(:))
for m = StatonStartIndex_29(k):1:StatonStopIndex_29(k)
if CTSN_29(m) > 0
P_e_29(k) = P_e_29(k) + CTSN_29(m)*ECF_29(m)*0.2*0.001/3600;
else
B_e_29(k) = B_e_29(k) + CTSN_29(m)*ECF_29(m)*0.2*0.001/3600;
end
end
end
Pe_e_29 = P_e_29 + B_e_29;
%% 指标计算
close all;
for k = 1:length(StatonStartIndex_29)
fig_cts(k) = figure('Position',[100 100 850 850]);
subplot(4,1,1);
plot(Station2StationJuli_29(StatonStartIndex_29(k):StatonStopIndex_29(k)),VEL_29(StatonStartIndex_29(k):StatonStopIndex_29(k)),'.-');
hold on;
plot(Station2StationJuli_26(StatonStartIndex_26(k):StatonStopIndex_26(k)),VEL_26(StatonStartIndex_26(k):StatonStopIndex_26(k)),'.-');
ylabel('速度(km/h)');
title([Station{k} '至' Station{k+1}]);
legend('2023年','2021年');
subplot(4,1,2);
plot(Station2StationJuli_29(StatonStartIndex_29(k):StatonStopIndex_29(k)),PER_29(StatonStartIndex_29(k):StatonStopIndex_29(k)),'.-');
hold on;
plot(Station2StationJuli_26(StatonStartIndex_26(k):StatonStopIndex_26(k)),PER_26(StatonStartIndex_26(k):StatonStopIndex_26(k)),'.-');
ylabel('牵引级位(%)');
legend('2023年','2021年');
%xlabel('距离(m)');
subplot(4,1,3);
plot(Station2StationJuli_29(StatonStartIndex_29(k):StatonStopIndex_29(k)),CTSN_29(StatonStartIndex_29(k):StatonStopIndex_29(k)),'.-');
hold on;
plot(Station2StationJuli_26(StatonStart