Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.10.17;
Скачать: [xml.tar.bz2];

Вниз

Как мне инициализировать сразу два порта(СОМ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 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.10.17;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.036 c
8-1090432990
beatles_bntu
2004-07-21 22:03
2004.10.17
Качественная оброботка текстуры в OpenGL


3-1095318509
Chery
2004-09-16 11:08
2004.10.17
MySQL - транзакции.


8-1090436143
parovoZZ
2004-07-21 22:55
2004.10.17
DirectDraw и кирилица


3-1095403065
PhAn
2004-09-17 10:37
2004.10.17
Глюк like или Access?


1-1096898621
Pentium133
2004-10-04 18:03
2004.10.17
DUnit





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский