Вверх ↑
Этот топик читают: Гость
Ответов: 578
Рейтинг: 14
#1: 2014-05-26 08:24:21 ЛС | профиль | цитата
Добрый день, пытаюсь сделать программку чтобы снимать данные с автомобильных весов, но никогда раньше не приходилось работать с COM портами, поэтому возникло несколько вопросов. Поставил программку сниффер порта и слушаю ей проходящие данные.

1. Демо программа посылает весам запрос вида:

0A .

что это за символ?

2. Приходит ответ:

00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 0D 0A ....

как правильно прочитать и перевести в обычные цифры эти данные? (здесь 1кг)
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#2: 2014-05-26 08:41:31 ЛС | профиль | цитата
GanjaKyp писал(а):
что это за символ?
http://ru.wikipedia.org/wiki/%D0%A3%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D1%8F%D1%8E%D1%89%D0%B8%D0%B5_%D1%81%D0%B8%D0%BC%D0%B2%D0%BE%D0%BB%D1%8B
GanjaKyp писал(а):
как правильно прочитать и перевести в обычные цифры эти данные? (здесь 1кг)
Читать инструкцию к весам.
Или привести табличку ответов, на 0.5, 1, 1.250, 1.5, 2 кГ
или марку весов.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
1
Голосовали:GanjaKyp
Ответов: 578
Рейтинг: 14
#3: 2014-05-26 09:16:10 ЛС | профиль | цитата
Tad писал(а):
Читать инструкцию к весам.

Инструкции к сожалению нет но

это 5кг
05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 0D 0A

это 25кг
05 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 0D 0A

это 30кг
00 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 0D 0A

как перевести эти данные в цифры?

карма: 0

0
Ответов: 8926
Рейтинг: 823
#4: 2014-05-26 09:26:53 ЛС | профиль | цитата
Tad, если бы в инструкции был раздел "Описание программы" Коллега GanjaKyp хочет раколоть демо-версию и узнать какие запросы и ответы идут к микроконтроллеру весов (весы автомобильные, так что величины "..0.5, 1, 1.250, 1.5, 2 кГ.." надо умножить на 1000 )
GanjaKyp, полагаю, что надо записать и потом проанализировать не один запрос, но по несколько десятков на каждую кнопку демо-версии. Вот например команды Ke-USB24 что есть у нас в HiAsm-е ke-usb24a_commandsguide.rar что-то подобное и надо составить по факту.
карма: 19

0
файлы: 1ke-usb24a_commandsguide.rar [168.6KB] [266]
Ответов: 578
Рейтинг: 14
#5: 2014-05-26 09:31:56 ЛС | профиль | цитата
Леонид, демка только показывает вес, в принципе больше мне ничего не нужно
карма: 0

0
Ответов: 8926
Рейтинг: 823
#6: 2014-05-26 09:40:33 ЛС | профиль | цитата
Да, ещё: наверное при включении программы она, наверное, должна устанавливать контакт с весами, посылая команды и получая ответы, их тоже надо записать (А может не скупиться и купить полную версию )
карма: 19

0
Ответов: 578
Рейтинг: 14
#7: 2014-05-26 09:55:45 ЛС | профиль | цитата
при включении отсылается 0A, эта же команда запрашивает текущий вес

при отправке моей программой 0A, снифер ловит ответ от весов (см.выше), осталось только прочитать эти данные
------------ Дoбавленo в 09.55:
00 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0D 0A - я правильно понимаю что читать нужно по 20 байт?
карма: 0

0
Ответов: 8926
Рейтинг: 823
#8: 2014-05-26 10:10:17 ЛС | профиль | цитата
GanjaKyp, 0D -- 13, 0А -- 10 Читать и состыковывать надо всё, затем получившуюся строку разбивать по этим символам, а если читать по 20 байт, то можно получить в одном чтении половину ответа.
Как перевести ответ в цифры -- по представленным данным каждый байт одна десятичная цифра, но представлено недостаточно,
Леонид писал(а):
..по несколько десятков на каждую кнопку..

карма: 19

0
Ответов: 578
Рейтинг: 14
#9: 2014-05-26 10:30:31 ЛС | профиль | цитата
в сниффере ответ всегда одинаковой длинны, что значит "..по несколько десятков на каждую кнопку.."?
------------ Дoбавленo в 10.19:
при чтении по 20 байт сниффер показывает столько же цифр, сколько и при работе офф. демки
------------ Дoбавленo в 10.30:
Леонид писал(а):
по представленным данным каждый байт одна десятичная цифра

получается так, только что взвешивали камаз 15045 кг.

05 04 00 05 01 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 0D 0A ....

карма: 0

0
Ответов: 163
Рейтинг: 33
#10: 2014-05-26 12:37:13 ЛС | профиль | цитата
Вроде все сходится кроме замеров 1 кг. Надо сделать несколько замеров менее 5 кг. Ну а из остальных приведенных данных у меня вырисовывается такой алгоритм:

  • читаем 20 байт
  • проверяем есть ли в конце 0D 0A, если нет - что-то пошло не так и надо повторить запрос
  • если есть, начинаем перебирать все символы справа налево начиная с 18-го.
  • сравниваем каждый с '00'. Если не равен, то с этого места начинаем собирать строку через StrCat, предварительно обрезая первый '0'.
В результате получаем вес в виде строки. При необходимости конвертируем в целое.
карма: 3

0
Ответов: 578
Рейтинг: 14
#11: 2014-05-26 12:47:51 ЛС | профиль | цитата
у весов точность +- 5кг я не могу разобраться как получить эту строку в программе (например 05 04 00 05 01 00 00 00 00 00 00 00 00 00 00 00 00 00 0D 0A)
карма: 0

0
Ответов: 8926
Рейтинг: 823
#12: 2014-05-26 12:51:49 ЛС | профиль | цитата
GanjaKyp,
code_33663.txt
Выбираем скорость, затем номер порта, порт включается. Посылаем запрос (10), через таймер читаем ответ и заменяем символы на циферки.
Леонид писал(а):
..Читать и состыковывать надо всё, затем получившуюся строку разбивать..
Этого нет пока.
Попробуйте для начала.
карма: 19

1
файлы: 1code_33663.txt [3.5KB] [402]
Голосовали:GanjaKyp
Ответов: 163
Рейтинг: 33
#13: 2014-05-26 12:57:03 ЛС | профиль | цитата
Похоже пора попросить схему в студию.
------------ Дoбавленo в 12.57:
это я к GanjaKyp
карма: 3

0
Ответов: 578
Рейтинг: 14
#14: 2014-05-26 13:52:18 ЛС | профиль | цитата
Леонид, работает) только неправильно как то, а я логику твоей схемы понять не могу
------------ Дoбавленo в 13.52:
00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0D 0A получается 010000000000000000 должно быть 10
05 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0D 0A -> 510000000000000000 -> 15
05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0D 0A -> 500000000000000000 -> 5

карма: 0

0
Ответов: 1343
Рейтинг: 31
#15: 2014-05-26 14:00:42 ЛС | профиль | цитата
незнаю в тему ли я напишу, НО... убираем пробелы, дизассемблируем байтики и получаем ваш вес ввиде STR

по иному можно сделать переворачивание байт, и просто перевод HEX в INT каждого байта помоему и после просто складируем эти STR как строки

помоему этот пример ПРОСТО НЕЛЬЗЯ не понять...

это 5кг
05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 0D 0A

это 25кг
05 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 0D 0A

это 30кг
00 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 0D 0A

------------ Дoбавленo в 14.00:
GanjaKyp писал(а):
00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0D 0A получается 010000000000000000 должно быть 10


так блин ... учи для начала HEX потом поймёшь что A=10
карма: 2

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)