This is topic Помогите разобраться in forum Языки программирования в TRACE MODE 6 / Algorithm Programming Languages at Форум TRACE MODE: техническая поддержка.
Есть драйвер, который связывает TM 6.07 с прибором через канал W_Float по ModBus. Есть программа, которая записывает через этот канал значение параметра в прибор. Значение пераметра берется из базы данных (в интерфейсе представляется в виде импровизированной таблицы из текстовых полей), при обновлении которой значение меняется на 0.
Во время работы программы прибор не всегда успевает "поймать" значение передаваемого параметра. Как выяснилось, при обновлении таблицы БД, переменная, передающая в программе значение параметра обнуляется вместе с каналом, который отвечает за хранение и отображение параметра в таблице.
В программе пробовал передавать параметр при помощи помещения его в глобальную переменную, а также в другой канал, после чего отправлял в канал драйвера, или в промежуточный Output канал.
В конце-концов от канала Output, связанного с драйвером отказался (отправку провожу напрямую). Отправлять значение через промежуточный канал получалось лучше, чем другими способами (подозреваю, что из-за лишнего такта во время которого значение со входа канала передается на выход).
Собственно вопрос: Если приравниваешь переменную значению канала (после чего ставим флаг и запрещаем обращаться в канал), то она начинает изменяться вместе со значением канала?
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Пришлите, пожалуйста, на hotline@adastra.ru тестовый проект с базой данных и четким описанием задачи и используемых для ее решения функций и связей.
Posted by Abram Shnider (Участник № / Member № 4534) on :
2 AdAstra Technical Support,
Столько много я написал только для того, чтобы Вас ввести в смысл решаемой задачи... Сам вопрос конкретно поставлен в конце поста.
Дело в том, что тестовый проект делать слишком напряжно, если учесть как там организована работа с базой данных. Если, конечно, решения не найдем, то тестовый проект подготовить придется...
Хотелось бы просто знать типична ли такая ситуация или Вы ее впервые встречаете?
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
"Собственно вопрос: Если приравниваешь переменную значению канала (после чего ставим флаг и запрещаем обращаться в канал), то она начинает изменяться вместе со значением канала? "
Где именно и как происходит "приравнивание"? Какой именно переменной? Что означает "ставим флаг и запрещаем обращаться в канал"?
Posted by Abram Shnider (Участник № / Member № 4534) on :
Решение своей проблемы я уже нашел, однако, поставленный вопрос остался для меня актуальным.
Повторюсь более подробно:
Есть канал и программа; Программа содержит в аргументах реальное значение канала и 2 глобальных переменных (Flag и переменная для хранения реального значения канала);
Программа:
IF (!Flag) THEN Flag = true; Переменная = Канал_R; END_IF;
В режиме отладки все выглядит как положено, однако, в профайлере Переменная приравнивается реальному значению канала и более не должна изменяться, но при изменении значения канала переменная принимает это значение, хотя не должна.
Мне интересно: это так и должно быть или мне искать проблему где-то в другом месте?
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
По этому фрагменту программы можно утверждать, что "Переменная" должна принять значение "Канал_R" только 1 раз, пока выполняется условие !Flag. Специально перепроверл этот фрагмент, добавив к нему для проверки выходной аргумент, возвращающий значение "Переменной". Работает правильно.
Проблему надо искать в остальном тексте программы. Если есть желание, присылайте для анализа минимизированный тест, воспроизводящий описанный Вами эффект.
Posted by Abram Shnider (Участник № / Member № 4534) on :
Тестовый проект работает правильно)
Что-то в проекте, видимо, я упустил... Перепроверю еще...