Форум программистов
 
Регистрация на форуме тут, о проблемах пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль

Купить рекламу на форуме 15-35 тыс рублей в месяц

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы Поиск в этой теме
Старый 24.07.2009, 23:43   #1
Crivel
Delphi\C++
Форумчанин
 
Аватар для Crivel
 
Регистрация: 18.06.2008
Сообщений: 277
По умолчанию

Прочитал как работать с COM портом - через CreateFile ReadFile WriteFile и т.д.
Но одного не понимаю - как выбрать порт в какой писать? Например в $61?
Вопрос может наверно нубовский, но извиняюсь, я с портами первый раз работаю.
Заранее благодарен.

эээ... не кто не может ответить???

Подробнее - мне просто не понятно в какой порт я пишу с помощью WriteFile? в порт динамика? мышки? клавиатуры? В названии файла (CreateFile) пишу "Com1". Мне именно нужен порт $61.
Заранее благодарен.

P.S. сорри что столько постов налепил

Последний раз редактировалось Stilet; 27.07.2009 в 10:28.
Crivel вне форума Ответить с цитированием
Старый 25.07.2009, 08:46   #2
Dmitriy.Ch
 
Регистрация: 04.07.2009
Сообщений: 4
По умолчанию

при открытии порта с помощью CreateFile вы получаете хандле, это то что возвращает CreateFile.

h := CreateFile('COM1', .....);

и пишете WriteFile уже используя этот h, он соответствует открытому вами порту.

WriteFile(h, .....);, т.е. таким образом вы пишите именно в COM1
Dmitriy.Ch вне форума Ответить с цитированием
Старый 25.07.2009, 11:05   #3
Crivel
Delphi\C++
Форумчанин
 
Аватар для Crivel
 
Регистрация: 18.06.2008
Сообщений: 277
По умолчанию

Да, но мне нужно именно писать в порт динамика $61. Что для этого надо так: CreateFile('$61',....)???
Crivel вне форума Ответить с цитированием
Старый 25.07.2009, 12:03   #4
Dmitriy.Ch
 
Регистрация: 04.07.2009
Сообщений: 4
По умолчанию

Точно скажу, что не так.

А как незнаю
Dmitriy.Ch вне форума Ответить с цитированием
Старый 25.07.2009, 12:06   #5
Crivel
Delphi\C++
Форумчанин
 
Аватар для Crivel
 
Регистрация: 18.06.2008
Сообщений: 277
По умолчанию

не, но через COM1 возможно на динамик воздействовать? для чего он тогда? для управления чем?

Мне всего лишь надо динамиком управлять

Последний раз редактировалось Stilet; 27.07.2009 в 10:28.
Crivel вне форума Ответить с цитированием
Старый 25.07.2009, 13:12   #6
BaronTreep
Форумчанин
 
Регистрация: 29.05.2009
Сообщений: 320
По умолчанию

Функция Beep из Kernel32.dll вам поможет, только вызывать её нужно Windows.Beep, а не просто Beep (это обычный системный звук). Там видимо какой-то VXD принцип, потому что спикер - это устройство, и ему нужен дров.

Вот пример:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  a : integer;
begin
  for a:=1 to 1000 do begin
    Application.ProcessMessages;
    Windows.Beep(a, 40);
  end;
end;
Такое ощущение, что он щас взлетит ))
BaronTreep вне форума Ответить с цитированием
Старый 27.07.2009, 10:20   #7
ov_lab
Пользователь
 
Регистрация: 24.07.2009
Сообщений: 13
По умолчанию

Цитата:
Сообщение от Crivel Посмотреть сообщение
не, но через COM1 возможно на динамик воздействовать? для чего он тогда? для управления чем?
COM - это коммуникационный порт, реализующий в компьютере интерфейс обмена данными RS-232. Для управления COM1 на низком уровне используются порты $3F8-$3FF (возможны варианты). Однако прямой доступ к портам ввода-вывода компьютера стал неактуален вместе с Windows 98. Для упрощения управления последовательным портом в Windows реализован драйвер, доступный пользователю через CreateFile и т.д.
Вот интересная статья
http://www.citforum.ru/operating_sys...gl_2_4.shtml#3
ov_lab вне форума Ответить с цитированием
Старый 27.07.2009, 10:57   #8
andreibtzt
Заблокирован
 
Регистрация: 04.04.2009
Сообщений: 43
По умолчанию

Код:
function PortInit : boolean; //инициализация
var f: THandle; 
    ct: TCommTimeouts;
    dcb: TDCB;
begin
f := Windows.CreateFile(PChar('COM1'), GENERIC_READ or 
GENERIC_WRITE,
FILE_SHARE_READ or FILE_SHARE_WRITE,
nil, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, 0);
if (f < 0) or not Windows.SetupComm(f, 2048, 2048)or not
Windows.GetCommState(f, dcb) then exit; //init error dcb.BaudRate := скоpость;
dcb.StopBits := стоп-биты;
dcb.Parity := ?етность;
dcb.ByteSize := 8;
if not Windows.SetCommState(f, dcb) or 
   not Windows.GetCommTimeouts(f, ct) then exit; //error
ct.ReadTotalTimeoutConstant := 50;
ct.ReadIntervalTimeout := 50;
ct.ReadTotalTimeoutMultiplier := 1;
ct.WriteTotalTimeoutMultiplier := 0;
ct.WriteTotalTimeoutConstant := 10;
if not Windows.SetCommTimeouts(f, ct)
   or not Windows.SetCommMask(f, EV_RING + EV_RXCHAR + EV_RXFLAG + EV_TXEMPTY)
  then exit; //error
result := true;
end;
 
function DoneComm: boolean; //закpыть поpт
begin
  result := Windows.CloseHandle(f);
end; 
 
function PostComm(var Buf; size: word): integer; //пеpеда?а в поpт
  var p: pointer; i: integer;
begin
p := @Buf;
result := 0;
while size > 0 do 
begin
  if not WriteFile(f, p^, 1, i, nil) then exit;
  inc(result, i); inc(integer(p)); dec(size);
  Application.ProcessMessages;
end;
end; 
 
function ReadComm(var Buf; size: word): integer; //пpием из поpта
  var i: integer; ovr: TOverlapped;
begin
  fillChar(buf, size, 0);
  fillChar(ovr, sizeOf(ovr), 0); i := 0; result := -1;
  if not windows.ReadFile(f, buf, size, i, @ovr) then exit;
  result := i;
end;


////////////////////////////////////////////////////



Код:
CreateFile HANDLE CreateFile( LPCTSTR lpFileName,// указатель на строку PCHAR с именем файла
DWORD dwDesiredAccess,// режим доступа
DWORD dwShareMode,// share mode
LPSECURITY_ATTRIBUTES lpSecurityAttributes,// указатель на атрибуты
DWORD dwCreationDistribution,// how to create
DWORD dwFlagsAndAttributes,// атрибуты файла
HANDLE hTemplateFile // хендл на temp файл
); Пример кода на Дельфи
< вырезано>
CommPort := 'COM2'; 
hCommFile := CreateFile(Pchar(CommPort), 
GENERIC_WRITE, 0, nil, 
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,
0);
///////////////////////////////////////////////
andreibtzt вне форума Ответить с цитированием
Старый 27.07.2009, 11:12   #9
andreibtzt
Заблокирован
 
Регистрация: 04.04.2009
Сообщений: 43
По умолчанию

, ну это пока всьо,
Вложения
Тип файла: txt Rs-232.txt (14.1 Кб, 146 просмотров)
andreibtzt вне форума Ответить с цитированием
Ответ
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как писать на флешку, как в файл. Altera Общие вопросы Delphi 5 10.07.2009 20:24
как в VC++2005 писать на си alhon Общие вопросы C/C++ 4 19.06.2009 13:17
Как открыть порты в Windows? [Smarik] Windows 4 08.05.2009 19:19
как средствами Delphi опросить USB порты? beegl Общие вопросы Delphi 3 24.03.2009 17:40