Увеличение числа

Прочие PLC и HMI на русском
Post Reply
ClemLinn
Posts: 2
Joined: Thu Dec 08, 2016 12:30 pm

Увеличение числа

Post by ClemLinn » Thu Dec 08, 2016 12:34 pm

Добрый день.

Необходимо написать программу. Задание такое:


Верхняя кнопка отвечает за увеличение по единице, если значение выхода достигает 255, то выход обнуляется и продолжается с нуля.
Нижняя кнопка отвечает за увеличение по десятке, если значение выхода достигает 255, то выход обнуляется и продолжается с нуля.
Средняя кнопка сбрасывает число в 0.
При длительном удержании, через 2 секунды должно начать автоматически увеличиваться выход, если удерживается верхняя, то по единице, если нижняя, то по десятке, с периодом полсекунды.

Пример:
Допустим нам надо ввести число 33
Вводится следующим образом: нажимаем верхнюю кнопку, вводится число 1, если будем удерживать больше 2 секунд должно выводиться 2, 3, 4... и т. д. до 33 или кратковременными нажатиями (33 раза) на верхнюю кнопку, или 3 раза на нижнюю и 3 раза на верхнюю.

Желательно с использованием R_Trig, F_Trig, TON и TOF.

Заранее большое спасибо.

Schtiel
Site Admin
Posts: 1100
Joined: Wed Sep 06, 2006 12:03 pm
Location: CIS

Post by Schtiel » Thu Dec 08, 2016 4:27 pm

Так в чем проблема? Что именно не получается?

ClemLinn
Posts: 2
Joined: Thu Dec 08, 2016 12:30 pm

Re:

Post by ClemLinn » Fri Dec 09, 2016 1:45 pm

Schtiel wrote:Так в чем проблема? Что именно не получается?

В том то и дело. Я не имею представления, как написать такую программу, ибо материала давалось очень немного.

Та программа, что есть, работает не совсем правильно. Извиняюсь, что сразу ее не записала.

IF (In_1) THEN
i:=i+1;
if (i=255) then
Out_1:=Value;
i:=0;
end_if;
END_IF;

IF (In_3) THEN
i:=i+10;
if (i=255) then
Out_1:=Value;
i:=0;
end_if;
END_IF;

IF (In_2) THEN
i:=0;
Value:=0;
Out_1:=0;
end_if;

Тут не хватает задержки, и я даже не знаю, как ее оформить(

Rex2701
Posts: 264
Joined: Wed Oct 13, 2010 8:44 am
Location: Russian Federation

Re: Увеличение числа

Post by Rex2701 » Wed Mar 15, 2017 4:21 pm

Конечно неправильно. Ведь условие

Code: Select all

i:=i+10; 
if (i=255) then 
Выполнится только в том случае, если i изначально делилось на 10 с остатком 5. В остальных 9-ти из 10-ти случаев - условие не сработает.
И еще 3 вопроса:
1. Из условия задачи непонятно: 255 является валидным значением или после 254 сразу должен идти 0?
2. В случае счёта по 10, что должно быть в счётчике при превышении 255? Если счёт был таким: 202, 212, 222, 232, 242, 252... Следующим должен быть обязательно 0 или 262-255=7?
3. Кнопки уменьшения не предусмотрены? В случае промаха человек должен каждый раз проматывать счётчик выше 255? Юзабилити как-то не очень.

И ещё надо подумать над тем, что счёт по 10 должен выполняться с некоторой паузой, иначе современные контроллеры с временами цикла 1 мс и менее, эти ваши 255 промотают быстрее чем глазом моргнёте.
А в целом - программка будет простой, пара-тройка нетворков.

Ryzhij
Posts: 404
Joined: Mon Mar 31, 2008 11:29 am
Location: Ryazan, Russia

Re: Увеличение числа

Post by Ryzhij » Thu Mar 16, 2017 4:30 am

Rex2701 wrote:Конечно неправильно. Ведь условие

Code: Select all

i:=i+10; 
if (i=255) then 
Выполнится только в том случае, если i изначально делилось на 10 с остатком 5.
...и было не больше 245.

Rex2701
Posts: 264
Joined: Wed Oct 13, 2010 8:44 am
Location: Russian Federation

Re: Увеличение числа

Post by Rex2701 » Thu Mar 16, 2017 3:20 pm

На STEP-7 будет как-то так:
Image
Image
Проверить в симуляторе не было времени, так что возможны глюки.

Post Reply