Разработан комплексный экран состояний работы 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")))); //ток нагрузки потребителей на выпрямитель
ну а дальше уже дело "техники", отобразить всё это в удобоваримом для нас виде.