Archived

Этот пост заблокирован, редактирование отключено

Программное обеспечениеМакросы и библиотекиМакрос наработки моточасов

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

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

----
Подправил мелкую ошибку
Ответы:
serge197a, 03.03.2017, 14:02
serge197a
Макрос наработки моточасов
Генератор, суммируем, сетевая переменная - это понятно
А что за блоки?
Поясните пожалуйста.
mike, 03.03.2017, 18:24
mike
Макрос наработки моточасов
Это многофункциональные массивы ПЗУ.

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

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

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

Состояние счетчика не записывается в ПЗУ, поэтому максимальная погрешность одного периода работы (от начала подачи питания на контроллер, до момента отключения питания) составляет 3599сек.
mike, 03.03.2017, 18:52
mike
Макрос наработки моточасов
С выхода переменной R_часы импульс поступает на формирователь фронта (поз. 1).
Формирователь фронта разрешает произвести операцию n+1 (где n - кол-во часов наработки час назад), а так же разрешает запись в массив ПЗУ, состоящий из 50 (настраивается) ячеек (поз. 3).
mike, 03.03.2017, 19:02
mike
Макрос наработки моточасов
Что такое массив ячеек ПЗУ?
Это специализированный блок, который организует логику работы с большим объемом памяти ПЗУ.

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

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

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

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

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

Для того, что бы обеспечить равномерность износа ячеек ПЗУ я применил FIFO стек (благо появился в ЗВБ).
Таким образом количество циклов записи в разные ячейки превысит общее количество циклов записи и всего этого добра хватит лет на 20 в не экстремальном режиме работы.
mike, 03.03.2017, 20:35
mike
Макрос наработки моточасов
[list]Итак, при записи в массив ПЗУ на выходе to (поз. 1) появляется значение с приращение в одну единицу (в данном примере одна единица равна одному часу).
И сразу же поступает на вход event массива ПЗУ, настроенного на режим чтения (поз. 3), через сумматор, настроенный на операцию вычитания (поз. 2).

На выходе "Наработка часов" (поз. 4) появляется действующее значение, которое заносится в ячейку ОЗУ "Наработанные часы" (поз. 5). Эта ячейка ОЗУ выполняет три функции:
[list type=decimal]
[li]Осуществляет рекурсию для реализации инкрементного счетчика (см. рис. 002, поз. 2)[/li]
[li]Осуществляет сетевой доступ к текущему значению счетчика моточасов[/li]
[li]Осуществляет сброс счетчика моточасов по сети[/li]
[/list]

Сброс по сети осуществляется записью нуля в переменную "Наработанные часы".
[/list]
mike, 03.03.2017, 20:42
mike
Макрос наработки моточасов
Алгоритм был написан по просьбе А. Сасова из НПТ Климатика.

P.S. Написан был за 15 минут на выставке МК2017, стоя на одной ноге, да еще и в прайм тайм. А описание его заняло более 2х часов в уютном кресле дома >:(
serge197a, 03.03.2017, 21:55
serge197a
Макрос наработки моточасов
спасибо mike.
А нет ли возможности реализовать запись в ПЗУ по отключению питания?
Это сняло бы все трудности и к примеру в счетчике м/ч можно было бы не делать лишних записей.
mike, 03.03.2017, 22:01
mike
Макрос наработки моточасов
В машинах Z400, M100, M120 такой функции не предусмотрено.
В Z036 предусмотрено 8к энергонезависимая ОЗУ.