Показано с 1 по 10 из 10

Тема: Получение списка/указателей на ФБ проекта

  1. #1

    По умолчанию Получение списка/указателей на ФБ проекта

    Здравствуйте.
    подскажите, есть ли возможность в КодеСис программно получить список всех ФБ проекта.
    Нужно создать список ФБ определенных типов (собственной разработки) при инициализации программы, и потом обращаться к ним через единый интерфейс.

  2. #2

    По умолчанию

    А через статические переменные ФБ никак не получится?
    При первом вызове каждого экземпляра регистрируете экземпляр в некоем глобальном массиве.

  3. #3

    По умолчанию

    Да, конечно и так можно. Просто не люблю глобальные переменные ))
    Интересовался, может есть такая возможность встроенная.
    спасибо.

  4. #4

    По умолчанию

    еще вопрос похожий, чтоб тему не заводить - здесь.
    есть ли какая то возможность работать с функциональным блоком по его индексу, выдаваемому indexof() ? по адресу видимо вообще никак..

    скажем, надо получить доступ к фб (входы, выходы, действия) из другого фб, имея индекс. если нет, то для чего существует функция получения индекса блока?

    офф. планируется ли адаптация 3-ей версии кодесиса для овенов? (ООП)

  5. #5

    По умолчанию

    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

  6. #6

    По умолчанию

    Цитата Сообщение от Малышев Олег Посмотреть сообщение
    1)
    Вполне возможны следующеие вызовы

    typedef
    myFBptr:POINTER TO myFB;
    ....
    all_fbs:array [1..200] of myFBptr;
    ....
    all_fb[n]^(a:=1,b:=2);
    да, так конечно можно.
    я по другому хотел, типа так -

    MyFB : obj
    obj.value := ...
    dword addr := ADR(obj);
    ....
    ....
    xxx := приведение к MyFB(addr).value;

    НО. нельзя преобразовать к типу структура, что в общем то и понятно.. обойдусь без этого )

  7. #7

    По умолчанию

    Так не нужно сразу преобразовывать - сделайте указатель на ФБ, присвойте ему переменную типа DWORD и вызывайте через указатель
    fbptr:=adr(myfbd);
    fbptr^();

  8. #8

    По умолчанию

    Аркадий, это же не С!
    Пожалейте тех, кто будет поддерживать систему после Вас.
    Чем проще - тем лучше и надёжнее. А указатели - в самом крайнем случае, очень уж это "продвинутая" вещь. Так много нюансов.

    А массив экземпляров FB не устраивает? Зачем указатель?

    И добавлю - перед использованием указателя, тем более на FB, обязательно проверяйте его на NULL или, что лучше, специальной функцией на принадлежность к массиву FB. Пример такой проверки - сравнение с началом и концом массива FB и на кратность размеру FB.
    Такую проверку надо делать всегда, ведь это система управления, она должна быть сверхнадёжна.
    Последний раз редактировалось Филоненко Владислав; 05.03.2008 в 13:41.

  9. #9

    Post

    fbptr:=adr(myfbd);
    fbptr^();
    да это то понятно, это просто все )

    это же не С!... А указатели - в самом крайнем случае, очень уж это "продвинутая" вещь. Так много нюансов.
    я знаю )) просто привык к ним.

    И добавлю - перед использованием указателя, тем более на FB, обязательно проверяйте его на NULL или, что лучше, специальной функцией на принадлежность к массиву FB. Пример такой проверки - сравнение с началом и концом массива FB и на кратность размеру FB.
    Такую проверку надо делать всегда, ведь это система управления, она должна быть сверхнадёжна.
    это тоже прописные истины )). так то я сам разработчик исполняющей системы для pc совместимых контроллеров, подобие фбд. на с++ писана.
    просто сейчас под кодесис много чего мне не хватает, вот и интересуюсь что и как можно сделать. и еще буду спрашивать, не обессудьте ))

  10. #10

    По умолчанию

    Рад помочь коллеге.

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •