Mischa
Forum Member / Участник форума
Участник № / Member № 781
отправлено / posted
В АРМе созданы дискретные каналы ручного управления арматурой. Управление битами каналов осуществляется посылкой значения в канал "прямая" с восстановлением. Бывает "залипание" команды(после снятия воздействия остается "1" в битах канала); Самопроизвольное присвоение "1" битам каналов(самопроизвольная подача команд управления арматурой). "1" снимается при записи в бит канала "0" вручную. В чем может быть проблема?
Сообщения / Posts 48 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Kramarenko Stanislav
Forum Professor / Завсегдатай форума
Участник № / Member № 119
отправлено / posted
Если цикл "Нажатие-отпускание кнопки" укладывается в цикл пересчета базы каналов, то залипать обязательно будет. Нажимайте медленно
Сообщения / Posts 340 | Из / From: Russia
| IP / IP: IP адрес / IP address |
Mischa
Forum Member / Участник форума
Участник № / Member № 781
отправлено / posted
Посылка организована на пороговом цветовом индикаторе(отображение состояния и управление). Цикл пересчета базы каналов - 500мс. Разве нажатие-отпускание кнопки должно зависеть от цикла пересчета базы каналов? А почему происходит сбой(самопроизвольное запись "1" в биты каналов управления) в процессе работы МРВ и отсутствия ручного воздействия?
Сообщения / Posts 48 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
1) Это не от цикла пересчета зависит, а от настроек ОС. Дело в том, что есть три типа событий: нажатие, отжатие и клик. Так вот клик - это нажатие+отжатие за определенное время, настраивается оно в настройках чувствительности мыши в ОС Windows, поэтому если будете быстро нажимать и отжимать, то система будет интерпретировать это не как два события, а как одно - "клик". 2) Причину самопроизвольных 1 в битах ищите либо в алгоритмах, которые ссылаются на этот канал, либо в сетевых послыках, графический интерфейс ну никак не способен самопроизвольно значения в каналы послыать без каких-либо действий оператора.
Сообщения / Posts 17316 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Kramarenko Stanislav
Forum Professor / Завсегдатай форума
Участник № / Member № 119
отправлено / posted
Прошу прощения за ошибку. Не нашел такой настройки в системе. Там только скорость двойного клика.
Я считаю, что ФО с флажком "Восстанавливать значение" должна интерпретировать клик так же как и пару нажатие-отжатие.
Я никогда не пользуюсь этой функцией, как потенциально опасной, хоть и приходится заметно усложнять алгоритм.
Сообщения / Posts 340 | Из / From: Russia
| IP / IP: IP адрес / IP address |
Mischa
Forum Member / Участник форума
Участник № / Member № 781
отправлено / posted
От цикла пересчета базы каналов залипание ФО зависит(проверял), однако проблемы не решает. Настройка у мыши скорости двойного клика также мало что дает. Как все таки решить эту реальную и опасную проблему?
Сообщения / Posts 48 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Kramarenko Stanislav
Forum Professor / Завсегдатай форума
Участник № / Member № 119
отправлено / posted
По моему скромному мнению, алгоритм подачи импульсной команды должен отслеживать её прохождение и сам её сбрасывать. Т.е. надо просто записать в канал (или бит) единицу и успокоиться на этом. В этот же канал всунуть FBD, которая его сбросит либо по тайм-ауту, либо по факту его прохождения дальше или исполнения, либо по невозможности того и другого.
Можно использовать потенциальные команды, т.е.хочу, чтоб задвижка была открыта - устанавливаю 1, хочу, чтоб закрыта - 0. (Ну это упрощённо). Очень удобно при этом использовать для посылки единицы в бит или канал функцию XOR с 0х1 (каждое нажатие инвертирует).
Mischa
Forum Member / Участник форума
Участник № / Member № 781
отправлено / posted
Включать и отключать один и тот же канал(бит канала) от разных источников не получается, если команды висящие. Если привязать к каналу FBD-программу, она жестко пишет в него либо "0", либо "1" и изменить значение канала от ФО невозможно. Как можно автоматически сбрасывать висящую команду от ФО?
Сообщения / Posts 48 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
Если у одного приемника есть несколько источников данных, они должны обрабатываться программно и выход этого алгоритм обязательно должен быть один, иначе получается неопределенность в управлении, а от нее и все проблемы. Относительно восстановления значения - в ОС Windows есть еще одна неприятная особенность в обработчике событий - если удерживая кнопку мыши нажатой, убрать курсор с элемента, то действие будет отменено и функция по отжатию выполнена не будет, а соответственно по нажатию уже будет отработана. Поэтому, если ситуация с "залипанием" значения критична для Вас, то как уже упомянул Станислав Крамаренко: лучшее решение - программное.
Сообщения / Posts 17316 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Mischa
Forum Member / Участник форума
Участник № / Member № 781
отправлено / posted
А как вообще стандартно реализуется управление запорной арматурой при смешанном управлении(ручном и от программ-пошаговых, логических).В ситуации, когда необходимо повторно подать команду в том же направлении прийдется производить два действия:сначала команду вручную снять, потом снова подать.
Сообщения / Posts 48 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
Зачем? Для выдачи повторных команд по внешним интерфейсам, можно использовать функцию принудительной отработки Output-каналов. А так - обычно реализуется алгоритм, который подразумевает два режима работы: ручное управление и автоматическое. И в автоматическом режиме нельзя управлять оборудованием вручную до тех пор, пока не переведешь алгоритм в ручной режим. Если же необходимо одновременное смешанное управление - все равно логика алгоритма должна это учитывать и принимать команды ручного управления как корректирующие и согласовать их с текущими алгоритмическими командами, а уж затем выдавать команду на "железо".
Сообщения / Posts 17316 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Mischa
Forum Member / Участник форума
Участник № / Member № 781
отправлено / posted
Вы меня не поняли.Я имел в виду следующее: Если подать команду без восстановления на открытие арматуры,она останется висеть в канале(это дальше в алгоритме можно ограничить длительность команды). Далее,по прошествии времени включается программа, которая закрывает эту арматуру.Дальше, если необходимо, вручную открыть эту арматуру(программа может уже и не работать) как это сделать - ведь на ФО(на привязанном к ней канале)висит "1", а это первоисточник. Эту "1" можно сбросить только другой ФО(например на закрытие),но это уже несколько действий,так и запутаться можно.
Сообщения / Posts 48 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
Вам же уже сказали выше, что подобные вещи решаются алгоритмически на уровне программы управления, а не на уровне графических форм - программа должна следить за значениями управляющих каналов и она должна их сбрасывать, а не графический интерфейс оператора.
Сообщения / Posts 17316 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Kramarenko Stanislav
Forum Professor / Завсегдатай форума
Участник № / Member № 119
отправлено / posted
Пример. Чтобы послать команду управления Вам надо подать единичный импульс в канал "Open". Пишете FBD, которая имеет два входа: "Вход" и "Обратная связь" и один выход: "Выход". Внутри RS-триггер, который устанавливается по "Входу" и сбрасывается по "Обратной связи". И "Вход" и "Выход" привязываете к Open.In, а "Обратную связь" к Open.Out. Теперь в Open.In из графики посылаете 1, которая гарантированно продержится там один цикл пересчета канала, а затем сбросится. Изменяя цикл пересчета канала, можно управлять длительностью импульса.
Сообщения / Posts 340 | Из / From: Russia
| IP / IP: IP адрес / IP address |