Показано с 1 по 7 из 7

Тема: Проверка бита в макросе панели СП300

  1. #1

    По умолчанию Проверка бита в макросе панели СП300

    Добрый день.

    Есть переменная PSW[369]. У нее нужно проверить 6 бит. И если он 1 то установить бит 6 в переменной PSW[1369]....

    WORD tmp;

    tmp = PSW[369];

    if ((tmp>>6) & 0x01)
    {
    PSW[1369] = PSW[1369] | (1<<6);
    }
    else
    {
    PSW[1369] = PSW[1369] & (0<<6);
    }

    Но такая конструкция не работает. Уважаемые спецы, почему?
    Заранее спасибо...

  2. #2
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    12,171

    По умолчанию

    Добрый день. Используйте следующую конструкцию:

    Код:
    if ( PSW[369] & (1<<6) )  	  
    { 
    	PSW[1369] = PSW[1369] | (1<<6);    
    }
    else
    { 
    	PSW[1369] = PSW[1369] & ~(1<<6);    
    }
    Внесем соответствующие правки в следующую версию РП.

    Вот пример работы с памятью через макросы (набор готовых функций):
    http://www.owen.ru/forum/showthread....l=1#post233959

    В рамках этого примера можно было бы сделать так:

    Код:
    WriteBitInReg(1369, 6, GetBitFromReg(369,6,TYPE_PSW), TYPE_PSW);

  3. #3

    По умолчанию

    То есть будет работать условие

    if ( PSW[369] & 0x40 ) ......

    Это ошибка в коде панели?

  4. #4
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    12,171

    По умолчанию

    Цитата Сообщение от GSK Посмотреть сообщение
    То есть будет работать условие

    if ( PSW[369] & 0x40 ) ......

    Это ошибка в коде панели?
    Ошибка в документации, если точнее.

    Запись типа

    Код:
    if ( PSW[369] & 0x40 )
    вполне легитимна.

    Обращаю внимание - в элементе при выборе бита они пронумерованы с нуля.
    Т.е. в данном случае шестой бит - это именно 0x40.

  5. #5

    По умолчанию

    Простите, но я что то запутался(((
    Оператор IF логический. У него условие либо истина либо лож... либо 1 либо 0....
    если PSW[369] = 255 то есть 11111111
    то
    11111111 & 01000000 = 01000000 или 0x40 или 64

    получается

    if (64)
    {
    ......
    } else
    {
    ......
    }
    Как то не очень.....

    а вот:

    if (64 == 64)
    {
    ......
    } else
    {
    ......
    }

    или

    if ( (PSW[369] & 0x40) == 0x40)
    {
    ....
    }

    Вполне логично!

  6. #6

  7. #7

    По умолчанию

    Хорошо. Спасибо.

Похожие темы

  1. Ответов: 1
    Последнее сообщение: 18.11.2016, 14:47
  2. ОРС Сервер для панели СП300
    от Технос в разделе Панели оператора (HMI)
    Ответов: 4
    Последнее сообщение: 14.09.2016, 12:04
  3. Проверка бита регистра PSW в функции
    от GrAMm.78 в разделе Панели оператора (HMI)
    Ответов: 3
    Последнее сообщение: 04.06.2015, 09:54
  4. Адрес бита в панели
    от Stas в разделе Панели оператора (HMI)
    Ответов: 8
    Последнее сообщение: 19.02.2013, 14:21
  5. изменение бита с панели и орс
    от николай72 в разделе ПЛК1хх
    Ответов: 3
    Последнее сообщение: 28.05.2010, 21:17

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •