Страница 3 из 7 ПерваяПервая 12345 ... ПоследняяПоследняя
Показано с 21 по 30 из 81

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

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

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Пользователь Аватар для 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

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

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

    По умолчанию

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

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

  3. #3
    Пользователь
    Регистрация
    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.
    Я, правда, думал, что будет проще.

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

    По умолчанию

    https://masteropc.insat.ru/blog/fb-s...v-masterscada/

    Если в мс4д под понятием Вещественный всегда double, то просто потом привести к нему.
    У вас есть средства, а вы е... с кучей преобразований из строк в байты из байтов в Ворды и т.д. Зачем?

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

    По умолчанию

    Цитата Сообщение от melky Посмотреть сообщение
    https://masteropc.insat.ru/blog/fb-s...v-masterscada/

    У вас есть средства, а вы е... с кучей преобразований из строк в байты из байтов в Ворды и т.д. Зачем?
    Я C# не знаю. Не смог понять когда и какие библиотеки подключать. И главное: где их брать и зачем это на простейшем алгоритме? Ни в одном языке такой дури нет.

    Неужели свой ФБ на C# будет проще, чем несколько готовых конвертаций на ST ?
    Последний раз редактировалось Vetal10; 07.08.2024 в 16:19.

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

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    Код:
    b AT  %MB0 : ARRAY[1..4] OF BYTE := 234,89,6,61;
    x AT  %MB0 : REAL;
    собсно код:
    Код:
    ;
    --
    а причем тут был string, непонятно
    STRING получится в самом начале, из ответа прибора будет вырвано 4 байта.
    Как их (все 4) превратить в REAL ?

    ARRAY OF BYTE := 234,89,6,61 уже получил. Что с ним дальше делать? С# не знаю. Как С# применить в ST не знаю.

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

    По умолчанию

    Цитата Сообщение от Vetal10 Посмотреть сообщение
    Как их (все 4) превратить в REAL ?.
    дык я ж написал выше. Их не нужно "превращать". На них нужно правильно посмотреть
    Я для вас даже цветом выделил сейчас
    Последний раз редактировалось Валенок; 07.08.2024 в 18:15.

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

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    дык я ж написал выше. Их не нужно "превращать". На них нужно правильно посмотреть
    Я для вас даже цветом выделил сейчас
    Не вкурил. Это на каком языке?

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

    По умолчанию

    Цитата Сообщение от Vetal10 Посмотреть сообщение
    Неужели свой ФБ на C# будет проще, чем несколько готовых конвертаций на ST ?
    Код:
    b AT  %MB0 : ARRAY[1..4] OF BYTE := 234,89,6,61;
    x AT  %MB0 : REAL;
    собсно код:
    Код:
    ; (*это код конвертации*)
    --
    а причем тут был string, непонятно
    Последний раз редактировалось Валенок; 07.08.2024 в 18:15.

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

    По умолчанию

    Так я про то и написал, зачем выкручивать руки несчастным 4-м байтам, если можно один FB сделать и потом его использовать в том же ST

    У вас одна строка BitConverter.ToSingle(массив байт любой длины, индек первого байта переменной float в байтов преставлении)

    Если вернуть надо обязательно в double то перед просто добавить (double)BitConverter.ToSingle( и так далее)
    Если вы получаете ответ от Пульсара с единственной переменной то индекс первого

Страница 3 из 7 ПерваяПервая 12345 ... ПоследняяПоследняя

Похожие темы

  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

Ваши права

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