да код большой - там много других операций по обработке принимаемых данных, а подпрограмма запрос-чтение такая:
| Код | //============================================================= //--------- ÇÀÏÈÑÜ ÄÀÍÍÛÕ Â ÏÎÐÒ, ÏÀÓÇÀ È ×ÒÅÍÈÅ ----------------------------- //============================================================= int __fastcall Write_Port(HANDLE handle, char *buf_wr, char *buf_rd, int num_bwr, int num_brd) { BOOL fSuccess; DWORD ByteCount;
OVERLAPPED o; o.Internal =0; o.InternalHigh=0; o.Offset =0; o.OffsetHigh =0; o.hEvent=CreateEvent(NULL,false,false,NULL);
PurgeComm(handle,PURGE_TXCLEAR|PURGE_RXCLEAR); // Î÷èñòêà î÷åðåäåé ïðèåìà è ïåðåäà÷è â äðàéâåðå
fSuccess =WriteFile(handle,buf_wr,num_bwr,&ByteCount,&o); if (!fSuccess) { ShowMessage("Îøèáêà çàïèñè â ïîðò"); return(0); } //--- ïàóçà if (buf_wr[1] == 0x10) Delay (num_bwr/4+10); // 10ìñ íà çàïèñü ôëýø else Delay(num_bwr/4); // ïàóçà = çàïðîñ
//--- ÷òåíèå COMSTAT stat; DWORD err;
ByteCount=0;
for(int i=0;i<30;i++) { ClearCommError(handle,&err,&stat); // if(stat.cbInQue>0) if(stat.cbInQue==num_brd)// â áóôåðå ââîäà ïðèíÿòû âñå áàéòû? { fSuccess =ReadFile(handle,buf_rd,num_brd,&ByteCount,&o); // ÷èòàåì áóôåð break; } else Delay (1); }
//--- çàâåðøåíèå
CloseHandle(o.hEvent); // Çàêðûòü ñîáûòèÿ return ((int) ByteCount); } //------ Îêîí÷àíèå -------------------------------------------
|
|