我做了个写串口的程序,用API的方式开发的,串口句柄已经返回成功,可是向串口写程序老是失败,大家帮我改改,看我错在哪里?重点看看Init_port,SendCommd那两个函数,全部代码如下:
1.public bool Init_port(string Port_address,Int32 BaudRate,byte Parity,byte StopBits,bool bthread)
{ Win32Com.DCB dcb=new TcpIP.Win32Com.DCB();
byte ByteSize=8;//数据位
hPort=Win32Com.CreateFile(Port_address,Win32Com.GENERIC_READ|Win32Com.GENERIC_WRITE,0,
IntPtr.Zero ,Win32Com.OPEN_EXISTING,Win32Com.FILE_ATTRIBUTE_NORMAL|Win32Com.FILE_FLAG_OVERLAPPED,IntPtr.Zero);
if(hPort==(IntPtr)Win32Com.INVALID_HANDLE_VALUE)
{
return false;
} comMask=Win32Com.SetCommMask(hPort,Win32Com.EV_RXCHAR|Win32Com.EV_TXEMPTY);
comBuf=Win32Com.SetupComm(hPort,1024,512);
dcb.DCBlength=Marshal.SizeOf(dcb);
comState=Win32Com.GetCommState(hPort,ref dcb);
dcb.BaudRate=BaudRate;
dcb.fBinary=1;
//dcb.fOutxDsrFlow=0;//DSR output flow control 
//dcb.fDtrControl=Win32Com.DTR_CONTROL_ENABLE;//DTR flow control type
//dcb.fDsrSensitivity=1;//DSR sensitivity 
//dcb.fOutX=1;//XON/XOFF out flow control 
//dcb.fInX=1;//XON/XOFF in flow control 
//dcb.fErrorChar=1;//enable error replacement 
//dcb.fRtsControl=Win32Com.RTS_CONTROL_ENABLE;//RTS flow control 
dcb.ByteSize=ByteSize;//number of bits/byte, 4-8
dcb.Parity=0;//Parity==none
dcb.StopBits=1;//停止位
dcb.XonChar=(char)ASCII.DC1;
dcb.XoffChar=(char)ASCII.DC3;
bool lb=Win32Com.SetCommState(hPort,ref dcb);
if(lb==false)
{

 
Win32Com.CloseHandle(hPort);
return false;
}
Win32Com.COMMTIMEOUTS CommTimeOuts=new TcpIP.Win32Com.COMMTIMEOUTS();
CommTimeOuts.ReadIntervalTimeout=0xffffffff;
CommTimeOuts.ReadTotalTimeoutMultiplier=0;
CommTimeOuts.ReadTotalTimeoutConstant=0;
CommTimeOuts.WriteTotalTimeoutMultiplier=0;
CommTimeOuts.WriteTotalTimeoutConstant=100;
Win32Com.SetCommTimeouts(hPort,ref CommTimeOuts); Win32Com.PurgeComm(hPort,Win32Com.PURGE_TXCLEAR);
Win32Com.PurgeComm(hPort,Win32Com.PURGE_RXCLEAR);
//在这里可以创建一个线程
if(bthread==true)
{
th=new Thread(new ThreadStart(GetCommWatchThread));
th.Start();
}
return true;
}
2. public bool SendCommd(string cmdSend)
{
UInt32 sent;
int CmdLength;
byte[] sendbyte=new byte[1024];
sendbyte=System.Text.Encoding.ASCII.GetBytes(cmdSend.ToCharArray());
CmdLength=sendbyte.GetLength(0);
Win32Com.EscapeCommFunction(hPort,Win32Com.SETRTS);//???
bool lbfile=Win32Com.WriteFile(hPort,sendbyte,(UInt32)CmdLength,out sent,ptrUWO);
if(lbfile==false)
{
return false;
}

else
{

return true;
}
}