var dcb:TDCB; tmouts: TCommTimeouts;//打开串口 hCom := CreateFile('com1', generic_write+generic_read, 0, nil, open_existing, file_attribute_normal, 0); Assert(hCom<>INVALID_HANDLE_VALUE,'Oper port failure');//设置串口参数 GetCommState(hCom,dcb); dcb.BaudRate := 9600; dcb.ByteSize := 8; dcb.Parity := NOPARITY; dcb.StopBits := ONESTOPBIT; SetCommState(hCom,dcb);//设置收发超时 tmouts.ReadIntervalTimeout := 10; tmouts.ReadTotalTimeoutMultiplier := 1; tmouts.ReadTotalTimeoutConstant := 100; tmouts.WriteTotalTimeoutMultiplier := 1; tmouts.WriteTotalTimeoutConstant := 0; SetCommTimeouts(hCom,tmouts);//设置收发缓冲区大小 SetupComm(hCom,512,512);//向设备发数据 bufSend为发送缓冲区,是字符或字节数组,按你的设备协议填充 WriteFile(hCom,bufSend,bytesToSend,bytesToSended,nil);//等一会收数据(1秒) sleep(1000);//收数据,bufRec为接收缓冲区,bufRecbytesReaded为实际收到的字节数 ReadFile(hCom,bufRec,bytesToRead,bytesReaded,nil);//然后按协议进行解析数据 if bytesReaded>0 then begin //解析数据 end;......//操作完成或者退出程序时,关闭串口 CloseHandle(hCom);差不多这样子。实际编程时,一般用线程来发送/接收数据