САЙТ

Оставьте заявку

наш менеджер свяжется с вами в течении 30 минут

Отправка формы…

На сервере произошла ошибка.

Форма получена.

dbmm.org.ua

TComPort - Delphi компонент для коммуникации с использованием последовательных портов rs232 и rs485

Unit

CPort

 

Описание

Используя TComPort легко связаться с внешними устройствами по протоколу RS232 и RS485,такими как модемы, сканеры штрих-кода, PBX, и так далее. TCustomComPort имеет несколько свойств для управления последовательными портами, а также методы, для чтения и записи в порт и события для контроля порта. Запись и чтение данных могут выполняться как синхронно так и асинхронно.

 

Использование

Оглавление раздела

Проверка существующих портов

Асинхронных и синхронные операции

Запись в порт

Чтение из порта

Прерывание асинхронной операции

Сохранение и загрузка установок

Функция очистки буфера

Обнаружение сигналов и состояний порта

Изменение выходных сигналов управления потоком

Получение сведений об ошибках

Ожидание событий

Проверка существующих портов

Перед запуском функций которые будут использовать порт, полезно проверить существует ли он в данный момент.

Если порт подключен через USB возможно что при пере подключении он появится под другим именем. Для перечисления портов подключеных к компьютеру служит процедура EnumComPorts которая заполняет TStrings их перечнем.

 

Delphi Example

 

EnumComPorts(ComboBox1.Items);

// do some stuff

if ComboBox1.ItemIndex -1 then

   ComPort1.Port := ComboBox1.Items[ComboBox1.ItemIndex];

 

Асинхронных и синхронные операции

Курсы программирования Киев

Чтение и запись операций в последовательный порт может быть выполнена в двух режимах, асинхронном или синхронном. В синхронном режиме, метод, который выполняет операции с портом не возвращается до завершения или прерыва операции. В асинхронном режиме, метод возвращает немедленно и не ждет пока операция будет завершена. После вызова асинхронной операции, результаты метода могут быть еще не определены, поэтому приложение должно вызвать метод WaitForAsync, чтобы убедиться, что операция завершена. Между вызовом асинхронной операции и ожиданием, приложение может выполнять любые другие задачи, которые не зависят от результата асинхронной  операции.

 

Каждую асинхронную операцию нужно подготовить для выполнения. Для этого необходимо вызвать метод InitAsync с параметром типа PAsync.

Использование этого параметра,в методе InitAsnyc, позволяет TCustomComPort определить, какие операции выполняются. После завершения операции, метод вызов DoneAsync освобождает ресурсы.

 

Example (asynchronous operation)

 

1

2

3

4

5

6

7

8

9

10

11

12

13

var

Operation1: PAsync;

 

begin

InitAsync(Operation1);

try

ComPort1.WriteStrAsync('Hello', Operation1);

// do some stuff here

ComPort1.WaitForAsync(Operation1);

finally

DoneAsync(Operation1);

end;

end;

 

 

Запись в порт

 

Существуют четыре метода которыми модно записать данные в порт:

 

 

Write Пишет, не типизированные переменные, в выходной буфер.

WriteAsync Пишет, не типизированные переменные, в выходной буфер в асинхронном режиме.

 

WriteStr Записывает строку в выходной буфер.

WriteStrAsync Записывает строку в выходной буфер в асинхронном режиме

 

Приложение также должно правильно установить тайм-ауты. См. класс TComTimeouts для более подробного описания.

 

Example

 

1

2

3

4

5

6

7

8

9

10

var

Str: String;

 

begin

Str := 'Hello';

ComPort1.WriteStr(Str); // string type variable

ComPort1.Write(Str[1], Length(Str)); // no defined type

 

end;

 

 

 

Чтение из порта

 

Чтение из входного буфера может быть выполнена двумя способами. Обычно приложение вызывает один из методов чтения внутри события OnRxChar которое срабатывает при поступлении данных в входной буфер. Если метод Read вызывается в событии OnRxChar, таймаут чтения должен быть установлен на не ждать, то есть, читать метод проверяет входной буфер и возвращает немедленно, так как количество байт в буфере уже известно. Метод Read может быть вызван и вне OnRxChar, но в этом случае необходимо правильно настроить таймауты См. TComTimeouts для более подробной информации.

 

Если компонент связан с другим компонентом, что который требует от него входящие данные, например TComDataPacket или TCustomComTerminal, OnRxChar событие не вызывается, однако, компонент вызывается событие OnRxBuf . приложение не может прочитать данные из входного буфера внутри события OnRxBuf, поскольку они уже прочитаны. В этом случае данные размещаются компонентом автоматически в параметр Buffer события OnRxBuf.

События OnRxChar или OnRxBuf , можно проверить с свойством TriggersOnRxChar.

 

Method Description

 

Read Чтение из буфера ввода, не типизированной переменной.

ReadAsync Чтение из буфера ввода, не типизированной переменной в асинхронном режиме.

Курсы программирования

ReadStr Чтение строки избуфера ввода.

ReadStrAsync Чтение строки избуфера ввода в асинхронном режиме

 

Example (inside OnRxChar)

 

 

1

2

3

4

5

6

7

8

9

procedure TForm1.ComPort1RxChar(Sender: TObject; Count: Integer);

var

Str: String;

begin

ComPort1.ReadStr(Str, Count);

// do something with Str variable

end;

 

Example (outside OnRxChar)

 

 

1

2

3

4

5

6

7

8

9

10

var

 

Str: String;

 

begin

// set timeouts here or at design time

ComPort1.ReadStr(Str, NumberOfBytes);

// do something with Str variable

end;

 

 

Example (inside OnRxBuf)

 

 

1

2

3

4

5

6

7

procedure TForm1.ComPort1RxBuf(Sender: TObject; const Buffer; Count: Integer);

begin

// application does not have to read data from input buffer

// data is already in buffer parameter

HandleData(Buffer, Count); // handle data

 

end;п»ї

 

 

Прерывание асинхронной операции

 

Асинхронные операции могут быть легко прерваны.Если операция прервана, WaitForAsync метод вызывает исключение EComPort с WinCode набор свойств для ERROR_OPERATION_ABORTED.

 

 

Example

 

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

var

Operation1: PAsync;

 

begin

InitAsync(Operation1);

try

ComPort1.WriteStrAsync('Hello', Operation1);

 

// some stuff

if { some condition } then

ComPort1.AbortAllAsync;

// some stuff

ComPort1.WaitForAsync(Operation1);

finally

DoneAsync(Operation1);

end;

end;

Изменение свойств во время выполнения

 

Все TCustomComPort свойства, кроме SyncMethod могут быть изменены во время выполнения в то время как приложение, подключено к последовательному порту. Изменения вступают в силу немедленно. Если свойство порта меняется во время подключения, последовательный порт закрывается и вновь открывается. Если свойство изменяется между BeginUpdate и EndUpdate методами, изменения не будут применяться до тех пор покаEndUpdate не будет вызван. Если вам необходимо изменить более одного свойства сразу, разместите их между BeginUpdate и EndUpdate методами.

 

Example

 

 

1

2

3

4

5

6

7

8

9

10

11

12

13

begin

ComPort1.Open;

// do some stuff

ComPort1.FlowControl.ControlDtr := dtrEnable; // changes are applied

// do some stuff

 

BeginUpdate; // prevent changes from being applied

ComPort1.Parity.Bits := prOdd;

ComPort1.FlowControl.XonXoffIn := True;

EndUpdate; // apply changes

// do some stuff

ComPort1.Close;

end;

Сохранение и загрузка установок

 

Приложение может легко сохранять и загружать настройки последовательного порта, используя методы StoreSettings и LoadSettings. Настройки могут быть сохранены в файл конфигурации или реестра. Свойство StoredProps определяет, какие свойства должны быть сохранены.

 

Example (Registry)

 

 

1

2

3

4

5

6

7

begin

// store settings to registry

ComPort1.StoreSettings(stRegistry, '\HKEY_LOCAL_MACHINE\Software\ComPortTest');

// load settings

ComPort1.LoadSettings(stRegistry, '\HKEY_LOCAL_MACHINE\Software\ComPortTest');

 

end;

 

Example (Configuration file)

 

 

1

2

3

4

5

6

7

begin

// store settings to configuration file

ComPort1.StoreSettings(stIniFile, 'c:\ComPortTest.ini');

// load settings

ComPort1.LoadSettings(stIniFile, 'c:\ComPortTest.ini');

end;

Функция очистки буфера

 

Приложение может очистить входной и/или выходной буфер с помощью метода ClearBuffer . Убедитесь, что нет асинхронной операции которая выполняется при вызове ClearBuffer, это может привести к неожиданным проблемам.

 

Example

 

1

2

3

4

5

6

begin

// do some stuff

if { some condition} then

ComPort1.ClearBuffer(True, False);  // clear input buffer

// do some stuff

end;

 

 

Обнаружение сигналов и состояний порта

 

Изменение сигналов (CTS, DSR, RLSD) могут быть обнаружены с помощью OnXChange события. Индикатор звонка может также быть обнаружены с помощьюсобытия OnRing . Приложение может проверить состояние сигналов в любое время методом Signals.

 

Вызвав метод StateFlags , приложение может определить, в каком состоянии находитсяпередача.

 

Example

 

 

1

2

3

4

5

6

7

8

9

10

11

procedure TForm1.ComPort1CTSChange(Sender: TObject; OnOff: Boolean);

 

begin

if OnOff then

PrintMessage('CTS high')

else

if fCtlHold in ComPort1.StateFlags then  // if transmission is waiting

PrintMessage('CTS low, transmission waiting')

else

PrintMessage('CTS low');

end;

 

 

Изменение выходных сигналов управления потоком

 

Управлять потоком сигналов, таких как РТС и DTR можно вручную, если они не установлены в rtsHandshake и dtrHandshake. Используйте SetRTS и / или SetDTR методы для установки сигналов низкого или высокого состояния. То же самое можно сделать с помощью FlowControl свойства во время сессии, но это намного быстрее, если приложение будет использовать Setx методы.

 

Example

 

 

1

2

3

4

5

6

begin

ComPort1.SetRTS(False); // lower RTS signal

// do some stuff

ComPort1.SetRTS(True); // set RTS to high

 

end;

 

 

Получение сведений об ошибках

 

Когда на последовательном порту происходит ошибка, вызывается событие OnError. Проверьте параметр Error , чтобы получить информацию о ошибках, которые произошли на последовательном порту. Если приложение не использует OnError , можно проверить последнюю ошибку на порт, используя метод LastErrors . LastErrors возвращает набор флагов ошибок, которые указывают тип ошибки и очищает буфер ошибки. Поэтому, если приложение вызывает LastErrors снова, он возвращает пустой результирующий набор, если новая ошибка не возникла между двумя вызовами.

 

