fherbeck
Junior Member / Новичок
Участник № / Member № 1012
отправлено / posted
Есть 32-х битный накопительный счетчик, представленный в виде двух 16-битных каналов C1HI и C1LO. Необходимо создать канал, вычисляемый по следующей формуле: (C1HI*0x10000+C1LO) - (C1HI_O*0x10000+C1LO_O), где C1HI_O и C1LO_O - значения старшего и младшего слова счетчика на предыдущем измерении. Такое возможно?
Сообщения / Posts 18 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
Да - такое возможно, но только формулу необходимо переделать: 1) Сначала выполнить вычитание младших байтов, выполнить проверку на неотрицательный результат. Если результат отрицательный - выполнить соответсвующие арифметические действия со старшими байтами. 2) Вычесть между собой старшие байты. 3) Преобразовать результирующие значения старшего и младшего значения в одно число.
fherbeck
Junior Member / Новичок
Участник № / Member № 1012
отправлено / posted
А в том варианте, который предложили Вы это можно сделать не через FDB-блок на C++? Объясните пожалуйста конкретно, как и куда это подключать. Я пытался проделать это через трансляцию в канале, но так и не понял как получать из СПАД архива значение предыдущего измерения в FDB программе. Кроме того, как я понимаю, при трансляции в архиве будут отсутствовать исходные значения канала. Мне хотелось бы получить результаты вычислений как отдельный канал.
[ 22.03.2005, 18:29: Сообщение отредактировал / Message edited by AdAstra Technical Support ]
Сообщения / Posts 18 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
1. Написать программу FBD, реализующую указанный алгоритм. У этой программы должны быть 2 входа, которые будут принимать данные от каналов C1HI и C1LO, и 1 выход. 2. Создать канал RESULT типа FLOAT, в котором должен быть получен ОКОНЧАТЕЛЬНЫЙ РЕЗУЛЬТАТ. 3. Подключить к этому каналу созданную программу в качестве процедуры ТРАНСЛЯЦИИ. При этом входы программы надо привязать к каналам C1HI и C1LO, а ее выход - к атрибуту РЕАЛЬНОЕ канала RESULT. 3. Канал RESULT при архивировании будет сохранять в архиве уже конечный результат.
Надо обратить внимание на то, что необходимо обеспечить синхронность изменения значений каналов C1HI и C1LO с обработкой канала RESULT. Если данные получаются в асинхронном потоке, надо по сигналам "отработки" (в атрибуте СОБЫТИЯ) каждого канала отслеживать актуальность каждого измерения.
Сообщения / Posts 17317 | Из / From: Россия
| IP / IP: IP адрес / IP address |
fherbeck
Junior Member / Новичок
Участник № / Member № 1012
отправлено / posted
quote:Отправитель / Originally posted by AdAstra Technical Support: Надо обратить внимание на то, что необходимо обеспечить синхронность изменения значений каналов C1HI и C1LO с обработкой канала RESULT.
отправлено / posted
Контроль можно осуществлять по атрибуту "СОБЫТИЯ". Смотрите описание этого атрибута в справочной системе.
Сообщения / Posts 17317 | Из / From: Россия
| IP / IP: IP адрес / IP address |
fherbeck
Junior Member / Новичок
Участник № / Member № 1012
отправлено / posted
А другом канале Вы его не можете сохранять? Дело в том, что в программе это можно сделать только через глобальные переменные.
Сообщения / Posts 17317 | Из / From: Россия
| IP / IP: IP адрес / IP address |