This is topic как правильно организовать чтение и запись значений? in forum Редактор проекта TRACE MODE 6 / at Форум TRACE MODE: техническая поддержка.
Здравствуйте У меня вопрос, который, возможно, уже обсуждался на форуме, но мне не удалось найти такое обсуждение. Или, может быть, он всем и так понятен. Подскажите пожалуйста, как правильно организовать каналы и связь между ними, если в системе есть контроллер (EmbRTM) и несколько АРМ (RTM). На контроллере есть канал - коэффициент настройки регулятора. Нужно иметь возможность просматривать и менять его значение с любого из АРМ. Задача вполне обычная, но не могу сообразить, как ее решить правильно. Есть вариант, который сейчас мной реализован, но он имеет недостатки и является слишком громоздким: на каждом АРМ заводится два канала, один типа INPUT, другой OUTPUT. К INPUT каналу привязывается реальное значение канала с контроллера, к OUTPUT - его входное значение. На экране интер- фейса вводятся два аргумента IN и OUT (или IN и IN/OUT). Соответственно, IN-аргумент связан с реальным значением INPUT-канала и используется для отображения текущего значения, OUT(IN/OUT)-аргумент связан с входным зна- чением канала OUTPUT и используется для задания нового значения. Во-первых описанная схема сложна, а во-вторых неудобна при вводе нового значения. Например, если на экране используется ГЭ "Текст" и его отображение привязано к IN-аргументу, а запись (ввести и передать) к OUT-аргументу, то при начале ввода, вводимое значение стартует не с текущего, а того, которое вводилось в прошлый раз (или с 0.0 в первый раз). ГЭ "Ползунок" в подобной схеме ведет себя вообще неприемлемо. Пожалуйста, подскажите, как правильно решается данная задача. Версия TM 6.06 Большое спасибо
Posted by Nico (Участник № / Member № 5342) on :
.канал коэф регулятора может изменится без посылок с АРМ ? .если более чем на одном АРМ меняют значение одного канала на другом узле то что будет ? .если сверхактуально старт вводимого значения с текущего ну скопируйте значение одного канала в другой .используйте аргумент out и привяжите его к удаленному каналу(как в NetLink консоле)
Posted by jasha-kz (Участник № / Member № 4149) on :
To Nico: Спасибо за ответ, правда, вопрос все равно остается. По изменению канала без посылок с АРМ - может, например посылкой с другого АРМ. Если на нескольких АРМ меняется значение, то это не страшно - когда по очереди, то вообще проблем не должно быть, когда одновременно, то кто последний записал, тот и прав. Ваше предложение скопировать значение одного канала в другой не совсем понял: имеется в виду INPUT канал скопировать в OUTPUT? Если да, то когда? В момент перед началом ввода? И как лучше это сделать? Да и это только дополнительно усложняет а не упрощает решение. Хотя задача явно тривиальная. А по поводу привязки OUT-аргумента прямо к каналу на ПЛК - похоже, это хорошее дело, упростит задачу. Но я не знаю, будет ли в этом случае запись производиться строго при изменении, а иначе с несколькими АРМ работать не получится. Еще раз спасибо
Posted by Nico (Участник № / Member № 5342) on :
.отработка каналов OUT всегда по изменению( кроме спец случаев) .копировать всегда и отключать копирование когда оператор нажал ввести включать когда IN=OUT
Posted by jasha-kz (Участник № / Member № 4149) on :
To Nico: да-да, то что канал Output пишется только при изменениях, в курсе. Именно поэтому и использовал его. А вот так же ли работает аргумент экрана - не знаю.
Posted by Nico (Участник № / Member № 5342) on :
аргумент может передать свое значение в канал(в консоле виртуальный) а канал отработает по изменению
Posted by jasha-kz (Участник № / Member № 4149) on :
To Nico: в общем, как я понял, Вы описываете именно тот вариант, с которого все и началось. В любом случае спасибо. To All: может быть все таки кто-то подскажет, как эта задача решается обычно в TM? Простейшая же вещь! Не может быть, чтобы в такой продвинутой системе такую стандартную функцию реализовать было бы так сложно. Скорее всего, я просто недостаточно знаю ТМ. Помогите пожалуйста.
Posted by Romсheg (Участник № / Member № 3792) on :
Простого решения нет, либо вводите арбитраж на уровне контроллера математикой (тогда есть вводится приоритет по управлению), либо решение от Адастры, что уже было тут Вам озвучено (где оба узла равнозначны в управлении).
Posted by jasha-kz (Участник № / Member № 4149) on :
Спасибо еще раз всем за помощь. Удалось выкрутиться используя описанную выше громоздкую схему с двумя дополнительными каналами на АРМ (впрочем, можно обойтись и одним, OUTPUT) и двумя аргументами экрана (тут, видимо, одним не обойдешься). В ГЭ Текст на нажатие мышки стоит присвоение IN-аргумента в OUT (Добавить 0), а на отпускание - ввести и передать OUT-аргумент. Сделать и то и другое на нажатие - не проходит, не отрабатывает в нужной последовательности. Ну а с ползунком пока нормального выхода нет. Подложил ползунок только с отображением IN-аргумента под ползунок без заливки с отображением и вводом OUT-аргумента. Результат выглядит весело, но зато наглядно иллюстрирует процесс записи/чтения
Posted by jasha-kz (Участник № / Member № 4149) on :
Здравствуйте Насколько я знаю, значение канала типа OUTPUT передается в привязанный к нему канал только при изменении. Пожалуйста подскажите: 1) а значение OUT-аргумента программы и экрана передаются в атрибут привязанного к нему канала тоже только при изменении или всегда? 2) имеет ли здесь значение то, на одном или на разных узлах находятся вызов программы (экрана) и привязанный к его OUT-аргументу канал? Большое спасибо
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
1. C экрана значение передается при активизации функции управления в соответствующем ГЭ (нажатии ЛК мыши на ГЭ). Из программы значение OUT-аргумента передается всегда.
2. Эти условия одинаковы при передаче в локальный и удаленный каналы.
Posted by jasha-kz (Участник № / Member № 4149) on :