This is topic Атрибут недостоверность при работе Call.OtherProj с разными проектами in forum Мониторы Реального Времени / Real Time Monitors at Форум TRACE MODE: техническая поддержка.
Добрый день. С помощью функции CALL.OtherProj (параметр 3) осуществляю передачу данных на микро МРВ (WinPac). Веду управление записью с панели МРВ в профайлере. При наличии связи - всё нормально. Т.е. пишу в атрибут 2-> атрибут 1 становится равен "1" -> атрибут 2 сбрасывается ->передача выполнена->атрибут 1 сбрасывается. Но при отсутствии связи всё плохо: Т.е. пишу в атрибут 2-> атрибут 1 становится равен "1" -> атрибут 2 сбрасывается.. и всё. Достоверность - достоверна, атрибут (1,A) в единице. Если восстановить соединение ничего не поменяется. Если снова записать "1" в атрибут 2, то (1,A) станет "2", но атрибут 1 уже не сбросится. Восстановление связи возможно только если сначала обнулить атрибут 2, а затем атрибут 1, и только потом снова записать атрибут 2. Атрибут недостоверности не появляется вообще. Что я делаю не так? Как с этим работать?
Мне необходимо понимать, прошла запись или нет. Спасибо.
[ 30.04.2020, 11:39: Сообщение отредактировал / Message edited by АдАстра. Техподдержка ]
Posted by Nico (Участник № / Member № 5342) on :
-общий принцип контроля записи есть операция чтения значения переменной; -узлы должны быть в одном проекте; -взаимодействие между разными проектами есть исключительная ситуация;
Posted by АдАстра. Техподдержка (Участник № / Member № 4) on :
При работе Call.OtherProj с разными проектами атрибут недостоверность использовать нельзя. Так как нет привязки между каналами разных проектов, то достоверность контролировать нельзя.
В этом случае, как уже рекомендовал Nico, для контроля записи параллельно читайте ту же переменную.
Posted by electroair (Участник № / Member № 8317) on :
Довольно неожиданно, что otherProj не может нормально проверять успешность. Чтение через otherProj работает неплохо, но жаль, что достоверность может встать в недостоверность при обрыве связи и не восстановится после восстановления связи. Но как работать с записью через otherProj при том, что после установки 1 в атрибут 2, если связи нет, то атрибут 2 сбрасывается, а атрибут 1 "застревает" в этом состоянии. В этом состоянии не понятно: оборвалась связь или посылка ещё не отправлена. А чтобы заставить канал работать снова необходимо принудительно обнулять атрибуты 1 и 2, а только потом снова писать в атрибут 2. Это довольно много действий сделанных последовательно. Сейчас я провожу все операции через панель МРВ, но я хочу написать функцию, которая будет сама отслеживать запись и чтение и которая сама определит сбой при записи и выведет канал из этого состояния. Мне необходимо знать, как правильно определять состояние заклинивания канала и как выводить канал из этого состояния. Желателен алгоритм того, что я должен писать, куда и как долго ждать. Спасибо.
Posted by АдАстра. Техподдержка (Участник № / Member № 4) on :
Контролировать запись Вы можете чтением.
Если значение, которое Вы записываете отличается от считанного, то запись не прошла.
Проделать это можно, скажем периодически отрабатываемой программой на ST (сравнение значений двух аргументов и обнуление еще двух аргументов)
Posted by electroair (Участник № / Member № 8317) on :
Ок. Тогда всего один вопрос: Как выодить из заклиненного состояния call.otherProj, когда у него не получилось записать? Что, куда и в какой последовательности необходимо записать, чтоб он развесился?
Posted by Nico (Участник № / Member № 5342) on :
обнулить атрибуты R,A,FA
Posted by electroair (Участник № / Member № 8317) on :
А In(2) и I(4) обнулять не обязательно? Что такое FA? За один цикл обнуляю R, A и FA (что это?) а на следующем цикле уже можно снова запускать опрос, т.е. писать в In(2)?
Posted by Nico (Участник № / Member № 5342) on :
FA(4) - недостоверность
Posted by electroair (Участник № / Member № 8317) on :
А что делать с In (2), который зависает в 1 и при сбрасывании A, снова поднимает его (атрибут А) в единицу?
Всё нужно обнулить за один раз и со следующего цикла запускать запись?