Esempio n. 1
0
        //输入为初始的9个字节的头加上指定的一串byte,输出为9个字节的头加上输入的byte数组
        public static byte[] createBytes(byte[] header, byte[] data)
        {
            byte[] setOut = new byte[data.Length + 9];

            Array.Copy(data, 0, setOut, 9, data.Length);

            setOut[0] = 0XAA;
            setOut[1] = 0X1D;
            setOut[2] = header[2];
            setOut[3] = header[3];
            setOut[4] = 0X03;
            setOut[5] = 0X00;
            setOut[6] = System.BitConverter.GetBytes(data.Length)[0];
            setOut[7] = 0X00;
            setOut[8] = 0X00;

            String crcIn = "";

            for (int i = 0; i < setOut.Length; i++)
            {
                crcIn += setOut[i].ToString("X2");
            }
            ushort crcOut = CodeUtils.QuickCRC16(crcIn, 0, crcIn.Length);

            byte[] crcOutByte = BitConverter.GetBytes(crcOut);
            setOut[7] = crcOutByte[1];
            setOut[8] = crcOutByte[0];

            return(setOut);
        }
Esempio n. 2
0
        //末尾增加CRC校验 CRC校验不包含帧尾
        public static byte[] yl_addCrc(Byte[] src)
        {
            byte[] result = new byte[src.Length];//初始化数组
            //进行效验的应该是长度减3
            Array.Copy(src, 0, result, 0, src.Length);
            String crcIn = "";

            for (int i = 0; i < src.Length - 3; i++)
            {
                crcIn += src[i].ToString("X2");
            }
            ushort crcOut = CodeUtils.QuickCRC16(crcIn, 0, crcIn.Length);

            byte[] crcOutByte = BitConverter.GetBytes(crcOut);
            result[13] = crcOutByte[1];
            result[14] = crcOutByte[0];
            return(result);
        }
        //获取埃德尔设备的默认配置信息

        public byte[] getDefaultADSettting(String version, String devId, String pduType, String seq)
        {
            //获取版本号
            String hiVer  = version.Substring(0, 1);
            String lowVer = version.Substring(1, 1);
            byte   btVer  = (byte)((CodeUtils.String2Byte(hiVer)) * 16 + CodeUtils.String2Byte(lowVer));

            //获取设备ID
            byte[] btDevs = new byte[4];
            for (int i = 0; i < 4; i++)
            {
                btDevs[i] = CodeUtils.String2Byte(devId.Substring(2 * i, 2));
            }

            //获取pduType
            byte btPduType  = CodeUtils.String2Byte(pduType);
            byte dstPduType = (byte)(0xB0 | (0x0f & btPduType));


            //获取系统时间的tag 长度为2个字节!
            byte[] sysTag = { 0x10,                      0x00,           0x00,           0x51,           0x00, 0x06,
                              StringUtil.YEAR, StringUtil.MON, StringUtil.DAY, StringUtil.HOR, StringUtil.MIN, StringUtil.SEC };

            //获取iptag信息
            String adIp   = System.Configuration.ConfigurationSettings.AppSettings["AD_IP"];
            String adPort = System.Configuration.ConfigurationSettings.AppSettings["AD_PORT"];

            byte[] btIp = ASCIIEncoding.ASCII.GetBytes(adIp);

            Int16 ipLen0 = (Int16)btIp.Length;

            byte[] btiplens0 = BitConverter.GetBytes(ipLen0);
            byte[] iplens    = new byte[2];
            iplens[0] = btiplens0[1];
            iplens[1] = btiplens0[0];

            byte[] ipOid = { 0x10, 0x00, 0x00, 0x22 };
            byte[] ipTag = new byte[4 + 2 + btIp.Length];
            ipOid.CopyTo(ipTag, 0);
            iplens.CopyTo(ipTag, 4);
            btIp.CopyTo(ipTag, 6);

            //获取porttag信息
            byte[] btAdPort = ASCIIEncoding.ASCII.GetBytes(adPort);
            Int16  portLen  = (Int16)btAdPort.Length;

            byte[] btportlens0 = BitConverter.GetBytes(portLen);
            byte[] portlens    = new byte[2];
            portlens[0] = btportlens0[1];
            portlens[1] = btportlens0[0];

            byte[] btPortOid = { 0x10, 0x00, 0x00, 0x23 };
            byte[] portTag   = new byte[4 + 2 + btAdPort.Length];
            btPortOid.CopyTo(portTag, 0);
            portlens.CopyTo(portTag, 4);
            btAdPort.CopyTo(portTag, 6);

            //总长度计算
            Int16 totalLen = (Int16)(4 + 1 + 1 + sysTag.Length + ipTag.Length + portTag.Length);

            byte[] btlens0 = BitConverter.GetBytes(totalLen);
            byte[] btlens  = new byte[2];
            btlens[0] = btlens0[1];
            btlens[1] = btlens0[0];

            //crc之前的byte类型数据
            byte[] bfsrc = new byte[totalLen + 2 + 1 + 1];
            bfsrc[0] = 0xA3;
            bfsrc[1] = btVer;
            btlens.CopyTo(bfsrc, 2);
            btDevs.CopyTo(bfsrc, 4);
            bfsrc[8] = dstPduType;
            bfsrc[9] = CodeUtils.String2Byte(seq);
            sysTag.CopyTo(bfsrc, 10);
            ipTag.CopyTo(bfsrc, 10 + sysTag.Length);
            portTag.CopyTo(bfsrc, 10 + sysTag.Length + ipTag.Length);


            String strCrc = String.Format("{0:X}", (int)CodeUtils.CRC16_AD(bfsrc));

            byte[] btcrc = { CodeUtils.String2Byte(strCrc.Substring(0, 2)), CodeUtils.String2Byte(strCrc.Substring(2, 2)) };

            byte[] afcrc = new byte[bfsrc.Length + 2];
            bfsrc.CopyTo(afcrc, 0);
            btcrc.CopyTo(afcrc, bfsrc.Length);

            return(CodeUtils.adEncode(afcrc));
        }