1. Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
  2. Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
  3. Не писать свой вопрос в первую попавшуюся тему - вместо этого создать новую тему.
  4. За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения.
  5. Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
  6. Перед тем как что-то написать - читать здесь и здесь, а студентам - обязательно здесь.
  7. Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.

S7 1200 и modbus rtu, запись значений

ПЛК SIMATIC (S7-200, S7-1200, S7-300, S7-400, S7-1500, ET200)
Ответить

Автор темы
Demus
здесь недавно
здесь недавно
Сообщения: 6
Зарегистрирован: 19 авг 2018, 13:39
Имя: Денис

S7 1200 и modbus rtu, запись значений

Сообщение Demus »

Добрый день. С сименсом опыта маловато, поэтому прошу направить в нужную сторону. Есть задача считывать и записывать переменные по модбас RTU. Сименс в качестве мастера.
ПО чтению все понятно.
А как записывать значения не периодически, а только при изменении значения тега (переменной)? Потому что оборудование еще управляется вручную. Странно будет, если контроллер все время будет слать значение выключить.

Михайло
почётный участник форума
почётный участник форума
Сообщения: 3559
Зарегистрирован: 10 ноя 2009, 04:58
Имя: Толмачев Михаил Алексеевич
город/регион: г. Чехов, МО
Благодарил (а): 6 раз
Поблагодарили: 253 раза

S7 1200 и modbus rtu, запись значений

Сообщение Михайло »

Demus писал(а): 19 авг 2018, 13:44 Странно будет, если контроллер все время будет слать значение выключить.
Ничего странного, обычно так и делают в автоматизации производства. Это надёжнее и безопаснее, чем отправка по событию "изменение тэга": в этом случае можно ошибиться и, извините, просрать текущее состояние.

Отправка по событию делается просто: нужно сохранить значение тэга в промежуточной памяти и в следующем цикле сравнить с новым значением тэга. И так - циклически.
Аватара пользователя

petr2off
эксперт
эксперт
Сообщения: 1602
Зарегистрирован: 06 янв 2016, 19:45
Имя: Петров В.Л.
Страна: Россия
город/регион: Красноярск
Благодарил (а): 69 раз
Поблагодарили: 185 раз

S7 1200 и modbus rtu, запись значений

Сообщение petr2off »

Михайло писал(а): 19 авг 2018, 18:35
Ничего странного, обычно так и делают в автоматизации производства. Это надёжнее и безопаснее, чем отправка по событию "изменение тэга": в этом случае можно ошибиться и, извините, просрать текущее состояние.э
Хочу свои 5 копеек добавит, есть еще способ защиты от импульсных помех, когда, например сигнал считается выставленным, когда он на протяжении нескольких периодов стоит. Т.е. согласен с автором замечания полностью, ситуация периодического чтения ТЭГов, совершенно штатная и общепринятая.

Автор темы
Demus
здесь недавно
здесь недавно
Сообщения: 6
Зарегистрирован: 19 авг 2018, 13:39
Имя: Денис

S7 1200 и modbus rtu, запись значений

Сообщение Demus »

petr2off писал(а): 20 авг 2018, 05:08 Т.е. согласен с автором замечания полностью, ситуация периодического чтения ТЭГов, совершенно штатная и общепринятая.
С чтением конечно так и обстоят дела.
Но когда ПЛК включает приточную приточную установку, потом приходит работник поменять фильтр или просто надоела она шуметь и выключает ее руками с контроллера щита автоматики приточки. И тут наш ПЛК опять запишет в нее старт.

Отправлено спустя 4 минуты 3 секунды:
Михайло писал(а): 19 авг 2018, 18:35 Отправка по событию делается просто: нужно сохранить значение тэга в промежуточной памяти и в следующем цикле сравнить с новым значением тэга. И так - циклически.
Что-то типа такого имеете ввиду?
Изображение
Аватара пользователя

petr2off
эксперт
эксперт
Сообщения: 1602
Зарегистрирован: 06 янв 2016, 19:45
Имя: Петров В.Л.
Страна: Россия
город/регион: Красноярск
Благодарил (а): 69 раз
Поблагодарили: 185 раз

S7 1200 и modbus rtu, запись значений

Сообщение petr2off »