Приложение не должно вызывать LastErrorsвнутри OnError события, так как он уже был вызван в внутри TCustomComPort.

 

Example

 

 

1

2

3

4

5

procedure TForm1.ComPortError(Sender: TObject; Errors: TComErrors);

begin

if ceRxParity in Errors then

ShowMessage('Paity error occured');

end;

 

 

Ожидание событий

 

Когдасвойство Events не пустое, специальный поток создается для мониторинга событий порта , когда приложение его открывает. Это возможно только при использовании TComPort компонента в приложение , которое создает цикл обработки сообщений. Большинство приложений имеют цикл обработки сообщений (GUI, NT службы). Однако, если вы хотите использовать TComPort компонента в консольном приложение, вы должны очистить свойство Events перед вызовом метода Open. Чтобы наблюдать за событиями в консольном приложение, вы должны использовать метод WaitForEvent

 

 

Example

 

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

var

ComPort: TComPort;

Events: TComEvents;

 

begin

ComPort := TComPort.Create(nil);

try

ComPort.Events := [];  // do not create monitoring thread

ComPort.Open;  // open port

Events := [evCTS, evDSR, evRLSD];  // define events to wait for

ComPort.WaitForEvents(Events, nil, WaitInfinite);  // wait until at least one event happens

if evCTS in Events then

 

WriteLn('CTS Changed');  // CTS signal changed state

ComPort.Close;  // close port

finally

ComPort.Free;

end;

end;

 

 

Comments:

 

 Коментарии

Комментарии

12

 

0 #19 Аноним 31.08.2015 08:05

Спасибо.

Цитировать

 

 

+2 #18 alert 06.11.2014 11:49

Очень глюченый компонент. Если отрубить устрогйство вов время передачи программа просто зависнет. И вообще у компонента проблема с проверками отвалилось устройство, отключился порт. Эксепшены толком не работают. Вообщем беда печаль. Стары компонент 97 и то более надежный.

Цитировать

 

 

0 #17 igor 17.09.2014 10:27

