Страница 472 из 856 ПерваяПервая ... 372422462470471472473474482522572 ... ПоследняяПоследняя
Показано с 4,711 по 4,720 из 8555

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

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

    По умолчанию

    Как же тогда отдать наружу результат работы, т.е. произвольный (из некоего набора) интерфейс?

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

    По умолчанию

    Цитата Сообщение от fatlortroll Посмотреть сообщение
    Как же тогда отдать наружу результат работы, т.е. произвольный (из некоего набора) интерфейс?
    Сформулируйте, пожалуйста, конкретную задачу из вашей предметной области, которую вы пытаетесь решить.

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

    По умолчанию

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

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

    По умолчанию

    Цитата Сообщение от fatlortroll Посмотреть сообщение
    Есть несколько экземпляров функблоков "устройств", реализующих некоторые интерфейсы. Каждому экземпляру "устройства" присвоен уникальный индекс. Диспетчер интерфейсов должен получать индекс "устройства", интерфейс, который от этого "устройства" хочется получить, и, если "устройство" этот интерфейс реализует, возвращать его (интерфейс). Ну а если не реализует -- как либо сообщать об ошибке.
    Давайте определимся - что значит "возвращать интерфейс"? Что лично для вас означает термин "интерфейс" в контексте решаемой задачи?
    Сразу уточню - я не издеваюсь, не пытаюсь придраться к словам и т.д.
    Просто вы сейчас задаете вопросы из области, где терминология предельно важна, и мне надо очень четно понимать ваше представление о ней.

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

    По умолчанию

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

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

    По умолчанию

    Цитата Сообщение от 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 - это системный оператор, реализованный крайне специфичным образом и функционирующий именно так, как было задумано его создателями.
    Если вам интересно мое мнение - то я бы рекомендовал использовать его, а не пытаться разработать "аналог".

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

    По умолчанию

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

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

  8. #4718
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    13,612

    По умолчанию

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

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

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

    По умолчанию

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

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

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

    По умолчанию

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

Страница 472 из 856 ПерваяПервая ... 372422462470471472473474482522572 ... ПоследняяПоследняя

Похожие темы

  1. Панели оператора СП3xx. Вопросы и ответы
    от Мурат Ахриев в разделе Панели оператора (HMI)
    Ответов: 4027
    Последнее сообщение: Вчера, 15:02
  2. Панели оператора ИП320. Вопросы и ответы
    от automat в разделе Панели оператора (HMI)
    Ответов: 849
    Последнее сообщение: 16.11.2025, 08:58
  3. ИПП120. Вопросы и ответы
    от Р.Александр в разделе Программируемые реле
    Ответов: 273
    Последнее сообщение: 08.09.2025, 13:21
  4. Индикатор ИП120 , вопросы- ответы
    от rovki в разделе Программируемые реле
    Ответов: 56
    Последнее сообщение: 03.11.2017, 15:58
  5. Панели оператора СП270. Вопросы и ответы
    от Давидюк в разделе Панели оператора (HMI)
    Ответов: 930
    Последнее сообщение: 15.05.2017, 17:12

Ваши права

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