C#上位机通过Socket对下位机进行通讯,如何给下位机发指令?

开始,功能码,长度,数据CRCL,CRCH(校验),结束分别对应着 oxA0,ox01,ox01(长度),CRCL,CRCH,oxBo

有没有人给我写个怎么发指令的例子?


 /// <summary>

    /// CRC16

    /// </summary>

    /// <param name="data">要进行计算的数组</param>

    /// <returns>计算后的数组</returns>

    private static byte[] CRC16(byte[] data)

    {

      byte[] returnVal = new byte[2];

      byte CRC16Lo, CRC16Hi, CL, CH, SaveHi, SaveLo;

      int i, Flag;

      CRC16Lo = 0xFF;

      CRC16Hi = 0xFF;

      CL = 0x86;

      CH = 0x68;

      for (i = 0; i < data.Length; i++)

      {

        CRC16Lo = (byte)(CRC16Lo ^ data[i]);//每一个数据与CRC寄存器进行异或

        for (Flag = 0; Flag <= 7; Flag++)

        {

          SaveHi = CRC16Hi;

          SaveLo = CRC16Lo;

          CRC16Hi = (byte)(CRC16Hi >> 1);//高位右移一位

          CRC16Lo = (byte)(CRC16Lo >> 1);//低位右移一位

          if ((SaveHi & 0x01) == 0x01)//如果高位字节最后一位为

          {

            CRC16Lo = (byte)(CRC16Lo | 0x80);//则低位字节右移后前面补 否则自动补0

          }

          if ((SaveLo & 0x01) == 0x01)//如果LSB为1,则与多项式码进行异或

          {

            CRC16Hi = (byte)(CRC16Hi ^ CH);

            CRC16Lo = (byte)(CRC16Lo ^ CL);

          }

        }

      }

      returnVal[0] = CRC16Hi;//CRC高位

      returnVal[1] = CRC16Lo;//CRC低位

      return returnVal;

    }



    //发指令执行启动和暂停

    private void button2_Click(object sender, EventArgs e)

    {


      if (button2.Text == "启动")

      {


      

        byte[] byteValue = new byte[6];

        byteValue[0] = 0xA0;//开始

        byteValue[1] = 0x03;//功能码

        byteValue[2] = 0x01;//长度

        byteValue[3] = 0x02;//数据

        byteValue[4] = 0xB0;//结束

        CRC16(byteValue);

         

        

        SendCnt = 6;

        button2.Text = "暂停";


      }


      else

      {

        SendBuffer[0] = 0xA0;//开始

        SendBuffer[1] = 0x03;//功能码

        SendBuffer[2] = 0x01;//长度

        SendBuffer[3] = 0x00;//数据

        SendBuffer[4] =0xB0;//结束

        SendCnt = 5;

        button2.Text = "启动";

      }


这怎么调用啊


刚开始点击按钮发了 00 00 00 00 00 00 然后第二次点击就是A0 03 01 00 B0 00

有人知道这个crc16校验怎么使用吗