MidaDev проекты Slider

Ремейк Saboteur2 (ZX-Spectrum)
На движке GMS2
Ремейк Chronos (ZX-Spectrum)
На движке GMS2
Particle Designer
Конструктор частиц с экспортом готового кода в GMS2
Элементы GUI
GMS2
Элементы GUI
Ремейк RiverRaid (ZX-Spectrum)
На движке Unity3D
NinjaGaiden (Dendy)
Доработка(переработка) функциональных частей движка ремейка игры NinjaGaiden

Eltek FlatPack2 комплексный экран ver2.2

Разработан комплексный экран состояний работы cистем электропитания постоянным током Flatpack2

Отображаются актуальные данные напряжений по фазам, режим работы выпрямителей, состояние батарей, заряд-разряд, запас автономной работы.

Немного информации по устройству:

Специально разработанная система, для того чтобы соответствовать требованиям высокой плотности мощности и более компактным размерам системных решений.

Flatpack2 2U Integrated это компактная система питания постоянного тока включающая в состав блок контроля и управления (Smartpack), контакторы отключения нагрузки и батарей (LVLD,LVBD). Система может включать до 4 выпрямительных модулей Flatpack2.

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

Система поддерживает широкий диапазон входных напряжений (от 85 до 290VAC) и выдает плавный стартовый синусоидальный ток в момент включения питания.

 

 

 

 

Данные о работе устройства будем брать из xml файла:

По адресу http://IP/data/siteheader.xml мы получаем общий статус и состояние FlatPack2

Следующего содержания:

<SystemConfig>
	<DesiAmpere val="false"/>
	<Temperature_Type val="C"/>
	<NomVoltType val="48"/>			общий номинал сборки батарей, 12,24,48 и т.д.
	<SystemPolarity val="positive"/>	полярность
	<NumberOfBattCells val="24"/>
</SystemConfig>

<Battery>					раздел по батарейкам
	<Status val="Normal"/>			статус по авариям Major Minor Normal
	<Voltage val="54.07"/>			текущее напряжение всей группы батарей
	<Mode val="FLOAT"/>
	<Temperature val="-"/> 			температура батарейного отсека
	<Temp_Comp_Enable val="false"/> 
	<Current val="1"/>			ток +заряда -разряда
	<OnBattery val="false"/>		false - работа от сети, true - работа от батарей
	<Total_Current_Limit val="true"/>
	<String_Current_Limit val="true"/>
	
	<Remaining_Capacity>			расход
		<Minutes val="650"/>		оставшееся время работы от батарей
		<AmpHours val="65"/>		оставшаяся ёмкость батарей
	</Remaining_Capacity>
</Battery>

<Rectifier>					выпрямитель
	<Current val="7"/>			ток потребления
	<Temperature val="26"/>			температура
	<Temperature_Type val="C"/>
	<EffMan_Enable val="0"/>
</Rectifier>

<DC_Bus>					нагрузка
	<Current val="6"/>			ток потребления нагрузкой
</DC_Bus>

<AC_Feed>					состояние по фазам
	<Phase ind="1">
		<Voltage val="217"/>
	</Phase>
	<Phase ind="2">
		<Voltage val="0"/>
	</Phase>
	<Phase ind="3">
		<Voltage val="0"/>
	</Phase>
</AC_Feed>

<Energy_Site>
	<System_Status val="GREEN"/>		общий статус, состояния, green, red, yellow
	<SiteName val="Boktor"/>		посёлок размещения
	<Access_Level val="ADMIN"/>		уровень доступа текущего пользователя
	<UserName val="97"/>
	<UserNumber val="1"/>
	
	<SysTime>
		<Date val="2021-07-08"/>
		<Time val="11:38"/>
	</SysTime>
</Energy_Site>

</root>

 

 По адресу http://IP//data/batt_summary.xml мы получаем всю информацию по батарейкам

<root>
	<Summary>					суммарная инфа
		<Status val="Normal"/>
		<Voltage val="54.07"/>			напряжение на всей группе батарей
		<Current val="1"/>			ток потребления батарейками +зарядка -разрядка в сторону нагрузки
		<Temperature val="-"/>			термодатчик батарейного отсека
		<Temperature_Type val="C"/>
		<Life val="0"/>				всегда равно нулю
		<LVD_Status val="Normal"/>
		<LVD_Name val="LVBD "/>
		<Breaker_Status val="Disabled"/>
		<Mode val="Float"/>
	</Summary>
	
	<Symmetry_Monitor_Status>
		<Mode val="Discharge Mode"/>
		<Status val="Disabled"/>
		<Enable val="Disabled"/>
		<Type val="Center Point Measurement"/>
	</Symmetry_Monitor_Status>

	<Lifetime>					лайфтайм работы батарей
		<Quality val="-"> </Quality>
		<Tot_Capacity>				итогошняя ёмкость батареи
			<AmpHours val="65"/>
		</Tot_Capacity>

		<Remaining_Capacity>			остатки
			<Minutes val="650"/>		остаток времени работы от батарей
			<AmpHours val="65"/>		отстаток общей ёмкости батарей
		</Remaining_Capacity>

		<Discharged_Capacity>
			<AmpHours val="0"/>		ампераж разряда
		</Discharged_Capacity>
	
		<Delta_StringCurrent>
			<Current val="-"/>
		</Delta_StringCurrent>
	</Lifetime>
</root>

 

Метода получения данных проста, раз в минуту отправляем запрос:

 alarm[0]

var map = ds_map_create();
ds_map_add(map, "Host", _ip);
ds_map_add(map, "Connection", "keep-alive");
ds_map_add(map, "Authorization", "Basic " + get_password(_ip) );
ds_map_add(map, "Content-Type", "text/html");
ds_map_add(map, "Accept-Encoding", "gzip,deflate");
ds_map_add(map, "Accept-Language", "en-GB,en-US;q=0.8,en;q=0.6");
var data="";
var htp = "http://" + _ip + "/data/siteheader.xml";
request_siteheader = http_request(htp, "GET", map, data);
trace("послано GET siteheader  \n", htp);
trace_ds_map(map, "map=")
request_counter++;

 

асинхрон HTTP, получаем ответ и обрабатываем данные

		r_str = ds_map_find_value(async_load, "result");
		trace(r_str);		
		
		if string_pos("Your Authentication failed", r_str) then
		{
			trace("треба аутентифихацию");			
			//get_authorize(rtps_ip);
			return;	
		};
		if string_pos("404 Not Found", r_str) then
		{
			trace("404 Not Found");				
			return;	
		};
		
		request_counter=0;
		shema.set_request_counter(request_counter);
		//-----------------------------------------------------------------------
		var _Sysconf	= string_get_tag_block(r_str, "SystemConfig");
		var _Battery	= string_get_tag_block(r_str, "Battery");
		var _Rectifier	= string_get_tag_block(r_str, "Rectifier");
		var _DC_Bus		= string_get_tag_block(r_str, "DC_Bus");
		var _AC_Feed	= string_get_tag_block(r_str, "AC_Feed");
		var _Energy_Site= string_get_tag_block(r_str, "Energy_Site");
		//-----------------------------------------------------------------------
		//trace("--------- SystemConfig ------------", _Sysconf);
		//trace("--------- Battery ------------", _Battery);
		//trace("--------- Rectifier ------------", _Rectifier);
		//trace("--------- DC_Bus ------------", _DC_Bus);
		//trace("--------- AC_Feed ------------", _AC_Feed);
		//trace("--------- Energy_Site ------------", _Energy_Site);
		//-----------------------------------------------------------------------
		if !is_undefined(_Sysconf) then  //в старых версиях там нет такого раздела
		{
			trace("NomVoltType=",		get_tag(_Sysconf, "NomVoltType val"));	//48 напряжение номинальное на которое работает вся система
			trace("SystemPolarity=",	get_tag(_Sysconf, "SystemPolarity val"));
			trace("NumberOfBattCells=", get_tag(_Sysconf, "NumberOfBattCells val"));
		}
		//-----------------------------------------------------------------------
		trace("Status=",		get_tag(_Battery, "Status val"));		//?везде и всегда Normal
		trace("Voltage=",		get_tag(_Battery, "Voltage val"));		//напряжение на батарейкее текущее
		trace("Mode=",			get_tag(_Battery, "Mode val"));			//FLOAT непонятки
		trace("Temperature=",	get_tag(_Battery, "Temperature val"));	//температура батареек
		trace("Current=",		get_tag(_Battery, "Current val"));		//ток нагрузки на батарейку, минусовое значит разряд
		trace("OnBattery=",		get_tag(_Battery, "OnBattery val"));	//true - работаем от батарейки
		trace("Minutes=",		get_tag(_Battery, "Minutes val"));		//оставшаяся ёмкость в минутах
		trace("AmpHours=",		get_tag(_Battery, "AmpHours val"));		//оставшаяся ёмкость в амперчасах
		//-----------------------------------------------------------------------
		trace("Current=",		get_tag(_Rectifier, "Current val"));	//потребление выпрямителя в целом, при отс электричества там 0
		trace("Temperature=",	get_tag(_Rectifier, "Temperature val"));//температура выпрямителя
		//-----------------------------------------------------------------------
		trace("Current=",		get_tag(_DC_Bus, "Current val"));		//нагрузка на выпрямитель которая на нём висит типа, потребители +7даже при отс электричества
		//-----------------------------------------------------------------------
		trace("Phase1=",		get_tagn(_AC_Feed, "Voltage val", 1));	//фаза 1
		trace("Phase2=",		get_tagn(_AC_Feed, "Voltage val", 2));	//фаза 2
		trace("Phase3=",		get_tagn(_AC_Feed, "Voltage val", 3));	//фаза 3
		//-----------------------------------------------------------------------
		shema.set_bat_voltage		(real((get_tag(_Battery, "Voltage val"))));	//напряжение на батарейкее текущее
		shema.set_bat_temperature   (get_tag(_Battery, "Temperature val"));					//температура батареек
		shema.set_bat_current		(real((get_tag(_Battery, "Current val"))));	//ток нагрузки на батарейку, минусовое значит разряд
		shema.set_bat_onBattery	    (string_pos("true",(get_tag(_Battery, "OnBattery val"))) >=1 ? true : false); //true питалоово идет из батареек
		
		//-------------------------------------------------------------------------------
		//намудрилово из-за того что по протоколу SSL здесь нету инфы об этом, а в обычной есть		
		//оставшаяся ёмкость в минутах
		var t = get_tag(_Battery, "Minutes val");
		if !is_undefined(t) then  shema.set_bat_remaining_min (string_digits(t));
		//оставшаяся ёмкость в амперчасах
		t = get_tag(_Battery, "AmpHours val");
		if !is_undefined(t) then  shema.set_bat_remaining_Ah(t);
		//-------------------------------------------------------------------------------
		
		phase1 = get_tagn(_AC_Feed, "Voltage val", 1); 
		phase2 = get_tagn(_AC_Feed, "Voltage val", 2); 
		phase3 = get_tagn(_AC_Feed, "Voltage val", 3);		
		shema.set_phase(phase1, phase2, phase3);		
		
		shema.set_rec_current		(real(string_digits(get_tag(_Rectifier, "Current val"))));	//потребление выпрямителя в целом от АС (при отсутствие фаз там 0)
		shema.set_rec_temperature	(get_tag(_Rectifier, "Temperature val"));					//температура выпрямителя
		shema.set_rec_load_current	(real(string_digits(get_tag(_DC_Bus, "Current val"))));	//ток нагрузки потребителей на выпрямитель

 ну а дальше уже дело "техники", отобразить всё это в удобоваримом для нас виде.