波特率: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"));

解决方案 »

  1.   

    #region 打開串口
    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;
    }
      

  2.   

    可能是你的串口初始化失敗的原因吧
    看看用mode看看是不是初始化成功!
      

  3.   

    我想应该是你在找开COM口时出的问题,请你在每次打开COM口时请Close; 我也出现过这样的问题,发送一两次可以,再发发送就不行了。