Страница 1 из 3 123 ПоследняяПоследняя
Показано с 1 по 10 из 23

Тема: Битовая маска

  1. #1

    По умолчанию Битовая маска

    Добрый день, уважаемые профессионалы и любители, подскажите пример объединения например: 4-ех 8-ми битовых масок в одну переменную 4 байта, на языке ST. Или где об этом можно почитать. Быстрый поиск не увенчался успехом. Заранее благодарю за помощь.

  2. #2
    Пользователь
    Регистрация
    22.02.2013
    Адрес
    г.Тихорецк, Краснодарский край
    Сообщений
    384

    По умолчанию

    Можно, если сильно постараться, но зачем это надо? Не просматривается необходимости при работе с овеном..

  3. #3
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    Код:
    VAR
        mask1, mask2, mask3, mask4: BYTE;
        mask: DWORD;
    END_VAR
    
    mask :=
        SHL(mask1 + DWORD#0, 24) OR
        SHL(mask2 + DWORD#0, 16) OR
        SHL(mask3 + DWORD#0, 8) OR
        mask4;
    или как вариант
    Код:
    mask := 0;
    mask :=
    
        SHL(mask1 + mask, 24) OR
        SHL(mask2 + mask, 16) OR
        SHL(mask3 + mask, 8) OR
        mask4;
    или так
    Код:
    mask :=
        mask1 * 16#1000000 +
        mask2 * 16#10000 +
        mask3 * 16#100 +
        mask4;
    Последний раз редактировалось Yegor; 01.08.2016 в 20:32.

  4. #4
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    2,317

    По умолчанию

    или так
    Код:
    VAR
    	b AT %MB0 : ARRAY[0..3] OF BYTE;
    	mask AT %MD0 : DWORD;
    END_VAR
    ;

  5. #5

    По умолчанию

    Всем спасибо, буду пробовать. А необходимость, это передавать с плк в скаду сразу 32 булевых значений одной переменной.

  6. #6

    По умолчанию

    Для меня так нагляднее. Оперируем последним битом в 32-х битном слове.

    Код:
    VAR
    DWORD_tmp:DWORD;
    b1:BOOL;
    END_VAR
    
    IF b1 THEN DWORD_tmp:=DWORD_tmp OR 2147483648; ELSE DWORD_tmp:=DWORD_tmp AND NOT 2147483648; END_IF;
    +79104444236
    С уважением,
    Лапшин Вячеслав

  7. #7
    Пользователь
    Регистрация
    27.11.2011
    Адрес
    Краснодар
    Сообщений
    10,583

    По умолчанию

    krollcbas а для операции со всеми битами делать простыню кода ?
    Уж лучше FB сделать со сдвигом регистров, тогда из параметров только номер бита и запись значения

  8. #8
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,224

    По умолчанию

    Цитата Сообщение от melky Посмотреть сообщение
    krollcbas а для операции со всеми битами делать простыню кода ?
    Уж лучше FB сделать со сдвигом регистров, тогда из параметров только номер бита и запись значения
    а Вы заглядывали в оскатовскую функцию? krollcbas конкретно написал как поступить для отдельного взятого бита, с намеком что для остальных можно написать функцию

    А ТС вобще то нужно байты склеить а не биты, вот какую претензию надо было предъявить krollcbas
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  9. #9
    Пользователь
    Регистрация
    27.11.2011
    Адрес
    Краснодар
    Сообщений
    10,583

    По умолчанию

    Сплю с утра, не ругайтесь. В Oscat много чего есть, возможно и необходимое TC.

  10. #10

    По умолчанию

    Столько примеров) столько споров. Вообще в идеале я хотел передавать из скады 2 2-ух байтовых маски для 2-ух 16Р, а из плк хотел передавать в скаду 4 байтовую переменную в которой склеены 2 модуля 8ДФ и +16 переменных из программ плк. Плохая затея?

Страница 1 из 3 123 ПоследняяПоследняя

Похожие темы

  1. битовая маска для сми-1
    от Р.Александр в разделе Master SCADA 3
    Ответов: 2
    Последнее сообщение: 08.09.2009, 18:28
  2. Ответов: 7
    Последнее сообщение: 21.04.2008, 08:33

Ваши права

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