PDA

Просмотр полной версии : Поочередное включение датчиков



Иван Туров
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

Cs-Cs
06.05.2025, 18:36
Это уже не зачёт. Судя по тому, что это Майские - это какой-нить Дипломник или Курсовая.

Dimensy
06.05.2025, 21:26
Да, ладно, для диплома или курсовой слишком легкая задача. А вот задание чел писал, судя по всему, по памяти, а не по бумажке, ибо очень много непоняток.
Иван,
1. если что-то движется, значит его надо каким-то выходом запустить, где этот выход? Вообще, чем мы управляем?
2. как движение идет? - по кругу: 1,2,3,1,2,3, вперед-назад: 1,2,3,2,1 или с возвратом: 1,2,3 -> 1,2,3

Cs-Cs
06.05.2025, 21:52
Dimensy Ну, если хочешь подушнить - давай, подумаем.
1. Он пишет "поочерёдное". Значит 1, 2, 3, 1, 2, 3 - как шаговый искатель или бегущий огонь.
2. Скорее всего это абстрактная учебная херня на командоаппараты или машины состояний. Там важно, чтобы эти 1, 2, 3 перемигивались.
Ну по идее взять с ними OR и пихуть на выход "Мотор" можно.
С реальность это смысла не имеет, потом что в реальности механизм не перескочит с 3 на 1 без шага 1.

Так что, если уж формально отвечать на его вопрос про

Как реализовать поочередное движение от i4 до i6 при нажатии на i1
То ответ будет таким:
ВЗЯТЬ СЧЁТЧИК + ДЕШИФРАТОР

Валенок
07.05.2025, 02:20
Если формально подходить то с хрена там круг?
Ибо сказано - при останове переход на i4
Но, блин, при старте на ВСЕХ датчиках - курить 1 сек
Вытекает что как минимум на 2-ом старте (не цикле) не прокатывает хотелка. Никто не сказал что старт с перекура это норм.
При туда-сюда перейти в останов по спаду i4 на реверсе логично. А при круге? Про спад i6 не сказано, звиняйте))

Вообщем согласен с Dimensy что нихрена не ясно и нету циклограммы i4-6 по оси движения

Ну и по взрослому - нет обработки ошибок - датчик тю-тю и/или не соответствует циклограмме

А так - самый автоматный автомат на ST. Прям по тексту *тз*
На квадратиках - мазохизм.

Сергей0308
07.05.2025, 09:47
Мне тоже с алгоритмом не до конца ясно-понятно и согласен с преведущим оратором, в смысле, желательно сделать по-человечьи: если датчик(концевик) какой не сработает - чтобы формировался сигнал ошибки(аварии) и он бы учитывался в алгоритме работы механизма.
И, сделать "на квадратиках", в смысле, алгоритм здесь довольно простой, а ST прибережём для более сложных, это же как стрелять из пушки по воробьям, мне так кажется!

В одной из тем форума обсуждали реверсивный механизм, гонял туда-сюда(вверх-вниз), работал по трём концевикам, средний для остановки в среднем положении после нажатия кнопки стоп. Все концевики и кнопка стоп работают на размыкание(нормально-замкнутые контакты).
Короче, можно найти эту тему и проект взять за основу, конечно алгоритм придется доработать под своё ТЗ:
83667
Там имеется задержка при реверсе на 1 секунду, как раз как нам надо, но в принципе легко можно изменить в свойствах макроса, короче, в основном остаётся средний концевик приобщить к работе, по новому Т.З.

83668

83669

Cs-Cs
07.05.2025, 12:19
Блин, н вы гляньте: у автора ОДНО сообщение.
За почти сутки он ничего больше не ответил.
Кой смысл помогать таким?
Вы знаете, как правильно. И как сделать защиты от сбоев датчиков.
Но таким авторам я бы делал в ЛОБ. Что написали - то и пусть получат.

In_Da_Cher_A
07.05.2025, 15:07
а потом эти же добрые помогатели возмушаются в интернетах , почему у нас всё так плохо, а китайцы вон уже летающие автомобили делают
но никак не догоняют что сами же и плодят тупых бездельников, которые учатся только списывать

Cs-Cs
08.05.2025, 01:30
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. Реально ли вообще это

CleanS
08.05.2025, 13:03
Задание так и представлено. Идет по кругу 123-123 и т.д 7 раз.

Основной вопрос в том, как реализовать, чтобы в симуляторе при замыкании I1, был автоматически переход на I4. Реально ли вообще это


83689

I - Input это входы.
КАк вы хотите с одного входа сигнал передать на другой???
Передать можно только на выход - Q, либо в конечную сетевую переменную, после необходимых действий (преобразований) полученного с входа сигнала.

melky
08.05.2025, 13:16
Если вопрос поставить иначе. Как при замыкании входа 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 посте), что после пуска механизма он ещё должен доехать до этого концевика, короче, разберитесь(устраните) имеющиеся противоречия в описании алгоритма работы!

Валенок
09.05.2025, 22:28
Задание так и представлено. Идет по кругу 123-123 и т.д 7 раз...
ну хоть внятно произнесли.



...Основной вопрос в том, как реализовать, чтобы в симуляторе при замыкании I1, был автоматически переход на I4. Реально ли вообще это
Реально ли? Берешь ножницы, вырезаешь, крутишь (против часовой). Думаешь (головой) и ищешь и показываешь место где оно - "на i4"
83697
Чото не так? Рисуешь своё. Показываешь. Задаешь вопросы.
Пожувать или зубы есть?