Форум: "Система";
Текущий архив: 2004.02.06;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.026 c