是这样的 我在网上弄了一个代码,串口通讯的,出现的问题在于 这个串口通讯的代码 不好用。如何不好用法01 单独运行它 ,发送不出去数据。
02 当我开启串口测试助手之后,再把串口测试助手关闭,在运行就可以用03 我问了 好多人,说 可能是初始化的问题,或者是串口到底有没有打开。
大家能帮忙解决一下这个问题吗?

解决方案 »

  1.   

    代码 在此 
    cardCom.PortNum = 1;
                cardCom.BaudRate = 57600;
                cardCom.ByteSize = 8;
                cardCom.Parity = 0;
                cardCom.StopBits = 1;
                cardCom.ReadTimeout = 500;
                if (this.OpenCom())
                {
                    msg.AppendText("串口初始化成功……\r\n");
                }
                else
                {
                    msg.AppendText("串口初始化失败!\r\n");
                }剩下的代码大家可能都知道,就是在网上下的通用版本!
      

  2.   

    SerialPort 先设置  PortName (Com口) ;BaudRate(波特率);DataBits(数据位);StopBits (停止位)   然后设置DataReceived事件  例如:comPort.DataReceived += new SerialDataReceivedEventHandler(comPort_DataReceived);  然后打开串口OpenPort();  
      

  3.   

    1.检查COM口号对不对
    2.检查参数,停止位、校验位、数据位
    3.降低波特率,比如9600、4800
    4.延长Timeout,或者取消Timeout再试
      

  4.   

    建议楼主检查一下CardCom和this.Open()的关系,感觉你对前者进行了参数设置,但是Open的时候是否就是调用了前者呢?因为没看到你的Open()时有什么参数?
      

  5.   

    补充一下:也许把下面这里改一下试试
    if (this.OpenCom())
    改为
    if (cardCom.OpenCom())
      

  6.   

    using System;
    using System.IO.Ports;namespace WinTempApp
    {
       public class PortData
        {
            public event PortDataReceivedEventHandle Received;
            public event SerialErrorReceivedEventHandler Error; 
            public SerialPort port;
            public bool ReceiveEventFlag = false;  //接收事件是否有效 false表示有效
            public bool OpenPortLost;
            private string logCaption = "PortData";
            public PortData(string sPortName, int baudrate,Parity parity,StopBits stopbit)
            {
                try
                {
                    port = new SerialPort(sPortName, baudrate, parity, 8, stopbit);
                    port.RtsEnable = true;
                    port.ReadTimeout = 3000;
                    port.DataReceived += DataReceived;
                    port.ErrorReceived += ErrorEvent;
                    OpenPortLost = false;
                }
                catch (Exception ex) 
                {
                    OpenPortLost = true;
                    LogFile.LogMessage(String.Format("{0}:{1}", logCaption, ex.Message), AppEnum.Exception.ToString());
                }
                
            }        ~PortData()
            {
                Close();
            }
           /// <summary>
           /// COM端口打开
           /// </summary>
            public void Open()
            {
                if (!port.IsOpen)
                {           
                    port.Open();
                }
            }        public void Close()
            {
                try
                {
                    if (port.IsOpen)
                    {
                        port.Close();
                    }
                }
                catch (Exception ex)
                {
                    LogFile.LogMessage(String.Format("{0}:{1}", logCaption, ex.Message), AppEnum.Exception.ToString());
                }
             
            }
            //数据发送
            public void SendData(byte[] data)
            {
                try
                {
                    if (port.IsOpen)
                    {
                        port.Write(data, 0, data.Length);
                    }
                }
                catch (Exception ex) 
                {
                    LogFile.LogMessage(String.Format("{0}:{1}", logCaption, ex.Message), AppEnum.Exception.ToString());
                }
            }
            public void SendData(byte[] data,int offset,int count)
            {
                try
                {
                    if (port.IsOpen)
                    {
                        port.Write(data, offset, count);
                    }
                }
                catch (Exception ex)
                {
                    LogFile.LogMessage(String.Format("{0}:{1}", logCaption, ex.Message), AppEnum.Exception.ToString());
                }        }        
            //发送命令
            public int SendCommand(byte[] SendData, ref  byte[] ReceiveData,int Overtime)
            {
                try
                {
                    if (port.IsOpen)
                    {
                        ReceiveEventFlag = true;        //关闭接收事件
                        port.DiscardInBuffer();         //清空接收缓冲区                 
                        port.Write(SendData, 0, SendData.Length);
                        int num = 0, ret = 0;
                        while (num++ < Overtime)
                        {
                            if (port.BytesToRead >= ReceiveData.Length) break;
                            System.Threading.Thread.Sleep(1);
                        }
                        if (port.BytesToRead >= ReceiveData.Length)
                            ret = port.Read(ReceiveData, 0, ReceiveData.Length);
                        ReceiveEventFlag = false;       //打开事件
                        return ret;
                    }
                }
                catch (Exception ex)
                {
                    LogFile.LogMessage(String.Format("{0}:{1}", logCaption, ex.Message), AppEnum.Exception.ToString());
                }
               
                return -1;
            }        public void ErrorEvent(object sender, SerialErrorReceivedEventArgs e)
            {
                if (Error != null) Error(sender, e);
            }
            //数据接收
            public void DataReceived(object sender, SerialDataReceivedEventArgs e)
            {
                //禁止接收事件时直接退出
                if (ReceiveEventFlag) return;            byte[] data = new byte[port.BytesToRead];
                port.Read(data, 0, data.Length);
                if (Received != null) Received(sender, new PortDataReciveEventArgs(data));
            }        public bool IsOpen()
            {
                return port.IsOpen;
            }
        }
        public delegate void PortDataReceivedEventHandle(object sender, PortDataReciveEventArgs e);
        public class PortDataReciveEventArgs : EventArgs
        {
            public PortDataReciveEventArgs()
            {
                Data = null;
            }        public PortDataReciveEventArgs(byte[] data)
            {
                Data = data;
            }        public byte[] Data { get; set; }
        }
    }
      

  7.   

    11楼。。SerialPort.Open()方法本来没有参数。。而且也没有重载