Просмотр полной версии : Поочередное включение датчиков
Иван Туров
06.05.2025, 16:32
Здравствуйте!
Прошу помощи, только начал изучать программу. Нужно чтобы при нажатии на кнопку (i1) начиналось движение по датчикам 1-3 (i4,i5,i6) поочередно, на каждом задерживаясь на секунду и включалась лампа каждого датчика на выходах Q1,Q2,Q3 соответственно.
Цикл повторяется, пока:
не сработает инфракрасный датчик (i3)
или не достигнуто 7 циклов
или пользователь не нажмёт стоп(i2), тогда возврат на i4 и остановка
Как реализовать поочередное движение от i4 до i6 при нажатии на i1? на ПР100 и чтобы подсвечивались выходы соответствующие
In_Da_Cher_A
06.05.2025, 17:08
Иван, начните с того - для чего вы это делаете?
второе - что вы знаете вообще про программирование, его языки и прочее?
третье - какое из обучающих видео вы смотрели?
и чтобы подсвечивались выходы соответствующиеи когда у вас зачёт? :D
Это уже не зачёт. Судя по тому, что это Майские - это какой-нить Дипломник или Курсовая.
Да, ладно, для диплома или курсовой слишком легкая задача. А вот задание чел писал, судя по всему, по памяти, а не по бумажке, ибо очень много непоняток.
Иван,
1. если что-то движется, значит его надо каким-то выходом запустить, где этот выход? Вообще, чем мы управляем?
2. как движение идет? - по кругу: 1,2,3,1,2,3, вперед-назад: 1,2,3,2,1 или с возвратом: 1,2,3 -> 1,2,3
Dimensy Ну, если хочешь подушнить - давай, подумаем.
1. Он пишет "поочерёдное". Значит 1, 2, 3, 1, 2, 3 - как шаговый искатель или бегущий огонь.
2. Скорее всего это абстрактная учебная херня на командоаппараты или машины состояний. Там важно, чтобы эти 1, 2, 3 перемигивались.
Ну по идее взять с ними OR и пихуть на выход "Мотор" можно.
С реальность это смысла не имеет, потом что в реальности механизм не перескочит с 3 на 1 без шага 1.
Так что, если уж формально отвечать на его вопрос про
Как реализовать поочередное движение от i4 до i6 при нажатии на i1
То ответ будет таким:
ВЗЯТЬ СЧЁТЧИК + ДЕШИФРАТОР
Если формально подходить то с хрена там круг?
Ибо сказано - при останове переход на i4
Но, блин, при старте на ВСЕХ датчиках - курить 1 сек
Вытекает что как минимум на 2-ом старте (не цикле) не прокатывает хотелка. Никто не сказал что старт с перекура это норм.
При туда-сюда перейти в останов по спаду i4 на реверсе логично. А при круге? Про спад i6 не сказано, звиняйте))
Вообщем согласен с Dimensy что нихрена не ясно и нету циклограммы i4-6 по оси движения
Ну и по взрослому - нет обработки ошибок - датчик тю-тю и/или не соответствует циклограмме
А так - самый автоматный автомат на ST. Прям по тексту *тз*
На квадратиках - мазохизм.
Сергей0308
07.05.2025, 09:47
Мне тоже с алгоритмом не до конца ясно-понятно и согласен с преведущим оратором, в смысле, желательно сделать по-человечьи: если датчик(концевик) какой не сработает - чтобы формировался сигнал ошибки(аварии) и он бы учитывался в алгоритме работы механизма.
И, сделать "на квадратиках", в смысле, алгоритм здесь довольно простой, а ST прибережём для более сложных, это же как стрелять из пушки по воробьям, мне так кажется!
В одной из тем форума обсуждали реверсивный механизм, гонял туда-сюда(вверх-вниз), работал по трём концевикам, средний для остановки в среднем положении после нажатия кнопки стоп. Все концевики и кнопка стоп работают на размыкание(нормально-замкнутые контакты).
Короче, можно найти эту тему и проект взять за основу, конечно алгоритм придется доработать под своё ТЗ:
83667
Там имеется задержка при реверсе на 1 секунду, как раз как нам надо, но в принципе легко можно изменить в свойствах макроса, короче, в основном остаётся средний концевик приобщить к работе, по новому Т.З.
83668
83669
Блин, н вы гляньте: у автора ОДНО сообщение.
За почти сутки он ничего больше не ответил.
Кой смысл помогать таким?
Вы знаете, как правильно. И как сделать защиты от сбоев датчиков.
Но таким авторам я бы делал в ЛОБ. Что написали - то и пусть получат.
In_Da_Cher_A
07.05.2025, 15:07
а потом эти же добрые помогатели возмушаются в интернетах , почему у нас всё так плохо, а китайцы вон уже летающие автомобили делают
но никак не догоняют что сами же и плодят тупых бездельников, которые учатся только списывать
In_Da_Cher_A Ты прав! Абсолютно.
Но какое решение тут ты предложишь?
У Автора темы так и есть одно сообщение на форуме. Он даже не отвечает.
Как его заставить учиться?..
Николай Суриков
08.05.2025, 03:26
In_Da_Cher_A ..
Как его заставить учиться?..
Научить читать документацию.
Но это не поможет, ибо даже в чат гпт нет сил закинуть задание.
Вот пример программы на языке ST (Structured Text), которая реализует описанную вами логику. Программа будет использовать переменные для отслеживания состояния и выполнения поочередного движения по датчикам. Мы также будем использовать таймер для реализации задержки в одну секунду на каждом этапе:
PROGRAM Main
VAR
i1 : BOOL; // Кнопка старта
i2 : BOOL; // Кнопка стопа
i3 : BOOL; // Инфракрасный датчик
i4 : BOOL; // Датчик 1
i5 : BOOL; // Датчик 2
i6 : BOOL; // Датчик 3
Q1 : BOOL; // Лампа для датчика 1
Q2 : BOOL; // Лампа для датчика 2
Q3 : BOOL; // Лампа для датчика 3
cycleCount : INT := 0; // Счетчик циклов
currentSensor : INT := 0; // Текущий датчик
timer : TON; // Таймер на 1 секунду
movementActive : BOOL := FALSE; // Активность движения
END_VAR
// Обработчик нажатия кнопки i1
IF i1 AND NOT movementActive THEN
movementActive := TRUE; // Старт движения
cycleCount := 0; // Сброс счетчика циклов
currentSensor := 0; // Начинаем с первого датчика
END_IF
// Логика движения
IF movementActive THEN
// Проверка на умолчание остановки
IF i2 OR i3 OR (cycleCount >= 7) THEN
movementActive := FALSE; // Остановка движения
Q1 := FALSE;
Q2 := FALSE;
Q3 := FALSE;
currentSensor := 0; // Возврат на i4
ELSE
// Управление рядом датчиков
CASE currentSensor OF
0: // Датчик 1 (i4)
Q1 := TRUE;
Q2 := FALSE;
Q3 := FALSE;
timer(IN:= TRUE, PT:= T#1s);
IF timer.Q THEN
currentSensor := 1; // Переход ко второму датчику
timer(IN:= FALSE); // Сброс таймера
cycleCount := cycleCount + 1; // Увеличиваем счетчик
END_IF;
1: // Датчик 2 (i5)
Q1 := FALSE;
Q2 := TRUE;
Q3 := FALSE;
timer(IN:= TRUE, PT:= T#1s);
IF timer.Q THEN
currentSensor := 2; // Переход к третьему датчику
timer(IN:= FALSE); // Сброс таймера
END_IF;
2: // Датчик 3 (i6)
Q1 := FALSE;
Q2 := FALSE;
Q3 := TRUE;
timer(IN:= TRUE, PT:= T#1s);
IF timer.Q THEN
currentSensor := 0; // Возврат к первому датчику
timer(IN:= FALSE); // Сброс таймера
END_IF;
END_CASE;
END_IF;
ELSE
// Если движение не активно, выключаем лампы
Q1 := FALSE;
Q2 := FALSE;
Q3 := FALSE;
END_IF;
Но следующий вопрос будет, почему не работаем программа main и выдает ошибку.
In_Da_Cher_A
08.05.2025, 09:42
In_Da_Cher_A Ты прав! Абсолютно.
Но какое решение тут ты предложишь?
У Автора темы так и есть одно сообщение на форуме. Он даже не отвечает.
Как его заставить учиться?..учить надо тех, кто этого хочет.
у всех вроде присутствует логическое мышление. но в подобных темах обязательно кто-то накинет на себя плащ "доброго самаритянина" и начнёт делать за этих лентяев,
не надо никого заставлять, вы не его родители, его жизнь заставит, не мешайте естественному отбору.
Иван Туров
08.05.2025, 11:38
Задание так и представлено. Идет по кругу 123-123 и т.д 7 раз.
Основной вопрос в том, как реализовать, чтобы в симуляторе при замыкании I1, был автоматически переход на I4. Реально ли вообще это
Задание так и представлено. Идет по кругу 123-123 и т.д 7 раз.
Основной вопрос в том, как реализовать, чтобы в симуляторе при замыкании I1, был автоматически переход на I4. Реально ли вообще это
83689
I - Input это входы.
КАк вы хотите с одного входа сигнал передать на другой???
Передать можно только на выход - Q, либо в конечную сетевую переменную, после необходимых действий (преобразований) полученного с входа сигнала.
Если вопрос поставить иначе. Как при замыкании входа I1 ИСПОЛЬЗОВАТЬ в программе вход I4? тогда реализуемо через блок SEL
начиналось движение по датчикам 1-3 (i4,i5,i6) для этого надо иметь датчики, или нарисовать табличку и руками их включать в эмуляции
In_Da_Cher_A
08.05.2025, 15:12
не прошло и недели :D
Основной вопрос в том, как реализовать, чтобы в симуляторе при замыкании I1, был автоматически переход на I4. Реально ли вообще этоваши мысли какие? как вы думаете это сделать и если сделать, то какими "инструментами"?
при замыкании I1, был автоматически переход на I4.замыкании не И1, а чего? и переход чего на И4?
Иван Туров
08.05.2025, 17:56
не прошло и недели :D
ваши мысли какие? как вы думаете это сделать и если сделать, то какими "инструментами"?
замыкании не И1, а чего? и переход чего на И4?
Я сделал это сейчас через ручное включение в эмуляции.
I1- это кнопка ВКЛ конвеера, который ходит по кругу и включает лампочки при прохождении мимо датчиков, зависая на каждом на секунду. I4-это первый датчик
kondor3000
08.05.2025, 18:38
Я сделал это сейчас через ручное включение в эмуляции.
I1- это кнопка ВКЛ конвеера, который ходит по кругу и включает лампочки при прохождении мимо датчиков, зависая на каждом на секунду. I4-это первый датчик
В эмуляции можно переключить входы, а в реале это физические кнопки подключённые ко входам.
Кнопку нажать (датчик включить можно) можно, а вход переключить нельзя. Переключать можно только сигналы полученные со входов и выходы.
In_Da_Cher_A
08.05.2025, 18:46
I1- это кнопка ВКЛ конвеера, который ходит по кругу и включает лампочки при прохождении мимо датчиков, зависая на каждом на секунду. I4-это первый датчикотлично, Кнопка Вкл включает отсутствующий здесб двигатель конвейера, и даёт сигнал на вход И1, И1 даёт 1 (bool переменная) означающую для алгоритма Старт. Что дальше должно происходить при вращении вашего виртуального конвейера?
пишите прям цепочку событий после ВКл 1 - двигатель вращается лента движется и ......бла бла бла
2 - .....
Иван Туров
09.05.2025, 05:36
отлично, Кнопка Вкл включает отсутствующий здесб двигатель конвейера, и даёт сигнал на вход И1, И1 даёт 1 (bool переменная) означающую для алгоритма Старт. Что дальше должно происходить при вращении вашего виртуального конвейера?
пишите прям цепочку событий после ВКл 1 - двигатель вращается лента движется и ......бла бла бла
2 - .....
1. Нажимаем ВКЛ (I1) - конвеер начал движение по кругу
2. Доходит до датчика 1 (i4) останавливается на секунду (двигатель на время задержки выкл) в это время подсвечивается Q1(Лампочка)
3. Едет дальше, доходит до датчика 2 (i5) останавливается на секунду (двгатель на время задержки выкл) в это время подсвечивается Q2 (Лампочка)
4. Едет дальше, доходит до i6, задержка на секунду, в это время двигатель выкл,подсвечивается Q3(Лампочка)
5. Так едет 7 раз по кругу, после чего останавливается, двигатель выкл.
Доп условия: если нажать на I2, то двигатель выкл, конвеер останавливается, если нажать на I3, то конвеер останавливается на Q1
In_Da_Cher_A
09.05.2025, 07:49
ну уже теплее
переходм к внутренностям
1. Нажимаем ВКЛ (I1) - конвеер начал движение по кругуоткрываем программу и с И1 "получаем" булевскую переменную Start.
покажите это
потом, что у вас должно происходить ВНУТРИ алгоритма при нажатии Вкл и появлении Start? конвейер движется, ок'
Доп условия: если нажать на I2, то двигатель выкл, конвеер останавливается,
итак, кнопка Выкл привязанная к И2 должна остановить двигатель. Что даёт И2 в программу? ну вероятно другую переменную типа bool по имени Stop
покажите это
Сергей0308
09.05.2025, 13:31
1. Нажимаем ВКЛ (I1) - конвеер начал движение по кругу
2. Доходит до датчика 1 (i4) останавливается на секунду (двигатель на время задержки выкл) в это время подсвечивается Q1(Лампочка)
3. Едет дальше, доходит до датчика 2 (i5) останавливается на секунду (двгатель на время задержки выкл) в это время подсвечивается Q2 (Лампочка)
4. Едет дальше, доходит до i6, задержка на секунду, в это время двигатель выкл,подсвечивается Q3(Лампочка)
5. Так едет 7 раз по кругу, после чего останавливается, двигатель выкл.
Доп условия: если нажать на I2, то двигатель выкл, конвеер останавливается, если нажать на I3, то конвеер останавливается на Q1
Вы бы для начала определились с начальными условиями, а то они у вас постоянно меняются, разумеется, поэтому алгоритм работы понять невозможно, например: сначала Вы писали что при нажатии кнопки стоп механизм возвращается в исходное положение, затем только останавливается, теперь логика поменялась - механизм просто останавливается, никакие оправдания здесь не работают типа не дописал в этом случае(устал писать), короче, логика должна быть ясно и чётко прописана и без противоречий из поста к посту, например "возврат" при нажатии кнопки стоп(в первом посте) подразумевает реверс механизма, теперь у Вас не возврат, а движение по кругу в одном направлении, это немного проще, упрощает конструкцию, в смысле, не надо реверсивный пускатель и изменения направления вращения, но противоречий быть не должно в принципе, для того чтобы хотя бы понять алгоритм работы!
Кроме того концевик исходного положения, первый датчик, подключенный ко входу I4, а Вы пишите(в 1 и 20 посте), что после пуска механизма он ещё должен доехать до этого концевика, короче, разберитесь(устраните) имеющиеся противоречия в описании алгоритма работы!
Задание так и представлено. Идет по кругу 123-123 и т.д 7 раз...
ну хоть внятно произнесли.
...Основной вопрос в том, как реализовать, чтобы в симуляторе при замыкании I1, был автоматически переход на I4. Реально ли вообще это
Реально ли? Берешь ножницы, вырезаешь, крутишь (против часовой). Думаешь (головой) и ищешь и показываешь место где оно - "на i4"
83697
Чото не так? Рисуешь своё. Показываешь. Задаешь вопросы.
Пожувать или зубы есть?
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot