вроде все понятно, т.к первый раз работаю с программой есть некоторые трудности с интерфейсом. в принципе я написал программу на бумаге, осталось ее реализовать.Михайло писал(а):
kobrik, задача понятна?
Обучаем новичка программированию ПЛК (kobrik)
Re: Обучаем новичка
Re: Обучаем новичка
вроде и с программированием разобрался, получилось все кроме одного. После возвращения на место тележка у меня не останавливаясь едет вперед...
Re: Обучаем новичка
Это особенность реализации алгоритма.kobrik писал(а):Обьясните пожалуйста к чему этот вопрос? как это применить к программированию.
Скажем, в моей практике было три типа реализации подобного рода транспортирующих устройств:
1. Четыре датчика /так, как тут/, только нажатие на них осуществлялось лыжей: сначала сработал "на подходе", потом - "конечное". В данном случае логика проста: если есть команда движения и есть датчик "на подходе" - медленная скорость, иначе - быстрая. Или чуть усложненный вариант: включать медленную только "на подходе" в нужную сторону: при движении от "исходное" включаем быстрый ход не смотря на то, что есть сигнал датчика "у исходного".
2. Три датчика "исходное", "конечное" и "быстро". Датчик "быстро" нажимался лыжей на всем пути, когда допускается двигаться быстро.
3. Четыре датчика, но все они работают независимо и только один одновременно может быть включен /как в задаче/. В этом случае надо по команде оператора включать "быстро", при проходе датчика "на подходе" переключать на "медленно". Но какое-то время, на пути от "на подходе" до "конечное" сигналов с датчика не будет. Надо просто помнить, что датчик пройден и быструю скорость не включать.
Первые два варианта программируются простейшими логическими выражениями. А вот третий: надо включать промежуточное хранение результатов - запоминать прохождение "на подходе".
И контроль исправности немного разный: во втором и третьем случае одновременно может быть или не включен ни один датчик или включен только один датчик. Все другие комбинации - отказ: сообщение оператору и немедленная остановка механизма. В первом: может быть или не включен ни один датчик, или включен один датчик "на подходе" или включены два датчика "на подходе" и соответствующий ему "конечное".
Перед реализацией неплохо было бы сначала описать алгоритм. Желательно максимально подробно. Потому как все серьезные ошибки происходят именно на этом этапе, при написании программы - банальнейшие описки и синтаксические ошибки, которые можно выявить вычиткой, компиляцией и простейшими тестами. А вот ошибки в логических построениях - не всегда можно выявить простейшими способами. В свое время программисты даже не утруждали себя набором программы, этим занимались кодировщики: самые низкоквалифицированные работники команды.kobrik писал(а):в принципе я написал программу на бумаге, осталось ее реализовать.
Re: Обучаем новичка
Ну давай программу сюда. Имитацию освоил?kobrik писал(а):вроде и с программированием разобрался, получилось все кроме одного. После возвращения на место тележка у меня не останавливаясь едет вперед...
Я тебя попробую обучить технике составления лестничной диаграммы (LD), которой не владеет сам Степа. Ну по-крайней мере я так думаю, что не владеет.
Максимально подробно - это как, где предел подробности? Нет, я скажу конкретно: надо написать, при каких условиях (событиях) должно включаться K1, при каких условиях (событиях) выключается. Аналогично написать про К2 и К3. Больше ничего не надо.Степа писал(а):Перед реализацией неплохо было бы сначала описать алгоритм. Желательно максимально подробно.
Именно третий.Степа писал(а):Скажем, в моей практике было три типа реализации подобного рода транспортирующих устройств
Не забиваем себе голову, видишь, у тележки самоход, она хотя бы ездила. К черту академизм в обучении.Степа писал(а):И контроль исправности немного разный
Re: Обучаем новичка
Максимально подробно: посторонний человек берет описание алгоритма и просто перекладывает это на язык вычислительной техники не вникая в суть алгоритма, не предпринимая попыток догадаться, что же тут имелось в виду.Михайло писал(а):Максимально подробно - это как, где предел подробности? Нет, я скажу конкретно: надо написать, при каких условиях (событиях) должно включаться K1, при каких условиях (событиях) выключается. Аналогично написать про К2 и К3. Больше ничего не надо.
Вот таких "учителей" и надо расстреливать, ибо именно из-за таких и случаются техногенные катастрофы.Михайло писал(а):Не забиваем себе голову, видишь, у тележки самоход, она хотя бы ездила. К черту академизм в обучении.
В промышленном программировании контроль ошибок - не менее важен /если не более важен/, чем собственно алгоритм. И процесс контроля ошибок должен быть встроен в алгоритм, а не присобачен на последнем этапе где-то сбоку.
- Автоматизатор
- Профессионал
- Сообщения: 993
- Зарегистрирован: 09 окт 2012, 05:18
Re: Обучаем новичка
Во дает!! А как же оценка риска? Путеводитель по международным стандартам безопасности по боку!!??Михайло писал(а):Не забиваем себе голову, видишь, у тележки самоход, она хотя бы ездила. К черту академизм в обучении.
Re: Обучаем новичка
Нет не побоку, просто всему свое время, господа.
Re: Обучаем новичка
программу могу выложить просто как устранить эту проблему:Михайло писал(а):Ну давай программу сюда. Имитацию освоил?kobrik писал(а):вроде и с программированием разобрался, получилось все кроме одного. После возвращения на место тележка у меня не останавливаясь едет вперед...
Я тебя попробую обучить технике составления лестничной диаграммы (LD), которой не владеет сам Степа. Ну по-крайней мере я так думаю, что не владеет.
kobrik писал(а):После возвращения на место тележка у меня не останавливаясь едет вперед
Re: Обучаем новичка
Ну тележка должна двигаться вперед лишь после повторного нажатия кнопки "Вперед".kobrik писал(а):После возвращения на место тележка у меня не останавливаясь едет вперед
Re: Обучаем новичка
знаю, но у меня по другому..Михайло писал(а):Ну тележка должна двигаться вперед лишь после повторного нажатия кнопки "Вперед".kobrik писал(а):После возвращения на место тележка у меня не останавливаясь едет вперед
Re: Обучаем новичка
Вот чтобы такого больше никогда не было, первым делом пишется описание программы: алгоритм. Для начала максимально подробно, с раскладками входов-выходов.kobrik писал(а):знаю, но у меня по другому..
Потом алгоритм проверяется: мозг "отключается" и начинаешь строго выполнять все, что написано. Сначала тяжеловато, но со временем начнет получаться. Таким методом можно немало ошибок устранить...
И только потом надо браться за системы подготовки программ и писать код. Это правила хорошего тона: код в последнюю очередь.
Re: Обучаем новичка
У меня видимо все наоборот, я сразу пишу код, а потом пытаюсь пристроить описание куда-нибудь. Реально: человеческий язык менее приспособлен для записи логических уравнений.Степа писал(а):Это правила хорошего тона: код в последнюю очередь.
kobrik
Михайло писал(а):Имитацию освоил?
Михайло писал(а):Нет, я скажу конкретно: надо написать, при каких условиях (событиях) должно включаться K1, при каких условиях (событиях) выключается. Аналогично написать про К2 и К3. Больше ничего не надо.
Re: Обучаем новичка
Это потому что ты не программист, тебе еще учиться самому надо... Верхушек понахватался и...Михайло писал(а):У меня видимо все наоборот, я сразу пишу код, а потом пытаюсь пристроить описание куда-нибудь. Реально: человеческий язык менее приспособлен для записи логических уравнений.
И что касается человеческого языка: человеческий язык самый богатый язык, не такой ограниченный, как язык программирования. Если ты не можешь выразить мысль человеческим языком, то почему ты решил, что на языке программирования ты выразишь мысль лучше?
Re: Обучаем новичка
Вроде освоил:
Итак, Для получения сигнала на выходе Q1(пуск, K1) в первую очередь должны удовлетворяться условия: команда "Вперед" (I5, SB1) и датчик "Начало" должен показывать что тележка находится в начальном положении (I1, SQ1). При выполнении этого условия тележка разгоняется до быстрой скорости Q2 (быстро, K2).
Тележка должна остановиться если датчик медленно (I3, SQ3) срабатывая замыкает датчик конечного положения (I4, SQ4). После команды назад (I6, SB2) тележка движется в обратном направлении на быстрой скорости. Достигнув позиции медленно (I2, SQ2) и срабатывания датчика начало (I1, SQ1) тележка останавливается.
Думаю ошибка в условии, нет выхода, который идентифицировал бы остановку тележки.
Итак, Для получения сигнала на выходе Q1(пуск, K1) в первую очередь должны удовлетворяться условия: команда "Вперед" (I5, SB1) и датчик "Начало" должен показывать что тележка находится в начальном положении (I1, SQ1). При выполнении этого условия тележка разгоняется до быстрой скорости Q2 (быстро, K2).
Тележка должна остановиться если датчик медленно (I3, SQ3) срабатывая замыкает датчик конечного положения (I4, SQ4). После команды назад (I6, SB2) тележка движется в обратном направлении на быстрой скорости. Достигнув позиции медленно (I2, SQ2) и срабатывания датчика начало (I1, SQ1) тележка останавливается.
Думаю ошибка в условии, нет выхода, который идентифицировал бы остановку тележки.
Re: Обучаем новичка
Тут ошибка: для получения сигналов Q1 /К1, пуск/ и Q2 /К2, быстро/ необходимо получить команду "Вперед" и убедиться в отсутствии какого-либо движения /Q1, Q2 и Q3 обнулены/. Для начала движения не нужно, чтобы тележка обязательно находилась в исходном.kobrik писал(а):Для получения сигнала на выходе Q1(пуск, K1) в первую очередь должны удовлетворяться условия: команда "Вперед" (I5, SB1) и датчик "Начало" должен показывать что тележка находится в начальном положении (I1, SQ1).
Далее, если включен Q2 и есть SQ3 - выключить Q2. При появлении SQ4 или команды "Стоп" - выключить Q1 и Q2 /это для полной остановки, если команда "Вперед" была выдана при нахождении тележки в промежутке между SQ3 и SQ4/.
Обратно: все наоборот.
При таком решении удар будет, если нажать "Вперед" при нахождении тележки в диапазоне SQ3-SQ4 или "Назад" при SQ2-SQ1. Во избежание этого надо бы отслеживать положение тележки... Но это уже посложнее будет, это действительно лучше на потом оставить.
Re: Обучаем новичка
Ваши попытки запрограммировать все семь входов и три выхода сразу приведут к тяжелому мучительному поиску алгоритма. Представьте, что у вас не один контроллер, а целых 3. У всех трех контроллеров 7 одинаковых входов и по одному выходу: К1, К2 и К3 соответственно. Для них теоретически можно написать 3 независимые программы и система будет работать! Это называется разбиение системы на подсистемы, а задача проектирования системы разбивается на задачи проектирования подсистем.
Практически работа ведется следующим образом:
1) Описать, когда должно включиться К1 и когда оно должно выключиться (Пуск)
2) Описать, когда должно включиться К2 и когда оно должно выключиться (Быстро)
3) Описать, когда должно включиться К3 и когда оно должно выключиться (Реверс)
Все три описания должны быть максимальным образом независимые друг от друга. Представьте, что это разные программы. Еще один совет: при составлении описания определите, какие из входов не имеют никакого влияния на каждый из выходов, а какие точно влияют. Это позволит написать описание наиболее полно и правильно. Например: влияет ли кнопка SB3 "Стоп" на К1? На К2? На К3?
Практически работа ведется следующим образом:
1) Описать, когда должно включиться К1 и когда оно должно выключиться (Пуск)
2) Описать, когда должно включиться К2 и когда оно должно выключиться (Быстро)
3) Описать, когда должно включиться К3 и когда оно должно выключиться (Реверс)
Все три описания должны быть максимальным образом независимые друг от друга. Представьте, что это разные программы. Еще один совет: при составлении описания определите, какие из входов не имеют никакого влияния на каждый из выходов, а какие точно влияют. Это позволит написать описание наиболее полно и правильно. Например: влияет ли кнопка SB3 "Стоп" на К1? На К2? На К3?
Не думай о себе свысока. Я то уж релейные схемы умею составлять А вот за вами примечено, коллега, делать глупые ошибки и использовать неправильную технику составления релеек.Степа писал(а):Верхушек понахватался и...
Re: Обучаем новичка
Объясните где я ошибся.Михайло писал(а):Ваши попытки запрограммировать все семь входов и три выхода сразу приведут к тяжелому мучительному поиску алгоритма. Представьте, что у вас не один контроллер, а целых 3. У всех трех контроллеров 7 одинаковых входов и по одному выходу: К1, К2 и К3 соответственно. Для них теоретически можно написать 3 независимые программы и система будет работать! Это называется разбиение системы на подсистемы, а задача проектирования системы разбивается на задачи проектирования подсистем.
Практически работа ведется следующим образом:
1) Описать, когда должно включиться К1 и когда оно должно выключиться (Пуск)
2) Описать, когда должно включиться К2 и когда оно должно выключиться (Быстро)
3) Описать, когда должно включиться К3 и когда оно должно выключиться (Реверс)
Все три описания должны быть максимальным образом независимые друг от друга. Представьте, что это разные программы. Еще один совет: при составлении описания определите, какие из входов не имеют никакого влияния на каждый из выходов, а какие точно влияют. Это позволит написать описание наиболее полно и правильно. Например: влияет ли кнопка SB3 "Стоп" на К1? На К2? На К3?
Re: Обучаем новичка
У тебя одно описание на все три выхода (К1, К2, К3), я пока не буду говорить про логические ошибки в этом описании, но теперь тебе необходимо сообразить, как из одного описания получить три независимых (отдельно про К1, отдельно про К2 и отдельно про К3).kobrik писал(а):Итак, Для получения сигнала на выходе Q1(пуск, K1) в первую очередь должны удовлетворяться условия: команда "Вперед" (I5, SB1) и датчик "Начало" должен показывать что тележка находится в начальном положении (I1, SQ1). При выполнении этого условия тележка разгоняется до быстрой скорости Q2 (быстро, K2).
Тележка должна остановиться если датчик медленно (I3, SQ3) срабатывая замыкает датчик конечного положения (I4, SQ4). После команды назад (I6, SB2) тележка движется в обратном направлении на быстрой скорости. Достигнув позиции медленно (I2, SQ2) и срабатывания датчика начало (I1, SQ1) тележка останавливается.
Вот я начну:
К1 включается при нажатии SB1 "Вперед" и нахождении тележки в исходном положении SQ1, либо при нажатии кнопки SB2 "Назад" и нахождении тележки в конечном положении SQ4, а выключается при ........ (когда?)
Re: Обучаем новичка
Поясните глубинный смысл начала движения "Вперед" только с датчика исходного положения SQ1 и "Назад" - только с датчика конечного положения SQ4.Михайло писал(а):Вот я начну:
К1 включается при нажатии SB1 "Вперед" и нахождении тележки в исходном положении SQ1, либо при нажатии кнопки SB2 "Назад" и нахождении тележки в конечном положении SQ4, а выключается при ........ (когда?)
Для движения в одну сторону:
Q1 /K1/ включается при SB1=1 /вперед/ и SB3=1 /Стоп/ и (Q1=0 и Q2=0 и Q3=0) /нет движений/ и нет SQ4. Хотя бы так...
Хотя правильнее вот так:
Q1 /K1/ включается при SB1=1 /вперед/ и SB2=0 /назад/ и SB3=1 /Стоп/ и (Q1=0 и Q2=0 и Q3=0) /нет движений/ и нет SQ4.
А совсем правильно в начале программы:
1. Свести кнопки на три промежуточных бита /память меркеров или как она в выбранном ПЛК именуется?/:
M0 включается при SB1=1 /вперед/ и SB2=0 /назад/ и SB3=1 /Стоп/ - это команда "Вперед"
M1 включается при SB1=0 /вперед/ и SB2=1 /назад/ и SB3=1 /Стоп/ - это команда "Назад"
M2 включается при SB3=0 /Стоп/ - это команда "Стоп"
2. Сформировать блокировки /тут пока одна/:
M3 включается при Q1=1 или Q2=1 или Q3=1 - это запрет на запуск команд "Вперед" или "Назад"
И дальше в логике работать с ними, а не проверять одни и те же входа-выхода в каждом уравнении.
Re: Обучаем новичка
Как возможно включение на выходе К1, если при нажатии кнопки SB2 "Назад" и нахождении тележки в конечном положении SQ4 у нас будет срабатывать реверс К3, т.е. тележка будет двигаться в противоположном направлении...Михайло писал(а): Вот я начну:
К1 включается при нажатии SB1 "Вперед" и нахождении тележки в исходном положении SQ1, либо при нажатии кнопки SB2 "Назад" и нахождении тележки в конечном положении SQ4, а выключается при ........ (когда?)