Есть 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 сек.
Может есть какая-то особенность присваивания, или передачи параметров, о которой я не знаю?
Сообщения / Posts 28 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
Существует общее правило: если ни один из связанных аргументов не привязан к атрибуту канала, передаваемое значение не превышает 4 байта. Вам для промежуточной передачи надо использовать канала класса DFLOAT. Но, возможно, правильнее вообще избежать этой промежуточной передачи: слить обе программы и выдавать дешифрованный параметр при соблюдении условия "дешифровать=1".
Сообщения / Posts 17317 | Из / From: Россия
| IP / IP: IP адрес / IP address |
i.Sineev
Junior Member / Новичок
Участник № / Member № 4448
отправлено / posted
2) Вариант со слитием этих программ не подоходит, т.к. устройств около сотни, в дальнейшем может быть и больше, и у каждого своя программа обработки данных (хоть и логика работы этих программ почти одинаковая, есть в обработке данных, которые вынуждают придерживаться подхода раздельной обработки). Но есть группа параметров, которые регистрируются для всех устройств, для каждого параметра - своя программа-дешифратор. Т.е. если сливать программы обработки данных и дешифраторы каждая программа удлиннится в несколько раз на один и тот же кусок кода.
1) DFLOAT для промежуточной передачи пробовал использовать: в выключенном состоянии в реальное значение канала посылал нужное мне значение, но в реальном значении канала как был 0, так и оставался
Сообщения / Posts 28 | Из / From: Россия
| IP / IP: IP адрес / IP address |
i.Sineev
Junior Member / Новичок
Участник № / Member № 4448
отправлено / posted
Подскажите, как лучше организовать промежуточную передачу с помощью канала DFLOAT
Сообщения / Posts 28 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
Для каждого передаваемого параметра LREAL надо создать канал DFLOAT. В его атрибут ВХОД посылать нужное значение из одной программы и считывать другой программой из того же атрибута.
Сообщения / Posts 17317 | Из / From: Россия
| IP / IP: IP адрес / IP address |