switсh-программирование, давайте разберемся

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

switсh-программирование, давайте разберемся

Сообщение long_therm » 01 май 2014, 10:33

Привет всем.
Пытаюсь освоить switсh - программирование, перечитал кучу книг, хотя вариантов в общем не много, Шалыто и еще парочка авторов.
Как я понял, применительно к программированию ПЛК подход может быть следующим.
1. Строим таблицу истинности, где перебираем все возможные варианты.
2. Строим таблицу переходов и выходов
3. Минимизируем ее
4. Строим по ней граф переходов и, если надо, оптимизируем
5. пишем собственно прогу для ПЛК по полученному ГП.
Вроде все красиво, но вот как построить таблицу переходов - выходов по таблице истинности? У Шалыто (см. скрин) пример приведен для таб. истинности, построенной по заданной системе булевых функций. А вот как построить таб. переходов если задана обычная таблица истинности типа x1 x2 x3 Y1 Y2 Y3 Y4?
Поделитесь пож. опытом.

Изображение

Поправил SWITH на SWITCH
long_therm
Профан
 
Сообщения: 4
Зарегистрирован: 05 апр 2014, 13:39

Re: switсh - программирование, давайте разберемся

Сообщение Михайло » 01 май 2014, 11:21

long_therm писал(а):1. Строим таблицу истинности, где перебираем все возможные варианты.
2. Строим таблицу переходов и выходов
3. Минимизируем ее
4. Строим по ней граф переходов и, если надо, оптимизируем
5. пишем собственно прогу для ПЛК по полученному ГП.

Не знаю, я с Шалыто не дружу. Начинаю сразу с 4-го пункта. :)

Шалыто - академик и соответственно подход у него излишне академический. Хотя, надо признать, результат у него получается вполне практический, а именно: программа для ПЛК.

Чем, кстати, граф переходов отличается от графа состояния?
Михайло
Администратор
 
Сообщения: 3333
Зарегистрирован: 19 сен 2012, 19:16

Re: switсh - программирование, давайте разберемся

Сообщение Михайло » 01 май 2014, 11:34

long_therm писал(а):А вот как построить таб. переходов если задана обычная таблица истинности типа x1 x2 x3 Y1 Y2 Y3 Y4?

Обычная таблица истинности не может быть преобразована в таблицу переходов. Точнее количество переходов в такой таблице будет равно 0 и соответственно смысл в такой таблице будет отсутствовать.

Соответственно встает вопрос: какая таблица истинности является "обычной", а какая "необычной"? Ответ: необычная таблица истинности содержит столбцы с текущим и предыдущим значением выходной переменной, т.е. Y1 - это предыдущее значение Y[n-1], а Y1* - это текущее значение Y[n]. Таким образом необычная таблица истинности описывает систему, поведение которой зависит от предыстории ее поведения. Такие системы называют динамическими или триггерными. Обычные системы, поведение которых не зависит от предыстории, являются статическими или комбинационными. Такие системы живут "одним днем", "текущим временем".
Подведем итог: switch-технология (метод конечных автоматов) применяется для динамических систем. Для статических систем разработка алгоритма не представляет особой сложности, все методы даются в курсе логики (построение таблиц истинности, оптимизация, составление различных типов уравнений).
Михайло
Администратор
 
Сообщения: 3333
Зарегистрирован: 19 сен 2012, 19:16

Re: switсh-программирование, давайте разберемся

Сообщение Ryzhij » 02 май 2014, 11:50

Ро-бя-ты, ежели у нас автомат с памятью, о чём свидетельствует наличие графа переходов и таблицы состояний, то про таблицу истинности можно уже и не впоминать.
Дело в том, что для каждого состояния автомата будет своя таблица истинности.
И в общем случае эта таблица будет зависеть не только от текущего состояния автомата, но и от истории, от того каким путём и как давно автомат пришёл в это самое текущее состояние.
Ryzhij
Любитель
 
Сообщения: 80
Зарегистрирован: 10 янв 2013, 11:35

Re: switсh-программирование, давайте разберемся

Сообщение Михайло » 02 май 2014, 16:06

Ryzhij, неправда. Таблицу истинности можно составить для абсолютно любой системы. Но у нее есть определенные особенности, если система описывается графом переходов. Надо читать Шалыто, я никогда таблицу истинности не составлял для таких особых случаев. Определенный резон есть. Академический.

Только вот я сейчас подумал, что в столбцах таблицы истинности должны появиться Ai[n] и Ai[n-1] - состояния текущие и предыдущие. В частном случае годятся Yi[n] и Yi[n-1] - выходы текущие и предыдущие.
Михайло
Администратор
 
Сообщения: 3333
Зарегистрирован: 19 сен 2012, 19:16

Re: switсh-программирование, давайте разберемся

Сообщение Ryzhij » 02 май 2014, 19:07

