Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Lazarus, Free Pascal, CodeTyphon
Регистрация

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.07.2011, 10:41   #1
gusluk
Форумчанин
 
Аватар для gusluk
 
Регистрация: 16.10.2008
Сообщений: 205
По умолчанию Lazarus, СОМ порт

Не могу разобраться как работать с портом. Кучу инфы перечитал, но то ли лыжи не едут, то ли я..., в общем не работает. Может у кого есть примерчик, киньте пожалуйста.
gusluk вне форума Ответить с цитированием
Старый 15.07.2011, 12:51   #2
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Прога по работе с Com портом. Вся работа com порта в модуле FunctComPort.pas, работает в потоке не грузит систему
http://zalil.ru/31424269
Aliens_wolfs вне форума Ответить с цитированием
Старый 15.07.2011, 14:47   #3
gusluk
Форумчанин
 
Аватар для gusluk
 
Регистрация: 16.10.2008
Сообщений: 205
По умолчанию

Aliens_wolfs, спасибо, но на Lazarus компилиться напрочь отказывается, хотя попробую все же подправить, может за работает.

Код:
var
    Form1: TForm1; 
    ComIdT  : tHandle = INVALID_HANDLE_VALUE;
    ComIdR  : tHandle = INVALID_HANDLE_VALUE;
    OutQueue: word = 18000; //буфер на отсылку
    InQueue : word = 18000; //буфер на прием


function tryopen(nameport: pAnsiChar; var hport: tHandle):boolean; //открытие
begin                                                              //порта
hport:= CreateFile(nameport, GENERIC_READ or GENERIC_WRITE, 0, nil, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, 0);   //получает указатель на порт
if(hport=INVALID_HANDLE_VALUE) then  //если получен плохой рез-тат
  begin
  MessageDlg('Невозможно открыть порт '+nameport, mtError, [mbOk], 0);
  Result:=False;
  end
else   Result:=True;
end;

function  SetupPort(ComId: tHandle; br  : integer) : boolean;  //задание
var                                                            //параметров
  S : TDCB ;                                                   //порта
begin
  SetupComm(ComIdT, outqueue, inqueue);  //инициализация
  PurgeComm(ComIdT,PURGE_TXABORT	or PURGE_RXABORT or
  PURGE_TXCLEAR	or PURGE_RXCLEAR);  //освобождение порта от всего

  GetCommState(ComId,s); //получает данные о настройках порта и заносит в s
   //задание их же
  s.BaudRate:=br;   //скорость
  s.Parity:=0;      //четность
  s.StopBits:=ONESTOPBIT;  //стоповый бит

  if (SetCommState(ComId,s)=false) then //установка их же
  begin
    MessageDlg('Ошибка при установлении параметров COM-порта', mtError, [mbOk], 0);
    Result := False;
  end
  else Result := True;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  tryopen('CNCA0', ComIdT);
  SetupPort(ComIdT,4800);
end;
Этот код вроде копильтся, но отказывается работать с виртуальным нуль модемом. Попробую другой нуль модем скачать.
gusluk вне форума Ответить с цитированием
Старый 15.07.2011, 15:01   #4
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

С каким устройством работаете через Com порт?
Aliens_wolfs вне форума Ответить с цитированием
Старый 15.07.2011, 15:49   #5
gusluk
Форумчанин
 
Аватар для gusluk
 
Регистрация: 16.10.2008
Сообщений: 205
По умолчанию

Устройств разных много, пока что экспериментирую с термосоленографом SBE 45.
Но не в нем дело, на Delphi все прекрасно работает, а нужно переписать под Лазарус.
Пока я не могу вообще никаких сообщений с порта получить. Выше приведенный код вроде компилируется, но если указать
виртуальный нуль модемный порт, выдает ошибку. На реальном порту протестить не могу.

Последний раз редактировалось gusluk; 15.07.2011 в 15:55.
gusluk вне форума Ответить с цитированием
Старый 15.07.2011, 16:21   #6
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

tryopen('CNCA0', ComIdT); почему у тебя CNCA0 а не COM и номер, там нужно реальный порт указывать

Последний раз редактировалось Aliens_wolfs; 15.07.2011 в 16:45.
Aliens_wolfs вне форума Ответить с цитированием
Старый 15.07.2011, 17:23   #7
gusluk
Форумчанин
 
Аватар для gusluk
 
Регистрация: 16.10.2008
Сообщений: 205
По умолчанию

Это и есть порт, тока виртуальный, com0com.
gusluk вне форума Ответить с цитированием
Старый 15.07.2011, 18:31   #8
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

А в Delphi работает с этим портом?
Aliens_wolfs вне форума Ответить с цитированием
Старый 15.07.2011, 20:19   #9
gusluk
Форумчанин
 
Аватар для gusluk
 
Регистрация: 16.10.2008
Сообщений: 205
По умолчанию

Да, работает.
gusluk вне форума Ответить с цитированием
Старый 18.07.2011, 11:44   #10
gusluk
Форумчанин
 
Аватар для gusluk
 
Регистрация: 16.10.2008
Сообщений: 205
По умолчанию

Вроде заработало, проблема была с виртуальным портом, не хочет он к нему конектиться хоть убей. Теперь встал вопрос как отслеживать когда приходят данные, просто пытаться читать с каким то интервалом с порта, или есть другие способы?
gusluk вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сом порт , БД olegd Помощь студентам 7 05.07.2010 10:34
освободить СОМ порт varelik Общие вопросы Delphi 11 11.02.2010 21:49
СОМ порт JUDAS Win Api 0 10.01.2009 21:27
вопрос про СОМ-порт фЁдОр Компьютерное железо 8 29.12.2008 16:04
СОМ порт SERG1980 Общие вопросы Delphi 3 17.05.2007 08:06