С чего ради он запишет старт ? Отвыкайте от вредной привычки пользоваться потенциальными командами. Есть импульсная команда включить, и есть импульсная команда выключить. Т.е. если я выключу приточку, то при включении PLC ровным счетом ничего не произойдет, пока не будет подана импульсная команда старт.

Автор темы
Demus
здесь недавно
здесь недавно
Сообщения: 6
Зарегистрирован: 19 авг 2018, 13:39
Имя: Денис

S7 1200 и modbus rtu, запись значений

Сообщение Demus »

petr2off писал(а): 20 авг 2018, 09:52 С чего ради он запишет старт ? Отвыкайте от вредной привычки пользоваться потенциальными командами. Есть импульсная команда включить, и есть импульсная команда выключить. Т.е. если я выключу приточку, то при включении PLC ровным счетом ничего не произойдет, пока не будет подана импульсная команда старт.
Распишу как вижу это я. Возможно что-то у сименса не так, как у других производителей.
Есть скада например. Оператор меняет уставку температуры на скаде. Она уходит в контроллер. Либо сам контроллер ее поменяет, по своему алгоритму. Уставка изменилась. Ее нужно передать на контроллер приточной установки. Елси бы скада у меня напрямую работала с контроллером приточной установки, то проблем нет. Но с ним работает плк сименс. Так вот сименс не понимает изменилась у него уставка или нет. Он может ее писать либо периодически (как организовано чтение переменных), либо по какому-то сигналу. Этот сишгнал я так понимаю придется колхозить (сравнивание в предыдущим значением). Вот при периодической записи приточка будет давать уставку из контроллера сименс, даже если человек руками подойдет поменяет.
Признак изменения переменной я где-то точно видел. Есть он и в winCC например. Вот хотел узнать есть ли такое в s7 или нужно колхозить.
Аватара пользователя

petr2off
эксперт
эксперт
Сообщения: 1602
Зарегистрирован: 06 янв 2016, 19:45
Имя: Петров В.Л.
Страна: Россия
город/регион: Красноярск
Благодарил (а): 69 раз
Поблагодарили: 185 раз

S7 1200 и modbus rtu, запись значений

Сообщение petr2off »

Давайте по порядку. Сименс тут не причем, не он придумал IECовские языки. Это уже не чтение, а управление устройством. С похожей проблемой я сталкивался, при программировании частотников.
Как я сделал. У частотника есть регистр - задание частоты. И есть регистр текущеее значение частоты. Это интерфейс общение с устройством (по Modbus, yfghbvth).
У оператора в СКАДА есть экранный интерфейс, набор команд управления, рассмотрим например команду оператора - прямое задание частоты.
Есть экранное поле - для значения частоты, есть кнопка - импульсная дискретная команда задать частоту (истина, пока нажата кнопка). Я внес новое задание в поле, оно передалось в PLC, во внутренний тэг задатчика, но пока ничего не произошло. Далее нажатие на кнопку - сработала импульсная команда задать частоту, в PLC значение задатчика переписывается в регистр частотника. Он начинает его отрабатывать.
Тонкий момент при перезагрузки PLC. Если ничего не делать, то начальное состояние регистра задания частоты частотника будет послано на него, если оно 0 - то он встанет. Эту ситуацию нужно обработать. Есть понятие старта контроллера (в сименсе даже специальный OB для этого есть), если используется другой контроллер - тупо заводится начальная логическая переменная, и первым же шагом выполняется стартовая обработка по условию, после чего переменная инвертируется и эта часть более не обрабатывается.)
При отработки старта PLC значение из регистра текущей частоты переписывается в регистр задание частотника (возможно при этом некоторая потеря или набор частоты) в зависимости от точности двойного преобразования. И все, далее управление - либо от оператора (режим ДУ) либо от регулятора (режим АУ) либо от команд функционального управления.
Это чистая алгоритмизация, конкретный контроллер может лишь дополнительные инструменты для этого предоставить (например специальный OB как сименс)

12zero
здесь недавно
здесь недавно
Сообщения: 26
Зарегистрирован: 29 май 2015, 10:21
Имя: Сергей Александрович
Страна: Россия

S7 1200 и modbus rtu, запись значений

Сообщение 12zero »

Demus писал(а): 19 авг 2018, 13:44 Добрый день. С сименсом опыта маловато, поэтому прошу направить в нужную сторону. Есть задача считывать и записывать переменные по модбас RTU. Сименс в качестве мастера.
ПО чтению все понятно.
А как записывать значения не периодически, а только при изменении значения тега (переменной)? Потому что оборудование еще управляется вручную. Странно будет, если контроллер все время будет слать значение выключить.

Я делаю так
[+]
Изображение Изображение


Использую компаратор проверяющий текущее значение переменной и уставку. Если они совпадают перехожу к следующему блоку.

Автор темы
Demus
здесь недавно
здесь недавно
Сообщения: 6
Зарегистрирован: 19 авг 2018, 13:39
Имя: Денис

S7 1200 и modbus rtu, запись значений

Сообщение Demus »

petr2off писал(а): 20 авг 2018, 17:01 Давайте по порядку. Сименс тут не причем, не он придумал IECовские языки. Это уже не чтение, а управление устройством. С похожей проблемой я сталкивался, при программировании частотников.
Как я сделал. У частотника есть регистр - задание частоты. И есть регистр текущеее значение частоты. Это интерфейс общение с устройством (по Modbus, yfghbvth).
У оператора в СКАДА есть экранный интерфейс, набор команд управления, рассмотрим например команду оператора - прямое задание частоты.
Есть экранное поле - для значения частоты, есть кнопка - импульсная дискретная команда задать частоту (истина, пока нажата кнопка). Я внес новое задание в поле, оно передалось в PLC, во внутренний тэг задатчика, но пока ничего не произошло. Далее нажатие на кнопку - сработала импульсная команда задать частоту, в PLC значение задатчика переписывается в регистр частотника. Он начинает его отрабатывать.
Тонкий момент при перезагрузки PLC. Если ничего не делать, то начальное состояние регистра задания частоты частотника будет послано на него, если оно 0 - то он встанет. Эту ситуацию нужно обработать. Есть понятие старта контроллера (в сименсе даже специальный OB для этого есть), если используется другой контроллер - тупо заводится начальная логическая переменная, и первым же шагом выполняется стартовая обработка по условию, после чего переменная инвертируется и эта часть более не обрабатывается.)
При отработки старта PLC значение из регистра текущей частоты переписывается в регистр задание частотника (возможно при этом некоторая потеря или набор частоты) в зависимости от точности двойного преобразования. И все, далее управление - либо от оператора (режим ДУ) либо от регулятора (режим АУ) либо от команд функционального управления.
Это чистая алгоритмизация, конкретный контроллер может лишь дополнительные инструменты для этого предоставить (например специальный OB как сименс)
Полностью со всем согласен, кроме как то, у меня порядка 120 насчитывается объектов для записи в данном проекте. Если на каждый ставить кнопку "запись" то заказчик пошлет меня далеко. 240 кнопок в интерфейсе (пускай и в разных окнах), в котором еще и считываемые данные будут (раз в 5 больше), это слишком. Пока пришел к тому, чтобы делать сравнение.
Аватара пользователя

petr2off
эксперт
эксперт
Сообщения: 1602
Зарегистрирован: 06 янв 2016, 19:45
Имя: Петров В.Л.
Страна: Россия
город/регион: Красноярск
Благодарил (а): 69 раз
Поблагодарили: 185 раз

S7 1200 и modbus rtu, запись значений

Сообщение petr2off »

Конкретный визуальный интерфейс - это зависит от задачи, но осмелюсь просить - а кем эти уставки меняются ? Разве не оператором ?
А раз так, какой то визуальный механизм все равно будет. 120 объектов для записи - это на самом деле не много. Поле и кнопка - это просто самый простой механизм. Естественно он не единственный. На то Вы и инженер - что бы придумать удобный и безопасный механизм работы с уставками.

Михайло
почётный участник форума
почётный участник форума
Сообщения: 3559
Зарегистрирован: 10 ноя 2009, 04:58
Имя: Толмачев Михаил Алексеевич
город/регион: г. Чехов, МО
Благодарил (а): 6 раз
Поблагодарили: 253 раза

S7 1200 и modbus rtu, запись значений

Сообщение Михайло »

Demus писал(а): 21 авг 2018, 09:23 Пока пришел к тому, чтобы делать сравнение.
Есть два способа:
1. Работа по событиям. Нужно следить за изменением значений ВСЕХ тэгов (наверняка забудете про какую-нибудь замухрыжную переменную и ваша система в определённый момент не сработает и разбирательство этого бага может затянуться на годы).
2. Работа в реальном времени. Никаких изобретательств головного мозга.

Да, есть неасутпшные системы (не СРВ), где на уровне ОС реализована событийная логика, ради экономии траффика и в связи с допустимым выводом некоторых компонентов из системы в процессе эксплуатации. Но здесь тоже возникают непонятки, как поведёт себя система после перезагрузки и т.д.

Но АСУТП - система реального времени, здесь железо (микропроцессоры) заточены на ровный цикл исполнения программы, протоколы реального времени и всё такое.

ASUTP_PLC
эксперт
эксперт
Сообщения: 1055
Зарегистрирован: 11 ноя 2012, 18:21
Имя: Нурисламов Руслан М.
Страна: Казахстан
город/регион: Алматы
Благодарил (а): 23 раза
Поблагодарили: 31 раз

S7 1200 и modbus rtu, запись значений

Сообщение ASUTP_PLC »

petr2off писал(а): 20 авг 2018, 09:52 С чего ради он запишет старт ? Отвыкайте от вредной привычки пользоваться потенциальными командами. Есть импульсная команда включить, и есть импульсная команда выключить. Т.е. если я выключу приточку, то при включении PLC ровным счетом ничего не произойдет, пока не будет подана импульсная команда старт.
Всегда интересовал вопрос. Импульсная команда старт ушла. Частотник должен быть в работе и молотить, молотить.
Частотник ловит событие /это может быть перегруз по току к примеру, двигатель тельфера держится грузом/. Или происходит событие - перенапряжение, или наоборот просадка питающего напряжения. Частотник - в стоп.
Все... От команды ушедшей в контроллер ничего не осталось. Он сам не знает, включен априори частотник или нет.

Отправлено спустя 6 минут :
Demus писал(а): 21 авг 2018, 09:23
petr2off писал(а): 20 авг 2018, 17:01 Давайте по порядку. Сименс тут не причем, не он придумал IECовские языки. Это уже не чтение, а управление устройством. С похожей проблемой я сталкивался, при программировании частотников.
Как я сделал. У частотника есть регистр - задание частоты. И есть регистр текущеее значение частоты. Это интерфейс общение с устройством (по Modbus, yfghbvth).
У оператора в СКАДА есть экранный интерфейс, набор команд управления, рассмотрим например команду оператора - прямое задание частоты.
Есть экранное поле - для значения частоты, есть кнопка - импульсная дискретная команда задать частоту (истина, пока нажата кнопка). Я внес новое задание в поле, оно передалось в PLC, во внутренний тэг задатчика, но пока ничего не произошло. Далее нажатие на кнопку - сработала импульсная команда задать частоту, в PLC значение задатчика переписывается в регистр частотника. Он начинает его отрабатывать.
Тонкий момент при перезагрузки PLC. Если ничего не делать, то начальное состояние регистра задания частоты частотника будет послано на него, если оно 0 - то он встанет. Эту ситуацию нужно обработать. Есть понятие старта контроллера (в сименсе даже специальный OB для этого есть), если используется другой контроллер - тупо заводится начальная логическая переменная, и первым же шагом выполняется стартовая обработка по условию, после чего переменная инвертируется и эта часть более не обрабатывается.)
При отработки старта PLC значение из регистра текущей частоты переписывается в регистр задание частотника (возможно при этом некоторая потеря или набор частоты) в зависимости от точности двойного преобразования. И все, далее управление - либо от оператора (режим ДУ) либо от регулятора (режим АУ) либо от команд функционального управления.
Это чистая алгоритмизация, конкретный контроллер может лишь дополнительные инструменты для этого предоставить (например специальный OB как сименс)
Полностью со всем согласен, кроме как то, у меня порядка 120 насчитывается объектов для записи в данном проекте. Если на каждый ставить кнопку "запись" то заказчик пошлет меня далеко. 240 кнопок в интерфейсе (пускай и в разных окнах), в котором еще и считываемые данные будут (раз в 5 больше), это слишком. Пока пришел к тому, чтобы делать сравнение.
У нас был пример, нужно было установке принимать кучу параметров для работы. При этом еще оператор должен был имел возможность менять уставки.
Мы могли на старт-ап контроллера прописывать по дефолту таблицы. Но нет. Тогда операция вкл/выкл затерет режимы.
В итоге родили таблицу. На панели прописали позиции, где вбиваются данные. Содержимое таблицы - на бумажку, и оператору в зубы. Если выключается/включается остановка, первая процедура - корректно прописать данные.
Заодно контроль, что данные вбил человек, а не контроллер так решил.
Аватара пользователя

