Страница 3 из 4 ПерваяПервая 1234 ПоследняяПоследняя
Показано с 21 по 30 из 37

Тема: Конечный автомат на ПР200.

  1. #21
    Пользователь Аватар для anthrwpos
    Регистрация
    13.02.2017
    Адрес
    Ленобл
    Сообщений
    188

    По умолчанию

    Чем думать, как построить конечный автомат, лучше думать, как проще решить поставленную практическую задачу.
    А если у вас нет практической задачи, и конечный автомат вам нужен для неких теоретических изысканий, то ПР200 не лучшее средство для этого=)

    PS ОЛ по сути есть функциональный язык программирования. Каждый макрос в нем есть детерминированная функция без побочных эффектов, то есть макрос не может изменить значения каких бы то ни было внешних переменных, и результат его работы зависит только от значения входящих аргументов, поэтому попытка реализовать там что либо из императивной парадигмы будет проваливаться)
    К сожалению, ОЛ лишен всех преимуществ настоящих функциональных ЯП таких как полиморфизм, частичное применение, функции высшего порядка, рекурсия и прочее. Иначе ничего бы не стоило организовать например, списки и пользоваться ими аки массивами)
    Таким образом, если вы хотите сделать полноценный Case, который мог бы совершать произвольные действия на определенные значения бегущей переменной, то ничего у вас не выйдет ввиду того, что ОЛ не поддерживает доступ к внешним переменным. Если вы хотите просто сделать функцию результат которой зависит от входной переменной, то это функция SEL.
    Последний раз редактировалось anthrwpos; 19.04.2017 в 08:29.

  2. #22

    По умолчанию

    Конечно есть практическая задача, которая элементарно решается при помощи оператора case.

  3. #23
    Пользователь Аватар для Сергей0308
    Регистрация
    25.06.2011
    Адрес
    Галактика Андромеды (M31)
    Сообщений
    8,238

    По умолчанию

    Цитата Сообщение от IVM Посмотреть сообщение
    Конечно есть практическая задача, которая элементарно решается при помощи оператора case.
    Так сколько выходов Вам нужно и на входе целочисленная переменная состояния или например 8 дискретных входов с количеством состояний 256? Если напишите состояния выходов для каждого состояния на входе! Я пока до конца не представляю этот блок, что Вы хотите!
    Если проблему можно решить за деньги, это не проблема, это расходы. Бог каждому посылает проблемы по его силам. Так что одно из двух. Либо ты можешь-таки
    справиться с проблемами, либо это не твои проблемы.

  4. #24

    По умолчанию

    В посте #21 дан исчерпывающий ответ на мой вопрос. Пытаться реализовать полноценный оператор case на CFC невозможно.

    Ваше предложение подходит для чисто дискретной задачи. В моей задаче кроме дискретных выходов надо работать с аналоговыми выходами, ПИД-регуляторами и проч.
    Последний раз редактировалось IVM; 19.04.2017 в 09:29.

  5. #25

    По умолчанию

    Цитата Сообщение от anthrwpos Посмотреть сообщение
    PS ОЛ по сути есть функциональный язык программирования. Каждый макрос в нем есть детерминированная функция без побочных эффектов
    Разве? А как же ФБ, которые хранят состояние и создают побочные эффекты?
    Первый попавшийся TON/TOF/SR и т.п. блок это побочный эффект.


    Цитата Сообщение от anthrwpos Посмотреть сообщение
    Таким образом, если вы хотите сделать полноценный Case, который мог бы совершать произвольные действия на определенные значения бегущей переменной, то ничего у вас не выйдет ввиду того, что ОЛ не поддерживает доступ к внешним переменным
    Чего-чего?
    Во-первых, ОЛ поддерживает доступ к переменным (как просто переменным, так и к сетевым переменным).
    Во-вторых, примеры "совершения действий на определённые значения переменной" уже приводили, а тут внезапно оказывается, что "это невозможно".

  6. #26
    Пользователь Аватар для Сергей0308
    Регистрация
    25.06.2011
    Адрес
    Галактика Андромеды (M31)
    Сообщений
    8,238

    По умолчанию

    Цитата Сообщение от IVM Посмотреть сообщение
    В посте #21 дан исчерпывающий ответ на мой вопрос. Пытаться реализовать полноценный оператор case на CFC невозможно.

    Ваше предложение подходит для чисто дискретной задачи. В моей задаче кроме дискретных выходов надо работать с аналоговыми выходами, ПИД-регуляторами и проч.
    Надо побольше оптимизма! 16 дискретных выхода(16бит) могут заменить аналоговый выход! Тоесть Вам надо чтобы в зависимости от входного состояния(например у меня в 1 макросе 257 состояний) меняется состояние выхода( для 16 бит: 0-65535), если так, то это вполне можно сделать в ОЛ и Ваш пессимизм преждевременный!
    По сути Вам нужен мультиплексор целочисленных или вещественных значений на необходимое количество состояний(входов)?
    Макросы мультиплексоров выкладывались и у меня есть с расширением на сколько угодно входов, если что, скажите!
    Вот один из вариантов мультиплексора целочисленных переменных с расширением на 16 входов, можно состряпать аналогичный для вещественных значений!

    Мультиплексор.PNG


    Это я из первого макроса взял, что выше выложил!
    Последний раз редактировалось Сергей0308; 19.04.2017 в 11:36.
    Если проблему можно решить за деньги, это не проблема, это расходы. Бог каждому посылает проблемы по его силам. Так что одно из двух. Либо ты можешь-таки
    справиться с проблемами, либо это не твои проблемы.

  7. #27
    Пользователь Аватар для Василий Кашуба
    Регистрация
    20.11.2011
    Адрес
    Ставрополь
    Сообщений
    2,492

    По умолчанию

    Сергей0308 Тут больше подойдёт стек который вы предлагали для клапанов с поплавками.

  8. #28
    Пользователь Аватар для anthrwpos
    Регистрация
    13.02.2017
    Адрес
    Ленобл
    Сообщений
    188

    По умолчанию

    Цитата Сообщение от Владимир Ситников Посмотреть сообщение
    Разве? А как же ФБ, которые хранят состояние и создают побочные эффекты?
    1) Никакой макрос не делает ничего кроме вычисления результата своей работы. - это отсуствие побочных эффектов.
    2) история результата работы любого макроса определяется историей состояний его входов. - это детерминированность (в указанном смысле).
    Чего-чего?
    Во-первых, ОЛ поддерживает доступ к переменным (как просто переменным, так и к сетевым переменным).
    ОЛ не поддерживает глобальные переменные. То есть возможность из внутренних макросов менять внешние переменные.
    И кстати это обстоятельство вообще говоря не позволяет называть эти объекты макросами. Макрос это по определению некая программа, имеющая доступ ко всему внешнему окружению и выполняющая в нем некие запрограммированную последовательность действий. А у нас тут не макросы, а самые настоящие функции.

  9. #29

    По умолчанию

    Цитата Сообщение от anthrwpos Посмотреть сообщение
    1) Никакой макрос не делает ничего кроме вычисления результата своей работы. - это отсуствие побочных эффектов.
    2) история результата работы любого макроса определяется историей состояний его входов. - это детерминированность (в указанном смысле)
    Как ловко жонглируем терминами "детерминированная функция без побочных эффектов" и "историей состояний его входов".
    Перевожу с русского на русский: эти два утверждения совершенно противоположны и одновременно не могут сосуществовать.

    На всякий случай, дам ссылку на Wikipedia про побочные эффекты:
    https://ru.wikipedia.org/wiki/%D0%9F...D%D0%B8%D0%B5)

    Нужная часть:
    Цитата Сообщение от Wikipedia
    Если вызвать функцию с побочным эффектом дважды с одним и тем же набором значений входных аргументов, может случиться так, что в качестве результата будут возвращены разные значения. Такие функции называются недетерминированными функциями с побочными эффектами.
    Очевидно, TON/TOF/SR/BLINK и т.п. функциональные блоки хранят и изменяют состояние. Их вызов сопряжён с чтением и записью этих значений.
    Операция "write to FB" так вообще один сплошной побочный эффект.

    Согласно определению с Wikipedia, если ОЛ-макрос содержит что-нибудь типа TON/TOF/SR/BLINK, то этот макрос нужно называть "недетерминированными функциями с побочными эффектами". Ведь, наличие TON/TOF/SR/BLINK может привести к тому, что "будет разный результат при одних и тех же входных аргументах".

    И после этого будем говорить, что "Каждый макрос в нем есть детерминированная функция без побочных эффектов"? Ну как такое можно говорить?

    Не стоит выдавать желаемое за действительное (ну или зачем ещё говорить высокопарные слова?)
    Очевидно, что большинство программ/макросов с побочными эффектами (как я говорил, TON/TOF/BLINK/SR/write to FB -- и всё, получай побочный эффект)

    Цитата Сообщение от anthrwpos Посмотреть сообщение
    ОЛ не поддерживает глобальные переменные
    Вот те раз. А сетевые переменные не глобальные что-ли?

    Цитата Сообщение от anthrwpos Посмотреть сообщение
    То есть возможность из внутренних макросов менять внешние переменные.
    Подразберитесь с теорией. Разумеется, из внутренних макросов менять внешние переменные нехорошо, но это (изменение внешних) не является необходимым критерием на "наличие побочных эффектов".

    Например, блок BLINK ничего не меняет, но это побочный эффект -- "обращение к источнику времени". Его вызываешь, и он возвращает разное.
    Аналогично и блок TON в макросе это тоже побочный эффект, хоть он "как бы" и не изменяет "внешнюю переменную"
    Последний раз редактировалось Владимир Ситников; 19.04.2017 в 17:33.

  10. #30
    Пользователь Аватар для anthrwpos
    Регистрация
    13.02.2017
    Адрес
    Ленобл
    Сообщений
    188

    По умолчанию

    Цитата Сообщение от Владимир Ситников Посмотреть сообщение
    Как ловко жонглируем терминами "детерминированная функция без побочных эффектов" и "историей состояний его входов".
    массив чисел и последовательность переданных чисел принципиально не сильно отличаются. Поэтому я считаю, что детерминированность в том смысле что я написал, можно считать детерминированностью.
    На всякий случай, дам ссылку на Wikipedia про побочные эффекты:
    что-то в приведенной вами цитате свалены детерминированность и побочные эффекты в кучу) Вероятно автор данной строчки написал её не разобравшись и уж точно, что он не процитировал её из учебной литературы)
    Очевидно, TON/TOF/SR/BLINK и т.п. функциональные блоки хранят и изменяют состояние.
    хранение и чтение внутреннего локального состояния самой функции не считаются побочным эффектом.
    Операция "write to FB" так вообще один сплошной побочный эффект.
    Операция "write to FB" является вариантом явной передачи в функцию аргумента. Она ничем не отличается от дополнительного входа, куда мы так-же передаем аргумент.
    Вот те раз. А сетевые переменные не глобальные что-ли?
    чем они глобальные? Из макросов их не прочитать.
    Подразберитесь с теорией. Разумеется, из внутренних макросов менять внешние переменные нехорошо, но это (изменение внешних) не является необходимым критерием на "наличие побочных эффектов".
    необходимым критерием побочного эффекта является выход который зависит не только от входящих аргументов, но и от чего-то еще внешнего.
    Например, блок BLINK ничего не меняет, но это побочный эффект -- "обращение к источнику времени". Его вызываешь, и он возвращает разное.
    Blink(n,m) всегда выдает 0 первые m миллисекунд и 1 последующие n и так далее. В смысле "выход есть развертка во времени", блинк - обычная чистая функция.

    Итого, всё во что уперлись наши разногласия - это правомерно ли считать ли развертку во времени аргументом или результатом работы функции.
    У нас в физике например, есть единое пространство-время и относительность одновременности. Это значит, что принципиальной разницы между разверткой в пространстве и во времени нет и посему мы вправе считать последовательность во времени частным случаем массива или списка)

Страница 3 из 4 ПерваяПервая 1234 ПоследняяПоследняя

Похожие темы

  1. Нужна помощь в написании программы управления для ПР200
    от plotnik.off86 в разделе Среда программирования OWEN Logic
    Ответов: 47
    Последнее сообщение: 27.01.2017, 14:32
  2. Ответов: 32
    Последнее сообщение: 16.01.2016, 16:04
  3. Ответов: 5
    Последнее сообщение: 14.08.2015, 15:01
  4. пошаговое выполнение Sfc-программы
    от drvlas в разделе ПЛК1хх
    Ответов: 12
    Последнее сообщение: 01.11.2010, 20:35
  5. Пошаговое выполнение
    от FVG-8 в разделе ПЛК1хх
    Ответов: 7
    Последнее сообщение: 02.09.2008, 10:17

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •