Abram Shnider
Active Forum Member / Активный участник форума
Участник № / Member № 4534
отправлено / posted
Ситуация следующая:
Есть драйвер, который связывает TM 6.07 с прибором через канал W_Float по ModBus. Есть программа, которая записывает через этот канал значение параметра в прибор. Значение пераметра берется из базы данных (в интерфейсе представляется в виде импровизированной таблицы из текстовых полей), при обновлении которой значение меняется на 0.
Во время работы программы прибор не всегда успевает "поймать" значение передаваемого параметра. Как выяснилось, при обновлении таблицы БД, переменная, передающая в программе значение параметра обнуляется вместе с каналом, который отвечает за хранение и отображение параметра в таблице.
В программе пробовал передавать параметр при помощи помещения его в глобальную переменную, а также в другой канал, после чего отправлял в канал драйвера, или в промежуточный Output канал.
В конце-концов от канала Output, связанного с драйвером отказался (отправку провожу напрямую). Отправлять значение через промежуточный канал получалось лучше, чем другими способами (подозреваю, что из-за лишнего такта во время которого значение со входа канала передается на выход).
Собственно вопрос: Если приравниваешь переменную значению канала (после чего ставим флаг и запрещаем обращаться в канал), то она начинает изменяться вместе со значением канала?
Сообщения / Posts 78 | Из / From: РФ
| IP / IP: IP адрес / IP address |
отправлено / posted
Пришлите, пожалуйста, на hotline@adastra.ru тестовый проект с базой данных и четким описанием задачи и используемых для ее решения функций и связей.
Сообщения / Posts 17317 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Abram Shnider
Active Forum Member / Активный участник форума
Участник № / Member № 4534
отправлено / posted
2 AdAstra Technical Support,
Столько много я написал только для того, чтобы Вас ввести в смысл решаемой задачи... Сам вопрос конкретно поставлен в конце поста.
Дело в том, что тестовый проект делать слишком напряжно, если учесть как там организована работа с базой данных. Если, конечно, решения не найдем, то тестовый проект подготовить придется...
отправлено / posted
"Собственно вопрос: Если приравниваешь переменную значению канала (после чего ставим флаг и запрещаем обращаться в канал), то она начинает изменяться вместе со значением канала? "
Где именно и как происходит "приравнивание"? Какой именно переменной? Что означает "ставим флаг и запрещаем обращаться в канал"?
Сообщения / Posts 17317 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Abram Shnider
Active Forum Member / Активный участник форума
Участник № / Member № 4534
отправлено / posted
Решение своей проблемы я уже нашел, однако, поставленный вопрос остался для меня актуальным.
Повторюсь более подробно:
Есть канал и программа; Программа содержит в аргументах реальное значение канала и 2 глобальных переменных (Flag и переменная для хранения реального значения канала);
Программа:
IF (!Flag) THEN Flag = true; Переменная = Канал_R; END_IF;
В режиме отладки все выглядит как положено, однако, в профайлере Переменная приравнивается реальному значению канала и более не должна изменяться, но при изменении значения канала переменная принимает это значение, хотя не должна.
отправлено / posted
По этому фрагменту программы можно утверждать, что "Переменная" должна принять значение "Канал_R" только 1 раз, пока выполняется условие !Flag. Специально перепроверл этот фрагмент, добавив к нему для проверки выходной аргумент, возвращающий значение "Переменной". Работает правильно.
Проблему надо искать в остальном тексте программы. Если есть желание, присылайте для анализа минимизированный тест, воспроизводящий описанный Вами эффект.
Сообщения / Posts 17317 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Abram Shnider
Active Forum Member / Активный участник форума
Участник № / Member № 4534
отправлено / posted
Тестовый проект работает правильно)
Что-то в проекте, видимо, я упустил... Перепроверю еще...