Как же тогда отдать наружу результат работы, т.е. произвольный (из некоего набора) интерфейс?
Как же тогда отдать наружу результат работы, т.е. произвольный (из некоего набора) интерфейс?
Связь со мной: telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru (личка на форуме - не подходит)
Раздел CDS V3.5 на сайте | Основные темы по CDS V3.5 на форуме: Вопросы и ответы | Визуализация | Настройка обмена с другими устройствами
Repository Archive V3.5 SP4 (необходим для СПК207/СПК1хх без Eth/ПЛК3xx)
oscat.ru | Как обратиться в техподдержку? | Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | Проблема XY | Как правильно задавать вопросы | AnyDesk
Есть несколько экземпляров функблоков "устройств", реализующих некоторые интерфейсы. Каждому экземпляру "устройства" присвоен уникальный индекс. Диспетчер интерфейсов должен получать индекс "устройства", интерфейс, который от этого "устройства" хочется получить, и, если "устройство" этот интерфейс реализует, возвращать его (интерфейс). Ну а если не реализует -- как либо сообщать об ошибке.
Давайте определимся - что значит "возвращать интерфейс"? Что лично для вас означает термин "интерфейс" в контексте решаемой задачи?
Сразу уточню - я не издеваюсь, не пытаюсь придраться к словам и т.д.
Просто вы сейчас задаете вопросы из области, где терминология предельно важна, и мне надо очень четно понимать ваше представление о ней.
Последний раз редактировалось Евгений Кислов; 12.11.2022 в 00:04.
Связь со мной: telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru (личка на форуме - не подходит)
Раздел CDS V3.5 на сайте | Основные темы по CDS V3.5 на форуме: Вопросы и ответы | Визуализация | Настройка обмена с другими устройствами
Repository Archive V3.5 SP4 (необходим для СПК207/СПК1хх без Eth/ПЛК3xx)
oscat.ru | Как обратиться в техподдержку? | Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | Проблема XY | Как правильно задавать вопросы | AnyDesk
Интерфейс -- это https://help.codesys.com/webapp/_cds...rsion=3.5.17.0 в терминах среды кодсиса.
Я хотел сделать что-то вроде аналога оператора __QUERYINTERFACE, или, может быть, точнее будет назвать это фабрикой интерфейсов.
Интерфейс - это тип данных. Его нельзя вернуть в вызове POU. Можно вернуть экземпляр конкретного интерфейса.
Экземпляр интерфейса - это ссылка на экземпляр ФБ, реализующего данный конкретный интерфейс.
Экземпляр какого интерфейса вы хотите возвращать в вызове своей "фабрики"?
Судя по предыдущим постам (поправьте меня, пожалуйста, если я неверно вас понял) - произвольного.
Но что значит "экземпляр произвольного интерфейса" в контексте языка со статической типизацией?
Можно сказать (и мы уже это обсуждали), что экземпляры интерфейсов, передаваемые оператору __QUERYINTERFACE, должны наследовать системный интерфейс __SYSTEM.IQueryInterface.
И действительно - можно реализовать POU, который будет возвращать экземпляр такого типа. Т.е. на выходе вы получите ссылку на экземпляр ФБ, который реализует __SYSTEM.IQueryInterface.
Какому объекту вы передадите значение этого выхода? Опять же, типизация статическая - т.е. только другому объекту данного типа.
Соответственно, вы получите ссылку на экземпляр ФБ, реализующего __SYSTEM.IQueryInterface.
Что предполагается делать с ним дальше? У __SYSTEM.IQueryInterface нет публичных методов.
__QUERYINTERFACE - это системный оператор, реализованный крайне специфичным образом и функционирующий именно так, как было задумано его создателями.
Если вам интересно мое мнение - то я бы рекомендовал использовать его, а не пытаться разработать "аналог".
Связь со мной: telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru (личка на форуме - не подходит)
Раздел CDS V3.5 на сайте | Основные темы по CDS V3.5 на форуме: Вопросы и ответы | Визуализация | Настройка обмена с другими устройствами
Repository Archive V3.5 SP4 (необходим для СПК207/СПК1хх без Eth/ПЛК3xx)
oscat.ru | Как обратиться в техподдержку? | Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | Проблема XY | Как правильно задавать вопросы | AnyDesk
> Можно вернуть экземпляр конкретного интерфейса
Да, предполагалось, что будет объявлен экземпляр определённого интерфейса (занулённый), затем передан фабрике вместе с индексом "устройства", предположительно реализующего подобный интерфейс. Если "устройство" действительно реализует интерфейс такого типа, то переданный экземпляр интерфейса инициализируется этим "устройством", если нет -- остаётся равным нулю. Набор интерфейсов, которые может создавать фабрика, конечно, фиксированный.
Связь со мной: telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru (личка на форуме - не подходит)
Раздел CDS V3.5 на сайте | Основные темы по CDS V3.5 на форуме: Вопросы и ответы | Визуализация | Настройка обмена с другими устройствами
Repository Archive V3.5 SP4 (необходим для СПК207/СПК1хх без Eth/ПЛК3xx)
oscat.ru | Как обратиться в техподдержку? | Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | Проблема XY | Как правильно задавать вопросы | AnyDesk
Идея была в том, чтобы каждое "устройство" не знало про остальных ничего, кроме уникального индекса, и, предположительно, интерфейса, который может быть реализован по этому индексу.
Т.е. из "устройства" выполняется запрос к фабрике интерфейсов, отдаётся ей уникальный индекс, и экземпляр интерфейса, предположительно реализуемый "устройством" с таким индексом. А фабрика, если по индексу реализован запрашиваемый интерфейс, инициализирует его.
В моем понимании "инициализация экземпляра интерфейса" - это присвоение ему экземпляра ФБ, реализующего это интерфейс.А фабрика, если по индексу реализован запрашиваемый интерфейс, инициализирует его.
Где (в каком POU вашего проекта) на ваш взгляд должен быть объявлен этот экземпляр ФБ?
Последний раз редактировалось Евгений Кислов; 12.11.2022 в 11:20.
Связь со мной: telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru (личка на форуме - не подходит)
Раздел CDS V3.5 на сайте | Основные темы по CDS V3.5 на форуме: Вопросы и ответы | Визуализация | Настройка обмена с другими устройствами
Repository Archive V3.5 SP4 (необходим для СПК207/СПК1хх без Eth/ПЛК3xx)
oscat.ru | Как обратиться в техподдержку? | Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | Проблема XY | Как правильно задавать вопросы | AnyDesk