Проблема при установке компонента(( ошибка [DCC Fatal Error] DsgnCPortDXE.dpk(30): E2202 Required package 'vcl' not found нет вообще файлов *.dcp . Не знаю нужны они вообще или я что то не правильно делаю?

Цитировать

 

 

0 #16 Богдан 13.08.2014 11:47

Цитирую igor:

Цитирую Богдан:

Цитирую igor:

где скачать этот компонент?

 

http://sourceforge.net/projects/comport/

 

 

А для ХЕ2 есть такой компонент, а то я пытаюсь его установить и у меня такая ошибка [DCC Error] CPort.pas(1467): E2010

 

Incompatible types: 'AnsiChar' and 'Char'

в такой строке

 

CB.EvtChar := Char(FEventChar );

 

хотя может я что то не так делаю, так как я новичек в програмирование . Хотя до этого компоненты уже устанавливал, вроде нормально получалось.

 

 

 

CB.EvtChar := AnsiChar(FEvent Char );

Цитировать

 

 

0 #15 igor 13.08.2014 11:24

Цитирую Богдан:

Цитирую igor:

где скачать этот компонент?

 

http://sourceforge.net/projects/comport/

 

 

А для ХЕ2 есть такой компонент, а то я пытаюсь его установить и у меня такая ошибка [DCC Error] CPort.pas(1467): E2010

 

Incompatible types: 'AnsiChar' and 'Char'

в такой строке

 

CB.EvtChar := Char(FEventChar );

 

хотя может я что то не так делаю, так как я новичек в програмирование . Хотя до этого компоненты уже устанавливал, вроде нормально получалось.

Цитировать

 

 

0 #14 Богдан 13.08.2014 09:50

Цитирую igor:

где скачать этот компонент?

 

http://sourceforge.net/projects/comport/

Цитировать

 

 

0 #13 igor 13.08.2014 09:47

где скачать этот компонент?

Цитировать

 

 

0 #12 Богдан 17.03.2014 08:49

Цитирую originalzed:

Здравствуйте. Такой вопрос : мне надо получить список доступных на Пк ком портов (к одному из них подключено устройство,кото рое отвечает при посылке определенной команды) и подключиться к тому из них,на который будет приходить ответ от устройства. Т.е. надо при запуске проги подключиться к тому порту,на котором мое устройство.Как лучше всего это сделать? Большое спасибо

 

 

Для получения портов можно использовать

EnumComPorts. После, можно отправить пакет на каждый: ComPort.Write(ABuffer[0 ],Length(ABuffe r));

Цитировать

 

 

0 #11 originalzed 16.03.2014 21:43

Здравствуйте. Такой вопрос : мне надо получить список доступных на Пк ком портов (к одному из них подключено устройство,кото рое отвечает при посылке определенной команды) и подключиться к тому из них,на который будет приходить ответ от устройства. Т.е. надо при запуске проги подключиться к тому порту,на котором мое устройство.Как лучше всего это сделать? Большое спасибо

Цитировать

 

 

0 #10 Богдан 26.02.2014 09:43

Цитирую Евгений:

Цитирую Богдан:

Думаю оптимальным решением будет: указать в начале пакета его длину и подчитывать, до тех пор пока не наберется

 

К вопросу об интервале между пакетами. Проблема в том, что склеивает "близко стоящие" пакеты. При этом пакеты могут быть маленькие и за 1-н вызов ComPortRxChar

Он может слепить воедино несколько пакетов. И сидеть их высчитывать, разбивать и потом по отдельности обрабатывать не очень хочется. Когда можно ,по идее, задать интервал между пакетами в компоненте. Только вопрос как?

 

Что вы понимаете под интервалом? С ком портом работа осуществляется как с файлом. Данные поступают непредсказуемо. Может быть так: конец первого и начало второго придут одновременно.

Цитировать

 

 

О пакетах

 

Когда приложение подключается к каму-то последовательному устройство, например регистратору данных, которое постоянно передает данные на ПК, данные, обычно отправляются в виде пакетов. Пакет представляет собой строку символов, как правило, постоянного размера, с некоторыми определенными символами начала и / или конца. Приложение может разбирать входящие данные внутри обработчика событий OnRxChar, однако гораздо проще использовать TComDataPacket , который делает процесс разбора автоматически.

 

Один TCustomComPort может иметь более одного TComDataPacket компонента связанного с ним, так что приложение может легко получать пакеты разных размеров и форм.

 

Когда пакет сформирован срабатывает событие OnPacket при пакетной передаче строки в качестве параметра. Любые данные, которые удаляются в процессе формирования пакета проходит через события OnDiscard.

 

Если TComDataPacket компонент связан с компонентом TCustomComPort, OnRxChar не происходит, так что приложение должно использовать OnRxBuf обработчика событий, если он также нуждается в необработанных входных данных.

 

 

Условия начала и конца пакета

 

Приложение настраивает пакет, установив условия начала и конца. Это достигается путем установки StartString, StopString и Size свойств компонента TComDataPacket.

 

Если StartString свойство не пустое, пакет начинается, когда StartString строка прибыла во входной буфер. Если StartString пустая, пакет начинается сразу же после любого символа поступившего в буфер.

 

Условие завершения определяется StopString и Size  свойствами . Если размер равен 0, условие size игнорируется. Если size больше, чем 0, пакет закончится, когда размер пакета достигнет размера символов. Если StopString не пусто, пакет завершается , когда StopString приходит в буфер. Если Size  больше 0 и StopString не пусто, пакет закончился, когда размер пакета достигнет размера символов или StopString строка поступит в буфер. Если Size  0 и StopString равно 0, то пакет не определен и OnPacket имеет тот же эффект, как обработчик события OnRxBuf.

 

 

Example

 

Некоторые устройства PBX посылают данные на ПК в пакетах, начиная с STX (start-of-text) символов и заканчивая ETX (конец текста) символами. Перед открытием последовательного порта, приложение должно настроить запуск и остановку следующим образом:

 

1

2

3

4

5

6

7

begin

// set start and stop condition for packet

ComDataPacket1.StartString := #2;

ComDataPacket1.StopString := #3;

// now open the port

ComPort1.Open;

end;

 

 

 

 

Note

 

ComDataPacket1 должен быть связан с компонентом ComPort1.

 

Пользовательские пакеты

 

Некоторые пакеты имеют специфический формат, иногда и приложения не могут использовать стандартные условия начала и окончания пакета. Для формирования пользовательских пакетов, существуют OnCustomStart и OnCustomStop события . При использовании OnCustomStart , StartString и StopString игнорируются, они определены внутри обработчиков событий.

Размер и условия остановки игнорируются и определены в обработчик события OnCustomStop.

 

Пример

 

Данные из последовательных устройств передается на ПК в следующем формате: #packet_size #packet_data

где packet_size является размер пакета, включая заголовок и packet_data это исходные данные.

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

 

var

CurrentPacketSize: Integer;

 

procedure ComDataPacket1CustomStart(Sender: TObject; const Str: string; var Pos: Integer);

var

P1, P2: Integer;

begin

Pos := 0; // no start position yet

P1 := System.Pos('#', Str);

 

if P1 = 0 then

Exit; // no start charachter found

P2 := System.Pos('#', Copy(Str, P1 + 1, Length(Str) – P1)); // second # charachter

if P2 = 0 then

Exit;  // no second start charachter found

P2 := P2 + P1;

Pos := P1; // start position of packet defined at first # charachter

try

// determine packet size

CurrentPacketSize := StrToInt(Copy(Str, P1 + 1, P2 – P1 - 1));

 

except

CurrentPacketSize := P2 – P1 + 1; // packet size is corrupted, cut only #…# part

end;

end;

 

procedure ComDataPacket1CustomStop(Sender: TObject; const Str: string; var Pos: Integer);

begin

if CurrentPacketSize <= Length(Str) then

Pos := CurrentPacketSize; // set stop position

end;п»ї

 

 

 

 

 

Comments:

 

 Коментарии

Комментарии

12

 

0 #19 Аноним 31.08.2015 08:05

Спасибо.

Цитировать

 

 

+2 #18 alert 06.11.2014 11:49

Очень глюченый компонент. Если отрубить устрогйство вов время передачи программа просто зависнет. И вообще у компонента проблема с проверками отвалилось устройство, отключился порт. Эксепшены толком не работают. Вообщем беда печаль. Стары компонент 97 и то более надежный.

Цитировать

 

 

0 #17 igor 17.09.2014 10:27

Проблема при установке компонента(( ошибка [DCC Fatal Error] DsgnCPortDXE.dpk(30): E2202 Required package 'vcl' not found нет вообще файлов *.dcp . Не знаю нужны они вообще или я что то не правильно делаю?

Цитировать

 

 

0 #16 Богдан 13.08.2014 11:47

Цитирую igor:

Цитирую Богдан:

Цитирую igor:

где скачать этот компонент?

 

http://sourceforge.net/projects/comport/

 

 

А для ХЕ2 есть такой компонент, а то я пытаюсь его установить и у меня такая ошибка [DCC Error] CPort.pas(1467): E2010

 

Incompatible types: 'AnsiChar' and 'Char'

в такой строке

 

CB.EvtChar := Char(FEventChar );

 

хотя может я что то не так делаю, так как я новичек в програмирование . Хотя до этого компоненты уже устанавливал, вроде нормально получалось.

 

 

 

CB.EvtChar := AnsiChar(FEvent Char );

Цитировать

 

 

0 #15 igor 13.08.2014 11:24

Цитирую Богдан:

Цитирую igor:

где скачать этот компонент?

 

http://sourceforge.net/projects/comport/

 

 

А для ХЕ2 есть такой компонент, а то я пытаюсь его установить и у меня такая ошибка [DCC Error] CPort.pas(1467): E2010

 

Incompatible types: 'AnsiChar' and 'Char'

в такой строке

 

CB.EvtChar := Char(FEventChar );

 

хотя может я что то не так делаю, так как я новичек в програмирование . Хотя до этого компоненты уже устанавливал, вроде нормально получалось.

Цитировать

 

 

0 #14 Богдан 13.08.2014 09:50

Цитирую igor:

где скачать этот компонент?

 

http://sourceforge.net/projects/comport/

Цитировать

 

 

0 #13 igor 13.08.2014 09:47

где скачать этот компонент?

Цитировать

 

 

0 #12 Богдан 17.03.2014 08:49

Цитирую originalzed:

Здравствуйте. Такой вопрос : мне надо получить список доступных на Пк ком портов (к одному из них подключено устройство,кото рое отвечает при посылке определенной команды) и подключиться к тому из них,на который будет приходить ответ от устройства. Т.е. надо при запуске проги подключиться к тому порту,на котором мое устройство.Как лучше всего это сделать? Большое спасибо

 

 

Для получения портов можно использовать

EnumComPorts. После, можно отправить пакет на каждый: ComPort.Write(ABuffer[0 ],Length(ABuffe r));

Цитировать

 

 

0 #11 originalzed 16.03.2014 21:43

Здравствуйте. Такой вопрос : мне надо получить список доступных на Пк ком портов (к одному из них подключено устройство,кото рое отвечает при посылке определенной команды) и подключиться к тому из них,на который будет приходить ответ от устройства. Т.е. надо при запуске проги подключиться к тому порту,на котором мое устройство.Как лучше всего это сделать? Большое спасибо

Цитировать

 

 

0 #10 Богдан 26.02.2014 09:43

Цитирую Евгений:

Цитирую Богдан:

Думаю оптимальным решением будет: указать в начале пакета его длину и подчитывать, до тех пор пока не наберется

 

К вопросу об интервале между пакетами. Проблема в том, что склеивает "близко стоящие" пакеты. При этом пакеты могут быть маленькие и за 1-н вызов ComPortRxChar

Он может слепить воедино несколько пакетов. И сидеть их высчитывать, разбивать и потом по отдельности обрабатывать не очень хочется. Когда можно ,по идее, задать интервал между пакетами в компоненте. Только вопрос как?

 

Что вы понимаете под интервалом? С ком портом работа осуществляется как с файлом. Данные поступают непредсказуемо. Может быть так: конец первого и начало второго придут одновременно.

Цитировать

 

property BaudRate: TBaudRate;

Установка скорости передачи.

 

Тип TBaudRate = (brCustom, br110, BR300, br600, br1200, br2400, br4800, br9600, br14400, br19200, br38400, br56000, br57600, br115200);

 

 

Описание

BaudRate свойство представляет скорость, с которой данные отправляются или принимаются через RS232 СВЯЗЬ. Обе стороны соединения должны иметь одинаковую скорость передачи. Если BaudRate имеет значение brCustom, CustomBaudRate свойство используется для установки скорости передачи данных.

property Buffer: TComBuffer;

Указывает размер буфера последовательного порта

 

Описание

Использование свойства Buffer позволяет  установить размер входного и выходного буфера последовательного порта.

 

Примечание

Размер буфера рекомендуется применять только к драйверу. Драйвер может свободно использовать любой другой размер.

 

 

property Connected: Boolean;

 

Указывает, является ли последовательное соединение активным.

 

Описание

Установите, Connected в True, чтобы открыть последовательный порт. Установите, Connected  False, закрывает соединение с последовательным портом. Приложение может проверить Connected , чтобы определить, открыт ли последовательный порт. Если Connected True, последовательный порт открыт, иначе он закрыт.

 

Замечание

Установка Connected  True является тем же самым как запросом метода Open. Установка соединенного с False является тем же самым как запросом метода Close.

property CustomBaudRate: Integer;

Устанавливает пользовательскую скорость передачи.

 

Описание

Используйте свойство CustomBaudRate, чтобы установить пользовательскую скорость в бодах для передачи данных. Если свойство BaudRate не установлено в brCustom, свойство CustomBaudRate не имеет никакого эффекта.

property DataBits: TDataBits;

Определяет число битов в байте.

 

type TDataBits = (dbFive, dbSix, dbSeven, dbEight);

 

 

Описание

Определяет количество битов в байтах, переданных и полученных.

 

Отметить

Использование 5 битов данных с 2 стоповыми битами - недопустимая комбинация, как 6, 7 или 8 битов данных с 1.5 стоповыми битами.

 

property DiscardNull: Boolean

Удаление вхождений нулевого символа

 

Описание

Определяет, отброшены ли нулевые байты. Если это свойство True, нулевые байты удаляются при получении

 

 

property EventChar: Char;

Определяет значение ASCII символа, чтобы сигнализировать событие.

 

Описание

Когда значение символа получено, оба события OnRxFlag и OnRxChar инициированы.

property Events: TComEvents;

Включения или отключение контроля событий .

 

type TComEvent = (evRxChar, evTxEmpty, evRxFlag, evRing, evBreak, evCTS, evDSR, evError, evRLSD, evRx80Full);

type TComEvents = set of TComEvent;

 

 

 

Описание

Используйте свойство,  чтобы включить или отключить контроль для определенного события. Если есть по крайней мере один набор события, специальный поток создается, который следит за развитием событий на последовательном порту.

property Events: TComEvents;

Включение или отключение контроля событий .

 

type TComEvent = (evRxChar, evTxEmpty, evRxFlag, evRing, evBreak, evCTS, evDSR, evError, evRLSD, evRx80Full);

type TComEvents = set of TComEvent;

 

 

Описание

Используйте свойство,  чтобы включить или отключить контроль для определенного события. Если есть по крайней мере один набор события, специальный поток создается, который следит за развитием событий на последовательном порту.

property EventThreadPriority: TThreadPriority;

Приоритет потока событий

 

Описание

Установите это свойство, чтобы изменить приоритет потока события. Оно должно быть установлено перед звонком в методе Open. Значение по умолчанию - tpNormal.

property FlowControl: TComFlowControl;

Тип управления потоком наборов.

 

Описание

Используйте свойство FlowControl, чтобы установить тип управления потоком в аппаратуре, программном обеспечении или отключение этой возможности.

property Handle: THandle

Обеспечивает доступ к дескриптору файла последовательного порта.

 

Описание

Используйте свойство Handle при запросе API-функций Win32 для последовательной передачи.

 

Отметить

Свойство дескриптора допустимо только, когда свойство Connected - True.

property Parity: TComParity

Настройки четности наборов.

 

Описание

Используйте свойство Parity, чтобы включить или отключить проверку четности, ошибочную замену и тип четности.

 

property Port: TPort;

type TPort = String;

 

Определяет номер последовательного порта.

 

Описание

Используйте свойство Port, чтобы определить номер последовательного порта. У значений порта есть следующий синтаксис: 'COMportnumber' или 'номер порта'. Если Порт изменен во время сеанса, старый порт закрыт, и новый открыт. Приложение может назвать процедуру EnumComPorts, чтобы обновить последовательные порты на локальном компьютере.

property StopBits: TStopBits;

type TStopBits = (sbOneStopBit, sbOne5StopBits, sbTwoStopBits);

 

Определяет число стоповых битов, которые будут использоваться.

 

Описание

Определяет количество стоп битов на символ. StopBits может быть установлен в одно из следующих значений:

 

 

Значение

sbOneStopBit     1 стоповый бит на байт

sbOne5StopBits 1.5 стоповых бита на байт

sbTwoStopBits    2 стоповых бита на байт

 

Отметить

Использование 5 битов данных с 2 стоповыми битами - недопустимая комбинация, как 6, 7 или 8 битов данных с 1.5 стоповыми битами.

property StoredProps: TStoredProps;

 

Определяет свойства, которые будут сохранены или загружены.

 

type TStoredProp = (spBasic, spFlowControl, spBuffer, spTimeouts, spParity, spOthers);

type TStoredProps = set of TStoredProp;

 

Описание

Используйте свойство StoreProps, чтобы определить, какие свойства сохранены или загружены при запросе StoreSettings или LoadSettings. StoredProps может иметь один или больше следующих значений:

 

 

Значение TStoredProps

 

spBasic PortNum, BaudRate, DataBits, StopBits,

 

Четность и FlowControl

 

spFlowControl Подробные настройки управления потоком

Ввод spBuffer и ouput размер буфера

значения Тайм-аута spTimeouts

spParity Подробные настройки четности

свойства EventChar и DiscardNull spOthers

property SyncMethod: TSyncMethod;

Метод синхронизации наборов для событий.

 

type TSyncMethod = (smThreadSync, smWindowSync, smNone);

 

 

Описание

SyncMethod определяет в контексте, какого потока будут вызываться события. SyncMethod может быть одним из следующих значений:

 

 

Значение значения

 

smThreadSync События вызываются в контексте основного потока приложения.

smWindowSync События  вызываются в контексте потока, который вызвал метод Open.

smNone События вызываются в контексте специального контрольного потока

 

Замечание

SyncMethod обычно устанавливается в smThreadSync. Используйте smWindowSync в сервисных приложениях Windows NT

property TriggersOnRxChar: Boolean;

Указывает на событие, которое вызывается , когда данные прибывают во входной буфер.

 

Описание

Используйте свойство TriggersOnRxChar, чтобы проверить во время выполнения, какое событие вызывается, когда данные прибывают во входной буфер. Если TriggersOnRxChar True, событие OnRxChar . Если это возвращает False, событие OnRxBuf .

 

procedure AbortAllAsync;

 

Аварийные прекращения работы всех асинхронных операций.

 

Описание

Вызов AbortAllAsync, отменит все асинхронные операции находящиеся в ожидании. Если метод WaitForAsync вызывают после AbortAllAsync он вызывает исключение EComPort с WinCode ERROR_OPERATION_ABORTED.

 

Замечание

Приложение все еще имеет возможность освободить указатель  Async всех операций в ожидании, используя метод DoneAsync.

 

procedure ApplyBuffer;

Отправляет размер буфера последовательному драйверу.

 

Описание

Метод ApplyBuffer отправляет размер буфера из свойства Buffer последовательному драйверу.

 

procedure ApplyDCB;

Настройки последовательного порта.

 

Описание

Метод ApplyDCB заполняет запись DCB

свойством TCustomComPort и отправляет ее последовательному драйверу.

 

procedure ApplyTimeouts;

Тайм-ауты последовательного порта .

 

Описание

Метод ApplyTimeouts заполняет запись COMMTIMEOUTS свойствами TCustomComPort и отправляет ее последовательному драйверу.

 

 

procedure BeginUpdate;

Предотвращает настройки порта, которые будут изменены немедленно.

 

Описание

Вызов метода BeginUpdate, нужен для того что бы предотвратить изменение настроек порта, которые будут применены, когда любое свойство компонента изменено, и Connected property установлен в True. После запроса BeginUpdate изменение не применяться до тех пор, пока приложение не называет метод EndUpdate. Это полезно, когда приложение должно изменить больше настроек за один раз, чтобы увеличить производительность.

 

 

procedure ClearBuffer(Input, Output: Boolean);

Очищает входной и/или выходной буфер.

 

 

procedure Close;

Закрывает текущую сессию

 

Описание

Close закрывает соединение с последовательным портом. Если последовательный порт уже закрыт, метод Close ничего не делает. Когда порт закрыт, приложение не может читать или записать в него.

 

 

procedure DoBreak; dynamic;

Вызывает обработчик событий OnBreak.

 

Описание

Когда последовательный порт обнаруживает событие OnBreak, метод DoBreak вызывается. Вызовы метода DoBreak обработчик событий OnBreak. Потомки могут переопределить этот метод, чтобы выполнить определенное действие.

 

Замечание

Не вызывайте метод DoBreak непосредственно, так как он вызывается TCustomComPort автоматически.

 

function InputCount: Integer;

Возвращает число байтов во входном буфере.

 

Описание

Вызовите функцию InputCount, чтобы получить число байтов во входном буфере.

 

 

function Read(var Buffer; Count: Integer): Integer;

чтение данных  из входного буфера.

 

Описание

Вызовите функцию read, жля того чтобы считать байты в переменную Buffer. Функция не возвращается, пока байты не считаны, или не произойдет тайм-аут.

 

Возвращаемое значение - число байтов, которые фактически считаны.

 

Замечание

Buffer должн быть достаточно большой, чтобы сохранить байты пакета.

 

 

function ReadAsync(var Buffer; Count: Integer; var AsyncPtr: PAsync): Integer;

чтений Данных  входного буфера в асинхронном режиме.

 

Описание

Вызовите функцию ReadAsync, чтобы считать байты в переменную Buffer . Функция возвращает немедленно и не ждет завершения операции. Функция WaitForAsync, позволяет удостовериться, что операция завершена. Параметр AsyncPtr - записи PAsync, специализируется методом InitAsync. Приложение ответственно за освобождение указателя AsyncPtr методом DoneAsync после того, как работа завершена

 

Возвращаемое значение - число байтов, которые фактически считаны.

 

 

function ReadStr(var Str: String; Count: Integer): Integer;

Чтений входного буфера в строковую переменную.

 

Описание

Вызовите функцию ReadStr, чтобы считать байты в переменную Str. Функция не возвращается, пока байты не считаны, или не наступит тайм-аут.

 

Возвращаемое значение - число байтов, которые фактически считаны.

 

Замечание

Не вызывайте метод ReadStr с параметрами, Count = 0.

 

 

function ReadStrAsync(var Str: String; Count: Integer; var AsyncPtr: PAsync): Integer;

Чтений входного буфера в строковую переменную в асинхронном режиме.

 

Описание

Вызовите функцию ReadStrAsync, чтобы считать байты в переменную Str. Функция возвращает немедленно и не ждет завершения операции. Вызовите функцию WaitForAsync, чтобы удостовериться, что работа завершена. Параметр AsyncPtr  записи PAsync, инициализированный методом InitAsync должен быть очищен методом DoneAsync после того, как работа завершена

 

Возвращаемое значение - число байтов, которые фактически считаны.

 

Замечание

Если результат WaitForAsync отличается от параметра count, приложение должно вручную скорректировать длину параметра Str функцией SetLength.

 

 

procedure SetBreak(OnOff: Boolean);

Установить прерывающийся или непрерывный режим передачи

 

Описание

Используйте функцию SetBreak, чтобы установить прерывающийся или непрерывный режим передачи . Параметр OnOff может быть одним из следующих значений:

 

Значение

 

True

Приостанавливает символьную передачу и переводит линию передачи в состоянии break

False

Восстановлений передачу символов и переводит линию передачи в состояние non break

 

 

 

procedure TransmitChar(Ch: Char);

Передает charachter.

 

Описание

Используйте метод TransmitChar, чтобы передать символ перед любыми данными ожидающими в буфере вывода. Функция полезна для отправки символа прерывания (такого как CTRL+C) к хост-системе.

 

Символьная передача подвергается нормальному управлению потоком и квитированию.

 

Замечание

Если устройство не передает, TransmitChar нельзя вызывать повторно. Как только TransmitChar помещает символ в буфер вывода, символ должен быть передан прежде, чем функция вызвана снова. Если предыдущий символ еще не был отправлен, TransmitChar повышает ошибку.

 

 

function StateFlags: TComStateFlags;

 

Возвращает флаги состояния последовательного порта

TComStateFlag = (fCtlHold, fDsrHold, fRlsHold, fXoffHold, fXOffSent, fEof, fTxim);

TComStateFlags = set of TComStateFlag;

 

Описание

Вызовите функцию StateFlags, чтобы получить информацию об устройстве последовательной передачи. У флагов есть следующее значение:

 

 

Значение флага

 

fCtlHold Определяет, ждет ли передача

Сигнал CTS (очищают, чтобы передаться), Если этот флаг

установлен, передача ждет.

 

fDsrHold Определяет, ждет ли передача

DSR (готовый к набору данных) сигнал, который будет отправлен. Если этот флаг установлен, передача ждет.

 

fRlsHold Определяет, ждет ли передача Сигнал RLSD (получают сигнал строки, обнаруживает), чтобы быть отправленным.

Если этот флаг установлен, передача ждет.

 

fXoffHold Определяет, ждет ли передача потому что

символ Xoff был получен. Если этот флаг установлен,

передача ждет.

 

fXoffSent Определяет, ждет ли передача потому что

символ Xoff был передан. Если этот флаг установлен,

передача ждет. Передача останавливается когда

Символ Ксофф передан к системе, которая берет

следующий символ как Xon, независимо от фактического символа.

 

fEof Определяет, имеет ли конец файла (EOF) символ

полученный. Если этот флаг установлен, символ EOF имеет

полученный.

 

fTxim, Если этот флаг установлен, есть символ, поставленный в очередь для

передача, которая прибыла в связь

устройство посредством функции TransmitChar.

Коммуникационное устройство передает такой символ

перед другими символами в буфере вывода устройства.

 

 

function WaitForAsync(var AsyncPtr: PAsync): Integer;

Ждет, пока асинхронная работа не завершена.

 

Описание

Вызовите функцию WaitForAsync, чтобы удостовериться, что асинхронная работа завершена. WaitForAsync не возвращается, пока работа не закончена или прервана. Параметр AsyncPtr - переменная, инициализированная методом InitAsync.

 

Отметить

Приложение все еще ответственно, чтобы освободить переменную AsyncPtr использование метода DoneAsync.

 

 

procedure WaitForEvent(var Events: TComEvents; StopEvent: TEvent; Timeout: Integer);

Ждет события, на порту.

 

Описание

Вызов WaitForEvent, ожидает события, которое должно произойти на последовательном порту. Метод возвращается, когда событие имеет место, или происходит тайм-аут.  Параметр Events определяет, какие события должны отслеживатся и возвращать событие при наступлении соответствующих.

 

Параметр StopEvent, событие которое отменяет операцию ожидания если приложение включила таковое.

 

Параметр Timeout- число миллисекунд, которое приложение должно ждать. Если Вы устанавливаете параметры Timeout  в constant WaitInfinite, метод не возвращается, пока по крайней мере одно событие не имеет место.

 

Заметка

Метод WaitForEvent полезен только, когда свойство Events не содержит значения, прежде чем метод Open будет вызван. Если Events содержит значение, специальный поток создается, который вызывает wait  и все события обработаны в обработчиках событий OnX.

 

 

function Write(const Buffer; Count: Integer): Integer;

Запись данных  в буфер вывода.

 

Описание

Вызовите функцию Write, чтобы записать байты из Buffer в буфер вывода. Функция не возвращается, пока байты не записаны, или произойдет тайм-аут.

 

Возвращаемое значение - число байтов, которые фактически записаны.

 

 

function WriteAsync(const Buffer; Count: Integer; var AsyncPtr: PAsync): Integer;

Запись данных в буфер вывода в асинхронном режиме.

 

Описание

Вызовите функцию WriteAsync, чтобы записать байты из Buffer в буфер вывода.  Функция возвращает немедленно и не ждет работы, которая будет завершена. Вызовите функцию WaitForAsync, чтобы удостовериться, что работа завершена. Параметр AsyncPtr - запись PAsync, инициализируется методом InitAsync. Приложение ответственно за освобождение указателя AsyncPtr вызовом DoneAsync после того, как работа завершена

 

Возвращаемое значение - число байтов, которые фактически записаны.

 

Оставьте заявку

наш менеджер свяжется с вами в течении 30 минут

Отправка формы…

На сервере произошла ошибка.

Форма получена.

dbmm.org.ua

© 2019 Все права защищены.