波特率:9600
数据位:8位
奇偶校验:偶校验,1位
停止位:1位
允许工作信号:AA
停止工作信号:BC
以上要求用JustinIO.cs应该怎样用呢?
以下是我写的程序,但是到发送数据的时候程序会变成假死状态,不知道哪里有问题。
com.PortNum ="COM1"; //端口号
com.BaudRate = 9600; //串口通信波特率
com.ByteSize = 8; //数据位
com.Parity = 1; //奇偶校验
com.StopBits = 1;//停止位
com.ReadTimeout = 1000; //读超时
com.Open();
com.Write(Encoding.ASCII.GetBytes("AA"));
数据位:8位
奇偶校验:偶校验,1位
停止位:1位
允许工作信号:AA
停止工作信号:BC
以上要求用JustinIO.cs应该怎样用呢?
以下是我写的程序,但是到发送数据的时候程序会变成假死状态,不知道哪里有问题。
com.PortNum ="COM1"; //端口号
com.BaudRate = 9600; //串口通信波特率
com.ByteSize = 8; //数据位
com.Parity = 1; //奇偶校验
com.StopBits = 1;//停止位
com.ReadTimeout = 1000; //读超时
com.Open();
com.Write(Encoding.ASCII.GetBytes("AA"));
public void OpenPort1(string lpFileName,int baudRate,byte parity, byte byteSize, byte stopBits)
{ //DCB dcbCommPort = new DCB();
COMMTIMEOUTS ctoCommPort = new COMMTIMEOUTS(); // OPEN THE COMM PORT.
hComm = CreateFile(lpFileName ,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("非法操作不能打開串口!"));
} // SET THE COMM TIMEOUTS.
GetCommTimeouts(hComm,ref ctoCommPort);
ctoCommPort.ReadTotalTimeoutConstant = 1000;
ctoCommPort.ReadTotalTimeoutMultiplier = 0;
ctoCommPort.WriteTotalTimeoutMultiplier = 0;
ctoCommPort.WriteTotalTimeoutConstant = 0;
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.
DCB dcbCommPort = new DCB();
dcbCommPort.DCBlength = Marshal.SizeOf(dcbCommPort);
GetCommState(hComm, ref dcbCommPort); //取得端口的狀態 dcbCommPort.BaudRate = baudRate;
dcbCommPort.Parity = parity;
dcbCommPort.ByteSize = byteSize;
dcbCommPort.StopBits = stopBits; if (!SetCommState(hComm, ref dcbCommPort))
{
//uint ErrorNum=GetLastError();
throw(new ApplicationException("非法操作不能打開串口!"));
}
//unre to see if setting took correctly
//DCB dcbCommPort2 = new DCB();
//GetCommState(hComm, ref dcbCommPort2);
bOpened = true;
} #endregionOpenPort1(Point,BaudRate,Convert.ToByte('N'),8,1);
// 往端口寫數據
public bool WritePort(byte[] WriteBytes)
{
if(hComm == INVALID_HANDLE_VALUE) //如果端口未打開
{
return false;
} COMSTAT ComStat = new COMSTAT();
int dwErrorFlags = 0; ClearCommError(hComm, ref dwErrorFlags, ref ComStat);
if (dwErrorFlags != 0)
PurgeComm(hComm, PURGE_TXCLEAR | PURGE_TXABORT); OVERLAPPED ovlCommPort = new OVERLAPPED();
int BytesWritten = 0;
// SET THE COMM TIMEOUTS.
COMMTIMEOUTS ctoCommPort = new COMMTIMEOUTS();
GetCommTimeouts(hComm,ref ctoCommPort);
ctoCommPort.ReadIntervalTimeout = Int32.MaxValue;
ctoCommPort.ReadTotalTimeoutConstant = 0;
ctoCommPort.ReadTotalTimeoutMultiplier = 0;
ctoCommPort.WriteTotalTimeoutMultiplier = 10;
ctoCommPort.WriteTotalTimeoutConstant = 3000;
if(!SetCommTimeouts(hComm,ref ctoCommPort))
return false;
WriteFile(hComm, WriteBytes, WriteBytes.Length, ref BytesWritten, ref ovlCommPort);
if(BytesWritten>0)
return true;
else
return false;
}
看看用mode看看是不是初始化成功!