Показано с 1 по 4 из 4

Тема: Правильная методика передачи данных из ПЛК на OPC сервер чтобы ни чего не потерять?

  1. #1

    По умолчанию Правильная методика передачи данных из ПЛК на OPC сервер чтобы ни чего не потерять?

    Имеется ПЛК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 сервера например?

  2. #2
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,643

    По умолчанию

    как концепт есть еще вариант использовать FIFO, в режиме онлайн стек не будет накапливаться, после выхода из офлайна мастер вычитывает данные пока стек не опустошится. При попадании питания в контроллере можно записать массив стека и позиции чтения и записи в файл, при включении плк вычитывает файл, заполнив экземпляр стека и продолжает работу, в качестве элементов массива можно использовать сложную структуру с метками времени, данными и другой служебной информацией
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

  3. #3

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    как концепт есть еще вариант использовать FIFO, в режиме онлайн стек не будет накапливаться, после выхода из офлайна мастер вычитывает данные пока стек не опустошится. При попадании питания в контроллере можно записать массив стека и позиции чтения и записи в файл, при включении плк вычитывает файл, заполнив экземпляр стека и продолжает работу, в качестве элементов массива можно использовать сложную структуру с метками времени, данными и другой служебной информацией
    Теорию стека то я понимаю и что записать тоже понятно, в том числе с метками времени
    Меня больше волнует где хранить этот стек?
    1. в Archiver - как писать понятно а как читать не понятно
    2. в файле - каждый раз перезаписывать все данные в новый файл - как отразится на ресурсе памяти?
    3 в массиве Retain - перезаписывать все не надо только одну запись но опять же ресурс памяти больше или меньше файловой?

  4. #4

    По умолчанию

    Retain - это не Flash память и волноваться не о чем. Писать в Retain можно сколь угодно много раз.

Похожие темы

  1. Modbus RTU расчет скорости передачи данных
    от colorprint2008 в разделе Сетевые технологии
    Ответов: 2
    Последнее сообщение: 30.01.2014, 15:59
  2. Шлюз передачи данных
    от AIV в разделе Подбор Оборудования
    Ответов: 4
    Последнее сообщение: 12.12.2012, 11:36
  3. Проблема передачи данных ПЛК <=> ПК
    от DrKillJoy в разделе ПЛК1хх
    Ответов: 15
    Последнее сообщение: 05.12.2012, 11:09
  4. проблема передачи данных с укт38-щ4.тс
    от лера в разделе Эксплуатация
    Ответов: 12
    Последнее сообщение: 28.06.2010, 19:57
  5. Ответов: 2
    Последнее сообщение: 11.09.2009, 09:49

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •