Текущий архив: 2009.09.13;
Скачать: CL | DM;
Вниз
Com-порт Найти похожие ветки
← →
mihos (2009-07-07 10:13) [0]Подскажите, может кто знает...
Имеются автомобильные весы подключенные через COM-порт. Пытаюсь снять с них текущий вес. Скачал компоненту cport. Выдает примерно вот такие строчки (неточно конечно, по памяти):
"T"#$10#2#4#e
Вопрос: Как мне их в человеческий вид привести?
Заранее спасибо!
← →
Сергей М. © (2009-07-07 10:17) [1]Что такое "человеческий вид" ?
Что ты вообще ожидал увидеть ?
← →
Anatoly Podgoretsky © (2009-07-07 12:17) [2]> mihos (07.07.2009 10:13:00) [0]
А что каждый символ значит ты знаешь? В соответствии с документацией или методом научного втыка?
← →
tesseract © (2009-07-07 21:04) [3]Масса-К напоминает протокол. Первое - режим на весах - остальное режим индикации с байтами младшим вперёд. Есть в инструкции к весам.
← →
Германн © (2009-07-08 01:04) [4]Инструкцию к весам и нужно читать. Либо обращаться к производителю весов.
← →
KilkennyCat © (2009-07-08 02:13) [5]либо брать гирьки разного весу и вперед, к тайнам племени майя.
← →
mihos © (2009-07-08 08:45) [6]Я с COM портами не сталкивался никогда... В Delphi я больше по базам данных.
Единственная инструкция к весам
http://www.baltves.ru/index.php?module=articles&id=94
А производитель отмазался, типа, мы не знаем. А тот кто знает уволился...
>либо брать гирьки разного весу и вперед, к тайнам племени майя.
Гирьки которые я смогу на эти весы поднести, погоды не сделают, а племя Майя написали единственный документ к данному девайсу
http://www.baltves.ru/index.php?module=articles&id=94
← →
Anatoly Podgoretsky © (2009-07-08 09:05) [7]Хорошая подробная документация.
← →
brother © (2009-07-08 09:09) [8]> Хорошая подробная документация.
согласен на 100%, ты видимо с делфи не оч. дружишь) тут один совет: читаем умные книги и учимся на примерах...
← →
mihos © (2009-07-08 11:18) [9]Да, хорошая подробная документация.
Ещё раз вопрос:
Весы возвращают строчку примерно такого содержания
"T"#$10#2#4#e
В документации сказано следующее:
"При выполнении всех условий ведущий посылает ответ, состоящий из 8 байт:
1. сетевой адрес ведомого устройства;
2. три байта значения веса (первый байт – младший), целое число со знаком, отрицательные значения представлены в дополнительном коде, т.е. –1 = 0FFFFFFh.
3. байт служебной информации b1;
4. байт служебной информации b2;
5. два байта контрольной суммы CRC16."
Вопрос следующий: Как мне выдернуть отсюда вес?
← →
Сергей М. © (2009-07-08 11:57) [10]
> Как мне выдернуть отсюда вес?
Никак.
Ибо в док-ции нет ни слова про то что ответ возвращается в строковом виде. А у тебя "строчка". А в док-ции ни слова про "строчку".
Ошибка у тебя в программе, в 17-й строке)
← →
Anatoly Podgoretsky © (2009-07-08 12:18) [11]Еще один Zheksonz
← →
Сергей М. © (2009-07-08 12:19) [12]
> Anatoly Podgoretsky © (08.07.09 12:18) [11]
Интересно, марафонец или спринтер ?
← →
Anatoly Podgoretsky © (2009-07-08 12:20) [13]
> Сергей М. © (08.07.09 11:57) [10]
У него не строчка, он в отладчике смотрит.
← →
Сергей М. © (2009-07-08 12:22) [14]
> Anatoly Podgoretsky © (08.07.09 12:20) [13]
>
>
Он в отладчике смотрит содержимое переменной строкового типа.
← →
Anatoly Podgoretsky © (2009-07-08 12:25) [15]> Сергей М. (08.07.2009 12:22:14) [14]
Ну это нормально, не важно какого типа переменная, важно уметь использовать и смотреть, понимая что делаешь.
← →
Dennis I. Komarov © (2009-07-08 12:35) [16]
> "T"#$10#2#4#e
А это как?
← →
Сергей М. © (2009-07-08 12:43) [17]
> А это как?
Это, наверно, у отладчика амнезия)
← →
Dennis I. Komarov © (2009-07-08 12:45) [18]
> Сергей М. © (08.07.09 12:19) [12]
>
> Интересно, марафонец или спринтер ?
Троеборец...
← →
Anatoly Podgoretsky © (2009-07-08 12:45) [19]> Сергей М. (08.07.2009 12:43:17) [17]
Шизофрения!
← →
brother © (2009-07-08 13:10) [20]> [9] mihos © (08.07.09 11:18)
> Да, хорошая подробная документация.
>
> Ещё раз вопрос:
> Весы возвращают строчку примерно такого содержания
> "T"#$10#2#4#e
> В документации сказано следующее:
> "При выполнении всех условий ведущий посылает ответ, состоящий
> из 8 байт:
> 1. сетевой адрес ведомого устройства;
> 2. три байта значения веса (первый байт – младший), целое
> число со знаком, отрицательные значения представлены в дополнительном
> коде, т.е. –1 = 0FFFFFFh.
> 3. байт служебной информации b1;
> 4. байт служебной информации b2;
> 5. два байта контрольной суммы CRC16."
>
> Вопрос следующий: Как мне выдернуть отсюда вес?
1. читай не srting
2. проблемма потом байты вытащить?
> Шизофрения!
чет последнее время как-то сильно.
← →
mihos © (2009-07-08 13:21) [21]В отладчике смотрю...
← →
brother © (2009-07-08 13:23) [22]> В отладчике смотрю...
это понятно... эх, теперь снова: где код получения строки в [9]?
← →
Zheksonz (2009-07-08 13:28) [23]Удалено модератором
← →
brother © (2009-07-08 13:34) [24]Удалено модератором
← →
Сергей М. © (2009-07-08 13:34) [25]Удалено модератором
← →
Dennis I. Komarov © (2009-07-08 13:36) [26]Удалено модератором
← →
Zheksonz (2009-07-08 13:42) [27]Удалено модератором
← →
brother © (2009-07-08 13:45) [28]Удалено модератором
← →
Сергей М. © (2009-07-08 13:45) [29]Удалено модератором
Примечание: Не превращай в филиал своих мегаветок
← →
Zheksonz (2009-07-08 13:49) [30]Удалено модератором
← →
Dennis I. Komarov © (2009-07-08 13:51) [31]Удалено модератором
← →
mihos © (2009-07-09 19:34) [32]
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;
← →
Сергей М. © (2009-07-09 20:06) [33]Это что за откровение было ?
← →
mihos © (2009-07-10 15:22) [34]Это я пытаюсь в весов вес получить...
← →
Сергей М. © (2009-07-10 17:16) [35]
> в инструкции сказано, 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()
← →
Сергей М. © (2009-07-10 17:23) [36]
> маски со значением 3
Нагло вру)
Маска д.б. со значением 7.
Перед делением, как гласит инструкция, следует проверить, что (b1 and 7) < 7 (отсутсвует признак переполнения разрядной сетки), после чего расчитать делитель 10 ^ (b1 and 7)
← →
Inovet © (2009-07-10 17:51) [37]> [36] Сергей М. © (10.07.09 17:23)
"Папа, это ты с кем сейчас разговаривал?":)
← →
Сергей М. © (2009-07-10 20:59) [38]Да уж ..
С учетом того, что инструкция действительно хорошая и подробная, топикстарт выглядит действительно диким)
← →
mihos © (2009-07-14 11:53) [39]Извиняюсь, что развел такую тему.
Но больше всего извиняюсь за то, что не поблагодарил.
В запаре, извините Сергей М.
← →
Inovet © (2009-07-14 17:45) [40]> [39] mihos © (14.07.09 11:53)
> Извиняюсь, что развел такую тему.
Ну получилось, и слава Богу. Просто было заявлено об отсутствии документации, а ведь всё оказалось и несложно, и из порта правильные данные приходили.
Страницы: 1 2 вся ветка
Текущий архив: 2009.09.13;
Скачать: CL | DM;
Память: 0.54 MB
Время: 0.004 c