第 一个不懂,第二个
2:主机发送:01 03 00 0F 00 01 B4 09
   这个具体通讯代码要怎么写?是发送8次两十六进制数据还是别的,麻烦给个具体代码,谢谢!
直接
用byte[] buffer=new byte[你要发送的长度]
buffer[0]=0x01;
buffer[1]=0x03;
buffer[2]=0x00;
...
buffer[6]=0xB4;最后一位较验位是这么算的for(int i=0;i<buffer.Length-1;i++)
{
  buffer[7] ^=buffer[i];
}然后直接调用SericePort的Send(buffer);

解决方案 »

  1.   

    2.4 CRC校验码
    CRC校验码高字节是通讯信息帧的最后一个字节。
    CRC校验码由主机计算,放置于发送信息帧的尾部。从机再重新计算接收到信息的CRC,比较计算得到的CRC与接收到的CRC是否一致,如果不一致,则表明出错。CRC计算只用到了8个数据位,计算方法如下:
    ① 预置1个16位的寄存器为十六进制FFFF(即全为1),称此寄存器为CRC寄存器;
    ② 把第一个8位二进制数据(通讯信息帧的第1个字节)与16位CRC寄存器的低8位相异或,结果放于CRC寄存器;
    ③ 把CRC寄存器的内容右移一位(朝低位)并用0填补最高位,检查右移后的移出位;
    ④ 如果移出位为0:重复第③步(再次右移一位);
          如果移出位为1:CRC寄存器与多项式A001(1010 0000 0000 0001)进行异或;
    ⑤ 重复步骤③和④,直到右移8次,这样整个8位数据全部进行了处理;
    ⑥ 重复步骤②到步骤⑤,进行通讯信息帧下一个字节的处理;
    ⑦ 将该通讯信息帧所有字节(不包括CRC校验码高、低字节)按上述步骤计算完成后,CRC寄存器内容即为CRC校验码。
    能不能没有校验码?
      

  2.   

    当然不能,这个是C#的XOR,CRC16(查表法和计算法)的校验码计算类:
    http://blog.csdn.net/yeqi3000/article/details/8236446
      

  3.   


     public byte[] CRC16(byte[] data)
            {
                byte CRC16Lo;
                byte CRC16Hi;   //CRC寄存器 
                byte CL; byte CH;       //多项式码&HA001 
                byte SaveHi; byte SaveLo;
                byte[] tmpData;            int Flag;
                CRC16Lo = 0xFF;
                CRC16Hi = 0xFF;
                CL = 0x01;
                CH = 0xA0;
                tmpData = data;
                for (int i = 0; i < tmpData.Length; i++)
                {
                    CRC16Lo = (byte)(CRC16Lo ^ tmpData[i]); //每一个数据与CRC寄存器进行异或 
                    for (Flag = 0; Flag <= 7; Flag++)
                    {
                        SaveHi = CRC16Hi;
                        SaveLo = CRC16Lo;
                        CRC16Hi = (byte)(CRC16Hi >> 1);      //高位右移一位 
                        CRC16Lo = (byte)(CRC16Lo >> 1);      //低位右移一位 
                        if ((SaveHi & 0x01) == 0x01) //如果高位字节最后一位为1 
                        {
                            CRC16Lo = (byte)(CRC16Lo | 0x80);   //则低位字节右移后前面补1 
                        }             //否则自动补0 
                        if ((SaveLo & 0x01) == 0x01) //如果LSB为1,则与多项式码进行异或 
                        {
                            CRC16Hi = (byte)(CRC16Hi ^ CH);
                            CRC16Lo = (byte)(CRC16Lo ^ CL);
                        }
                    }
                }
                byte[] ReturnData = new byte[2];
                ReturnData[0] = CRC16Hi;       //CRC高位 
                ReturnData[1] = CRC16Lo;       //CRC低位 
                return ReturnData;
            }
    crc校验
      

  4.   

    再给你个我写的C#串口调试工具 v2.0。有源码。
    http://download.csdn.net/detail/yeqi3000/4853494