Главная страница
    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.46 MB
Время: 0.051 c
14-1096399489
Rzhevskiy
2004-09-28 23:24
2004.10.17
ADSL


3-1095415563
Stanislav
2004-09-17 14:06
2004.10.17
Тихая отмена транзакции


3-1095335493
analyser
2004-09-16 15:51
2004.10.17
Наследуемые формы и ADOCommand на форме-предке


14-1096469878
Gero
2004-09-29 18:57
2004.10.17
Протестируйте под 98/Me/2000


1-1096754425
Lakshmy
2004-10-03 02:00
2004.10.17
Печать данных из StringGrid





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский