Форум: "WinAPI";
Текущий архив: 2004.06.20;
Скачать: [xml.tar.bz2];
Внизвопрос по написанию программы передачи данных через порты Найти похожие ветки
← →
Алексей Шолкин (2004-05-14 16:12) [0]Здравствуйте участники !
Хотелось бы получить консультацию по поводу как в Delphi организовать передачу данных по COM2 и LPT портам . Поиск в Интернете ни чего конкретно не дал. В журнале нашёл программу передачи данный по COM2 но в ней не всё понятно (чего понятно написал коментарий на остольные команды ответа не нашёл) и как бы ни чего не принимает с ком порта.
Вот эта программа просьба помочь с ней разобраться.
Как организовать передачу данных через LPT ? (я заменил в этой программе COM2 на LPT и убрал но у меня ни чего не получилось)
var
MainForm: TMainForm;
hCOM,hOUTFile:tHandle;
DCB:tDCB;
Stat:tCOMStat;
ByteCount:dWord;
Lock:bool;
DataBuf:array[1..45] of byte;
Const
BufSize=SizeOf(DataBuf);
procedure TMainForm.N8Click(Sender: TObject);
begin
Stat.cbInQue:=0;
ByteCount:=0;
Lock:=true;
hCOM:=CreateFile("COM2",GENERIC_READ,0,nil, //открывает коммуникационные ресурсы
OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
if hCOM=INVALID_HANDLE_VALUE then begin
ShowMessage("Не могу открытьпорт");
Application.Terminate;
end;
ShowMessage("Oткрыт порт COM2");
ShowMessage("Идёт настройка порта");
SetupComm(hCom,1600,1600); // размер буфферов ввода вывода
GetCommState(hCOM,DCB); //читает текущие настройки ресурсов
with DCB do begin
BaudRate:=9600; // Скорость передачи
ByteSize:=8; // количество бит в байте
Parity:=EvenParity; // бит паритета
StopBits:=OneStopBit; // стоп биты
end;
SetCommState(hCOM,DCB); //устанавлиает настройки ресурсов
if not SetCommState(hCOM,DCB) then begin
ShowMessage("Порт COM2 не настроен");
Application.Terminate;
end;
hOUTFile:=CreateFile("OUT.BIN",GENERIC_READ or GENERIC_WRITE,0,nil,
OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);
if hOUTFile=INVALID_HANDLE_VALUE then begin
ShowMessage("Не могу открыть выходной фаил");
Application.Terminate;
end;
Lock:=false;
end;
procedure TMainForm.Timer1Timer(Sender: TObject);
var I,Blocks,Errors,Bytes:dWord;
begin
STPanel.Panels[1].Text:="Тикущая Дата / " + DateToStr(Date);
STPanel.Panels[2].Text:="Тикущее время / " + TimeToStr(Time);
if not Lock then begin
Lock:=true;
ClearCommError(hCom,Errors,@Stat);
Blocks:=Stat.cbInQue div BufSize;
ShowMessage("Идёт передача");
if Blocks>0 then begin
for I:=1 to Blocks do begin
if not ReadFile(hCOM,DataBuf,BufSize,Bytes,nil) then Beep;
WriteFile(hOUTFile,DataBuf,BufSize,Bytes,nil);
inc(ByteCount,Bytes);
end;
FlushFileBuffers(hOUTFile);
end;
Label1.Caption:="Прочитано - "+IntToStr(Blocks)
+" блоков. Записано в фаил - "
+IntToStr(ByteCount)+" байт";
end;
end;
Помогите разобраться или дайте пожалуйста ссылку где подробно описано как передать данные через порт COM 2 LPT
← →
jack128 © (2004-05-14 20:08) [1]
> ClearCommError(hCom,Errors,@Stat);
возвращает информацию о состоянии порта
> Blocks:=Stat.cbInQue div BufSize;
Stat.cbInQue - кол - во данных в буффере ком порта ещё не прочитанных с помощью ReadFile
> FlushFileBuffers(hOUTFile
скидывает данные из буффера Windows в файл hOUTFile (для ускорения работы с диском винда кеширует чтение/запись)
> Помогите разобраться или дайте пожалуйста ссылку где подробно
> описано как передать данные через порт COM 2 LPT
на этом сайте две статьи были. Вообще инфы полно,странно, что ты не нашёл..
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.06.20;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.033 c