powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Получение данных с весов через rs232
25 сообщений из 96, страница 2 из 4
Получение данных с весов через rs232
    #37458458
*keeper*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
x1ca4064x1ca4064пропущено...

Перевести из BCD формата в двоичный, поставить правильно десятичную точку и знак:

(dat[1]+dat[2]*100+dat[3]*10000)*exp(-(dat[4] and $07)*ln(10))*(1-((dat[4] and $80) shr 6 ))

где dat:array[0..5] of byte - данные из порта. Примерно так - не проверял

Sorry, формула преобразования bcd-bin содержит ошибку, но я уверен, что Вы разберетесь.

Нет, похоже без вашей помощи не обойтись.
Помогите, если не трудно конечно.
...
Рейтинг: 0 / 0
Получение данных с весов через rs232
    #37458507
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
*keeper*x1ca4064пропущено...


Sorry, формула преобразования bcd-bin содержит ошибку, но я уверен, что Вы разберетесь.

Нет, похоже без вашей помощи не обойтись.
Помогите, если не трудно конечно.

Ты для начала хотя бы сделай корректный приём данных от весов.....
А разбор принятого - дело десятое
...
Рейтинг: 0 / 0
Получение данных с весов через rs232
    #37458540
*keeper*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
defecator,

Что значит корректный?
Данные с весов я получаю, даже в том же примере с компонентой.
...
Рейтинг: 0 / 0
Получение данных с весов через rs232
    #37458567
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
*keeper*defecator,

Что значит корректный?
Данные с весов я получаю, даже в том же примере с компонентой.

Корректный - это значит со складыванием в буфер,
контролем возможного переполнения при сбое синхронизации (ну вот не принялся $0D)
и определением того факта, что данные в буфере готовы для дальнейшего анализа.
...
Рейтинг: 0 / 0
Получение данных с весов через rs232
    #37458576
*keeper*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
defecator,

Тогда ответьте на вопрос. Каков должен быть размер буфера, с учетом того что устройство посылает информация размером 6 байт?

Такой же - 6 байт?
И при приеме сначала анализировать первый и последний?
...
Рейтинг: 0 / 0
Получение данных с весов через rs232
    #37458585
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
*keeper*defecator,

Тогда ответьте на вопрос. Каков должен быть размер буфера, с учетом того что устройство посылает информация размером 6 байт?

Такой же - 6 байт?
И при приеме сначала анализировать первый и последний?

6 байт, и сделать буфер кольцевой - как самый простой вариант.
Добавление нового байта в конец буфера выталкивает самый старый.
Приняли $0D - буфер готов для анализа.
...
Рейтинг: 0 / 0
Получение данных с весов через rs232
    #37458638
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecatorДобавление нового байта в конец буфера выталкивает самый старый.

Зачем? Если посылка фиксированной длины, то достаточно сказать ReadFile чтобы читал шесть
байт и проверять, что их пришло действительно шесть. Он вернётся когда примет все шесть
(или истечёт таймаут).
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Получение данных с весов через rs232
    #37458695
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Dimitry SibiryakovdefecatorДобавление нового байта в конец буфера выталкивает самый старый.

Зачем? Если посылка фиксированной длины, то достаточно сказать ReadFile чтобы читал шесть
байт и проверять, что их пришло действительно шесть. Он вернётся когда примет все шесть
(или истечёт таймаут).


Ну это если юзать голый API.

А если юзать AsyncPro или другой компонент, то они, как правило, возвращают по событию байты по мере их поступления из порта.
...
Рейтинг: 0 / 0
Получение данных с весов через rs232
    #37458959
*keeper*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
x1ca4064,

(dat[1]+dat[2]*100+dat[3]*10000)*exp(-(dat[4] and $07)*ln(10))*(1-((dat[4] and $80) shr 6 ))

Повашей формуле данные не верные по тому что они в десятичном формате, а нужно их представить в 16-ном

Как видно на картинке по формуле показания -164,69 , а на приборе -140,45

Если строку 10 69 64 1 162 13 представить в 16-ном виде будет 0A 45 40 01 A2 0D что как раз будет соответствовать действительности - 140,45
...
Рейтинг: 0 / 0
Получение данных с весов через rs232
    #37459007
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
*keeper*x1ca4064,

(dat[1]+dat[2]*100+dat[3]*10000)*exp(-(dat[4] and $07)*ln(10))*(1-((dat[4] and $80) shr 6 ))

Повашей формуле данные не верные по тому

Хм....Похоже на претензию ? )))))
...
Рейтинг: 0 / 0
Получение данных с весов через rs232
    #37459391
*keeper*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
defecator*keeper*x1ca4064,

(dat[1]+dat[2]*100+dat[3]*10000)*exp(-(dat[4] and $07)*ln(10))*(1-((dat[4] and $80) shr 6 ))

Повашей формуле данные не верные по тому

Хм....Похоже на претензию ? )))))

Я Вас умоляю ;) не смешите мои подковы (c) :)

Хочу действительно разобраться (хотя в положительном результате очень сомневаюсь).

Опыта и так мало, а с байтами/битами вообще не доводилось работать (а уж с их математикой вобще напряг).
...
Рейтинг: 0 / 0
Получение данных с весов через rs232
    #37459402
*keeper*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
defecator,

Подскажите.
Если переменной присваивать значение 16-ричное, то какого типа она должна быть?
...
Рейтинг: 0 / 0
Получение данных с весов через rs232
    #37459439
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
*keeper*Если переменной присваивать значение 16-ричное, то какого типа она должна быть?

Строкового. Шестнадцатиричные числа существуют только в строках.

Но на самом деле тебе это не нужно. Описанный в первом же посте "двоично-десятичный код"
означает, что каждые четыре бита (так же именуемые нибблом) содержат одну десятичную цифру.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Получение данных с весов через rs232
    #37459449
Jude
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
*keeper*defecator,

Подскажите.
Если переменной присваивать значение 16-ричное, то какого типа она должна быть?

вам не нужно присваивать 16-ричное значение. если пользуетесь справкой дельфи на символе $ нажмите F1

вы работаете с байтом byte. при присвоении байту значения - он все равно останется байтом.
если у вас доюникодная дельфа, то символ char тот же байт.

не поленитесь почитать про азы - двоичные операции, and, or, Xor, SHR и т.д.
их всего пригоршня - зато потратив три часа вы избежите массы ошибок.

переменные типа integer single кодируются так же байтами.

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

ваш случай проще - парсить не нужно.

и т.к. это ком порт - там нет "мегаскоростей". так что и "супер быстрый" код не нужен. достаточно работающего без ошибок.
...
Рейтинг: 0 / 0
Получение данных с весов через rs232
    #37459474
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
*keeper*[
Опыта и так мало, а с байтами/битами вообще не доводилось работать (а уж с их математикой вобще напряг).

Что-то мне подсказывает, что начать надо с определения, что такое Бит и что такое Байт.....
Потом перейти к операциям И, ИЛИ, сдвиги влево-вправо...
...
Рейтинг: 0 / 0
Получение данных с весов через rs232
    #37459529
*keeper*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
defecator*keeper*[
Опыта и так мало, а с байтами/битами вообще не доводилось работать (а уж с их математикой вобще напряг).

Что-то мне подсказывает, что начать надо с определения, что такое Бит и что такое Байт.....
Потом перейти к операциям И, ИЛИ, сдвиги влево-вправо...

я знаю что такое бит и байт и операции и, или слабо но помню
...
Рейтинг: 0 / 0
Получение данных с весов через rs232
    #37459920
x1ca4064
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
*keeper*Повашей формуле данные не верные по тому что они в десятичном формате, а нужно их представить в 16-ном


С каждым dat[1],dat[2],dat[3] проделайте преобразование:

10*(x shr 4)+(x and $0F) - Может и получится...
...
Рейтинг: 0 / 0
Получение данных с весов через rs232
    #37460003
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
x1ca4064*keeper*Повашей формуле данные не верные по тому что они в десятичном формате, а нужно их представить в 16-ном


С каждым dat[1],dat[2],dat[3] проделайте преобразование:

10*(x shr 4)+(x and $0F) - Может и получится...

Я думаю, что в свете
*keeper*я знаю что такое бит и байт и операции и, или
слабо но помню

твой совет пройдёт впустую )))))
...
Рейтинг: 0 / 0
Получение данных с весов через rs232
    #37460030
