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