PDA

Просмотр полной версии : Owen logic



Oceandivide
02.12.2023, 18:33
Здравствуйте, в ходе реализации управления таймером через дискретные входы столкнулся с такой проблемой, что в случае арифметических операций сложения и вычитания не могу записать результат в одну переменную (среда разработки не позволяет это сделать) должно получится так в случае если пользователь нажимает кнопку увеличения на дискретный вход поступает единица и должно, что-то получится на подобии
int x = int x + 1
В случае вычитания
int x = int x - 1
Но среда разработки позволяет ссылатся только на один такой блок, подскажите пожалуйста как решить данную проблему, либо может у кого есть другая идея по реализации?

kondor3000
02.12.2023, 18:45
Здравствуйте, в ходе реализации управления таймером через дискретные входы столкнулся с такой проблемой, что в случае арифметических операций сложения и вычитания не могу записать результат в одну переменную (среда разработки не позволяет это сделать) должно получится так в случае если пользователь нажимает кнопку увеличения на дискретный вход поступает единица и должно, что-то получится на подобии
int x = int x + 1
В случае вычитания
int x = int x - 1
Но среда разработки позволяет ссылатся только на один такой блок, подскажите пожалуйста как решить данную проблему, либо может у кого есть другая идея по реализации?

Например так 72067

1exan
02.12.2023, 18:49
На самом деле вариантов несколько, например так:
72068

Вот и подтверждение, что решений много

Сергей0308
02.12.2023, 18:55
Здравствуйте, в ходе реализации управления таймером через дискретные входы столкнулся с такой проблемой, что в случае арифметических операций сложения и вычитания не могу записать результат в одну переменную (среда разработки не позволяет это сделать) должно получится так в случае если пользователь нажимает кнопку увеличения на дискретный вход поступает единица и должно, что-то получится на подобии
int x = int x + 1
В случае вычитания
int x = int x - 1
Но среда разработки позволяет ссылатся только на один такой блок, подскажите пожалуйста как решить данную проблему, либо может у кого есть другая идея по реализации?

А если элементы последовательно поставить?
В менеджере компонентов есть макрос универсального, реверсивного 32 битного счётчика, может его кишки посмотреть, там нечто подобное!

melky
02.12.2023, 19:20
Если это не одновременный + и - к переменной их и надо просто одно за другим действие ставить.
X add + y далее sub - y = newX

Oceandivide
02.12.2023, 20:36
Всем большое спасибо, оказывается всё было настолько просто

Dimensy
02.12.2023, 22:43
На перспективу. Так как мы кнопочками что-то меняем, то как минимум, необходимо ограничить изменяемое значение. А, еще, можно сделать так, чтобы при удержании кнопки значение автоматом менялось.
72069

Сергей0308
03.12.2023, 01:17
Мой вариант в вещественном виде:

72074

По R - запись числа со входа D_R, затем "убираем" R и входами + и - увеличиваем или уменьшаем записанное значение на величину на входах D+ D- cоответственно!
Выходное значение можно сделать энергонезависимым, если сделать энергонезависимой внешнюю переменную Q, как в моём проекте, всё!

72075

И, желаю ТС хотя бы научиться формулировать свои хотелки, в смысле, ясно и понятно, пока такого даже близко нет, каждый может интерпретировать по своему усмотрению!

kondor3000
03.12.2023, 11:07
Чем хорош ST, скопировал текст в ФБ и получил готовый блок с предустановкой, ограничением (0-100 можно изменить) и регулировкой при удержании 72077
А также возможностью переделки на Float, только изменением типа переменной в ФБ.

function_block fB //имя функционального блока.
var_input //объявление входных переменных
Plus : bool; //входная переменная с типом данных bool
Minus : bool;
In : udint;
end_var
var_output //объявление выходных переменных
Q : udint; //выходная переменная с типом данных udint
end_var
Q:=In;
if Plus then Q :=Q+1; end_if
if Minus then Q :=Q-1; end_if
if In<1 and Minus then Q :=0; end_if
if Q>=100 and Plus then Q :=100; end_if
end_function_block

Валенок
03.12.2023, 12:17
..
Можете пальцем мс отмерять ? Например - 10 ))
Завидую Вашей реакции.

МихаилГл
03.12.2023, 12:19
Ещё можно со временем удержания поиграть. Т.е. чем дольше держишь, тем больше дискрет прироста/убавления.

МихаилГл
03.12.2023, 12:19
Можете пальцем мс отмерять ? Например - 10 ))
Завидую Вашей реакции.

Да, нужен таймер или триггер.

Cs-Cs
03.12.2023, 16:39
Можете пальцем мс отмерять ? Например - 10 ))
Завидую Вашей реакции. Слышь! =) Ты не учитываешь барабанщиков!
Считаем. Например, песня из конца этого моего видео (тестового) имеет темп 200. Это значит, что в минуту идёт 200 ударов длительностью в 1/4 ноты.


Правая рука играет нотами в 1/8 длительности. То есть в два раза чаще, чем 1/4. То есть 200 х 2 = 400 ударов в минуту.
Ноги в одном месте припева играют в 1/16ую нот. То есть в 4 раза быстрее чем темп 200 или в 2 раза быстрее, чем руки. Значит 400 х 2 = 800 ударов в минуту.
Как это в мсек перевести-то? У меня с математикой туго. Вроде как 800 / 60 = 13,3 удара в секунду. И вроде как это у нас 13,3 Герца, а значит 1/13,3 = 0,075 сек, что ли?

Вот видео: https://www.youtube.com/watch?v=iPakSkITCcE
Смотреть с 1:10 и дальше. С примерно 1:30 внимание на ноги.