Skip to content

EntitiesBlocks Simulátory zařízení

fyziktom edited this page Feb 25, 2023 · 1 revision

Knihovna EntitiesBlocks umožňuje přidat do jakékoliv Entity simulátory. Jedním z důležitých typů je DeviceSimulator. V rámci jeho vytvoření je definován hodinový profil spotřeby pro jeden den spolu s píkovou spotřebou zařízení. Tím lze nadefinovat jak se zařízení chová v průběhu dne. V případě poptání spotřeby entity se použije tento simulátor pro výpočet bloků.

Definování simulátoru probíhá následovně:

Prvně se nadefinuje profil spotřeby:

        double[] acRun = new double[24]
        {
		0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.5, 0.5, 0.5, 0.5
	 //  00,  01,  02,  03,  04,  05, 06,  07,  08,  09,  10,  11,  12,  13,  14,  15,  16,  17,  18,  19,  20,  21,  22,  23 
	};

Poté se vytvoří objekt simulátoru zařízení ve kterém se přiřadí profil a píková spotřeba. Následně se přiřadí do entity:

var deviceSim = new DeviceSimulator(acRun, 2);

var entity = new BaseEntity();
var addsimres = entity.AddSimulator(deviceSim);

Jakmile je simulátor v entitě, je možné poptat spotřebu:

if (addsimres.Item1)
{
	var consumption = entity.GetSummedValues(BlockTimeframe.Hour, start, end, true, null, null, true);
	Assert.Equal(24 * days, consumption.Count);

	var total = 0.0;
	foreach (var cons in consumption)
		total += cons.Amount;

	Assert.Equal(-consumptionPerHour * 36 * days, total);
}

Celý test je možné si projít zde.

Při vytváření simulátoru je možné zadat i dny v týdnu, ve kterém zařízení bude aktivní. To se provede v konstruktoru. Mezi jednotlivými enumy je možné dělat logické součiny pro výběr více dnů, tak jak je vidět na následujícím příkladu:

var deviceSim = new DeviceSimulator(acRun, 2, Week.Monday | Week.Tuesday | Week.Weekedn);

Snad jsem vypsal hlavní kombinace pro konverzi enumů správně. Pokud by test vracel při nějaké kombinaci dnů nulové bloky, tak je potřeba zkontrolovat, jestli náhodou nechybí varianta převod enumu zde.

Test který ověřuje funkci výběru dnů pro běh simulátoru je zde.

Podle příkladu třídy DeviceSimulator je možné si vytvořit i vlastní simulátor. Je potřeba jen dodržet interface simulátorů jehož základ abstraktně implementuje CommonSimulator. Klíčová je implementovat funkci GetBlocks. Tato funkce se volá v rámci výpočtu v Entitě zde, která je volána z funkce GetResultBlocks. Ta musí obdržet jako parametr addSimulators = true, aby zahrnula bloky ze simulátorů. Pro simulátory je i předpřipravena varianta jak do nich nahrát specifické parametry. Nicméně není to zatím doimplementováno.

Clone this wiki locally