|
SMLogix Вопросы о работе в среде SMLogix и о FBD-программировании |
|
Опции темы | Поиск в этой теме |
20.06.2018, 00:42 | #1 |
Senior Member
Регистрация: Oct 2010
Адрес: Москва
Сообщения: 403
Благодарил(а): 29 раз(а)
Поблагодарили:
2 раз(а) в 2 сообщениях
|
Сохранить много одновременных событий в 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 |
20.06.2018, 11:08 | #2 | |
Уволен из Сегнетикс
Регистрация: Nov 2015
Адрес: CПб/ВЛГ
Сообщения: 0
Благодарил(а): 0 раз(а)
Поблагодарили:
1 раз в 1 сообщении
|
Ответ: Сохранить много одновременных событий в FRAM
Цитата:
Я бы делал 3 вариант, а уж если возникнут проблемы - оптимизировать. Третий вариант сделать быстрее всего. __________________ В сегнетиксе не работаю с самого начала 2019 года. |
|
20.06.2018, 12:04 | #3 | |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 180
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Сохранить много одновременных событий в FRAM
Цитата:
__________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
|
20.06.2018, 17:59 | #4 |
Senior Member
Регистрация: Oct 2010
Адрес: Москва
Сообщения: 403
Благодарил(а): 29 раз(а)
Поблагодарили:
2 раз(а) в 2 сообщениях
|
Ответ: Сохранить много одновременных событий в FRAM
Gromov,
Arsie, спасибо за информацию. Выдачу на верхний уровень буду делать по третьему варианту (каждой переменной свой адрес) НО: По-прежнему остался вопрос с записью подряд идущих изменений: 1) изменились все 140 переменных - начата запись в EEPROM для каждой переменной, 2) через 2 секунды опять изменились все переменные (и их тоже надо записать), 3) еще через 3 секунды опять изменились все переменные (опять надо записать), 4) и еще через 1 секунду опять изменения (и надо записать еще и их)... Это максимум (обычно 1-2 изменения подряд), дальше пауза в несколько минут точно есть. Вопрос: Я так понимаю, что за 1-2 секунды все 140 блоков EEPROM не успеют записаться. Соответственно, надо как-то корректно сохранить на время записи в энергонезависимую память и другие значения. Как сделать этот буфер (или кэш)? |
20.06.2018, 18:17 | #5 | |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 180
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Сохранить много одновременных событий в FRAM
Цитата:
Но это не очень корректно, если строго подойти к процессу. Если эта некорректность ситльно влияет на процесс, то я бы сделал схему записи, которая прерывает запись еепрома при обновление данных и начинает по новой. Ну, типа, пришли данные, поехало писаться 1450 блоков. Записалось 10, приехали новые данные. Схема перезапустилась и вместо перезаписи оставшихся 130 начала писать все 140 по новой. Но это реально нужда в этом должна быть. Возможно даже лучше и не писать в память сразу, просто держать на регистрах, пока всё не устаканится и потом уже записать в еепром. __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
|
20.06.2018, 19:45 | #6 |
Senior Member
Регистрация: Mar 2008
Адрес: Екатеринбург
Сообщения: 494
Благодарил(а): 50 раз(а)
Поблагодарили:
14 раз(а) в 13 сообщениях
|
Ответ: Сохранить много одновременных событий в FRAM
А, если не секрет, откуда валятся переменные, кто/что их меняет с такой скоростью и в таком количестве?
|
20.06.2018, 20:47 | #7 |
Senior Member
Регистрация: Dec 2007
Адрес: Томск
Сообщения: 4 174
Благодарил(а): 242 раз(а)
Поблагодарили:
166 раз(а) в 158 сообщениях
|
Ответ: Сохранить много одновременных событий в FRAM
офф.
не понимаю мании решать задачи средствами впритык по возможностям. экономить деньги заказчика? да нахер он сдался, упырь |
21.06.2018, 10:43 | #8 |
Senior Member
Регистрация: Oct 2010
Адрес: Москва
Сообщения: 403
Благодарил(а): 29 раз(а)
Поблагодарили:
2 раз(а) в 2 сообщениях
|
Ответ: Сохранить много одновременных событий в FRAM
Секрет установка, но не секрет логика работы.
Это 2 каскада гальванических ванн со своими "мозгами", отрабатывающими быстротечные процессы. Верхний уровень - сертифицированный комп, который отслеживает фактические параметры и либо рассчитывает "компенсирующие воздействия", либо определяет продукцию в брак. "В серединке" - медленнотекущие процессы, изменение которых отрабатывают живые операторы (образно - крутят ручки, удерживая стрелки в допустимых пределах). SMH2G заменяет операторов (количество брака упало в разы), но... Каскады "глядят в мир" единственным RS485 (привет Сегнетиксу с тем же подходом), поэтому контроллером пришлось "влезть" между мозгами/приборами каскада и верхним уровнем - он вычитывает параметры из каскада (ну не со стрелочных же показометров их брать?), по нужным рассчитывает свои воздействия (вместо операторов), а заодно отдает вычитанные выше (благо верхний уровень можно адаптировать почти под все изобретенные способы передачи данных). Сейчас возникло желание сохранить продукцию, которая выбраковывается при сбоях в питании (АВР по высокому напряжению, т.е. достаточно медленный -откуда те самые 2-3 секунды). Для чего верхнему уровню нужны значения после пропадания и после восстановления питания, причем зачем-то аж все. Сохранение в энергонезависимую память вызвано хотелками заказчика (он с ними хочет что-то делать после долгого сбоя по питанию). |
21.06.2018, 11:13 | #9 | |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 180
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Сохранить много одновременных событий в FRAM
Цитата:
__________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
|
21.06.2018, 11:27 | #10 |
Senior Member
Регистрация: Oct 2010
Адрес: Москва
Сообщения: 403
Благодарил(а): 29 раз(а)
Поблагодарили:
2 раз(а) в 2 сообщениях
|
Ответ: Сохранить много одновременных событий в FRAM
Уже стоит (причем недешевый). Держит почти 2 часа, на рабочие процессы хватает за глаза. Для использования в роли "регистратора" - им же получится перекрыть время срабатывания АВР, тут вопросов нет.
Но под последние хотелки (чтобы то, что случилось при сбое питания - можно было прочитать после ремонта подстанции) нужно "помнить" значения несколько суток (4 дня сидели на прошлой неделе без электричества. "ЗАТО" - они такие). И здесь вариант с "неспешной" записью во FRAM мне кажется куда Тем паче что и самому может в последующем пригодится (уже под другую задачу, перекликающуюся с "хобби")... |
21.06.2018, 11:41 | #11 | |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 180
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Сохранить много одновременных событий в FRAM
Цитата:
Если у ИБП нет релюхи, то релюха с запиткой катушки от ввода прекрасно покажет, есть электричество или нет его. А дальше по таймеру записать данные в еепром. PS. Насчёт хотелок - есть десяток разных алгоритмов записи быстроменяющихся данных. Каждый из алгоритмов хорош для именно своего случая. Универсальное решение сделать не получится. Точнее получится, но оно будет громоздкое. __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
|
21.06.2018, 14:25 | #12 | |
Senior Member
Регистрация: Oct 2010
Адрес: Москва
Сообщения: 403
Благодарил(а): 29 раз(а)
Поблагодарили:
2 раз(а) в 2 сообщениях
|
Ответ: Сохранить много одновременных событий в FRAM
Цитата:
Но в FRAM (стоит именно этот модуль внешней памяти) нужно записывать те значения, которые сняты через 0,5-1 сек после пропадания и через 0,5-1 сек после восстановления питания. В том числе и при двойной отработке АВР... |
|
21.06.2018, 14:46 | #13 | |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 180
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Сохранить много одновременных событий в FRAM
Цитата:
__________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
|
21.06.2018, 15:31 | #14 |
Senior Member
Регистрация: Jan 2012
Адрес: Саратов
Сообщения: 179
Благодарил(а): 1 раз(а)
Поблагодарили:
3 раз(а) в 3 сообщениях
|
Ответ: Сохранить много одновременных событий в FRAM
|
21.06.2018, 16:08 | #15 |
Senior Member
Регистрация: Oct 2010
Адрес: Москва
Сообщения: 403
Благодарил(а): 29 раз(а)
Поблагодарили:
2 раз(а) в 2 сообщениях
|
Ответ: Сохранить много одновременных событий в FRAM
|
25.06.2018, 02:06 | #16 | |
Senior Member
Регистрация: Oct 2010
Адрес: Москва
Сообщения: 403
Благодарил(а): 29 раз(а)
Поблагодарили:
2 раз(а) в 2 сообщениях
|
Ответ: Сохранить много одновременных событий в FRAM
Цитата:
А реагирует она даже на секундные отклонения (а собственнные "мозги", подозреваю, что и на более скоротечные могут - привода довольно шустрые). Компенсирующие воздействия, кстати, довольно приличные - после буквально 3-секундного перерва с небольшой задержкой электроды в солнвой ванне (реостат) на мгновение ныряют в нее практически целиком, хотя до перерыва не погружены и на треть. И "прыгают" (погружаются-вынимаются) там довольно прикольно, прежде чем вновь на установившийся режим выйдут. И все эти загогулины мозги каскада выделывают всего по двум переменным, которые кидает верхний уровень (рссчитав их по полученным снизу данным)... Но: Зачем сохранять значения именно после пропадания и восстановления питания, но не сохранять поступающие выше при работе от ИБП - не знаю. |
|
25.06.2018, 02:12 | #17 | |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 180
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Сохранить много одновременных событий в FRAM
Цитата:
Хорошо, дело ваше)) Способы вам понятны? __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
|
25.06.2018, 02:24 | #18 | |
Senior Member
Регистрация: Oct 2010
Адрес: Москва
Сообщения: 403
Благодарил(а): 29 раз(а)
Поблагодарили:
2 раз(а) в 2 сообщениях
|
Ответ: Сохранить много одновременных событий в FRAM
Цитата:
И - нет, технологии буферизации НЕпонятны. Потому что вместо подсказки тема скатилась к обсуждению "зачем это надо". Впрочем, пора бы уже привыкнуть... |
|
25.06.2018, 11:20 | #19 | ||
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 180
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Сохранить много одновременных событий в FRAM
Цитата:
Цитата:
__________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. Последний раз редактировалось Arsie, 27.06.2018 в 12:59 |
||
25.06.2018, 23:07 | #20 | |
Senior Member
Регистрация: Oct 2010
Адрес: Москва
Сообщения: 403
Благодарил(а): 29 раз(а)
Поблагодарили:
2 раз(а) в 2 сообщениях
|
Ответ: Сохранить много одновременных событий в FRAM
Вы тоже не читаете с первого раза (надеюсь, из-за занятости не менее важными задачами).
Значение имеет не последняя цифра. Значение имеет последовательность цифр. Что априори исключает Цитата:
Вместо этого нужно: "Ну, типа, пришли данные, поехало писаться 140 блоков. Записалось 10, приехали новые данные. Дописались оставшиеся 130 - и начали писаться вновь приехавшие". Причем вновь приехавших - может и не быть. А может быть один раз. А может два, причем за период, пока даже изначальные данные еще не дописались. А может и три (но не больше)... и именно вот этот FIFO-буфер неопределенной глубины для сваливающихся данных и стал для меня проблемой (блоки EEPROM можно сделать и конечной глубины, благо верхний уровень не так ограничен в ресурсах). |
|
26.06.2018, 11:25 | #21 | |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 180
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Сохранить много одновременных событий в FRAM
Цитата:
Если нет, то, с вашего позволения, я прекращаю думать над вашей задачей. __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. Последний раз редактировалось Arsie, 26.06.2018 в 13:21 |
|
27.06.2018, 09:07 | #22 |
Senior Member
Регистрация: Oct 2010
Адрес: Москва
Сообщения: 403
Благодарил(а): 29 раз(а)
Поблагодарили:
2 раз(а) в 2 сообщениях
|
Ответ: Сохранить много одновременных событий в FRAM
У меня изначально не было вопросов по технической поддержке.
Но извините, что посмел на общем форуме задать вопрос по реализации задачи на ваших контроллерах, которая оказалась сложна для меня - надеясь на помощь сообщества. И, главное - СПАСИБО, что убедили меня нигде больше не применять ваших контроллеров. Даже если они оказываются оптимальными для задачи. |
27.06.2018, 11:47 | #23 | |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 180
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Сохранить много одновременных событий в FRAM
Цитата:
Q: Для инфы: по RS485 уже используется около 90 запросов; верхний уровень может вычитать одним запросом до 243 байт, т.е. порядка 60 двойных переменных int+int). A: У 2G ограничение на 112 запросов в режиме "мастера". Количество регистров на режим слейва ограничений не имеет - действуют общие ограничения по 1000 переменных каждого типа. Но задача мгновенной массированной записи на модуль памяти нерешаема. Т.е., очевидно, что нужно использовать какие-либо послабления в условиях задачи. Поэтому я стал задавать наводящие вопросы с целью понять, является ли следующий алгоритм оптимальным:
Предприняв 2-3 попытки выяснить, почему именно этот алгоритм является единственно верным на ваш взгляд, я написал вопрос о техподдержке и что перестаю вас мучать вопросами. При этом я не писал и не подразумевал, что вы не имеете право на свою точку зрения или не имеете право здесь писать. Тема остаётся открытой и любой человек может вам помочь решить вашу задачу. Но, я повторно предостерегаю вас, что задача "FIFO-буфер неопределенной глубины" нерешаема в выбранной конфигурации оборудования. __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. Последний раз редактировалось Arsie, 27.06.2018 в 12:11 |
|