Страница 645 из 1041 ПерваяПервая ... 145545595635643644645646647655695745 ... ПоследняяПоследняя
Показано с 6,441 по 6,450 из 10404

Тема: ВОПРОС-ОТВЕТ (отвечаем на простые вопросы от новичков)

  1. #6441

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    Код:
    for i := 0 to 15 do
      if (x and shl(word#1,i)) > 0 then //i-ый бит в x поднят
        ...
      end_if
    end_for
    А что в данном случае x?
    Мне нужно в цикле обращаться к любому биту переменной.
    Пробую записать сначала все биты в массив, но данный код у меня не работает:
    Код:
    FOR i := 0 TO 15 DO
    	IF (a AND SHL(PG1_2,i)) > 0 THEN
    		Ar[i]:=WORD_TO_BOOL(a);
    	END_IF
    END_FOR
    a всегда 0, даже если iый бит 1.
    В общем сейчас приходится делать так:
    Код:
    Ar[0]:=PG1.0;
    Ar[1]:=PG1.1;
    Ar[2]:=PG1.2;
    Ar[3]:=PG1.3;
    Ar[4]:=PG1.4;
    Ar[5]:=PG1.5;
    Ar[6]:=PG1.6;
    Ar[7]:=PG1.7;
    Ar[8]:=PG1.8;
    Ar[9]:=PG1.9;
    Ar[10]:=PG1.10;
    Ar[11]:=PG1.11;
    Ar[12]:=PG1.12;
    Ar[13]:=PG1.13;
    Ar[14]:=PG1.14;
    Ar[15]:=PG1.15;
    
    работа с массивом
    
    PG1.0:=Ar[0];
    PG1.1:=Ar[1];
    PG1.2:=Ar[2];
    PG1.3:=Ar[3];
    PG1.4:=Ar[4];
    PG1.5:=Ar[5];
    PG1.6:=Ar[6];
    PG1.7:=Ar[7];
    PG1.8:=Ar[8];
    PG1.9:=Ar[9];
    PG1.10:=Ar[10];
    PG1.11:=Ar[11];
    PG1.12:=Ar[12];
    PG1.13:=Ar[13];
    PG1.14:=Ar[14];
    PG1.15:=Ar[15];
    Вопрос - можно ли также работать с битами переменной как с массивом (обращаться в цикле к iму элементу). И можно ли присвоить биты word массиву и наоборот другими методами?

  2. #6442

    По умолчанию

    Цитата Сообщение от xrus Посмотреть сообщение
    А что в данном случае x?
    Мне нужно в цикле обращаться к любому биту переменной.
    Пробую записать сначала все биты в массив, но данный код у меня не работает:
    Код:
    FOR i := 0 TO 15 DO
    	IF (a AND SHL(PG1_2,i)) > 0 THEN
    		Ar[i]:=WORD_TO_BOOL(a);
    	END_IF
    END_FOR
    a всегда 0, даже если iый бит 1.
    В общем сейчас приходится делать так:
    Код:
    Ar[0]:=PG1.0;
    ...
    Ar[15]:=PG1.15;
    
    работа с массивом
    
    PG1.0:=Ar[0];
    ....
    PG1.15:=Ar[15];
    Вопрос - можно ли также работать с битами переменной как с массивом (обращаться в цикле к iму элементу). И можно ли присвоить биты word массиву и наоборот другими методами?
    Используйте функцию EXTRACT библиотеки UTIL для заполнение массива значениями бит из переменной в цикле,
    Код:
    FOR i := 0 TO 15 DO
    	AR[i] := EXTRACT (PG1, i);
    END_FOR
    а функцию PUTBIT той же библиотеки для заполнения переменной значениями из массива.
    Код:
    FOR i := 0 TO 15 DO
    	PG1 := PUTBIT (PG1, i, AR[i]);
    END_FOR
    OSCAT.ru читать стандарты и статьи по автоматизации на русском без регистрации и СМС

  3. #6443

    По умолчанию

    Хорошо, спасибо, попробую. Еще один вопрос, пытаюсь создать новую функцию, нигде не могу найти примеров. В итоге выдаются такие ошибки. Что они означают?

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

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    Код:
    for i := 0 to 15 do
      if (x and shl(word#1,i)) > 0 then //i-ый бит в x поднят
        ...
      end_if
    end_for
    Цитата Сообщение от xrus Посмотреть сообщение
    А что в данном случае x?
    Мне нужно в цикле обращаться к любому биту переменной.
    В данном случае х - собственно и есть переменная, к битам которой нужно обращаться, например Ваша PG1
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  5. #6445

    По умолчанию

    То есть у неё может быть два значение 0 или 1? А какой у не должен быть тип, BOOL?
    Можете подсказать, почему выдаются ошибки?

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

    По умолчанию

    Цитата Сообщение от xrus Посмотреть сообщение
    Хорошо, спасибо, попробую. Еще один вопрос, пытаюсь создать новую функцию, нигде не могу найти примеров. В итоге выдаются такие ошибки. Что они означают?
    Функцию создают как отдельный программный компонент (POU), а не записью в теле объявлений PLC_PRG конструкции "FUNCTION ..... END_FUNCTION.
    Вложение 38093

    Вложение 38094

    Вложение 38096
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

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

    По умолчанию

    Цитата Сообщение от xrus Посмотреть сообщение
    То есть у неё может быть два значение 0 или 1? А какой у не должен быть тип, BOOL?
    Почему 0 или 1?
    Вы же хотели пройтись по всем битам переменной (2byte), так вот это и есть она - переменная формат WORD.
    Например PG1

    Код:
    FOR i := 0 TO 15 DO
    	IF (PG1 AND SHL(WORD#1,i)) > 0 THEN
    		Ar[i]:=TRUE;
    	ELSE
    		Ar[i]:=FALSE;
    	END_IF
    END_FOR
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  8. #6448

    По умолчанию

    Понял, спасибо!
    Может посоветуете какую-нибудь более расширенную документацию по языку st в codesys? Того что входит в комплект, как мне кажется недостаточно.

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

    По умолчанию

    Цитата Сообщение от xrus Посмотреть сообщение
    Понял, спасибо!
    Может посоветуете какую-нибудь более расширенную документацию по языку st в codesys? Того что входит в комплект, как мне кажется недостаточно.
    Любая книжка по Паскалю
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  10. #6450

    По умолчанию

    ПЛК100, в программе есть счетчик, у него есть счетный выход CV, значение которого нужно сохранять при выключении питания. Т.е., при новом включении счет должен продолжаться с сохраненного значения. Как это сделать? Счетчик объявлен как RETAIN, но почему-то это не помогает - после выключения/включения счет начинается с нуля.

Страница 645 из 1041 ПерваяПервая ... 145545595635643644645646647655695745 ... ПоследняяПоследняя

Метки этой темы

Ваши права

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