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

Тема: Возможно ли значение STRUCT присвоить WORDу?

  1. #1

    По умолчанию Возможно ли значение STRUCT присвоить WORDу?

    Здравствуйте, подскажите пж такой вопрос:

    Есть переменная test(word) и структура TestStruct(CUctrl) состоящая из 16 битов:
    TYPE CUctrl :
    STRUCT
    Spare0:BOOL;;
    Spare1:BOOL;
    Spare2:BOOL;
    Spare3:BOOL;
    Spare4:BOOL;
    Spare5:BOOL;
    Spare6:BOOL;
    Spare7:BOOL;
    Spare8:BOOL;
    Spare9:BOOL;
    Spare10:BOOL;
    Spare11:BOOL;
    Spare12:BOOL;
    Spare13:BOOL;
    Spare14:BOOL;
    Spare15:BOOL;
    END_STRUCT
    END_TYPE
    то есть размер структуры равен Word, но тип данных естественно она имеет CUctrl (в случае этого примера).
    на код такого вида естественно компилятор матюкается:
    test:=TestStruct;
    подскажите можно ли в СS "одним махом" присвоить значение структуры другой переменной
    побитно не вариант, так как приходится делать больше операций, спс

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

    По умолчанию

    в качестве аналога что_то_там_TO_во_что_то_там можно использовать ADR, но с битами это не получиться
    Изображения Изображения
    • Тип файла: png owen.png (5.9 Кб, Просмотров: 37)
    Последний раз редактировалось capzap; 11.09.2018 в 10:58.
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

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

  3. #3

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    в качестве аналога что_то_там_TO_во_что_то_там можно использовать ADR, но с битами это не получиться
    а какой у Вас тип данных переменных ptr и foo, подскажите пж ??
    Последний раз редактировалось a_gricaj; 11.09.2018 в 11:16.

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

    По умолчанию

    foo это WORD, ptr эту указатель на слово.
    На скрине наглядно показано, что элемент BOOL в структуре занимает один байт, так что для Вас это не вариант, остается только побитное присвоение или на прямую писать були в слово через точку
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

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

  5. #5

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    foo это WORD, ptr эту указатель на слово.
    На скрине наглядно показано, что элемент BOOL в структуре занимает один байт, так что для Вас это не вариант, остается только побитное присвоение или на прямую писать були в слово через точку
    да, точно байт((, очень благодарен за консультацию

  6. #6

    По умолчанию

    вместо TYPE CUctrl : STRUCT не проще ли о обращаться сразу к битам test(word) через точку:

    test.0 := TRUE;
    TestStruct.Spare0 := TRUE;

    можно константы объявить для удобства.
    VAR CONSTANT
    Spare0: BYTE := 0;
    END_VAR (и даже глобальные VAR_GLOBAL CONSTANT)

    test.Spare0 := TRUE;

  7. #7
    Пользователь Аватар для Serhioromano
    Регистрация
    15.09.2015
    Адрес
    Бишкек
    Сообщений
    265

    По умолчанию

    Написать свой CUctrl_TO_WORD

    Код:
    FUNCTION CUctrl_TO_WORD : WORD
        VAR_INPUT
            IN: CUctrl;
        END_VAR
        CUctrl_TO_WORD.0  := IN.Spare0;
        CUctrl_TO_WORD.1  := IN.Spare1;
        CUctrl_TO_WORD.2  := IN.Spare2;
        CUctrl_TO_WORD.3  := IN.Spare3;
        CUctrl_TO_WORD.4  := IN.Spare4;
        CUctrl_TO_WORD.5  := IN.Spare5;
        CUctrl_TO_WORD.6  := IN.Spare6;
        CUctrl_TO_WORD.7  := IN.Spare7;
        CUctrl_TO_WORD.8  := IN.Spare8;
        CUctrl_TO_WORD.9  := IN.Spare9;
        CUctrl_TO_WORD.10 := IN.Spare10;
        CUctrl_TO_WORD.11 := IN.Spare11;
        CUctrl_TO_WORD.12 := IN.Spare12;
        CUctrl_TO_WORD.13 := IN.Spare13;
        CUctrl_TO_WORD.14 := IN.Spare14;
        CUctrl_TO_WORD.15 := IN.Spare15;
    END_FUNCTION
    И потом в коде не нужно делать много операций.

    Код:
    VAR
         TestStruct : CUctrl;
         test: WORD;
    END_VAR
    
    test:=CUctrl_TO_WORD(TestStruct);

  8. #8

    По умолчанию

    Цитата Сообщение от lazy Посмотреть сообщение
    вместо TYPE CUctrl : STRUCT не проще ли о обращаться сразу к битам test(word) через точку:

    test.0 := TRUE;
    TestStruct.Spare0 := TRUE;

    можно константы объявить для удобства.
    VAR CONSTANT
    Spare0: BYTE := 0;
    END_VAR (и даже глобальные VAR_GLOBAL CONSTANT)

    test.Spare0 := TRUE;
    НУ я так и делаю, через точку, но много лишней работы для ПЛК

  9. #9

    По умолчанию

    Цитата Сообщение от Serhioromano Посмотреть сообщение
    Написать свой CUctrl_TO_WORD

    Код:
    FUNCTION CUctrl_TO_WORD : WORD
        VAR_INPUT
            IN: CUctrl;
        END_VAR
        CUctrl_TO_WORD.0  := IN.Spare0;
        CUctrl_TO_WORD.1  := IN.Spare1;
        CUctrl_TO_WORD.2  := IN.Spare2;
        CUctrl_TO_WORD.3  := IN.Spare3;
        CUctrl_TO_WORD.4  := IN.Spare4;
        CUctrl_TO_WORD.5  := IN.Spare5;
        CUctrl_TO_WORD.6  := IN.Spare6;
        CUctrl_TO_WORD.7  := IN.Spare7;
        CUctrl_TO_WORD.8  := IN.Spare8;
        CUctrl_TO_WORD.9  := IN.Spare9;
        CUctrl_TO_WORD.10 := IN.Spare10;
        CUctrl_TO_WORD.11 := IN.Spare11;
        CUctrl_TO_WORD.12 := IN.Spare12;
        CUctrl_TO_WORD.13 := IN.Spare13;
        CUctrl_TO_WORD.14 := IN.Spare14;
        CUctrl_TO_WORD.15 := IN.Spare15;
    END_FUNCTION
    И потом в коде не нужно делать много операций.

    Код:
    VAR
         TestStruct : CUctrl;
         test: WORD;
    END_VAR
    
    test:=CUctrl_TO_WORD(TestStruct);
    А тут не понял, почему ПЛК будет проще, так как процессору еще нужно вызвать функцию....Реально будет быстрее?
    Последний раз редактировалось a_gricaj; 22.10.2018 в 15:57.

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

    По умолчанию

    Как то это по детски, считать что процессор, что видит человек, то и выполняет. На уровне компиляции любой вариант придуманный человеком оптимизируется и в машинных кодах будет с большой вероятностью одно и тоже
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

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

Похожие темы

  1. Присвоить значениям текущую дату
    от Stryder123451 в разделе Master SCADA 3
    Ответов: 1
    Последнее сообщение: 09.01.2017, 13:05
  2. Ответов: 3
    Последнее сообщение: 29.07.2016, 12:33
  3. структуированные данные. Struct.
    от Юрий Поляков в разделе ПЛК1хх
    Ответов: 4
    Последнее сообщение: 11.06.2010, 01:57
  4. в Cfc присвоить значение
    от Bigest в разделе ПЛК1хх
    Ответов: 2
    Последнее сообщение: 21.12.2009, 11:49
  5. Действующее значение. Возможно ли.
    от незарегистрированный в разделе ПЛК1хх
    Ответов: 0
    Последнее сообщение: 02.07.2008, 14:42

Ваши права

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