Показано с 1 по 10 из 37

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

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    По умолчанию

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


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

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

    По умолчанию

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

  3. #3

    По умолчанию

    Цитата Сообщение от 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.

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

    По умолчанию

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

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

  5. #5

    По умолчанию

    Цитата Сообщение от anthrwpos Посмотреть сообщение
    посему мы вправе считать последовательность во времени частным случаем массива или списка)
    Вынес обсуждение побочных эффектов в отдельную тему: Макросы ОЛ: с побочными эффектами и/или детерминированные?

    PS. Не думал, что человек может называть термины "чистая функция", "функциональное программирование" и при этом считать blink чистой функцией.

  6. #6

    По умолчанию

    Цитата Сообщение от Владимир Ситников Посмотреть сообщение
    PS. Не думал, что человек может называть термины "чистая функция", "функциональное программирование" и при этом считать blink чистой функцией.
    Просто человек не делает различия между функциональным блоком(макросом) и функцией.
    Функциональный блок(макрос) обладает внутренней памятью в которой храниться состояние внутренних переменных(переменной) и в зависимости от внутреннего состояния и входа формируется выходное воздействие (выход из функционального блока). У функции же в зависимости от входа формируется выход (за один такт выполнения).
    Так же у функции (в большинстве случаев) один выход, а функциональный блок может обладать несколькими выходами или тоже только одним. Собственно получается, что макрос - это функциональный блок. Детерминируемый или нет? Думаю, что да - ведь мы делаем функциональные блоки (макросы) с уже известным(предсказанным) поведением при известном внутреннем состоянии и входном воздействии.

  7. #7

    По умолчанию

    Цитата Сообщение от ferret_maybe Посмотреть сообщение
    Собственно получается, что макрос - это функциональный блок. Детерминируемый или нет? Думаю, что да - ведь мы делаем функциональные блоки (макросы) с уже известным(предсказанным) поведением при известном внутреннем состоянии и входном воздействии.
    Есть очень простой пример: SR-триггер. Он является недетерминированным в том плане, что при одних и тех же значениях S и R на входе он может возвращать TRUE, а может возвращать FALSE. Например, если подать S=FALSE, R=FALSE, то невозможно предсказать что именно вернёт SR.
    Ещё раз: "недетерминированность" не означает, что "вообще невозможно предсказать поведение SR-триггера. Оно означает лишь то, что для такого предсказания нужно знать всю историю событий.

    В этом плане операция ADD является детерминированной и чистой. Т.е. результат ADD не зависит от прошлых запусков ADD, не зависит от какого-то скрытого состояния, а зависит только от аргументов.

    Поэтому, если в макросе используются ОЛ ФБ или обратные связи, то этот макрос уже перестаёт быть детерминированным. Это не значит, что ОЛ ломается. Это значит, что для понимания принципа работы такого макроса нужно учитывать потенциальные скрытые состояния.

    PS. Если продолжение, то имеет смысл в теме Макросы ОЛ: с побочными эффектами и/или детерминированные


    PPS. Тов. писал, что "каждый макрос в ОЛ есть детерминированная функция без побочных эффектов", и именно это неправильно. Да, в ОЛ могут быть макросы, являющиеся "детерминированной функцией без побочных эффектов". Например, если макрос состоит только из математики и логики (ну, ADD/AND/NOT/fMUL и т.п.). Но заявлять, что "каждый макрос в ОЛ без побочных эффектов" это явное лукавство, т.к. куча макросов направлена именно на побочные эффекты (на изменение внутреннего состояния ФБ, используемых в макросе). Если в макросе обратная связь или какой-нибудь ФБ, то всё, макрос наверняка с побочным эффектом и недетерминированный.
    Последний раз редактировалось Владимир Ситников; 20.04.2017 в 18:17.

Похожие темы

  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, 09:17

Ваши права

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