Фотография Gator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот никак не пойму, каким образом 0A 45 40 01 A2 0D дешифруется в 140,45 :)
Пусть даже #13#10#45#40#01#A2
А2 особенно смущает...

А если просто, как в школе, "проюстировать"?
Т.е. положить 1г - посмотреть, 2г - посмотреть, 3г - посмотреть, 5г - посмотреть, 10г - посмотреть,
...
Рейтинг: 0 / 0
Получение данных с весов через rs232
    #37460034
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
GatorВот никак не пойму, каким образом 0A 45 40 01 A2 0D дешифруется в 140,45 :)
Пусть даже #13#10#45#40#01#A2
А2 особенно смущает...

А если просто, как в школе, "проюстировать"?
Т.е. положить 1г - посмотреть, 2г - посмотреть, 3г - посмотреть, 5г - посмотреть, 10г - посмотреть,

A2 - это байт с битами статусов.
...
Рейтинг: 0 / 0
Получение данных с весов через rs232
    #37460036
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Типа как тут:


авторНомер бита Содержимое бита
D0 Три младших бита
D1 определяют положение
D2 десятичной точки
D3 Флаг счетного режима
D4 Флаг переполнения
D5 Весы успокоены
D6 Произведено тарирование
D7 Знак числа
...
Рейтинг: 0 / 0
Получение данных с весов через rs232
    #37460040
Фотография Gator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecatorA2 - это байт с битами статусов. И что теперь, тупо его ловить в цикле, не кинув XOFF и не бросив CTS? хе-хе-хе
...
Рейтинг: 0 / 0
Получение данных с весов через rs232
    #37460042
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
GatordefecatorA2 - это байт с битами статусов. И что теперь, тупо его ловить в цикле, не кинув XOFF и не бросив CTS? хе-хе-хе

Зачем ? Ловить $0D - это конец пакета.
...
Рейтинг: 0 / 0
Получение данных с весов через rs232
    #37460052
Фотография Gator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОК. А что такое $0A? Начало?
Мне ближе интерпретация CRLF / LFCR
То-то он в картинке три байта из четырёх показал кракозябрами.
Нет чтобы нормальными пакетам...
...
Рейтинг: 0 / 0
Получение данных с весов через rs232
    #37460264
*keeper*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
x1ca4064x1ca4064пропущено...


Перевести из BCD формата в двоичный, поставить правильно десятичную точку и знак:

(dat[1]+dat[2]*100+dat[3]*10000)*exp(-(dat[4] and $07)*ln(10))*(1-((dat[4] and $80) shr 6 ))

где dat:array[0..5] of byte - данные из порта. Примерно так - не проверял

Sorry, формула преобразования bcd-bin содержит ошибку, но я уверен, что Вы разберетесь.

Видимо ошибка в определении положения десятичной точки.
При переключении на терминале положения "," на экране бред какой-то получается.

Разясните кто-нибудь вот эту часть формулы: exp(-(dat[4] and $07)*ln(10))*(1-((dat[4] and $80) shr 6 ))
...
Рейтинг: 0 / 0
25 сообщений из 96, страница 2 из 4
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Получение данных с весов через rs232
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]