Проект R
×

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: завершаем работу и передаём приоритет на повторную проверку готовности ситемы