Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Разное
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 19.11.2009, 11:07
maks26 maks26 вне форума
Прохожий
 
Регистрация: 19.11.2009
Сообщения: 2
Репутация: 10
По умолчанию Работа с COM1 на Delphi6. Please!

Объясните пожалуйста поподробнее, как с ним работать. На Паскале был модуль Async.tpu, но под Windows XP он не работает (Делал похожую прогу лет 10 назад -- приём/передача на у-во с 8-битным МП -- там-то всё гораздо проще на ASM'e!)

P/S/ Скачал пример одного "умника", где в порт посылается символ "$". В это время закачивал музыку на телефон. После разных сообщений об ошибках повисло всё, включая телефон. Вытащил-вставил аккумулятор, но он (телефон) перестал вообще производить звуки, менять темы и т.д. Слетела прошивка кажется. Отвёз в сервис-центр... Сам бы не поверил, если б со мной не случилось)

Последний раз редактировалось maks26, 19.11.2009 в 11:27.
Ответить с цитированием
  #2  
Старый 19.11.2009, 11:29
Аватар для NIch
NIch NIch вне форума
Продвинутый
 
Регистрация: 02.06.2008
Адрес: Бендеры ПМР
Сообщения: 754
Репутация: 2446
По умолчанию

Ну а как ты хотел...экспериментировать с оборудованием не шутки...
Вот кое что нашел...
Код:
unit Unit1;

 

interface

 

uses

Windows;

 

type

TComPort = class

private

   hFile: THandle;

public

   constructor Create;

   destructor Destroy; override;

   function InitCom(BaudRate, PortNo: Integer; Parity: Char;

     CommTimeOuts: TCommTimeouts): Boolean;

   procedure CloseCom;

   function ReceiveCom(var Buffer; Size: DWORD): Integer;

   function SendCom(var Buffer; Size: DWORD): Integer;

   function ClearInputCom: Boolean;

end;

 

implementation

 

uses

SysUtils;

 

constructor TComPort.Create;

begin

inherited;

CloseCom;

end;

 

destructor TComPort.Destroy;

begin

CloseCom;

inherited;

end;

 

function TComPort.InitCom(BaudRate, PortNo: Integer; Parity: Char;

CommTimeOuts: TCommTimeouts): Boolean;

var

FileName: string;

DCB: TDCB;

PortParam: string;

begin

result := FALSE;

FileName := 'Com' + IntToStr(PortNo); {имя файла}

hFile := CreateFile(PChar(FileName),

   GENERIC_READ or GENERIC_WRITE, 0, nil,

   OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);

if hFile = INVALID_HANDLE_VALUE then

   exit;

 

//установка требуемых параметров

GetCommState(hFile, DCB); //чтение текущих параметров порта

PortParam := 'baud=' + IntToStr(BaudRate) + ' parity=' + Parity +

   ' data=8 stop=1 ' +

   'octs=off';

if BuildCommDCB(PChar(PortParam), DCB) then

begin

   result := SetCommState(hFile, DCB) and

     SetCommTimeouts(hFile, CommTimeOuts);

end;

if not result then

   CloseCom;

end;

 

procedure TComPort.CloseCom;

begin

if hFile < > INVALID_HANDLE_VALUE then

   CloseHandle(hFile);

hFile := INVALID_HANDLE_VALUE;

end;

 

function TComPort.ReceiveCom(var Buffer; Size: DWORD): Integer;

var

Received: DWORD;

begin

if hFile = INVALID_HANDLE_VALUE then

   raise Exception.Create('Не открыта запись в Com порт');

if ReadFile(hFile, Buffer, Size, Received, nil) then

begin

   Result := Received;

end

else

   raise Exception.Create('Ошибка приема данных: ' + IntToStr(GetLastError));

end;

 

function TComPort.SendCom(var Buffer; Size: DWORD): Integer;

var

Sended: DWORD;

begin

if hFile = INVALID_HANDLE_VALUE then

   raise Exception.Create('Не открыта запись в Com порт');

if WriteFile(hFile, Buffer, Size, Sended, nil) then

begin

   Result := Sended;

end

else

   raise Exception.Create('Ошибка передачи данных: ' + IntToStr(GetLastError));

end;

 

function TComPort.ClearInputCom: Boolean;

begin

if hFile = INVALID_HANDLE_VALUE then

   raise Exception.Create('Не открыта запись в Com порт');

Result := PurgeComm(hFile, PURGE_RXCLEAR);

end;

end.
__________________
В начале был Бит, потом Байт и только потом появилось Слово...
Ответить с цитированием
  #3  
Старый 20.11.2009, 11:10
maks26 maks26 вне форума
Прохожий
 
Регистрация: 19.11.2009
Сообщения: 2
Репутация: 10
По умолчанию

О! То, что надо, спасибо. Единственное, что пока не понял, а как я узнаю когда именно пришёл байт, а когда нет... По не нулевому размеру считанного буффера?
Ответить с цитированием
  #4  
Старый 20.11.2009, 22:51
Lexa666 Lexa666 вне форума
Прохожий
 
Регистрация: 20.11.2009
Сообщения: 1
Репутация: 10
По умолчанию Подскажите

Извините за столь глопый вопрос,но что такое исходники?И что с ними делать???Заранее спасибо.
Ответить с цитированием
  #5  
Старый 20.11.2009, 22:59
Аватар для NIch
NIch NIch вне форума
Продвинутый
 
Регистрация: 02.06.2008
Адрес: Бендеры ПМР
Сообщения: 754
Репутация: 2446
По умолчанию

Чёёёёёё)))
Исходный текст программы...
Это тот код который набираешь в среде Delphi или Pascal...
А точнее те файлы в которых содержится этот код...
А вопрос действительно глупый)))
__________________
В начале был Бит, потом Байт и только потом появилось Слово...
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 10:50.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter