This is topic Биты в слове. in forum TRACE MODE 6 бесплатная Базовая версия / TRACE MODE 6 free Base version at Форум TRACE MODE: техническая поддержка.
Поставило в тупик элементарное действие. Есть OUT аргумент типа UINT. К как в этом аргументе установить определенный бит? Конструкции вроде этой не подходят:
Такая программа задаст 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.