Обучаем новичка программированию ПЛК (kobrik)

Автоматизация технологических процессов, системы управления, АСУ ТП, АСКУЭ, программирование ПЛК, человеко-машинный интерфейс, сетевое оборудование, протоколы
kobrik
Профессионал
Сообщения: 663
Зарегистрирован: 04 ноя 2012, 19:23

Re: Обучаем новичка

Сообщение kobrik »

Михайло писал(а):
kobrik, задача понятна?
вроде все понятно, т.к первый раз работаю с программой есть некоторые трудности с интерфейсом. в принципе я написал программу на бумаге, осталось ее реализовать.

kobrik
Профессионал
Сообщения: 663
Зарегистрирован: 04 ноя 2012, 19:23

Re: Обучаем новичка

Сообщение kobrik »

вроде и с программированием разобрался, получилось все кроме одного. После возвращения на место тележка у меня не останавливаясь едет вперед...

Степа
Любитель
Сообщения: 98
Зарегистрирован: 21 окт 2012, 10:09

Re: Обучаем новичка

Сообщение Степа »

kobrik писал(а):Обьясните пожалуйста к чему этот вопрос? как это применить к программированию.
Это особенность реализации алгоритма.
Скажем, в моей практике было три типа реализации подобного рода транспортирующих устройств:
1. Четыре датчика /так, как тут/, только нажатие на них осуществлялось лыжей: сначала сработал "на подходе", потом - "конечное". В данном случае логика проста: если есть команда движения и есть датчик "на подходе" - медленная скорость, иначе - быстрая. Или чуть усложненный вариант: включать медленную только "на подходе" в нужную сторону: при движении от "исходное" включаем быстрый ход не смотря на то, что есть сигнал датчика "у исходного".
2. Три датчика "исходное", "конечное" и "быстро". Датчик "быстро" нажимался лыжей на всем пути, когда допускается двигаться быстро.
3. Четыре датчика, но все они работают независимо и только один одновременно может быть включен /как в задаче/. В этом случае надо по команде оператора включать "быстро", при проходе датчика "на подходе" переключать на "медленно". Но какое-то время, на пути от "на подходе" до "конечное" сигналов с датчика не будет. Надо просто помнить, что датчик пройден и быструю скорость не включать.
Первые два варианта программируются простейшими логическими выражениями. А вот третий: надо включать промежуточное хранение результатов - запоминать прохождение "на подходе".
И контроль исправности немного разный: во втором и третьем случае одновременно может быть или не включен ни один датчик или включен только один датчик. Все другие комбинации - отказ: сообщение оператору и немедленная остановка механизма. В первом: может быть или не включен ни один датчик, или включен один датчик "на подходе" или включены два датчика "на подходе" и соответствующий ему "конечное".
kobrik писал(а):в принципе я написал программу на бумаге, осталось ее реализовать.
Перед реализацией неплохо было бы сначала описать алгоритм. Желательно максимально подробно. Потому как все серьезные ошибки происходят именно на этом этапе, при написании программы - банальнейшие описки и синтаксические ошибки, которые можно выявить вычиткой, компиляцией и простейшими тестами. А вот ошибки в логических построениях - не всегда можно выявить простейшими способами. В свое время программисты даже не утруждали себя набором программы, этим занимались кодировщики: самые низкоквалифицированные работники команды.

Михайло
Администратор
Сообщения: 4094
Зарегистрирован: 19 сен 2012, 19:16

Re: Обучаем новичка

Сообщение Михайло »

kobrik писал(а):вроде и с программированием разобрался, получилось все кроме одного. После возвращения на место тележка у меня не останавливаясь едет вперед...
Ну давай программу сюда. Имитацию освоил?
Я тебя попробую обучить технике составления лестничной диаграммы (LD), которой не владеет сам Степа. Ну по-крайней мере я так думаю, что не владеет.
Степа писал(а):Перед реализацией неплохо было бы сначала описать алгоритм. Желательно максимально подробно.
Максимально подробно - это как, где предел подробности? Нет, я скажу конкретно: надо написать, при каких условиях (событиях) должно включаться K1, при каких условиях (событиях) выключается. Аналогично написать про К2 и К3. Больше ничего не надо.
Степа писал(а):Скажем, в моей практике было три типа реализации подобного рода транспортирующих устройств
Именно третий.
Степа писал(а):И контроль исправности немного разный
Не забиваем себе голову, видишь, у тележки самоход, она хотя бы ездила. К черту академизм в обучении.

Степа
Любитель
Сообщения: 98
Зарегистрирован: 21 окт 2012, 10:09

Re: Обучаем новичка

Сообщение Степа »

Михайло писал(а):Максимально подробно - это как, где предел подробности? Нет, я скажу конкретно: надо написать, при каких условиях (событиях) должно включаться K1, при каких условиях (событиях) выключается. Аналогично написать про К2 и К3. Больше ничего не надо.
Максимально подробно: посторонний человек берет описание алгоритма и просто перекладывает это на язык вычислительной техники не вникая в суть алгоритма, не предпринимая попыток догадаться, что же тут имелось в виду.
Михайло писал(а):Не забиваем себе голову, видишь, у тележки самоход, она хотя бы ездила. К черту академизм в обучении.
Вот таких "учителей" и надо расстреливать, ибо именно из-за таких и случаются техногенные катастрофы.
В промышленном программировании контроль ошибок - не менее важен /если не более важен/, чем собственно алгоритм. И процесс контроля ошибок должен быть встроен в алгоритм, а не присобачен на последнем этапе где-то сбоку.

Аватара пользователя
Автоматизатор
Профессионал
Сообщения: 993
Зарегистрирован: 09 окт 2012, 05:18

Re: Обучаем новичка

Сообщение Автоматизатор »

Михайло писал(а):Не забиваем себе голову, видишь, у тележки самоход, она хотя бы ездила. К черту академизм в обучении.
Во дает!! А как же оценка риска? Путеводитель по международным стандартам безопасности по боку!!?? :D

Михайло
Администратор
Сообщения: 4094
Зарегистрирован: 19 сен 2012, 19:16

Re: Обучаем новичка

Сообщение Михайло »

Нет не побоку, просто всему свое время, господа.

kobrik
Профессионал
Сообщения: 663
Зарегистрирован: 04 ноя 2012, 19:23

Re: Обучаем новичка

Сообщение kobrik »

Михайло писал(а):
kobrik писал(а):вроде и с программированием разобрался, получилось все кроме одного. После возвращения на место тележка у меня не останавливаясь едет вперед...
Ну давай программу сюда. Имитацию освоил?
Я тебя попробую обучить технике составления лестничной диаграммы (LD), которой не владеет сам Степа. Ну по-крайней мере я так думаю, что не владеет.
программу могу выложить просто как устранить эту проблему:
kobrik писал(а):После возвращения на место тележка у меня не останавливаясь едет вперед

Михайло
Администратор
Сообщения: 4094
Зарегистрирован: 19 сен 2012, 19:16

Re: Обучаем новичка

Сообщение Михайло »

kobrik писал(а):После возвращения на место тележка у меня не останавливаясь едет вперед
Ну тележка должна двигаться вперед лишь после повторного нажатия кнопки "Вперед".

kobrik
Профессионал
Сообщения: 663
Зарегистрирован: 04 ноя 2012, 19:23

Re: Обучаем новичка

Сообщение kobrik »

Михайло писал(а):
kobrik писал(а):После возвращения на место тележка у меня не останавливаясь едет вперед
Ну тележка должна двигаться вперед лишь после повторного нажатия кнопки "Вперед".
знаю, но у меня по другому..

Степа
Любитель
Сообщения: 98
Зарегистрирован: 21 окт 2012, 10:09

Re: Обучаем новичка

Сообщение Степа »

kobrik писал(а):знаю, но у меня по другому..
Вот чтобы такого больше никогда не было, первым делом пишется описание программы: алгоритм. Для начала максимально подробно, с раскладками входов-выходов.
Потом алгоритм проверяется: мозг "отключается" и начинаешь строго выполнять все, что написано. Сначала тяжеловато, но со временем начнет получаться. Таким методом можно немало ошибок устранить...
И только потом надо браться за системы подготовки программ и писать код. Это правила хорошего тона: код в последнюю очередь.

Михайло
Администратор
Сообщения: 4094
Зарегистрирован: 19 сен 2012, 19:16

Re: Обучаем новичка

Сообщение Михайло »

Степа писал(а):Это правила хорошего тона: код в последнюю очередь.
У меня видимо все наоборот, я сразу пишу код, а потом пытаюсь пристроить описание куда-нибудь. :) Реально: человеческий язык менее приспособлен для записи логических уравнений.

kobrik
Михайло писал(а):Имитацию освоил?
Михайло писал(а):Нет, я скажу конкретно: надо написать, при каких условиях (событиях) должно включаться K1, при каких условиях (событиях) выключается. Аналогично написать про К2 и К3. Больше ничего не надо.

Степа
Любитель
Сообщения: 98
Зарегистрирован: 21 окт 2012, 10:09

Re: Обучаем новичка

Сообщение Степа »

Михайло писал(а):У меня видимо все наоборот, я сразу пишу код, а потом пытаюсь пристроить описание куда-нибудь. :) Реально: человеческий язык менее приспособлен для записи логических уравнений.
Это потому что ты не программист, тебе еще учиться самому надо... Верхушек понахватался и...
И что касается человеческого языка: человеческий язык самый богатый язык, не такой ограниченный, как язык программирования. Если ты не можешь выразить мысль человеческим языком, то почему ты решил, что на языке программирования ты выразишь мысль лучше?

kobrik
Профессионал
Сообщения: 663
Зарегистрирован: 04 ноя 2012, 19:23

Re: Обучаем новичка

Сообщение kobrik »

Вроде освоил:
Итак, Для получения сигнала на выходе Q1(пуск, K1) в первую очередь должны удовлетворяться условия: команда "Вперед" (I5, SB1) и датчик "Начало" должен показывать что тележка находится в начальном положении (I1, SQ1). При выполнении этого условия тележка разгоняется до быстрой скорости Q2 (быстро, K2).
Тележка должна остановиться если датчик медленно (I3, SQ3) срабатывая замыкает датчик конечного положения (I4, SQ4). После команды назад (I6, SB2) тележка движется в обратном направлении на быстрой скорости. Достигнув позиции медленно (I2, SQ2) и срабатывания датчика начало (I1, SQ1) тележка останавливается.

Думаю ошибка в условии, нет выхода, который идентифицировал бы остановку тележки.

Степа
Любитель
Сообщения: 98
Зарегистрирован: 21 окт 2012, 10:09

Re: Обучаем новичка

Сообщение Степа »

kobrik писал(а):Для получения сигнала на выходе Q1(пуск, K1) в первую очередь должны удовлетворяться условия: команда "Вперед" (I5, SB1) и датчик "Начало" должен показывать что тележка находится в начальном положении (I1, SQ1).
Тут ошибка: для получения сигналов Q1 /К1, пуск/ и Q2 /К2, быстро/ необходимо получить команду "Вперед" и убедиться в отсутствии какого-либо движения /Q1, Q2 и Q3 обнулены/. Для начала движения не нужно, чтобы тележка обязательно находилась в исходном.
Далее, если включен Q2 и есть SQ3 - выключить Q2. При появлении SQ4 или команды "Стоп" - выключить Q1 и Q2 /это для полной остановки, если команда "Вперед" была выдана при нахождении тележки в промежутке между SQ3 и SQ4/.
Обратно: все наоборот.

При таком решении удар будет, если нажать "Вперед" при нахождении тележки в диапазоне SQ3-SQ4 или "Назад" при SQ2-SQ1. Во избежание этого надо бы отслеживать положение тележки... Но это уже посложнее будет, это действительно лучше на потом оставить.

Михайло
Администратор
Сообщения: 4094
Зарегистрирован: 19 сен 2012, 19:16

Re: Обучаем новичка

Сообщение Михайло »

Ваши попытки запрограммировать все семь входов и три выхода сразу приведут к тяжелому мучительному поиску алгоритма. Представьте, что у вас не один контроллер, а целых 3. У всех трех контроллеров 7 одинаковых входов и по одному выходу: К1, К2 и К3 соответственно. Для них теоретически можно написать 3 независимые программы и система будет работать! Это называется разбиение системы на подсистемы, а задача проектирования системы разбивается на задачи проектирования подсистем.
Практически работа ведется следующим образом:
1) Описать, когда должно включиться К1 и когда оно должно выключиться (Пуск)
2) Описать, когда должно включиться К2 и когда оно должно выключиться (Быстро)
3) Описать, когда должно включиться К3 и когда оно должно выключиться (Реверс)

