Что делает Myx_DG1, где здесь IO_a1, IO_b1, IO_c1 и IO_d1 и как они взаимосвязаны?
А про момент времени - в любой момент цикла как только будут определены его входы
Вид для печати
Соединение Myx_DG1 и IO_a1 таким образом должно было неизбежно вызвать превращение одной из циклических связей в линию задержки. Она и определит последовательность выполнения этих блоков.
Поскольку линия задержки не подсвечивается, то до компиляции ещё дело не дошло (возможно есть неисправленная ошибка в ФБ, или эти ФБ не участвуют в формировании состояния выходов ПР/энергонезависимых переменных)
Всё взаимосвязано через переменные, алгоритмы внутри блоков разные,
обрабатывают разные входные переменные, и выдают в разные выходы.
Этот уровень сложности вложений и зависимостей и отличает ST
от остальных "простых квадратиков" - логики,
на работу с которой и были рассчитаны реле изначально.
Когда были ещё маленькими и слабенькими. :)
Отсюда и вопрос - как быть уверенным, что в какой-то момент времени
последовательность исполнения этой паутины не поменяется?
Да, ладно, здесь на форуме даже игрушку делали для ПР200. А что Сергей0308 c этими квадратиками делает - просто улет
Не забываем, что на холсте функции и ФБ на ST такие же квадратики, что и макросы, функции и ФБ на FBD. Так что паутина не поменяется, если вы что-то не поменяете
Если всю программу писать на ST то почему она должна выполняться не последовательно вашей записи ?
Все же больше похоже на ПР200, там было то же самое, Сбой логики программы, обнуление переменных и в том же духе :)
Говорят там датчик скорости отказал, в смысле, на Земле калибровали по количеству мух попавших в корпус за единицу времени и всё идеально работало!
На Луне без мух не заработало, в смысле, кто бы мог подумать, что на Луне мух нет!
ПавелП так у вас ПРИБИТО общим кодом на ST, где вы вызываете уже отдельно взятые блоки.
Если все текстом, смотрите ваш текст - так и должно выполняться.
а связи у вас только через переменные, и либо блок забирает на текущем цикле старые данные, значит на новом цикле он возьмет новое значение.
да начхать на пересечение связей, если они у вас текстовые...
Вроде как только квадратики выполняются согласно линиям связи и компилятор что-то там мутит и предлагает. Текст тут при чем ?
Я уже писал, что порядок выполнения блоков определяется связями не зависимо от того, что внутри блока - квадратики, программа на ST или машинный код. Так же неважно расположение блока на холсте - выполниться он как только будут определены его входные параметры. Если результат работы блока изменяет какой-нибудь параметр на его входе (не важно прямо или через другие блоки), то будет предложена линия задержки.
Вам не надоело?
Почитайте стандарт, там страниц на 1000...
Вы уже неделю ср..сь из-за того, что оговорено этим стандартом, а все ваши домыслы оставьте при себе.
https://docs.cntd.ru/document/1200135008
Вот, специально для вас нашёл:
Однако, когда тело программного компонента состоит из одной или нескольких сетей, результаты вычисления сети внутри указанного тела должны быть функционально эквивалентны соблюдению следующих правил:
a) Ни один элемент сети не вычисляется, пока не вычислены состояния всех его входов.
b) Вычисление элемента сети не является окончательным, пока не вычислены состояния всех его выходов.
c) Вычисление сети не завершено, пока не вычислены состояния выходов всех ее элементов, даже если сеть содержит один из элементов управления выполнением.
d) Порядок вычисления сети должен соответствовать положениям для языка LD и для языка FBD.
Кстати, пора модератору эти, не относящиеся к ПР205, посты перенести куда-нибудь в курилку
Ладно, как часто вы встречали ситуации, когда порядок выполнения блоков был критичен? - ну изменились параметры и блок посчитал их не в текущем цикле, а в следующем, и что? У меня были единичные случаи типа написания R_Trig на FBD (не в лоджике), там да, промежуточная переменная должна записаться последней. А в лоджике для это есть линия задержки, энергонезависимая переменная и экранная переменная с галкой на "записать в конце цикла"
Спасибо за ссылку. Читаю: 4.3 Модель программирования
1. Для программирования функций, типов функциональных блоков и методов может использоваться язык программирования, отличный от языков, определенных в настоящем стандарте.
Т.е. - стандарт - это не приговор.
"Насильная" нумерация блоков - неизбежность.
Так было на "заре компиляторов":
1. Однопроходные, где подпрограмма должна быть написано до её использования - объявления на неё ссылки.
2. По мере совершенствования появились многопроходные компиляторы, которые выискивали эти метки,
и, уже вместо человека, расставляли всё как надо, потом окончательно всё компилируя.
Я на асме написал достаточно, чтоб понимать как всё это устроено.
Почему и говорю про эту нумерацию.
Вот и в вашем стандарте про это: 6.6.5.6 Динамическое связывание имен (OVERRIDE)
Связывание имен - это ассоциация имени метода с именем реализации. Привязка имени (например, компилятором) до выполнения программы называется статической или "ранней" привязкой. Привязка, выполняемая во время выполнения программы, называется динамической или "поздней" привязкой.
Т.к. в ST нынешнем (да вроде как и в паскале - могу ошибаться), нет подпрограмм.
Это достигается другими методами.
И компилятор "молотит" алгоритм, как логику - линейно.
И нет возможности эту последовательность изменить.
Пока в ПР205 ST развивается до "нормы", надо это учесть.
P.S.
И было бы гораздо проще, будь глобальные переменные.
Как в CodeSYS. Кто не хочет - пусть не использует. :)
И не нервничайте - используем то что есть по максимуму.
А пока просчитаю стандарт до конца.
В том то и дело, что это программируемое реле, а не полноценный ПЛК, о чем мы уже выше говорили. Вон у Сименса лого 6, и лого 8. И софт комфорт для написания программ, и как я помню релизы 8.2 и 8.3 максимум. А овен только в начале пути, много косяков, что уж теперь.
Вопрос по экранам , у меня у одного такое , что в любом из экранов работают клавиши вверх вниз как пролистывание экранов , хотя стрелочки вверх и вниз не используются .
Мне допустим не нужно листать по кругу между экранами , а если сделать как вы говорите , пропадет вообще возможность листать вверх вниз ?