|
|
  |
ComDrv32, Кто работал с модулем для Delphi ComDrv32 помогите |
|
|
|
Jan 22 2006, 09:04
|

Частый гость
 
Группа: Свой
Сообщений: 97
Регистрация: 19-11-05
Из: dront78@jabber.snc.ru
Пользователь №: 11 092

|
Цитата ComportDriver1.ReadData(pkDir; size) Параметры перечисляются через "," а не ";"
--------------------
Сколько волка не корми - слон все равно больше.
|
|
|
|
|
Jan 23 2006, 20:20
|
Местный
  
Группа: Свой
Сообщений: 316
Регистрация: 22-10-05
Пользователь №: 9 976

|
Пример функции, читающей Size байт из порта: Код function ReadBytes(const Value: Pointer; Size: cardinal): boolean; begin Result := (ComPort.ReadData(PChar(Value), Size) = Size); if not(Result) then begin MessageDlg(sDeviceNoResponseError, mtError, [mbOk], 0); end; end; Ее использование: Код var GroupName: array[0..IP_GROUP_NAME_LENGTH-1] of byte; ... if ReadBytes(@GroupName, IP_GROUP_NAME_LENGTH) then ... Буфером никогда не пользовался, но думаю, что нужно просто сделать обработчик события OnReceivePacket. Скорее всего обработчик будет аналогичен обработчику события OnReceiveData. Пример вот: Код procedure TfrmMain.ComPortReceiveData(Sender: TObject; DataPtr: Pointer; DataSize: Cardinal); var Str: string; begin Str := StringOfChar(' ', DataSize); Move(DataPtr^, PChar(Str)^, DataSize); end; Теперь Str содержит строку длиной DataSize байт.
|
|
|
|
|
Apr 20 2007, 23:11
|
Группа: Новичок
Сообщений: 12
Регистрация: 20-04-07
Пользователь №: 27 212

|
А кто-нибудь знает как с помощью этого компонента можно передать в СОМ-порт не символ, а число в двоичной форме? Т. е. если у меня в edit'e записано 11001111, то могу ли я передать это число ввиде одного байта? Или передавать только как 8 байт (т. е. каждый бит как символ)?
|
|
|
|
|
Apr 23 2007, 14:34
|
Частый гость
 
Группа: Свой
Сообщений: 188
Регистрация: 28-09-06
Из: Minsk
Пользователь №: 20 762

|
Цитата(beginer @ Apr 21 2007, 00:11)  А кто-нибудь знает как с помощью этого компонента можно передать в СОМ-порт не символ, а число в двоичной форме? Т. е. если у меня в edit'e записано 11001111, то могу ли я передать это число ввиде одного байта? Или передавать только как 8 байт (т. е. каждый бит как символ)? Преобразуйте bin к hex(char) и передавайте 1 байт
|
|
|
|
|
Apr 24 2007, 00:53
|
Группа: Новичок
Сообщений: 12
Регистрация: 20-04-07
Пользователь №: 27 212

|
Kolia А если мне надо передать число 201? Это же 1 байт. А если я его преобразую в hex, то передавать придётся 2 байта (символ 'С' и символ '9'). Так что это немного не то (у меня число байт в пакете установлено строго и я не могу передать пакет с большим или меньшим числом байт).
Всем Хотя я уже вроде понял как через WinAPI-функции передавать числа в СОМ-порт, но всё-таки, может у кого есть исходник программы с этим компонентом, где данные в порт передаются непосредственно ввиде чисел (а не ввиде символов). Был бы вам весьма признателен.
|
|
|
|
|
Apr 24 2007, 10:19
|
Частый гость
 
Группа: Свой
Сообщений: 188
Регистрация: 28-09-06
Из: Minsk
Пользователь №: 20 762

|
Цитата(beginer @ Apr 24 2007, 01:53)  Хотя я уже вроде понял как через WinAPI-функции передавать числа в СОМ-порт, но всё-таки, может у кого есть исходник программы с этим компонентом, где данные в порт передаются непосредственно ввиде чисел (а не ввиде символов). Все в этом мире относительно. Для кого-то числа являются символами ('a'==97), а для кого-то наоборот символы - числами (97=='a'). В hex виде 'a'==0x61 в bin 'a'==0b11000001. (*Учебник по информатике начальных классов)
|
|
|
|
|
Apr 24 2007, 16:03
|
Группа: Новичок
Сообщений: 12
Регистрация: 20-04-07
Пользователь №: 27 212

|
Я понял о чём Вы говорите. Можно было бы передавать числа ввиде символов, коды которых равны этим числам. Была такая идея. Отказался. Нерационально, имхо. К тому же возникла проблема с передачей символа, код которого равен нулю. P. S. chr(0) не возвращает никакого символа.
Сообщение отредактировал beginer - Apr 24 2007, 16:04
|
|
|
|
|
Apr 25 2007, 09:30
|
Частый гость
 
Группа: Свой
Сообщений: 188
Регистрация: 28-09-06
Из: Minsk
Пользователь №: 20 762

|
Цитата(beginer @ Apr 24 2007, 17:03)  Я понял о чём Вы говорите. Сомневаюсь. В библиотеке ComDrv32 есть функция function TCommPortDriver.SendDataEx( DataPtr: pchar; DataSize, Timeout: DWORD ): DWORD; и function TCommPortDriver.SendChar( Value: char ): boolean; - думаю то что нужно.
|
|
|
|
|
Apr 26 2007, 04:04
|
Группа: Новичок
Сообщений: 12
Регистрация: 20-04-07
Пользователь №: 27 212

|
function TCommPortDriver.SendDataEx( DataPtr: pchar; DataSize, Timeout: DWORD ): DWORD; Да, похоже это действительно какраз то, что мне надо. Только не могли бы Вы написать (если я Вам ещё ненадоел своими распросами) что именно нужно указывать в качестве параметра DataPtr: pchar? Ну а за пример использования данной функции (с передачей в буфер именно числа), моей благодарности не будет конца.
|
|
|
|
|
Apr 26 2007, 14:26
|
Частый гость
 
Группа: Свой
Сообщений: 188
Регистрация: 28-09-06
Из: Minsk
Пользователь №: 20 762

|
Цитата(beginer @ Apr 26 2007, 05:04)  что именно нужно указывать в качестве параметра DataPtr: pchar? DataPtr: pchar - указатель на массив char. // Пример Код union{ char mas[10]; int par[5]; }Send; TCommPortDriver ComDr;
Send.par[0]=5; //..... ComDr.SendDataEx(Send.mas,10,1); Смотрите исходники.
|
|
|
|
|
Apr 27 2007, 00:16
|
Группа: Новичок
Сообщений: 12
Регистрация: 20-04-07
Пользователь №: 27 212

|
О, спасибо! Попозже будем разбираться капитально с этим компонентом. А сейчас надо попробовать API-функции "добить"...
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|