Страница 1 из 3 123 ПоследняяПоследняя
Показано с 1 по 10 из 22

Тема: преобразования

  1. #1
    Пользователь
    Регистрация
    05.05.2007
    Адрес
    Барнаул->Москва
    Сообщений
    139

    По умолчанию преобразования

    здравствуйте.

    каким образом можно преобразовать число от функции Len (она отдает в десятичном формате) в шестнадцатиричный и затем это значение в виде символов( т.е. 48h - это '48') передать в стринг?
    у меня почему-то стринг пишется в десятичном формате тоже..... делал преобразование для получения Hex кода Ascii символов - такая же песня.

    если можно - примерчик для обоих случаев на St.

  2. #2

    По умолчанию

    Стандартные функции CoDeSys не дают возможности выводить строку в 16-ричном формате. Придется делать самому или поискать библиотечки на форумах - особенно в германии.

  3. #3
    Пользователь
    Регистрация
    05.05.2007
    Адрес
    Барнаул->Москва
    Сообщений
    139

    По умолчанию

    понятно, владислав, а ссылочку дадите?

  4. #4

    По умолчанию

    Для начала http://www.prolog-plc.ru/
    Сам библиотеками не интересовался.

  5. #5

    По умолчанию

    В лоб число в строку в десятичном виде совсем просто str1 := INT_TO_STRING(x);

    В 16-ый формат так не получится. Я бы написал под это отдельную функцию для преобразования из байта в строку в 16-ом формате:

    FUNCTION Byte_to_hex_str : STRING
    VAR_INPUT
    byIn : BYTE;
    END_VAR
    VAR CONSTANT
    saHEX: ARRAY [0..15] OF STRING(1) := '0','1','2','3','4','5','6','7','8','9','A','B','C ','D','E','F';
    END_VAR

    Byte_to_hex_str := CONCAT(saHEX[SHR(byIn,4)],saHEX[byIn AND 16#0F]);


    Есть очень интересная бесплатная биб-ка для систем автоматизации зданий и не только, вкл. всякие полезные штуки. Надо зайти на сайт OSCAT (он на немецком), в верху в меню жмем oscat.lib 1.6 fur CoDeSys – закачать.
    Последний раз редактировалось Игорь Петров; 22.06.2007 в 19:02.

  6. #6
    Пользователь
    Регистрация
    05.05.2007
    Адрес
    Барнаул->Москва
    Сообщений
    139

    По умолчанию

    игорь, скачать, скачал - но там такого нет.... с немецким не дружу, но все же не нашел...

    думаю сделать так: делить на 16 байт.... в общем - как в ручную...

    за пример спасибо, буду смотреть, но не сейчас....

    за день разобрал протокол Sms для сименсов S серии.... написал уже перекодировку - осталось только сообщение кодировать и собственно все - отправка будет работать...
    Последний раз редактировалось Василий Куц; 22.06.2007 в 19:53.

  7. #7
    Пользователь
    Регистрация
    05.05.2007
    Адрес
    Барнаул->Москва
    Сообщений
    139

    По умолчанию

    глянул ваш пример.... все же не удержался
    насколько я понимаю по тетрадам берем от входного байта сначало первую, вставляем символ из массива соответствующий данному полубайту (преобразование в стринг идет автоматом в этом случае получается?). затем с младшей так же.... Непойму зачем смещать на 4 бита влево.... Не проще домножить на 0xF0 ? Раз уж младшую тетраду так выделили?
    Впрочем, Вам виднее
    Спасибо за пример, просто и со вкусом.
    Последний раз редактировалось Василий Куц; 22.06.2007 в 22:18.

  8. #8

    По умолчанию

    Цитата Сообщение от Василий Куц Посмотреть сообщение
    глянул ваш пример.... насколько я понимаю по тетрадам берем…
    Берем старшую тетраду путем сдвига вправо на 4 (равносильно делению на 16#10). Старшая при этом обнуляется, получаем число 0…15, соответствующее первой позиции в 16-м представлении. Соответствующую ему цифру или букву берем из таблицы. Таблица является массивом строк (в каждой всего один символ), поэтому никаких дополнительных преобразований не нужно.

    Затем в полученную строчу приклеиваем символ для младшей тетрады. Старшую при этом обнуляем посредством AND 16#0F.

    Можно не использовать вспомогательный массив, а формировать код символа в лоб. Т.е. выделить тетраду и превратить в ASCII код. К сожалению, между цифрами и буквами A…F в табличке ASCII есть дырка. Поэтому придется ставить дополнительный IF Тетрада < 10 THEN прибавлять '0' ELSE 'A'. Короче, с массивом проще.


    В биб-ке OSCAT 9 такого преобразования нет, там много чего другого, что может быть полезным. Документация к ней в pdf на немецком, но сама биб-ка спокойно открывается в CoDeSys командой Open... Тексты всех POU видны с комментариями на английском. Да и по текстам все достаточно понятно. Не обязательно ее использовать как цельную биб-ку, можно переделать под свои нужды.

  9. #9

    По умолчанию

    пять копеек по оптимизации кода - на Arm архитектуре операция сдвига не стоит ровным счетом ничего, т.к. ею занимается спец. сопроцессор и операция сдвига может быть добавлена 3-м операндом к операциям сложения, вычитания, умножения и деления.

  10. #10

    По умолчанию

    Помогите решить проблему!
    имеется массив 02 56 48 50 52 70 57 66 57 48 49 03 50 67 (в десятичном формате) необходимо его преобразовать в ascii и разбить на байты должно получиться примерно так . 80 24 F9 B9 01 . 2C

Страница 1 из 3 123 ПоследняяПоследняя

Ваши права

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