Объявление

Свернуть
Пока нет объявлений.

Архивация данных

Свернуть
X
 
  • Фильтр
  • Время
  • Показать
Очистить всё
новые сообщения

  • Архивация данных

    Добрый день. В ходе разработки проекта возникла необходимость архивировать переменные на флэшку. К сожалению, не нашёл в РЭ как это сделать. В интернете тоже ничего вразумительного не попалось.
    У ОВЕН СПК был модуль Drives, который определял параметры всех подключённых носителей. Нет ли для ПЛК-50 чего-нибудь подобного? И если нет, какой адрес у флэшки, как определить, примонтирована ли она, сколько на ней места?

  • #2
    Поддерживаю.
    Вопрос тот же, но касательно ПЛК-40.

    И да, у Овен есть компонент Owen Archiver.
    Есть ли что-то подобное здесь? В документации не нашёл.

    Комментарий


    • #3
      Сообщение от Никита Посмотреть сообщение
      Поддерживаю.
      Вопрос тот же, но касательно ПЛК-40.

      И да, у Овен есть компонент Owen Archiver.
      Есть ли что-то подобное здесь? В документации не нашёл.
      Готового функционала подобному Owen Archiver и модуль Drives на плк 40\50 нет,

      Определить монтирование USB накопителя в плк 40\50 можно по наличию каталога в файловой системе плк по адресу:

      run/media/sda1 - путь монтирования USB накопителя
      run/media/mmcblk0p1 - путь монтирования внутреннего накопителя плк(emmc)
      run/media/mmcblk1p1 - путь монтирования SD карты где p1 в конце названия означает 1 раздел накопителя

      Если разделов на SD карте больше 1, то адресация будет следующая:

      run/media/mmcblk1p1
      run/media/mmcblk1p2


      итд

      Owen Archiver реализован с помощью библиотеки CAA File, при помощи данной библиотеки можно реализовать необходимый функционал, а дальше писать данные в нужный формат файла(json,txt,csv).

      Комментарий


      • #4
        А можно ли реализовать возможность подключения внешнего флеш накопителя для того, чтобы загружать на него из контроллера архивы данных.
        (если только такой вариант рассматривать, без ethernet и modbus)
        Можно ли формировать в exel файл? Причем разные данные в разные файлы?
        И сделать это не командой, которая бы формировала бы файл в корневую директорию флешки, а реализовать визуализацию в стиле "проводника", чтобы выбирать нужный файл..

        Комментарий


        • #5
          Сообщение от Никита Посмотреть сообщение
          А можно ли реализовать возможность подключения внешнего флеш накопителя для того, чтобы загружать на него из контроллера архивы данных.
          (если только такой вариант рассматривать, без ethernet и modbus)
          Можно ли формировать в exel файл? Причем разные данные в разные файлы?
          И сделать это не командой, которая бы формировала бы файл в корневую директорию флешки, а реализовать визуализацию в стиле "проводника", чтобы выбирать нужный файл..
          не уверен , что штатный функционал "проводника" codesys даст такую возможность. Придется все делать в ручную, определять наличие и название архивных файлов csv в памяти плк или внутренней sd карты, далее выбирать нужный файл, и уже его перемещать на usb накопитель
          Последний раз редактировалось Пушкарев Андрей; 13-03-2020, 11:23 AM.

          Комментарий


          • #6
            Сообщение от Никита Посмотреть сообщение
            А можно ли реализовать возможность подключения внешнего флеш накопителя для того, чтобы загружать на него из контроллера архивы данных.
            (если только такой вариант рассматривать, без ethernet и modbus)
            Можно ли формировать в exel файл? Причем разные данные в разные файлы?
            И сделать это не командой, которая бы формировала бы файл в корневую директорию флешки, а реализовать визуализацию в стиле "проводника", чтобы выбирать нужный файл..

            Попробуйте здесь посмотреть. Расписано довольно подробно.

            Ссылка на руководство по архивации..txt
            Вложения
            Последний раз редактировалось Андрей Магарёв; 13-03-2020, 11:27 AM.

            Комментарий


            • Никита
              Никита комментирует:
              Редактировать комментарий
              ссылка не работает

          • #7
            А если поместить переменные в PersistentVar, то ведь они должны сохранять своё значение даже после отключения питания ПЛК?
            Мне нужно чтобы мой таймер (сделанный на основе примеров Агава) сохранял своё значение и после включения продолжал считать с учётом предыдущих значений.

            Я поместил нужные мне переменные, но сохранения не происходит.
            Как поступать в таком случае?

            Комментарий


            • #8
              Сообщение от Никита Посмотреть сообщение
              А если поместить переменные в PersistentVar, то ведь они должны сохранять своё значение даже после отключения питания ПЛК?
              Мне нужно чтобы мой таймер (сделанный на основе примеров Агава) сохранял своё значение и после включения продолжал считать с учётом предыдущих значений.

              Я поместил нужные мне переменные, но сохранения не происходит.
              Как поступать в таком случае?
              Посмотрите тут: http://forum.kb-agava.ru/forum/contr...?-в-плк-40

              Комментарий


              • #9
                Сообщение от Пушкарев Андрей Посмотреть сообщение
                У меня получилось с аналоговым параметром. И теперь его значения сохраняются.

                Но у меня есть таймер и его три переменных времени.
                Timer_1.stdWork.wSecond
                Timer_1.stdWork.wMinute
                Timer_1.stdWork.wHour

                Как мне их объявить коректно в PersistentVar, чтобы они тоже сохранялись?


                Комментарий


                • #10
                  Сообщение от Никита Посмотреть сообщение

                  У меня получилось с аналоговым параметром. И теперь его значения сохраняются.

                  Но у меня есть таймер и его три переменных времени.
                  Timer_1.stdWork.wSecond
                  Timer_1.stdWork.wMinute
                  Timer_1.stdWork.wHour

                  Как мне их объявить коректно в PersistentVar, чтобы они тоже сохранялись?

                  Вообще не рекомендуется сохранять в RETAIN области какие-то динамичные данные например секундный счетчик, если сохранение идет во внутреннюю память ПЛК, конечно сам блок TRetainStaorage позволяет изменить место хранения файла retain, например на SD карту, а также можно в нем задать период сохранения, чаще которого сохранение не будет происходить.

                  Если Вы хотите хранить значения счетчика секунд, то просто объявите эти значения так же в области Retain, но Вам стоит настроить период сохранения у блока TRetainStorage например на 5 мин.(в случае если сохранение настроено на внутренний накопитель ПЛК)

                  Ресурс записи в EMMC, равно как и других типов Flash памяти, ПЛК ограничен , поэтому и не рекомендуется производить частую запись.
                  Последний раз редактировалось Таушканов Константин; 16-03-2020, 11:45 AM.

                  Комментарий


                  • #11
                    Сообщение от Пушкарев Андрей Посмотреть сообщение

                    Вообще не рекомендуется сохранять в RETAIN области какие-то динамичные данные например секундный счетчик, если сохранение идет во внутреннюю память ПЛК, конечно сам блок TRetainStaorage позволяет изменить место хранения файла retain, например на SD карту, а также можно в нем задать период сохранения, чаще которого сохранение не будет происходить.

                    Если Вы хотите хранить значения счетчика секунд, то просто объявите эти значения так же в области Retain, но Вам стоит настроить период сохранения у блока TRetainStorage например на 5 мин.(в случае если сохранение настроено на внутренний накопитель ПЛК)

                    Ресурс записи в EMMC внутренней памяти, равно как и других типов Flash памяти, ПЛК ограничен , поэтому и не рекомендуется частой записи.
                    Я планировал сохранять раз в 10 минут, чтобы знать состояние счётчика (сколько было пройдено времени). Такое ТЗ стоит, собственно.

                    Но я прочитал тред, на который Вы ссылались.
                    Вставил код, где форсировался вызов TStorageRetain включении ПЛК.

                    Но тем не менее данные не сохраняются после перезагрузки (путём отключения питания от ПЛК).

                    Так в чём же проблема?
                    Последний раз редактировалось Таушканов Константин; 16-03-2020, 11:44 AM.

                    Комментарий


                    • #12
                      Я сейчас ещё посмотрел и у меня счетчик записей retain-переменных вообще на 0.
                      Запись не происходит.

                      Хотя для отладки я поставил 10 сек на модуле TRetainStorage.

                      Не совсем понятно, как работает этот модуль.
                      Я читал руководство, но там очень кратко и обзорно.

                      Подскажите, в чем ошибка?

                      Комментарий


                      • #13
                        Сообщение от Никита Посмотреть сообщение
                        Я сейчас ещё посмотрел и у меня счетчик записей retain-переменных вообще на 0.
                        Запись не происходит.

                        Хотя для отладки я поставил 10 сек на модуле TRetainStorage.

                        Не совсем понятно, как работает этот модуль.
                        Я читал руководство, но там очень кратко и обзорно.

                        Подскажите, в чем ошибка?
                        ФБ TRetainStorage должен вызываться в отдельной задаче с высоким приоритетом, сохранение данных происходит по их изменению а не постоянно в цикле по периоду который задается на входе filter. Соответственно если изменения данных в области RETAIN нет , то и сохранять нечего.

                        Если Вы поставили 10 сек. на модуле, то сколько бы раз Вы не меняли значения переменной retain , чаще 1 раза в 10 секунд она не запишется и если в этот момент выключить плк,
                        данные он восстановит из retain фала только те, что он записал в период 10 секунд.

                        Комментарий


                        • #14
                          Сообщение от Пушкарев Андрей Посмотреть сообщение

                          сохранение данных происходит по их изменению
                          Я же установил переменные счётчика. Секунды и минуты должны были сохраниться.
                          Или я их как-то некорректно задал?

                          Плюс у меня там есть дискретные сигналы и аналоговый.
                          Для DI - я менял значение физически.
                          Для AI - с помощью имитации (подготовленные значения).

                          И всё равно ничего не записалось.

                          Почему?

                          Сообщение от Пушкарев Андрей Посмотреть сообщение

                          ФБ TRetainStorage должен вызываться в отдельной задаче с высоким приоритетом
                          сохранение данных происходит по их изменению
                          У MainTask приоритет - 1.
                          Какой для архивации стаивть лушче? Тоже 1?

                          А интервал времени сколько?
                          Если я буду каждые 10 мин писать, то сколько тогда интервал времени для задачи? Сопоставимо или намного меньше?


                          Комментарий


                          • #15
                            Проблема по сохранению данных осталась.

                            Сейчас я всю программу переделал в ST.

                            Блок TRetainStorage вроде что-то сохраняет.
                            Счётчик записей retain-переменных отсчитывает как положено (каждые 10 с, как задано у меня).

                            Но, например, после ребута данные не сохраняются.

                            У меня такая система:
                            Я в визуализации привязал необходимые мне переменные.
                            Например: PersistentVar.t1.
                            Таким образом, это корректно?
                            Или они сохраняются, но я их в визуализации не увижу?
                            Как тогда это оформить?

                            p.s.:
                            И вообще все retain-переменные, где именно объявлять? В разделе PersistentVars (который отдельно создаётся в Application)?
                            Или их запихивать в GVL?

                            Комментарий

                            Обработка...
                            X