コード例 #1
0
        /// <summary>
        /// Build 16 bit data header
        /// </summary>
        /// <param name="type"></param>
        /// <param name="p0"></param>
        /// <param name="p1"></param>
        /// <param name="p2"></param>
        /// <param name="p3"></param>
        /// <returns></returns>
        public static string Build16BitDataHeader(HeaderType type, int p0, int p1, int p2, int p3, CRC16 crcCalculator)
        {
            var sb = new StringBuilder();

            sb.Append(Bin16BitHeader);
            sb.Append((char)ControlBytes.ZDLE);
            sb.Append('J');
            sb.Append(((char)p0).ToString());
            sb.Append(((char)p1).ToString());
            sb.Append(((char)p2).ToString());
            sb.Append(((char)p3).ToString());

            var b = new byte[5];

            b[0] = Convert.ToByte(type);
            b[1] = Convert.ToByte(p0);
            b[2] = Convert.ToByte(p1);
            b[3] = Convert.ToByte(p2);
            b[4] = Convert.ToByte(p3);

            var crc = CRCHelper.Compute16BitHeaderAsArray((int)type, p0, p1, p2, p3, crcCalculator);

            var crc1 = crc[1];
            var crc2 = crc[0];

            sb.Append(((char)crc1).ToString());
            sb.Append(((char)crc2).ToString());

            var command = sb.ToString();

            return(command);
        }
コード例 #2
0
        /// <summary>
        /// 生成指令
        /// </summary>
        /// <param name="rackList">仓位列表,用于相邻仓位的屏蔽</param>
        /// <returns></returns>
        public string ResetInstruction(IList <RackInfo> rackList = null)
        {
            StringBuilder sb = new StringBuilder();

            sb.Append(this.TruckCode).Append(this.StartCode).Append(this.InOut);
            sb.Append(this.InPackCode).Append(this.InPackLayer).Append(this.OutPackCode).Append(this.OutPackLayer);
            int    i         = 0;
            string lastRoute = "";

            foreach (var item in this.RouteWay)
            {
                if (i > 0)
                {
                    string way = getTurnwayMap(item.Way);
                    sb.Append(item.RouteCode).Append(way);
                    lastRoute = item.RouteCode;
                }
                i++;
            }
            CRCHelper crcMethod = new CRCHelper();
            string    crc       = crcMethod.CRCResult_ModBus(sb.ToString());

            sb.Append(crc);
            return(sb.ToString());
        }
コード例 #3
0
        /// <summary>
        /// Build 16 bit binary header.
        ///
        /// A binary header is sent by the sending program to the receiving program.All bytes in a binary header are ZDLE encoded.
        /// A binary header begins with the sequence ZPAD, ZDLE, ZBIN.
        /// 0 or more binary data subpackets with 16 bit CRC will follow depending on the frame type.
        /// * ZDLE A TYPE F3/P0 F2/P1 F1/P2 F0/P3 CRC-1 CRC-2
        /// </summary>
        /// <param name="type"></param>
        /// <param name="f0"></param>
        /// <param name="f1"></param>
        /// <param name="f2"></param>
        /// <param name="f3"></param>
        /// <returns></returns>
        public static string Build16BitBinHeader(HeaderType type, ZFILEConversionOption f0, ZFILEManagementOption f1, ZFILETransportOption f2, ZFILEExtendedOptions f3, CRC16 crcCalculator)
        {
            var sb = new StringBuilder();

            sb.Append(Bin16BitHeader);
            sb.Append(((char)(int)type).ToString());
            sb.Append(((char)f3).ToString());
            sb.Append(((char)f2).ToString());
            sb.Append(((char)f1).ToString());
            sb.Append(((char)f0).ToString());

            var b = new byte[5];

            b[0] = Convert.ToByte(type);
            b[1] = Convert.ToByte(f3);
            b[2] = Convert.ToByte(f2);
            b[3] = Convert.ToByte(f1);
            b[4] = Convert.ToByte(f0);

            var crc = CRCHelper.Compute16BitHeaderAsArray((int)type, (int)f3, (int)f2, (int)f1, (int)f0, crcCalculator);

            int crc1 = crc[1];
            int crc2 = crc[0];

            sb.Append(((char)crc1).ToString());
            sb.Append(((char)crc2).ToString());

            var command = sb.ToString();

            return(command);
        }
コード例 #4
0
        /// <summary>
        /// 响应上线请求的数据
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        public byte[] ClientOnlineData(byte[] buffer)
        {
            byte[] response = new byte[GlobalStatus.ClientOnline.ResponseLen];
            byte   reslen   = Convert.ToByte(GlobalStatus.ClientOnline.ResponseLen - 2);


            response[GlobalStatus.DataSOFOffset] = GlobalStatus.SOF;
            response[GlobalStatus.DataSOFOffset + GlobalStatus.DataLengthOffset] = reslen;
            response[GlobalStatus.DataSOFOffset + GlobalStatus.DataCommandOffset]
                         = GlobalStatus.ClientOnline.ResponseType; //响应标准
            response[3]  = buffer[3];
            response[4]  = buffer[4];
            response[5]  = buffer[5];
            response[6]  = buffer[6];
            response[7]  = buffer[7];
            response[8]  = buffer[8];
            response[9]  = buffer[9];
            response[10] = buffer[10];
            response[11] = buffer[11];
            response[12] = buffer[12];
            response[13] = buffer[13];
            response[14] = GlobalStatus.EOF;
            // 处理CRC
            byte[] crc = new byte[response.Length - 4];
            Buffer.BlockCopy(response, 1, crc, 0, response.Length - 4);
            var crc_convert = CRCHelper.CCITT_CRC16_H2L(crc);

            response[12] = crc_convert[0];
            response[13] = crc_convert[1];

            return(response);
        }
コード例 #5
0
        //串口数据解析
        private void ParseSerialData_Click(object sender, EventArgs e)
        {
            if (openFileDialog.ShowDialog() == DialogResult.OK)
            {
                try
                {
                    BinaryReader br = new BinaryReader(openFileDialog.OpenFile());

                    byte[] b = br.ReadBytes((int)openFileDialog.OpenFile().Length);
                    int    NodeId;
                    string time;
                    byte[] data;
                    if (DepackData(b, out NodeId, out time, out data))
                    {
                        MainForm.pMainForm.mapdoc.Dvf.Text = "显示命令内容";
                        MainForm.pMainForm.mapdoc.Dvf.str  = CRCHelper.ConvertCharToHex(b, b.Length);

                        MainForm.pMainForm.mapdoc.Dvf.DataViewForm_ShowData();
                    }
                    else
                    {
                        throw new Exception("数据校验错误!");
                    }

                    br.Close();
                }
                catch (Exception MyEx)
                {
                    MessageBox.Show(MyEx.Message);
                }
            }
        }
コード例 #6
0
ファイル: UnitTest1.cs プロジェクト: iwaitu/tcpwebgateway
        public void TestMethod1()
        {
            //var val = TcpHelper.GetTemperature(1);
            //Assert.IsTrue(val == 300);

            //Int16 temp = 85;
            //var data = BitConverter.GetBytes(temp);
            //if (BitConverter.IsLittleEndian)
            //{
            //    Array.Reverse(data);
            //}

            //var str = CRCHelper.byteToHexStr(data, 2);
            //Assert.AreEqual(str, "0055");
            ////byte[] 转 int16 ,需要反转数组
            //Array.Reverse(data);
            //var intval = BitConverter.ToInt16(data);
            //Assert.IsTrue(intval == temp);
            var cmd = StringToByteArray("01 50 01 01 01 02");
            var crc = CRCHelper.Checksum(cmd);

            Assert.IsTrue(crc == 86);
            var str = JsonConvert.SerializeObject(new HvacStateObject());

            Assert.IsTrue(str.Length > 0);
        }
コード例 #7
0
        public void DataViewForm_ShowData()
        {
            try
            {
                SourceDataClass.isNodeTick = false;

                MainForm.ParseLock.WaitOne();
                if (str.StartsWith("01EE"))
                {
                    str = str.Substring(8);
                }
                SourceDataClass.GetData((CRCHelper.ConvertHexToChar(str)));
                ll = SourceDataClass.Parse();


                MainForm.ParseLock.ReleaseMutex();
                SourceDataClass.isNodeTick = true;
                InputGrid();

                this.Show();
            }
            catch (Exception e)
            {
                MainForm.ParseLock.ReleaseMutex();
                SourceDataClass.isNodeTick = true;
                MessageBox.Show("无法解析文件:" + e.StackTrace);
            }
            //this.TopMost = true;
        }
コード例 #8
0
        public void Return32BitHeaderChecksumAsByte(byte[] expected)
        {
            var result = CRCHelper.Compute32BitHeaderAsArray((int)HeaderType.ZFILE, 0, 0, 0, 0, CRC32Calculator);

            for (int i = 0; i < expected.Length; i++)
            {
                Assert.True(result[i] == expected[i]);
            }
        }
コード例 #9
0
        public async Task SendCommand(string data)
        {
            var cmd = CRCHelper.StringToByteArray(data.Replace(" ", ""));

            var str = BitConverter.ToString(cmd, 0, cmd.Length).Replace("-", " ");

            _logger.LogInformation("SendCmd : " + str);
            using (var socket = SafeSocket.ConnectSocket(remoteEP))
            {
                await SendAsync(socket, cmd, 0, cmd.Length, 0).ConfigureAwait(false);

                var response = await ReceiveAsync(socket);

                if (_curtainHelper != null)
                {
                    await _curtainHelper.OnReceiveData(response);
                }
            }
        }
コード例 #10
0
        private void buttonX1_Click(object sender, EventArgs e)
        {
            if (!CircleCheck.Checked)
            {
                //string ans = CRCHelper.ConvertHexToChar(CommandBox.Text);
                //string str = CommandBox.Text;
                //byte[] c = new byte[1];
                //for (int i = 0; i < str.Length / 2; i++)
                //{
                //    string s = str.Substring(i * 2, 2);

                //    int d = Convert.ToByte(s, 16);
                //    c[0] = (byte)d;
                //}
                //SyncSerialPort.Write(c, 0, 1);
                WriteCommand(CommandBox.Text);
            }
            else
            {
                if (buttonX1.Text == "发送")
                {
                    buttonX1.Text  = "停止";
                    timer.Interval = (int)float.Parse(CircleTime.Text) * 1000;
                    string ans = CRCHelper.ConvertHexToChar(CommandBox.Text);
                    WriteCommand(ans);
                    timer.Start();
                    CircleTime.Enabled  = false;
                    CircleCheck.Enabled = false;
                    CommandBox.Enabled  = false;
                    Commandlist.Enabled = false;
                }
                else
                {
                    buttonX1.Text = "发送";
                    timer.Stop();
                    CircleTime.Enabled  = true;
                    CircleCheck.Enabled = true;
                    CommandBox.Enabled  = true;
                    Commandlist.Enabled = true;
                }
            }
        }
コード例 #11
0
 /// <summary>
 /// 数据合法性检查
 /// </summary>
 /// <returns>是否合法</returns>
 public override bool IsValid()
 {
     // 长度不匹配
     if (Data.Length != GlobalStatus.ClientOnline.RequestLen)
     {
         return(false);
     }
     // 开始或者结束符不匹配
     if (Data[GlobalStatus.DataSOFOffset] != GlobalStatus.SOF ||
         Data[GlobalStatus.ClientOnline.RequestLen - 1] != GlobalStatus.EOF)
     {
         return(false);
     }
     // 标志位不匹配
     if (Data[GlobalStatus.DataSOFOffset + GlobalStatus.DataCommandOffset]
         != GlobalStatus.ClientOnline.RequestType)
     {
         return(false);
     }
     return(CRCHelper.CheckCRC(Data)); // CRC 验证
 }
コード例 #12
0
        /// <summary>
        /// Build 16 bit binary header.
        ///
        /// A binary header is sent by the sending program to the receiving program.All bytes in a binary header are ZDLE encoded.
        /// A binary header begins with the sequence ZPAD, ZDLE, ZBIN.
        /// 0 or more binary data subpackets with 16 bit CRC will follow depending on the frame type.
        /// * ZDLE A TYPE F3/P0 F2/P1 F1/P2 F0/P3 CRC-1 CRC-2
        /// </summary>
        /// <param name="type"></param>
        /// <param name="p0"></param>
        /// <param name="p1"></param>
        /// <param name="p2"></param>
        /// <param name="p3"></param>
        /// <returns></returns>
        public static string Build16BitBinHeader(HeaderType type, int p0, int p1, int p2, int p3, CRC16 crcCalculator)
        {
            var sb = new StringBuilder();

            sb.Append(Bin16BitHeader);
            sb.Append(((char)(int)type).ToString());
            sb.Append(((char)p0).ToString());
            sb.Append(((char)p1).ToString());
            sb.Append(((char)p2).ToString());
            sb.Append(((char)p3).ToString());

            var crc  = CRCHelper.Compute16BitHeader((int)type, p0, p1, p2, p3, crcCalculator);
            int crc1 = (crc & 0xff00) >> 8;
            int crc2 = crc & 0xff;

            sb.Append(((char)crc1).ToString());
            sb.Append(((char)crc2).ToString());

            var command = sb.ToString();

            return(command);
        }
コード例 #13
0
        /// <summary>
        /// Build 32 bit binary header.
        ///
        /// A "32 bit CRC" Binary header is similar to a Binary Header, except the
        /// ZBIN(A) character is replaced by a ZBIN32(C) character, and four
        /// characters of CRC are sent.
        /// 0 or more binary data subpackets with 32 bit CRC will follow depending
        /// on the frame type.
        /// * ZDLE C TYPE F3/P0 F2/P1 F1/P2 F0/P3 CRC-1 CRC-2 CRC-3 CRC-4
        /// </summary>
        /// <param name="type"></param>
        /// <param name="p0"></param>
        /// <param name="p1"></param>
        /// <param name="p2"></param>
        /// <param name="p3"></param>
        /// <returns></returns>
        public static string Build32BitBinHeader(HeaderType type, ZFILEConversionOption f0, ZFILEManagementOption f1, ZFILETransportOption f2, ZFILEExtendedOptions f3, CRC32 crcCalculator)
        {
            var sb = new StringBuilder();

            sb.Append(Bin32BitHeader);
            sb.Append(((char)(int)type).ToString());
            sb.Append(((char)f3).ToString());
            sb.Append(((char)f2).ToString());
            sb.Append(((char)f1).ToString());
            sb.Append(((char)f0).ToString());

            var crc = CRCHelper.Compute32BitHeaderAsArray((int)type, (int)f3, (int)f2, (int)f1, (int)f0, crcCalculator);

            foreach (char c in crc)
            {
                sb.Append(c);
            }

            var command = sb.ToString();

            return(command);
        }
コード例 #14
0
 private void ShowData_Click(object sender, EventArgs e)
 {
     if (CmdList.Items.Count > 0)
     {
         if (SourceNodeBox.Text != "")
         {
             MainForm.pMainForm.mapdoc.Dvf.Text = "显示命令内容";
             byte[] cmd = pack();
             if (cmd.Length > 1024)
             {
                 MessageBox.Show("命令长度多长,请删除部分命令!");
                 return;
             }
             MainForm.pMainForm.mapdoc.Dvf.str = CRCHelper.ConvertCharToHex(cmd, cmd.Length);
             MainForm.pMainForm.mapdoc.Dvf.DataViewForm_ShowData();
         }
         else
         {
             MessageBox.Show("请选择一个正确的源地址!");
         }
     }
 }
コード例 #15
0
        public async Task <string> SendCommand(string data, bool log = true)
        {
            try
            {
                var cmd    = StringToByteArray(data.Replace(" ", ""));
                var cmdCRC = CRCHelper.get_CRC16_C(cmd);
                var cmd1   = new byte[cmd.Length + 2];
                cmd.CopyTo(cmd1, 0);
                cmdCRC.CopyTo(cmd1, cmd.Length);
                var str = CRCHelper.byteToHexStr(cmd1, cmd1.Length);
                if (log)
                {
                    _logger.Info("SendCmd : " + str);
                }
                using (var socket = SafeSocket.ConnectSocket(remoteEP))
                {
                    var ret = await SendAsync(socket, cmd1, 0, cmd1.Length, 0).ConfigureAwait(false);

                    var response = await ReceiveAsync(socket);

                    if (log)
                    {
                        _logger.Info("Cmd Receive : " + response);
                    }
                    if (_helper != null)
                    {
                        await _helper.OnReceiveCommand(response);
                    }
                    return(response);
                }
            }
            catch (Exception ex)
            {
                _logger.Info("err data:" + data);
                _logger.Error(ex.ToString());
                return(string.Empty);
            }
        }
コード例 #16
0
        /// <summary>
        /// Build 32 bit data header
        /// </summary>
        /// <param name="type"></param>
        /// <param name="p0"></param>
        /// <param name="p1"></param>
        /// <param name="p2"></param>
        /// <param name="p3"></param>
        /// <returns></returns>
        public static string Build32BitDataHeader(HeaderType type, int p0, int p1, int p2, int p3, CRC32 crcCalculator)
        {
            var sb = new StringBuilder();

            sb.Append(Bin32BitHeader);
            sb.Append((char)ControlBytes.ZDLE);
            sb.Append('J');
            sb.Append(((char)p0).ToString());
            sb.Append(((char)p1).ToString());
            sb.Append(((char)p2).ToString());
            sb.Append(((char)p3).ToString());

            var crc = CRCHelper.Compute32BitHeaderAsArray((int)type, p0, p1, p2, p3, crcCalculator);

            foreach (char c in crc)
            {
                sb.Append(c);
            }

            var command = sb.ToString();

            return(command);
        }
コード例 #17
0
        //网络数据解析
        private void OpenData_Click(object sender, EventArgs e)
        {
            if (openFileDialog.ShowDialog() == DialogResult.OK)
            {
                try
                {
                    BinaryReader br = new BinaryReader(openFileDialog.OpenFile());

                    byte[] b = br.ReadBytes((int)openFileDialog.OpenFile().Length);

                    MainForm.pMainForm.mapdoc.Dvf.Text = "显示命令内容";
                    MainForm.pMainForm.mapdoc.Dvf.str  = CRCHelper.ConvertCharToHex(b, b.Length);
                    SourceDataClass.isCommDepack       = true;
                    MainForm.pMainForm.mapdoc.Dvf.DataViewForm_ShowData();
                    SourceDataClass.isCommDepack = false;
                    br.Close();
                }
                catch (Exception MyEx)
                {
                    MessageBox.Show(MyEx.Message);
                }
            }
        }
コード例 #18
0
ファイル: HvacListener.cs プロジェクト: iwaitu/tcpwebgateway
        public async Task SendCommand(string data, bool debug = false)
        {
            try
            {
                var cmd    = StringToByteArray(data.Replace(" ", ""));
                var cmdCRC = CRCHelper.Checksum(cmd);
                var cmd1   = new byte[cmd.Length + 1];
                cmd.CopyTo(cmd1, 0);
                cmd1[cmd.Length] = (byte)cmdCRC;
                var str = BitConverter.ToString(cmd1, 0, cmd1.Length).Replace("-", " ");
                if (debug)
                {
                    _logger.LogInformation("SendCmd : " + str);
                }
                using (var s = SafeSocket.ConnectSocket(remoteEP))
                {
                    var ret = await SendAsync(s, cmd1, 0, cmd1.Length, 0).ConfigureAwait(false);

                    var response = await ReceiveAsync(s);

                    if (debug)
                    {
                        _logger.LogInformation("Receive : " + response);
                    }

                    if (!string.IsNullOrWhiteSpace(response) && !string.IsNullOrEmpty(response))
                    {
                        await _helper.OnReceiveData(response);
                    }
                }
            }
            catch (Exception ex)
            {
                _logger.LogError("err data: " + data);
                _logger.LogError(ex.ToString());
            }
        }
コード例 #19
0
        /// <summary>
        /// Build common hex frame
        /// The receiver sends responses in hex headers.
        /// The sender also uses hex headers when they are not followed by binary data subpackets.
        /// </summary>
        /// <param name="type"></param>
        /// <param name="p0"></param>
        /// <param name="p1"></param>
        /// <param name="p2"></param>
        /// <param name="p3"></param>
        /// <returns></returns>
        public static string BuildCommonHexHeader(HeaderType type, int p0, int p1, int p2, int p3, CRC16 crcCalculator)
        {
            var sb = new StringBuilder();

            sb.Append(HexHeader);
            sb.Append(((int)type).ToString("x2"));
            sb.Append(p0.ToString("x2"));
            sb.Append(p1.ToString("x2"));
            sb.Append(p2.ToString("x2"));
            sb.Append(p3.ToString("x2"));

            var crc = CRCHelper.Compute16BitHeaderAsArray((int)type, p0, p1, p2, p3, crcCalculator);

            foreach (var c in crc)
            {
                sb.Append(c.ToString("x2"));
            }

            sb.Append(HexCommonHeaderEnd);

            var command = sb.ToString();

            return(command);
        }
コード例 #20
0
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            var sou = source.Text;
            var plo = pole.Text;

            if (string.IsNullOrEmpty(sou))
            {
                MessageBox.Show("请输入待校验的数据");
                source.Focus();
                return;
            }
            if (string.IsNullOrEmpty(plo))
            {
                MessageBox.Show("请输入校验多项式");
                pole.Focus();
                return;
            }
            if (string.IsNullOrEmpty(ini.Text))
            {
                MessageBox.Show("请输入初始值");
                ini.Focus();
                return;
            }
            CRCHelper helper = new CRCHelper();
            var       pole2  = Convert.ToUInt16(plo, 16);

            helper.pPoly = pole2;
            var pole3 = Convert.ToUInt16(ini.Text, 16);

            helper.CRCInit = pole3;
            var res2   = sou.ToHex();
            var buffer = helper.GetCRC16(res2);
            var txt    = buffer.ToHex();

            result.Text = txt;
        }
コード例 #21
0
ファイル: SetParameterForm.cs プロジェクト: BJFX/UWACN
        private void AddToList_Click(object sender, EventArgs e)
        {
            int[] dat = new int[1];
            if (DestNodeName.Text == "")
            {
                MessageBox.Show("未选择目标节点!!!");
                return;
            }
            if (HexCheck.Checked)
            {
                byte[] end = CRCHelper.ConvertHexToChar(parameter.Text);
                if (end == null)
                {
                    return;
                }
                int len = 20 + 8 + end.Length * 8;
                SourceDataClass.InitForPack(len);
                dat[0] = 119;
                SourceDataClass.OutPutIntBit(dat, 8);
                dat[0] = len;
                SourceDataClass.OutPutIntBit(dat, 12);
                dat[0] = 2;//默认值
                if (CommBox.SelectedIndex == 0)
                {
                    dat[0] = 2;
                }
                if (CommBox.SelectedIndex == 1)
                {
                    dat[0] = 3;
                }
                SourceDataClass.OutPutIntBit(dat, 8);
                for (int i = 0; i < end.Length; i++)
                {
                    dat[0] = end[i];
                    SourceDataClass.OutPutIntBit(dat, 8);
                }
                //SourceDataClass.OutPutIntBit(dat, endchar.Text.Length / 2 * 8);
            }
            else
            {
                int arraylen = parameter.Text.Length;//int[] 长度
                int len      = 20 + 8 + arraylen * 8;
                SourceDataClass.InitForPack(len);
                dat[0] = 119;
                SourceDataClass.OutPutIntBit(dat, 8);
                dat[0] = len;
                SourceDataClass.OutPutIntBit(dat, 12);
                dat[0] = 2;//默认值
                if (CommBox.SelectedIndex == 0)
                {
                    dat[0] = 2;
                }
                if (CommBox.SelectedIndex == 1)
                {
                    dat[0] = 3;
                }

                byte[] para = Encoding.Default.GetBytes(parameter.Text);
                for (int i = 0; i < arraylen; i++)
                {
                    dat[0] = para[i];
                    SourceDataClass.OutPutIntBit(dat, 8);
                }
            }
            //加入列表
            MainForm.pMainForm.comlistwin.AddCmd(DestNodeName.Text, "设备参数设置", SourceDataClass.packdata);

            MainForm.pMainForm.RefreshListStat();
            MessageBox.Show("设备参数设置命令已加入命令列表!");
        }
コード例 #22
0
        private void DLoadDataWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            BackgroundWorker worker = sender as BackgroundWorker;
            networkdata      data   = (networkdata)e.Argument;

            try
            {
                filereader = new BinaryReader(File.Open(data.FileNamePath, FileMode.Open));
                FileInfo d          = new FileInfo(data.FileNamePath);
                long     filelength = d.Length;
                if (ACPacketHandle == null)
                {
                    ACPacketHandle = new EventWaitHandle(false, EventResetMode.AutoReset);
                }
                if (Dclient.Connected)
                {
                    byte[] mySendBuffer = new byte[1028];
                    Int64  SendBytes    = 0;
                    if (Dstream.CanWrite)
                    {
                        int  numberOfBytesRead = 0;
                        uint head = 0xDADA;
                        Buffer.BlockCopy(BitConverter.GetBytes(head), 0, mySendBuffer, 0, 2);
                        while (((numberOfBytesRead = filereader.Read(mySendBuffer, 4, 1024)) != 0) && (!worker.CancellationPending))
                        {
                            Buffer.BlockCopy(BitConverter.GetBytes(numberOfBytesRead), 0, mySendBuffer, 2, 2);
                            Dstream.Write(mySendBuffer, 0, numberOfBytesRead + 4);//
                            SendBytes        += numberOfBytesRead;
                            numberOfBytesRead = 0;
                            worker.ReportProgress((int)((double)SendBytes * 100 / filelength));
                            if (!ACPacketHandle.WaitOne(10000))//等待信号超时
                            {
                                Exception MyEx = new Exception("接收应答数据超时!");
                                throw MyEx;
                            }
                            if (worker.CancellationPending)
                            {
                                e.Cancel = true;
                                break;
                            }
                        }
                        if (worker.CancellationPending)
                        {
                            e.Cancel = true;
                        }
                        filereader.BaseStream.Seek(0, SeekOrigin.Begin);//回到文件头
                        byte[] totalb = filereader.ReadBytes((int)filereader.BaseStream.Length);
                        ushort crc    = CRCHelper.CRC16byte(totalb);
                        filereader.Close();
                        head = 0xEDED;
                        Buffer.BlockCopy(BitConverter.GetBytes(head), 0, mySendBuffer, 0, 2);
                        Buffer.BlockCopy(BitConverter.GetBytes(crc), 0, mySendBuffer, 2, 2);
                        Dstream.Write(mySendBuffer, 0, 4);
                    }
                }
            }
            catch (Exception MyEx)
            {
                MessageBox.Show(MyEx.Message);
                AddtoBox(Color.Black, MyEx.Message + ":" + MyEx.StackTrace.ToString() + "\r\n/>");
                filereader.Close();
            }
        }
コード例 #23
0
        public void Return32BitHeaderChecksumAsInt(uint expected)
        {
            var crc = CRCHelper.Compute32BitHeader((int)HeaderType.ZFILE, 0, 0, 0, 0, CRC32Calculator);

            Assert.True(expected.Equals(crc));
        }
コード例 #24
0
        /// <summary>
        ///  处理gps信息,刷新控件及发送信息给主窗口
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e">gps信息</param>
        void GPSForm_GpsLogEvent(object sender, EventsClass.GpsEventArgs e)
        {
            if (GpsLog.InvokeRequired)
            {
                LogBoxCallback d = new LogBoxCallback(GPSForm_GpsLogEvent);
                this.Invoke(d, new object[] { sender, e });
            }
            else
            {
                string comming = e.gpsdata;
                comming = comming.Substring(comming.LastIndexOf("EB90"));
                string[] str = comming.Split(',');
                if (str[1] == "03")
                {
                    GpsLog.AppendText("430-->>" + e.gpsdata + ",END" + "\r\n");
                    GpsLog.ScrollToCaret();
                    if (str[2] == "Y")
                    {
                        GpsLog.AppendText("430回复ACK正确" + "\r\n");
                        GpsLog.ScrollToCaret();
                    }
                    else
                    {
                        GpsLog.AppendText("430回复ACK错误" + "\r\n");
                        GpsLog.ScrollToCaret();
                    }
                }
                else
                {
                    string oldstr = comming;


                    oldstr = oldstr.Remove(oldstr.Length - 2);
                    try
                    {
                        string crcnew = CRCHelper.CRC16(oldstr);

                        string newstr = CRCHelper.ConvertCharToHex(comming) + CRCHelper.ConvertCharToHex(",END");
                        GpsLog.AppendText("430-->>" + newstr + "\r\n");
                        GpsLog.ScrollToCaret();
                        string crc = newstr.Substring(newstr.Length - 12, 4);

                        if (crc == crcnew)
                        {
                            string ack = "EB90,03,Y,";
                            ack += CRCHelper.CRC16(ack);
                            ack += ",END";
                            ack  = CRCHelper.ConvertCharToHex(ack);
                            WriteCommand(ack);
                            GpsLog.AppendText("上位机回复ACK正确" + "\r\n");
                            GpsLog.ScrollToCaret();
                        }
                        else
                        {
                            string ack = "EB90,03,N,";
                            ack += CRCHelper.CRC16(ack);
                            ack += ",END";
                            ack  = CRCHelper.ConvertCharToHex(ack);
                            WriteCommand(ack);
                            GpsLog.AppendText("上位机回复ACK错误" + "\r\n");
                            GpsLog.ScrollToCaret();
                            wrongnumber++;
                            numberlabel.Text = "上位机校验错误次数:" + wrongnumber.ToString() + " 双击清零";
                        }
                    }
                    catch (Exception MyEx)
                    {
                        MessageBox.Show(MyEx.Message + ":" + MyEx.StackTrace);
                    }
                }
            }
        }
コード例 #25
0
ファイル: TCPCommand.ACN.cs プロジェクト: BJFX/Torp
        public override bool Send(out string error)
        {
            bool isEnd = true;

            error = null;
            try
            {
                var          filereader        = new BinaryReader(_filestream);
                var          mySendBuffer      = new byte[1028];
                var          sendBytes         = 0;
                Int16        numberOfBytesRead = 0;
                const ushort head = 0xDADA;
                Buffer.BlockCopy(BitConverter.GetBytes(head), 0, mySendBuffer, 0, 2);
                while ((numberOfBytesRead = (Int16)filereader.Read(mySendBuffer, 4, 1024)) != 0)
                {
                    Buffer.BlockCopy(BitConverter.GetBytes(numberOfBytesRead), 0, mySendBuffer, 2, 2);
                    base.LoadData(mySendBuffer);
                    if (SendData(out error))
                    {
                        if (EAutoResetEvent.WaitOne(TimeOut))
                        {
                            Debug.WriteLine("WaitOne!!!");

                            if (!_args.ParseOK)
                            {
                                error = _args.ErrorMsg;
                                isEnd = false;
                                break;
                            }
                            sendBytes += numberOfBytesRead;
                            if (ReportSendBytes != null)
                            {
                                ReportSendBytes(sendBytes);
                            }
                        }
                        else
                        {
                            error = " 接收数据超时!";
                            isEnd = false;
                            break;
                        }
                    }
                    else
                    {
                        isEnd = false;
                        break;
                    }
                }
                //循环接收,两种可能:超时or出错;发完了
                if (isEnd)
                {
                    filereader.BaseStream.Seek(0, SeekOrigin.Begin);//回到文件头
                    var totalb = filereader.ReadBytes((int)filereader.BaseStream.Length);
                    var crc    = CRCHelper.CRC16Byte(totalb);
                    filereader.Close();
                    const int End = 0xEDED;
                    Buffer.BlockCopy(BitConverter.GetBytes(End), 0, mySendBuffer, 0, 2);
                    Buffer.BlockCopy(BitConverter.GetBytes(crc), 0, mySendBuffer, 2, 2);
                    base.LoadData(mySendBuffer);
                    isEnd = SendData(out error);
                }

                return(isEnd);
            }
            catch (Exception exception)
            {
                error = exception.Message;

                return(false);
            }
        }