Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.09.13;
Скачать: [xml.tar.bz2];

Вниз

Com-порт   Найти похожие ветки 

 
mihos   (2009-07-07 10:13) [0]

Подскажите, может кто знает...
Имеются автомобильные весы подключенные через COM-порт. Пытаюсь снять с них текущий вес. Скачал компоненту cport. Выдает примерно вот такие строчки (неточно конечно, по памяти):

"T"#$10#2#4#e

Вопрос: Как мне их в человеческий вид привести?

Заранее спасибо!


 
Сергей М. ©   (2009-07-07 10:17) [1]

Что такое "человеческий вид" ?
Что ты вообще ожидал увидеть ?


 
Anatoly Podgoretsky ©   (2009-07-07 12:17) [2]

> mihos  (07.07.2009 10:13:00)  [0]

А что каждый символ значит ты знаешь? В соответствии с документацией или методом научного втыка?


 
tesseract ©   (2009-07-07 21:04) [3]

Масса-К напоминает протокол. Первое - режим на весах - остальное режим индикации с байтами младшим вперёд.  Есть в инструкции к весам.


 
Германн ©   (2009-07-08 01:04) [4]

Инструкцию к весам и нужно читать. Либо обращаться к производителю весов.


 
KilkennyCat ©   (2009-07-08 02:13) [5]

либо брать гирьки разного весу и вперед, к тайнам племени майя.


 
mihos ©   (2009-07-08 08:45) [6]

Я с COM портами не сталкивался никогда... В Delphi я больше по базам данных.

Единственная инструкция к весам
http://www.baltves.ru/index.php?module=articles&id=94

А производитель отмазался, типа, мы не знаем. А тот кто знает уволился...

>либо брать гирьки разного весу и вперед, к тайнам племени майя.
Гирьки которые я смогу на эти весы поднести, погоды не сделают, а племя Майя написали единственный документ к данному девайсу
http://www.baltves.ru/index.php?module=articles&id=94


 
Anatoly Podgoretsky ©   (2009-07-08 09:05) [7]

Хорошая подробная документация.


 
brother ©   (2009-07-08 09:09) [8]

> Хорошая подробная документация.

согласен на 100%, ты видимо с делфи не оч. дружишь) тут один совет: читаем умные книги и учимся на примерах...


 
mihos ©   (2009-07-08 11:18) [9]

Да, хорошая подробная документация.

Ещё раз вопрос:
Весы возвращают строчку примерно такого содержания
"T"#$10#2#4#e
В документации сказано следующее:
"При выполнении всех условий ведущий посылает ответ, состоящий из 8 байт:
1. сетевой адрес ведомого устройства;
2. три байта значения веса (первый байт – младший), целое число со знаком, отрицательные значения представлены в дополнительном коде, т.е. –1 = 0FFFFFFh.
3. байт служебной информации b1;
4. байт служебной информации b2;
5. два байта контрольной суммы CRC16."

Вопрос следующий: Как мне выдернуть отсюда вес?


 
Сергей М. ©   (2009-07-08 11:57) [10]


> Как мне выдернуть отсюда вес?


Никак.

Ибо в док-ции нет ни слова про то что ответ возвращается в строковом виде. А у тебя "строчка". А в док-ции ни слова про "строчку".

Ошибка у тебя в программе, в 17-й строке)


 
Anatoly Podgoretsky ©   (2009-07-08 12:18) [11]

Еще один Zheksonz


 
Сергей М. ©   (2009-07-08 12:19) [12]


> Anatoly Podgoretsky ©   (08.07.09 12:18) [11]


Интересно, марафонец или спринтер ?


 
Anatoly Podgoretsky ©   (2009-07-08 12:20) [13]


> Сергей М. ©   (08.07.09 11:57) [10]

У него не строчка, он в отладчике смотрит.


 
Сергей М. ©   (2009-07-08 12:22) [14]


> Anatoly Podgoretsky ©   (08.07.09 12:20) [13]
>
>


