Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.02.06;
Скачать: CL | DM;

Вниз

COM port   Найти похожие ветки 

 
Antonn   (2003-11-20 09:31) [0]

Помогите начинающему!!! Первый раз столкнулся с СОМ портами и не въезжаю как правильно с ними работать. Мне нужно получить сигнал и распознать его с определенной "жилы": 1-DCD или 8-CTS. Если сморозил жушь - прошу поправить.


 
Worker ©   (2003-11-20 14:01) [1]

По-ковыряй этот пример

unit My_IO;

interface

function OpenComm(InQueue, OutQueue, Baud: LongInt): Boolean;
function SetCommTiming: Boolean;
function SetCommBuffer(InQueue, OutQueue: LongInt): Boolean;
function SetCommStatus(Baud: Integer): Boolean;
function SendCommStr(S: String): Integer;
function ReadCommStr(var S: String): Integer;
procedure CloseComm;

var

ComPort: Word;

implementation

uses Windows, SysUtils;

const

CPort: array [1..4] of String =("COM1","COM2","COM3","COM4");

var

Com: THandle = 0;

function OpenComm(InQueue, OutQueue, Baud : LongInt): Boolean;
begin

if Com > 0 then CloseComm;
Com := CreateFile(PChar(CPort[ComPort]),
GENERIC_READ or GENERIC_WRITE,
0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
Result := (Com > 0) and SetCommTiming and
SetCommBuffer(InQueue,OutQueue) and
SetCommStatus(Baud) ;
end;

function SetCommTiming: Boolean;
var

Timeouts: TCommTimeOuts;

begin

with TimeOuts do
begin
ReadIntervalTimeout := 1;
ReadTotalTimeoutMultiplier := 0;
ReadTotalTimeoutConstant := 1;
WriteTotalTimeoutMultiplier := 2;
WriteTotalTimeoutConstant := 2;
end;
Result := SetCommTimeouts(Com,Timeouts);
end;

function SetCommBuffer(InQueue, OutQueue: LongInt): Boolean;
begin

Result := SetupComm(Com, InQueue, OutQueue);
end;

function SetCommStatus(Baud: Integer): Boolean;
var

DCB: TDCB;

begin

with DCB do
begin
DCBlength:=SizeOf(Tdcb);
BaudRate := Baud;
Flags:=12305;
wReserved:=0;
XonLim:=600;
XoffLim:=150;
ByteSize:=8;
Parity:=0;
StopBits:=0;
XonChar:=#17;
XoffChar:=#19;
ErrorChar:=#0;
EofChar:=#0;
EvtChar:=#0;
wReserved1:=65;
end;
Result := SetCommState(Com, DCB);
end;

function SendCommStr(S: String): Integer;
var

TempArray : array[1..255] of Byte;
Count, TX_Count : Integer;

begin

for Count := 1 to Length(S) do TempArray[Count] := Ord(S[Count]);
WriteFile(Com, TempArray, Length(S), TX_Count, nil);
Result := TX_Count;
end;

function ReadCommStr(var S: String) : Integer;
var

TempArray : array[1..255] of Byte;
Count, RX_Count : Integer;

begin

S := "";
ReadFile(Com, TempArray, 255, RX_Count, nil);
for Count := 1 to RX_Count do S := S + Chr(TempArray[Count]);
Result := RX_Count;
end;

procedure CloseComm;
begin

CloseHandle(Com);
Com := -1;
end;

end.


 
Antonn   (2003-11-20 14:31) [2]

Вылезает какая-то хрень... Не нравятся строки:
WriteFile(Com, TempArray, Length(S),TX_Count,nil);
ReadFile(Com, TempArray, 255, RX_Count, nil);
Говорит - Types of actual and formal var parameters must be identical.


 
Карелин Артем ©   (2003-11-20 15:47) [3]

Ковыряй лучше
http://www.torry.net/vcl/comms/modems/dccomms.zip
Там и событие есть на изменение CTS...



Страницы: 1 вся ветка

Текущий архив: 2004.02.06;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.019 c
3-16069
Val
2004-01-12 11:53
2004.02.06
ptOraBlob как параметр TStoredProc


8-16522
o2
2003-10-02 14:45
2004.02.06
DirectX


1-16352
Некто
2004-01-24 15:38
2004.02.06
Редактор свойств.


1-16351
AlexLine
2004-01-24 13:52
2004.02.06
Как вызвать стандартный калькулятор Windows


3-16160
webpauk
2004-01-14 16:04
2004.02.06
Метод Post