Archived
Этот пост заблокирован, редактирование отключено
Программное обеспечениеМакросы и библиотекиМакрос наработки моточасов
Исходное сообщение:
mike, 03.03.2017, 13:43
Макрос наработки моточасов
Макрос наработки моточасов с возможностью чтения по modbus, запись в ПЗУ. При записи в переменную-обнуление счетчика. Запись в ПЗУ порядка 5 млн. циклов.
Построен на базе шаблонов ПЗУ.
----
Подправил мелкую ошибку
Построен на базе шаблонов ПЗУ.
----
Подправил мелкую ошибку
Ответы:
serge197a, 03.03.2017, 14:02
Макрос наработки моточасов
Генератор, суммируем, сетевая переменная - это понятно
А что за блоки?
Поясните пожалуйста.
А что за блоки?
Поясните пожалуйста.
mike, 03.03.2017, 18:24
Макрос наработки моточасов
Это многофункциональные массивы ПЗУ.
Давайте тогда сделаю пояснение для всех коллег, как этот проект работает.
На самом деле название "Макрос наработки" не совсем правильное. Это проект.
Итак, на таймере сделан генератор секундных импульсов, который начинает генерацию при высоком уровне на входе en (поз.1)
Соответственно, этот вход является входом запуска всего СчетчикаМотоЧасов.
Секундные импульсы с выхода генератора поступают на инкрементный вход счетчика-делителя (поз. 2).
Каждые 3600 сек (1час) на выходе up счетчика формируется импульс, который подается на вход переменной R_часы.
В следующем цикле происходит сброс счетчика.
Состояние счетчика не записывается в ПЗУ, поэтому максимальная погрешность одного периода работы (от начала подачи питания на контроллер, до момента отключения питания) составляет 3599сек.
Давайте тогда сделаю пояснение для всех коллег, как этот проект работает.
На самом деле название "Макрос наработки" не совсем правильное. Это проект.
Итак, на таймере сделан генератор секундных импульсов, который начинает генерацию при высоком уровне на входе en (поз.1)
Соответственно, этот вход является входом запуска всего СчетчикаМотоЧасов.
Секундные импульсы с выхода генератора поступают на инкрементный вход счетчика-делителя (поз. 2).
Каждые 3600 сек (1час) на выходе up счетчика формируется импульс, который подается на вход переменной R_часы.
В следующем цикле происходит сброс счетчика.
Состояние счетчика не записывается в ПЗУ, поэтому максимальная погрешность одного периода работы (от начала подачи питания на контроллер, до момента отключения питания) составляет 3599сек.
mike, 03.03.2017, 18:52
Макрос наработки моточасов
С выхода переменной R_часы импульс поступает на формирователь фронта (поз. 1).
Формирователь фронта разрешает произвести операцию n+1 (где n - кол-во часов наработки час назад), а так же разрешает запись в массив ПЗУ, состоящий из 50 (настраивается) ячеек (поз. 3).
Формирователь фронта разрешает произвести операцию n+1 (где n - кол-во часов наработки час назад), а так же разрешает запись в массив ПЗУ, состоящий из 50 (настраивается) ячеек (поз. 3).
mike, 03.03.2017, 19:02
Макрос наработки моточасов
Что такое массив ячеек ПЗУ?
Это специализированный блок, который организует логику работы с большим объемом памяти ПЗУ.
Блок создается в секции пользовательских шаблонов (поз. 1).
Подробнее о блоке - в справке по ЗВБ, а я остановлюсь на самом решении.
Я выбрал режим работы блока - Журнал (поз. 1). Это обычный FIFO стек, но назвали мы его "журнал", что бы пользователям было понятнее: из этого блока можно сделать журнал событий.
Массивы ПЗУ имеют режимы чтения, записи и, для некоторых режимов работы, - стирание массива (точнее кол-ва записей в массиве).
Это специализированный блок, который организует логику работы с большим объемом памяти ПЗУ.
Блок создается в секции пользовательских шаблонов (поз. 1).
Подробнее о блоке - в справке по ЗВБ, а я остановлюсь на самом решении.
Я выбрал режим работы блока - Журнал (поз. 1). Это обычный FIFO стек, но назвали мы его "журнал", что бы пользователям было понятнее: из этого блока можно сделать журнал событий.
Массивы ПЗУ имеют режимы чтения, записи и, для некоторых режимов работы, - стирание массива (точнее кол-ва записей в массиве).
mike, 03.03.2017, 19:12
Макрос наработки моточасов
Зачем такие сложности, если можно сделать вот так:
mike, 03.03.2017, 20:09
Макрос наработки моточасов
Так же раз в час записывается ячейка ПЗУ, но с одним огромным НО.
Количество циклов записи в одну ячейку EEPROM ПЗУ около 100 000.
А общее гарантированное количество циклов записи всего ПЗУ составляет 1млн циклов (согласно даташиту нормальное кол-во общего цикла записи 10млн).
Получается, что при записи раз в час в одну ячейку ПЗУ, ресурс ячейки выработается через 100 000 часов или через 11 лет. Причем надо заметить, что это предельное значение.
А если вы хотите сохранять значение раз в 10 минут, то ресурс одной ячейки закончится меньше чем через пару лет.
Учитывая, что помимо счетчика моточасов в ПЗУ будут производиться записи из других источников, то разумно выбрать минимальное время цикла записи в ПЗУ для счетчика моточасов ~20минут.
Для того, что бы обеспечить равномерность износа ячеек ПЗУ я применил FIFO стек (благо появился в ЗВБ).
Таким образом количество циклов записи в разные ячейки превысит общее количество циклов записи и всего этого добра хватит лет на 20 в не экстремальном режиме работы.
Количество циклов записи в одну ячейку EEPROM ПЗУ около 100 000.
А общее гарантированное количество циклов записи всего ПЗУ составляет 1млн циклов (согласно даташиту нормальное кол-во общего цикла записи 10млн).
Получается, что при записи раз в час в одну ячейку ПЗУ, ресурс ячейки выработается через 100 000 часов или через 11 лет. Причем надо заметить, что это предельное значение.
А если вы хотите сохранять значение раз в 10 минут, то ресурс одной ячейки закончится меньше чем через пару лет.
Учитывая, что помимо счетчика моточасов в ПЗУ будут производиться записи из других источников, то разумно выбрать минимальное время цикла записи в ПЗУ для счетчика моточасов ~20минут.
Для того, что бы обеспечить равномерность износа ячеек ПЗУ я применил FIFO стек (благо появился в ЗВБ).
Таким образом количество циклов записи в разные ячейки превысит общее количество циклов записи и всего этого добра хватит лет на 20 в не экстремальном режиме работы.
mike, 03.03.2017, 20:35
Макрос наработки моточасов
[list]Итак, при записи в массив ПЗУ на выходе to (поз. 1) появляется значение с приращение в одну единицу (в данном примере одна единица равна одному часу).
И сразу же поступает на вход event массива ПЗУ, настроенного на режим чтения (поз. 3), через сумматор, настроенный на операцию вычитания (поз. 2).
На выходе "Наработка часов" (поз. 4) появляется действующее значение, которое заносится в ячейку ОЗУ "Наработанные часы" (поз. 5). Эта ячейка ОЗУ выполняет три функции:
[list type=decimal]
[li]Осуществляет рекурсию для реализации инкрементного счетчика (см. рис. 002, поз. 2)[/li]
[li]Осуществляет сетевой доступ к текущему значению счетчика моточасов[/li]
[li]Осуществляет сброс счетчика моточасов по сети[/li]
[/list]
Сброс по сети осуществляется записью нуля в переменную "Наработанные часы".
[/list]
И сразу же поступает на вход event массива ПЗУ, настроенного на режим чтения (поз. 3), через сумматор, настроенный на операцию вычитания (поз. 2).
На выходе "Наработка часов" (поз. 4) появляется действующее значение, которое заносится в ячейку ОЗУ "Наработанные часы" (поз. 5). Эта ячейка ОЗУ выполняет три функции:
[list type=decimal]
[li]Осуществляет рекурсию для реализации инкрементного счетчика (см. рис. 002, поз. 2)[/li]
[li]Осуществляет сетевой доступ к текущему значению счетчика моточасов[/li]
[li]Осуществляет сброс счетчика моточасов по сети[/li]
[/list]
Сброс по сети осуществляется записью нуля в переменную "Наработанные часы".
[/list]
mike, 03.03.2017, 20:42
Макрос наработки моточасов
Алгоритм был написан по просьбе А. Сасова из НПТ Климатика.
P.S. Написан был за 15 минут на выставке МК2017, стоя на одной ноге, да еще и в прайм тайм. А описание его заняло более 2х часов в уютном кресле дома >:(
P.S. Написан был за 15 минут на выставке МК2017, стоя на одной ноге, да еще и в прайм тайм. А описание его заняло более 2х часов в уютном кресле дома >:(
serge197a, 03.03.2017, 21:55
Макрос наработки моточасов
спасибо mike.
А нет ли возможности реализовать запись в ПЗУ по отключению питания?
Это сняло бы все трудности и к примеру в счетчике м/ч можно было бы не делать лишних записей.
А нет ли возможности реализовать запись в ПЗУ по отключению питания?
Это сняло бы все трудности и к примеру в счетчике м/ч можно было бы не делать лишних записей.
mike, 03.03.2017, 22:01
Макрос наработки моточасов
В машинах Z400, M100, M120 такой функции не предусмотрено.
В Z036 предусмотрено 8к энергонезависимая ОЗУ.
В Z036 предусмотрено 8к энергонезависимая ОЗУ.