Все три описания должны быть максимальным образом независимые друг от друга. Представьте, что это разные программы. Еще один совет: при составлении описания определите, какие из входов не имеют никакого влияния на каждый из выходов, а какие точно влияют. Это позволит написать описание наиболее полно и правильно. Например: влияет ли кнопка SB3 "Стоп" на К1? На К2? На К3?
Степа писал(а):Верхушек понахватался и...
Не думай о себе свысока. Я то уж релейные схемы умею составлять :) А вот за вами примечено, коллега, делать глупые ошибки и использовать неправильную технику составления релеек.

kobrik
Профессионал
Сообщения: 663
Зарегистрирован: 04 ноя 2012, 19:23

Re: Обучаем новичка

Сообщение kobrik »

Михайло писал(а):Ваши попытки запрограммировать все семь входов и три выхода сразу приведут к тяжелому мучительному поиску алгоритма. Представьте, что у вас не один контроллер, а целых 3. У всех трех контроллеров 7 одинаковых входов и по одному выходу: К1, К2 и К3 соответственно. Для них теоретически можно написать 3 независимые программы и система будет работать! Это называется разбиение системы на подсистемы, а задача проектирования системы разбивается на задачи проектирования подсистем.
Практически работа ведется следующим образом:
1) Описать, когда должно включиться К1 и когда оно должно выключиться (Пуск)
2) Описать, когда должно включиться К2 и когда оно должно выключиться (Быстро)
3) Описать, когда должно включиться К3 и когда оно должно выключиться (Реверс)

Все три описания должны быть максимальным образом независимые друг от друга. Представьте, что это разные программы. Еще один совет: при составлении описания определите, какие из входов не имеют никакого влияния на каждый из выходов, а какие точно влияют. Это позволит написать описание наиболее полно и правильно. Например: влияет ли кнопка SB3 "Стоп" на К1? На К2? На К3?
Объясните где я ошибся.

Михайло
Администратор
Сообщения: 4094
Зарегистрирован: 19 сен 2012, 19:16

Re: Обучаем новичка

Сообщение Михайло »

kobrik писал(а):Итак, Для получения сигнала на выходе Q1(пуск, K1) в первую очередь должны удовлетворяться условия: команда "Вперед" (I5, SB1) и датчик "Начало" должен показывать что тележка находится в начальном положении (I1, SQ1). При выполнении этого условия тележка разгоняется до быстрой скорости Q2 (быстро, K2).
Тележка должна остановиться если датчик медленно (I3, SQ3) срабатывая замыкает датчик конечного положения (I4, SQ4). После команды назад (I6, SB2) тележка движется в обратном направлении на быстрой скорости. Достигнув позиции медленно (I2, SQ2) и срабатывания датчика начало (I1, SQ1) тележка останавливается.
У тебя одно описание на все три выхода (К1, К2, К3), я пока не буду говорить про логические ошибки в этом описании, но теперь тебе необходимо сообразить, как из одного описания получить три независимых (отдельно про К1, отдельно про К2 и отдельно про К3).

Вот я начну:
К1 включается при нажатии SB1 "Вперед" и нахождении тележки в исходном положении SQ1, либо при нажатии кнопки SB2 "Назад" и нахождении тележки в конечном положении SQ4, а выключается при ........ (когда?)

Степа
Любитель
Сообщения: 98
Зарегистрирован: 21 окт 2012, 10:09

Re: Обучаем новичка

Сообщение Степа »

Михайло писал(а):Вот я начну:
К1 включается при нажатии SB1 "Вперед" и нахождении тележки в исходном положении SQ1, либо при нажатии кнопки SB2 "Назад" и нахождении тележки в конечном положении SQ4, а выключается при ........ (когда?)
Поясните глубинный смысл начала движения "Вперед" только с датчика исходного положения SQ1 и "Назад" - только с датчика конечного положения 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 - это запрет на запуск команд "Вперед" или "Назад"
И дальше в логике работать с ними, а не проверять одни и те же входа-выхода в каждом уравнении.

kobrik
Профессионал
Сообщения: 663
Зарегистрирован: 04 ноя 2012, 19:23

Re: Обучаем новичка

Сообщение kobrik »

Михайло писал(а): Вот я начну:
К1 включается при нажатии SB1 "Вперед" и нахождении тележки в исходном положении SQ1, либо при нажатии кнопки SB2 "Назад" и нахождении тележки в конечном положении SQ4, а выключается при ........ (когда?)
Как возможно включение на выходе К1, если при нажатии кнопки SB2 "Назад" и нахождении тележки в конечном положении SQ4 у нас будет срабатывать реверс К3, т.е. тележка будет двигаться в противоположном направлении...

Ответить