|
SMLogix Вопросы о работе в среде SMLogix и о FBD-программировании |
|
Опции темы | Поиск в этой теме |
09.06.2021, 19:08 | #1 |
Новичок
Регистрация: Jun 2021
Сообщения: 27
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Как сделать чтобы при перезагрузке ПЛК счетчик не увеличивался (ПО SMLogix, ПЛК SMH4)
Здравствуйте!
Столкнулся с проблемой подсчета моточасов и пусков и записью их в энергонезависимую память. При перезагрузке ПЛК счетчик самопроизвольно увеличивается на единицу, хотя разрешающего сигнала на входе нет. Пробовал через блок EEPROM. Подскажите как решить эту проблему? ПО приложил. В ПО сам подсчет без записи в EEPROM, не дает загрузить программу всю. Может быть кто подскажет как правильно это делается? Последний раз редактировалось Arsie, 10.06.2021 в 16:13 Причина: Удалил вложения за ненужностью |
09.06.2021, 19:14 | #2 |
Сотрудник Сегнетикс
Регистрация: Mar 2016
Адрес: SPb
Сообщения: 4 341
Благодарил(а): 0 раз(а)
Поблагодарили:
255 раз(а) в 251 сообщениях
|
Ответ: Как сделать чтобы при перезагрузке ПЛК счетчик не увеличивался (ПО SMLogix, ПЛ
А можете на картинке в конкретном месте показать, что вы ожидали увидеть и что увидели?
__________________ Если ничто другое не помогает, прочтите, наконец, инструкцию |
10.06.2021, 11:23 | #3 |
Новичок
Регистрация: Jun 2021
Сообщения: 27
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Как сделать чтобы при перезагрузке ПЛК счетчик не увеличивался (ПО SMLogix, ПЛ
Вот на картинке то, как это реализована в программе. И в этом варианте он при перезагрузке питания произвольно увеличивает на единицу счетчик. Может кто готов поделить готовым решением по подсчету?
|
10.06.2021, 11:25 | #4 | |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 160
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Как сделать чтобы при перезагрузке ПЛК счетчик не увеличивался (ПО SMLogix, ПЛ
Цитата:
Блоки используйте лучше Array(). __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
|
10.06.2021, 11:36 | #5 |
Новичок
Регистрация: Jun 2021
Сообщения: 27
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Как сделать чтобы при перезагрузке ПЛК счетчик не увеличивался (ПО SMLogix, ПЛ
То есть при инициализации контроллера, он присваивает переменной true всегда, даже если по условиям программы она false? Или этого можно как то избежать? Блок ARRAY разве позволяет сохранять в энергонезависимой памяти ПЛК?
Добавлено через 4 минуты Или я что-то кардинально не так делают? И для сохранения данных, надо реализовать как то по другому? |
10.06.2021, 11:44 | #6 |
Новичок
Регистрация: Jun 2021
Сообщения: 27
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Как сделать чтобы при перезагрузке ПЛК счетчик не увеличивался (ПО SMLogix, ПЛ
Вот как реализован у меня передний фронт включения записи блока EEPROM.
|
10.06.2021, 11:51 | #7 | ||
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 160
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Как сделать чтобы при перезагрузке ПЛК счетчик не увеличивался (ПО SMLogix, ПЛ
Цитата:
Цитата:
Добавлено через 57 секунд Объясните пожалуйста ваше представление, как это должно работать. Желательно после объяснения прочтите справку на использованные блоки (включая блок EEPROM()) и напишите объяснение повторно, возможно вы увидите ошибку самостоятельно. __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
||
10.06.2021, 11:57 | #8 |
Новичок
Регистрация: Jun 2021
Сообщения: 27
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Как сделать чтобы при перезагрузке ПЛК счетчик не увеличивался (ПО SMLogix, ПЛ
Я предполагал что при изменении значения моточасов, одно значение будет сразу поступать на блок сравнения, а второе с некоторой задержкой. После сравнивания двух значений блок будет выдавать true, а дальше триггер переднего фронта. Скорее всего при инициализации, он сравнивает два значения и выдает true (так как они одинаковые), тут то и происходит изменение на 1.
Добавлено через 2 минуты Я бы отправил, да ограничение по объему файла мешает. Подскажите пожалуйста, а как сделать тогда запись по изменению числа, контроллер для меня новый, первый мой проект на нем. |
10.06.2021, 12:09 | #9 | ||
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 160
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Как сделать чтобы при перезагрузке ПЛК счетчик не увеличивался (ПО SMLogix, ПЛ
Цитата:
Цитата:
Я этим и занимаюсь. Пытаюсь вас научить. В любом деле сначала придумывают алгоритм,. а придумывают его не "от балды", а по результату исследования. В данном случае вы пропустили исследование справки и пропустили исследование нашей библиотеки макросов. Вы начните, а я вас буду поправлять и направлять в нужную сторону. __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
||
10.06.2021, 12:26 | #10 |
Новичок
Регистрация: Jun 2021
Сообщения: 27
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Как сделать чтобы при перезагрузке ПЛК счетчик не увеличивался (ПО SMLogix, ПЛ
Совсем забыл про архиватор
Что удалось извлечь из справки. Инициализация При старте программы после включения питания или окончания загрузки все блоки сохранения проходят инициализацию. · Блок EEPROM() читает последнее записанное значение · Блок ARRAY() с единичной длиной также читает читает последнее записанное значение То есть тут они идентичны. хотя что значит с единичной длиной (чего?) не совсем понятно. Ожидание После фазы инициализации блоки сохранения находятся в состоянии ожидании команды за запись или чтение. Тут блоки из описания ARRAY и EEPROM тоже идентичны. Запись Операция записи нового значения начинается после получения фронта на входе start_wr. Очевидно что на этом этапе происходит косяк, поскольку он получает передний фронт. Тут блоки из описания ARRAY и EEPROM тоже идентичны. Описание EEPROM Блок организует в памяти стек по принципу FIFO ("первый вошел, первый вышел"). Запись возможна только в ячейку с адресом 0. При записи все ранее записанные значения сдвигаются на одну ячейку как показано на рисунке. Значение, которое было записано раньше всех (ячейка N) теряется. Данный блок сделан для облегчения реализации журнала событий. На входе deep устанавливается количество записей, которые могут быть сохранены в этом блоке: · Если deep = 1, то записанное число сразу же передается на выход блока Я считал, до сего моента, что этот блок в целом подходит для меня, поскольку параметр deep я настроил на 1, и он сразу выдает переменную на выход ]В описании блока ARRAY непонятен для меня два момент: wr_addr - адрес элемента, в который будет осуществлена запись rd_addr - адрес элемента, из которого будет осуществлена чтение 1.)Могу ли я не трогать их адреса и оставить их по умолчанию (например просто 0 или 1)? 2.) Могут ли срабатывать по одному триггеру start_wr и start_rd блока ARRAY. Будет ли в этом случае значение попадать на выход или нужна временная задержка на start_rd? |
10.06.2021, 12:27 | #11 |
Новичок
Регистрация: Jun 2021
Сообщения: 27
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Как сделать чтобы при перезагрузке ПЛК счетчик не увеличивался (ПО SMLogix, ПЛ
ВОт ПО
Последний раз редактировалось Arsie, 10.06.2021 в 16:13 Причина: Удалил вложения за ненужностью |
10.06.2021, 12:52 | #12 | ||||
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 160
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Как сделать чтобы при перезагрузке ПЛК счетчик не увеличивался (ПО SMLogix, ПЛ
Цитата:
Цитата:
Цитата:
Цитата:
__________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
||||
10.06.2021, 13:33 | #13 |
Новичок
Регистрация: Jun 2021
Сообщения: 27
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Как сделать чтобы при перезагрузке ПЛК счетчик не увеличивался (ПО SMLogix, ПЛ
Вторая фотография в треде, переменная ф1, является передним фронтов для записи.
Я хочу понять как мне правильно использовать блок ARRAY, поскольку мне же надо выводить данные на панель, вот я и хотел уточнить. Если я одновременно подам на wr_addr и на rd_addr передний фронт, произойдет запись числа поданного на вход в ячейку паями, а на выходе появится число которое лежало до этого в ячейке памяти (до момента записи) или уже обновленное, которое записалось командой wr_addr Добавлено через 1 минуту Можете в программе посмотреть, внизу программы, если захотите. |
10.06.2021, 14:00 | #14 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 160
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Как сделать чтобы при перезагрузке ПЛК счетчик не увеличивался (ПО SMLogix, ПЛ
А откуда берётся она?
Не бывает задних фронтов, это называется спадом. Фронт/спад. А не перед/зад. Оставьте заднеприводность нашим европейским коллегам - там это модно __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
10.06.2021, 14:42 | #15 |
Новичок
Регистрация: Jun 2021
Сообщения: 27
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Как сделать чтобы при перезагрузке ПЛК счетчик не увеличивался (ПО SMLogix, ПЛ
|
10.06.2021, 14:49 | #16 | |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 160
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Как сделать чтобы при перезагрузке ПЛК счетчик не увеличивался (ПО SMLogix, ПЛ
Цитата:
Откуда берётся верхнее число и чему оно равно в момент старта программы? Откуда берётся нижнее число и чему оно равно в момент старта программы? __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. Последний раз редактировалось Ilya J., 10.06.2021 в 15:23 |
|
10.06.2021, 15:35 | #17 |
Новичок
Регистрация: Jun 2021
Сообщения: 27
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Как сделать чтобы при перезагрузке ПЛК счетчик не увеличивался (ПО SMLogix, ПЛ
Я же говорю, тут я разобрался. В момент старта программы оба числа одинаковые, соответственно при сравнении блок выдает true.
|
10.06.2021, 15:39 | #18 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 160
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Как сделать чтобы при перезагрузке ПЛК счетчик не увеличивался (ПО SMLogix, ПЛ
А разобрались, почему числа одинаковые?
__________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
10.06.2021, 16:05 | #19 |
Новичок
Регистрация: Jun 2021
Сообщения: 27
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Как сделать чтобы при перезагрузке ПЛК счетчик не увеличивался (ПО SMLogix, ПЛ
Да, потому что я изначально зачем-то усложнил себе жизнь. Я таким образов хотел сделать срабатывание блока сравнения для формирования фронта. Оба значения одинаковые, но при его изменении, второе поменяется с выдержкой времени (специально поставил), соответственно блок сравнения сначала выключиться а потом включиться, так я получал фронт.
По прежнему не смог разобраться с этим вопросом: Я хочу понять как мне правильно использовать блок ARRAY, поскольку мне же надо выводить данные на панель, вот я и хотел уточнить. Если я одновременно подам на wr_addr и на rd_addr передний фронт, произойдет запись числа поданного на вход в ячейку памяти, а на выходе появится число которое лежало до этого в ячейке памяти (до момента записи) или уже обновленное, которое записалось командой wr_addr? |
10.06.2021, 16:12 | #20 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 160
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Как сделать чтобы при перезагрузке ПЛК счетчик не увеличивался (ПО SMLogix, ПЛ
Зачем? В описании блока разве не сказано, что "rd" - это лишняя операция в вашем случае?
__________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
10.06.2021, 16:26 | #21 |
Новичок
Регистрация: Jun 2021
Сообщения: 27
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Как сделать чтобы при перезагрузке ПЛК счетчик не увеличивался (ПО SMLogix, ПЛ
Прошу прощения не то скопировал, я имел ввиду start_rd.
Еще появился вопрос по карте памяти регистров ModBus. В приложенном файле мы видим название банка Input Register, возможно ли изменить адресацию банка на Holding Register в новой карте, или программа автоматически выбирают в какую область памяти записывать? В старой карте можно поменять дислокацию переменной на другой банк памяти с помощью адреса или программа автоматически выбирает банк памяти? мне нужно чтобы был доступ 3,16, 23 функцией модбас, чтение, запись, чтение/запись регистров хранения. |
10.06.2021, 16:40 | #22 | |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 160
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Как сделать чтобы при перезагрузке ПЛК счетчик не увеличивался (ПО SMLogix, ПЛ
Цитата:
Шаг 6, врезка. __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
|
10.06.2021, 17:12 | #23 |
Новичок
Регистрация: Jun 2021
Сообщения: 27
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Как сделать чтобы при перезагрузке ПЛК счетчик не увеличивался (ПО SMLogix, ПЛ
То есть чтобы реализовать 23 функцию модбас придется поизвращаться?
|
10.06.2021, 17:17 | #24 |
Новичок
Регистрация: Jun 2021
Сообщения: 27
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Как сделать чтобы при перезагрузке ПЛК счетчик не увеличивался (ПО SMLogix, ПЛ
Подскажите пожалуйста по настройкам портов и связи. Сейчас у меня настроены порты COM1 и COM2 как слейв. то есть чисто теоретически вбив нужный адрес плк, скорость, четность и использовав 4 функцию модбас я должен без проблем прочитать карту регистров?
|
10.06.2021, 17:17 | #25 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 160
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Как сделать чтобы при перезагрузке ПЛК счетчик не увеличивался (ПО SMLogix, ПЛ
23? Только через написание собственного драйвера.
Добавлено через 3 минуты Сами регистры, а не их карту) __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
10.06.2021, 17:28 | #26 |
Новичок
Регистрация: Jun 2021
Сообщения: 27
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Как сделать чтобы при перезагрузке ПЛК счетчик не увеличивался (ПО SMLogix, ПЛ
Можно ли как-то еще организовать запись в энергонезависимую память переменной типа bool, помимо array или eeprom. Суть в чем, мне надо чтобы он запоминал выбранный режим, при сбросе питания, или только через вышеуказанные блоки?
|
10.06.2021, 17:33 | #27 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 160
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Как сделать чтобы при перезагрузке ПЛК счетчик не увеличивался (ПО SMLogix, ПЛ
Блоки array() предназначены для сохранения произвольной информации. EEPROM() - ведения журналов.
__________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
10.06.2021, 17:35 | #28 |
Новичок
Регистрация: Jun 2021
Сообщения: 27
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Как сделать чтобы при перезагрузке ПЛК счетчик не увеличивался (ПО SMLogix, ПЛ
Есть еще проблема. Если управление идёт со скады, то в программе же нужно будет обнулять слово управления, как это сделать, если переменная может быть только вход или выход?
|
10.06.2021, 17:37 | #29 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 160
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Как сделать чтобы при перезагрузке ПЛК счетчик не увеличивался (ПО SMLogix, ПЛ
Вы сказали какой-то набор слов, мало что значащий для меня. "Как можно использовать энергию солнца, если оно светит только в одну сторону" - примерно так я вижу ваш вопрос.
__________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
10.06.2021, 17:45 | #30 |
Новичок
Регистрация: Jun 2021
Сообщения: 27
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Как сделать чтобы при перезагрузке ПЛК счетчик не увеличивался (ПО SMLogix, ПЛ
У меня есть переменная типа int. Первый бит этого слова включает насос. С внешней системы пришла запись первого бита, переменная стала равна 2 (физически переменная типа int стала равняться 2), далее мне надо обнулить эту переменную, так как переменная же сохранила свое состояние, она самопроизвольно ее не поменяла. Как это можно реализовать?
|