This is topic Передача Double_FLOAT in forum Языки программирования в TRACE MODE 6 / Algorithm Programming Languages at Форум TRACE MODE: техническая поддержка.


To visit this topic, use this URL:
http://forum.adastra.ru/ultimatebb.php/ubb/get_topic/f/33/t/000096.html

Posted by i.Sineev (Участник № / Member № 4448) on :
 
Здравствуйте, уважаемая техподдержка, помогите разобраться со следующей проблемой:

Есть 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. В его атрибут ВХОД посылать нужное значение из одной программы и считывать другой программой из того же атрибута.
 


Новости АСУ ТП / News | SCADA / HMI | Обучение / Trainings | Свяжитесь с нами / Contact Us



Powered by Infopop Corporation
UBB.classic™ 6.7.2