Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> COM порт, Как прочитать данные с порта 
:(
    Опции темы
Dapo
Дата 24.6.2002, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 417
Регистрация: 18.4.2002

Репутация: нет
Всего: 1



С портами начал работать недавно. Вот код:
unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
 TForm1 = class(TForm)
   Button1: TButton;
   Button2: TButton;
   Button3: TButton;
   Edit1: TEdit;
   Memo1: TMemo;
   Edit2: TEdit;
   Memo2: TMemo;
   Button4: TButton;
   Button5: TButton;
   Edit3: TEdit;
   procedure Button1Click(Sender: TObject);
   procedure Button2Click(Sender: TObject);
   procedure Button3Click(Sender: TObject);
   procedure Button4Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;
 DCB:TDCB;
 hPort:THandle;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
hPort:=CreateFile(PChar(Edit1.Text),GENERIC_READ or GENERIC_WRITE,0,Nil,OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,0);
if hPort=INVALID_HANDLE_VALUE then
ShowMessage('Не могу открыть порт!')
else
ShowMessage('Порт открыт');
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
if not CloseHandle(hPort) then
ShowMessage('Не могу закрыть порт!')
end;

procedure TForm1.Button3Click(Sender: TObject);
var actual_bytes:DWORD;
    S:array [0..127] of Char;
    D:array [0..127] of Char;
begin
FillChar(S, 128, #0);
FillChar(D, 128, #0);
StrPCopy(S, Edit3.Text);
if not WriteFile(hPort,S,StrLen(S),actual_bytes,nil) then
ShowMessage(IntToStr(GetLastError))
else
if not ReadFile(hPort, D, StrToInt(Edit2.Text), actual_bytes, nil) then
 ShowMessage(IntToStr(GetLastError))
 else
 begin
   ShowMessage('Прочитано '+IntTostr(actual_bytes)+' байт');
   Memo1.Lines.Add('Прочитано '+D);
 end;
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
DCB.DCBlength := SizeOf(DCB);

if not GetCommState(hPort, DCB) then
  ShowMessage('Не могу прочитать настройку порта: ' + IntToStr(GetLastError))
else
begin
  Memo2.Clear;
  Memo2.Lines.Add('Текущие настройки порта');
  Memo2.Lines.Add('Boud rate - '+IntToStr(DCB.BaudRate));
  Memo2.Lines.Add('Flags     - '+IntToStr(DCB.Flags));
  Memo2.Lines.Add('Byte size - '+IntToStr(DCB.ByteSize));
  Memo2.Lines.Add('Parity    - '+IntToStr(DCB.Parity));
  Memo2.Lines.Add('Stop bits - '+IntToStr(DCB.StopBits));
end;
end;

end.

Операция чтения из порта ReadFile - виснет в зависимости от указанного числа считываемых байтов. Если указать 2 то не висит, а если больше - то зависнет то нет. В Memo1 выводиться считанная информация (работаю с модемом и посылаю его родные AT-команды, например ATI3 - версия модема, модем отвечает) - получаю какую-то абракадабру. Увеличиваю число считываемых байтов - или висит или абракадабра. Помогите разобраться или хотябы инфу какую-нибудь. Пишу в Delphi 6, W2K Server. Спасибо.
PM MAIL   Вверх
VoL
Дата 24.6.2002, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 26.3.2002

Репутация: нет
Всего: нет



Может попробуешь воспользоваться функцией, которая читает данные, только она на асме:

function PortIn(Port: Word): Byte; assembler;
   asm
     MOV DX,Port;
     IN AL,DX
   end

И адреса COM портов: для 1:3F8h и для 2:2F8h
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0388 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.