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

Необходимо поморгать светодиодами (выходами) определенное количество раз.

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

Автор темы
vom
здесь недавно
здесь недавно
Сообщения: 9
Зарегистрирован: 09 сен 2021, 11:13
Имя: Алексей
Страна: Россия
город/регион: Псков
Поблагодарили: 1 раз

Необходимо поморгать светодиодами (выходами) определенное количество раз.

Сообщение vom »

Коллеги, добрый день. Опыта у меня в TiaPortal не очень много, поэтому обращаюсь к более опытным коллегам.
Свои задачи я решаю, в основном, на языке SCL.
Задача состоит в следующем. У меня есть пороговое значение, тип int (например 24), оно может инкрементироваться или наоборот. При нажатии на определенную клавишу (вход - тип bool), светодиоды должны моргнуть, один светодиод два раза, второй через небольшую паузу четыре раза и потом не моргать, до следующего нажатия на вход. И так в зависимости от приходящего значения, светодиоды будут выдавать сохраненные значения. Буду признателен за подробную инструкцию по решению этой задачи. :ext_book:
Аватара пользователя

Nicolayy
освоился
освоился
Сообщения: 280
Зарегистрирован: 14 фев 2014, 11:55
Имя: Николай
Страна: Россия
Благодарил (а): 9 раз
Поблагодарили: 64 раза

Необходимо поморгать светодиодами (выходами) определенное количество раз.

Сообщение Nicolayy »

vom, сделай FB, передавай в нее две переменные - свое число и сигнал нажатия кнопки. Создай статическую переменную типа int, назови ее Stage (этап работы), которая по умолчанию будет равна нулю. В начале функции проверяй, что если Stage = 0 AND Btn = true, тогда присваивай Stage := 1 - это будет начало работы и больше на кнопку внимание не обращай. Ну а дальше просто раздели всё поэтапно, т.е. допустим, этап 1 - это включить первый раз светодиод №1 и считать время, таймер досчитал - переход на этап 2 - выключить светодиод и опять считать время, потом этап 3 - второй раз тот же светодиод включить и т.д. Т.е. если тебе не надо третий раз его включать - тогда сразу переходишь на этап, который уже за паузу между led1 и led2 отвечает, а после него - на этап, который вторым светодиодом управляет. Напишешь всё это через CASE и будет всё красиво. Сколько раз включать - это ты просто посчитаешь, разделив заданное число (если оно >10) на десять и округлив до целой части (это для led1) потом то, что получилось, умножаешь снова на десять и вычитаешь из исходного числа - это для led2. Ну т.е. ceil(24/10)=2 и 24-(2*10)=4. Когда все этапы пройдут, т.е. светодиоды отморгают, в конце снова присваиваешь Stage := 0, т.е. функция снова ждет следующего нажатия кнопки. Заданное число надо хранить в статических переменных и обновлять только при нажатии кнопки, чтобы в процессе оно не менялось. Получится в итоге FB с одним экземлярным DB, где всё хранится.

Автор темы
vom
здесь недавно
здесь недавно
Сообщения: 9
Зарегистрирован: 09 сен 2021, 11:13
Имя: Алексей
Страна: Россия
город/регион: Псков
Поблагодарили: 1 раз

Необходимо поморгать светодиодами (выходами) определенное количество раз.

Сообщение vom »

Спасибо за ответ. Я все вычисления чисел произвел, а вот в CASE не знаю как задать количество морганий. :ges_hmm:

Автор темы
vom
здесь недавно
здесь недавно
Сообщения: 9
Зарегистрирован: 09 сен 2021, 11:13
Имя: Алексей
Страна: Россия
город/регион: Псков
Поблагодарили: 1 раз

Необходимо поморгать светодиодами (выходами) определенное количество раз.

Сообщение vom »

На LADе все получилось реализовать при помощи двух счетчиков CTU. :ext_hooray:
Аватара пользователя

Nicolayy
освоился
освоился
Сообщения: 280
Зарегистрирован: 14 фев 2014, 11:55
Имя: Николай
Страна: Россия
Благодарил (а): 9 раз
Поблагодарили: 64 раза

Необходимо поморгать светодиодами (выходами) определенное количество раз.

Сообщение Nicolayy »

vom писал(а): 21 сен 2021, 13:23 На LADе все получилось реализовать при помощи двух счетчиков CTU
Блин, в натуре так )). Вчера на Logo была такая же задача (чтоб лампа моргала количество раз, соответствующее номеру аварии). Один таймер (генератор импульсов), два счетчика - и дело в шляпе.

ellissar
здесь недавно
здесь недавно
Сообщения: 11
Зарегистрирован: 17 дек 2014, 18:21
Имя: Павел
Страна: Россия
город/регион: Тюмень

Необходимо поморгать светодиодами (выходами) определенное количество раз.

Сообщение ellissar »

vom писал(а): 21 сен 2021, 13:23 На LADе все получилось реализовать при помощи двух счетчиков CTU. :ext_hooray:
Поделитесь как именно вы это реализовали?

Автор темы
vom
здесь недавно
здесь недавно
Сообщения: 9
Зарегистрирован: 09 сен 2021, 11:13
Имя: Алексей
Страна: Россия
город/регион: Псков
Поблагодарили: 1 раз

Необходимо поморгать светодиодами (выходами) определенное количество раз.

Сообщение vom »

Создаем блок Cyclic1000, в нем прописываем строчку "BitOn" := NOT "BitOn"; это значит, что каждую секунду будет меняться значение этой ячейки.
Далее, у меня в функциональном блоке GetValue есть двухзначное число, мы его разделяем по разрядам на два аргумента.
#argument1 := "GetSpeed_DB".alertSpeedInt / 10;
#argument2 := "GetSpeed_DB".alertSpeedInt MOD 10;
один аргумента это десятки, второй единицы.
Далее в функции Gen реализуем алгоритм в один счетчик отправляем #argument1, во второй #argument2
смотрим файлы

Отправлено спустя 31 минуту 1 секунду:
ellissar писал(а): 17 окт 2021, 15:36
vom писал(а): 21 сен 2021, 13:23 На LADе все получилось реализовать при помощи двух счетчиков CTU. :ext_hooray:
Поделитесь как именно вы это реализовали?
Ответил ниже по ветке.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Ответить

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