petr2off
эксперт
эксперт
Сообщения: 1602
Зарегистрирован: 06 янв 2016, 19:45
Имя: Петров В.Л.
Страна: Россия
город/регион: Красноярск
Благодарил (а): 69 раз
Поблагодарили: 185 раз

S7 1200 и modbus rtu, запись значений

Сообщение petr2off »

Еще как знает. Во первых, есть биты состояния вкл/выкл. Есть регистр частоты. Т.е. если частота вращения движка > Частотник работает. Более того, у него еще и регистр диагностики есть. Все не так печально.

ASUTP_PLC
эксперт
эксперт
Сообщения: 1055
Зарегистрирован: 11 ноя 2012, 18:21
Имя: Нурисламов Руслан М.
Страна: Казахстан
город/регион: Алматы
Благодарил (а): 23 раза
Поблагодарили: 31 раз

S7 1200 и modbus rtu, запись значений

Сообщение ASUTP_PLC »

petr2off писал(а): 23 авг 2018, 07:12 Еще как знает. Во первых, есть биты состояния вкл/выкл. Есть регистр частоты. Т.е. если частота вращения движка > Частотник работает. Более того, у него еще и регистр диагностики есть. Все не так печально.
Всегда приходится обдумывать. Если система на PLC мониторинга - это не так важно. Оператор всегда увидит что с частотника актуальная частота, и она не 0. А когда в логике прописываешь техпроцесс - тут кучу сравнений нужно.
Бывает даже запоминать что запуск произошел.
Мне как-то в обычную трубу надо было воду отправлять. И задвижки, без концевиков. Такой объем логики, и триггер специально, что там была команда открывать задвижку. И куча состояний, которые контроллер из расходомера, + из предыдущих команд определял. Считаю это не шибко правильным. Но иногда никак не обойтись без того.
Подытоживая - значит было бы более правильно заводить отдельный сигнал обратной связи, и контроллер по этому сигналу будет логику процесса отрабатывать? // это как бы правильно, но задаст оператор команду пуск, а уставка частоты уйдет 0. Частотник в старте, но не в работе.

Отправлено спустя 12 минут 50 секунд:
У нас была заморочка, в том что по протоколу очень долго данные шли. /более секундные задержки, не один частотник был/.
В итоге определение состояния в котором находится тот же частотник - идет определенное время (когда его нельзя назвать реалтайм, это проблема).
Поэтому считаю можно модель вселенной в PLC иметь, можно и по сигналам это определять. Первое - это быстрое принятие решений.
Второй вариант - решение принимается не быстро, а как получится.
Аватара пользователя

petr2off
эксперт
эксперт
Сообщения: 1602
Зарегистрирован: 06 янв 2016, 19:45
Имя: Петров В.Л.
Страна: Россия
город/регион: Красноярск
Благодарил (а): 69 раз
Поблагодарили: 185 раз

S7 1200 и modbus rtu, запись значений

Сообщение petr2off »

Ну думать то всегда надо. В моем случае, команда пуск означала пуск насоса. И частотник его выходил на 300 оборотов, согласно настройкам частотника. И по команде пуск в задатчик частоты те же 300 оборотов писались. И в слове состояния выставлялся бит - в работе. Если коротко -нерешаемых проблем как правило нет. Но есть определенные правила, которые лучше соблюдать, Одно из таких - импульсные команды предпочтительней. Конечно, из любого правила есть исключения - например командные блокировки. Но они лишь подтверждают основное правило.
Ответить

Вернуться в «Simatic TIA Portal»