|
|
|
Получение данных с весов через rs232
|
|||
|---|---|---|---|
|
#18+
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 содержит ошибку, но я уверен, что Вы разберетесь. Нет, похоже без вашей помощи не обойтись. Помогите, если не трудно конечно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2011, 10:24 |
|
||
|
Получение данных с весов через rs232
|
|||
|---|---|---|---|
|
#18+
*keeper*x1ca4064пропущено... Sorry, формула преобразования bcd-bin содержит ошибку, но я уверен, что Вы разберетесь. Нет, похоже без вашей помощи не обойтись. Помогите, если не трудно конечно. Ты для начала хотя бы сделай корректный приём данных от весов..... А разбор принятого - дело десятое ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2011, 10:42 |
|
||
|
Получение данных с весов через rs232
|
|||
|---|---|---|---|
|
#18+
defecator, Что значит корректный? Данные с весов я получаю, даже в том же примере с компонентой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2011, 10:55 |
|
||
|
Получение данных с весов через rs232
|
|||
|---|---|---|---|
|
#18+
*keeper*defecator, Что значит корректный? Данные с весов я получаю, даже в том же примере с компонентой. Корректный - это значит со складыванием в буфер, контролем возможного переполнения при сбое синхронизации (ну вот не принялся $0D) и определением того факта, что данные в буфере готовы для дальнейшего анализа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2011, 11:05 |
|
||
|
Получение данных с весов через rs232
|
|||
|---|---|---|---|
|
#18+
defecator, Тогда ответьте на вопрос. Каков должен быть размер буфера, с учетом того что устройство посылает информация размером 6 байт? Такой же - 6 байт? И при приеме сначала анализировать первый и последний? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2011, 11:09 |
|
||
|
Получение данных с весов через rs232
|
|||
|---|---|---|---|
|
#18+
*keeper*defecator, Тогда ответьте на вопрос. Каков должен быть размер буфера, с учетом того что устройство посылает информация размером 6 байт? Такой же - 6 байт? И при приеме сначала анализировать первый и последний? 6 байт, и сделать буфер кольцевой - как самый простой вариант. Добавление нового байта в конец буфера выталкивает самый старый. Приняли $0D - буфер готов для анализа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2011, 11:12 |
|
||
|
Получение данных с весов через rs232
|
|||
|---|---|---|---|
|
#18+
defecatorДобавление нового байта в конец буфера выталкивает самый старый. Зачем? Если посылка фиксированной длины, то достаточно сказать ReadFile чтобы читал шесть байт и проверять, что их пришло действительно шесть. Он вернётся когда примет все шесть (или истечёт таймаут). Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2011, 11:30 |
|
||
|
Получение данных с весов через rs232
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovdefecatorДобавление нового байта в конец буфера выталкивает самый старый. Зачем? Если посылка фиксированной длины, то достаточно сказать ReadFile чтобы читал шесть байт и проверять, что их пришло действительно шесть. Он вернётся когда примет все шесть (или истечёт таймаут). Ну это если юзать голый API. А если юзать AsyncPro или другой компонент, то они, как правило, возвращают по событию байты по мере их поступления из порта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2011, 11:48 |
|
||
|
Получение данных с весов через rs232
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2011, 13:41 |
|
||
|
Получение данных с весов через rs232
|
|||
|---|---|---|---|
|
#18+
*keeper*x1ca4064, (dat[1]+dat[2]*100+dat[3]*10000)*exp(-(dat[4] and $07)*ln(10))*(1-((dat[4] and $80) shr 6 )) Повашей формуле данные не верные по тому Хм....Похоже на претензию ? ))))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2011, 14:06 |
|
||
|
Получение данных с весов через rs232
|
|||
|---|---|---|---|
|
#18+
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) :) Хочу действительно разобраться (хотя в положительном результате очень сомневаюсь). Опыта и так мало, а с байтами/битами вообще не доводилось работать (а уж с их математикой вобще напряг). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2011, 16:04 |
|
||
|
Получение данных с весов через rs232
|
|||
|---|---|---|---|
|
#18+
defecator, Подскажите. Если переменной присваивать значение 16-ричное, то какого типа она должна быть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2011, 16:08 |
|
||
|
Получение данных с весов через rs232
|
|||
|---|---|---|---|
|
#18+
*keeper*Если переменной присваивать значение 16-ричное, то какого типа она должна быть? Строкового. Шестнадцатиричные числа существуют только в строках. Но на самом деле тебе это не нужно. Описанный в первом же посте "двоично-десятичный код" означает, что каждые четыре бита (так же именуемые нибблом) содержат одну десятичную цифру. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2011, 16:20 |
|
||
|
Получение данных с весов через rs232
|
|||
|---|---|---|---|
|
#18+
*keeper*defecator, Подскажите. Если переменной присваивать значение 16-ричное, то какого типа она должна быть? вам не нужно присваивать 16-ричное значение. если пользуетесь справкой дельфи на символе $ нажмите F1 вы работаете с байтом byte. при присвоении байту значения - он все равно останется байтом. если у вас доюникодная дельфа, то символ char тот же байт. не поленитесь почитать про азы - двоичные операции, and, or, Xor, SHR и т.д. их всего пригоршня - зато потратив три часа вы избежите массы ошибок. переменные типа integer single кодируются так же байтами. я использовал вариантный рекорд для работы с "распарсиванием" этих переменных. ваш случай проще - парсить не нужно. и т.к. это ком порт - там нет "мегаскоростей". так что и "супер быстрый" код не нужен. достаточно работающего без ошибок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2011, 16:23 |
|
||
|
Получение данных с весов через rs232
|
|||
|---|---|---|---|
|
#18+
*keeper*[ Опыта и так мало, а с байтами/битами вообще не доводилось работать (а уж с их математикой вобще напряг). Что-то мне подсказывает, что начать надо с определения, что такое Бит и что такое Байт..... Потом перейти к операциям И, ИЛИ, сдвиги влево-вправо... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2011, 16:29 |
|
||
|
Получение данных с весов через rs232
|
|||
|---|---|---|---|
|
#18+
defecator*keeper*[ Опыта и так мало, а с байтами/битами вообще не доводилось работать (а уж с их математикой вобще напряг). Что-то мне подсказывает, что начать надо с определения, что такое Бит и что такое Байт..... Потом перейти к операциям И, ИЛИ, сдвиги влево-вправо... я знаю что такое бит и байт и операции и, или слабо но помню ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2011, 16:44 |
|
||
|
Получение данных с весов через rs232
|
|||
|---|---|---|---|
|
#18+
*keeper*Повашей формуле данные не верные по тому что они в десятичном формате, а нужно их представить в 16-ном С каждым dat[1],dat[2],dat[3] проделайте преобразование: 10*(x shr 4)+(x and $0F) - Может и получится... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2011, 21:17 |
|
||
|
Получение данных с весов через rs232
|
|||
|---|---|---|---|
|
#18+
x1ca4064*keeper*Повашей формуле данные не верные по тому что они в десятичном формате, а нужно их представить в 16-ном С каждым dat[1],dat[2],dat[3] проделайте преобразование: 10*(x shr 4)+(x and $0F) - Может и получится... Я думаю, что в свете *keeper*я знаю что такое бит и байт и операции и, или слабо но помню твой совет пройдёт впустую ))))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2011, 22:32 |
|
||
|
Получение данных с весов через rs232
|
|||
|---|---|---|---|
|
#18+
Вот никак не пойму, каким образом 0A 45 40 01 A2 0D дешифруется в 140,45 :) Пусть даже #13#10#45#40#01#A2 А2 особенно смущает... А если просто, как в школе, "проюстировать"? Т.е. положить 1г - посмотреть, 2г - посмотреть, 3г - посмотреть, 5г - посмотреть, 10г - посмотреть, ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2011, 23:14 |
|
||
|
Получение данных с весов через rs232
|
|||
|---|---|---|---|
|
#18+
GatorВот никак не пойму, каким образом 0A 45 40 01 A2 0D дешифруется в 140,45 :) Пусть даже #13#10#45#40#01#A2 А2 особенно смущает... А если просто, как в школе, "проюстировать"? Т.е. положить 1г - посмотреть, 2г - посмотреть, 3г - посмотреть, 5г - посмотреть, 10г - посмотреть, A2 - это байт с битами статусов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2011, 23:18 |
|
||
|
Получение данных с весов через rs232
|
|||
|---|---|---|---|
|
#18+
Типа как тут: авторНомер бита Содержимое бита D0 Три младших бита D1 определяют положение D2 десятичной точки D3 Флаг счетного режима D4 Флаг переполнения D5 Весы успокоены D6 Произведено тарирование D7 Знак числа ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2011, 23:21 |
|
||
|
Получение данных с весов через rs232
|
|||
|---|---|---|---|
|
#18+
defecatorA2 - это байт с битами статусов. И что теперь, тупо его ловить в цикле, не кинув XOFF и не бросив CTS? хе-хе-хе ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2011, 23:22 |
|
||
|
Получение данных с весов через rs232
|
|||
|---|---|---|---|
|
#18+
GatordefecatorA2 - это байт с битами статусов. И что теперь, тупо его ловить в цикле, не кинув XOFF и не бросив CTS? хе-хе-хе Зачем ? Ловить $0D - это конец пакета. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2011, 23:23 |
|
||
|
Получение данных с весов через rs232
|
|||
|---|---|---|---|
|
#18+
ОК. А что такое $0A? Начало? Мне ближе интерпретация CRLF / LFCR То-то он в картинке три байта из четырёх показал кракозябрами. Нет чтобы нормальными пакетам... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2011, 23:31 |
|
||
|
Получение данных с весов через rs232
|
|||
|---|---|---|---|
|
#18+
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 )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2011, 09:34 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=37459920&tid=2041103]: |
0ms |
get settings: |
5ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
162ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
| others: | 200ms |
| total: | 429ms |

| 0 / 0 |
