This is topic Передача Double_FLOAT in forum Языки программирования в TRACE MODE 6 / Algorithm Programming Languages at Форум TRACE MODE: техническая поддержка.
Здравствуйте, уважаемая техподдержка, помогите разобраться со следующей проблемой:
Есть ST программа обработки данных с устройства, аргумент A (тип LREAL, направление IN) привязан к Double_FLOAT каналу (к реальному значению), содержащему время устройства в формате TimeSpan.
ИЗ этой программы с определённым интервалом вызывается другая St программа - дешифратор, имеющая входной аргумент D (IN, LREAL), привязанный к аргументу C (IN/OUT, LREAL) пустого Call канала "аргументы дешифратора".
В главной программе к аргументу С канала "аргументы дешифратора" привязан аргумент B (OUT, LREAL).
Далее передаю нужный параметр, и вызываю дешифратор:
B = A; дешифровать = 1; // отработать дешифратор
Тут появляется проблема: в дешифратор попадает обычный REAL вместо LREAL, как должно быть по логике программы. Из-за этого время с устройства можно получить с точностью до 30 мин, а надо с точностью до 1 сек.
Может есть какая-то особенность присваивания, или передачи параметров, о которой я не знаю?
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Существует общее правило: если ни один из связанных аргументов не привязан к атрибуту канала, передаваемое значение не превышает 4 байта. Вам для промежуточной передачи надо использовать канала класса DFLOAT. Но, возможно, правильнее вообще избежать этой промежуточной передачи: слить обе программы и выдавать дешифрованный параметр при соблюдении условия "дешифровать=1".
Posted by i.Sineev (Участник № / Member № 4448) on :
2) Вариант со слитием этих программ не подоходит, т.к. устройств около сотни, в дальнейшем может быть и больше, и у каждого своя программа обработки данных (хоть и логика работы этих программ почти одинаковая, есть в обработке данных, которые вынуждают придерживаться подхода раздельной обработки). Но есть группа параметров, которые регистрируются для всех устройств, для каждого параметра - своя программа-дешифратор. Т.е. если сливать программы обработки данных и дешифраторы каждая программа удлиннится в несколько раз на один и тот же кусок кода.
1) DFLOAT для промежуточной передачи пробовал использовать: в выключенном состоянии в реальное значение канала посылал нужное мне значение, но в реальном значении канала как был 0, так и оставался
Posted by i.Sineev (Участник № / Member № 4448) on :
Подскажите, как лучше организовать промежуточную передачу с помощью канала DFLOAT
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Для каждого передаваемого параметра LREAL надо создать канал DFLOAT. В его атрибут ВХОД посылать нужное значение из одной программы и считывать другой программой из того же атрибута.