Привет всем.
Пытаюсь освоить switсh - программирование, перечитал кучу книг, хотя вариантов в общем не много, Шалыто и еще парочка авторов.
Как я понял, применительно к программированию ПЛК подход может быть следующим.
1. Строим таблицу истинности, где перебираем все возможные варианты.
2. Строим таблицу переходов и выходов
3. Минимизируем ее
4. Строим по ней граф переходов и, если надо, оптимизируем
5. пишем собственно прогу для ПЛК по полученному ГП.
Вроде все красиво, но вот как построить таблицу переходов - выходов по таблице истинности? У Шалыто (см. скрин) пример приведен для таб. истинности, построенной по заданной системе булевых функций. А вот как построить таб. переходов если задана обычная таблица истинности типа x1 x2 x3 Y1 Y2 Y3 Y4?
Поделитесь пож. опытом.
Поправил SWITH на SWITCH
switсh-программирование, давайте разберемся
-
- Профан
- Сообщения: 4
- Зарегистрирован: 05 апр 2014, 13:39
Re: switсh - программирование, давайте разберемся
Не знаю, я с Шалыто не дружу. Начинаю сразу с 4-го пункта.long_therm писал(а):1. Строим таблицу истинности, где перебираем все возможные варианты.
2. Строим таблицу переходов и выходов
3. Минимизируем ее
4. Строим по ней граф переходов и, если надо, оптимизируем
5. пишем собственно прогу для ПЛК по полученному ГП.
Шалыто - академик и соответственно подход у него излишне академический. Хотя, надо признать, результат у него получается вполне практический, а именно: программа для ПЛК.
Чем, кстати, граф переходов отличается от графа состояния?
Re: switсh - программирование, давайте разберемся
Обычная таблица истинности не может быть преобразована в таблицу переходов. Точнее количество переходов в такой таблице будет равно 0 и соответственно смысл в такой таблице будет отсутствовать.long_therm писал(а):А вот как построить таб. переходов если задана обычная таблица истинности типа x1 x2 x3 Y1 Y2 Y3 Y4?
Соответственно встает вопрос: какая таблица истинности является "обычной", а какая "необычной"? Ответ: необычная таблица истинности содержит столбцы с текущим и предыдущим значением выходной переменной, т.е. Y1 - это предыдущее значение Y[n-1], а Y1* - это текущее значение Y[n]. Таким образом необычная таблица истинности описывает систему, поведение которой зависит от предыстории ее поведения. Такие системы называют динамическими или триггерными. Обычные системы, поведение которых не зависит от предыстории, являются статическими или комбинационными. Такие системы живут "одним днем", "текущим временем".
Подведем итог: switch-технология (метод конечных автоматов) применяется для динамических систем. Для статических систем разработка алгоритма не представляет особой сложности, все методы даются в курсе логики (построение таблиц истинности, оптимизация, составление различных типов уравнений).
Re: switсh-программирование, давайте разберемся
Ро-бя-ты, ежели у нас автомат с памятью, о чём свидетельствует наличие графа переходов и таблицы состояний, то про таблицу истинности можно уже и не впоминать.
Дело в том, что для каждого состояния автомата будет своя таблица истинности.
И в общем случае эта таблица будет зависеть не только от текущего состояния автомата, но и от истории, от того каким путём и как давно автомат пришёл в это самое текущее состояние.
Дело в том, что для каждого состояния автомата будет своя таблица истинности.
И в общем случае эта таблица будет зависеть не только от текущего состояния автомата, но и от истории, от того каким путём и как давно автомат пришёл в это самое текущее состояние.
Re: switсh-программирование, давайте разберемся
Ryzhij, неправда. Таблицу истинности можно составить для абсолютно любой системы. Но у нее есть определенные особенности, если система описывается графом переходов. Надо читать Шалыто, я никогда таблицу истинности не составлял для таких особых случаев. Определенный резон есть. Академический.
Только вот я сейчас подумал, что в столбцах таблицы истинности должны появиться Ai[n] и Ai[n-1] - состояния текущие и предыдущие. В частном случае годятся Yi[n] и Yi[n-1] - выходы текущие и предыдущие.
Только вот я сейчас подумал, что в столбцах таблицы истинности должны появиться Ai[n] и Ai[n-1] - состояния текущие и предыдущие. В частном случае годятся Yi[n] и Yi[n-1] - выходы текущие и предыдущие.
Re: switсh-программирование, давайте разберемся
Смотря что считать "неправдой".
Придя к необходимости учитывать предыдущие состояния Вы почему-то ограничились метриками Ai[n] и Ai[n-1].
А почему не Ai[n-2], Ai[n-3]...Ai[n-m] ?
Причём с течением времени при нахождении автомата в текущем состоянии метрики в этой таблице могут как появляться, так и исчезать.
И как Вы хотите назвать такую динамическую во всех отношениях (в том числе и по размерности) таблицу?
По-прежнему, "таблицей истинности"?
Можно, конечно, вот только по определению истина - понятие постоянное. Не может быть такого, чтобы здесь и сейчас 2х2=4, а через минуту уже 3, а если мы пришли из-за угла, то 7.
А реальная система находясь в одном определённом состоянии (если под состоянием понимать совокупность входных/выходных сигналов, без учёта изменяющейся внутренней памяти) именно так и будет реагировать на один и тот же набор сигналов в разное время, и в зависимости от предыстории.
Иными словами, когда мы ваяем что-то "с-нуля", занимаемся синтезом автомата, то проблем вроде бы и нет - мы знаем, что именно внутри у нашего "чёрного ящика" со входами и выходами. Мы же сами эти потроха и набивали.
А вот когда дело доходит до задачи анализа, до воспроизведения, до составления логической модели неизвестного нам агрегата - тут наш мат.аппарат, опирающийся на таблицы истинности "даёт трещину".
Придя к необходимости учитывать предыдущие состояния Вы почему-то ограничились метриками Ai[n] и Ai[n-1].
А почему не Ai[n-2], Ai[n-3]...Ai[n-m] ?
Причём с течением времени при нахождении автомата в текущем состоянии метрики в этой таблице могут как появляться, так и исчезать.
И как Вы хотите назвать такую динамическую во всех отношениях (в том числе и по размерности) таблицу?
По-прежнему, "таблицей истинности"?
Можно, конечно, вот только по определению истина - понятие постоянное. Не может быть такого, чтобы здесь и сейчас 2х2=4, а через минуту уже 3, а если мы пришли из-за угла, то 7.
А реальная система находясь в одном определённом состоянии (если под состоянием понимать совокупность входных/выходных сигналов, без учёта изменяющейся внутренней памяти) именно так и будет реагировать на один и тот же набор сигналов в разное время, и в зависимости от предыстории.
Иными словами, когда мы ваяем что-то "с-нуля", занимаемся синтезом автомата, то проблем вроде бы и нет - мы знаем, что именно внутри у нашего "чёрного ящика" со входами и выходами. Мы же сами эти потроха и набивали.
А вот когда дело доходит до задачи анализа, до воспроизведения, до составления логической модели неизвестного нам агрегата - тут наш мат.аппарат, опирающийся на таблицы истинности "даёт трещину".
Re: switсh-программирование, давайте разберемся
Потому что для предсказания поведения системы достаточно знать только текущее состояние.Ryzhij писал(а):А почему не Ai[n-2], Ai[n-3]...Ai[n-m] ?
Re: switсh-программирование, давайте разберемся
Какие-то противоречия уже наклёвываются.
Итак, у нас автомат с памятью или нет?
Внутренняя память нам полностью известна, доступна и входит в определение "состояние системы", или же "состояние системы" это у нас только комбинация I/O, а сам автомат для нас "чёрный ящик" ?!
Михайло писал(а):Только вот я сейчас подумал, что в столбцах таблицы истинности должны появиться Ai[n] и Ai[n-1] - состояния текущие и предыдущие.
Есть предложение "прибиться уже к какому-то берегу", и для начала договорится об условиях и терминах.Михайло писал(а):Потому что для предсказания поведения системы достаточно знать только текущее состояние.
Итак, у нас автомат с памятью или нет?
Внутренняя память нам полностью известна, доступна и входит в определение "состояние системы", или же "состояние системы" это у нас только комбинация I/O, а сам автомат для нас "чёрный ящик" ?!
Re: switсh-программирование, давайте разберемся
Да не, это не противоречие. Предыдущее значение состояния является входным параметром (от него зависит текущее состояние), а текущее состояние - это выходной параметр, оно пока не влияет на поведение системы (до следующего скана).Ryzhij писал(а):Какие-то противоречия уже наклёвываются.
Чтобы совсем убрать сомнение в противоречии, добавлю: можно заменить столбцы по смыслу Ai[n-1] -> Ai[n] - будет не предыдущее, а текущее значение, Ai[n] -> Ai[n+1] - "текущее значение" -> "будущее значение". От этого алгоритм работы не поменяется. Главное, чтобы предыдущий скан влиял на следующий.
Re: switсh-программирование, давайте разберемся
Ой, чё-то я совсем запутался!
Мы о сканах или о состояниях?
До сих пор я считал, что:
1. У асинхронного автомата понятия "скан" нет, у автомата на базе классического ПЛК (PLC) - есть, а у автомата на ПКА (РАС), строго говоря, - опять нет;
2, А вот состояния есть, это неотъемлемая характеристика автомата. И отделяеют одно состояние автомата от другого переход, происходящий по некоторым условиям. Переход с понятием скан, вообще говоря, не связан.
Мы о сканах или о состояниях?
До сих пор я считал, что:
1. У асинхронного автомата понятия "скан" нет, у автомата на базе классического ПЛК (PLC) - есть, а у автомата на ПКА (РАС), строго говоря, - опять нет;
2, А вот состояния есть, это неотъемлемая характеристика автомата. И отделяеют одно состояние автомата от другого переход, происходящий по некоторым условиям. Переход с понятием скан, вообще говоря, не связан.
Re: switсh-программирование, давайте разберемся
Ну если составлять таблицу истинности для конечного автомата, то без рассмотрения состояния в двух соседних сканах не обойтись. Ты попробуй составить таблицу истинности для какого-нибудь простейшего конечного автомата...Ryzhij писал(а):Ой, чё-то я совсем запутался!
Мы о сканах или о состояниях?
-
- Профан
- Сообщения: 4
- Зарегистрирован: 05 апр 2014, 13:39
Re: switсh-программирование, давайте разберемся
Проблема в то, что ни какого графа переходов в начале разработки программы нет, а есть только объект для автоматизации.Ryzhij писал(а):Ро-бя-ты, ежели у нас автомат с памятью, о чём свидетельствует наличие графа переходов и таблицы состояний, то про таблицу истинности можно уже и не впоминать...
Далее, перебирая все комбинации входных переменных (датчиков) строим таблицу где каждой входной комбинации ставится в соответствие определенное состояние системы. Если строить граф сразу по этой таблице, то не понятно из какого состояния она переводится в текущее, соответствующее определенной строке в таблице.
Re: switсh-программирование, давайте разберемся
Я использую практический подход, когда к имеющемуся объекту автоматизации интуитивно составляется граф управления. Ведь граф очень сильно напоминает блок-схему. Нужно лишь составить на листочке порядок действий управляющего автомата (последовательность изменения состояний).long_therm писал(а):Проблема в то, что ни какого графа переходов в начале разработки программы нет, а есть только объект для автоматизации.
А есть теоретический подход:
Извини, но мы не роботы. Мы не можем перебирать сотни-тысячи строчек таблицы истинности, это довольно муторная работа. Таким методом можно составить граф небольшого управляющего автомата. В академических целях.long_therm писал(а):перебирая все комбинации входных переменных (датчиков) строим таблицу где каждой входной комбинации ставится в соответствие определенное состояние системы.
Re: switсh-программирование, давайте разберемся
Почему-то с сайта кафедры "Технологии программирования", Университета ИТМО СПб, исчезли первые работы, где демонстрировались несложные примеры составления автоматов. Так было понятней. Зато, уже второе издание книги "Автоматное программирование" вышло, я даже купил электронную версию. В этой книжке есть изложение подхода к проектированию автомата (раздел проектирования). Думаю, будет интересней и практичней знакомиться с таким материалом, чем разбираться с абстрактными автоматами.
Декомпозиция задачи, составление автомата, подразумевает либо отличные знания разработчика в технологии, либо плотную работу с заказчиком технологом (или владельцем технологии). Тут универсального подхода не будетУ вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- Профан
- Сообщения: 4
- Зарегистрирован: 05 апр 2014, 13:39
Re: switсh-программирование, давайте разберемся
Извини, а где в таком случае гарантия от логических ошибок, и не учтенных состояний (переходов) автомата? К тому же, автомат можно разбить на несколько не больших (4 вх. и 4 вых), а потом их объединять. На конвейерных линиях, к примеру, этот подход вполне работаетМихайло писал(а): Извини, но мы не роботы. Мы не можем перебирать сотни-тысячи строчек таблицы истинности, это довольно муторная работа. ...
Re: switсh-программирование, давайте разберемся
Лично я их просто не рассматриваю))) Какой смысл перебирать переходы которые не нужны? Ради академического интереса? Если не 4х4, а 16х16? И почему должна возникнуть логическая ошибка по не учтенным состояниям и переходам? Их нет в программе и никаких действий выполняться не будет.long_therm писал(а): Извини, а где в таком случае гарантия от логических ошибок, и не учтенных состояний (переходов) автомата?
-
- Профан
- Сообщения: 4
- Зарегистрирован: 05 апр 2014, 13:39
Re: switсh-программирование, давайте разберемся
К примеру, есть в программе несколько проверок, проверяя которые программа должна куда то переходить. И может получиться так, что при определенном наборе переменных ни одно из условий не будет выполнено, и программа пролетит все эти проверки, и будет выполняться код, идущий за последним условным оператором, хоть этого по логике не должно происходить.CHANt писал(а):... Какой смысл перебирать переходы которые не нужны?
Re: switсh-программирование, давайте разберемся
Если Вы "куда-то" перешли и Вам нужно проверять другие условия, значит Вы должны выполнять проверку условий в другом состоянии, никто не мешает. Можно, выполнив действие, вернутся назад, это не противоречит парадигме. Так же можно и надо ранжировать проверки переходов. Попробуйте составить автомат который Вам требуется, будет легче обсуждать.