Vjam
Forum Haunter / Завсегдатай форума
Участник № / Member № 2261
отправлено / posted
Добрый день!
Поставило в тупик элементарное действие. Есть OUT аргумент типа UINT. К как в этом аргументе установить определенный бит? Конструкции вроде этой не подходят:
Vjam
Forum Haunter / Завсегдатай форума
Участник № / Member № 2261
отправлено / posted
Потому что нужно с начала обнулять аргумент. он должен "помнить" прежние состояния. например в прошлом цикле установили первый бит. а в текущем шестой. работает. ну а если в прошлом цикле установили первый а в текущем он все еще нужен. вновь прибавлять единичку нельзя ) Просто по некоторому событию бит в аргументе IN равен единице нужно вызвать функцию ровно один раз. Этот бит может висеть несколько циклов. Пишу что то вроде этого:
if i_ARG_000 & ( 1 shl 0 ) and not o_ARG_000 & ( 1 shl 0 ) then ; //здесь нужно установить нулевой бит в аргументе o_ARG_000 по валидному завершению вызываемой функции. запись в базу, например. end_if;
Сообщения / Posts 136 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Vjam
Forum Haunter / Завсегдатай форума
Участник № / Member № 2261
отправлено / posted
Спасибо разобрался. Мож понадобится кому. nOk - то что функция возвращает. не ноль - выполнилась успешно.
o_ARG_000 = o_ARG_000 or ( nOk <> 0 ); // нулевой бит/ o_ARG_000 = o_ARG_000 or ( ( nOk <> 0 ) * 64 ) // шестой бит
Сообщения / Posts 136 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
1. Аргумент должен быть IN/OUT. 2. Надо использовать не арифметические, а побитовые и/или логические операторы языка ST. 3. Возможно, здесь будут более уместны соответствующие функциональные блоки языка FBD.
Сообщения / Posts 17311 | Из / From: Россия
| IP / IP: IP адрес / IP address |