управление лифтом
- Войдите на сайт для отправки комментариев
есть необходимость управлять подьемником на 2,,3,4,5,6 остановок.
раньше все делал на релюшках. но вроде как время пришло осваивать что то новое.
в программировании я полный чайник. вот из железа что угодно соберу. но хочется и колется. решил попробовать.\
алгоритм простой .
есть 1,2,3,4...итд этажи. на каждом этаже датчик точной остановки (ДТО. дто1,дто2 итд)
есть кнопки вызовов КН1, КН2,КН3 итд.
есть еще РКД (блокировки) без которых ехать вообще никуда не должен.
попробую сначала самый простой вариант на 2 остановки.
нажимем кнопку 1го этажа и должен включиться контактор низа (КН) до тех пор пока не сработает ДТО1
если ДТО1 включено.- ничего не делаем.
нажимаем кнопку 2го этажа и должен включиться контактор верха (КВ) до тех пор пока не сработает ДТО2
если ДТО2 включено- ничего не делаем.
вот что у меня получилось, спустя 3часа изучения вот этого- http://arduino.ru/Reference
буду очень признателен если укажете мне на ошибки. и укажете как быть дальше с 3мя остановками.
ну а если уж окажусь совсем необучаем- покажите тему плиз, где мне могут сделать это за цифирки на кредитке.
#define RKD 2 // РКД блокировки ( пока отложим) #define FL1Call 3 // вызов 1этажа #define FL2Call 4 // вызов 2 этажа #define DTO1 5 // ДТО 1этажа #define DTO2 6 // ДТО 2 этажа #define KV 10 // контакор вверх #define KN 11 // контактор вниз void setup () { pinMode(KV, OUTPUT); // назначение выходов и входов pinMode(KN, OUTPUT); pinMode(RKD, INPUT); pinMode (FL1Call, INPUT); pinMode (FL2Call, INPUT); pinMode (DTO1, INPUT); pinMode (DTO2, INPUT); digitalWrite(KV, 0); // назначение выходов digitalWrite(KN, 0); } void loop () { if (digitalRead(FL1Call)==HIGH && digitalRead(DTO1)==LOW) { while (DTO1) digitalWrite (KN ,1); // едем вниз на первый этаж пока не сработает ДТО1 } if (digitalRead (FL2Call)==HIGH && digitalRead(DTO2)==LOW) { while (DTO2) digitalWrite (KV,1); // едем вверх на второй этаж пока не сработает ДТО2 } }
блин, тема с лифтами на самом деле гораздо сложней описаной вами... особенно если задействовать микропроцесоры, а не реле... есть целые математические модели и дисертации... задачи ставятся тут немного по другому.. можно же собирать статистику. зависимость нагрузки от времени и по этажам... с этой статистики будет видно например что если задержать лифт на минуту то в нем уедет еще один человек, в целом тема интересная...
я бы начал с графического изображения всей системы... ну наприсуйте там шахту лифта с этажами и какие кнопки, датчики, реле на каждом этаже.. пронумеруйте их.. соотнесите с пинами куда это подключено... потом нарисуйте алгоритм... увидите повторяющиеся места и вынесите их в отдельные функции.. на этом месте уже ваш код начнет работать как простые реле.. а вот дальше начинается самое интересное.. сбор статистики.. ее анализ и подстройка движения по времени..
статистка, люди, анализ. это ни к чему.
это грузовой подьемник. с примитивной ллогикой. не нужно углубляться . чем проще -тем надежней.
Для начала надо придумать как они будут обьединяться - я думаю надо шину RS485 использовать и небольшой контроллер на каждый этаж. Или пучок проводов идущий от каждого этажа? Если пучок проводов то их нельзя подключать напрямую к мк - гроза, статическое электричество "Убьют вашу прелесть". Вобщем если остановок не так много то можно и пучком проводов обойтись с оптронами в управляющем блоке...
Только после этого надо приступать к програмированию - то что у вас написано в 1 сообщении не будет работать.
Нужно 3 переменные - пункт назначения и 2 состояние(старое значение и новое). Состояние - присваивается кодовым значениям которые определены оператором #define
от каждого этажа
идет провод : кнопки (2 в данном случае) и один датчик ДТО
то что написал. и так не работает(( уже проверил.
и что т даж подобное наити не удается( хотяб образец глянуть .
буду думать как это можно воплотить в жисть
Вот как то так.
drew,
сейчас ваш лифт не умеет останавливаться. Добавьте после 55 строки это:
digitalWrite (KN ,0);
digitalWrite (KV ,0);
Почитайте о конечных автоматах, может понравиться.
спс огромное буду разбираться.
нашел управление аналоговыми выходами.
неправильно, наверно, но работает. на 2 ост сойдет. а вот на 3 и более тут придется лес городить(
Напрашиваются пять параллельных процессов , взаимодействующих на уровне глобальных переменных, с частотой повторения, скажем 10 раз в секунду...
- собственно платформа , с сотстояниями едем/неедем и вверх/вниз.
- получение запросов на прибытие ( опрос кнопок на этажах)
- получение запросов на отправление ( опрос кнопок в кабине )
- получение информации о положении кабины ( опрос датчиков положения)
- процесс , формирующий состояние переменных для первого процесса на основании информации , полученной от 2,3,4 процессов, суть- конечный автомат, частота запуска этого процесса -100 раз в секунду.
важно при опросе датчиков контролировать состояние обрыва и последовательности, скажем после состояния "замкнуто" датчика положения кабины для 4го этажа могут менять состояния только датчики 3го и 2го . Важно при манипулировании движком применять активное торможение и контролировать ток потребления.
при использовании мультизадачности мне более всего нравится использовать http://blog.ksduino.org/post/42862084042/pseudo-multitasking-using-timer-in-arduino-sketch
работает устойчиво и удобно, хотя есть альтернативные библиотеки для мультизадачности.
))) да я в программировании полный ноль)
а Вы мне мультизадачность..
работает но нет удержания во время движения вверх\вниз
что надо добавить в goUP\goDown чтоб оно сбрасывалось по DTO?
Тут же был специалист по управлению лифтами (Лифтанутый), только ник у него на этом форуме - другой. Где-то в нижнем разделе его представляли...
На самом деле с мультизадачностью иногда проще разрулить , чем прямым кодом ...
фактически создаются сущности ... Тормознутые и быстрые, обитающие в едином пространстве глобальных переменных ( вселенной ;), некоторые могут менять правила вселенной ( воздействовать на переменные) , некоторые только слушать и повиноваться ( как мы их определим ;)
На самом деле с мультизадачностью иногда проще разрулить , чем прямым кодом ...
фактически создаются сущности ... Тормознутые и быстрые, обитающие в едином пространстве глобальных переменных ( вселенной ;), некоторые могут менять правила вселенной ( воздействовать на переменные) , некоторые только слушать и повиноваться ( как мы их определим ;)
Как то раз я пытлся объяснить начальнику, что когда человек становится программистом он сворачивает себе мозги и начинает воспринимать действительность несколько иначе... Не смог объяснить, ибо выражение лица начальника было паническое, а рука тянулась набрать номер психиатрички :-)
ларчик просто открывался))
все работает на 2 остановки
усе)
всем спасибо за пинки в нужном направлении. \
написал на 3 и более остановок. правда пришлось много рисовать(
терь прикручу семисегментку и лсд. и наступит полное счастье)
Не могли бы вы написать тут, что у вас получилось, я сейчас столкнулся с похожей на вашу проблему, однако не могу сам додуматься как написать для 3-х и болеее остановок, буду очеь признателен
Тоже интересно как автор реализировал проект
Судя по всему: собрал и решил прокатиться.... боюсь ошибиться но в лифты наврядли можно пихать самопал..
Судя по всему: собрал и решил прокатиться.... боюсь ошибиться но в лифты наврядли можно пихать самопал..
Чет давно не появлялся на форуме автор.Видать застрял между этажами, или того.... не дай бох...