Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > ОС и железо
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 07.07.2009, 02:31
Аватар для mihos
mihos mihos вне форума
Прохожий
 
Регистрация: 26.06.2009
Сообщения: 6
Репутация: 10
По умолчанию COM порт. Нужна помощь

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

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

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

Заранее спасибо!
__________________
Работа: http://www.efrlab.ru
Дом: http://www.mihos.ru
Ответить с цитированием
  #2  
Старый 07.07.2009, 15:08
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

А ты скажи что там должно быть.
Ответить с цитированием
  #3  
Старый 07.07.2009, 19:06
Аватар для mihos
mihos mihos вне форума
Прохожий
 
Регистрация: 26.06.2009
Сообщения: 6
Репутация: 10
По умолчанию

Должен быть вес (вроде как в тоннах).
что то типа "31.20"
__________________
Работа: http://www.efrlab.ru
Дом: http://www.mihos.ru
Ответить с цитированием
  #4  
Старый 07.07.2009, 22:10
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Неужели к описанию весов не шло описание, какие сигналы "играют" на контактах COM?
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #5  
Старый 08.07.2009, 02:14
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну, начало понятно.
Пришла буква T, потом пробел (#$20 - это пробел). А вот дальше чушь какая-то. Ты уверен в том, что написал правильную комбинацию?
Ответить с цитированием
  #6  
Старый 08.07.2009, 08:45
Аватар для mihos
mihos mihos вне форума
Прохожий
 
Регистрация: 26.06.2009
Сообщения: 6
Репутация: 10
По умолчанию

Я с COM портами не сталкивался никогда... В Delphi я больше по базам данных.
Вот единственный документ к данному девайсу
http://www.baltves.ru/index.php?module=articles&id=94
__________________
Работа: http://www.efrlab.ru
Дом: http://www.mihos.ru
Ответить с цитированием
  #7  
Старый 10.07.2009, 15:24
Аватар для mihos
mihos mihos вне форума
Прохожий
 
Регистрация: 26.06.2009
Сообщения: 6
Репутация: 10
По умолчанию

Код:
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;
Admin: Пользуемся тегами!!!
__________________
Работа: http://www.efrlab.ru
Дом: http://www.mihos.ru

Последний раз редактировалось Admin, 11.07.2009 в 10:54.
Ответить с цитированием
  #8  
Старый 10.07.2009, 23:41
Аватар для mak-karpov
mak-karpov mak-karpov вне форума
Активный
 
Регистрация: 18.09.2008
Сообщения: 235
Версия Delphi: 2010 и 7
Репутация: 1242
По умолчанию

Пусть a, b, c - наши три байта.
тогда результат будет :
Код:
var a,b,c : byte;
    i     : Longint;
Код:
i := (a shl 16) + (b shl 8) + c;
или
Код:
i := a*$FFFF+b*$FF+c;
Как больше нравится
__________________
Кнопка "+" - весы в правом верхнем углу сообщения...
Ответить с цитированием
  #9  
Старый 11.07.2009, 09:05
Аватар для mihos
mihos mihos вне форума
Прохожий
 
Регистрация: 26.06.2009
Сообщения: 6
Репутация: 10
По умолчанию

Спасибо огромное!!!
__________________
Работа: http://www.efrlab.ru
Дом: http://www.mihos.ru
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 14:00.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter