public CMensaje montarMensaje2() { int tam = (listaEB.Count - 1) * 7; byte[] datos = new byte[tam]; int cont = 0; byte[] aux = new byte[8]; int numPaquetes = (int)listaEB[0].Byte_3; int numDatos = (int)listaEB[0].Byte_1; for (int i = 1; i < listaEB.Count && i <= numPaquetes; i++) { for (int j = 1; j < 8 && cont < tam && cont < numDatos; j++) { aux = listaEB[i].getDatos(); datos[cont] = aux[j]; cont++; } } byte[] auxiliarBytes = new byte[numDatos]; for (int i = 0; i < numDatos; i++) { auxiliarBytes[i] = datos[i]; } CMensaje mensajeRetorno = new CMensaje(); mensajeRetorno.setDatos(auxiliarBytes); string id1 = pasaByteToString(listaEB[0].Byte_6); string id2 = pasaByteToString(listaEB[0].Byte_5); mensajeRetorno.setId(listaEB[0].Id_0 + id1 + id2 + listaEB[0].Id_3); mensajeRetorno.Tipo = listaEB[0].Tipo; return(mensajeRetorno); }
//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; } }
//Para mensajes multipaquete private void procesoNormal2(CMensaje _mensaje, dsMensajes.mensajesRow _fila) { //this.listaTotal.Add(_mensaje); //introduce en la lista total if (existeId(_mensaje)) //si el codigo leido existe en la tabla resumen { //devuelve la fila anterior con el mismo id que exista en la lista resumen dsMensajes.mensajesRow filaExistente = devuelveId(_mensaje); if (filaExistente != null)//si la fila no es nula { //se cambian los datos de la fila anterior por los de la fila nueva filaExistente.datos = _fila.datos; filaExistente.recuento = filaExistente.recuento + 1; } } else { //se introduce el registro nuevo _fila.recuento = 1; //inicializo recuento a 1 antes de introducirlo en la tabla this.dsMensajes.mensajes.AddmensajesRow(_fila); //Añade la fila leida } //imprimir(_mensaje); //Recoleccion de basura _mensaje = null; _fila = null; //Debug.WriteLine(fila.datos); }
//Solo EC private void procesoNormal3(CMensaje _mensaje, dsMensajes.mensajesRow _fila) { this.listaTotal.Add(_mensaje); //introduce en la lista total imprimir(_mensaje); //Recoleccion de basura _mensaje = null; _fila = null; }
//Funcion que formatea el ID private static string separaId(CMensaje _mensaje) { string hex = _mensaje.Id.Substring(0, 2) + " " + _mensaje.Id.Substring(2, 2) + " " + _mensaje.Id.Substring(4, 2) + " " + _mensaje.Id.Substring(6, 2); return(hex); }
//Convierte una fila en un objeto CMensaje public CMensaje MensajesRowToCMensaje(dsMensajes.mensajesRow _mensaje) { CMensaje mensaje = new CMensaje(); mensaje.Tipo = _mensaje.tipo.ToString(); mensaje.Id = _mensaje.id_mostrar; mensaje.Recuento = _mensaje.recuento; return(mensaje); }
//Devuelve true si el mensaje recibido es de tipo EC o EB private bool noEsMensajeMultipaquete(CMensaje _mensaje) { //Los multipaquetes se forman por una cabercera (contiene en el Id - EC) y uno o varios cuerpos(contiene en el Id - EB) if (!_mensaje.Id_1.Equals("EC") && !_mensaje.Id_1.Equals("EB")) { return(true);//No es multipaquete } else { return(false);//Es multipaquete } }
//Devuelve Id del mensaje recibido private dsMensajes.mensajesRow devuelveId(CMensaje _mensaje) { //Revisar: dsMensajes.mensajesRow row = this.dsMensajes.mensajes.FindByid(men.Tipo + men.Id); dsMensajes.mensajesRow filaMensaje = this.dsMensajes.mensajes.FindByid(_mensaje.Id); if (filaMensaje != null) { return(filaMensaje); } else { return(null); } }
//Devuelve true si existe el Id del mensaje recibido private bool existeId(CMensaje _mensaje) { dsMensajes.mensajesRow filaMensaje = this.dsMensajes.mensajes.FindByid(_mensaje.Id); if (filaMensaje != null) { filaMensaje = null; return(true); } else { filaMensaje = null; return(false); } }
private bool mensajeCorrecto(CMensaje _in) { string id = _in.Id; if ((id[id.Length - 2].ToString() + id[id.Length - 1].ToString() == "0A" && _in.Byte_0.ToString() == "13")) { return(false); } if (_in.Byte_0.ToString() == "10" && _in.Byte_1.ToString() == "13") { return(false); } for (int i = 0; i < id.Length - 3; i += 2) { string idAux = id[i].ToString() + id[i + 1].ToString(); string idAuxSig = id[i + 2].ToString() + id[i + 3].ToString(); if (idAux == "0A" && idAuxSig == "0D") { return(false); } } return(true); }
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"); } } }