Page 1 of 1

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

Posted: Thu Dec 08, 2016 12:34 pm
by ClemLinn
Добрый день.

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


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

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

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

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

Posted: Thu Dec 08, 2016 4:27 pm
by Schtiel
Так в чем проблема? Что именно не получается?

Re:

Posted: Fri Dec 09, 2016 1:45 pm
by ClemLinn
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;

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

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

Posted: Wed Mar 15, 2017 4:21 pm
by Rex2701
Конечно неправильно. Ведь условие

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 промотают быстрее чем глазом моргнёте.
А в целом - программка будет простой, пара-тройка нетворков.

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

Posted: Thu Mar 16, 2017 4:30 am
by Ryzhij
Rex2701 wrote:Конечно неправильно. Ведь условие

Code: Select all

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

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

Posted: Thu Mar 16, 2017 3:20 pm
by Rex2701
На STEP-7 будет как-то так:
Image
Image
Проверить в симуляторе не было времени, так что возможны глюки.