8.3. Алгоритм зарядной станции
RsEO - модуль единой системы управления R-system, управляет зарядной станцией, поддерживая паралелизм и относительную распределённость процессов управления зарядом электротранспорта и от электротранспорта в режимах: ультрабыстром, дневном (прим.: быстром) и ночном (прим.: медленном) режимах. Архитектура головного алгоритма разарботана с уётом:
-
концепции встраиваемости, способен полностью функционровать на решении построенном в соответствии с подходом on board;
-
маштабирования в пределах зарядной станции как объекта;
-
портирования на зарядную станцию не зависимо от образования данной зарядной станции среды локализации;
-
концепции "сети вещей"
Архитектура реализуется на аппаратной платформе поддерживающей процессор с минимум двумя ядрами, на которых запускается модуль системы управления система состоящая из следующих модулей:
-
подсистема мультипроцессинга;
-
подсистема реального времени контроля сессий;
-
подсистема трансфера и трансформации данных;
-
подсистема управления зарядной станцией: сервер; база данных;
-
подсистема поддержки зарядной станции в "сети вещей";
-
подсистема авторизации: M2M; SmartCard;
-
подсистема мониторинга зарядной станицей;
-
подсистема пользователя: web и мобильное приложение;
-
подсистема интеграции с операторами энергосетей;
-
подсистема V2G
Работа архитектуры RsEO оркестрируется головным алгоритмом, управляющим стеком подходов, методов в пределах:
Блок 0 – операционные системы:
-
Linux;
-
RTEMS
Блок 1 – коммуникация и аутентификация:
-
Open Charge Point Protocol;
-
EVSE;
-
OAuth 2.0;
-
OIDC;
-
ModBus;
Стек OAuth 2.0 и OIDC выполняют в модуле RsEO функциональную реализацию бесшовности сессий, Plug & Charge и Smart Card криптографического шифрования данных пользователя и устройства, транзакций, автоматической аутентификации электротранспорта
Блок 2 – платформа:
-
EVCC;
-
SECC
Стек EVCC и SECC RsEO выполняет в модуле RsEO функциональную реализацию автоматического обмена данными между зарядными станциями и электротранспортом
Блок 3 – программный слой:
-
RsEO;
-
Smart charging
Блок 4 – стеки, аппаратно-программные слои:
-
MCAPI;
-
V2G;
-
OCPI;
-
OSPC;
-
EV Roaming
Описание этапов и шагов головного алгоритма:
Блок 0: запуск проверки доступности зарядной станции и работы протокола OCPP 2.0:
-
step 0: установка интервала опроса и проверка систем на возврат status - active;
-
step 1: сравнение значений мощности с последней зарядной сессии (прим.: значения с центрального сервера) и значений мощности текущей (прим.: значения от оператора энерго сети);
-
step 1[з]: запрос значения мощности после сессии;
-
step 1[y]: внесение данных, что потеряна свзяь, но станция продолжает работать;Блок 1: авторизация в системе:
-
step 2: проверка данных авторизации, процесс авторизации пользователя системы;Блок 2: корректируем данные для работы и сессий:
-
step 3: внесение данных о зарядной сессии, корректировка параметров заряда или пограничных значений через форму управления;
-
step 4: блокируем step 3 до окончания зарядки;Блок 3: выводим данные в интерфейс, взаимодействуем с пользователем:
-
step 5[s]: вызываем функцию запроса сценариев;
-
step 5:выводим статусы, сценарии и данные в интерфейс системы управления поведением;Блок 4: асинхронно проверяем подключение динамического объекта:
-
step 6: проверка подключения динамического объекта c дополнительной проверкой положения затвора защёлки, запуском потоков для взаимодействия с динамическим объектом, созданием семафора;
-
step 6[data]: проверка подключения динамического объекта, система свой-чужой;Блок 5: проверка блоков и систем зарядной станции:
-
step 7: критическая ошибка, часть системы не доступна - not active;
-
step 8: проверка на пограничные и эталонные значения;
-
step 9: критическое значение с со процессингом - 9a уведомления о резких скачках, выход за предельные или эталонные значения;
-
step 10: проверка прошла успешно - success;
-
step 11: error от станции;
-
step 11[do]: error от динамического объекта завершаем работу;
-
step 11[data]: формирование массива значений по step10, step11, step11[do], step14[data], step15[poll], step19[data], step20, step20[cvdo], step20[up], step20[bmup], step35 корректировка журнала заряда, асинхронно передаём в очередь данные;Блок 6: формируем и работаем с журналом заряда:
-
step 12: формируем журнал планирования заряда;Блок 7: формируем периодические задачи, прерывания, запускаем потоки для вложенного алгоритма взаимодействия с динамическим объектом:
-
step 13[data]: запускаем прерывания, собираем данные о состоянии станции как системы в очередь и обрабатываем;
-
step 13: запускаем процесс взаимодействия с динамическим объектом, настраиваем real time в потоках;
-
step 13[poll]: цикл-опрос на наличие повреждений DB динамического объекта, запускаем выделенный поток для step 14;
-
step 14: устанавливаем интервал выполнения вложенного алгоритма, запускаем потоки на каждый динамичсекий объект, настраиваем общение с динамическим объектом;
-
step 14[data]: опрашиваем обработчик задачи проверки системы на готовность и доступность к взаимодействию, запускаем проверку через связь с DB на наличие целостности DB динамического обекта;
-
step 14[poll]: опрашиваем подключение носителя M2;
-
step 14[th]: создаём потоки отвественные за взаимодействие с динамическим объектом;Блок 8: поврежедение целостности DB динамического объекта:
-
step 15: ошибки в целостности базы данных, запускаем обработку;
-
step 15[poll]: собираем ошибки в очередь и исправляем;Блок 9: OpenId Connect (прим.: аутентификация) динамического объекта, разрабатывается на базе протокола OAuth 2.0:
-
step 16: запрос на проверку id динамического объекта и получение токена, если id принадлежит данному серверу авторизации;
-
step 17: проверка id динамического объекта на принадлежность к серверу авторизации;
-
step 18: запрос авторизации приложения по ключу - access token, получения доступа приложения на взаимодейтсвия зарядной стации и динамического объекта;Блок 10: передача и получение данных, определения параметров:
-
step 19: инициализация динамического объекта - подключён, забираем данные от станции;
-
step 19[poll]: запускаем функцию провери целостности данных;
-
step 19[data]: проверяем корректнось данных в DB динамического объекта;
-
step 19[rec]: запускаем процесс востановления данных DB;
-
step 19[sh]: поиск dump файла для восстановления DB;
-
step 19[up]: воссстаналиваем повреждённые таблицы DB динамического объекта;
-
step 20: попытка подключения построеннего человека и динамичсекого объекта;
-
step 20[poll]: опрос подключения M2 носителя динамического объекта;
-
step 20[cvdo]: проверка на наличие критических значений в DB динамичсекого объекта;
-
step 20[up]: отправляем параллельный запрос на проверку предиката M - о наличии данных которые нужно обновить;
-
step 20[bmup]: обновяем эталонные значения;
-
step 21: запрос-ответ (прим.: переход в step 22): передаём данные от зарядной станции динамическому объекту [ток заряда - значение на момент подключения; напржение - значение на момент запроса; мощность - значение на момент запроса]; второй ответ (прим.: переход в step 24): данные по step 23 получены, начинается передача заряда и отслеживания состояния бортовой батареи;
-
step 22: передаём данные от динамического объекта [состояние батареи - SOC %; зарядныый ток - значение; напряжение];
-
step 23: передача данных на серевр станции для открытия сессии заряда динамического объекта открыт;
-
stp 23[ftppoll]: повторный опрос подключения M2, через функцию шага st20[poll];
-
step 23[ftp]: запускаем передачу данных хранящихся на ftp;Блок 11: запускаем зарядную сессию:
-
step 24: страт заярдной сессии: присваиваем id сесси;
-
step 24[poll]: опрос на сравнение временной метки создания или изменений файла log о данных хранящихся на ftp, включает в себя маршрут step 26[poll];
-
step 25: передача id сесси в базу данных;
-
step 25[ho]: опрашиваем завершения задачи заряда;
-
step 26: запсукаем задачу заряда;
-
step 26[poll]: опрос на запуск передачи данных по ftp;Блок 12: вложенный алгоритм real time:
-
step 27: запускаем периодическую задачу опроса готовности системы и создаём асинхронно семафор;
-
step 28: запсукаем задачу прерывания, сбора, обработки данных;
-
step 29: асинхронно собираем в очередь и обрабатываем данные в процессе заряда на поиск эффектора отвечающего условиям: ошибка; резки скачок значений - step 29[a] (прим.: асихронно сверяем на преодоление предельного занчения и передаём резко повышающиеся значения); сессия закончена;Блок 13: запускам обработчик очереди:
-
step 30: сверяем значения step30[s]: запрошенный заряд - полученный заряд, достигает значений, сессия закончена записываем в DB, обновляем календарь зарядных сессий;
-
step 30[poll]: опрос на окончание передачи данных с ftp DO на ftp PS;
-
step 31: возникла ошибка, отрабатываем, отключаем динамический объект, перезаписываем журнал заряда;Блок 14: завершаем зарядную сессию:
-
step 32: завершаем зарядную сессию;
-
step 33[repeat]: вызываем функцию обнавления предикатов если необходимо и повторяем step 20[up];
-
step 34[mkos]: запускаем функцию синхронизации версий операционных систем упрвляющих динамическим объектом и управляюего интеллектуальной системы;
-
step 35: синхранизируем версии OS;
-
step 36: завершаем работу и передаём приоритет на повторную проверку готовности ситемы