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

Тема: CODESYS V3.5. Онлайн-FAQ

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #11
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    13,594

    По умолчанию PRG#04. Как преобразовывать данные? (2 WORD в REAL и т.п.)

    Вопрос: в процессе разработки программы часто возникают задачи преобразования данных. В некоторых случаях достаточно стандартных операторов конверсии (например, REAL_TO_INT). Но иногда возникают вопросы другого рода, например - как разбить переменную DWORD на 4 отдельных байта, как преобразовать 2 переменные типа WORD в REAL и т.д. Очевидно, что можно сделать это с помощью указателей. Но есть ли более простые способы?

    Ответ: такие способы есть. Рассмотрим три библиотеки:

    1. Библиотека Util содержит функции, позволяющие:

    • собирать переменные типов BYTE/WORD/DWORD из отдельных битов и разделять их на отдельные биты (удобно для графических языков);
    • выделять/устанавливать конкретный бит переменных типа BYTE/WORD/DWORD;
    • преобразовывать данные из десятичного формата в двоично-десятичный и обратно.

      а также:

    • функции конверсии для кода Грея;
    • функции преобразования HEX-значений в ASCII-коды и обратно (пример: 16#30--->16#3330, где 16#33 - ASCII-код символа '3', а 16#30 - ASCII-код символа '0').


    Util.png

    2. Библиотека CAA Memory содержит функции, позволяющие:

    • выделять младшие и старшие байты/слова из переменных типа WORD/DWORD;
    • собирать переменные типов BYTE/WORD/DWORD из отдельных битов/байт/слов и разделять их на отдельные биты/байты/слова;
    • изменять порядок бит/байт/слов в переменных типа BYTE/WORD/DWORD.


    caa memory.png

    Приведем также пример конвертации 2 WORD в REAL с помощью данной библиотеки:

    Код:
    VAR
    	wLow: 	WORD := 16#851F;
    	wHigh: 	WORD := 16#4133;
    	
    	dwVar:  DWORD;
    	
    	rVar: 	REAL;
    END_VAR
    
    
    dwVar := MEM.PackWordsToDword(wHigh, wLow);
    
    MEM.MemMove(ADR(dwVar), ADR(rVar), SIZEOF(rVar));
    
    // rVar теперь имеет значение 11.22
    3. Библиотека OwenCommunication содержит функции и ФБ, позволяющие:

    • преобразовать REAL в 2 WORD и наоборот с возможностью изменения порядка байт;
    • преобразовать DWORD в 2 WORD и наоборот с возможностью изменения порядка байт;
    • преобразовать любой тип данных в любой.


    OwenComm.png

    Код:
    VAR
    	wLow: 	WORD := 16#851F;
    	wHigh: 	WORD := 16#4133;
    	
    	rVar: 	REAL;
    END_VAR
    
    rVar := OCL.WORD2_TO_REAL(wHigh, wLow, FALSE);
    
    // rVar теперь имеет значение 11.22

Похожие темы

  1. Ответов: 1
    Последнее сообщение: 29.06.2017, 11:21

Ваши права

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