This is topic Совмещенный OPC канал Input/Output in forum TRACE MODE 6 бесплатная Базовая версия / TRACE MODE 6 free Base version at Форум TRACE MODE: техническая поддержка.
Есть OPC-сервер, и тэги с доступом на чтение/запись совмещенные (Input/Output). Тэги связаны как с платой DO (digital output) контроллера (воздействие на механизм), как и внутренней переменной ISA Graf с доступом на чтение/запись.
В случае с платой DO нужно как воздействовать, так и проверять в каком положении он находится. Переменная ISA Graf это некая уставка, которая может меняться принудительно как оператором, так и самой программой в контроллере, и при этом нужно постоянно оператору знать значение этой уставки.
Так вот, хотелось бы через одну переменную в “Источники/Приемники” производить с ней операции на чтение и запись. Но направление переменной может быть только input или output, но никак не совмещенной, что повергло меня в ступор.
Ладно, в документации нашел упоминание про “смена типа вх/выход”, информации мало, и как я понял это только для первого запуска, а нужно постоянно отслеживать этот канал, т.к. контроллер сам может поменять его значение. Здесь ничего не вышло. Или я сделал что-то не так(мало информации) или это не мой случай. Как правильно здесь сделать?
Закончилось тем, что пришлось вместо одной переменной в “Источники/Приемники”, сделать две, которые ссылаются на один и тот же opc-тег (идентификатор) и имеют разные направления, один соответственно на управление (output), а другой на чтение значения (input). В этом случае все работает как надо, т.е. значении меняются как и оператором, так и контроллером, при этом оператор видит в реальном времени изменения. Соответственно возник вопрос, а можно ли так делать(двойная ссылка на opc-тег) или есть другой способ(желательно поподробнее)? И получилось вместо одного источника – два, что не есть хорошо.
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Вы все сделали правильно - источник/приемник может быть либо Входной точкой ввода данных, либо Выходной точкой вывода данных. Иначе нельзя. Для реального оборудования это так и есть - не бывает плат УСО, где один и тот же канал есть и вход и выход. То же и с ОРС (для его внутренних переменных). То, что стандарт ОРС подразумевает полный дуплекс именно для тэгов - не значит, что этот стандарт распространяется также на внутреннюю архитектуру нашей системы по работе с точками ввода/вывода. К тому же в любом случае тэг ОРС - это реальный канал аппаратуры УСО, а в ней объединения канала ввода-вывода пока еще не предусмотрено.
Posted by Иннокентий М. (Участник № / Member № 1876) on :
Будем разделять opc-тэг на две точки.
Тогда подскажите как правильно работать с ними. В контроллере есть внутренняя переменная типа BOOL с направление IN/OUT. Соответственно через OPC-сервер она видна как BOOL на чтение/запись.
Создал источник с направлением IN/Дискрет для просмотра состояния. Создал приемник с направлением OUT/Дискрет для управления, авто-построением создал для нее канал (OUT/Hex16). На экране создал текст и значение связал на прямую с источником(состоянием). Создал две кнопки, одна посылает 0 – другая 1 на “входное значение” канала, при этом промежуточная переменная на экране имеет тип OUT/BOOL.
Просмотр состояния работает нормально. А вот с управлением как-то не заладилось.
Если в контроллере значение переменной равно 1, и после запуска МРВ по нажатию кнопки посылаю 0, то ничего не происходит, приходится сначала послать 1, а потом только 0. Дальше все работает нормально. Если в контроллере значение переменной равно 0, и после запуска МРВ посылаю 1 – все ок. Я так понял, что это связано с начальным значение канала OUT/Hex16 – по умолчанию 0, и при попытки послать туда ноль – ничего не происходит, т.к. по логике значение на канале не поменялось и не зачем его тогда обновлять контроллере (хотя в контроллере оно равно 1).
Ладно, стал обновлять принудительно, т.е. на кнопку отправки 0 дополнительно повесил “передать значение” 1 на атрибут “отработать”. Все заработало как надо.
Посему возник вопрос, а правильно ли так делать или есть другой путь ???????? Что-то больно запутанно получилось.
Возможно есть второй способ, заполнить начальное значение канала реальным числом. Пробовал ставить галочку “смена типа Вх/Вых”, пробовал принудительно посылать туда 1, ничего не происходит, т.е. направление меняется, а вот значение нет, менял канал на IN а потом делал смену типа – тоже не помогло. Как в этом случае корректно работать (в help-e можно сказать информации ноль по этому вопросу) ??????
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Данную задачу надо решать программно - алгоритмом, который будет отрабатывать при старте один раз и будет передавать значение Входного канала на его Выходной дубль. Синхронизировать значение через атрибут "смена Вх/Вых" нельзя из-за особенностей обмена по ОРС - в начале все тэги попадают в группы - Входы, Выходы и перемещать их в реальном времени между этими группами уже нельзя, фиксировано.
Posted by Bcube (Участник № / Member № 3663) on :
quote:Отправитель / Originally posted by AdAstra Technical Support: К тому же в любом случае тэг ОРС - это реальный канал аппаратуры УСО, а в ней объединения канала ввода-вывода пока еще не предусмотрено.
Для технической поддержки: тэг OPC это НЕ ТОЛЬКО!!!! реальный канал аппаратуры УСО!!!. в контроллере кроме физических каналов есть еще всякие переменные, которые также могут быть переданы на комп и они могут быть и для чтения и для записи... кроме всего тот же дискретный выход (реальный физический канал УСО) кроме как на запись должен еще и считываться с УСО, дабы знать его состояние. ТАК ЧТО ВЫ В КОРНЕ НЕ ПРАВЫ ОПРЕДЕЛЯЯ что МОЖНО ЛИБО ЧИТАТЬ, ЛИБО ПИСАТЬ....
Должно быть так: Канал либо только для чтения, либо для чтения/записи!!!!!
ЗЫ:Очень бы хотелось пообщаться с разработчиками (особенно с теми которые формируют идеологию продукта) в живую, но увы до Москвы далеко
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
В Trace Mode не запрещено читать переменную для записи. Канала для чтения\записи нет и пока не планируется, но данная возможность реализуется при помощи двух каналов.
Posted by Bcube (Участник № / Member № 3663) on :
Как же не запрещено..когда для того чтобы прочитать реальное значение, перед тем как его изменить нужно городить такой огород (смотрите свой же ответ "Данную задачу надо решать программно - алгоритмом, который будет отрабатывать при старте один раз и будет передавать значение Входного канала на его Выходной дубль."). Не проще сразу написать этот алгоритм и заложить его внутрь системы дабы конечный пользователь не ломал голову что да как....ГОСПОДА РАЗРАБОТЧИКИ для вас это дело минут на 10...ну если постараться то на день , а для отдела МАРКЕТИНГА еще один повод похвастаться какая хорошая система ТРЕЙСМОД.... ЗЫ просто такая капелька дегтя портит все плюсы системы и лишает вас очередных заработанных пары млн.рублей
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Еще раз повторим, канал для чтения\записи на данный момент не планируется.