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

Тема: Функции String

Комбинированный просмотр

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

    По умолчанию

    Цитата Сообщение от Vetal10 Посмотреть сообщение
    Смотрел. На каком это языке? Что такое "shl" ? Как это применимо к ST ?
    прочтите документацию, например функции сдвига
    Вам вообще то предлагали код формирования вещественного числа, да это сложно, но простой вариант не получится
    Код:
    VAR
    	inpW0, inpW1 :DWORD;
    	stuff: ARRAY [0..3] OF BYTE := 234,89,6,61;
    
            k           : REAL;
            sign        : REAL;
            exponent    : REAL;
            mant_mult   : REAL;
            stuffAdd    : DWORD;
            exp_raw     : DWORD;
            mantissa    : DWORD;
            i           : INT;
            negative    : BOOL;
    
    	arrWToReal : REAL;
    END_VAR
    
    
    
    inpW1 :=SHL(BYTE_TO_WORD(stuff[3]),8) OR BYTE_TO_WORD(stuff[2]);
    inpW0 :=SHL(BYTE_TO_WORD(stuff[1]),8) OR BYTE_TO_WORD(stuff[0]);
    stuffAdd := SHL(inpW1, 16) +  inpW0;
    negative := SHR(stuffAdd, 31) > 0;
    mant_mult := 1.0;
    IF negative THEN
    	sign := -1.0;
    ELSE
    	sign := 1.0;
    END_IF;
    exp_raw := SHR((stuffAdd MOD 2147483648), 23);
    exponent := DWORD_TO_REAL(exp_raw) - 127;
    
    mantissa := stuffAdd MOD 8388608;
    FOR i := 0 TO 22 DO
    	IF (SHR(mantissa, (22 - i)) MOD 2) = 1 THEN
           	k := INT_TO_REAL(23 - (22 - i));
                	mant_mult := mant_mult + 1/(EXPT(2,k));
    	END_IF;
    END_FOR;
    
    arrWToReal := sign * (EXPT(2, exponent)) * mant_mult;
    примерно так должно получится требуемое число

    что касается этого утверждения
    Цитата Сообщение от Vetal10 Посмотреть сообщение
    Есть 4 байта вырванных из ответа прибора в виде STRING.
    У Вас же получалось с ComPortByte, который сразу возвращает массив байт, поэтому все и спрашивают зачем строки
    Последний раз редактировалось capzap; 08.08.2024 в 08:48.
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

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

  2. #2

    По умолчанию

    А чем ТС не устраивает объединение:

    aww.png

  3. #3
    Пользователь
    Регистрация
    22.05.2018
    Адрес
    Сочи, Лазаревское
    Сообщений
    91

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение

    У Вас же получалось с ComPortByte, который сразу возвращает массив байт, поэтому все и спрашивают зачем строки
    В ответном массиве куча байт, а мне нужно только 4. Поэтому вырезать их реально с помощью STRING. Есть другой способ? Подскажи.
    ФБ "ComPortByte" выдаёт массив. Его в STRING и обрезаю. Ещё не делал, но думаю получится. Можно из массива сразу убрать лишнее? Подскажи.

    Вот ответ
    11 57 35 85 01 0E EA 59 06 3D 01 00 B9 2D
    и в нём сидит цифра 0.0328006
    Т.е. EA 59 06 3D
    Последний раз редактировалось Vetal10; 08.08.2024 в 08:26.

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

    По умолчанию

    Цитата Сообщение от Vetal10 Посмотреть сообщение
    В ответном массиве куча байт, а мне нужно только 4. Поэтому вырезать их реально с помощью STRING. Есть другой способ? Подскажи.
    ФБ "ComPortByte" выдаёт массив. Его в STRING и обрезаю. Ещё не делал, но думаю получится. Можно из массива сразу убрать лишнее? Подскажи.

    Вот ответ
    11 57 35 85 01 0E EA 59 06 3D 01 00 B9 2D
    и в нём сидит цифра 0.0328006
    Т.е. EA 59 06 3D
    Вам сложно из массива использоовать с 6 по 9 элементы?
    owen.png
    Последний раз редактировалось capzap; 08.08.2024 в 08:46.
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

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

  5. #5
    Пользователь
    Регистрация
    22.05.2018
    Адрес
    Сочи, Лазаревское
    Сообщений
    91

    По умолчанию

    Не сложно. Каждый из 4-х элементов массива присвоить переменной?
    Ну это уже детали. Сейчас опробую алгоритм, который Вы прислали.
    Головняк, конечно, ещё тот, с этими преобразованиями. Знал, что не будет легко, но чтоб так ...

  6. #6

    По умолчанию

    Цитата Сообщение от Vetal10 Посмотреть сообщение
    Не сложно. Каждый из 4-х элементов массива присвоить переменной?
    Ну это уже детали. Сейчас опробую алгоритм, который Вы прислали.
    Головняк, конечно, ещё тот, с этими преобразованиями. Знал, что не будет легко, но чтоб так ...
    Посмотрел и не нашел в MS4 никаких инструментов работы с памятью напрямую.
    Наверное остаётся только вариант формирования числа как у capzap

  7. #7
    Пользователь
    Регистрация
    22.05.2018
    Адрес
    Сочи, Лазаревское
    Сообщений
    91

    По умолчанию

    Цитата Сообщение от 1exan Посмотреть сообщение
    Посмотрел и не нашел в MS4 никаких инструментов работы с памятью напрямую.
    Наверное остаётся только вариант формирования числа как у capzap
    Из ARRAY загнать в STRING, обрезать и справа и слева и снова в ARRAY загнать. Это можно.
    А можно из ARRAY использовать только нужные элементы. Это уже на любителя.

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

    По умолчанию

    Цитата Сообщение от Vetal10 Посмотреть сообщение
    Из ARRAY загнать в STRING,.
    Если в array первый 0 - как этот будет выглядеть?

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

    По умолчанию

    Цитата Сообщение от Vetal10 Посмотреть сообщение
    В ответном массиве..
    структуре? //твоя скада - твоя изучать

    Цитата Сообщение от Vetal10 Посмотреть сообщение
    Вот ответ
    11 57 35 85 01 0E EA 59 06 3D 01 00 B9 2D
    {word,dword,нужный_реал;...} //как в скаде с выравниванием - твоя изучать

  10. #10
    Пользователь
    Регистрация
    22.05.2018
    Адрес
    Сочи, Лазаревское
    Сообщений
    91

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    прочтите документацию, например функции сдвига
    Вам вообще то предлагали код формирования вещественного числа, да это сложно, но простой вариант не получится
    Код:
    VAR
    	inpW0, inpW1 :DWORD;
    	stuff: ARRAY [0..3] OF BYTE := 234,89,6,61;
    
            k           : REAL;
            sign        : REAL;
            exponent    : REAL;
            mant_mult   : REAL;
            stuffAdd    : DWORD;
            exp_raw     : DWORD;
            mantissa    : DWORD;
            i           : INT;
            negative    : BOOL;
    
    	arrWToReal : REAL;
    END_VAR
    
    
    
    inpW1 :=SHL(BYTE_TO_WORD(stuff[3]),8) OR BYTE_TO_WORD(stuff[2]);
    inpW0 :=SHL(BYTE_TO_WORD(stuff[1]),8) OR BYTE_TO_WORD(stuff[0]);
    stuffAdd := SHL(inpW1, 16) +  inpW0;
    negative := SHR(stuffAdd, 31) > 0;
    mant_mult := 1.0;
    IF negative THEN
    	sign := -1.0;
    ELSE
    	sign := 1.0;
    END_IF;
    exp_raw := SHR((stuffAdd MOD 2147483648), 23);
    exponent := DWORD_TO_REAL(exp_raw) - 127;
    
    mantissa := stuffAdd MOD 8388608;
    FOR i := 0 TO 22 DO
    	IF (SHR(mantissa, (22 - i)) MOD 2) = 1 THEN
           	k := INT_TO_REAL(23 - (22 - i));
                	mant_mult := mant_mult + 1/(EXPT(2,k));
    	END_IF;
    END_FOR;
    
    arrWToReal := sign * (EXPT(2, exponent)) * mant_mult;
    ОГРОМНОЕ СПАСИБО !!! РАБОТАЕТ !!!
    Если бы не Ваша помощь, я бы ещё долго голову ломал с этим IEEE754.
    Я, правда, думал, что будет проще.

Похожие темы

  1. Длинные строки (STRING)
    от rumkin в разделе ПЛК1хх
    Ответов: 9
    Последнее сообщение: 16.05.2022, 13:45
  2. String и Модбас слейв
    от жекон в разделе Сетевые технологии
    Ответов: 11
    Последнее сообщение: 04.11.2013, 16:59
  3. Длинный STRING
    от Nazar в разделе ПЛК1хх
    Ответов: 9
    Последнее сообщение: 08.03.2011, 13:04
  4. String переменные в архиваторе
    от Антон в разделе ПЛК1хх
    Ответов: 9
    Последнее сообщение: 25.12.2007, 10:53

Ваши права

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