Тема / Topic: Атрибут недостоверность при работе Call.OtherProj с разными проектами
electroair
Forum Member / Участник форума
Участник № / Member № 8317
отправлено / posted
Добрый день. С помощью функции 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 АдАстра. Техподдержка ]
Сообщения / Posts 36 | Из / From: Российская Федерация
| IP / IP: IP адрес / IP address |
Nico
Forum Professor / Завсегдатай форума
Участник № / Member № 5342
отправлено / posted
-общий принцип контроля записи есть операция чтения значения переменной; -узлы должны быть в одном проекте; -взаимодействие между разными проектами есть исключительная ситуация;
Сообщения / Posts 879 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
При работе Call.OtherProj с разными проектами атрибут недостоверность использовать нельзя. Так как нет привязки между каналами разных проектов, то достоверность контролировать нельзя.
В этом случае, как уже рекомендовал Nico, для контроля записи параллельно читайте ту же переменную.
Сообщения / Posts 17345 | Из / From: Россия
| IP / IP: IP адрес / IP address |
electroair
Forum Member / Участник форума
Участник № / Member № 8317
отправлено / posted
Довольно неожиданно, что otherProj не может нормально проверять успешность. Чтение через otherProj работает неплохо, но жаль, что достоверность может встать в недостоверность при обрыве связи и не восстановится после восстановления связи. Но как работать с записью через otherProj при том, что после установки 1 в атрибут 2, если связи нет, то атрибут 2 сбрасывается, а атрибут 1 "застревает" в этом состоянии. В этом состоянии не понятно: оборвалась связь или посылка ещё не отправлена. А чтобы заставить канал работать снова необходимо принудительно обнулять атрибуты 1 и 2, а только потом снова писать в атрибут 2. Это довольно много действий сделанных последовательно. Сейчас я провожу все операции через панель МРВ, но я хочу написать функцию, которая будет сама отслеживать запись и чтение и которая сама определит сбой при записи и выведет канал из этого состояния. Мне необходимо знать, как правильно определять состояние заклинивания канала и как выводить канал из этого состояния. Желателен алгоритм того, что я должен писать, куда и как долго ждать. Спасибо.
Сообщения / Posts 36 | Из / From: Российская Федерация
| IP / IP: IP адрес / IP address |
отправлено / posted
Контролировать запись Вы можете чтением.
Если значение, которое Вы записываете отличается от считанного, то запись не прошла.
Проделать это можно, скажем периодически отрабатываемой программой на ST (сравнение значений двух аргументов и обнуление еще двух аргументов)
Сообщения / Posts 17345 | Из / From: Россия
| IP / IP: IP адрес / IP address |
electroair
Forum Member / Участник форума
Участник № / Member № 8317
отправлено / posted
Ок. Тогда всего один вопрос: Как выодить из заклиненного состояния call.otherProj, когда у него не получилось записать? Что, куда и в какой последовательности необходимо записать, чтоб он развесился?
Сообщения / Posts 36 | Из / From: Российская Федерация
| IP / IP: IP адрес / IP address |
Nico
Forum Professor / Завсегдатай форума
Участник № / Member № 5342
electroair
Forum Member / Участник форума
Участник № / Member № 8317
отправлено / posted
А In(2) и I(4) обнулять не обязательно? Что такое FA? За один цикл обнуляю R, A и FA (что это?) а на следующем цикле уже можно снова запускать опрос, т.е. писать в In(2)?
Сообщения / Posts 36 | Из / From: Российская Федерация
| IP / IP: IP адрес / IP address |
Nico
Forum Professor / Завсегдатай форума
Участник № / Member № 5342