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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> COM порт, как правильно записать данные в порт 
:(
    Опции темы
Serg1234
Дата 21.5.2010, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Всем привет.
Помогите разобраться, плиз.
Необходимо записать и прочитать данные с COM порта.
на паскале это выглядело так
Код

b := $3F8;n := 10;
port[b+4] := 1;
delay(100);
port [b+3] := 64;
delay(500);

 port[b+4] := 0;
 d := 0;for f :=0 to n-1 do
 begin
  port[b+4] := 2;
  e := port[b+6] and 16;
  port[b+4] := 0;
  if e=16 then d := d + exp((n-1-f)*ln(2));
 end;

на delphi, как я понимаю, необходимо использовать 
WriteFile
ReadFile
Вопрос - как правильно записать параметры этих процедур?


Это сообщение отредактировал(а) Serg1234 - 21.5.2010, 18:11
PM MAIL   Вверх
RinOSpro
Дата 22.6.2010, 11:09 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











У тебя в коде, физически выставляются состояние по адресам, думаю что использовать ReadFile, WriteFile не самый удобный способ.

Я бы использовал библиотеку inpout32.dll и физически писал в порт.

Код

var
  b, n, e: Smallint;
  f: Integer;
  d: Double;
begin
  b := $3F8;
  n := 10;

  Out32(b+4, 1);
  Sleep(100);

  Out32(b+3, 64);
  Sleep(500);

  Out32(b+4, 0);

  d := 0;

  for f :=0 to n - 1 do
  begin
    Out32(b+4, 2);

    e := Inp32(b+6) and 16;

    Out32(b+4, 0);

    if e = 16 then
      d := d + exp((n-1-f)*ln(2));
  end;



Во вложении пример.

Присоединённый файл ( Кол-во скачиваний: 15 )
Присоединённый файл  Port.rar 13,01 Kb
  Вверх
morpheyushka
Дата 27.6.2010, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зеленый человек
**


Профиль
Группа: Участник
Сообщений: 563
Регистрация: 26.2.2008
Где: Киев

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



Когда я работал с СОМ портом, то использовал как раз ReadFile, WriteFile;
И так по порядку.
Вот так мы открываем нужный нам порт:
Код

var
  CommHandle: THandle;

function OpenCommPort(): Boolean; StdCall;
begin
  CommHandle := CreateFile(PChar('\\.\COM1'),
                             GENERIC_READ or GENERIC_WRITE,
                             0,
                             nil,
                             OPEN_EXISTING,
                             0,
                             0);
  Result := CommHandle = INVALID_HANDLE_VALUE;
end;


обычно еще порт и настраивают под свои потребности. Если нужно помогу и с настройками.

Дальше - запись в порт:
Код

function WritePort(Command: string): Boolean;
var
  OutBuffLen, WritedCount: DWORD;
  Buff: array [0..255] of Char;
begin
  WritedCount := 0;
  FillChar(Buff, SizeOf(Buff), #0);
  StrPCopy(Buff, Command);
  OutBuffLen := Length(Command);
  WriteFile(CommHandle, Buff[0], OutBuffLen, WritedCount, nil);
  Result := WritedCount = OutBuffLen;
end;


Чтение из порта:
Код

function ReadPort: String;
var
  Resive: array [0..255] of Char;
  Kols, Errs: DWORD;
  Stat: TComStat;
  Str: String;
begin
  FillChar(Resive, SizeOf(Resive), #0);
  ClearCommError(CommHandle,Errs,@Stat);//сброс флага
  Kols := Stat.cbInQue;
  ReadFile(CommHandle, Resive[0], Kols, Kols, nil);
  if Kol > 0 then //что-то пришло
    Result := String(Resive)
  else
    Result := '';
end;


ну и закрытие порта:
Код

procedure CloseCommPort(); StdCall;
begin
  PurgeComm(CommHandle, PURGE_TXABORT or PURGE_RXABORT or
                        PURGE_TXCLEAR or PURGE_RXCLEAR);
  CloseHandle(CommHandle);
  CommHandle := INVALID_HANDLE_VALUE;
end;


Будут вопросы - задавай.


--------------------
user posted image
Спасибо делается вот так!!!
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

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

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

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

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

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


 




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


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

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