如题,就是要验证串口和硬件是否已经连接上的winform代码

解决方案 »

  1.   

    这个很难。因为如果是哑终端,现在基本没有哑终端除非是鼠标这类的。
    下位机可能不发数据,这时候你无法知道是否连上了。
    只能检查是否有数据。
    创建一个serialport对象,添加DataReceived事件,开一个定时器,假设一个超时值设置给timer的Interval,serialport.open,timer.enabled = true.
    增加一个标记,每次DataReceived方法中设置为有数据,每次Timer的事件中检查标记,连续2次没有数据则认定为设备断开连接。并每次检查后标记重新设置为待检查。我希望你能明白我再说啥,我就不用写例子给你了。
      

  2.   

       private SerialPort m_Port = null;
             
               try
                {
                    m_Port.PortName = Com;//串口号
                    m_Port.BaudRate = bote;//波特率
                   // m_Port.Handshake = Handshake.RequestToSendXOnXOff;
                    m_Port.RtsEnable = true; //关键 U口转串口设备
                    m_Port.DtrEnable = true;
                    m_Port.ReceivedBytesThreshold = 1;
                    m_Port.Open();                m_Port.DataReceived += new SerialDataReceivedEventHandler(m_Port_DataReceived); 
                }
                catch (Exception ex)
                {
                    MessageBox.Show("串口打开失败,系统不能运行,系统提示:" + ex.Message + "!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Warning);
     
                }可以验证串口是否存在。。如果要验证是否与设备连接,必须要和设备 数据发送并回复。
      

  3.   

    判断端口是否打开
    serialPort.IsOpen == false
      

  4.   

    如果你只检测一次,你可以写在任何一个地方调用,例如按钮click事件
    private void button6_Click(object sender, EventArgs e)
    {
        SerialPort serial = new SerialPort("COM1");
        try
        {
            serial.Open();
        }
        catch
        {
            MessageBox.Show("串口被占用,请关闭其他串口通讯软件后重试。");
            return;
        }
        int tick = Environment.TickCount;
        //因为波特率是按秒算的,我们就检测1秒好了
        while (Environment.TickCount-tick<1000)
        {
            if (serial.BytesToRead > 0)
            {
                MessageBox.Show("有设备连接在串口,不保证是我要的,但至少有数据来了。");
                return;
            }
            Application.DoEvents();
        }
        MessageBox.Show("请确认设备是否连接正确。");
    }如果处理数据时候检测设备是否连接好,那就要用上面给你的方法。
      

  5.   

    我顶,逍遥的!!!!!   

  6.   

    private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
            {
                byte[] DataRecivce = new byte[32];
                if (serialPort1.IsOpen)
                {
                        try
                        {
                            serialPort1.Read(DataRecivce, 0, 32);
                        }
                        catch
                        {
                            MessageBox.Show(this, "打开错误", "通讯失败!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            return;
                        }
                }
            }
      

  7.   

    电脑的实体COM口不过是一个转接设备一样,即时没有任何设备接上这个口,一样可是打开COM口,作你的数据处理,所以如果你插上的设备不支持数据回传的话,就没有办法了,如果你的设备在接受到某个命令后,会回传数据到COM口,就可以验证你的设备是否连接上了,或者其它数据接受方式