Всем здравствуйте.
Столкнулся с проблемой преобразования фрагмента строчных данных, значения которых записаны в шестнацатеричном виде.
В наборе FLProg есть блок конвертации Строка-число но он мне не подходит, преобразовывать можно только десятичные числа а буквенные символы конвертер не принимает.
Мне необходимо записать данные, которые потом будут добавляться к отправляемым данным в другое устройство. Все данные должны будут уходить в виде байтов в формате Заголовок + данные + контрольная сумма.
Конкретный пример, это установить заголовок из 3 байт при помощи служебной команды ATSH.
Выделить эти данные из массива я научился, но вот с созданием блока пользователя у меня проблема.
Если оставить как есть, от мне придется самому преобразовывать hex данные в десятичное значение.
Например чтобы записать данные 81 0A F1, нужно в ком порт отправить команду ATSH а к ней добавить значение этих 3 байт в виде десятичного числа 8456945. Вместо привычного мне вида ATSH810AF1 получается ATSH8456945 а это крайне неудобно.
Фрагмент своего проекта прилагаю.
Пересмотрел в интернете примеры с подобной конвертацией, но я очень начинающий и из меня пока программист, как с г...а пуля.
Огромное спасибо Сергею за великолепную программу FLProg.
"Правильный" блок преобразования строчных данных
- DrMario
- Лейтенант
- Сообщения: 378
- Зарегистрирован: 07 ноя 2016, 13:11
- Откуда: Камень-на-Оби
- Имя: Евгений
- Контактная информация:
"Правильный" блок преобразования строчных данных
У вас нет необходимых прав для просмотра вложений в этом сообщении.
"Правильный" блок преобразования строчных данных
DrMario, прочитал ваш пост, но так и не понял что именно вам надо преобразовать и во что.
Прост каждый силовом строки в байт или надо именно группы из двух HEX цифр преобразовать в один байт (т.е. перевод из HEX в DEC, этих групп цифр)?
Прост каждый силовом строки в байт или надо именно группы из двух HEX цифр преобразовать в один байт (т.е. перевод из HEX в DEC, этих групп цифр)?
Если вы нашли готовое решение вашей задачи, то лучше приводить ссылку.DrMario писал(а):Пересмотрел в интернете примеры с подобной конвертацией, но я очень начинающий и из меня пока программист, как с г...а пуля.
- DrMario
- Лейтенант
- Сообщения: 378
- Зарегистрирован: 07 ноя 2016, 13:11
- Откуда: Камень-на-Оби
- Имя: Евгений
- Контактная информация:
"Правильный" блок преобразования строчных данных
Наверно я не точно объяснил проблему, попробую сделать это подробнее.
В строке после служебной команды 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 и т.д.
Подобный случай описан по этой ссылке. Но у меня нет опыта в программировании и никак не получается код из примера вставить в свой блок пользователя.
В строке после служебной команды 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 дек 2016, 10:23, всего редактировалось 1 раз.
"Правильный" блок преобразования строчных данных
Если я вас правильно понял, то вот вариант реализации, только для проверки сделал вывод обратно в виде строки.
Не стал делать один блок сразу на три байта, а решил, что универсальнее сделать блок для преобразования отдельных пар HEX чисел в байты.
Прилагая пример использования блока и сам блок отдельно.
Добавлено (23.12.2016, 18:35)
---------------------------------------------
Напишете по результатам. Интересно, то сделал или не то.
Не стал делать один блок сразу на три байта, а решил, что универсальнее сделать блок для преобразования отдельных пар HEX чисел в байты.
Прилагая пример использования блока и сам блок отдельно.
Добавлено (23.12.2016, 18:35)
---------------------------------------------
Напишете по результатам. Интересно, то сделал или не то.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
- DrMario
- Лейтенант
- Сообщения: 378
- Зарегистрирован: 07 ноя 2016, 13:11
- Откуда: Камень-на-Оби
- Имя: Евгений
- Контактная информация:
"Правильный" блок преобразования строчных данных
Спасибо!
Извините за долгое молчание, это то что было нужно.
Не без помощи своего товарища сделал парочку блоков. Первый блок Str Hex to Byte, аналогичен Вашему Str to Byte.
Второй блок Str 4xHex to Dec. Описание:
На вход подается строковая переменная в виде 0A1B2C3D, на выходе будет значение 169552957 в десятичном виде (Dec).
Собственно это один и тот же блок но с разным типом выходных переменных. В первом это Byte, во втором Unsigned long.
Извините за долгое молчание, это то что было нужно.
Не без помощи своего товарища сделал парочку блоков. Первый блок Str Hex to Byte, аналогичен Вашему Str to Byte.
Второй блок Str 4xHex to Dec. Описание:
На вход подается строковая переменная в виде 0A1B2C3D, на выходе будет значение 169552957 в десятичном виде (Dec).
Собственно это один и тот же блок но с разным типом выходных переменных. В первом это Byte, во втором Unsigned long.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось DrMario 13 янв 2017, 11:40, всего редактировалось 1 раз.
- ElectroMechaniC
- Сержант
- Сообщения: 230
- Зарегистрирован: 21 сен 2016, 06:50
- Откуда: Донецк
- Имя: Юрий
"Правильный" блок преобразования строчных данных
Спасибо за блок! А если трёх, двух и однобайтовые переменные переводить? Можно с помощью этого блока? И ли он автоматически понимает что подано на вход?





Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 5 гостей