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




Вниз

Работа с Com-портом, помогите пожалуйста !!! 


Twilight   (2002-01-03 09:27) [0]

TComPort
Ждем сигнал в COM порт, если его нет, значит неверно выбран номер порта, или устройство не подключено, или еще какой сбой. Как в этом случае отменить чтение, вернуть функцию, чтобы программа не висла.
function TComPort.WaitForAsync(var AsyncPtr: PAsync): DWORD;
var
BytesTrans, Signaled: DWORD;
Success: Boolean;
begin
if AsyncPtr = nil then
raise EComPort.CreateNoWinCode(CError_InvalidAsync);

with AsyncPtr^ do begin
Signaled := WaitForSingleObject(Overlapped.hEvent, INFINITE);
Success := (Signaled = WAIT_OBJECT_0) and
(GetOverlappedResult(FHandle, Overlapped, BytesTrans, False));
end;

if not Success then
raise EComPort.Create(ErrorCode(AsyncPtr), GetLastError);

Result := BytesTrans;

end;


В данном случае она зацикливается на строке
Signaled := WaitForSingleObject(Overlapped.hEvent, INFINITE);
Ставил вместо INFINITE определенное число миллисекунд -224 и:

if not Success then begin
halt;
end;

В этом случае при сбоях она завершала выполнение программы и не висла, но получается так что каждый раз интервал в миллисекундах разный и для чтения и для записи. Поставлю время меньше, он при чтении завершает, поставлю больше при записи виснит.
И в общем все время указывает на эту строку:
Signaled := WaitForSingleObject(Overlapped.hEvent, INFINITE);
Подскажите пожалуйста, что делать.Ситуация то какая: у меня в микросхему если я хочу читать из нее посылается байт $55, на что микросхема выдает сначала байт $33 , а потом еще 223 байта с данными.
Когда надо ввести в микросхему, тут сложнее - у микросхемы не хватает ОЗУ чтобы сразу все принять, поэтому приходится разбивать массив байтов на пачки в определенном порядке и количестве и используются разные инициализирующие байты - $60 и $40, причем для каждой пачки повторяется процедура - засылается первый байт, потом информация и микросхема выдает байт $33.
Вот я никак не разберусь че же делать то.



dmitriyk   (2002-01-11 04:30) [1]

У тебя похоже неправильно сделан алгоритм обмена. Потому, что работают два абсолютно не зависимых устройст, КОМП и микросхема (я так понимаю речь идет об однокристалке ?). Для надежной работы эти два устройства надо синхронизировать. Иначе не как.

Для начала, Скажи мне, когда у тебя в основном происходят сбои: при передачи данных из компа в микросхему, или обратно. Обычно всегда в какую то одну сторону.




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




Наверх





Память: 0.72 MB
Время: 0.034 c
1-19151           DHJ                   2002-02-21 11:25  2002.03.07  
Есть DOS приложение. В его окно надо ввести цифру, нажав на клавиатуре.


6-19283           Be$                   2001-12-03 00:16  2002.03.07  
Сетевые ресурсы


3-19061           некто_02              2002-02-02 03:02  2002.03.07  
dbExpress и Oracle


4-19377           iXANiA                2002-01-04 15:57  2002.03.07  
Как спрятать окно чужого приложения?


1-19242           Miwa                  2002-02-19 19:32  2002.03.07  
Вывод сообщения