我使用vs2005,使用一个串口类来接收数据,但是使用我的程序来接收最高为一直都为0,使用调试助手再运行我的程序,可以正确接收数据,请问高手这是哪里出了问题,是不是哪个参数没有设置正确???或其它什么问题,我想硬件是没有问题的,因为用调试助手能够正确收数。解决问题马上给分。
解决方案 »
- repeater 读数据时怎么自动换一行才显示内容 显示的内容是fck添加的内容
- 关于datagridview选取行的问题!请高手指点!!
- 如何控制每次只拷贝一个文件?
- 在C#中如何察看变量的值
- Timer控件的Tick与Elapsed事件有什么区别?
- 两个dropdownlist连动问题!急
- 如何向需要身份验证的服务器上传文件
- C#疯狂学习群 2820471 不爱学习者勿入!!!
- 难道C#中没有范型吗?不能使用template?
- 发布软件24点大师
- ◆◇◆ 关于使用 C# 进行 Active Directory 编程所引发的“该服务器不愿意处理该请求”异常 ◆◇◆
- 全部积分球vpn拨号软件源码
public void Open()
{ DCB dcbCommPort = new DCB();
COMMTIMEOUTS ctoCommPort = new COMMTIMEOUTS();
// OPEN THE COMM PORT.
hComm = CreateFile("COM" + PortNum, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0); // IF THE PORT CANNOT BE OPENED, BAIL OUT.
if (hComm == INVALID_HANDLE_VALUE)
{
throw (new ApplicationException("Comm Port Can Not Be Opened"));
} // SET THE COMM TIMEOUTS. GetCommTimeouts(hComm, ref ctoCommPort);
ctoCommPort.ReadTotalTimeoutConstant = ReadTimeout;
ctoCommPort.ReadTotalTimeoutMultiplier = 100;
ctoCommPort.WriteTotalTimeoutMultiplier =100;
ctoCommPort.WriteTotalTimeoutConstant = 100;
ctoCommPort.ReadIntervalTimeout = 100;
SetCommTimeouts(hComm, ref ctoCommPort);
// SET BAUD RATE, PARITY, WORD SIZE, AND STOP BITS.
// THERE ARE OTHER WAYS OF DOING SETTING THESE BUT THIS IS THE EASIEST.
// IF YOU WANT TO LATER ADD CODE FOR OTHER BAUD RATES, REMEMBER
// THAT THE ARGUMENT FOR BuildCommDCB MUST BE A POINTER TO A STRING.
// ALSO NOTE THAT BuildCommDCB() DEFAULTS TO NO HANDSHAKING. dcbCommPort.DCBlength = Marshal.SizeOf(dcbCommPort);
GetCommState(hComm, ref dcbCommPort);
dcbCommPort.BaudRate = BaudRate;
dcbCommPort.Parity = Parity;
dcbCommPort.ByteSize = ByteSize;
dcbCommPort.StopBits = StopBits;
dcbCommPort.fParity = 0;
dcbCommPort.fBinary = 1;
dcbCommPort.fDtrControl = 0;
dcbCommPort.fRtsControl = 0;
dcbCommPort.fOutX = dcbCommPort.fInX = dcbCommPort.fTXContinueOnXoff = 0;
SetCommState(hComm, ref dcbCommPort);
PurgeComm(hComm, PURGE_RXCLEAR | PURGE_TXCLEAR | PURGE_RXABORT | PURGE_TXABORT);
Opened = true;
Thread th = new Thread( new ThreadStart( Execut ));
th.Start(); } private void Execut()
{
while ( Done )
{
byte [] Buffer = this.Read( 128);
if ( Buffer.Length > 0 )
{
OnReadEvent( Buffer );
}
}
} private void OnReadEvent( byte [] Buffer )
{
if ( ReadEvent != null )
{
ReadEvent( this , Buffer );
}
} public void Close()
{
Done = false;
if (hComm != INVALID_HANDLE_VALUE)
{
CloseHandle(hComm);
Opened = false;
}
} public byte[] Read(int NumBytes)
{
byte[] BufBytes;
byte[] OutBytes;
BufBytes = new byte[NumBytes];
if (hComm != INVALID_HANDLE_VALUE)
{
OVERLAPPED ovlCommPort = new OVERLAPPED();
ovlCommPort.Offset = 0;
ovlCommPort.OffsetHigh = 0;
int BytesRead = 0;
ReadFile(hComm, BufBytes, NumBytes, ref BytesRead, ref ovlCommPort);
OutBytes = new byte[BytesRead];
Array.Copy(BufBytes, OutBytes, BytesRead);
}
else
{
throw (new ApplicationException("Comm Port Not Open"));
}
return OutBytes;
} public int Write(byte[] WriteBytes)
{
int BytesWritten = 0;
if (hComm != INVALID_HANDLE_VALUE)
{
OVERLAPPED ovlCommPort = new OVERLAPPED();
ovlCommPort.Offset = 0;
ovlCommPort.OffsetHigh = 0; WriteFile(hComm, WriteBytes, WriteBytes.Length, ref BytesWritten, ref ovlCommPort);
}
else
{
throw (new ApplicationException("Comm Port Not Open"));
}
return BytesWritten;
} public string ByteToString(byte[] InBytes)
{
string StringOut = "";
foreach (byte InByte in InBytes)
{
StringOut = StringOut + String.Format("{0:X2} ", InByte);
}
return StringOut;
}
public static byte[] StringToByte(string InString)
{
string[] ByteStrings;
ByteStrings = InString.Split(" ".ToCharArray());
byte[] ByteOut;
ByteOut = new byte[ByteStrings.Length - 1];
for (int i = 0; i == ByteStrings.Length - 1; i++)
{
//ByteOut[i] = ("0x" + ByteStrings[i]).ToByte();
ByteOut[i] = Byte.Parse(("0x" + ByteStrings[i]));
}
return ByteOut;
}
private void OnReadEvent( byte [] Buffer )
{
if ( ReadEvent != null )
{
ReadEvent( this , Buffer );
}
}