This is topic Вычисляемый канал in forum TRACE MODE 5 бесплатная версия / TRACE MODE 5 Free version at Форум TRACE MODE: техническая поддержка.


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

Posted by fherbeck (Участник № / Member № 1012) on :
 
Есть 32-х битный накопительный счетчик, представленный в виде двух 16-битных каналов
C1HI и C1LO. Необходимо создать канал, вычисляемый по следующей формуле:
(C1HI*0x10000+C1LO) - (C1HI_O*0x10000+C1LO_O),
где C1HI_O и C1LO_O - значения старшего и младшего слова счетчика на предыдущем измерении. Такое возможно?
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Да - такое возможно, но только формулу необходимо переделать:
1) Сначала выполнить вычитание младших байтов, выполнить проверку на неотрицательный результат. Если результат отрицательный - выполнить соответсвующие арифметические действия со старшими байтами.
2) Вычесть между собой старшие байты.
3) Преобразовать результирующие значения старшего и младшего значения в одно число.

В том виде, в котором задана формула у Вас ее можно реализовать только через FBD-блок на Си++.
 
Posted by fherbeck (Участник № / Member № 1012) on :
 
А в том варианте, который предложили Вы это можно сделать не через FDB-блок на C++? Объясните пожалуйста конкретно, как и куда это подключать. Я пытался проделать это через трансляцию в канале, но так и не понял как получать из СПАД архива значение предыдущего измерения в FDB программе. Кроме того, как я понимаю, при трансляции в архиве будут отсутствовать исходные значения канала. Мне хотелось бы получить результаты вычислений как отдельный канал.

[ 22.03.2005, 18:29: Сообщение отредактировал / Message edited by AdAstra Technical Support ]
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
1. Написать программу FBD, реализующую указанный алгоритм. У этой программы должны быть 2 входа, которые будут принимать данные от каналов C1HI и C1LO, и 1 выход.
2. Создать канал RESULT типа FLOAT, в котором должен быть получен ОКОНЧАТЕЛЬНЫЙ РЕЗУЛЬТАТ.
3. Подключить к этому каналу созданную программу в качестве процедуры ТРАНСЛЯЦИИ. При этом входы программы надо привязать к каналам C1HI и C1LO, а ее выход - к атрибуту РЕАЛЬНОЕ канала RESULT.
3. Канал RESULT при архивировании будет сохранять в архиве уже конечный результат.

Надо обратить внимание на то, что необходимо обеспечить синхронность изменения значений каналов C1HI и C1LO с обработкой канала RESULT.
Если данные получаются в асинхронном потоке, надо по сигналам "отработки" (в атрибуте СОБЫТИЯ) каждого канала отслеживать актуальность каждого измерения.
 
Posted by fherbeck (Участник № / Member № 1012) on :
 
quote:
Отправитель / Originally posted by AdAstra Technical Support:
Надо обратить внимание на то, что необходимо обеспечить синхронность изменения значений каналов C1HI и C1LO с обработкой канала RESULT.

А как достичь этого средствами TRACE MODE?
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Контроль можно осуществлять по атрибуту "СОБЫТИЯ". Смотрите описание этого атрибута в справочной системе.
 
Posted by fherbeck (Участник № / Member № 1012) on :
 
А как получить значение предыдущего измерения?
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
А другом канале Вы его не можете сохранять?
Дело в том, что в программе это можно сделать только через глобальные переменные.
 


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



Powered by Infopop Corporation
UBB.classic™ 6.7.2