Skip to Menu Skip to Content Skip to Footer

Thursday, Aug 17th

TComPort Delphi справка перевод
Автор: Administrator   
12.06.2011 12:24

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

Unit
CPort

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

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

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


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

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

Delphi Example

1
2
3
4
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;
 
Примеры
TComPort Примеры
 
Пакеты
О пакетах

Когда приложение подключается к каму-то последовательному устройство, например регистратору данных, которое постоянно передает данные на ПК, данные, обычно отправляются в виде пакетов. Пакет представляет собой строку символов, как правило, постоянного размера, с некоторыми определенными символами начала и / или конца. Приложение может разбирать входящие данные внутри обработчика событий 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;п»ї

 


 
Свойства

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 после того, как работа завершена

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



 

Comments:

Комментарии  

 
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
Он может слепить воедино несколько пакетов. И сидеть их высчитывать, разбивать и потом по отдельности обрабатывать не очень хочется. Когда можно ,по идее, задать интервал между пакетами в компоненте. Только вопрос как?

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

 

Новости