每个串口数据都是一样的...用的MOXA的串口服务器在主机上虚拟了多个串口,轮询方式没问题了.5秒中轮询一个,那10个设备就要等50秒,时间太长了....我想用多个串口同时发送数据,每个串口独立工作,间隔10秒发慢点也行

解决方案 »

  1.   

    如果是一个串口接受 许多数据,来判断前面几位。
    判断两个字节,如果是 xx yy,xx是地址,yy是功能码,然后开始校验。 
    读出一条完整的数据,存储,然后把缓冲区的删除。
    接着判断,如果是 xx zz,zz是别的类型的数据,校验,取出完整的一条数据。
    。如果是多个串口,每个串口接受的数据都是同一类型的,那能分开写DataReceived
      

  2.   

    如何分开写DataReceived,要动态注册的..
      

  3.   

    MOXA的串口服务器和MOXA多串口卡一样不。是不是一个串口接上,拖上了好几个串口,装上驱动后,变成COM1、COM2、COM3等等。
      

  4.   

    comm1.DataReceived += comm1_DataReceived;
    如果换数据了,“-=”。+=别新的事件
      

  5.   

    comm1.DataReceived += comm1_DataReceived;
    处理每条数据,比如我接受的都是9个字节的。
    然后校验,如果数据正确,则取出 数据位,转换为十进制显示。
    mb.CRC16(binary_crc)是crc校验后的两个字节的校验码        void comm1_DataReceived(object sender, SerialDataReceivedEventArgs e)
            {
                try
                {
                    int n = comm.BytesToRead;
                    byte[] buf = new byte[n];              
                    comm.Read(buf, 0, n);
                    buffer.AddRange(buf);
                    if (buffer.Count==9)
                    {
                        byte[] binary_data_1 = new byte[9];
                        byte[] binary_crc=new byte [7];
                        buffer.CopyTo(0, binary_data_1, 0, 9);
                        buffer.CopyTo(0, binary_crc, 0, 7);
                        buffer.Clear();
                        modbus mb = new modbus();
                        if (mb.CRC16(binary_crc)[0] == binary_data_1[8] && mb.CRC16(binary_crc)[1] == binary_data_1[7])
                        {
                            string data = binary_data_1[3].ToString("X2") + binary_data_1[4].ToString("X2") + binary_data_1[5].ToString("X2") + binary_data_1[6].ToString("X2");
                            int hex = Convert.ToInt32(data, 16);
                            this.Invoke((EventHandler)(delegate { this.textBox2.Text = hex.ToString(); }));
                        }
                    }
                }
                finally
                {
                    //多串口,要注意细节。延时啊什么的要调节好。
                }
            }
      

  6.   

    串口是动态的,是我从数据库中搜出来,有多少个外接设备,再定义多少个SerialPort的...