Здравствуйте.
подскажите, есть ли возможность в КодеСис программно получить список всех ФБ проекта.
Нужно создать список ФБ определенных типов (собственной разработки) при инициализации программы, и потом обращаться к ним через единый интерфейс.
Здравствуйте.
подскажите, есть ли возможность в КодеСис программно получить список всех ФБ проекта.
Нужно создать список ФБ определенных типов (собственной разработки) при инициализации программы, и потом обращаться к ним через единый интерфейс.
А через статические переменные ФБ никак не получится?
При первом вызове каждого экземпляра регистрируете экземпляр в некоем глобальном массиве.
Да, конечно и так можно. Просто не люблю глобальные переменные ))
Интересовался, может есть такая возможность встроенная.
спасибо.
еще вопрос похожий, чтоб тему не заводить - здесь.
есть ли какая то возможность работать с функциональным блоком по его индексу, выдаваемому indexof() ? по адресу видимо вообще никак..
скажем, надо получить доступ к фб (входы, выходы, действия) из другого фб, имея индекс. если нет, то для чего существует функция получения индекса блока?
офф. планируется ли адаптация 3-ей версии кодесиса для овенов? (ООП)
1) С индексами не получится - эта система, по неточнных данным, нужна для реализации SysLibCallBack
2) Почему ничего не получается с адресами?
Вполне возможны следующеие вызовы
typedef
myFBptr:POINTER TO myFB;
....
all_fbs:array [1..200] of myFBptr;
....
all_fb[n]^(a:=1,b:=2);
3) Третий кодесис планируется, но не для ПЛК 100-150
Так не нужно сразу преобразовывать - сделайте указатель на ФБ, присвойте ему переменную типа DWORD и вызывайте через указатель
fbptr:=adr(myfbd);
fbptr^();
Аркадий, это же не С!
Пожалейте тех, кто будет поддерживать систему после Вас.
Чем проще - тем лучше и надёжнее. А указатели - в самом крайнем случае, очень уж это "продвинутая" вещь. Так много нюансов.
А массив экземпляров FB не устраивает? Зачем указатель?
И добавлю - перед использованием указателя, тем более на FB, обязательно проверяйте его на NULL или, что лучше, специальной функцией на принадлежность к массиву FB. Пример такой проверки - сравнение с началом и концом массива FB и на кратность размеру FB.
Такую проверку надо делать всегда, ведь это система управления, она должна быть сверхнадёжна.
Последний раз редактировалось Филоненко Владислав; 05.03.2008 в 13:41.
да это то понятно, это просто все )fbptr:=adr(myfbd);
fbptr^();
я знаю )) просто привык к ним.это же не С!... А указатели - в самом крайнем случае, очень уж это "продвинутая" вещь. Так много нюансов.
это тоже прописные истины )). так то я сам разработчик исполняющей системы для pc совместимых контроллеров, подобие фбд. на с++ писана.И добавлю - перед использованием указателя, тем более на FB, обязательно проверяйте его на NULL или, что лучше, специальной функцией на принадлежность к массиву FB. Пример такой проверки - сравнение с началом и концом массива FB и на кратность размеру FB.
Такую проверку надо делать всегда, ведь это система управления, она должна быть сверхнадёжна.
просто сейчас под кодесис много чего мне не хватает, вот и интересуюсь что и как можно сделать. и еще буду спрашивать, не обессудьте ))
Рад помочь коллеге.