Всех приветствую!
Вот от меня зачаток.
Идея макроса не моя. Пытался воссоздать псевдосенсорное введение уставок 4-мя клавишами. "вверх", "вниз", "сброс" и "подтв"(ввод). Что смог реализовать:
однократная "1" на входах 1 или 2 соответственно увеличивают или уменьшает однократно задание на 1;
удержание "1" на этих входах начинает отсчёт уставки с плавным нарастанием скорости вверх или вниз;
предварительная величина уставки на выходе 1;
подтверждённая - на выходе 2;
"1" на 3 входе - сброс предварительной величины уставки;
"1" на 4 входе- ввод и запоминание уставки на выход 2;
Выношу на суд и критику для последующей доработки. Хотелось бы "добить" макрос до полнофункционально-рабочего состояния с возможностью его перещёлкиваться по разрядам меняющейся уставки, чтобы счёт шел немного быстрей. Такой "механизм" реализован во многих электронных приборах, когда количественное приращение единиц переходит в более высокий разряд десятков и увеличение происходит там, затем в сотнях и т.д.
__
а зачем вещественная арифметика?
сразу разделить 1000 на выход из CTN2 нельзя?
------------------
и ещё...
как обычно считают "механизмы"?
при нажатии они отсчитывают +1 (-1), ждут немного, а дальше с постоянной скоростью делают "нарастание".
-----------------
далее....
если нужно считать сначала единицы, потом 10ки, затем сотни и т.д.
то можно просто считать единицы, но не сразу "ответ", а сначала "дельту", и приплюсовывать её только после того как пользователь отпустит кнопку.
вы спросите - зачем дельту?
а шоб с ней сделать интересное превращение:
N=(10^(n div 10))*(n mod 10)
где n - наша "дельта", с обычным нарастанием "+1"
а N - это итоговая дельта, которую хочет получить нетерпеливый пользователь (с переменным нарастанием)
Последний раз редактировалось AI!; 06.02.2013 в 09:53.
возведение произвольного целого числа в произвольную целую степень
(показатель степени может быть от 0 до 15)
Большое спасибо за замечания и намёки на верный путь. К сожалению к программированию только ещё подступаюсь, потому не знаю все законы машинной логики достоверно.
"а зачем вещественная арифметика?
сразу разделить 1000 на выход из CTN2 нельзя?"
По отношению к данной лишней операции могу в своё оправдание заметить, что даже и не предполагал, что машина результат деления к примеру 1 на 3 выводит без дробной части, а потому предварительно подготовил ей более "подходящий" для такого случая вариант в виде плывуна с запятой ;-)
Из этой же оперы и умножение на 1000, т.к. с истинного пути сбило то, что указание уставки в свойствах ФБ генератора происходит в секундах, а при создании блока записи в ФБ генератора надо значение подготавливать в мс.
Долго вертел ввод значения в ФБ и так и эдак, т.к. значения после деления 1 на число ну никак не хотело вводиться , пока не прочёл в мануале по OL неприметную строчку об этом и не нашёл более подходящего выхода, как приумножить переменную на 1000![]()
"...как обычно считают "механизмы"?
при нажатии они отсчитывают +1 (-1), ждут немного, а дальше с постоянной скоростью делают "нарастание"..."
Ну в принципе у меня так и реализовано это( во всяком случае визуально результат похожий), только не совсем правильно...
И ещё сегодня заметил небольшой нюанс в пошаговом режиме симуляции. Заметил, что при достижении одной из уставок генератора значения 50 мс и ниже, вторая начинаетУВЕЛИЧИВАТЬСЯ!!! Похоже в этом виновато ограничение времени цикла 100мс, меньше которого генератор результат суммы уставок включенного и выключенного состояния не может установить и поэтому когда запись в ФБ генератора заставляет его сделать уставку 49 мс, то вторая автоматически становится 51 мс. Затем ролями они меняются. Таким образом скорость роста результирующей уставки макроса после этого не увеличивается. Ведь генератор-то всё-равно тактирует счётчик с периодом в 100мс. А посему алгоритм "перескока" увеличения с единиц на старший разряд и далее как нельзя кстати.
А вот с дельтой ещё придётся "разобраться"![]()
Ещё раз спасибо!
__
1) при создании нового проекта выберите ПР110, а не ПР114, тогда возможности пользоваться вещественной арифметикой не будет.
2) про паузу, "дельту" и т.д. - это мои наблюдения, возможно не совсем правильные
3) про 100мс - в режиме симулятора выберите "время цикла", которое считаете нужным
его так же можно ввести вручную - хоть 1мс
так же есть "период", это сколько реального времени будет длиться виртуальное время симулятора
(внизу есть счётчик времени ПР)
PS меняя эти значения иногда удобно замедлить процессы в ПР, что бы разглядеть процессы или убыстрить, что бы не ждать долго.
угадайте, сколько будет, если к 65535
прибавить 1? - снова 65535! забавно
PS предлагаю свой вариант
правда есть одна особенность - если одновременно придёт сигнал и "+" и "-"
то ничего не изменится.
(по моей логике это правильно! т.к. при неявных обратных связях возможен рассинхрон этих сигналов, когда составитель схемы их ждёт одновременно и тогда ответ будет как и у меня.)
PPS я бы и детект фронта на входах +/- убрал из макроса, т.к. зачастую сигнал к счётчику уже приходит импульсный,
но думаю что старожилы будут против, и оставил их.
Последний раз редактировалось AI!; 08.02.2013 в 11:51.
Предлагаю модернизированный макрос компаратора реальных чисел, в котором, можно задать условия работы компаратора, включая управляющие входы в любой комбинации.