Как рассчитать совокупную сумму на основе шаблона в Matlab? - PullRequest
0 голосов
/ 17 июня 2020

Я пытаюсь смоделировать уровень заряда батареи электромобиля c (EV) на основе схем вождения и парковки из таблицы набора данных. По сути, у меня есть продолжительность вождения / парковки (временные интервалы), начальная емкость аккумулятора электромобиля (SoCin), пройденное расстояние с учетом уровня энергопотребления автомобиля во время вождения и скорость зарядки. Вот как выглядят данные:

%% CONSTANTS

energy_con = 6; charge_rate = 4; SoCin = 35; SoCfull = 41;

%% ВРЕМЕННЫЕ ИНТЕРВАЛЫ

start_time ['00: 00 ''06: 30' '07: 00 ''16: 15' '17: 45']

end_time ['06: 30 ''07: 00' '16: 15 ''17: 45' '23: 59 ']

%% VARIABLES

шаблон = [ pdpdp]% парковка / схема движения

продолжительность = [6,5 0,5 9,25 1,5 6,25]

расстояние = [0 15 0 25 0]

По идее, он должен заряжаться, пока парковка, если уровень So C ниже полной емкости (charge_rate, умноженный на время парковки), и разряд во время движения с расчетным расстоянием * energy_con.

Я новичок ie в Matlab, но я пробовал следующее:

timediff = duration*60; % time of end and start time difference in minutes
singularvalue = d./timediff; % value per hour
MinScale = zeros(24*60+1,1);   % from 1 to 1440 scale is created to simulate day      
                                 % in minutes (+1 is for to avoid 0 values in  
                                 % time)
traffic_DCH = zeros(24*60+1,1);  
e_con = zeros(24*60+1,1);
%% INTERVAL SPREAD
for i = 1:length(end_time)
    [~, ~, ~, H, MN, ~] = datevec(start_time(i));
    TrSt = H*60+MN+1;
    [~, ~, ~, H, MN, ~] = datevec(end_time(i));   
    TrEn = H*60+MN+1;
    if isnan(TrEn) || isnan(TrSt)
        continue
    else
        while SoCin < SoCfull 
           if pattern == 'p'
               e_con(TrSt:TrEn,1) = e_con(TrSt:TrEn,1) + cumsum(ch_rate./timediff(i));
           else
               e_con(TrSt:TrEn,1) = e_con(TrSt:TrEn,1) - cumsum(econ_rate*singularvalue(i));% 

           end
        end
    end

конец

%TIME AXIS
close all
TimeM = 1:length(MinScale);
TimeH = TimeM/60;

figure
hold on
plot(TimeH,traffic_DCH)
xlim([1 24])
xlabel("Time (h)")
ylabel("Distance travelled (km)")
grid on

figure
% hold on
plot(TimeH,e_con)
xlim([1 24])
xlabel("Time (h)")
ylabel("SoC (kW)")
grid on

Код может быть очень плохим, я признаю, он показывает только мгновенное уменьшение или увеличение вместо условного поминутного изменения, например, при вождении или зарядке. Может быть, есть другой подход, любая помощь будет очень благодарна.

...