📄 mycom.cs
字号:
private static extern bool CloseHandle(
int hObject // handle to object
);
public void Open()
{
DCB dcbCommPort = new DCB();
COMMTIMEOUTS ctoCommPort = new COMMTIMEOUTS();
//QUEUESIZE qsCommPort = new QUEUESIZE();
// 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 QUEUESIZE.
SetupComm(hComm, 4096,4096);
//////////////////////////////////////////////////////////////////////////
//SET THE PURGE
//1, Purge mask=TXABORT: Read requests
//2, Purge mask=RXABORT: Receive buffer
//3, Purge mask=TXABORT: Read requests, RXABORT: Receive buffer
//4, Purge mask=TXCLEAR: Write requests
//5, Purge mask=TXABORT: Read requests, TXCLEAR: Write requests
//6, Purge mask=RXABORT: Receive buffer, TXCLEAR: Write requests
//7, Purge mask=TXABORT: Read requests, RXABORT: Receive buffer, TXCLEAR: Write requests
//8, Purge mask=RXCLEAR: Write buffer
//9, Purge mask=TXABORT: Read requests, RXCLEAR: Write buffer
//10, Purge mask=RXABORT: Receive buffer, RXCLEAR: Write buffer
//11, Purge mask=TXABORT: Read requests, RXABORT: Receive buffer, RXCLEAR: Write buffer
//12, Purge mask=TXCLEAR: Write requests, RXCLEAR: Write buffer
//13, Purge mask=TXABORT: Read requests, TXCLEAR: Write requests, RXCLEAR: Write buffer
//14, Purge mask=RXABORT: Receive buffer, TXCLEAR: Write requests, RXCLEAR: Write buffer
//15, Purge mask=TXABORT: Read requests, RXABORT: Receive buffer, TXCLEAR: Write requests, RXCLEAR: Write buffer
PurgeComm(hComm, 15);
// SET THE COMM TIMEOUTS.
GetCommTimeouts(hComm, ref ctoCommPort);
ctoCommPort.ReadIntervalTimeout = 100;
ctoCommPort.ReadTotalTimeoutConstant = ReadTimeout;
ctoCommPort.ReadTotalTimeoutMultiplier = 0;
ctoCommPort.WriteTotalTimeoutMultiplier = 0;
ctoCommPort.WriteTotalTimeoutConstant = WriteTimeout;
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; //NOPARITY
dcbCommPort.ByteSize = ByteSize;
dcbCommPort.StopBits = StopBits;
SetCommState(hComm, ref dcbCommPort);
//////////////////////////////////////////////////////////////////////////
//设置SET THE COMM WAITMASK
/*
//1,2,3…40,40以后未整理
WaitMask=RXCHAR: Any Character received
WaitMask=RXFLAG: Received certain character
WaitMask=RXCHAR: Any Character received, RXFLAG: Received certain character
WaitMask=TXEMPTY: Transmitt Queue Empty
WaitMask=RXCHAR: Any Character received, TXEMPTY: Transmitt Queue Empty
WaitMask=RXFLAG: Received certain character, TXEMPTY: Transmitt Queue Empty
WaitMask=RXCHAR: Any Character received, RXFLAG: Received certain character,
WaitMask=CTS: CTS changed state
WaitMask=RXCHAR: Any Character received, CTS: CTS changed state
WaitMask=RXFLAG: Received certain character, CTS: CTS changed state
WaitMask=RXCHAR: Any Character received, RXFLAG: Received certain character, CTS:
WaitMask=TXEMPTY: Transmitt Queue Empty, CTS: CTS changed state
WaitMask=RXCHAR: Any Character received, TXEMPTY: Transmitt Queue Empty, CTS:
WaitMask=RXFLAG: Received certain character, TXEMPTY: Transmitt Queue Empty, CTS:
WaitMask=RXCHAR: Any Character received, RXFLAG: Received certain character,
WaitMask=DSR: DSR changed state
WaitMask=RXCHAR: Any Character received, DSR: DSR changed state
WaitMask=RXFLAG: Received certain character, DSR: DSR changed state
WaitMask=RXCHAR: Any Character received, RXFLAG: Received certain character, DSR:
WaitMask=TXEMPTY: Transmitt Queue Empty, DSR: DSR changed state
WaitMask=RXCHAR: Any Character received, TXEMPTY: Transmitt Queue Empty, DSR:
WaitMask=RXFLAG: Received certain character, TXEMPTY: Transmitt Queue Empty, DSR:
WaitMask=RXCHAR: Any Character received, RXFLAG: Received certain character, 004150:
WaitMask=CTS: CTS changed state, DSR: DSR changed state
WaitMask=RXCHAR: Any Character received, CTS: CTS changed state, DSR: DSR changed
WaitMask=RXFLAG: Received certain character, CTS: CTS changed state, DSR: DSR
WaitMask=RXCHAR: Any Character received, RXFLAG: Received certain character, CTS: CTS changed state, DSR: DSR changed state
WaitMask=TXEMPTY: Transmitt Queue Empty, CTS: CTS changed state, DSR: DSR changed state
WaitMask=RXCHAR: Any Character received, TXEMPTY: Transmitt Queue Empty, CTS: CTS changed state, DSR: DSR changed state
WaitMask=RXFLAG: Received certain character, TXEMPTY: Transmitt Queue Empty, CTS: CTS changed state, DSR: DSR changed state
WaitMask=RXCHAR: Any Character received, RXFLAG: Received certain character, TXEMPTY: Transmitt Queue Empty, CTS: CTS changed state, DSR: DSR changed state
WaitMask=RLSD: RLSD changed state
WaitMask=RXCHAR: Any Character received, RLSD: RLSD changed state
WaitMask=RXFLAG: Received certain character, RLSD: RLSD changed state
WaitMask=RXCHAR: Any Character received, RXFLAG: Received certain character, RLSD: RLSD changed state
WaitMask=TXEMPTY: Transmitt Queue Empty, RLSD: RLSD changed state
WaitMask=RXCHAR: Any Character received, TXEMPTY: Transmitt Queue Empty, RLSD: RLSD changed state
WaitMask=RXFLAG: Received certain character, TXEMPTY: Transmitt Queue Empty, RLSD: RLSD changed state
WaitMask=RXCHAR: Any Character received, RXFLAG: Received certain character, TXEMPTY: Transmitt Queue Empty, RLSD: RLSD changed state
WaitMask=CTS: CTS changed state, RLSD: RLSD changed state
//416, WaitMask=RLSD: RLSD changed state, ERR: Line status error occurred, RING: Ring signal detected
**/
//////////////////////////////////////////////////////////////////////////
SetCommMask(hComm, 416);
Opened = true;
}
public void Close()
{
//////////////////////////////////////////////////////////////////////////
//SET THE PURGE
PurgeComm(hComm, 10);
PurgeComm(hComm, 5);
PurgeComm(hComm, 10);
PurgeComm(hComm, 5);
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();
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();
WriteFile(hComm, WriteBytes, WriteBytes.Length, ref BytesWritten, ref ovlCommPort);
}
else
{
throw (new ApplicationException("Comm Port Not Open"));
}
return BytesWritten;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -