我有个delphi程序,控件一个机器,写串口能返回数据,用的是SPCOMM
我用.NET,就返不回数据,我先后用了serialport ,MSCOM,和API,都不行,不知道是什么原因,请高手帮我看看,或者提供一个.NET的串口控件,谢谢.
这是我用API写的.
// OPEN THE COMM PORT.
hComm = CreateFile("COM1", GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);
// IF THE PORT CANNOT BE OPENED, BAIL OUT.
if (hComm == INVALID_HANDLE_VALUE)
{
return ;
}
SetupComm(hComm, 4096, 4096);
// SET THE COMM TIMEOUTS.
COMMTIMEOUTS ctoCommPort = new COMMTIMEOUTS();
GetCommTimeouts(hComm, ref ctoCommPort);
ctoCommPort.ReadIntervalTimeout = 100;
ctoCommPort.ReadTotalTimeoutConstant = 0;
ctoCommPort.ReadTotalTimeoutMultiplier = 0;
ctoCommPort.WriteTotalTimeoutMultiplier = 0;
ctoCommPort.WriteTotalTimeoutConstant = 0;
SetCommTimeouts(hComm, ref ctoCommPort);
DCB dcbCommPort = new DCB();
dcbCommPort.DCBlength = Marshal.SizeOf(dcbCommPort);
GetCommState(hComm, ref dcbCommPort);
dcbCommPort.BaudRate = 4800;
dcbCommPort.Parity = 0;
//dcbCommPort.ByteSize = byteSize;
dcbCommPort.ByteSize = 8;
dcbCommPort.StopBits = 0;
bool myb = SetCommState(hComm, ref dcbCommPort); PurgeComm(hComm, PURGE_RXCLEAR | PURGE_RXABORT);
PurgeComm(hComm, PURGE_TXCLEAR | PURGE_TXABORT); bOpened = true;
byte[] WriteBytes ={ 0x00, 0x1E, 0x0D, 0x0A };
OVERLAPPED ovlCommPort = new OVERLAPPED();
int BytesWritten = 0;
WriteFile(hComm, WriteBytes, WriteBytes.Length, ref BytesWritten, ref ovlCommPort);
我用.NET,就返不回数据,我先后用了serialport ,MSCOM,和API,都不行,不知道是什么原因,请高手帮我看看,或者提供一个.NET的串口控件,谢谢.
这是我用API写的.
// OPEN THE COMM PORT.
hComm = CreateFile("COM1", GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);
// IF THE PORT CANNOT BE OPENED, BAIL OUT.
if (hComm == INVALID_HANDLE_VALUE)
{
return ;
}
SetupComm(hComm, 4096, 4096);
// SET THE COMM TIMEOUTS.
COMMTIMEOUTS ctoCommPort = new COMMTIMEOUTS();
GetCommTimeouts(hComm, ref ctoCommPort);
ctoCommPort.ReadIntervalTimeout = 100;
ctoCommPort.ReadTotalTimeoutConstant = 0;
ctoCommPort.ReadTotalTimeoutMultiplier = 0;
ctoCommPort.WriteTotalTimeoutMultiplier = 0;
ctoCommPort.WriteTotalTimeoutConstant = 0;
SetCommTimeouts(hComm, ref ctoCommPort);
DCB dcbCommPort = new DCB();
dcbCommPort.DCBlength = Marshal.SizeOf(dcbCommPort);
GetCommState(hComm, ref dcbCommPort);
dcbCommPort.BaudRate = 4800;
dcbCommPort.Parity = 0;
//dcbCommPort.ByteSize = byteSize;
dcbCommPort.ByteSize = 8;
dcbCommPort.StopBits = 0;
bool myb = SetCommState(hComm, ref dcbCommPort); PurgeComm(hComm, PURGE_RXCLEAR | PURGE_RXABORT);
PurgeComm(hComm, PURGE_TXCLEAR | PURGE_TXABORT); bOpened = true;
byte[] WriteBytes ={ 0x00, 0x1E, 0x0D, 0x0A };
OVERLAPPED ovlCommPort = new OVERLAPPED();
int BytesWritten = 0;
WriteFile(hComm, WriteBytes, WriteBytes.Length, ref BytesWritten, ref ovlCommPort);
用.NET的就不行,不知道为什么.
我用mscomm控件,在VC下用,Delphi下用,.Net下也用,目前还是正常的。串口API写起来太复杂,看起来累