private void WriteByteToSerialPort1(TextBox MyTextBox, TextBox ChanTextBox)
        {
           
                try
                {
                    if (Convert.ToByte(MyTextBox.Text) > 200)//为什么是200?
                    {
                        textBox15.AppendText("\r\n数据大于200,无效!!\r\n");
                        MyTextBox.Text = ChanTextBox.Text;
                    }
                    else
                    {
                        if (true)  //单设备
                        {
                            //下发
                            try
                            {
                                byte[] Data = new byte[10] { 0x21, 0x22, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00 };
                                Data[Convert.ToByte(MyTextBox.Tag) + 1] = Convert.ToByte(MyTextBox.Text);
                                int csum = CheckSumAction(Data,13); 
                                Data[10] = Convert.ToByte(csum);
                           
                                 System.Threading.Thread.Sleep(100);
                                 textBox15.AppendText("[" + DateTime.Now.ToString("HH:mm:ss") + "]" + "发 -> ");
                                 serialPort1.Write(Data, 0, 10);//发送
                                 System.Threading.Thread.Sleep(100);

                                foreach (byte Member in Data)                                                   //遍历用法
                                {
                                    string str = Convert.ToString(Member, 16).ToUpper();
                                    textBox15.AppendText((str.Length == 1 ? "0" + str : str) + " ");
                                }
                                textBox15.AppendText("\r\n");
                            }
                            catch
                            {
                                textBox15.AppendText("\r\n单设备模式下发错误!!\r\n");
                                serialPort1.Close();
                                button7.BackColor = Color.Red;
                                button2.Text = "打开串口";
                            }
                        }              
                    }
                }
                catch
                {
                    textBox15.AppendText("\r\n数据无效!!\r\n");
                    MyTextBox.Text = ChanTextBox.Text;
                }
           
        }

    //-------------------------------发送应答信号给下位机函数
       //发送应答信号,参数:串口号,设备号,应答功能号,应答数据,重发次数,超时时间(单位ms)
        //如:应答功能号=0xDD,应答数据0x01成功,0x00失败
        //超时重发,
        //private ushort SendAckToSerialPort(SerialPort MyPort, byte DeviceNum, byte AckFunCodetemp, byte AckType, ushort retrynum, Int16 timeoutset)//AckFunCodetemp
        //{
        //     byte csumtemp=0x00;
        //     int sumtemp = 0;
        //     ushort i = 0;
        //     Program.USART1_RecAckFlag = 0;
        //     sumtemp = DeviceNum + AckFunCodetemp + AckType + 0x55 + 0x55 + 0x55 + 0x55 + 0x55;
        //     csumtemp = (byte)(sumtemp % 256);
        //     byte[] AckTempData = new byte[13] {0x21,0x22,DeviceNum,AckFunCodetemp,AckType,0x55, 0x55, 0x55, 0x55, 0x55, csumtemp, 0x0D, 0x0A };
           
        //         for (i = 0; i < retrynum; i++)
        //         {
        //           MyPort.Write(AckTempData, 0, 13);
        //           System.Threading.Thread.Sleep(timeoutset);
        //         }
        //         return 1;//没应答,返回0                     
        //}

        private ushort SendAckToSerialPort(SerialPort MyPort, byte DeviceNum, byte AckFunCodetemp, byte AckType, ushort retrynum, Int16 timeoutset)//AckFunCodetemp
        {
            byte csumtemp = 0x00;
            int sumtemp = 0;
            ushort i = 0;
            Program.USART1_RecAckFlag = 0;
            sumtemp = DeviceNum + AckFunCodetemp + AckType + 0x55 + 0x55 + 0x55 + 0x55 + 0x55;//AckFunCodetemp=0xDD
            csumtemp = (byte)(sumtemp % 256);
            byte[] AckTempData0 = new byte [13]{0x21,0x22,DeviceNum,AckFunCodetemp, AckType, 0x55, 0x55, 0x55, 0x55, 0x55, csumtemp, 0x0D, 0x0A };
            byte[] AckTempData00 = new byte[1];
            AckTempData00[0] = AckTempData0[0];
            byte[] AckTempData01 = new byte[1];
            AckTempData01[0] = AckTempData0[1];
            byte[] AckTempData02 = new byte[1];
            AckTempData02[0] = AckTempData0[2];
            byte[] AckTempData03 = new byte[1];
            AckTempData03[0] = AckTempData0[3];
            byte[] AckTempData04 = new byte[1];
            AckTempData04[0] = AckTempData0[4];
            byte[] AckTempData05 = new byte[1];
            AckTempData05[0] = AckTempData0[5];
            byte[] AckTempData06 = new byte[1];
            AckTempData06[0] = AckTempData0[6];
            byte[] AckTempData07 = new byte[1];
            AckTempData07[0] = AckTempData0[7];
            byte[] AckTempData08 = new byte[1];
            AckTempData08[0] = AckTempData0[8];
            byte[] AckTempData09 = new byte[1];
            AckTempData09[0] = AckTempData0[9];
            byte[] AckTempData10 = new byte[1];
            AckTempData10[0] = AckTempData0[10];
            byte[] AckTempData11 = new byte[1];
            AckTempData11[0] = AckTempData0[11];
            byte[] AckTempData12 = new byte[1];
            AckTempData12[0] = AckTempData0[12];

            ushort tt =1;
            if (serialPort1.IsOpen)
            {
                for (i = 0; i < retrynum; i++)
                {
                    serialPort1.Write(AckTempData00, 0, 1); //System.Threading.Thread.Sleep(tt);
                    serialPort1.Write(AckTempData01, 0, 1);// System.Threading.Thread.Sleep(tt);
                    serialPort1.Write(AckTempData02, 0, 1);// System.Threading.Thread.Sleep(tt);
                    serialPort1.Write(AckTempData03, 0, 1);// System.Threading.Thread.Sleep(tt);
                    serialPort1.Write(AckTempData04, 0, 1); //System.Threading.Thread.Sleep(tt);
                    serialPort1.Write(AckTempData05, 0, 1);//System.Threading.Thread.Sleep(tt);
                    serialPort1.Write(AckTempData06, 0, 1); //System.Threading.Thread.Sleep(tt);
                    serialPort1.Write(AckTempData07, 0, 1); //System.Threading.Thread.Sleep(tt);
                    serialPort1.Write(AckTempData08, 0, 1);// System.Threading.Thread.Sleep(tt);
                    serialPort1.Write(AckTempData09, 0, 1);// System.Threading.Thread.Sleep(tt);
                    serialPort1.Write(AckTempData10, 0, 1);//System.Threading.Thread.Sleep(tt);
                    serialPort1.Write(AckTempData11, 0, 1); //System.Threading.Thread.Sleep(tt);
                    serialPort1.Write(AckTempData12, 0, 1);// System.Threading.Thread.Sleep(tt);
                }
                   

            }
           
            return 1;//没应答,返回0                     
        }

        //发送应答信号,参数:串口号, 应答功能码,设备号码,应答成功代码
        //如:serialport1---0x12,0x00,0x02
        //连续发5次应答信号。每次间隔100ms
   //     void uart1SendIOCmd(unsigned char ionum,unsigned char IOstatus)
        //-------------------------------------------------------------------发送IO信号给下位机函数
        private ushort SendIOCmdToSerialPort(SerialPort MyPort, byte DevNumIO,byte FunNumIO, byte IOstatus,ushort retrynum,Int16 timeouttemp)
        {
            ushort tt =1;
            ushort i = 0;
            ushort counttemp = 0;
            byte csumtemp = 0xFF;
            int sumtemp = 0;
            sumtemp = DevNumIO + FunNumIO + IOstatus + 0x55 + 0x55 + 0x55 + 0x55 + 0x55;
            csumtemp = (byte)(sumtemp % 256);
            byte[] AckTempData0 = new byte[13] { 0x21, 0x22, DevNumIO, FunNumIO, IOstatus, 0x55, 0x55, 0x55, 0x55, 0x55, csumtemp, 0x0D, 0x0A };
            byte[] AckTempData00 = new byte[1];
            AckTempData00[0] = AckTempData0[0];
            byte[] AckTempData01 = new byte[1];
            AckTempData01[0] = AckTempData0[1];
            byte[] AckTempData02 = new byte[1];
            AckTempData02[0] = AckTempData0[2];
            byte[] AckTempData03 = new byte[1];
            AckTempData03[0] = AckTempData0[3];
            byte[] AckTempData04 = new byte[1];
            AckTempData04[0] = AckTempData0[4];
            byte[] AckTempData05 = new byte[1];
            AckTempData05[0] = AckTempData0[5];
            byte[] AckTempData06 = new byte[1];
            AckTempData06[0] = AckTempData0[6];
            byte[] AckTempData07 = new byte[1];
            AckTempData07[0] = AckTempData0[7];
            byte[] AckTempData08 = new byte[1];
            AckTempData08[0] = AckTempData0[8];
            byte[] AckTempData09 = new byte[1];
            AckTempData09[0] = AckTempData0[9];
            byte[] AckTempData10 = new byte[1];
            AckTempData10[0] = AckTempData0[10];
            byte[] AckTempData11 = new byte[1];
            AckTempData11[0] = AckTempData0[11];
            byte[] AckTempData12 = new byte[1];
            AckTempData12[0] = AckTempData0[12];
   
                Program.USART1_RecAckFlag=0;
                for (i = 0; i < retrynum; i++)
                {
                    serialPort1.Write(AckTempData00, 0, 1);// System.Threading.Thread.Sleep(tt);
                    serialPort1.Write(AckTempData01, 0, 1);//System.Threading.Thread.Sleep(tt);
                    serialPort1.Write(AckTempData02, 0, 1); //System.Threading.Thread.Sleep(tt);
                    serialPort1.Write(AckTempData03, 0, 1); //System.Threading.Thread.Sleep(tt);
                    serialPort1.Write(AckTempData04, 0, 1);// System.Threading.Thread.Sleep(tt);
                    serialPort1.Write(AckTempData05, 0, 1);// System.Threading.Thread.Sleep(tt);
                    serialPort1.Write(AckTempData06, 0, 1);//System.Threading.Thread.Sleep(tt);
                    serialPort1.Write(AckTempData07, 0, 1); //System.Threading.Thread.Sleep(tt);
                    serialPort1.Write(AckTempData08, 0, 1); //System.Threading.Thread.Sleep(tt);
                    serialPort1.Write(AckTempData09, 0, 1);// System.Threading.Thread.Sleep(tt);
                    serialPort1.Write(AckTempData10, 0, 1); //System.Threading.Thread.Sleep(tt);
                    serialPort1.Write(AckTempData11, 0, 1);// System.Threading.Thread.Sleep(tt);
                    serialPort1.Write(AckTempData12, 0, 1); System.Threading.Thread.Sleep(tt);

                    while (Program.USART1_RecAckFlag == 0)
                    {
                        //20ms计算一次
                        System.Threading.Thread.Sleep(20);
                        counttemp++;
                        if (counttemp >= timeouttemp / 20)//如果超时,跳出循环,再发一次
                            break;
                    }
                    //如果在规定的时间内收到了应答,则直接返回,如果没有应答则继续重发        
                    if (counttemp < timeouttemp / 20)
                        return 1;
                    counttemp = 0;    
                }
                return 0;
        

        }
        //---------------------------------------------发送浮点数函数
        private ushort SendFloatToSerialPort(SerialPort MyPort, byte DevNum,byte FunNum, float FloatTemp,ushort RetryNum, Int16 TimeOutTemp)
        {
            byte csumtemp = 0xFF;
            int sumtemp = 0;
            int counttemp = 0;
            //将float变为字节
            FloatByte = BitConverter.GetBytes(FloatTemp);
            //label29.Text = Convert.ToString(FloatByte[0]);//154--------低8位----和单片机的联合体是一样的顺序
            //label30.Text = Convert.ToString(FloatByte[1]);//153-----------------所以,先发fb0,fb1,fb2,fb3
            //label31.Text = Convert.ToString(FloatByte[2]);//82
            //label32.Text = Convert.ToString(FloatByte[3]);//66,十进制---高8位

            //发送的初始数据,后面根据传入的数据进行更新
            byte[] SendDataTemp = new byte[13] { 0x21, 0x22, DevNum, FunNum, FloatByte[0], FloatByte[1], FloatByte[2], FloatByte[3], 0x55, 0x55, csumtemp, 0x0D, 0x0A };

            sumtemp = (SendDataTemp[2] + SendDataTemp[3] + SendDataTemp[4] + SendDataTemp[5] + SendDataTemp[6] + SendDataTemp[7] + SendDataTemp[8] + SendDataTemp[9]) % 256;
            csumtemp = (byte)(sumtemp % 256);
            SendDataTemp[10] = csumtemp;
            try
            {
                Program.USART1_RecAckFlag = 0;
                System.Threading.Thread.Sleep(2);
                for (int i = 0; i < RetryNum; i++)
                {     
                    MyPort.Write(SendDataTemp, 0, 13);
                    while (Program.USART1_RecAckFlag == 0)
                    {
                        //20ms计算一次
                        System.Threading.Thread.Sleep(2);
                        counttemp++;
                        if (counttemp >= TimeOutTemp / 2)//如果超时,跳出循环,再发一次
                            break;
                    }
                    //如果在规定的时间内收到了应答,则直接返回,如果没有应答则继续重发        
                    if (counttemp < TimeOutTemp / 2)
                        return 1;
                    counttemp = 0;
                }
                return 0;

              
            }
            catch
            {            
                MessageBox.Show("串口数据写入发生错误,请检查", "错误");
                return 0;
            }

        }