Смотря что считать "неправдой".
Придя к необходимости учитывать предыдущие состояния Вы почему-то ограничились метриками Ai[n] и Ai[n-1].
А почему не Ai[n-2], Ai[n-3]...Ai[n-m] ?
Причём с течением времени при нахождении автомата в текущем состоянии метрики в этой таблице могут как появляться, так и исчезать.
И как Вы хотите назвать такую динамическую во всех отношениях (в том числе и по размерности) таблицу?
По-прежнему, "таблицей истинности"?
Можно, конечно, вот только по определению истина - понятие постоянное. Не может быть такого, чтобы здесь и сейчас 2х2=4, а через минуту уже 3, а если мы пришли из-за угла, то 7.
А реальная система находясь в одном определённом состоянии (если под состоянием понимать совокупность входных/выходных сигналов, без учёта изменяющейся внутренней памяти) именно так и будет реагировать на один и тот же набор сигналов в разное время, и в зависимости от предыстории.

Иными словами, когда мы ваяем что-то "с-нуля", занимаемся синтезом автомата, то проблем вроде бы и нет - мы знаем, что именно внутри у нашего "чёрного ящика" со входами и выходами. Мы же сами эти потроха и набивали.
А вот когда дело доходит до задачи анализа, до воспроизведения, до составления логической модели неизвестного нам агрегата - тут наш мат.аппарат, опирающийся на таблицы истинности "даёт трещину".
Ryzhij
Любитель
 
Сообщения: 80
Зарегистрирован: 10 янв 2013, 11:35

Re: switсh-программирование, давайте разберемся

Сообщение Михайло » 03 май 2014, 01:01

Ryzhij писал(а):А почему не Ai[n-2], Ai[n-3]...Ai[n-m] ?

Потому что для предсказания поведения системы достаточно знать только текущее состояние.
Михайло
Администратор
 
Сообщения: 3333
Зарегистрирован: 19 сен 2012, 19:16

Re: switсh-программирование, давайте разберемся

Сообщение Ryzhij » 03 май 2014, 06:03

Какие-то противоречия уже наклёвываются.
Михайло писал(а):Только вот я сейчас подумал, что в столбцах таблицы истинности должны появиться Ai[n] и Ai[n-1] - состояния текущие и предыдущие.

Михайло писал(а):Потому что для предсказания поведения системы достаточно знать только текущее состояние.

Есть предложение "прибиться уже к какому-то берегу", и для начала договорится об условиях и терминах.

Итак, у нас автомат с памятью или нет?
Внутренняя память нам полностью известна, доступна и входит в определение "состояние системы", или же "состояние системы" это у нас только комбинация I/O, а сам автомат для нас "чёрный ящик" ?!
Ryzhij
Любитель
 
Сообщения: 80
Зарегистрирован: 10 янв 2013, 11:35

Re: switсh-программирование, давайте разберемся

Сообщение Михайло » 03 май 2014, 06:20

Ryzhij писал(а):Какие-то противоречия уже наклёвываются.

Да не, это не противоречие. Предыдущее значение состояния является входным параметром (от него зависит текущее состояние), а текущее состояние - это выходной параметр, оно пока не влияет на поведение системы (до следующего скана).
Чтобы совсем убрать сомнение в противоречии, добавлю: можно заменить столбцы по смыслу Ai[n-1] -> Ai[n] - будет не предыдущее, а текущее значение, Ai[n] -> Ai[n+1] - "текущее значение" -> "будущее значение". От этого алгоритм работы не поменяется. Главное, чтобы предыдущий скан влиял на следующий.
Михайло
Администратор
 
Сообщения: 3333
Зарегистрирован: 19 сен 2012, 19:16

Re: switсh-программирование, давайте разберемся

Сообщение Ryzhij » 03 май 2014, 21:31

Ой, чё-то я совсем запутался!
Мы о сканах или о состояниях?

До сих пор я считал, что:
1. У асинхронного автомата понятия "скан" нет, у автомата на базе классического ПЛК (PLC) - есть, а у автомата на ПКА (РАС), строго говоря, - опять нет;
2, А вот состояния есть, это неотъемлемая характеристика автомата. И отделяеют одно состояние автомата от другого переход, происходящий по некоторым условиям. Переход с понятием скан, вообще говоря, не связан.
Ryzhij
Любитель
 
Сообщения: 80
Зарегистрирован: 10 янв 2013, 11:35

Re: switсh-программирование, давайте разберемся

Сообщение Михайло » 04 май 2014, 09:20

Ryzhij писал(а):Ой, чё-то я совсем запутался!
Мы о сканах или о состояниях?

Ну если составлять таблицу истинности для конечного автомата, то без рассмотрения состояния в двух соседних сканах не обойтись. Ты попробуй составить таблицу истинности для какого-нибудь простейшего конечного автомата...
Михайло
Администратор
 
Сообщения: 3333
Зарегистрирован: 19 сен 2012, 19:16

Re: switсh-программирование, давайте разберемся

Сообщение long_therm » 06 май 2014, 09:07

Ryzhij писал(а):Ро-бя-ты, ежели у нас автомат с памятью, о чём свидетельствует наличие графа переходов и таблицы состояний, то про таблицу истинности можно уже и не впоминать...

Проблема в то, что ни какого графа переходов в начале разработки программы нет, а есть только объект для автоматизации.
Далее, перебирая все комбинации входных переменных (датчиков) строим таблицу где каждой входной комбинации ставится в соответствие определенное состояние системы. Если строить граф сразу по этой таблице, то не понятно из какого состояния она переводится в текущее, соответствующее определенной строке в таблице.
long_therm
Профан
 
Сообщения: 4
Зарегистрирован: 05 апр 2014, 13:39

Re: switсh-программирование, давайте разберемся

Сообщение Михайло » 06 май 2014, 15:59

long_therm писал(а):Проблема в то, что ни какого графа переходов в начале разработки программы нет, а есть только объект для автоматизации.

Я использую практический подход, когда к имеющемуся объекту автоматизации интуитивно составляется граф управления. Ведь граф очень сильно напоминает блок-схему. Нужно лишь составить на листочке порядок действий управляющего автомата (последовательность изменения состояний).

А есть теоретический подход:
long_therm писал(а):перебирая все комбинации входных переменных (датчиков) строим таблицу где каждой входной комбинации ставится в соответствие определенное состояние системы.

Извини, но мы не роботы. Мы не можем перебирать сотни-тысячи строчек таблицы истинности, это довольно муторная работа. Таким методом можно составить граф небольшого управляющего автомата. В академических целях.
Михайло
Администратор
 
Сообщения: 3333
Зарегистрирован: 19 сен 2012, 19:16

Re: switсh-программирование, давайте разберемся

Сообщение CHANt » 07 май 2014, 07:32

Почему-то с сайта кафедры "Технологии программирования", Университета ИТМО СПб, исчезли первые работы, где демонстрировались несложные примеры составления автоматов. Так было понятней. Зато, уже второе издание книги "Автоматное программирование" вышло, я даже купил электронную версию. В этой книжке есть изложение подхода к проектированию автомата (раздел проектирования). Думаю, будет интересней и практичней знакомиться с таким материалом, чем разбираться с абстрактными автоматами.
Автоматное программирование Поликарпова.pdf


Декомпозиция задачи, составление автомата, подразумевает либо отличные знания разработчика в технологии, либо плотную работу с заказчиком технологом (или владельцем технологии). Тут универсального подхода не будет
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
CHANt
Профессионал
 
Сообщения: 531
Зарегистрирован: 13 окт 2012, 15:24
Откуда: Orenburg

Re: switсh-программирование, давайте разберемся

Сообщение long_therm » 07 май 2014, 12:23

Михайло писал(а):Извини, но мы не роботы. Мы не можем перебирать сотни-тысячи строчек таблицы истинности, это довольно муторная работа. ...

Извини, а где в таком случае гарантия от логических ошибок, и не учтенных состояний (переходов) автомата? К тому же, автомат можно разбить на несколько не больших (4 вх. и 4 вых), а потом их объединять. На конвейерных линиях, к примеру, этот подход вполне работает
long_therm
Профан
 
Сообщения: 4
Зарегистрирован: 05 апр 2014, 13:39

Re: switсh-программирование, давайте разберемся

Сообщение CHANt » 07 май 2014, 13:52

long_therm писал(а):Извини, а где в таком случае гарантия от логических ошибок, и не учтенных состояний (переходов) автомата?

Лично я их просто не рассматриваю))) Какой смысл перебирать переходы которые не нужны? Ради академического интереса? Если не 4х4, а 16х16? И почему должна возникнуть логическая ошибка по не учтенным состояниям и переходам? Их нет в программе и никаких действий выполняться не будет.
Аватара пользователя
CHANt
Профессионал
 
Сообщения: 531
Зарегистрирован: 13 окт 2012, 15:24
Откуда: Orenburg

Re: switсh-программирование, давайте разберемся

Сообщение long_therm » 08 май 2014, 10:14

CHANt писал(а):... Какой смысл перебирать переходы которые не нужны?

К примеру, есть в программе несколько проверок, проверяя которые программа должна куда то переходить. И может получиться так, что при определенном наборе переменных ни одно из условий не будет выполнено, и программа пролетит все эти проверки, и будет выполняться код, идущий за последним условным оператором, хоть этого по логике не должно происходить.
long_therm
Профан
 
Сообщения: 4
Зарегистрирован: 05 апр 2014, 13:39

Re: switсh-программирование, давайте разберемся

Сообщение CHANt » 08 май 2014, 14:52

Если Вы "куда-то" перешли и Вам нужно проверять другие условия, значит Вы должны выполнять проверку условий в другом состоянии, никто не мешает. Можно, выполнив действие, вернутся назад, это не противоречит парадигме. Так же можно и надо ранжировать проверки переходов. Попробуйте составить автомат который Вам требуется, будет легче обсуждать.
Аватара пользователя
CHANt
Профессионал
 
Сообщения: 531
Зарегистрирован: 13 окт 2012, 15:24
Откуда: Orenburg


Вернуться в АВТОМАТИЗАЦИЯ

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron