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

Тема: pragma bitaccess? помогите разобраться

  1. #1

    По умолчанию pragma bitaccess? помогите разобраться

    В проекте нужно несколько флаговых переменных, использую на данный момент несколько DWORD и кучу констант типа INT для доступа к отдельным битам.
    Проблем вроде нет, но хочется сделать по человечески. В справке в разделе "Addressing bits in variables" описан вариант:

    ----------------------------------------
    Example 2, Bitaccess on an integer structure component:
    Declaration of structure stru1:
    TYPE stru1 :
    STRUCT
    bvar:BOOL;
    rvar:REAL;
    wvar:WORD;
    {bitaccess enable 42 'Start drive'}
    END_STRUCT
    END_TYPE

    Declaration in POU:

    VAR
    x:stru1;
    END_VAR

    Bitaccess:

    x.enable:=true;

    This will set TRUE the 42. bit in variable x. Since bvar has 8 bits and rvar has 32 bits, the bitaccess will be done on the second bit of variable wvar, which as a result will get value 4.

    ---------------------------------------------

    Красиво, понятно, в рантайме должно отображаться, но, создаю проект, ПЛК160, таргет 2.10, и получаю ошибку Error 4121: ENABLE is not a component of stru1.

    Проект прикладываю, кодесис пробовал как с сайта ОВНА, так и скачанный с сайта 3S (2.3.9.47) -- результат тот же.
    Подскажите что я делаю не так, какое волшебное слово нужно, чтобы нормально заработал этот bitaccess?
    Вложения Вложения

  2. #2
    Пользователь Аватар для _Mikhail
    Регистрация
    25.07.2013
    Адрес
    Ярославль
    Сообщений
    510

    По умолчанию

    В твоем проекте создана структура из трех переменных
    TYPE stru1 :
    STRUCT
    bvar: BOOL;
    rvar: REAL;
    wvar: WORD;
    END_STRUCT
    END_TYPE

    А в проекте ты вызвал структуру
    x: stru1;

    и обращаешься к несуществующей переменной
    x.enable:=true;
    Последний раз редактировалось _Mikhail; 11.08.2015 в 17:06.

  3. #3
    Пользователь Аватар для petera
    Регистрация
    06.05.2011
    Адрес
    Минск
    Сообщений
    3,841

    По умолчанию

    Цитата Сообщение от manuel Посмотреть сообщение
    В проекте нужно несколько флаговых переменных, использую на данный момент несколько DWORD и кучу констант типа INT для доступа к отдельным битам.
    Проблем вроде нет, но хочется сделать по человечески. В справке в разделе "Addressing bits in variables" описан вариант:

    ----------------------------------------
    Example 2, Bitaccess on an integer structure component:
    Declaration of structure stru1:
    TYPE stru1 :
    STRUCT
    bvar:BOOL;
    rvar:REAL;
    wvar:WORD;
    {bitaccess enable 42 'Start drive'}
    END_STRUCT
    END_TYPE

    Declaration in POU:

    VAR
    x:stru1;
    END_VAR

    Bitaccess:

    x.enable:=true;

    This will set TRUE the 42. bit in variable x. Since bvar has 8 bits and rvar has 32 bits, the bitaccess will be done on the second bit of variable wvar, which as a result will get value 4.

    ---------------------------------------------

    Красиво, понятно, в рантайме должно отображаться, но, создаю проект, ПЛК160, таргет 2.10, и получаю ошибку Error 4121: ENABLE is not a component of stru1.

    Проект прикладываю, кодесис пробовал как с сайта ОВНА, так и скачанный с сайта 3S (2.3.9.47) -- результат тот же.
    Подскажите что я делаю не так, какое волшебное слово нужно, чтобы нормально заработал этот bitaccess?
    Читать в справке нужно все, в том числе и примечания.
    1.png

    Захват-7.png

    Захват-2.png

    Из этого следует, что
    1. Включить "замену констант"
    Захват-4.png
    2. Объявить "enable" как глобальную константу.
    Захват-5.png

    И вуаля
    Захват-6.png

    To _Mikhail

    Вы если не знаете что такое Bitaccess, то не советуйте глупости.
    Вложения Вложения
    Последний раз редактировалось petera; 11.08.2015 в 14:58.
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  4. #4

    По умолчанию

    2 petera
    Да!

    Огромное спасибо за развернутый ответ, работает!

  5. #5
    Пользователь
    Регистрация
    10.11.2014
    Адрес
    Санкт-Петербург
    Сообщений
    980

    По умолчанию

    Странно. Если сделать вот так:

    TYPE strDWORD :
    STRUCT
    Channel : DWORD;
    {bitaccess x1 0}
    END_STRUCT
    END_TYPE

    VAR_GLOBAL CONSTANT
    x1 : INT := 3;
    END_VAR

    То будет меняться 3 бит в переменной Channel.

    Если убрать в объявлении bitaccess 0, т.е. так:
    TYPE strDWORD :
    STRUCT
    Channel : DWORD;
    {bitaccess x1}
    END_STRUCT
    END_TYPE
    то не работает.

    Т.е. в записи {bitaccess x1 0} цифра после имени бита нужна, но значение номера бита для имени x1 берется из глобальных констант.

    Зачем тогда указывать цифру в объявлении {bitaccess x1 0}?

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

    По умолчанию

    Цитата Сообщение от SKV Посмотреть сообщение
    Странно. Если сделать вот так:

    TYPE strDWORD :
    STRUCT
    Channel : DWORD;
    {bitaccess x1 0}
    END_STRUCT
    END_TYPE

    VAR_GLOBAL CONSTANT
    x1 : INT := 3;
    END_VAR

    То будет меняться 3 бит в переменной Channel.

    Если убрать в объявлении bitaccess 0, т.е. так:
    TYPE strDWORD :
    STRUCT
    Channel : DWORD;
    {bitaccess x1}
    END_STRUCT
    END_TYPE
    то не работает.

    Т.е. в записи {bitaccess x1 0} цифра после имени бита нужна, но значение номера бита для имени x1 берется из глобальных констант.

    Зачем тогда указывать цифру в объявлении {bitaccess x1 0}?
    так Вы прочитайте в документации синтакиси этой директивы, замените ноль на 333 и посмотрите что будет
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

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

  7. #7
    Пользователь
    Регистрация
    10.11.2014
    Адрес
    Санкт-Петербург
    Сообщений
    980

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    так Вы прочитайте в документации синтакиси этой директивы, замените ноль на 333 и посмотрите что будет
    Я это сделал до того как задал вопрос. Если после имени написать значение за рамками структуры, то тоже не работает.
    Вопрос в другом. Если значение для x1 берется из глобальных констант, то зачем его указывать в директиве bitaccess? Это же путает?!

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

    По умолчанию

    Цитата Сообщение от SKV Посмотреть сообщение
    Я это сделал до того как задал вопрос. Если после имени написать значение за рамками структуры, то тоже не работает.
    Вопрос в другом. Если значение для x1 берется из глобальных констант, то зачем его указывать в директиве bitaccess? Это же путает?!
    а синтаксис Вы прочли, второй аргумент это как и третий, для информации. в нем должно быть значение присвоенное глобальной константе
    Изображения Изображения
    • Тип файла: png owen.png (70.9 Кб, Просмотров: 24)
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

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

  9. #9
    Пользователь
    Регистрация
    10.11.2014
    Адрес
    Санкт-Петербург
    Сообщений
    980

    По умолчанию

    Вообщем, это что-то вроде комментария. Только обязательного.

Похожие темы

  1. Помогите разобраться
    от Alex1991 в разделе ПЛК1хх
    Ответов: 7
    Последнее сообщение: 15.07.2015, 00:57
  2. помогите разобраться
    от a_l_e_x в разделе ПЛК1хх
    Ответов: 3
    Последнее сообщение: 02.07.2010, 16:51
  3. Помогите разобраться...
    от xaker_tm в разделе ПЛК1хх
    Ответов: 7
    Последнее сообщение: 08.02.2010, 17:33
  4. ПОМОГИТЕ РАЗОБРАТЬСЯ!
    от doctorsot в разделе Эксплуатация
    Ответов: 1
    Последнее сообщение: 17.12.2008, 23:50
  5. Помогите разобраться !!
    от viking в разделе ПЛК1хх
    Ответов: 4
    Последнее сообщение: 21.11.2007, 14:31

Ваши права

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