А если мне нужно обратиться с гл прогр.в прогр1,с прог1 в прог2,тутже с гл в прог2 и тд. Токак? Можно конечно через главную но это больше программа.Как я понял поу можно объявить только в одном месте и только один раз.
А если мне нужно обратиться с гл прогр.в прогр1,с прог1 в прог2,тутже с гл в прог2 и тд. Токак? Можно конечно через главную но это больше программа.Как я понял поу можно объявить только в одном месте и только один раз.
FB это тот же POU. В разделе объявления переменных задаете переменную, в качестве типа задаете имя функционального блока. Все. Экземпляр функционального блока описан. Теперь можете его использовать как POU. И таких переменных может быть много.
Например, у Вас есть FB с именем PR. В PLC_PRG в разделе объявления переменных описываете переменную
var1:PR;
После чего в программе вызываете
var1();
Что значит обратиться к какой-либо программе? Тут могут быть разные варианты. Можно программе на вход послать какое-то значение или наоборот, с выхода прочитать результат. При вызове программа, используя входные параметры, выполняется и выдает результат с помощью выходных параметров. Если вы еще раз вызвали POU в этом же цикле ПЛК, с другими значениями, то выходные значения также изменятся. Если выходные значения POU, к примеру, меняют состояние дискретных выходов ПЛК, то они будут соотвествовать результату после последнего вызова POU.
Если вам надо использовать повторяющийся код, но использовать его независимо, то используйте ФБ, для каждого независимого повторяющегося фрагмента свой экземпляр. Код будет один и тот же, а данные разные.
При открытии ФБ вываливается ассистент ввода и два варианта:экземпляры и реализация.При нажатии одного и второго все работает, но при наж. реализация цепочка как бы не активна, хотя она включена.А это для чего?
[QUOTE=amn;117064]Что значит обратиться к какой-либо программе?
A если так.Есть поу1,поу2 и тд.В поу2 пишу програмку.Переменная вход контроллера-перем с поу1-перем с гл прогр-выход.Ведь перем с поу1 не видна в поу2.А с гл прогр поу1 тоже вызывается.А поу объявляется только в одном месте.
Что-то я не совсем осознал вопрос. Можно его задать по-другому? Лучше на конкретном задании, чтобы было понятно о чем идет речь. Когда задаете имя входу или выходу контроллера то эти переменные уже глобальные и доступны везде. Когда вызываете программу, доступны только входные и выходные переменные этой программы. В нее (в программу) передаете в качестве параметров те переменные, которые хотите использовать внутри программы.
Можно использовать по всякому (разному) , но ЗНАЧЕНИЯ ВЫХОДАМ ДОЛЖНЫ БЫТЬ ПРИСВОЕНЫ В ПОСЛЕДНЕМ ВЫЗОВЕ ( кроме прерываний) и в таком случае будет работать актуальный . Он по любому будет работать (актуальный - последний в цепочке вызовов) , это надо понять и принять ( и простить) , так работает программа на любом контроллере .
Все промежуточные вычисления(и действия) имеют смысл если они остаются актуальными на момент ПОСЛЕДНЕГО ВЫЗОВА ,но результаты этих действий присвоенные промежуточным переменным будут актуальными. Например можно вызывать одну функцию с разными входными и результаты присваивать разным переменным , но с функциональным блоком это может не пройти , т.к будут рекурсии ( вернее псевдорекурсии) .
ВООБЩЕ к чему это все???? Чего хотите конкретно , есть множество способов запуска программ "через цикл" (в разных циклах контроллера) с целью равномерной нагрузки на процессор.
Благодарю amn и Василий Кашуба.Все так просто,глобальные переменные видны везде,а я не додул. Это сказывается отсутствие опыта.Но про ,,действие,,вы расскажите.Пожалуйста.
"Действие" или Action есть подпрограмма , вызываемая из "своей" программы и исползует переменные своей программы или глобальные , результаты могут быть любыми.
Опыт является результатом накопления результатов собственной деятельности. Поделится опытом можно с любым ,но усвоит его тот, кто достиг уровня усвоения , поэтому надо работать , пробовать и... накапливать собственный багаж, по другому бесполезно.