Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

COM+HEX [D6, WinXP]


Phantomouse ©   (2004-12-11 10:12:00) 

Приветствую Вас, мастера!

На днях столкнулся с такой проблемой:
Пишу программу, которая должна будет обмениваться информацией с электронными весами по специальному протоколу, описанпие которого прислали производители этих самых весов. Но команды в нем все должны передаваться в двоичной системе.

Кто-нибудь может мне объяснить, что означают записи
HEX-77
HEX-01
HEX-00
HEX-10
HEX-02
HEX-0A
Если 01,00,10 еще похожи на двоичное число, то 77, 02 и 0A - точно нет :-(.

И вроде бы HEX - признак шестнадцатиричной системы? Или нет?

И еще вопрос. Как передать эти самые HEX-xx в COM-порт и, соответственно, получить их. Я использую компонент TCommPortDriver, но методов посылки там несколько:
CommPortDriver1.SendData(DataPtr:Pointer,DataSize:Cardinal):Cardinal
CommPortDriver1.SendDataEx(DataPtr:PChar,DataSize:Cardinal,Timeout:Cardinal):Cardinal
CommPortDriver1.SendByte(Value:Byte):Boolean
CommPortDriver1.SendChar(Value:Char):Boolean
CommPortDriver1.SendString(S:String):Boolean
CommPortDriver1.SendZString(S:PChar):Boolean

Какой (и если знаете как) использовать?

Кусочек описания протокола можно взять по адресу:
http://www.antey.com.ru/protocol.zip

Может быть кто-нибудь подскажет доки по этому вопросу.


Phantomouse   (2004-12-11 10:38:00) [1]

Благодарю.


Digitman   (2004-12-11 10:33:00) [2]


> Кто-нибудь может мне объяснить, что означают записи


эти записи означают, что числовые значения в них для удобства визуального восприятия представлены в 16-ричной системе счисления

const
SomeCommandSequence: array[0..5] of Byte = ($77, $01, $00, $10, $02, $0A);

1.
SomeResult := CommPortDriver1.SendData(@SomeCommandSequence, SizeOf(SomeCommandSequence));

2.
SomeResult := CommPortDriver1.SendDataEx(@SomeCommandSequence, SizeOf(SomeCommandSequence), SomeTimeout);

3.
for i := 0 to SizeOfSizeOf(SomeCommandSequence) - 1 do
SomeResult := CommPortDriver1.SendByte(SomeCommandSequence[i]);

4.
for i := 0 to SizeOfSizeOf(SomeCommandSequence) - 1 do
SomeResult := CommPortDriver1.SendChar(Char(SomeCommandSequence[i]));


TUser   (2004-12-11 10:28:00) [3]


> И вроде бы HEX - признак шестнадцатиричной системы? Или
> нет?

Да. Они записали тебе цифры в шестнадцатиричном виде. Но в компе они все равно - двоичные.

> Я использую компонент TCommPortDriver, но методов посылки
> там несколько:

Надо читать справку по этому компоненту, раз ты его используешь.


Наверх

Титульная страница Поиск, карта сайта Написать письмо