Он в отладчике смотрит содержимое переменной строкового типа.


 
Anatoly Podgoretsky ©   (2009-07-08 12:25) [15]

> Сергей М.  (08.07.2009 12:22:14)  [14]

Ну это нормально, не важно какого типа переменная, важно уметь использовать и смотреть, понимая что делаешь.


 
Dennis I. Komarov ©   (2009-07-08 12:35) [16]


> "T"#$10#2#4#e

А это как?


 
Сергей М. ©   (2009-07-08 12:43) [17]


> А это как?


Это, наверно, у отладчика амнезия)


 
Dennis I. Komarov ©   (2009-07-08 12:45) [18]


> Сергей М. ©   (08.07.09 12:19) [12]
>
> Интересно, марафонец или спринтер ?

Троеборец...


 
Anatoly Podgoretsky ©   (2009-07-08 12:45) [19]

> Сергей М.  (08.07.2009 12:43:17)  [17]

Шизофрения!


 
brother ©   (2009-07-08 13:10) [20]

> [9] mihos ©   (08.07.09 11:18)
> Да, хорошая подробная документация.
>
> Ещё раз вопрос:
> Весы возвращают строчку примерно такого содержания
> "T"#$10#2#4#e
> В документации сказано следующее:
> "При выполнении всех условий ведущий посылает ответ, состоящий
> из 8 байт:
> 1. сетевой адрес ведомого устройства;
> 2. три байта значения веса (первый байт – младший), целое
> число со знаком, отрицательные значения представлены в дополнительном
> коде, т.е. –1 = 0FFFFFFh.
> 3. байт служебной информации b1;
> 4. байт служебной информации b2;
> 5. два байта контрольной суммы CRC16."
>
> Вопрос следующий: Как мне выдернуть отсюда вес?

1. читай не srting
2. проблемма потом байты вытащить?

> Шизофрения!

чет последнее время как-то сильно.


 
mihos ©   (2009-07-08 13:21) [21]

В отладчике смотрю...


 
brother ©   (2009-07-08 13:23) [22]

> В отладчике смотрю...

это понятно... эх, теперь снова: где код получения строки в [9]?


 
Zheksonz   (2009-07-08 13:28) [23]

Удалено модератором


 
brother ©   (2009-07-08 13:34) [24]

Удалено модератором


 
Сергей М. ©   (2009-07-08 13:34) [25]

Удалено модератором


 
Dennis I. Komarov ©   (2009-07-08 13:36) [26]

Удалено модератором


 
Zheksonz   (2009-07-08 13:42) [27]

Удалено модератором


 
brother ©   (2009-07-08 13:45) [28]

Удалено модератором


 
Сергей М. ©   (2009-07-08 13:45) [29]

Удалено модератором
Примечание: Не превращай в филиал своих мегаветок


 
Zheksonz   (2009-07-08 13:49) [30]

Удалено модератором


 
Dennis I. Komarov ©   (2009-07-08 13:51) [31]

Удалено модератором


 
mihos ©   (2009-07-09 19:34) [32]



procedure TForm1.Button1Click(Sender: TObject);
var
   hCom, Errors, Bytes: Cardinal;
   DCB:TDCB;
   TheStruct:TCOMSTAT;
   buffer:string;
   buff4: array [0..3] of Byte;
   buff8: array [0..7] of Byte;
   pch : pchar;
   s : string;
begin

   hCom:=CreateFile("COM1",GENERIC_READ or GENERIC_WRITE,0,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
   if hCom=INVALID_HANDLE_VALUE then begin
       //не удалось открыть
       ShowMessage("фиг");
       exit;
   end;

   SetupComm(hCom,1600,1600);

   GetCommState(hCom,DCB);

   with DCB do begin //настроить нужным образом
       BaudRate:=CBR_9600;
       ByteSize:=8;
       Parity:=NOPARITY;
       StopBits:=ONESTOPBIT;
   end;

   if not SetCommState(hCom,DCB) then begin
       //Порт не настроен. yнельзя работать
       ShowMessage("Порт не настроен");

       CloseHandle(hCom);
       exit;
   end;

   buff4[0]:=$0000;
   buff4[1]:=$0055;
   buff4[2]:=$0017;
   buff4[3]:=$005F;

  // buff:="000H 055H 017H 05FH";
   WriteFile(
       hCom,
       buff4,
       Length(buff4),
       Bytes,
       nil
       );

   ClearCommError(hCom,Errors,@TheStruct);

   if TheStruct.cbInQue>0 then begin //что-то пришло

       //SetLength(buffer,TheStruct.cbInQue);

       ReadFile(
           hCom,
           buff8,
           TheStruct.cbInQue,
           Bytes,
           nil
           );
      {
       Тут, если в отладчике посмотреть, buff8 имеет значение      (0,100,0,0,2,0,184,44)
       Это (я)уверен, что 1 тонна. Как в инструкции сказано, 2,3,4 байт - это вес. Как мне её в строку или integer вытащить?          
       }
 
end;
   CloseHandle(hCom);

end;



 
Сергей М. ©   (2009-07-09 20:06) [33]

Это что за откровение было ?


 
mihos ©   (2009-07-10 15:22) [34]

Это я пытаюсь в весов вес получить...


 
Сергей М. ©   (2009-07-10 17:16) [35]


> в инструкции сказано, 2,3,4 байт - это вес


Ну все правильно !

С учетом этого

Три младших бита b1.0, b1.1 и b1.2 байта b1 образуют целое число Dec. Значение Dec от 0 до 6 показы-вают количество десятичных знаков после запятой в показаниях индикатора, т.е. целое значение веса необ-ходимо разделить на 10 в степени Dec

как раз та самая тонна и получается:

100 / (10 в степени 2) = 1 тонна

Берешь со 2-го по 4-й байт и, рассматривая их как Integer-значение, делишь на Byte-значение, полученное AND-наложением маски со значением 3 на значение, взятое из байта b1.
Результат деления выводишь в строковом виде с помощью ф-ции FormatFloat()


 
Сергей М. ©   (2009-07-10 17:23) [36]


> маски со значением 3


Нагло вру)

Маска д.б. со значением 7.

Перед делением, как гласит инструкция, следует проверить, что (b1 and 7) < 7  (отсутсвует признак переполнения разрядной сетки), после чего расчитать делитель 10 ^ (b1 and 7)


 
Inovet ©   (2009-07-10 17:51) [37]

> [36] Сергей М. ©   (10.07.09 17:23)

"Папа, это ты с кем сейчас разговаривал?":)


 
Сергей М. ©   (2009-07-10 20:59) [38]

Да уж ..
С учетом того, что инструкция действительно хорошая и подробная, топикстарт выглядит действительно диким)


 
mihos ©   (2009-07-14 11:53) [39]

Извиняюсь, что развел такую тему.
Но больше всего извиняюсь за то, что не поблагодарил.
В запаре, извините Сергей М.


 
Inovet ©   (2009-07-14 17:45) [40]

> [39] mihos ©   (14.07.09 11:53)
> Извиняюсь, что развел такую тему.

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



Страницы: 1 2 вся ветка

Форум: "Начинающим";
Текущий архив: 2009.09.13;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.55 MB
Время: 0.005 c
15-1247603405
Юрий
2009-07-15 00:30
2009.09.13
С днем рождения ! 15 июля 2009 среда


4-1215512670
AlexKung
2008-07-08 14:24
2009.09.13
MAPI: висяк при обрыве соединения


15-1247691352
Германн
2009-07-16 00:55
2009.09.13
Сколько максимально может потреблять телевизор ЭЛТ


15-1247725073
TUser
2009-07-16 10:17
2009.09.13
Уж не знаю, в каком мы веке живем,


15-1247270707
KilkennyCat
2009-07-11 04:05
2009.09.13
Возможно, не будет работать до понедельника pda.delphimaster.net





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский