Форум: "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