PDA

Просмотр полной версии : Процедуры в CoDeSys



Владимир_eng
15.12.2008, 22:48
Здравствуйте,
Совсем недавно начал знакомиться с CoDeSys и уперся в проблему:
Создать функцию в SFC нельзя,
тогда каким образом вычленить большую часть программного блока и передать ей управление.
(Через программу? Тогда как передать управление и дождаться, когда эта программа вернет его.):confused:

Jeck
16.12.2008, 00:24
Владимир_eng термину Процедуры из курса информатики в CoDeSys, имхо, соотвествует - функциональный блок.
ps вы более подробнее опишите проблему. а то не совсем ясно , что вам нужно и , что у вас не получается....

Владимир_eng
16.12.2008, 12:41
Я хочу уточнить:
как приостановить выполнение программы PLC_PRG,
запустить программу PLC_SamAny, расположенную в этом же проекте, и по окончании выполнения PLC_SamAny вернуть управление в PLC_PRG после шага вызова PLC_SamAny.
(Например для того чтобы вынести в отдельный модуль процедуру перемещения платформы, вызываемую по ходу программы несколько раз). (Если это возможно, подскажите пожалуйста, как это будет выглядеть в ST)

Jeck
16.12.2008, 18:47
так же , как и функциональный блок...
ps советую ,найдите в сети - "Солон - Программируемые контроллеры. Стандартные языки и приемы прикладного проектирования.2004.djvu"
все на много понятней станет.

Владимир_eng
16.12.2008, 22:01
,найдите в сети - "Солон - Программируемые контроллеры. Стандартные языки и приемы прикладного проектирования..

Большое спасибо!

alex1963
17.12.2008, 21:08
В CoDeSys (Точнее в МЭК 61131-3) специфическая терминология.
Из 3 видов модулей (POU) только функция примерно соответствует этому понятию в других языках. И хотя формально должно возвращаться значение, но система не обязывает его использовать, так что можно использовать функции как процедуры.
Программа (PRG) - что-то вроде процедуры, у нее могут быть параметры, но механизм их передачи другой - это общедоступные переменные, которым можно присвоить значения в любом месте, а не только при вызове (MyPrg.Arg:=5; .... MyPrg() вместо MyPrg(Arg:=5)) и они сохраняются.
Наконец - функциональный блок (FB) - та же программа, но могущая быть разможенной в нескольких экземплярах (instances). У каждого экземпляра - свой набор переменных. Экземпляры FB надо описывать перед использованием, как переменные. Больше всего FB напоминает класс С++, но то, что CoDeSys называет параметрами, соответствует public переменным класса, а параметров в смысле С++ у методов (actions) FB, увы, нет.

Игорь Петров
23.12.2008, 17:48
...а параметров в смысле С++ у методов (actions) FB, увы, нет.
Точнее небыло, пока не появился CoDeSys V3 :)

Владимир_eng
03.01.2009, 19:45
так же , как и функциональный блок...
ps советую ,найдите в сети - "Солон - Программируемые контроллеры. Стандартные языки и приемы прикладного проектирования.2004.djvu"
все на много понятней станет.

Еще раз спасибо за тнформацию, книга действительно поучительна.
Но, или по неопытности, либо по тупости вопрос так и остался открытым:
при вызове экземпляра ФБ код в блоке продолжает циклически выполняться, пока выходное условие не станет TRUE, (т.е. идет распаралеливание задач).
А я спрашивал - возможно ли передать блоку (экземпляру ФБ либо программе) управление, и пока она не выполниться не выполнять последующие шаги основной программы.

Jeck
03.01.2009, 20:29
Владимир_eng, вы ни-как не избавитесь от "компьютерного мышления"... с ПЛК, дело обстоит не так.. 1)опрашиваем входы 2) решаем, что делать 3) записываем выходы. цикл замыкается сам. поэтому основная программа( в основном PLC_PRG) работает каждый цикл. более того, если время основной программы превысит порог, то "собака" сбросит плк.

А я спрашивал - возможно ли передать блоку (экземпляру ФБ либо программе) управление, и пока она не выполниться не выполнять последующие шаги основной программы.
как вариант... PLC_PRG на SFC. вызовы ФБ-ов пишете в шагах. прописываете переходы между ними и все. шаг SFC будет выполнятся постояно, пока не будет выполненно условие перехода...

Владимир_eng
03.01.2009, 21:15
спасибо!
наверное это тот случай, когда мышление надо подстраивать под среду, а не средствами языка выражать свои мысли :(

еще раз спасибо, а за букварь особая благодарность.