Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Com-порт [D3, WinXP]


Страницы:   1 2

mihos ©   (2009-07-07 10:13:00) 

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

'T'#$10#2#4#e

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

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


Inovet   (2009-07-14 17:45:00) [1]

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

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


mihos   (2009-07-14 11:53:00) [2]

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


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

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


Inovet   (2009-07-10 17:51:00) [4]

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

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


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


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


Нагло вру)

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

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


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


> в инструкции сказано, 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()


mihos   (2009-07-10 15:22:00) [7]

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


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

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


mihos   (2009-07-09 19:34:00) [9]



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;


Dennis I. Komarov   (2009-07-08 13:51:00) [10]

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


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

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


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

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


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

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


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

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


Dennis I. Komarov   (2009-07-08 13:36:00) [15]

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


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

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


brother   (2009-07-08 13:34:00) [17]

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


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

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


brother   (2009-07-08 13:23:00) [19]

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

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


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

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


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо