Создаем POU(PRG). В нем вызываем нужные группы POU. Все локальные переменные данной prg будут доступны всем вызываемым в нем POU. Все что нужно вынести за пределы prg объявляем входами и выходами, доступ к ним из любого места через точку.
Вид для печати
тудьі качель ... Товарищ , без подвоха и чего-то там еще ... Скажите - что есть уже клава с украинской раскладкой ???
А Вьі нам так об’ясняли http://www.owen.ru/forum/images/smilies/smile.png- ну ладно :
Россиский функциональный блок - Шарик(Собака) у него на входе суп , котлеты , объедки со стола ... , на выходе - Гав,Гав .
прибалтийский функциональный блок - Шарикас(Тож собака(с);)) у него на входе шпроты и...объедки со стола ..., на выходе -Гавс , Гавс .
Спасибо. То есть, для своих нескольких процессов, которьіе я хочу видеть более-менее изолированньіми друг от друга, я создаю несколько PRG. Сама по себе PRG, как особенньій POU, позволяет включать в свою группу другие POU. Так? Бьіло бьі чудненько.
К сожалению, у меня не получилось. Я на PRG кликаю ПКМ, вьібираю в контекстном меню Add Object - а новьій POU создается на том же уровне, что и єта PRG. Что не так?
2 SergeyXXX: Вот без подвоха, скажи, а зачем такой жуткий over citation? Правда интересно.
Украинская раскладка, да. Мне проще между двумя работать, чем между тремя. Уже и привьік. Могу временно включить, если тебя достает. Ща... ЫЫЫ, палучилось!
В картинке порожденный POU, он не видит parent_local
Да, это работает. В 10 байтах кода накручено так, что пришлось запустить проект, чтобы понять :)
Иначе говоря, это пример передачи в ФБ ссылки на структуру, в которой данные "для него, единственного". Потом уже в самом блоке идут обычные обращения к элементам структуры через ее адрес.
Это примерно то, что я думал сделать, чтобы не передавать всю структуру. Только еще добавлена НАДструктура в глобальных, что мне и в голову не пришло. Ну да, если перетянуть share в область локальніх переменных PLC_PRG, то программа будет работать, но третьим лицам данные будут недоступны. Ага. Ясно.
Но как отговаривают все от указателей! Хотя я без них, как без рук.
Спасибо! Буду думать. В любом случае придется пересмотреть все переменные, которые набросал (всегда с неохотой, да) в глобальные.
ну можно обойтись и без указателей, просто в область ввода-выводо ПОУ добавить не указатель а просто структуру, а на вход чтото_глобальное.чтото_персональное того же пользовательского типа, но это как мне кажется создает нагрузку, ведь надо в начале выполнения считать данные, а по завершении записать данные, причем всю структуру полностью, а не изменения
Эт все очень умно , даже сверх умно .
Только неудобочитаемо .
Тов. из Киева , само то что вы создаете ФБ подразумевает передачу на входы ФБ чего-либо , и подключение выходов к чему-либо .
Я ведь на показал на примере ФБ "Собака" чуть выше .
Притянуть данные из одной структуры , состоящей из нескольких массивов с разнородными данными другой структуре ч-з указатели - это гут , использование указателей в конструкциях типа Вася+Маша= Ванечка , это ...
Добавочка - классическое и , я думаю , правильная цепочка вызовов .
Да вовсе нет. Я создаю FB, т.к. это POU, имеющий память. Другой такой - PRG, не копируется в экземплярах.
И нет такой цели - передать что-то на входы и именно в классическом синтаксисе.
Ну, пример правильный. Я тоже накатил, как раз пришло время попробовать скумбрийку домашнего посола, сам делал. Ничьо так, не растерял талант на всякие там автоматизации....
Но вот что я думаю. Если по большому счету, почему дергать глобальные откуда ни попадя - плохо? С моей колокольни, это только потому, что возможны трудноустранимые баги. Кто-то где-то перднул не туда, а отозвалось совсем не сразу и в неожиданном месте. Или нет? Ну, я исхожу из этого. И потому принимаю кое-какие меры, смягчающие пробемы (но не устраняющие их, ясно).
Теперь мы говорим о том, что есть 2 или более группы POU, которіе должны бы работать каждая со своим набором переменных: общих для группы, но недоступных для других. (Вопрос еще, нафига... Ну ладно, допустим нужно). КДС не предлагает нам никаких видов переменных, кроме локальных и глобальных. Поэтому все, что будет доступно двум POU, будет доступно всем. Так?
Но если так, то что особенного нам даст запрятывание наших переменных в структуры? Если эти структуры глобальны, то всякий дурак туды забресть может. В силах программиста не лезть в чужие структуры из другой группы - но разве не в его же силах не лезть и просто в глобальные переменные, которые он же сам и назвал "а это переменные для другой группы POU".
То есть, если я в области глобальных переменных сотворю кусок кода и назову "пул номер 1", затем "пул номер 2". Елси я создам несколько POU, в которіх буду обращаться только к пулу №1, а потом еще несколько POU, в которых обарщаюсь только к пулу №2, то чем это хуже прекрасного примера от capzap?
При этом, успокою пьющего товарища, я все равно пройдусь по использованию переменных и уберу явные излишества использования глобальных. Но принципиально не сделаю так, по классике: вот это входы, вот выходы, больше ФБ ничего не видит. Такая классика не подходит для даже более менее сложных программ (во всяком случае, на моем уровне владения программированием).
Я намеренно усугубил. Может быть, как раз для надежности я бы и поставил обращение из ФБ по указателю на структуру, передаваемому на вход ФБ. Но хочу получить подтверждение от вас, что это принципиально не меняет факта, что мы нарушаем заповедь "не юзать глобальных из ФБ".
Или я перепил?
ПОУ создаем обычным образом. Для удобства создаем несколько папок (для каждой группы свою). "Особенный" ПОУ в котором вызываем все программы, которые относятся только к этой группе и все эти ПОУ перетаскиваем в эту папку (на самом деле нет разницы где они будут находиться).
Локальные переменные "особенного ПОУ" в ПОУ группы передаем через входы.
Если POU в виде prg, то к переменной можно обращаться через точку. То есть можно задать кучу разнородных входных переменных и использовать этот ПОУ как структуру. Доступ к нему будет из любого места проекта.
Сейчас (не буду выкладывать) сделал ФБ с выходом и с действием с глобальной переменной и , странно , обычное Ctrl+Space не хочет показывать глобалку , но мы ее все равно вводим и все выполняется , только результат в симуляторе странный , в ПЛК другой будет .
Отсюда вывод : сама возможность каких-либо действий с глобальными переменными внутри! ФБ это есть "косяк" КДС2 , в КДС3 , по моему (блин могу ощибаться , а проверять неохота , может позже) так не забалуешь .
Лично для меня вопрос использования ФБ только из-за выделения его экземпляру оперативы - это вопрос "Сферического коня в кубе и еще и в вакууме , растворенном в растворителе марки 650".
Для чего вам это ? Или вы используете опыт и наработки программирования микропроцессоров на СИ ? ... По ходу да?