This is topic Биты в слове. in forum TRACE MODE 6 бесплатная Базовая версия / TRACE MODE 6 free Base version at Форум TRACE MODE: техническая поддержка.


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

Posted by Vjam (Участник № / Member № 2261) on :
 
Добрый день!

Поставило в тупик элементарное действие. Есть OUT аргумент типа UINT. К как в этом аргументе установить определенный бит? Конструкции вроде этой не подходят:

arg = 0;
arg = arg + 1: // нулевой бит
arg = arg + 64; // шестой бит

Спасибо )
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Почему не подходит?
arg = 0;
arg = arg + 1; // нулевой бит
arg = arg + 64; // шестой бит

Такая программа задаст OUT-аргументу значение 65.
 
Posted by Vjam (Участник № / Member № 2261) on :
 
Потому что нужно с начала обнулять аргумент. он должен "помнить" прежние состояния. например в прошлом цикле установили первый бит. а в текущем шестой. работает. ну а если в прошлом цикле установили первый а в текущем он все еще нужен. вновь прибавлять единичку нельзя )
Просто по некоторому событию бит в аргументе IN равен единице нужно вызвать функцию ровно один раз. Этот бит может висеть несколько циклов. Пишу что то вроде этого:

if i_ARG_000 & ( 1 shl 0 )
and not o_ARG_000 & ( 1 shl 0 ) then
; //здесь нужно установить нулевой бит в аргументе o_ARG_000 по валидному завершению вызываемой функции. запись в базу, например.
end_if;
 
Posted by Vjam (Участник № / Member № 2261) on :
 
Спасибо разобрался.
Мож понадобится кому. nOk - то что функция возвращает. не ноль - выполнилась успешно.

o_ARG_000 = o_ARG_000 or ( nOk <> 0 ); // нулевой бит/
o_ARG_000 = o_ARG_000 or ( ( nOk <> 0 ) * 64 ) // шестой бит
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
1. Аргумент должен быть IN/OUT.
2. Надо использовать не арифметические, а побитовые и/или логические операторы языка ST.
3. Возможно, здесь будут более уместны соответствующие функциональные блоки языка FBD.
 


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



Powered by Infopop Corporation
UBB.classic™ 6.7.2