|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
COM порт. Нужна помощь
Подскажите, может кто знает...
Имеются автомобильные весы подключенные через COM-порт. Пытаюсь снять с них текущий вес. Скачал компоненту cport. Выдает примерно вот такие строчки (неточно конечно, по памяти): 'T'#$10#2#4#e Вопрос: Как мне их в человеческий вид привести? Заранее спасибо! Работа: http://www.efrlab.ru Дом: http://www.mihos.ru |
#2
|
|||
|
|||
А ты скажи что там должно быть.
|
#3
|
||||
|
||||
Должен быть вес (вроде как в тоннах).
что то типа "31.20" Работа: http://www.efrlab.ru Дом: http://www.mihos.ru |
#4
|
||||
|
||||
Неужели к описанию весов не шло описание, какие сигналы "играют" на контактах COM?
Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#5
|
|||
|
|||
Ну, начало понятно.
Пришла буква T, потом пробел (#$20 - это пробел). А вот дальше чушь какая-то. Ты уверен в том, что написал правильную комбинацию? |
#6
|
||||
|
||||
Я с COM портами не сталкивался никогда... В Delphi я больше по базам данных.
Вот единственный документ к данному девайсу http://www.baltves.ru/index.php?module=articles&id=94 Работа: http://www.efrlab.ru Дом: http://www.mihos.ru |
#7
|
||||
|
||||
Код:
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; Работа: http://www.efrlab.ru Дом: http://www.mihos.ru Последний раз редактировалось Admin, 11.07.2009 в 10:54. |
#8
|
||||
|
||||
Пусть 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
|
||||
|
||||
Спасибо огромное!!!
Работа: http://www.efrlab.ru Дом: http://www.mihos.ru |