Как ловко жонглируем терминами "детерминированная функция без побочных эффектов" и "историей состояний его входов".
Перевожу с русского на русский: эти два утверждения совершенно противоположны и одновременно не могут сосуществовать.
На всякий случай, дам ссылку на Wikipedia про побочные эффекты:
https://ru.wikipedia.org/wiki/%D0%9F...D%D0%B8%D0%B5)
Нужная часть:
Очевидно, TON/TOF/SR/BLINK и т.п. функциональные блоки хранят и изменяют состояние. Их вызов сопряжён с чтением и записью этих значений.Сообщение от Wikipedia
Операция "write to FB" так вообще один сплошной побочный эффект.
Согласно определению с Wikipedia, если ОЛ-макрос содержит что-нибудь типа TON/TOF/SR/BLINK, то этот макрос нужно называть "недетерминированными функциями с побочными эффектами". Ведь, наличие TON/TOF/SR/BLINK может привести к тому, что "будет разный результат при одних и тех же входных аргументах".
И после этого будем говорить, что "Каждый макрос в нем есть детерминированная функция без побочных эффектов"? Ну как такое можно говорить?
Не стоит выдавать желаемое за действительное (ну или зачем ещё говорить высокопарные слова?)
Очевидно, что большинство программ/макросов с побочными эффектами (как я говорил, TON/TOF/BLINK/SR/write to FB -- и всё, получай побочный эффект)
Вот те раз. А сетевые переменные не глобальные что-ли?
Подразберитесь с теорией. Разумеется, из внутренних макросов менять внешние переменные нехорошо, но это (изменение внешних) не является необходимым критерием на "наличие побочных эффектов".
Например, блок BLINK ничего не меняет, но это побочный эффект -- "обращение к источнику времени". Его вызываешь, и он возвращает разное.
Аналогично и блок TON в макросе это тоже побочный эффект, хоть он "как бы" и не изменяет "внешнюю переменную"





