![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Com-порт [D3, WinXP]
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]В отладчике смотрю...