Доброго времени! Хочу поделиться своим вариантом решения задачки про несколько насосов переключающихся с периодичностью в несколько суток. Для себя я определил ТЗ по которому необходим алгоритм для периодического включения и отключения определённого количества каналов управления. При этом минимальное количество каналов = 2, а максимальное = 32. Так же необходимо определить количество одновременно включенных каналов участвующих в ротации из диапазона от 1 до общего числа каналов. Должна иметься возможность менять количество одновременно включенных каналов из программы по результатам выполнения алгоритма. При возникновении ошибки в работе одного или нескольких каналов должен быть сформирован регистр ошибок каждый бит которого, начиная от младшего, соответствует наличию или отсутствию ошибки в каждом конкретном канале, начиная от первого, где 1 – ошибка, 0 – отсутствие ошибки. Формирование регистра ошибок я не буду описывать.
В результате у меня получился макрос Npump 2018-03-25_18-40-43.png
CL – вход для подключения генератора тактовых импульсов, фронт каждого импульса производит ротацию выбранных каналов. Если необходимо переключение насосов раз в 24 часа, то и период генерируемых импульсов должен быть равен 24 часам.
ER – вход для битовой последовательности регистра ошибок. Например, если присутствуют ошибки в работе второго и четвёртого канала, то регистр ошибок равен 10 (b#00001010)/
Nc – вход общего числа используемых каналов. Это число целесообразно задавать константой.
IN – вход для учёта внутри макроса уже используемых и «ошибочных» каналов. На этот вход ничего подавать не нужно.
N – вход для вычисления макросом собственного порядкового номера. На этот вход также ничего подавать не нужно.
Np – вход определяющий количество одновременно включенных каналов изменяемое из алгоритма.
Выходы макроса по числу, расположению и назначению соответствуют входам, но не всегда повторяют их. Это сделано для каскадного соединения макросов. 2018-03-25_18-44-19.png
Количество каскадов при таком соединении соответствует максимальному количеству одновременно включенных каналов при ротации. Из алгоритма можно менять это число, но только в сторону уменьшения. 2018-03-25_18-34-54.png
Вот небольшой пример использования четырёх каскадов макроса Npump внутри другого макроса.
После запуска симулятора установите на вход (I7) число 2 (два одновременно включенных канала при ротации). На вход (I2) нужно будет подать количество суток равное периоду переключения. Для симуляции лучше оставить этот вход в нуле, тогда период будет приблизительно равен 1 секунде, что гораздо удобнее для наглядности. Для запуска схемы надо вход (I1) перевести в 1.