реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> ComDrv32, Кто работал с модулем для Delphi ComDrv32 помогите
impuls-v
сообщение Jan 20 2006, 07:17
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 130
Регистрация: 15-01-06
Пользователь №: 13 190



Кто работал с модулем для Delphi ComDrv32 (ComportDriver) v2.16 или ниже откликнитесь очень нужна помошь по раьоте с ним.
Go to the top of the page
 
+Quote Post
Dr.NoA
сообщение Jan 20 2006, 09:24
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 316
Регистрация: 22-10-05
Пользователь №: 9 976



Не знаю какая у меня версия компонента, но написано, что для Delphi 4.0. Если годится, то могу чем-нибудь помочь.
Go to the top of the page
 
+Quote Post
impuls-v
сообщение Jan 22 2006, 01:46
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 130
Регистрация: 15-01-06
Пользователь №: 13 190



У тебя версия 2.1 это то что мне нужно. Сам файл должен называтся CPDrv.pas, если да то это точно то.
Если не жалко пожалуйста вышли пару примеров на impuls-v(гав-гав)yandex.ru, буду очень благодарен.
Пока интересуют следующие вопросы:
1) функция ReadData
пишу так
var
pkDir: pchar;
size: Dword; или cardinal
begin
........
ComportDriver1.ReadData(pkDir; size);
дает ошибку Not enough acual parametrs.
Объясни что делаю не так и как надо.

2)Как сделать так чтобы программа запускалась по заполнению буфера InBuf, там есть метод FlushBuffers, но он дает опустошение буфера, если я правильно понял.
Go to the top of the page
 
+Quote Post
dronT78
сообщение Jan 22 2006, 09:04
Сообщение #4


Частый гость
**

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



Цитата
ComportDriver1.ReadData(pkDir; size)

Параметры перечисляются через "," а не ";"


--------------------
Сколько волка не корми - слон все равно больше.
Go to the top of the page
 
+Quote Post
Dr.NoA
сообщение Jan 23 2006, 20:20
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 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 байт.
Go to the top of the page
 
+Quote Post
impuls-v
сообщение Jan 24 2006, 06:53
Сообщение #6


Частый гость
**

Группа: Свой
Сообщений: 130
Регистрация: 15-01-06
Пользователь №: 13 190



спасибо, дальше сам буду разбераться.
Go to the top of the page
 
+Quote Post
beginer
сообщение Apr 20 2007, 23:11
Сообщение #7





Группа: Новичок
Сообщений: 12
Регистрация: 20-04-07
Пользователь №: 27 212



А кто-нибудь знает как с помощью этого компонента можно передать в СОМ-порт не символ, а число в двоичной форме? Т. е. если у меня в edit'e записано 11001111, то могу ли я передать это число ввиде одного байта? Или передавать только как 8 байт (т. е. каждый бит как символ)?
Go to the top of the page
 
+Quote Post
Kolia
сообщение Apr 23 2007, 14:34
Сообщение #8


Частый гость
**

Группа: Свой
Сообщений: 188
Регистрация: 28-09-06
Из: Minsk
Пользователь №: 20 762



Цитата(beginer @ Apr 21 2007, 00:11) *
А кто-нибудь знает как с помощью этого компонента можно передать в СОМ-порт не символ, а число в двоичной форме? Т. е. если у меня в edit'e записано 11001111, то могу ли я передать это число ввиде одного байта? Или передавать только как 8 байт (т. е. каждый бит как символ)?

Преобразуйте bin к hex(char) и передавайте 1 байт blink.gif
Go to the top of the page
 
+Quote Post
beginer
сообщение Apr 24 2007, 00:53
Сообщение #9





Группа: Новичок
Сообщений: 12
Регистрация: 20-04-07
Пользователь №: 27 212



Kolia
А если мне надо передать число 201? Это же 1 байт. А если я его преобразую в hex, то передавать придётся 2 байта (символ 'С' и символ '9'). Так что это немного не то (у меня число байт в пакете установлено строго и я не могу передать пакет с большим или меньшим числом байт).

Всем
Хотя я уже вроде понял как через WinAPI-функции передавать числа в СОМ-порт, но всё-таки, может у кого есть исходник программы с этим компонентом, где данные в порт передаются непосредственно ввиде чисел (а не ввиде символов). Был бы вам весьма признателен.
Go to the top of the page
 
+Quote Post
Kolia
сообщение Apr 24 2007, 10:19
Сообщение #10


Частый гость
**

Группа: Свой
Сообщений: 188
Регистрация: 28-09-06
Из: Minsk
Пользователь №: 20 762



Цитата(beginer @ Apr 24 2007, 01:53) *
Хотя я уже вроде понял как через WinAPI-функции передавать числа в СОМ-порт, но всё-таки, может у кого есть исходник программы с этим компонентом, где данные в порт передаются непосредственно ввиде чисел (а не ввиде символов).


Все в этом мире относительно. Для кого-то числа являются символами ('a'==97), а для кого-то наоборот символы - числами (97=='a'). В hex виде 'a'==0x61 в bin 'a'==0b11000001. (*Учебник по информатике начальных классов)
Go to the top of the page
 
+Quote Post
beginer
сообщение Apr 24 2007, 16:03
Сообщение #11





Группа: Новичок
Сообщений: 12
Регистрация: 20-04-07
Пользователь №: 27 212



Я понял о чём Вы говорите. Можно было бы передавать числа ввиде символов, коды которых равны этим числам. Была такая идея. Отказался. Нерационально, имхо. К тому же возникла проблема с передачей символа, код которого равен нулю.
P. S. chr(0) не возвращает никакого символа.

Сообщение отредактировал beginer - Apr 24 2007, 16:04
Go to the top of the page
 
+Quote Post
Kolia
сообщение Apr 25 2007, 09:30
Сообщение #12


Частый гость
**

Группа: Свой
Сообщений: 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; - думаю то что нужно.
Go to the top of the page
 
+Quote Post
beginer
сообщение Apr 26 2007, 04:04
Сообщение #13





Группа: Новичок
Сообщений: 12
Регистрация: 20-04-07
Пользователь №: 27 212



function TCommPortDriver.SendDataEx( DataPtr: pchar; DataSize, Timeout: DWORD ): DWORD;
Да, похоже это действительно какраз то, что мне надо. Только не могли бы Вы написать (если я Вам ещё ненадоел своими распросами) что именно нужно указывать в качестве параметра DataPtr: pchar?
Ну а за пример использования данной функции (с передачей в буфер именно числа), моей благодарности не будет конца.
Go to the top of the page
 
+Quote Post
Kolia
сообщение Apr 26 2007, 14:26
Сообщение #14


Частый гость
**

Группа: Свой
Сообщений: 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);


Смотрите исходники.
Go to the top of the page
 
+Quote Post
beginer
сообщение Apr 27 2007, 00:16
Сообщение #15





Группа: Новичок
Сообщений: 12
Регистрация: 20-04-07
Пользователь №: 27 212



О, спасибо! Попозже будем разбираться капитально с этим компонентом. А сейчас надо попробовать API-функции "добить"...
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 02:06
Рейтинг@Mail.ru


Страница сгенерированна за 0.01459 секунд с 7
ELECTRONIX ©2004-2016