Страница 1 из 1

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

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

Изображение

Поправил SWITH на SWITCH

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

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

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

Чем, кстати, граф переходов отличается от графа состояния?

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-технология (метод конечных автоматов) применяется для динамических систем. Для статических систем разработка алгоритма не представляет особой сложности, все методы даются в курсе логики (построение таблиц истинности, оптимизация, составление различных типов уравнений).

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

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

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

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

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

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

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

Иными словами, когда мы ваяем что-то "с-нуля", занимаемся синтезом автомата, то проблем вроде бы и нет - мы знаем, что именно внутри у нашего "чёрного ящика" со входами и выходами. Мы же сами эти потроха и набивали.
А вот когда дело доходит до задачи анализа, до воспроизведения, до составления логической модели неизвестного нам агрегата - тут наш мат.аппарат, опирающийся на таблицы истинности "даёт трещину".

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

Добавлено: 03 май 2014, 01:01
Михайло
Ryzhij писал(а):А почему не Ai[n-2], Ai[n-3]...Ai[n-m] ?
Потому что для предсказания поведения системы достаточно знать только текущее состояние.

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

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

Итак, у нас автомат с памятью или нет?
Внутренняя память нам полностью известна, доступна и входит в определение "состояние системы", или же "состояние системы" это у нас только комбинация I/O, а сам автомат для нас "чёрный ящик" ?!

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

Добавлено: 03 май 2014, 06:20
Михайло
Ryzhij писал(а):Какие-то противоречия уже наклёвываются.
Да не, это не противоречие. Предыдущее значение состояния является входным параметром (от него зависит текущее состояние), а текущее состояние - это выходной параметр, оно пока не влияет на поведение системы (до следующего скана).
Чтобы совсем убрать сомнение в противоречии, добавлю: можно заменить столбцы по смыслу Ai[n-1] -> Ai[n] - будет не предыдущее, а текущее значение, Ai[n] -> Ai[n+1] - "текущее значение" -> "будущее значение". От этого алгоритм работы не поменяется. Главное, чтобы предыдущий скан влиял на следующий.

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

Добавлено: 03 май 2014, 21:31
Ryzhij
Ой, чё-то я совсем запутался!
Мы о сканах или о состояниях?

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

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

Добавлено: 04 май 2014, 09:20
Михайло
Ryzhij писал(а):Ой, чё-то я совсем запутался!
Мы о сканах или о состояниях?
Ну если составлять таблицу истинности для конечного автомата, то без рассмотрения состояния в двух соседних сканах не обойтись. Ты попробуй составить таблицу истинности для какого-нибудь простейшего конечного автомата...

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

Добавлено: 06 май 2014, 09:07
long_therm
Ryzhij писал(а):Ро-бя-ты, ежели у нас автомат с памятью, о чём свидетельствует наличие графа переходов и таблицы состояний, то про таблицу истинности можно уже и не впоминать...
Проблема в то, что ни какого графа переходов в начале разработки программы нет, а есть только объект для автоматизации.
Далее, перебирая все комбинации входных переменных (датчиков) строим таблицу где каждой входной комбинации ставится в соответствие определенное состояние системы. Если строить граф сразу по этой таблице, то не понятно из какого состояния она переводится в текущее, соответствующее определенной строке в таблице.

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

Добавлено: 06 май 2014, 15:59
Михайло
long_therm писал(а):Проблема в то, что ни какого графа переходов в начале разработки программы нет, а есть только объект для автоматизации.
Я использую практический подход, когда к имеющемуся объекту автоматизации интуитивно составляется граф управления. Ведь граф очень сильно напоминает блок-схему. Нужно лишь составить на листочке порядок действий управляющего автомата (последовательность изменения состояний).

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

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

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

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

Добавлено: 07 май 2014, 12:23
long_therm
Михайло писал(а): Извини, но мы не роботы. Мы не можем перебирать сотни-тысячи строчек таблицы истинности, это довольно муторная работа. ...
Извини, а где в таком случае гарантия от логических ошибок, и не учтенных состояний (переходов) автомата? К тому же, автомат можно разбить на несколько не больших (4 вх. и 4 вых), а потом их объединять. На конвейерных линиях, к примеру, этот подход вполне работает

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

Добавлено: 07 май 2014, 13:52
CHANt
long_therm писал(а): Извини, а где в таком случае гарантия от логических ошибок, и не учтенных состояний (переходов) автомата?
Лично я их просто не рассматриваю))) Какой смысл перебирать переходы которые не нужны? Ради академического интереса? Если не 4х4, а 16х16? И почему должна возникнуть логическая ошибка по не учтенным состояниям и переходам? Их нет в программе и никаких действий выполняться не будет.

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

Добавлено: 08 май 2014, 10:14
long_therm
CHANt писал(а):... Какой смысл перебирать переходы которые не нужны?
К примеру, есть в программе несколько проверок, проверяя которые программа должна куда то переходить. И может получиться так, что при определенном наборе переменных ни одно из условий не будет выполнено, и программа пролетит все эти проверки, и будет выполняться код, идущий за последним условным оператором, хоть этого по логике не должно происходить.

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

Добавлено: 08 май 2014, 14:52
CHANt
Если Вы "куда-то" перешли и Вам нужно проверять другие условия, значит Вы должны выполнять проверку условий в другом состоянии, никто не мешает. Можно, выполнив действие, вернутся назад, это не противоречит парадигме. Так же можно и надо ранжировать проверки переходов. Попробуйте составить автомат который Вам требуется, будет легче обсуждать.