//Imprime por pantalla los mensajes private void imprimir(CMensaje _mensaje) { if (this.InvokeRequired) { this.Invoke(new imprimeTotalDelegate(imprimir), new CMensaje[] { _mensaje }); } else { string datosSep = separaDatos(_mensaje.getDatos()); //Formatea cadena, separando por byte string hex = separaId(_mensaje); int aux; if (Int32.TryParse(_mensaje.Tipo, out aux)) { int num_bandera = aux; if (num_bandera == 0)//Standar { listBox1.Items.Add(_mensaje.Tiempo.PadLeft(7, '0') + " " + hex + " " + datosSep); listBox1.SelectedIndex = listBox1.Items.Count - 1; } else if (num_bandera == 1) //Extendido { string insert = ""; insert = _mensaje.Tiempo.PadLeft(7, '0') + " " + hex + " " + datosSep; listBox2.Items.Add(insert); //listBox2.Items.Add(_mensaje.Tiempo.PadLeft(7, '0') + " " + hex + " " + datosSep); listBox2.SelectedIndex = listBox2.Items.Count - 1; } } _mensaje = null; } }
public void exportar() { List <string> mensajesExportar = new List <string>(); String id = txPF.Text + " " + txPS.Text; if (Program.gFrmPpal.listBox2.Items.Count > 0) { for (int i = 0; i < Program.gFrmPpal.listBox2.Items.Count; i++) { string aux = (string)Program.gFrmPpal.listBox2.Items[i]; if (aux.Contains(id)) { mensajesExportar.Add(aux); } } } else { for (int i = 0; i < Program.gFrmPpal.listBox1.Items.Count; i++) { string aux = (string)Program.gFrmPpal.listBox1.Items[i]; if (aux.Contains(id)) { mensajesExportar.Add(aux); } } } List <CMensaje> listaCMensajes = new List <CMensaje>(); for (int i = 0; i < mensajesExportar.Count; i++) { string idMensajes_0 = mensajesExportar[i].Substring(10, 2); string idMensajes_1 = mensajesExportar[i].Substring(13, 2); string idMensajes_2 = mensajesExportar[i].Substring(16, 2); string idMensajes_3 = mensajesExportar[i].Substring(19, 2); string datos = mensajesExportar[i].Substring(23, 23); string tiempo = mensajesExportar[i].Substring(0, 7); CMensaje m = new CMensaje(); m.Id = idMensajes_0 + idMensajes_1 + idMensajes_2 + idMensajes_3; byte[] b = stringDatosTobyte(datos); m.setDatos(b); m.Tiempo = tiempo; listaCMensajes.Add(m); } //Desglosar Mensajes para sacar SPN foreach (CMensaje m in listaCMensajes) { CIdenti identi = new CIdenti(); identi.datos = pasaBytesToString(m.getDatos()); identi.PF = txPF.Text; identi.PS = txPS.Text; identi.SAhex = txSA.Text; identi.tiempo = m.Tiempo; parametrosAuxiliar(identi.PF + identi.PS, identi); } //--------------------------// this.saveFileDialog1.ShowDialog(); string name = this.saveFileDialog1.FileName; if (!name.Trim().Equals("") && this.saveFileDialog1.CheckPathExists) { ListViewItem it; List <ListViewItem> lista = new List <ListViewItem>(); ListViewItem.ListViewSubItemCollection itc; for (int i = 0; i < listView1.Items.Count; i++) { if (listView1.Items[i].Checked) { it = listView1.Items[i]; lista.Add(it); } } //Cargar en lista resto de mensajes if (lista.Count <= 0) { //No hay ningun elemento seleccionado } else { List <string> listaAuxiliar = new List <string>(); foreach (ListViewItem item in lista) { itc = item.SubItems; listaAuxiliar.Add(itc[1].Text); //dsMensajes1.MensajesExport2.Columns.Add(itc[1].Text + " - " + itc[0].Text); //dsMensajes1.MensajesExport2.SPNColumn.ColumnName = itc[1].Text + " - " + itc[0].Text; //dsMensajes1.MensajesExport.AddMensajesExportRow(itc[0].Text, itc[1].Text, itc[2].Text, itc[3].Text, itc[4].Text, ""); dsMensajes1.MensajesExport2.AddMensajesExport2Row(itc[2].Text + " - " + itc[5].Text); } foreach (ListViewItem item2 in general) { itc = item2.SubItems; if (listaAuxiliar.Contains(itc[1].Text)) { dsMensajes1.MensajesExport2.Columns.Add(itc[1].Text + " - " + itc[0].Text); dsMensajes1.MensajesExport2.AddMensajesExport2Row(itc[2].Text + " - " + itc[5].Text); //dsMensajes1.MensajesExport2.SPNColumn.ColumnName = itc[1].Text + " - " + itc[0].Text; } //dsMensajes1.MensajesExport.AddMensajesExportRow(itc[0].Text, itc[1].Text, itc[2].Text, itc[3].Text, itc[4].Text, ""); } dsMensajes1.MensajesExport2.WriteXml(name); } } }
//Cuando se haga click en la lista Extendido private void listBox2_Click(object sender, EventArgs e) { try { if (hiloActivo == false) { string fila = (string)listBox2.SelectedItem; string tiempo = fila.Substring(0, 10); tiempo = tiempo.Trim(); string id = fila.Substring(10, 11); string datos = fila.Substring(23, 23); string mensajeString = id + " " + datos; if (id.Substring(3, 2).Equals("EC")) { //Montar multipaquete CMensaje mensajeEC = new CMensaje(); mensajeEC.Tipo = "01"; id = id.Replace(" ", ""); mensajeEC.Id = id; mensajeEC.setDatos(pasaStringToBytes(datos)); listaEB.Add(mensajeEC); bool correcto = true; mensajeEC.Tiempo = tiempo; //buscar X EB siempre que no encuentre 1 EC for (int i = listBox2.SelectedIndex + 1; i < this.listBox2.Items.Count && correcto; i++) { fila = listBox2.Items[i].ToString(); id = fila.Substring(10, 11); datos = fila.Substring(23, 23); mensajeString = id + " " + datos; if (id.Substring(3, 2).Equals("EB")) { CMensaje mensajeEB = new CMensaje(); mensajeEB.Tipo = "01"; id = id.Replace(" ", ""); mensajeEB.Id = id; mensajeEB.setDatos(pasaStringToBytes(datos)); if (!listaEB.Contains(mensajeEB)) { listaEB.Add(mensajeEB); } } else if (id.Substring(3, 2).Equals("EC")) { correcto = false; } } //var lista = from string s in this.listBox2.Items where s.Contains("EC") select s; //MontarMultiPaquete if (compruebaLista2()) { //dsMensajes.mensajesRow filaAux = this.dsMensajes.mensajes.NewmensajesRow(); CMensaje mensajeAuxiliar = montarMensaje2(); identi.identificador = mensajeAuxiliar.Id; identi.SAhex = string.Format(mensajeAuxiliar.Id_3); identi.PF = string.Format(mensajeAuxiliar.Id_1); identi.PS = string.Format(mensajeAuxiliar.Id_2); identi.PGNhex = identi.PF + identi.PS; string datosAuxiliar2 = pasaBytesToString(mensajeAuxiliar.getDatos()); identi.datos = datosAuxiliar2.Substring(0, 2) + datosAuxiliar2.Substring(2, 2) + datosAuxiliar2.Substring(4, 2) + datosAuxiliar2.Substring(6, 2) + datosAuxiliar2.Substring(8, 2) + datosAuxiliar2.Substring(10, 2) + datosAuxiliar2.Substring(12, 2) + datosAuxiliar2.Substring(14, 2) + datosAuxiliar2.Substring(16, 2) + datosAuxiliar2.Substring(18, 2); prioridad(identi.identificador); identi.PFint = int.Parse(identi.PF, System.Globalization.NumberStyles.HexNumber); Form2 form = new Form2(this.identi); form.ShowDialog(); listaEB.Clear(); } //Form2 form = new Form2(this.identi); //form.ShowDialog(); } else if (id.Substring(3, 2).Equals("EB")) { //Ignorar } else { //Mensaje Normal identi.identificador = mensajeString; identi.SAhex = id.Substring(9, 2); identi.PF = id.Substring(3, 2); identi.PS = id.Substring(6, 2); identi.PGNhex = identi.PF + identi.PS; identi.datos = datos.Substring(0, 2) + datos.Substring(3, 2) + datos.Substring(6, 2) + datos.Substring(9, 2) + datos.Substring(12, 2) + datos.Substring(15, 2) + datos.Substring(18, 2) + datos.Substring(21, 2); prioridad(identi.identificador); identi.PFint = int.Parse(identi.PF, System.Globalization.NumberStyles.HexNumber); identi.tiempo = tiempo; Form2 form = new Form2(this.identi); form.ShowDialog(); } } } catch (Exception exce) { MessageBox.Show("No hay mensajes"); } }
//Procedimiento que procesa los datos private void LeerDatos() { byte[] datos = new byte[13]; string datos_cadena = ""; CMensaje mensaje = null; dsMensajes.mensajesRow fila = this.dsMensajes.mensajes.NewmensajesRow(); if (compruebaCabeceroEsSalto()) { try { for (int i = 0; i < 13; i++) { datos[i] = (byte)this.serialPort1.ReadByte(); } //historico.Add(datos);//Historico string aux = pasaBytesToString(datos); mensaje = new CMensaje(datos); //historicoMensajes.Add(mensaje);//Historico //contadorHistorico++; //Este filtro no es valido, aunque quita algo de basura if ((datos[0] == 0 || datos[0] == 1) && (mensajeCorrecto(mensaje))) { ahora = DateTime.Now; mensaje.Tiempo = Convert.ToInt32((ahora - dateTime).TotalMilliseconds).ToString(); datos_cadena = pasaBytesToString(datos); //Debug.WriteLine(datos_cadena); fila.id = mensaje.Id; fila.tipo = datos[0]; fila.datos = this.pasaBytesToString(mensaje.getDatos()); fila.id_mostrar = mensaje.Id; if (noEsMensajeMultipaquete(mensaje)) { listaDescartes.Clear();//Limpia la lista, por si a fallado alguna lectura de miltupaquetes datos = null; if (compruebaLista())//Si la lista multipaquetes es correcta { dsMensajes.mensajesRow filaAux = this.dsMensajes.mensajes.NewmensajesRow(); CMensaje mensajeAuxiliar = montarMensaje(); filaAux.id = mensajeAuxiliar.Id; filaAux.tipo = 1; filaAux.datos = this.pasaBytesToString(mensajeAuxiliar.getDatos()); filaAux.id_mostrar = mensajeAuxiliar.Id; procesoNormal2(mensajeAuxiliar, filaAux); listaDescartes.Clear(); } procesoNormal(mensaje, fila); mensaje = null; fila = null; } else//Para tratar los multipaquetes { if (aux.Substring(4, 2).Equals("EC")) //Si es cabecera { listaDescartes.Clear(); //Se limpia la lista puesto que a llegado una nueva cabecera numMensajesMulti = sacaNumDatos(aux); //Se obtiene el numero de multipaquetes que tienen que llegar } if (listaDescartes.Count < numMensajesMulti) //Mientras falten multipaquetes { listaDescartes.Add(mensaje); procesoNormal3(mensaje, fila); } if (listaDescartes.Count == numMensajesMulti && listaDescartes.Count != 0 && numMensajesMulti != 0) //Cuando esten todos { if (compruebaLista()) //Si la lista es correcta { dsMensajes.mensajesRow filaAux = this.dsMensajes.mensajes.NewmensajesRow(); CMensaje mensajeAuxiliar = montarMensaje();//Se monta el mensaje a partir de los multipaquetes //Exception filaAux.id = mensajeAuxiliar.Id; filaAux.tipo = 1; filaAux.datos = this.pasaBytesToString(mensajeAuxiliar.getDatos()); filaAux.id_mostrar = mensajeAuxiliar.Id; procesoNormal2(mensajeAuxiliar, filaAux); } listaDescartes.Add(mensaje); procesoNormal3(mensaje, fila);//Se añade el mensaje montado } } }//If para mensajes correctos } catch (TimeoutException) { Console.WriteLine("Tiempo de espera en lectura superado"); } catch (Exception ex) { Console.WriteLine("Exception"); } } }