PDA

Просмотр полной версии : ПР200 и энергонезависимые переменные



Hemann
13.07.2024, 23:02
Коллеги, добрый вечер!

В рамках подготовки к решению предстоящей задачи, решил попробовать сделать лог на 5 событий в памяти ПР200. В эмуляции все выглядит не плохо, но на практике не запоминаются необходимые переменные в энергонезависимой памяти. На данный момент задумка тестовой программы такая. Читаем системное время, и по переднему фронту входа I1 запоминаем событие - день, месяц, часы, минуты, а в качестве кода события - секунды. События пишутся последовательно в энергонезависимую память, в соответствие с состоянием счетчика записи событий. Счетчик записи событий энергонезависимый, кольцевой - как только достигает 5, сбрасывается в единицу. Есть еще счетчик считывания событий, он тоже энергонезависимый, его значение устанавливается с экрана ПР200.
Так вот. Не запоминается ничего, кроме счетчика считывания.
Программа в прикреплении. На экране: 1-я строка - текущее время-дата, потом 5 строк - время и код события, последняя строка - счетчик считывания, состояние входа I1 и код события, считываемый из энергонезависимой памяти в соответствие со значением счетчика считывания.
Возможно, я не прав даже на концептуальном уровне, но как-то я не могу понять в чем не прав. Прошу направить в нужное русло и сильно не пинать :)

Сергей0308
13.07.2024, 23:57
Коллеги, добрый вечер!

В рамках подготовки к решению предстоящей задачи, решил попробовать сделать лог на 5 событий в памяти ПР200. В эмуляции все выглядит не плохо, но на практике не запоминаются необходимые переменные в энергонезависимой памяти. На данный момент задумка тестовой программы такая. Читаем системное время, и по переднему фронту входа I1 запоминаем событие - день, месяц, часы, минуты, а в качестве кода события - секунды. События пишутся последовательно в энергонезависимую память, в соответствие с состоянием счетчика записи событий. Счетчик записи событий энергонезависимый, кольцевой - как только достигает 5, сбрасывается в единицу. Есть еще счетчик считывания событий, он тоже энергонезависимый, его значение устанавливается с экрана ПР200.
Так вот. Не запоминается ничего, кроме счетчика считывания.
Программа в прикреплении. На экране: 1-я строка - текущее время-дата, потом 5 строк - время и код события, последняя строка - счетчик считывания, состояние входа I1 и код события, считываемый из энергонезависимой памяти в соответствие со значением счетчика считывания.
Возможно, я не прав даже на концептуальном уровне, но как-то я не могу понять в чем не прав. Прошу направить в нужное русло и сильно не пинать :)

Вот когда-то запоминали дату и время события:
77270
Короче, в теме на форуме это подробно обсуждалось, мне кажется в одной переменной всё поместится, в смысле дата-время и код события!
Сейчас прикинем: день - 5 бит, месяц - 4 бита, часы - 6 бит, минуты - 6 бит, код события - 3 бита, короче хватает с избытком, даже 8 бит остаётся в резерве!
Кажется здесь обсуждали: https://owen.ru/forum/showthread.php?t=26216&page=24

Dimensy
14.07.2024, 06:46
Коллеги, добрый вечер!

В рамках подготовки к решению предстоящей задачи, решил попробовать сделать лог на 5 событий в памяти ПР200. В эмуляции все выглядит не плохо, но на практике не запоминаются необходимые переменные в энергонезависимой памяти. На данный момент задумка тестовой программы такая. Читаем системное время, и по переднему фронту входа I1 запоминаем событие - день, месяц, часы, минуты, а в качестве кода события - секунды. События пишутся последовательно в энергонезависимую память, в соответствие с состоянием счетчика записи событий. Счетчик записи событий энергонезависимый, кольцевой - как только достигает 5, сбрасывается в единицу. Есть еще счетчик считывания событий, он тоже энергонезависимый, его значение устанавливается с экрана ПР200.
Так вот. Не запоминается ничего, кроме счетчика считывания.
Программа в прикреплении. На экране: 1-я строка - текущее время-дата, потом 5 строк - время и код события, последняя строка - счетчик считывания, состояние входа I1 и код события, считываемый из энергонезависимой памяти в соответствие со значением счетчика считывания.
Возможно, я не прав даже на концептуальном уровне, но как-то я не могу понять в чем не прав. Прошу направить в нужное русло и сильно не пинать :)

Вы не правильно ячейку памяти сделали.
Вот так попробуйте
77267

Ну, или, вот так (очистка журнала тоже должна присутствовать)
77268

melky
14.07.2024, 08:18
делал на 16 событий с сохранением времени в Unix time. В том числе с просмотром с экрана и передачей последней в сеть.
Применялись макросы времени petera и макросы ППЗУ Сергей0308

Вообще поищите темы Журналы аварий, было много реализаций.

Dimensy
14.07.2024, 09:55
А счетчик можно чуть оптимизировать


function_block WRCount //имя функционального блока.

// функциональный блок счетчика записей в логе. после достижения 5 записей - сбрасывается в 1
// работает по фронту сигнала Wr
// обязательно делать обратную связь с выхода NewCnt на вход CurCnt

var_input //объявление входных переменных
Wr : bool; //сигнал записи с типом данных bool
CurCnt : udint; //текущий счетчик событий лога с типом данных udint
end_var

var_output //объявление выходных переменных
NewCnt : udint; //обновленный счетчик событий лога с типом данных udint
end_var

var //объявление локальных переменных
RTrig : bool; //переменная для определения переднего фронта на входе «U»
end_var

NewCnt := CurCnt;
if NewCnt = 0 then NewCnt := 1; end_if //Инициализация, не обязательно
if Wr and not RTrig then
NewCnt := (NewCnt mod 5) + 1;
end_if
RTrig := Wr;

end_function_block

FPavel
14.07.2024, 19:22
В библиотеке элементов Овен существует запароленный макрос Events предназначенный для сохранения событий.
Сохраняет не много 5-10 шт.

Хотя и разработать собственный тоже хорошо.

Hemann
14.07.2024, 23:00
Друзья, всем огромное спасибо! Доработка ячейки памяти от Dimensy решила вопрос с сохранением. Пока не совсем корректно работает счетчик событий записи, но будем бороться. Еще раз всем большая благодарность! Если что - буду еще задавать вопросы.