Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.17;
Скачать: CL | DM;

Вниз

Как мне инициализировать сразу два порта(СОМ1 и СОМ2)   Найти похожие ветки 

 
Relaxxx   (2004-09-13 18:14) [0]

Я вот раньше пользовался такими процедурами для работы с ком портом
procedure PortInitCOM1;
 var
  ThreadID:dword;
begin
 KolByte1:=0;

 Com1Handle := CreateFile("COM1",GENERIC_READ or GENERIC_WRITE,0,nil,OPEN_EXISTING,
        FILE_ATTRIBUTE_NORMAL or FILE_FLAG_OVERLAPPED,0);

 SetCommMask(Com1Handle,EV_RXFLAG);

  GetCommState(Com1Handle,DCB1);
  DCB1.BaudRate:=CBR_9600;
  DCB1.Parity:=NOPARITY;
  DCB1.ByteSize:=8;
  DCB1.StopBits:=OneStopBit;
  DCB1.EvtChar:=chr(13);
  SetCommState(Com1Handle,DCB1);
  Com1Thread := CreateThread(nil,0,@ReadCOM1,nil,0,ThreadID);
end;

procedure ReadCOM2;
 var
  Resive:array [0..255] of char;
  i:integer;
begin
  while true do
  begin
   TransMask2:=0;
   WaitCommEvent(Com2Handle,TransMask2,@Ovr2);
   if (TransMask2 and EV_RXFLAG)=EV_RXFLAG then
    begin
     ClearCommError(Com1Handle,Errs2,@Stat2);
     Kols2 := Stat2.cbInQue;
     ReadFile(Com2Handle,Resive,Kols2,Kols2,@Ovr2);
     CodeCOM2:="";
     Code_tekCOM2:="";
     Code_tekCOM2:=StringReplace(string(Resive), "*", "", [rfIgnoreCase]);
     for i:=1 to 11 do
     begin
       CodeCOM2:=CodeCOM2+Code_tekCOM2[i];
     end;
    end;//mask
   end;//while
end;




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


 
Relaxxx   (2004-09-13 18:54) [1]

Ладно я понял что в коде никто разбераться не будет, тогда просто, как мне получить асинхронный доступ к СОМ портам, тоесть вот какая у меня задача:
к обеим ком портам подключины считыватели штрихкода и мне нужно если с СОМ1 приходят данные выполняентся определенная функция которая обрабатывает эданные, если с СОМ2 то другая функция!


 
Relaxxx   (2004-09-13 21:42) [2]

ну хоть компоненты подскажите для Д6 для работы с ком-портами


 
GuAV ©   (2004-09-13 21:43) [3]

Relaxxx   (13.09.04 18:54) [1]
В одном потоке один порт, в другом другой - чем не вариант.


 
Relaxxx   (2004-09-13 22:56) [4]

пробовал, почему-то не работает


 
jack128 ©   (2004-09-13 23:20) [5]

а где у тя выход из процедуры ReadCOM2? вроде как бесконечный цикл.. и где процедура ReadCOM2?
И еще - поменьше используй глобальные переменные..


 
Erik1 ©   (2004-09-14 11:16) [6]

И вобще лучше используй готовые компоненты, а то у тебя чтото странное написано. Компонентоа полно на Torry.net Мне нравится
VARIAN ASYNC32 COMPONENT v1.48 я сам переделал именно этот компонент в нем используется именно асинхроная работа с com портом.


 
Relaxxx   (2004-09-14 11:24) [7]

Блин, да что за фигня...пролазил кучу сайтов в поисках компонента для СОМ портов. Понравились по описаниям 2 компонента
Winsoft ComPort(http://www.winsoft.sk/comport.htm) и Tcomport by Dejan Crnila.
Но блин, первый немогу найти не триальный, а второй не ставится под 6 делфи


 
simpson ©   (2004-09-14 11:33) [8]

> Erik1 ©   (14.09.04 11:16) [6]
> И вобще лучше используй готовые компоненты

Очень спорное утверждение. Особенно, для такой несложной задачи.

Автору: прочитай описание функции WaitCommEvent в MSDN. Особенно секцию "remarks".
Плодить потоки для асинхронного считывания данных из нескольких портов, по-моему, не лучшая идея. Один поток + WaitForMultipleObjects.



Страницы: 1 вся ветка

Текущий архив: 2004.10.17;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.022 c
1-1096713393
Comp
2004-10-02 14:36
2004.10.17
LongInt


6-1091989502
oleg_SYS
2004-08-08 22:25
2004.10.17
Как послать запрос аутентификацию по HTTP?


14-1096259758
Сергей Г
2004-09-27 08:35
2004.10.17
Ситуация такая


6-1092134428
Боян Георгиев
2004-08-10 14:40
2004.10.17
Sorry, that domain isn t in my list of allowed rcpthosts (#5.7.1)


1-1096550458
dms_main
2004-09-30 17:20
2004.10.17
TCustomForm.Create(AOwner:TComponent)