private void UpdataDataGrid1(ref EPDU_Struct myEPDU, ref List <string> APIDList, ref Dictionary <string, Queue <byte[]> > Apid_EPDU_Dictionary, ref Dictionary <string, BinaryWriter> myDictionary) { //int apid_int = Convert.ToInt32(textBox2.Text, 16); //string apid_s = Convert.ToString(apid_int, 2).PadLeft(11, '0'); dataGridView1.Rows[0].Cells[0].Value = myEPDU.Version; dataGridView1.Rows[0].Cells[1].Value = myEPDU.Type; dataGridView1.Rows[0].Cells[2].Value = myEPDU.FuDT; dataGridView1.Rows[0].Cells[3].Value = myEPDU.APID; dataGridView1.Rows[0].Cells[4].Value = myEPDU.DivdTag; dataGridView1.Rows[0].Cells[5].Value = myEPDU.BagCount; dataGridView1.Rows[0].Cells[6].Value = myEPDU.CountStr; string str = ""; for (int i = 0; i < myEPDU.Count; i++) { str += myEPDU.EPDU_Body[i].ToString("x2"); } textBox1.AppendText(str + "\n"); if (textBox1.Lines.Count() > 50) { textBox1.Clear(); } //switch (chan) //{ // case 1: // APIDList = Data.APIDList; // Apid_EPDU_Dictionary = Data.Apid_EPDU_Dictionary; // break; // case 2: // APIDList = Data.APIDList2; // Apid_EPDU_Dictionary = Data.Apid_EPDU_Dictionary2; // break; // case 99: // APIDList = Data.APIDList3; // Apid_EPDU_Dictionary = Data.Apid_EPDU_Dictionary3; // break; // default: // APIDList = Data.APIDList; // Apid_EPDU_Dictionary = Data.Apid_EPDU_Dictionary; // break; //} if (APIDList.IndexOf(myEPDU.APID) < 0) { APIDList.Add(myEPDU.APID); Queue <byte[]> myEPDUqueue = new Queue <byte[]>(); Apid_EPDU_Dictionary.Add(myEPDU.APID, myEPDUqueue); string timestr = string.Format("{0}-{1:D2}-{2:D2} {3:D2}:{4:D2}:{5:D2}", DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second); string filename0 = Save_path + myEPDU.APID + "_" + timestr + ".dat"; FileStream ApidFile = new FileStream(filename0, FileMode.Create); BinaryWriter bw1 = new BinaryWriter(ApidFile); Trace.WriteLine("此时的通道channel:" + channel.ToString()); myDictionary.Add(myEPDU.APID, bw1); } if (myDictionary.ContainsKey(myEPDU.APID)) { myDictionary[myEPDU.APID].Write(myEPDU.EPDU_Head); myDictionary[myEPDU.APID].Write(myEPDU.EPDU_Body); myDictionary[myEPDU.APID].Flush(); byte[] tempEPDU = new byte[6 + myEPDU.Count + 1]; Array.Copy(myEPDU.EPDU_Head, 0, tempEPDU, 0, 6); Array.Copy(myEPDU.EPDU_Body, 0, tempEPDU, 6, myEPDU.Count + 1); Apid_EPDU_Dictionary[myEPDU.APID].Enqueue(tempEPDU); } else { Trace.WriteLine("未找到APID对应的File文件!!Error!!!"); } }
private void DealWithLastMPDU() { UpdateDataGrid UpdateDG = new UpdateDataGrid(UpdataDataGrid1); if (TempMPDU.MPDU1_Used) { TempMPDU.MPDU1_Used = false; int len = 1002 - TempMPDU.Pointer1Value; byte[] Deal_LastMPDU = new byte[len]; Array.Copy(TempMPDU.MPDU_Body1, TempMPDU.Pointer1Value, Deal_LastMPDU, 0, len); while (len > 6) { EPDU_Struct myEPDU = new EPDU_Struct(); Array.Copy(Deal_LastMPDU, 0, myEPDU.EPDU_Head, 0, 6); Array.Copy(Deal_LastMPDU, 6, Deal_LastMPDU, 0, len - 6); len -= 6; myEPDU.DealEPDUHead(); if (myEPDU.Count > 249) { WrongEPDU += 1; Trace.WriteLine(myEPDU.EPDU_Head[0]); Trace.WriteLine(myEPDU.EPDU_Head[1]); Trace.WriteLine(myEPDU.EPDU_Head[2]); Trace.WriteLine(myEPDU.EPDU_Head[3]); Trace.WriteLine(myEPDU.EPDU_Head[4]); Trace.WriteLine(myEPDU.EPDU_Head[5]); Trace.WriteLine("EPDU包长大于249,出错跳出"); break; } if (len > myEPDU.Count + 1) { Array.Copy(Deal_LastMPDU, 0, myEPDU.EPDU_Body, 0, myEPDU.Count + 1); Array.Copy(Deal_LastMPDU, myEPDU.Count + 1, Deal_LastMPDU, 0, len - myEPDU.Count - 1); len -= (myEPDU.Count + 1); //将一个EPDU显示出来 // dataGridView1.Invoke(UpdateDG, myEPDU); switch (channel) { case 1: dataGridView1.Invoke(UpdateDG, myEPDU, Data.APIDList, Data.Apid_EPDU_Dictionary, Data.myDictionary1); break; case 2: dataGridView1.Invoke(UpdateDG, myEPDU, Data.APIDList2, Data.Apid_EPDU_Dictionary2, Data.myDictionary2); break; case 0: dataGridView1.Invoke(UpdateDG, myEPDU, Data.APIDList3, Data.Apid_EPDU_Dictionary3, Data.myDictionary3); break; default: dataGridView1.Invoke(UpdateDG, myEPDU, Data.APIDList, Data.Apid_EPDU_Dictionary, Data.myDictionary1); break; } } else { Trace.WriteLine("有帧头,但长度不足myEpdu.Count+1"); } } } }
private void DealWith_Temp_MPDUS(byte[] Deal_TwoMPDU) { UpdateDataGrid UpdateDG = new UpdateDataGrid(UpdataDataGrid1); int len = Deal_TwoMPDU.Length; while (len > 6) { // Trace.WriteLine("Deal_TwoMPUD中的数据长度是:" + len.ToString()); EPDU_Struct myEPDU = new EPDU_Struct(); Array.Copy(Deal_TwoMPDU, 0, myEPDU.EPDU_Head, 0, 6); Array.Copy(Deal_TwoMPDU, 6, Deal_TwoMPDU, 0, len - 6); len -= 6; myEPDU.DealEPDUHead(); if (myEPDU.Count > 249) { // Trace.WriteLine(myEPDU.APID); if (myEPDU.APID == "11111111111") { // Trace.WriteLine("收到超过249的空闲EPDU包!"); } else { WrongEPDU += 1; // Trace.WriteLine("EPDU包长大于249,出错跳出"); break; } } if (len >= myEPDU.Count + 1) { Array.Copy(Deal_TwoMPDU, 0, myEPDU.EPDU_Body, 0, myEPDU.Count + 1); Array.Copy(Deal_TwoMPDU, myEPDU.Count + 1, Deal_TwoMPDU, 0, len - myEPDU.Count - 1); len -= (myEPDU.Count + 1); //将一个EPDU显示出来 switch (channel) { case 1: dataGridView1.Invoke(UpdateDG, myEPDU, Data.APIDList, Data.Apid_EPDU_Dictionary, Data.myDictionary1); break; case 2: dataGridView1.Invoke(UpdateDG, myEPDU, Data.APIDList2, Data.Apid_EPDU_Dictionary2, Data.myDictionary2); break; case 0: dataGridView1.Invoke(UpdateDG, myEPDU, Data.APIDList3, Data.Apid_EPDU_Dictionary3, Data.myDictionary3); break; default: dataGridView1.Invoke(UpdateDG, myEPDU, Data.APIDList, Data.Apid_EPDU_Dictionary, Data.myDictionary1); break; } } else { // Trace.WriteLine("有帧头,但长度不足myEpdu.Count+1"); } } // Trace.WriteLine("剩余长度不足6Byte"); }
private void DealWithEpduQueue(string apid, int chan) { Trace.WriteLine("DealWithEpudQueue +" + apid + "-" + chan.ToString()); List <string> APIDList; List <string> AlreadyOnApid; Dictionary <string, Queue <byte[]> > Apid_EPDU_Dictionary; switch (chan) { case 1: APIDList = Data.APIDList; AlreadyOnApid = Data.AlreadyOnApid; Apid_EPDU_Dictionary = Data.Apid_EPDU_Dictionary; break; case 2: APIDList = Data.APIDList2; AlreadyOnApid = Data.AlreadyOnApid2; Apid_EPDU_Dictionary = Data.Apid_EPDU_Dictionary2; break; case 0: APIDList = Data.APIDList3; AlreadyOnApid = Data.AlreadyOnApid3; Apid_EPDU_Dictionary = Data.Apid_EPDU_Dictionary3; break; default: APIDList = Data.APIDList; AlreadyOnApid = Data.AlreadyOnApid; Apid_EPDU_Dictionary = Data.Apid_EPDU_Dictionary; break; } while (ThreadOn) { if (APIDList.IndexOf(apid) >= 0) { if (Apid_EPDU_Dictionary[apid].Count() > 0) { EPDU_Struct myEPDU = new EPDU_Struct(); byte[] tempEPDU = Apid_EPDU_Dictionary[apid].Dequeue(); Trace.WriteLine(tempEPDU.Count()); Array.Copy(tempEPDU, 0, myEPDU.EPDU_Head, 0, 6); myEPDU.DealEPDUHead(); Array.Copy(tempEPDU, 6, myEPDU.EPDU_Body, 0, tempEPDU.Count() - 6); dataGridView1.Rows[0].Cells[0].Value = myEPDU.Version; dataGridView1.Rows[0].Cells[1].Value = myEPDU.Type; dataGridView1.Rows[0].Cells[2].Value = myEPDU.FuDT; dataGridView1.Rows[0].Cells[3].Value = myEPDU.APID; dataGridView1.Rows[0].Cells[4].Value = myEPDU.DivdTag; dataGridView1.Rows[0].Cells[5].Value = Convert.ToInt32(myEPDU.BagCount, 2); dataGridView1.Rows[0].Cells[6].Value = myEPDU.CountStr; string str = ""; for (int i = 0; i < myEPDU.Count; i++) { str += myEPDU.EPDU_Body[i].ToString("x2"); } textBox1.AppendText(str + "\n"); if (textBox1.Lines.Count() > 20) { textBox1.Clear(); } } } else { Thread.Sleep(500); Trace.WriteLine("111"); } } }