Страница 474 из 716 ПерваяПервая ... 374424464472473474475476484524574 ... ПоследняяПоследняя
Показано с 4,731 по 4,740 из 7153

Тема: CODESYS V3.5. Вопросы и ответы

  1. #4731
    Пользователь
    Регистрация
    08.02.2020
    Адрес
    Ставрополь
    Сообщений
    228

    По умолчанию

    Интерфейс -- это https://help.codesys.com/webapp/_cds...rsion=3.5.17.0 в терминах среды кодсиса.
    Я хотел сделать что-то вроде аналога оператора __QUERYINTERFACE, или, может быть, точнее будет назвать это фабрикой интерфейсов.

  2. #4732
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    12,252

    По умолчанию

    Цитата Сообщение от fatlortroll Посмотреть сообщение
    Интерфейс -- это https://help.codesys.com/webapp/_cds...rsion=3.5.17.0 в терминах среды кодсиса.
    Интерфейс - это тип данных. Его нельзя вернуть в вызове POU. Можно вернуть экземпляр конкретного интерфейса.
    Экземпляр интерфейса - это ссылка на экземпляр ФБ, реализующего данный конкретный интерфейс.
    Экземпляр какого интерфейса вы хотите возвращать в вызове своей "фабрики"?

    Судя по предыдущим постам (поправьте меня, пожалуйста, если я неверно вас понял) - произвольного.
    Но что значит "экземпляр произвольного интерфейса" в контексте языка со статической типизацией?
    Можно сказать (и мы уже это обсуждали), что экземпляры интерфейсов, передаваемые оператору __QUERYINTERFACE, должны наследовать системный интерфейс __SYSTEM.IQueryInterface.
    И действительно - можно реализовать POU, который будет возвращать экземпляр такого типа. Т.е. на выходе вы получите ссылку на экземпляр ФБ, который реализует __SYSTEM.IQueryInterface.
    Какому объекту вы передадите значение этого выхода? Опять же, типизация статическая - т.е. только другому объекту данного типа.

    Соответственно, вы получите ссылку на экземпляр ФБ, реализующего __SYSTEM.IQueryInterface.
    Что предполагается делать с ним дальше? У __SYSTEM.IQueryInterface нет публичных методов.

    Цитата Сообщение от fatlortroll Посмотреть сообщение
    Я хотел сделать что-то вроде аналога оператора __QUERYINTERFACE, или, может быть, точнее будет назвать это фабрикой интерфейсов.
    __QUERYINTERFACE - это системный оператор, реализованный крайне специфичным образом и функционирующий именно так, как было задумано его создателями.
    Если вам интересно мое мнение - то я бы рекомендовал использовать его, а не пытаться разработать "аналог".

  3. #4733
    Пользователь
    Регистрация
    08.02.2020
    Адрес
    Ставрополь
    Сообщений
    228

    По умолчанию

    > Можно вернуть экземпляр конкретного интерфейса

    Да, предполагалось, что будет объявлен экземпляр определённого интерфейса (занулённый), затем передан фабрике вместе с индексом "устройства", предположительно реализующего подобный интерфейс. Если "устройство" действительно реализует интерфейс такого типа, то переданный экземпляр интерфейса инициализируется этим "устройством", если нет -- остаётся равным нулю. Набор интерфейсов, которые может создавать фабрика, конечно, фиксированный.

  4. #4734
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    12,252

    По умолчанию

    Цитата Сообщение от fatlortroll Посмотреть сообщение
    > Можно вернуть экземпляр конкретного интерфейса

    Да, предполагалось, что будет объявлен экземпляр определённого интерфейса (занулённый), затем передан фабрике вместе с индексом "устройства", предположительно реализующего подобный интерфейс. Если "устройство" действительно реализует интерфейс такого типа, то переданный экземпляр интерфейса инициализируется этим "устройством", если нет -- остаётся равным нулю. Набор интерфейсов, которые может создавать фабрика, конечно, фиксированный.
    Я, возможно, что-то упускаю - но вы сейчас фактически в точности описали, как работает __QUERYINTERFACE (за исключением "индекса", но я не понял, какую он в данном случае играет роль).

  5. #4735
    Пользователь
    Регистрация
    08.02.2020
    Адрес
    Ставрополь
    Сообщений
    228

    По умолчанию

    Идея была в том, чтобы каждое "устройство" не знало про остальных ничего, кроме уникального индекса, и, предположительно, интерфейса, который может быть реализован по этому индексу.

    Т.е. из "устройства" выполняется запрос к фабрике интерфейсов, отдаётся ей уникальный индекс, и экземпляр интерфейса, предположительно реализуемый "устройством" с таким индексом. А фабрика, если по индексу реализован запрашиваемый интерфейс, инициализирует его.

  6. #4736
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    12,252

    По умолчанию

    А фабрика, если по индексу реализован запрашиваемый интерфейс, инициализирует его.
    В моем понимании "инициализация экземпляра интерфейса" - это присвоение ему экземпляра ФБ, реализующего это интерфейс.
    Где (в каком POU вашего проекта) на ваш взгляд должен быть объявлен этот экземпляр ФБ?

  7. #4737
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,255

    По умолчанию

    у Сименса есть нечто подобное owen.png может на него лучше перейти с такими запросами
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  8. #4738

    По умолчанию

    Добрый день. Да, после перезапуска все собралось. Прошу прощения за панику. Как то даже неудобно теперь)

  9. #4739
    Пользователь
    Регистрация
    08.02.2020
    Адрес
    Ставрополь
    Сообщений
    228

    По умолчанию

    Все "устройства" объявлены статически, в отдельном GVL.

  10. #4740
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    12,252

    По умолчанию

    Цитата Сообщение от fatlortroll Посмотреть сообщение
    Все "устройства" объявлены статически, в отдельном GVL.
    Да, предполагалось, что будет объявлен экземпляр определённого интерфейса (занулённый), затем передан фабрике вместе с индексом "устройства", предположительно реализующего подобный интерфейса. Если "устройство" действительно реализует интерфейс такого типа, то переданный экземпляр интерфейса инициализируется этим "устройством", если нет -- остаётся равным нулю. Набор интерфейсов, которые может создавать фабрика, конечно, фиксированный.
    С "занулённым" интерфейсом ничего нельзя сделать. Ну т.е. он реально представляет собой 32-битное беззнаковое целое со значением 0, и на этом всё.
    Чтобы убедиться, что "устройство действительно реализует интерфейс такого типа" - нужно сначала инициализировать экземпляр интерфейса экземпляром ФБ устройства - тогда можно будет использовать __QUERYINTERFACE. Т.е. результат, который вы хотите получить в результате успешной проверки, является необходимым условием этой проверки.

    Если позволите высказать мне свое мнение - я бы вам рекомендовал сосредоточиться на реальной задаче из реальной предметной области и проанализировать различные возможные варианты ее решения, а не зацикливаться на одном конкретном (см. XY Problem в подписи). Понятно, что "когда у вас в руке молоток, всё становится похожим на гвозди" - но иногда рубить деревья молотком оказывается не очень удобным. Надеюсь, вы автоматизируете не абстрактную фабрику. =)

Страница 474 из 716 ПерваяПервая ... 374424464472473474475476484524574 ... ПоследняяПоследняя

Похожие темы

  1. Панели оператора СП3xx. Вопросы и ответы
    от Мурат Ахриев в разделе Панели оператора (HMI)
    Ответов: 3271
    Последнее сообщение: Вчера, 12:27
  2. Панели оператора ИП320. Вопросы и ответы
    от automat в разделе Панели оператора (HMI)
    Ответов: 826
    Последнее сообщение: 30.04.2024, 20:16
  3. ИПП120. Вопросы и ответы
    от Р.Александр в разделе Программируемые реле
    Ответов: 245
    Последнее сообщение: 02.10.2022, 11:34
  4. Индикатор ИП120 , вопросы- ответы
    от rovki в разделе Программируемые реле
    Ответов: 56
    Последнее сообщение: 03.11.2017, 15:58
  5. Панели оператора СП270. Вопросы и ответы
    от Давидюк в разделе Панели оператора (HMI)
    Ответов: 930
    Последнее сообщение: 15.05.2017, 17:12

Ваши права

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