Ранее в какой-то теме довольно долго "очередь" обсуждали: http://www.owen.ru/forum/showthread....17153&page=218
Вкратце суть такова: появляются по очереди сигналы на входах, в той же последовательности активируются соответствующие входам выхода, включено всегда не более одного выхода, например включаются по очереди входа 1, 3, 5, 7 - включается 1 выход, когда 1 вход выключается, включается 3 выход и так далее, проблема была в том, что сигнал на входах должен был держаться до включения соответствующего ему выхода, иначе логика нарушалась, короче доработал схему, теперь логика не должна нарушаться в этом случае, просто соответствующий входу выход выпадает из очереди, может кто придумает проще, будет интересно посмотреть:
Очередь_8.1.PNG
https://yadi.sk/d/_GL1wswM3aYbjU
Немного "подрихтовал":
Очередь_8.2.PNG
https://yadi.sk/d/J6Fzww5s3aZF7Q
Без проблем можно расширить до 32 входов-выходов! ПР с максимально возможным количеством модулей расширения по внутренней шине имеющихся на данный момент в продаже имеет только 28 входов, считая и аналоговые, выходов и того меньше!
Или так в виде готового макроса:
Макрос очередь 8 Х 8.PNG Макрос очередь 8 Х 8_1.PNG Макрос очередь 8 Х 8_2.PNG Макрос очередь 8 Х 8_3.PNG Макрос очередь 8 Х 8_7.PNG Макрос очередь 8 Х 8_4.PNG Макрос очередь 8 Х 8_5.PNG Макрос очередь 8 Х 8_6.PNG
Вроде работает как задумано, но в симуляторе невозможно посмотреть работу макроса DTRIG(входит в состав), всякие настройки делал, но сразу перескакивает минимум на 16 циклов и на выходе значение мгновенно изменяется если все входа включить, а должно постепенно с каждыми двумя циклами добавляться один вход(его весовой коэффициент), короче, лыжи не едут и всё, если в симуляторе не смотреть, то всё работает как задумано!
https://yadi.sk/d/nn6fHj3L3aa54G
С симулятором разобрался, сделал время цикла = 1 мс и всё нормально запоказывало, был не прав, исправлюсь!
Надеюсь всем понятно как это просто устроено, имею ввиду алгоритм работы?
Еще усовершенствовал(стала быстрей в 2 раза), теперь опрос всех входов(8) за 8 циклов программы и сделал совсем "предсказуемой", то есть если включатся сразу несколько входов(что на практике маловероятно), то младший вход(по номеру и весовому коэффициенту в программе) имеет приоритет, например, если одновременно включатся все 8 входов, то активируется первый выход, когда первый вход выключится, включится второй выход и так далее, ранее такого не было и определялось случайно в зависимости от значения соответствующего счётчика на момент включения, сейчас счётчик "CTMU" сбрасывается и при изменении состояния входов начинает отсчёт с "0", короче, практически все макросы переделал(что входили в состав), проще они не стали, но стали, на мой взгляд, более "правильными", раньше боялся так сделать(перестраховывался), но проверил, вроде всё работает! Вот ссылка, выложить программу невозможно: https://yadi.sk/d/wP2TP7xI3acPT3
И хотел предупредить макросы изменил из преведущего проекта, а не создал новые, поэтому они одновременно в один проект не влезут, будут заменяться!
Макрос очередь 8 Х 8_2_2.PNG Макрос очередь 8 Х 8_7_2.PNG Макрос очередь 8 Х 8_4_2.PNG Макрос очередь 8 Х 8_6_2.PNG
Вот ещё макрос очередь нарисовал на 32 входа-выхода:
Макрос очередь 8 Х 8_6_3.PNG
Например так можно индицировать наличие и номер аварии в порядке их поступления при квитировании:
Пример Аварии.PNG
Вот, ещё модернизировал:
RAMP_BIT.PNG
И ещё:
1_BIT.PNG




Ответить с цитированием