Показать сообщение отдельно
Старый 20.06.2018, 00:42   #1
ailcat
Senior Member
 
Аватара для ailcat
 
Регистрация: Oct 2010
Адрес: Москва
Сообщения: 403
Благодарил(а): 29 раз(а)
Поблагодарили: 2 раз(а) в 2 сообщениях
Question Сохранить много одновременных событий в FRAM

Задачка (не АВОК), которая привела меня в ступор (железо: SMH2G+FRAM, тик 200 ms).

Только суть:
Есть N переменных типа int (сейчас - 82, может быть до 140), при изменении нужно сохранить новое значение с меткой времени (метка упакована в int) в энергонезависимую память для обработки в будущем (в том числе после периода обесточивания контроллера).
Проблема в том, что за один тик могут измениться все переменные (то есть надо будет записать до 140 переменных int+int по состоянию на конкретный тик системы), при этом возможно 4-кратное изменение значений с интервалом 2-3 секунды (но вероятность более 4 изменений в любые 10 минут времени пренебрежимо мала).

Вариант доступа к сохраненным данным в формате сквозного FIFO буфера (или его имитации) кажется идеальным, т.к. для вычитки верхним уровнем можно использовать единственный двойной регистр Modbus/TCP (int+int), при каждом обращении вычитывающий новые "строчки" (или это невозможно?)
Вариант с записью каждой переменной в свой FBD-блок EEPROM нужной глубины и вычитка методом R/W (внешний контроллер записывает адрес переменной, а SMH мультиплексором выбирает нужный EEPROM и отвечает) - у меня вызывает опасения из-за задержки ответа минимум на один тик (то есть верхнему уровню придется сперва вычитать переменную, а потом записать адрес новой и подождать минимум тик. Особенно это печально в связи с быстродействием локальной сети).
Вариант с "выстаскиванием" выходов EEPROM всех переменных на отдельные адреса в карте памяти Modbus выглядит очень привлекательно, но пугает риск нарваться на ограничения SMH2G с модулем Ethernet (или ему вычитка внешним мастером 280 modbus-регистров не проблема? Для инфы: по RS485 уже используется около 90 запросов; верхний уровень может вычитать одним запросом до 243 байт, т.е. порядка 60 двойных переменных int+int).

Есть у гуру SMLogix идеи?

UPD: пока склоняюсь к последнему варианту, но это не снимает вопроса кэширования записи в FRAM

Последний раз редактировалось ailcat, 20.06.2018 в 00:56
ailcat вне форума   Ответить с цитированием