Макрос наработки моточасов

Автор mike, 03 марта 2017, 13:43:27

« назад - далее »

mike

Макрос наработки моточасов с возможностью чтения по modbus, запись в ПЗУ. При записи в переменную-обнуление счетчика. Запись в ПЗУ порядка 5 млн. циклов.

Построен на базе шаблонов ПЗУ.

----
Подправил мелкую ошибку

serge197a

Генератор, суммируем, сетевая переменная - это понятно
А что за блоки?
Поясните пожалуйста.

mike

#2
Это многофункциональные массивы ПЗУ.

Давайте тогда сделаю пояснение для всех коллег, как этот проект работает.
На самом деле название "Макрос наработки" не совсем правильное. Это проект.

Итак, на таймере сделан генератор секундных импульсов, который начинает генерацию при высоком уровне на входе en (поз.1)
Соответственно, этот вход является входом запуска всего СчетчикаМотоЧасов.

Секундные импульсы с выхода генератора поступают на инкрементный вход счетчика-делителя (поз. 2).
Каждые 3600 сек (1час) на выходе up счетчика формируется импульс, который подается на вход переменной R_часы.
В следующем цикле происходит сброс счетчика.

Состояние счетчика не записывается в ПЗУ, поэтому максимальная погрешность одного периода работы (от начала подачи питания на контроллер, до момента отключения питания) составляет 3599сек.

mike

С выхода переменной R_часы импульс поступает на формирователь фронта (поз. 1).
Формирователь фронта разрешает произвести операцию n+1 (где n - кол-во часов наработки час назад), а так же разрешает запись в массив ПЗУ, состоящий из 50 (настраивается) ячеек (поз. 3).

mike

#4
Что такое массив ячеек ПЗУ?
Это специализированный блок, который организует логику работы с большим объемом памяти ПЗУ.

Блок создается в секции пользовательских шаблонов (поз. 1).
Подробнее о блоке - в справке по ЗВБ, а я остановлюсь на самом решении.

Я выбрал режим работы блока - Журнал (поз. 1). Это обычный FIFO стек, но назвали мы его "журнал", что бы пользователям было понятнее: из этого блока можно сделать журнал событий.

Массивы ПЗУ имеют режимы чтения, записи и, для некоторых режимов работы, - стирание массива (точнее кол-ва записей в массиве).

mike

Зачем такие сложности, если можно сделать вот так:

mike

Так же раз в час записывается ячейка ПЗУ, но с одним огромным НО.
Количество циклов записи в одну ячейку EEPROM ПЗУ около 100 000.
А общее гарантированное количество циклов записи всего ПЗУ составляет 1млн циклов (согласно даташиту нормальное кол-во общего цикла записи 10млн).

Получается, что при записи раз в час в одну ячейку ПЗУ, ресурс ячейки выработается через 100 000 часов или через 11 лет. Причем надо заметить, что это предельное значение.
А если вы хотите сохранять значение раз в 10 минут, то ресурс одной ячейки закончится меньше чем через пару лет.

Учитывая, что помимо счетчика моточасов в ПЗУ будут производиться записи из других источников, то разумно выбрать минимальное время цикла записи в ПЗУ для счетчика моточасов ~20минут.

Для того, что бы обеспечить равномерность износа ячеек ПЗУ я применил FIFO стек (благо появился в ЗВБ).
Таким образом количество циклов записи в разные ячейки превысит общее количество циклов записи и всего этого добра хватит лет на 20 в не экстремальном режиме работы.

mike

#7
    Итак, при записи в массив ПЗУ на выходе to (поз. 1) появляется значение с приращение в одну единицу (в данном примере одна единица равна одному часу).
    И сразу же поступает на вход event массива ПЗУ, настроенного на режим чтения (поз. 3), через сумматор, настроенный на операцию вычитания (поз. 2).

    На выходе "Наработка часов" (поз. 4) появляется действующее значение, которое заносится в ячейку ОЗУ "Наработанные часы" (поз. 5). Эта ячейка ОЗУ выполняет три функции:

    • Осуществляет рекурсию для реализации инкрементного счетчика (см. рис. 002, поз. 2)
    • Осуществляет сетевой доступ к текущему значению счетчика моточасов
    • Осуществляет сброс счетчика моточасов по сети

    Сброс по сети осуществляется записью нуля в переменную "Наработанные часы".

mike

Алгоритм был написан по просьбе А. Сасова из НПТ Климатика.

P.S. Написан был за 15 минут на выставке МК2017, стоя на одной ноге, да еще и в прайм тайм. А описание его заняло более 2х часов в уютном кресле дома >:(

serge197a

#9
спасибо mike.
А нет ли возможности реализовать запись в ПЗУ по отключению питания?
Это сняло бы все трудности и к примеру в счетчике м/ч можно было бы не делать лишних записей.

mike

В машинах Z400, M100, M120 такой функции не предусмотрено.
В Z036 предусмотрено 8к энергонезависимая ОЗУ.

serge197a


VoronovMaksim88

Отличный макрос! Спасибо.
А я как раз делал в тупую: в 1 ячейку  :)