Visual Basic.NET - COMO LEER DATOS DE UNA BASCULA CON VB.NET

 
Vista:
sin imagen de perfil
Val: 10
Ha aumentado su posición en 2 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

COMO LEER DATOS DE UNA BASCULA CON VB.NET

Publicado por Victor (5 intervenciones) el 13/05/2020 19:24:49
Un saludos a todos

Necesito ayuda y asesoría con un sistema que estoy empezando a realizar, la verdad nunca habia trabajado con puertos com y basculas

Tengo una bascula avery weigh tronix model 1310 de la cual quiero leer y guardar el peso que registra

No tengo idea de por donde empezar

Lo que investigue es lo siguiente


Informacion del puerto com

Baud: 9600
Data Bits: 8
Parity: None
Stop Bits: 1
EOM: 13
Handshake: None
Mode: Basic Control

Los datos son enviados en este formato

G 86320 LB
G<sp>######<sp>UU<cr><lf>

Si alguien me puede orientar se lo agradecería mucho
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 230
Ha aumentado su posición en 2 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

COMO LEER DATOS DE UNA BASCULA CON VB.NET

Publicado por Cesar (79 intervenciones) el 13/05/2020 19:26:53
Hola.

Solo tienes que realizar una simple conexion serial (mediante la clase SerialPort, y listo. Puedes enviar y recibir datos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Wilfredo Patricio Castillo
Val: 1.239
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

COMO LEER DATOS DE UNA BASCULA CON VB.NET

Publicado por Wilfredo Patricio Castillo (720 intervenciones) el 14/05/2020 17:35:36
Si ya sabes todo eso, y sabes que datos te envía, solo es cuestión que en el evento arraived, si es que lo tiene el componente port o no recuerdo en este momento el otro componente para la lectura, que captures la trama que viene como cadena de texto y limpies o separes los datos válidos, y los controles vienen tanto delante como detrás del dato correcto.

Haces las pruebas con varias cantidades diferentes para ver la longitud de la data válida y ya con eso tendrás los valores sin problemas y llevarlos a BD o a donde lo estimes conveniente.

Saludos cordiales,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 10
Ha aumentado su posición en 2 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

COMO LEER DATOS DE UNA BASCULA CON VB.NET

Publicado por Victor (5 intervenciones) el 22/05/2020 23:59:47
Estuve revisando las comunicaciones con ayuda de hyperterminal pero lo unico que me manda la bascula son simbolos como los siguientes


ðøðýôôöüôùôöêøùôüôøúüùðüüòùôô¬úøðúôþø~éàþöùìôüôùüìòõþýðüøøùôôøðøüôüòþüüðöôøøûúôö
òºöùäüúéüõôîþüôôöúúÜøôüøúxýôþðìýäüüôýüø¸üøòôððòýöøäøú¸þô zôúøûüìòòý|ýúþ¨üøüðþúüþ
ýðôõÔùúþôôùäöôúôøôúöéúùôüôôôùýäòüüèýðôøôøñäôþòôöüö¸¼þôøÚüâØôúðôäðòyôðùôüøüýäôüõð
üòöíüøøÄ÷üð¸ôôüþúòöúúyòúøúðxêúÜöðtòûýþøöþ¾øüüöôêêðäõõôðùúýyôìqøôûõüöðøôðüúûôòøüô
òùúýñú õôøøöðüøüèüôúÔxýùôýüüpýöòúþüô¸úøôúôôü


Esta configurado

bits por segundo 1200
bits de datos 8
paridad Ninguno
bit de parada 1
control de flujo Ninguno




Anexo imagen de lo que comento


hyperterminal
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Wilfredo Patricio Castillo
Val: 1.239
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

COMO LEER DATOS DE UNA BASCULA CON VB.NET

Publicado por Wilfredo Patricio Castillo (720 intervenciones) el 23/05/2020 04:04:22
Debes obtener el manual de la báscula, para que sepas bajo que formato te envía los datos.

Si lo estás probando por hyper terminal, está conectado por un puerto serial COM1 o COMx?, y deberías tenerlo configurado mas o menos así:

bits por segundo 9600
bits de datos 8
paridad Ninguno
bit de parada 1
control de flujo Ninguno

Ahora si te envía en algún otro formato, entonces habría que ver cual es ese formato de información que te está enviando.

Saludos cordiales,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

COMO LEER DATOS DE UNA BASCULA CON VB.NET

Publicado por carlos (3 intervenciones) el 28/01/2022 19:25:39
Yo te hago el programa , mándame los requerimientos y te cobro lo justo...yo he trabajado por años con esos sistemas
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

COMO LEER DATOS DE UNA BASCULA CON VB.NET

Publicado por carlos (3 intervenciones) el 10/02/2022 19:37:20
Yo trabajo bastante con puertos seriales y puertos ip
yo te ayudo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

COMO LEER DATOS DE UNA BASCULA CON VB.NET

Publicado por Cesar (1 intervención) el 12/06/2022 08:43:07
Carlos como se te contracara me interesa me desarrolles un programa para basculas
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

COMO LEER DATOS DE UNA BASCULA CON VB.NET

Publicado por jr (1 intervención) el 09/02/2023 16:42:30
Los valores de bit de stop, bauds, etc etc ponlos en una tablita de base de datos.
Y crea una pantalla de Windows forms donde pondras todos los objetos referidos en el codigo nombralos igual.
la cadena que se transmite: tambien debes saber donde inicia y donde termina cada campo o valor y cuanto mide la cadena en total.






En un boton poner el codigo :

If TomarParametrosYAbrirPuerto(ComboBoxPlataformaTara.SelectedValue) Then
Call ActivarLectura()
End If

Recuerda agregar un timer en la pantalla donde quieres tomar el peso


rutinas:

Sub ActivarLectura()

'Esto asegura que no se obtiene algo que haya quedado en el buffer de una transmision anterior
'tanto de envio como de recepcion.

Try
If SerialPort1.IsOpen Then
SerialPort1.DiscardInBuffer() 'Borrar el buffer de entrada
SerialPort1.DiscardOutBuffer() 'Borrar el buffer de salida
End If

MilisegundosTranscurridos = 0

Timer1.Start()


Catch ex As Exception

CerrarPuerto()

TextBoxMsj.Text = "Puerto " & SerialPort1.PortName & " " & Err.Description

End Try

End Sub


Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick

MilisegundosTranscurridos = MilisegundosTranscurridos + 1


If SerialPort1.IsOpen = False Then
TextBoxMsj.Text = "Puerto cerrado"
Timer1.Stop()
ComboBoxPlataformaBoleta.Focus()
End If

If MilisegundosTranscurridos > g_tiempo_espera Then
MaskedTextBoxBrutoBoleta.ForeColor = Color.Red
MaskedTextBoxTaraBoleta.ForeColor = Color.Red
MaskedTextBoxNetoBoleta.ForeColor = Color.Red
TextBoxMsj.Text = "Tiempo agotado"

CerrarPuerto() 'Requiere ser inicializado

Timer1.Stop()
ComboBoxPlataformaBoleta.Focus()

End If

If l_leido_estado = g_valor_estable And Val(MaskedTextBoxBrutoBoleta.Text) > 0 Then

MaskedTextBoxBrutoBoleta.ForeColor = Color.Lime
MaskedTextBoxTaraBoleta.ForeColor = Color.Lime
MaskedTextBoxNetoBoleta.ForeColor = Color.Lime
TextBoxMsj.Text = "Peso estable"
Timer1.Stop()

'Trata de Obtener la fecha tara y la tara en el historial de taras
'nuevojr
Dim obtiene As fechatara = ObtieneFechaTaraRegistrada(ComboBoxMedioDeTransporteBoleta.SelectedValue, ComboBoxTipoTransaccionDisplayBoleta.SelectedValue, ComboBoxEconomicoBoleta.Text, ComboBoxClaseProductoBoleta.SelectedValue, "01/01/1900 00:00:00")
TextBoxFechaTaraBoleta.Text = obtiene.fecha
MaskedTextBoxTaraBoleta.Text = obtiene.tara

'Calcular Peso neto
If Val(MaskedTextBoxTaraBoleta.Text) = 0 Then

If ComboBoxMedioDeTransporteBoletaOk.SelectedValue = "F" Then
NuevaBoleta()
Else
MsgBox("Advertencia: La tara no está disponible")
End If

Else

Dim l_bruto As Decimal = Val(MaskedTextBoxBrutoBoleta.Text)

'Si es Ferrocarril y es: Tolva
'el peso bruto debe dividirse entre 2 siempre y cuando haya 2 tolvas en la bascula}
If ComboBoxMedioDeTransporteBoleta.SelectedValue = g_ffcc Then
If Mid(ComboBoxEconomicoBoleta.SelectedValue, 1, 1) = "V" Then
If Trim(TextBoxHay2Tolvas.Text) = "S" Then
TextBoxMsj.Text = "Sobre la plataforma Usted dice que hay 2 tolvas el peso bruto se dividira entre 2"
l_bruto = l_bruto / 2
End If
End If
End If

Dim l_neto As Decimal = l_bruto - Val(MaskedTextBoxTaraBoleta.Text)

MaskedTextBoxNetoBoleta.Text = Format(l_neto, "###0.000")

End If


'g_economico_estricto se usa para validar activacion de rafid
'Valida numeros economicos de tractor y caja1 cuando se trata de un camion
If ComboBoxMedioDeTransporteBoleta.SelectedValue = g_camion Then

If Trim(l_leido_economico_tractor) <> Trim(ComboBoxEconomicoBoleta.Text) And g_economico_estricto = "S" Then
If Not (aEcE()) Then
PoneEnCerosLosPesos(g_PalabraBoleta)
MsgBox("Economicos RFID: " & Trim(l_leido_economico_tractor) & " Seleccionado: " & Trim(ComboBoxEconomicoBoleta.Text) & " no coinciden")
ButtonObtenerPesoBoleta.Focus()
Return
End If
End If

If Trim(l_leido_economico_caja1) <> Trim(ComboBoxEconomicoBoleta.Text) And g_economico_estricto = "S" Then
If Not (aEcE()) Then
PoneEnCerosLosPesos(g_PalabraBoleta)
MsgBox("Economicos RFID: " & Trim(l_leido_economico_caja1) & " Seleccionado: " & Trim(ComboBoxEconomicoBoleta.Text) & " no coinciden")
ButtonObtenerPesoBoleta.Focus()
Return
End If
End If

End If

ButtonRegistrarBoleta.Focus()

End If


data_recibida += SerialPort1.ReadExisting()

If data_recibida.Contains(Chr(13)) Then
LeerCadena()
data_recibida = ""
End If




end sub


Private Sub LeerCadena()


Try


If data_recibida.Length > 0 Then

l_leido_estado = ""
l_leido_modo = ""
l_leido_polaridad = ""
l_leido_peso = 0
l_leido_um = ""
l_leido_economico_tractor = ""
l_leido_economico_caja1 = ""
l_leido_economico_caja2 = ""


'Para Desplegar resultados erroneos ---------------
If IsNumeric(Mid(data_recibida, g_peso_inicio, g_peso_long)) Then
l_leido_peso = Mid(data_recibida, g_peso_inicio, g_peso_long)
TextBoxMsj.Text = Format(l_leido_peso, "###0")
End If
'fin Desplegar -------------o-----------------------


If Mid(data_recibida, g_estado_inicio, g_estado_long) = g_valor_estable Then

'cerrar el puerto ok
CerrarPuerto()


l_leido_estado = Mid(data_recibida, g_estado_inicio, g_estado_long)

l_leido_modo = Mid(data_recibida, g_modo_inicio, g_modo_long)

l_leido_polaridad = Mid(data_recibida, g_polaridad_inicio, g_polaridad_long)

l_leido_peso = Mid(data_recibida, g_peso_inicio, g_peso_long)

l_leido_um = Mid(data_recibida, g_um_inicio, g_um_long)

l_leido_economico_tractor = Mid(data_recibida, g_economico_tractor_inicio, g_economico_tractor_long)

l_leido_economico_caja1 = Mid(data_recibida, g_economico_caja1_inicio, g_economico_caja1_long)

l_leido_economico_caja2 = Mid(data_recibida, g_economico_caja2_inicio, g_economico_caja2_long)


l_leido_peso = l_leido_peso / 1000



MaskedTextBoxBrutoBoleta.Text = Format(l_leido_peso, "###0.000")

If ComboBoxMedioDeTransporteBoleta.SelectedValue = g_camion Then
TextBoxEconomicoTractorBoleta.Text = l_leido_economico_tractor
TextBoxEconomicoCaja1Boleta.Text = l_leido_economico_caja1
Else
TextBoxEconomicoTractorBoleta.Text = ""
TextBoxEconomicoCaja1Boleta.Text = ""
End If

End If

End If


Catch ex As Exception

TextBoxMsj.Text = "Puerto " & SerialPort1.PortName & " Al estar leyecndo cadena " & Err.Description

End Try


End Sub


Private Sub CerrarPuerto()

Try

If SerialPort1.IsOpen Then
SerialPort1.Close()
End If

Catch ex2 As System.Exception
TextBoxMsj.Text = "Puerto " & SerialPort1.PortName & " No Pudo Cerrarse"
End Try

End Sub

Public Function TomarParametrosYAbrirPuerto(ByVal puerto As String) As Boolean

'no aplican estos parametros (se dejan para referecnias posteriores)
'SerialPort1.DtrEnable = True 'Activar de Data Terminal Ready
'SerialPort1.RtsEnable = True 'Activar Request To Send
'SerialPort1.ReadBufferSize = 1024 'Dimensionar tamaño buffer recepcion
'SerialPort1.WriteBufferSize = 1024 'Dimensionar tamaño buffer envio

CerrarPuerto()
SerialPort1.PortName = puerto


SerialPort1.Handshake = Handshake.XOnXOff 'Tipo control para recepcion/envio

SerialPort1.BaudRate = g_baud
SerialPort1.DataBits = g_dato_bit

If g_paridad = "None" Then
SerialPort1.Parity = Parity.None
End If

If g_paridad = "Odd" Then
SerialPort1.Parity = Parity.Odd
End If

If g_paridad = "Even" Then
SerialPort1.Parity = Parity.Even
End If

If g_paridad = "Mark" Then
SerialPort1.Parity = Parity.Mark
End If

If g_paridad = "Space" Then
SerialPort1.Parity = Parity.Space
End If



If g_bit_stop = "None" Then
SerialPort1.StopBits = StopBits.None
End If

If g_bit_stop = "One" Then
SerialPort1.StopBits = StopBits.One
End If

If g_bit_stop = "Two" Then
SerialPort1.StopBits = StopBits.Two
End If

If g_bit_stop = "OnePointFive" Then
SerialPort1.StopBits = StopBits.OnePointFive
End If


Try

SerialPort1.Open()

SerialPort1.DiscardInBuffer() 'Borrar el buffer de entrada
SerialPort1.DiscardOutBuffer() 'Borrar el buffer de salida

Return True


Catch ex As Exception

CerrarPuerto()

TextBoxMsj.Text = "Puerto " & SerialPort1.PortName & " No Pudo Abrirse " & Err.Description

Return False

End Try


End Function
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

COMO LEER DATOS DE UNA BASCULA CON VB.NET

Publicado por Nunger (1 intervención) el 12/07/2023 17:31:17
El problema es solo la velocidad de la bascula, prueba con diferentes velocidades, por lo general es la de 9600
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar