Имеется ПЛК110 и не важно какой OPC сервер и SCADA на ПК
ПЛК самостоятельно без участия SCADA управляет процессом.
SCADA нужна для:
1. архивирования и просмотра истории событий который передает ей ПЛК
2. контроля текущего состояния процесса
3. изменения параметров процесса

ПК может быть отключен, неисправен, с ним может отсутствовать связь и пр.
как в этот момент грамотно сделать так чтобы:
1. узнать что ПК не доступен и не может принимать данные
2. сохранить события ПЛК которые не были переданы в ПЛК из ПК
3. узнать что ПК стал доступен и готов принимать данные
4. передать из ПЛК в ПК все не переданные до этого события

Я так понимаю что задачи 1 и 3 решаются на уровне возвращаемой ошибки протокола (например Modbus)
Задачи 2 и 3 решаются буферной записью событий в файл в ПЛК
1. с помощью модуля Archiver с подэлементом FileOutput в режиме Shift
2. самостоятельно в файл через SysFileLib

С модулем Archiver записать просто а вот прочитать потом чтобы передать в ПК не понятно как

Если самому организовывать буферный файл на диске в режиме Shift то нужно иметь два указателя на позицию записи события в файл и последнего события переданной в ПК
И при записи каждой нового события полностью переписывать файл (чтобы организовать Shift mode)
1. открыли старый файл
2. создали новый файл
3 последовательно прочитали из старого файла и записали в новый файл события до позиции записи
4. записали в новый файл новое событие
5 последовательно прочитали из старого файла и записали в новый файл события до конца файла
6 закрыли новый и старый файлы
7 удалили старый фал
8. переименовали новый файл в старый
9. увеличили на 1 позицию записи в файл

Если позиция записи и последнего события переданного в ПК совпадает - все ок
Если нет то:
1. открыть файл (старый) на чтение
2. увеличить на 1 позицию события переданного в ПК
2. прочитать событие по позиции этой позиции
3. передать в ПК
4.повторять с п 2 пока позиция записи не станет равна позиции последнего события переданного в ПК

Пугает то что нужно переписывать каждый раз весь буферный файл. Как это отразиться на ресурсе флеш памяти ПЛК? И как этот ресурс хотя бы приблизительно посчитать исходя из известного объема файла и частоты его перезаписи?

Еще есть вариант организовать буферный массив в Retain памяти и писать в него по тем же двум указателям последнего записанного и последнего переданного события. В этом случае не нужна возня с перезаписыванием файла и все проще. Но как обстоят дела с ресурсом Retain памяти, или эта также память где хранятся файлы ПЛК? А как организовано хранение Retan переменных, тоже на файловом уровне? Если да то система будет перзаписывать весь массив при каждом изменении одного элемента, то есть по сути делать тоже как в файлом варианте выше.

Или это вообще делается как то по другому и я все не правильно понимаю?
Т е основной вопрос как не потерять передаваемые данные при отсутствии готовности их принять у OPC сервера например?