TCom port;port.OpenPort();port.SetBaund(19200); port.SendBuffer записать буферport.BytesAvailable() проверка наличия байта на входеport.TakeBytes считать буфер
LPVOID lpInBuffer; hcom = CreateFile("COM1",GENERIC_READ|GENERIC_WRITE, 0,NULL,OPEN_EXISTING,0,NULL); if (hcom != INVALID_HANDLE_VALUE) Memo1->Lines ->Add("Handle create successeful"); else Memo1->Lines ->Add("Handle create error"); int i; i = PurgeComm(hcom, PURGE_TXABORT|PURGE_RXABORT|PURGE_TXCLEAR | PURGE_RXCLEAR); if (i == Null()) Memo1->Lines->Add("Purge error"); if ((i=ClearCommBreak(hcom))==Null()) Memo1->Lines->Add("ClearComm Break error"); DCB dcb; if ((GetCommState (hcom, &dcb))==Null()) Memo1->Lines->Add("GetCommState error"); dcb.BaudRate=CBR_9600; dcb.ByteSize=8; dcb.Parity=NOPARITY; dcb.StopBits=ONESTOPBIT; //dcb.fOutxCtsFlow=false; //dcb.fOutxDsrFlow=false; if ((i=SetCommState(hcom, &dcb))==Null()) Memo1->Lines->Add("SetCommState error"); DWORD CommEventMask = EV_BREAK | EV_CTS | EV_DSR | EV_ERR | EV_RING | EV_RLSD | EV_RXCHAR | EV_RXFLAG | EV_TXEMPTY; if ((i = SetCommMask(hcom, CommEventMask))==Null()) Memo1->Lines->Add("SetCommNask error"); const char CMD[5] = {0x02, 0x03, 0x40, 0x00, 0x03}; char cmd[5] = {0x00, 0x00, 0x00, 0x00, 0x00};; OVERLAPPED OL; OL.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL); DWORD EventMask = 0; DWORD dwWrited; bool sucss = WriteFile (hcom, (void*)CMD, 5, &dwWrited, &OL); if (!sucss) return; int dwread; do { i = WaitCommEvent(hcom, &EventMask, &OL); if ((!i) && (GetLastError()==ERROR_IO_PENDING)) { Memo1->Lines->Add("Waiting for event"); WaitForSingleObject(OL.hEvent, INFINITE); } if(EventMask || EV_RXCHAR) Memo1->Lines->Add("Event RXCHAR"); DWORD ErrorMask = 0; COMSTAT CStat; ClearCommError(hcom, &ErrorMask, &CStat); DWORD quelen = CStat.cbInQue; DWORD dwReaded = 0; i = ReadFile(hcom, (void*)cmd, quelen, &dwReaded, &OL); if(EventMask & EV_RXCHAR) Memo1->Lines->Add(cmd); dwread = dwReaded; if( dwReaded == 0 && GetLastError() == ERROR_IO_PENDING ) { i = GetOverlappedResult(hcom, &OL, &dwReaded, FALSE) ; } else { if (dwReaded>0) //???? ????????? ?????? Memo1->Lines->Add(""); else Memo1->Lines->Add("error reciving"); } PurgeComm(hcom, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR); EventMask=0; ResetEvent(OL.hEvent); }while(dwread==0); CloseHandle(hcom);