Serex
Forum Member / Участник форума
Участник № / Member № 3942
отправлено / posted
Уважаемая техподдержка. А ТМ бета-тестирование вообще проходила?
Начальная задача. По нажатию кнопки записать на ОПС-сервер в булеву переменную "1". Контроллер читает ее и после некоторой обработки сбрасывает в "0". Соответственно переход из "0" в "1" считается командой к пуску алгоритма в контроллере. Состояние "1" - занят обработкой и запись "1" все равно ничего не даст. Состояние "0" - готовность. Алгоритм проще простого Однако, простейшими средствами ТМ такое реализовать не возможно, минимум нужно создать алгоритм )) И так. Способ 1. У кнопки создаем событие передать 1 в канал, привязанные к нашей ОПС-переменной. Ставим флаг "восстанавливать значение". При коротком (просто клике) нажатии на кнопку в канал вообще ничего не попадает. При удержании кнопки в полсекунды, "1" в канал попадает и это отмечается в отчете тревог. И только при длительном нажатии на кнопку "1" попадает в ОПС-переменную. Но это полбеды, можно написать инструкцию оператору, чтобы держал кнопку подольше, однако при отпускании кнопки в ОПС-переменную по-любому записывается "0", что недопустимо. Способ 2. Тоже самое, только убираем флаг "восстанавливать значение". Единица передается в любом случае, независимо от нажатия, событие отмечается в отчете тревог. Но когда контроллер сбрасывает OPC-переменную в "0", то в канале проекта продолжает висеть единица и любая попытка нажать кнопку бесполезна, единица больше не передается. Попытка привязать ОПС-переменную напрямую к аргументу экрана также безуспешна.
Но самое прикольное, что если поставить флаг "подтверждение" и "восстанавливать значение" одновременно, то значение не восстанавливается. Т.е. флаги даже на уровне скрипта кнопки конфликтуют между собой
Похоже придется создавать дополнительно ОПС-вход, при возвращении переменной в "0" сбрасывать канал в "0" принудительно. Но учитывая, что к каналу можно привязать только один ОПС-компонент, то придется создавать дополнительно канал или программу.
Сообщения / Posts 59 | Из / From: РФ
| IP / IP: IP адрес / IP address |
отправлено / posted
1) Если контроллер должен ее сбрасывать, то почему Вы ставите флаг "восстанавливать значение" и сами сбрасываете значение в 0. При этом почему то решив, что это не допустимо.
Таким алгоритмом Вы данную задачу не решите.
2) Чтобы повторно передать единицу в контроллер, пошлите дополнительно единичку в атрибут 39, Exec канала. Он у Вас принудительно отработает и передаст единичку в контроллер.
Сообщения / Posts 17316 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Romсheg
unregistered
отправлено / posted
2Serex: Для начала Вам надо усвоить "идеологию" ТМ6. В ТМ нет понятия полно-дуплексного канала! Это в ОРС он есть. И в этом основа Вашей ошибки... Дело в том, что в ТМ есть понятие INPUT, есть понятие OUTPUT, но нет каналов типа INOUT, есть только аргументы (и они только внутри рантайма МРВ работают так, но не с внешними интерфейсами).
По-хорошему Вам надо делать так: 1) Создать канал1 OUTPUT ОРС на тэг контроллера 2) Создать канал2 INTPUT ОРС на тэг контроллера 3) В экране привязать канал1 через аргумент OUT 4) А канал2 через аргумент IN 5) Кнопку настроить так - "Результат" привязать к канал1, а "Источник" к канал2. 6) Установить флаг "Восстанавливать значение"
а еще неплохо бы заливку фона кнопки сделать управляемой по канал2.
тогда нажимая на кнопку, МРВ отправит значение в тэг контроллера, а индикацией оператору того, что команда дошла до адресата будет заливка кнопки по канал2, и как только он отпустит кнопку, то канал1 сбросится в ноль. Тогда и наглядность интерфейса будет хорошая, и в инструкции оператору будет что написать в пункте "как посылать команду".
Serex
Forum Member / Участник форума
Участник № / Member № 3942
отправлено / posted
Поддержка
quote:2) Чтобы повторно передать единицу в контроллер, пошлите дополнительно единичку в атрибут 39, Exec канала. Он у Вас принудительно отработает и передаст единичку в контроллер.
Вот )) Это пожалуй мне и нужно. Так как контроллер отрабатывает команду достаточно быстро. порядка 100 мс
Romсheg Вашим способом получится, что команду контроллер отработает еще пару раз, пока оператор отпустит кнопку. Не катастрофично, но не желательно )) А так я уже сделал прогу, которая читает ОПС-тег и сбрасывает канал OUT по отрицательному перепаду (из 1 в 0). Но поскольку у меня еще 128 кнопок, то воспользуюсь советом техподдержки
Про полнодуплексную связь: Ну с точки зрения программирования полногодуплекса не бывает. Есть функции Read и Write. Только если их раскидать по разным потокам, то в каком-то смысле получится полный дуплекс, но и то в одноядерном процессоре они будут обрабатываться поочереди )) Нормальный полный дуплекс только на аппаратном уровне. Просто если разработчик предлагает визуальный интерфейс, как ТМ, то наверное логично было бы обеспечить и виртуальный полный дуплекс. Нам же нужно упрощение с целью увеличения скорости разработки приложений. По-мелочи я сам в Билдере С++ уже скаду создавал без всяких там заботливых скада-дистрибьютеров.
Сообщения / Posts 59 | Из / From: РФ
| IP / IP: IP адрес / IP address |
Serex
Forum Member / Участник форума
Участник № / Member № 3942
отправлено / posted
quote:2) Чтобы повторно передать единицу в контроллер, пошлите дополнительно единичку в атрибут 39, Exec канала. Он у Вас принудительно отработает и передаст единичку в контроллер.
отправлено / posted
В отчет тревог таким способом послать значение не получится. Для этого нужно реализовывать полный алгоритм, как описал Romcheg.
Сообщения / Posts 17316 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Serex
Forum Member / Участник форума
Участник № / Member № 3942
отправлено / posted
Я уже сделал )) Спасибо.
С освоением группового редактирования каналов моя жизнь значительно улучшилась и переделать получилось быстро. Это когда по группе каналов нажимаешь "редактировать"
Сделать бы еще групповое редактирование для аргументов канала... было бы чудесно.
И еще поле "связь" для группового редактирования, чтобы текстом писать можно было. Задал нужный текст для целой группы и получилась связь ))
Сообщения / Posts 59 | Из / From: РФ
| IP / IP: IP адрес / IP address |
Romсheg
unregistered
отправлено / posted
Открою Вам большой секрет - в ТМ6 редактор аргументов один! Это значит, что открывая аргументы шаблона, канала или вызова шаблона - Вы работаете ВСЕГДА через один и тот же редактор. И соответственно он позволяет легко работать групповым образом с любым из полей выбранной группы аргументов вплоть до Комментария.
IP / IP: IP адрес / IP address |
Serex
Forum Member / Участник форума
Участник № / Member № 3942
отправлено / posted
Однако я в этом единственном редакторе не вижу опции "задать строку" "задать диапазон", которые есть в редакторе группы каналовСообщения / Posts 59 | Из / From: РФ
| IP / IP: IP адрес / IP address |
Romсheg
unregistered
отправлено / posted
А вот не надо путать Редактор группы каналов и Редактор аргументов - это уже разные компоненты.
IP / IP: IP адрес / IP address |
Serex
Forum Member / Участник форума
Участник № / Member № 3942
отправлено / posted
Хорошо, не буду путать. Я говорил о том, чтобы в редакторе аргументов была опция "задать строку" и "задать диапазон"
Сообщения / Posts 59 | Из / From: РФ
| IP / IP: IP адрес / IP address |