"Правильный" блок преобразования строчных данных

На этом форуме Вы можете задать вопросы знатокам программы и автору.
Ответить
Аватара пользователя
DrMario
Лейтенант
Сообщения: 304
Зарегистрирован: 07.11.2016{, 13:11}
Репутация: 40
Откуда: Камень-на-Оби
Имя: Евгений
Контактная информация:

"Правильный" блок преобразования строчных данных

#1

Сообщение DrMario » 22.12.2016{, 15:08}

Всем здравствуйте.
Столкнулся с проблемой преобразования фрагмента строчных данных, значения которых записаны в шестнацатеричном виде.
В наборе FLProg есть блок конвертации Строка-число но он мне не подходит, преобразовывать можно только десятичные числа а буквенные символы конвертер не принимает.
Мне необходимо записать данные, которые потом будут добавляться к отправляемым данным в другое устройство. Все данные должны будут уходить в виде байтов в формате Заголовок + данные + контрольная сумма.
Конкретный пример, это установить заголовок из 3 байт при помощи служебной команды ATSH.
Выделить эти данные из массива я научился, но вот с созданием блока пользователя у меня проблема.
Если оставить как есть, от мне придется самому преобразовывать hex данные в десятичное значение.
Например чтобы записать данные 81 0A F1, нужно в ком порт отправить команду ATSH а к ней добавить значение этих 3 байт в виде десятичного числа 8456945. Вместо привычного мне вида ATSH810AF1 получается ATSH8456945 а это крайне неудобно.
Фрагмент своего проекта прилагаю.

Пересмотрел в интернете примеры с подобной конвертацией, но я очень начинающий и из меня пока программист, как с г...а пуля.   
Огромное спасибо Сергею за великолепную программу FLProg.
Вложения
ATSHxxyyzz.flp
(115.98 КБ) 59 скачиваний
6916466.jpg

Слимпер
Майор
Сообщения: 1009
Зарегистрирован: 06.09.2015{, 16:56}
Репутация: 27
Откуда: Новосибирск

"Правильный" блок преобразования строчных данных

#2

Сообщение Слимпер » 22.12.2016{, 18:16}

DrMario, прочитал ваш пост, но так и не понял что именно вам надо преобразовать и во что.

Прост каждый силовом строки в байт или надо именно группы из двух HEX цифр преобразовать в один байт (т.е. перевод из HEX в DEC, этих групп цифр)?
DrMario писал(а):Пересмотрел в интернете примеры с подобной конвертацией, но я очень начинающий и из меня пока программист, как с г...а пуля.
  Если вы нашли готовое решение вашей задачи, то лучше приводить ссылку.

Аватара пользователя
DrMario
Лейтенант
Сообщения: 304
Зарегистрирован: 07.11.2016{, 13:11}
Репутация: 40
Откуда: Камень-на-Оби
Имя: Евгений
Контактная информация:

"Правильный" блок преобразования строчных данных

#3

Сообщение DrMario » 23.12.2016{, 10:13}

Наверно я не точно объяснил проблему, попробую сделать это подробнее.
В строке после служебной команды ATSH задаются 3 байта, значение которых указаны в шестнацатеричном виде. Например ATSH8111F1 где ATSH это сама команда, а все что дальше это три байта 0x81, 0x11, 0xF1 которые записываются в строковую переменную HVal (Head Value) в моем примере. Вот теперь эта строка должна быть преобразована непосредственно в 3 байта (Byte).
В стринговом виде указанные значения 0x81, 0x11, 0xF1 в переменную HVal записываются конечно как символы ASCII, а именно в переменной будет значение 38 31 31 31 46 31 и имеют размер 6 в массиве (6 индексов).
Где символы 8=38, 1=31, F=46.
То есть нужно 38 31 преобразовать в 0x81 и т.д.
Подобный случай описан по этой ссылке. Но у меня нет опыта в программировании и никак не получается код из примера вставить в свой блок пользователя.
Последний раз редактировалось DrMario 23.12.2016{, 10:23}, всего редактировалось 1 раз.

Слимпер
Майор
Сообщения: 1009
Зарегистрирован: 06.09.2015{, 16:56}
Репутация: 27
Откуда: Новосибирск

"Правильный" блок преобразования строчных данных

#4

Сообщение Слимпер » 23.12.2016{, 18:35}

Если я вас правильно понял, то вот вариант реализации, только для проверки сделал вывод обратно в виде строки.
Не стал делать один блок сразу на три байта, а решил, что универсальнее сделать блок для преобразования отдельных пар HEX чисел в байты.
Прилагая пример использования блока и сам блок отдельно.

Добавлено (23.12.2016, 18:35)
---------------------------------------------
Напишете по результатам. Интересно, то сделал или не то.
Вложения
Str_to_Byte-COD.ubi
(22.24 КБ) 56 скачиваний
ATSHxxyyzz_NEW.flp
(249.52 КБ) 57 скачиваний

Аватара пользователя
DrMario
Лейтенант
Сообщения: 304
Зарегистрирован: 07.11.2016{, 13:11}
Репутация: 40
Откуда: Камень-на-Оби
Имя: Евгений
Контактная информация:

"Правильный" блок преобразования строчных данных

#5

Сообщение DrMario » 13.01.2017{, 11:32}

Спасибо!
Извините за долгое молчание, это то что было нужно.
Не без помощи своего товарища сделал парочку блоков. Первый блок Str Hex to Byte, аналогичен Вашему Str to Byte.
Второй блок Str 4xHex to Dec. Описание:
На вход подается строковая переменная в виде 0A1B2C3D, на выходе будет значение 169552957 в десятичном виде (Dec).
Собственно это один и тот же блок но с разным типом выходных переменных. В первом это Byte, во втором Unsigned long.
Вложения
Str_4xHex_to_De.ubi
(19.29 КБ) 69 скачиваний
Str_Hex_to_Byte.ubi
(19.23 КБ) 56 скачиваний
Последний раз редактировалось DrMario 13.01.2017{, 11:40}, всего редактировалось 1 раз.

Аватара пользователя
ElectroMechaniC
Сержант
Сообщения: 230
Зарегистрирован: 21.09.2016{, 06:50}
Репутация: 1
Откуда: Донецк
Имя: Юрий

"Правильный" блок преобразования строчных данных

#6

Сообщение ElectroMechaniC » 03.05.2018{, 22:49}

Спасибо за блок! А если трёх, двух и однобайтовые переменные переводить? Можно с помощью этого блока? И ли он автоматически понимает что подано на вход?
:newrus: Все в руках человека. Поэтому всегда мойте руки перед и зад! :victory:
:smile225: :smile469: :smile427:

Ответить

Вернуться в «Спросить у знатоков»