上位机软件下发数据格式为:0A5H,0E2H,2H,数据1-数据10(BCD码),和校验值。
数据1-数据10为:日标量高两位、低两位、秒时量高两位、低两位、达成量高两位、低两位、不良量高两位、低两位、计时周期高两位、低两位。
 我测试代码如下(serialport写的):
private void button1_Click(object sender, EventArgs e)
        {
           byte[] sendBuf;
          sendBuf = new byte[14];          byte kt = 0xa5;
          byte bz = 0x72;
          byte dz = 0x02;
          byte s1 = 00000000;
          byte s2 = 00000000;
          byte s3 = 00000000;
          byte s4 = 00000000;
          byte s5 = 00000000;
          byte s6 = 00000000;
          byte s7 = 00000000;
          byte s8 = 00000000;
          byte s9 = 00000000;
          byte s10 = 00000000;
         //byte jy =Convert.ToByte( kt ^ bz ^ dz ^ s1 ^ s2 ^ s3 ^ s4 ^ s5 ^ s6 ^ s7 ^ s8 ^ s9 ^ s10);  
          byte jy = Convert.ToByte(kt | bz | dz | s1 | s2 | s3 | s4 | s5 | s6 | s7 | s8 | s9 | s10);   //校验是累加和校验,但不知道对不对            sendBuf[0] = kt ;
            sendBuf[1] = bz ;
            sendBuf[2] = dz ;
            sendBuf[3] = s1 ;
            sendBuf[4] = s2 ;
            sendBuf[5] = s3 ;
            sendBuf[6] = s4 ;
            sendBuf[7] = s5 ;
            sendBuf[8] = s6 ;
            sendBuf[9] = s7 ;
            sendBuf[10] = s8 ;
            sendBuf[11] = s9 ;
            sendBuf[12] = s10 ;
            sendBuf[13] = jy;
                
                sp1.Write(sendBuf, 0, sendBuf.Length);
          
        }但发送后,下位机显示一点不变,请高手指教该如何写,谢谢。

解决方案 »

  1.   

    是不是接受的字符不全为ASCII码?一些字符需要拆分?
      

  2.   

    1、0A5H,0E2H,2H,数据1-数据10(BCD码),和校验值既然这样,报文总长度为16字节,你却只弄了个14字节的2、byte jy = Convert.ToByte(kt | bz | dz | s1 | s2 | s3 | s4 | s5 | s6 | s7 | s8 | s9 | s10);  //校验是累加和校验,但不知道对不对校验和既然是累加,你为何搞个这个东东?莫非这样和累加等价?偶没测试过,但愿你明白……做个循环累加,进位丢失不管,是一般的作法
      

  3.   

    补充说明:1、0A5H,0E2H,2H,数据1-数据10(BCD码),和校验值你这里写的0A5H,最后一个H是表示十六进制的,前面那个0是什么意思?如果没意义就是14字节的。如果有意义,则猜想是0x0a,0x05,0x0e,0x02这里我看不懂。请你说明一下。很少见到这种写法:0A5H
      

  4.   

    0xa5,0x72,0x2,数据1-10,和校验。  除了数据1-10为BCD码,其他都是十六进制的
    我这样写  byte jy = Convert.ToByte(kt + bz + dz + s1 + s2 + s3 + s4 + s5 + s6 + s7 + s8 + s9 + s10);会报错,报:值对于无符号的字节太大或太小。
      

  5.   


    这样呢?  byte jy = (byte)(kt + bz + dz + s1 + s2 + s3 + s4 + s5 + s6 + s7 + s8 + s9 + s10)