Código:
Principales respuestas
Avatar de Metaconta
2,600
Puntos
Superior 5
Metaconta
Se unió Jan 2007
4
11
Conversaciones de Metaconta
Mostrar actividad
Conversaciones relacionadas importantes
Enviar y recibir correos Windows Phone 8
Como enviar y recibir datos del puerto serial?
Enviar y recibir Audio/Video en Streaming
Como Enviar una imagen que este en un picturebox en visual basic 2010
enviar datagrid por correo desde visual basic 2010
Enviarme una alerta Enviar y Recibir caracteres de control VB 2010
Desarrollo
>
Comunicación con dispositivos externos
Pregunta
Eliminar alerta
Question
Votar como útil
0
Votar
Buenas tardes a todos tengo el siguiente problema, estoy intentando comunicar una computadora a una maquina BCPLUS3000
El problema surge a la hora de leer y enviar los caracteres de control, no se en que le estoy errando pero en ningùn momento recibo un EOT, ETX,EOF, etc. Con este problema de no leer correctamente los caracteres no puedo responder o realizar las acciones necesarias.
Dejo parte del codigo, no todo ya que no es necesario lo que falla es la lectura el resto funciona.
Imports System Imports System.IO Public Class Form1 Dim WithEvents serialport As New IO.Ports.SerialPort Dim lacuenta As Integer = 0 Public Const STX = &H2 Public Const ETX = &H3 Public Const EOT = &H4 Public Const ENQ = &H5 Public Const ACK = &H6 Public Const EOFF = &H1A Public laruta As String = "" Public ruta As String = "" Public stw As System.IO.StreamWriter 'esto es para escribir en un archivo los resultados' Public Delegate Sub mydelegate() Private Sub btnconnect_Click(sender As System.Object, e As System.EventArgs) Handles btnconnect.Click If serialport.IsOpen Then serialport.Close() End If Try
With serialport .PortName = CbbCOMports.SelectedValue.ToString .BaudRate = 9600 serialport.Encoding =System.Text.Encoding.Default If OptEven.Checked = True Then .Parity = Ports.Parity.Even Else If OptOdd.Checked = True Then .Parity = Ports.Parity.Odd Else .Parity = Ports.Parity.None End If End If If Opt7.Checked = True Then .DataBits = 7 Else .DataBits = 8 End If If Opt1.Checked = True Then .StopBits = 1 Else .StopBits = 2 End If End With serialport.Open() Catch ex As Exception MessageBox.Show(ex.ToString) End Try End Sub Private Sub serialport_DataReceived(sender As Object, e As System.IO.Ports.SerialDataReceivedEventArgs) Handles serialport.DataReceived txtDataReceived.Invoke(New _ mydelegate(AddressOf updateTextBox), _ New Object() {}) End Sub Public Sub updateTextBox() Try
Dim cadena As String = ""
Dim contenido As String = serialport.ReadChar
If Val(contenido) = ENQ Or Val(contenido) = STX Then
serialport.Write(ACK)
End If
If Val(contenido) <> STX And Val(contenido) <> EOT And Val(contenido) <> ENQ And Val(contenido) <> ACK And Val(contenido) <> ETX And Val(contenido) <> EOFF Then
cadena = cadena & Chr(contenido)
stw.Write(cadena)
Else
If Val(contenido) = EOT Or Val(contenido) = ETX Or Val(contenido) = EOFF Then
cadena = cadena & vbCrLf
txtDataReceived.Text = cadena
stw.Write(cadena)
stw.Write(vbCrLf)
End If
End If
With txtDataReceived .Font = New Font("Arial", 10.0!, FontStyle.Bold) .SelectionColor = Color.Blue .AppendText(cadena) If contenido <> "" Then St.Items.Clear() St.Items.Add("Cantidad de renglones recibidos:" & " " & lacuenta) End If .ScrollToCaret() End With Catch ex As Exception MessageBox.Show(ex.Message) End Try End Sub End Class
Espero puedan darme una mano porque llevo un mes con esto sin exagerar y no logro encontrar el error, no se que me estoy salteando o en que le estoy errando, muchas gracias.
Editado JuanCarlosRodriguez 31 miércoles, 25 de febrero de 2015 14:20
miércoles, 25 de febrero de 2015 8:07
Responder
|
Citar
|
Informar como abuso
Avatar de JuanCarlosRodriguez 31
JuanCarlosRodriguez 31
0 Puntos
Respuestas
Question
No puede votar su propia entrada
1
Hola:
Te paso este enlace sobre comunicación por puerto serie con VB .net 2008 que descargas en PDF.
http://electronica-pic.blogspot.com.es/2009/03/manual-interfaz-vc-y-visual-basic.html
Como explica en el tutorial o manual, mejor envía y recibas los comandos mediantes tramas de bytes.
Para que lo sepas, estoy haciendo otro tutorial más actualizado con los tres lenguajes VB, C# y C++ 2013.
Si quieres que te pase este nuevo tutorial que aú no he acabado la parte de electrónica pero si el envío y recibo de tramas de bytes te lo paso por correo electrónico. Ya me dirás.
Un saludos.
http://electronica-pic.blogspot.com
Marcado como respuesta JuanCarlosRodriguez 31 jueves, 26 de febrero de 2015 16:58
jueves, 26 de febrero de 2015 14:31
Responder
|
Citar
|
Editar
Avatar de Metaconta
Metaconta
2,600 Puntos
Todas las respuestas
Question
No puede votar su propia entrada
1
Hola:
Te paso este enlace sobre comunicación por puerto serie con VB .net 2008 que descargas en PDF.
http://electronica-pic.blogspot.com.es/2009/03/manual-interfaz-vc-y-visual-basic.html
Como explica en el tutorial o manual, mejor envía y recibas los comandos mediantes tramas de bytes.
Para que lo sepas, estoy haciendo otro tutorial más actualizado con los tres lenguajes VB, C# y C++ 2013.
Si quieres que te pase este nuevo tutorial que aú no he acabado la parte de electrónica pero si el envío y recibo de tramas de bytes te lo paso por correo electrónico. Ya me dirás.
Un saludos.
http://electronica-pic.blogspot.com
Marcado como respuesta JuanCarlosRodriguez 31 jueves, 26 de febrero de 2015 16:58
jueves, 26 de febrero de 2015 14:31
Responder
|
Citar
|
Editar
Avatar de Metaconta
Metaconta
2,600 Puntos
Question
Votar como útil
0
Votar
Por favor te voy a pedir que me envies el tutorial, agradezco tu respuesta ahora mismo estoy viendo el tuto.
Mi mail es: lucaa31@hotmail.com
jueves, 26 de febrero de 2015 14:53
Responder
|
Citar
|
Proponer como respuesta
|
Informar como abuso
Avatar de JuanCarlosRodriguez 31
JuanCarlosRodriguez 31
0 Puntos
Question
No puede votar su propia entrada
0
Deja que lo pase a PDF, tarda un tiempo y son unos megas.
Enviando....
http://electronica-pic.blogspot.com
jueves, 26 de febrero de 2015 15:00
Responder
|
Citar
|
Proponer como respuesta
|
Editar
|
Eliminar
Avatar de Metaconta
Metaconta
2,600 Puntos
Question
No puede votar su propia entrada
0
Hola denuevo.
Enviado.
Ver vídeo.
https://www.youtube.com/watch?v=g7XPhDL6auA
Si tienes duda, a lo mejor es buena idea empezar desde cero, me planteas los pasos que quieres hacer y manos a la obra.
Salu2.
http://electronica-pic.blogspot.com
Editado Metaconta jueves, 26 de febrero de 2015 15:49
jueves, 26 de febrero de 2015 15:27
Responder
|
Citar
|
Proponer como respuesta
|
Editar
|
Eliminar
Avatar de Metaconta
Metaconta
2,600 Puntos
Question
Votar como útil
0
Votar
Te envie un email nuevamente con una consulta, estarìa agradecido si podes revisarlo, gracias.
EDITO: Los pasos serian los siguientes
1)El programa espera la recepciòn de un ENQ(05 Hex) o STX(02 Hex)
2) Si recibo lo del paso 1 , le envìo un ACK(06 Hex)
3)Luego de enviado el ACK leo todo lo que me manda la maquina externa, si es distinto de cualquier caracter de control, lo muestro.
4) Si recibo un EOT(04 Hex) mando un enter en la pantalla de recepcion para diferenciar las lineas.
5) Si recibo un ETX(03 Hex) le respondo con un ACK.
Supongo que en este caso se podrìa hacer un if o un select preguntando lo recibido, el tema es que no se como leer de manera correcta y poder comparar que es lo que se recibio para poder ejecutar la tarea necesaria segun lo que llega.
Imports System.IO.Ports
Imports System.Text
Public Class Form1
Dim recibidos As String
Dim stx As String = ASCIIEncoding.ASCII.GetString(New Byte() {2})
Dim etx As String = ASCIIEncoding.ASCII.GetString(New Byte() {3})
Dim eot As String = ASCIIEncoding.ASCII.GetString(New Byte() {4})
Dim enq As String = ASCIIEncoding.ASCII.GetString(New Byte() {5})
Dim ack As String = ASCIIEncoding.ASCII.GetString(New Byte() {6})
Public Sub New()
InitializeComponent()
If Not SerialPort1.IsOpen Then
Try
SerialPort1.Open()
Catch ex As Exception
MessageBox.Show(ex.ToString)
End Try
End If
AddHandler SerialPort1.DataReceived, AddressOf recepcion
End Sub
Private Sub Form1_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
If SerialPort1.IsOpen Then
SerialPort1.Close()
End If
End Sub
Private Sub recepcion(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs)
recibidos = Chr(SerialPort1.ReadChar)
If recibidos = stx Or recibidos = enq Then
SerialPort1.Write(ack)
Else
If recibidos <> stx And recibidos <> etx And recibidos <> enq And recibidos <> ack And recibidos <> eot Then
Me.Invoke(New EventHandler(AddressOf actualizar))
Else
If recibidos = eot Then
Me.Invoke(New EventHandler(AddressOf actualizarenter))
Else
If recibidos = etx Then
SerialPort1.Write(ack)
End If
End If
End If
End If
End Sub
Private Sub actualizar(ByVal s As Object, ByVal e As EventArgs)
textbox_visualizar_mensaje.Text = textbox_visualizar_mensaje.Text & recibidos
End Sub
Private Sub actualizarenter(ByVal s As Object, ByVal e As EventArgs)
textbox_visualizar_mensaje.Text = textbox_visualizar_mensaje.Text & vbLf
End Sub
Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
StatusStrip1.Items(0).Text = DateTime.Now.ToLongTimeString
End Sub
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
SerialPort1.Encoding = System.Text.Encoding.Default
End Sub
End Class
Ese es mi còdigo actualmente, pero trae mugre el còdigo, trae estos simbolos que no me representan nada, los simbolos de sexualidad, otros como este( ~)
Editado JuanCarlosRodriguez 31 viernes, 27 de febrero de 2015 2:43
jueves, 26 de febrero de 2015 17:36
Responder
|
Citar
|
Proponer como respuesta
|
Informar como abuso
Avatar de JuanCarlosRodriguez 31
JuanCarlosRodriguez 31
0 Puntos
Question
No puede votar su propia entrada
1
Primero lo hago con C#.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO.Ports; // No olvidar.
namespace Probando_RS232
{
public partial class Form_Principal : Form
{
// Utilizremos un string como buffer de recepción.
string Recibidos;
//string Recibo_STX_02 = ASCIIEncoding.ASCII.GetString(new byte[] { 2 }); // Inico de texto.
//string Recibo_ENQ_05 = ASCIIEncoding.ASCII.GetString(new byte[] { 5 }); // Enquiry, investigación.
//string Recibo_ETX_03 = ASCIIEncoding.ASCII.GetString(new byte[] { 3 }); // Fin de texto.
//string Recibo_ACK_06 = ASCIIEncoding.ASCII.GetString(new byte[] { 6 }); // Acknowledge, reconocer.
//string Recibo_EOT_04 = ASCIIEncoding.ASCII.GetString(new byte[] { 4 }); // Fin de transmisión.
string Recibo_STX_02 = "STX"; // Inico de texto.
string Recibo_ENQ_05 = "ENQ"; // Enquiry, investigación.
string Recibo_ETX_03 = "ETX"; // Fin de texto.
string Recibo_ACK_06 = "ACK"; // Acknowledge, reconocer.
string Recibo_EOT_04 = "EOT"; // Fin de transmisión.
public Form_Principal()
{
InitializeComponent();
// Abrir puerto mientras se ejecute la aplicación.
if(!serialPort1.IsOpen)
{
try
{
serialPort1.Open();
}
catch (System.Exception ex)
{
MessageBox.Show(ex.ToString());
}
// Ejecutar la función Recepcion por disparo del Evento 'DataReived'.
serialPort1.DataReceived += new SerialDataReceivedEventHandler(Recepcion);
}
}
// Al recibir datos.
private void Recepcion(object sender, SerialDataReceivedEventArgs e)
{
// Acumula los caracteres recibidos a nuestro 'buffer' (string).
Recibidos += serialPort1.ReadExisting();
// Invocar o llamar al proceso de tramas.
Invoke(new EventHandler(Actualizar));
}
// Procesar los datos recibidos en el bufer y extraer tramas completas.
private void Actualizar(object sender, EventArgs e)
{
if ((Recibidos == Recibo_STX_02) || (Recibidos == Recibo_ENQ_05))
{
byte[] mBuffer = Encoding.ASCII.GetBytes("ACK");
serialPort1.Write(mBuffer, 0, mBuffer.Length);
richTextBox_Mensajes.Text = "Enviado ACK_06.";
}
else
{
if ((Recibidos != "2") & (Recibidos != "3") & (Recibidos != "5") & (Recibidos != "6") & (Recibidos != "4")) // != si son iguales devuelve false;
{
this.Invoke(new EventHandler(Actualizar));
}
else
{
if (Recibidos == "4") // EOT.
{
this.Invoke(new EventHandler(actualizarenter));
}
else
{
if (Recibidos == "3") // ETX.
{
byte[] mBuffer = Encoding.ASCII.GetBytes("ACK");
serialPort1.Write(mBuffer, 0, mBuffer.Length);
richTextBox_Mensajes.Text = "Enviado ACK_06 en Recibidos ETX_3.";
}
}
}
}
}
private void actualizarenter(object s, EventArgs e)
{
Recibidos = richTextBox_Mensajes.Text.ToString();
}
}
}
Tienes if dentro que no debería esta anidado. cuando viene muchas tramas pegadas, tienes que separarlas con split para que lo pueda interpretar.
http://electronica-pic.blogspot.com
viernes, 27 de febrero de 2015 14:57
Responder
|
Citar
|
Proponer como respuesta
|
Editar
|
Eliminar
Avatar de Metaconta
Metaconta
2,600 Puntos
Question
Votar como útil
0
Votar
Muchas gracias por tu ayuda, te hago consultas porque estoy perdido, espero puedas ayudarme.
Veo que usas un readexisting, el ACK, ETX llegan en forma de string? yo pense que llegaba el valor hex o ascii no la palabra "ETX, ENQ ",etc.
Tengo un problema con el readexisting y es que este te trae TODO lo que hay disponible, entonces en la trama pueden aparecer los EOT, ETX, por ejemplo "Hola como estasEOT" y por mas que uso split no logro que encuentre el EOT para trabajarlo en el if anidado.
En la parte que pones "if recibidos = "2"" , etc. Lo remplazo por Recibo_STX_02?
Por otro lado dejo el còdigo en VB.NET lo pase de C#
Imports System
Imports System.Collections.Generic
Imports System.ComponentModel
Imports System.Data
Imports System.Drawing
Imports System.Linq
Imports System.Text
Imports System.Threading.Tasks
Imports System.Windows.Forms
Imports System.IO.Ports
Public Class Form1
Dim Recibo_STX_02 As String = "STX" ' Inico de texto.'
Dim Recibo_ENQ_05 As String = "ENQ" ' Enquiry, investigación.'
Dim Recibo_ETX_03 As String = "ETX" ' Fin de texto.'
Dim Recibo_ACK_06 As String = "ACK" ' Acknowledge, reconocer.'
Dim Recibo_EOT_04 As String = "EOT" ' Fin de transmisión.'
Dim recibidos As String
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
If Not SerialPort1.IsOpen Then
Try
SerialPort1.Open()
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
AddHandler SerialPort1.DataReceived, AddressOf recepcion
End If
End Sub
Private Sub recepcion(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs)
recibidos += SerialPort1.ReadExisting()
Me.Invoke(New EventHandler(AddressOf actualizar))
End Sub
Private Sub actualizar(ByVal s As Object, ByVal e As EventArgs)
If recibidos = Recibo_STX_02 Or recibidos = Recibo_ENQ_05 Then
Dim mBuffer As Byte() = Encoding.ASCII.GetBytes("ACK")
SerialPort1.Write(mBuffer, 0, mBuffer.Length)
richTextBox_Mensajes.Text = "Enviado ACK_06."
Else
If recibidos <> "2" And recibidos <> "3" And recibidos <> "4" And recibidos <> "5" And recibidos <> "6" Then
richTextBox_Mensajes.Text = richTextBox_Mensajes.Text & recibidos
Else
If recibidos = "4" Then
Me.Invoke(New EventHandler(AddressOf actualizarenter))
Else
If recibidos = "3" Then
Dim mBuffer As Byte() = Encoding.ASCII.GetBytes("ACK")
SerialPort1.Write(mBuffer, 0, mBuffer.Length)
richTextBox_Mensajes.Text = "Enviado ACK_06 en recibidos ETX_3."
End If
End If
End If
End If
End Sub
Private Sub actualizarenter(ByVal s As Object, ByVal e As EventArgs)
richTextBox_Mensajes.Text = richTextBox_Mensajes.Text.ToString
End Sub
End Class
Editado JuanCarlosRodriguez 31 viernes, 27 de febrero de 2015 18:24
viernes, 27 de febrero de 2015 17:08
Responder
|
Citar
|
Proponer como respuesta
|
Informar como abuso
Avatar de JuanCarlosRodriguez 31
JuanCarlosRodriguez 31
0 Puntos
Question
No puede votar su propia entrada
0
Hola:
Luego miro con más calma. Lo que dejo claro que siempre recibe en hex lso datos que viajan por el puerto.
Todo lo que atrapes lo almacenas en un Buffer.
Otra cosa, los pasos que has escrito antes no corresponde a lo que has programado.
1)El programa espera la recepciòn de un ENQ(05 Hex) o STX(02 Hex)
2) Si recibo lo del paso 1 , le envìo un ACK(06 Hex)
3)Luego de enviado el ACK leo todo lo que me manda la maquina externa, si es distinto de cualquier caracter de control, lo muestro.
4) Si recibo un EOT(04 Hex) mando un enter en la pantalla de recepcion para diferenciar las lineas.
5) Si recibo un ETX(03 Hex) le respondo con un ACK.
Paso 1) y paso 2) está bien de lo que quieres.
El paso 3) le envías ACK. ¿Qué máquina es? (Curiosidad).En el paso 4) esperas recibir un EOT y mandas un Enter me imagino que te refieres al Retorno de Carro. ¿Me equivoco?
Como puedes ver es el 13 y se llama CR con mayúscula. Es importante que pongo realmente lo que es, en mayúscula.
En el paso 5) puedes hacerlo con un if.
El código que puse no está bien hecho, no te había entendido. Así que empezaré otra vez. Que no pasa nada.
Lo mejor es poner un Case. Como habías dicho al principio o artarde de muchos if else. Luego programo tus pasos que ahora lo entiendo mejor que antes, será que lo habrás editado y no me he dado cuenta.
Saludos.
Edito:
'1)El programa espera la recepciòn de un ENQ(05 Hex) o STX(02 Hex)
'2) Si recibo lo del paso 1 , le envìo un ACK(06 Hex)
'3)Luego de enviado el ACK leo todo lo que me manda la maquina externa, si es distinto de cualquier caracter de control, lo muestro.
'4) Si recibo un EOT(04 Hex) mando un enter en la pantalla de recepcion para diferenciar las lineas.
'5) Si recibo un ETX(03 Hex) le respondo con un ACK.
Private Sub Actualizar(sender As Object, e As EventArgs)
Dim miBuffer As Byte() = New Byte(0) {}
Select Case Recibidos
Case "ENQ", "STR", "EXT"
' Enviar tramas de bytes.
miBuffer(0) = &H6
' ASCII "ACK".
serialPort1.Write(miBuffer, 0, miBuffer.Length)
' Envia las tramas de bytes.
Recibidos = ""
Exit Select
Case "EOT"
' Enviar tramas de bytes.
miBuffer(0) = &Hd
' ASCII "CR".
serialPort1.Write(miBuffer, 0, miBuffer.Length)
' Envia las tramas de bytes.
Recibidos = ""
Exit Select
Case Else
If "STX" = Recibidos OrElse "ENQ" = Recibidos OrElse "ETX" = Recibidos OrElse "ACK" = Recibidos OrElse "EOT" = Recibidos Then
richTextBox_Mensajes.Text = Recibidos
Recibidos = ""
End If
Exit Select
End Select
End Sub
Suelo usar este convertidor.
http://converter.telerik.com/
http://electronica-pic.blogspot.com
Editado Metaconta viernes, 27 de febrero de 2015 21:15
viernes, 27 de febrero de 2015 18:48
Responder
|
Citar
|
Proponer como respuesta
|
Editar
|
Eliminar
Avatar de Metaconta
Metaconta
2,600 Puntos
Question
Votar como útil
0
Votar
Gracias nuevamente por tu ayuda, sigo haciendo preguntas porque hay cosas que no entiendo. Como veras estoy muy perdido en el tema y hago un gran esfuerzo por entender pero me cuesta mucho.
1) Segun lo que vos me decis los puertos envìan en Hex, entonces al comparar lo recibido con un string jamas lo voy a encontrar verdad?. Supongamos que recibo &H2(asì es en hex sino me equivoco) y lo comparo con un string "STX" jamas van a coincidir. En ese caso tendria que convertir lo recibido a string? o me estoy equivocando?
2) Que tipo de read hay que usar, se que el puerto soporta readbyte, readexisting, entre otros. Si uso readexisting tengo que separar las palabras de la cadena y convertirlas a Hex para comparar?
viernes, 27 de febrero de 2015 23:45
Responder
|
Citar
|
Proponer como respuesta
|
Informar como abuso
Avatar de JuanCarlosRodriguez 31
JuanCarlosRodriguez 31
0 Puntos
Question
No puede votar su propia entrada
0
Hola:
Justo en el manual que te entregué trata más bien trmas de bytes, así de simple.
¿Qué aparato estás usando?
Saludos.
http://electronica-pic.blogspot.com
sábado, 28 de febrero de 2015 0:17
Responder
|
Citar
|
Proponer como respuesta
|
Editar
|
Eliminar
Avatar de Metaconta
Metaconta
2,600 Puntos
Question
Votar como útil
0
Votar
Estoy utilizando un aparato llamado BCPLUS3000 el cual contiene anàlisis de sangre de las personas.
sábado, 28 de febrero de 2015 0:31
Responder
|
Citar
|
Proponer como respuesta
|
Informar como abuso
Avatar de JuanCarlosRodriguez 31
JuanCarlosRodriguez 31
0 Puntos
Question
No puede votar su propia entrada
0
Buenas:
Me imagino que será eso.
Tiene que ser muy antiguo. ;)
Tienes que saber que datos o comandos sabe interpretar este aparato. ¿Tienes algún documento al respecto sobre ello?
Se suele llamar comandos AT&T. Si no lo posee, estás navegando a ciegas. El tutorial que te he mostrado es suficiente para hacer lo que quieres hacer. Si no tienes los documento de los comandos del aparato.
Este es uno de ellos.
https://www.youtube.com/watch?v=oUxq-ElTxtA
Este se usa mucho.
http://www.rs232-logger.com/
También puedes construir uno con Arduino y grabar los datos en un archivo en una tarjesa micro SD, como tienes el PC, mejor lo aprovechas con el programa.
Tienes que tener claro lo que hace la máquina. ¿Qué hace nada más al encenderla?
¿Qué funciones hace en el puerto serie?
Y más preguntas. Si en la máuina hace algo cuando pulsas un botón, lo analizas, si te envía órdenes también, lo que sea.
Saludos.
http://electronica-pic.blogspot.com
sábado, 28 de febrero de 2015 0:49
Responder
|
Citar
|
Proponer como respuesta
|
Editar
|
Eliminar
Avatar de Metaconta
Metaconta
2,600 Puntos
Question
Votar como útil
0
Votar
Es esa "maldita" maquina ajajaja. En la maquina elegis el resultado de un paciente, presionas "enter" y la màquina envia los datos a el programa.
El manual es este y ahì dice todo : MIRAR PAGINA 318
http://internetmed.com/sites/default/files/Mindray_BC-3000Plus_-_Operation_manual.pdf
Saludos y gracias, me voy a cansar de decirte gracias pero necesito hacer funcionar esto.
Editado JuanCarlosRodriguez 31 sábado, 28 de febrero de 2015 1:22
sábado, 28 de febrero de 2015 1:17
Responder
|
Citar
|
Proponer como respuesta
|
Informar como abuso
Avatar de JuanCarlosRodriguez 31
JuanCarlosRodriguez 31
0 Puntos
Question
No puede votar su propia entrada
0
Buenas campeón:
Lo estoy leyendo o un intento de ello. Como no se me da bien el Inglés y google translato a veces se le va la oya, si es posible, prefiero que traduza bien traducido y con calma estas frases.
If the Handshake is off, BC-3000 Plus will transmi
t the body of the text without acknowledging
the presence of an external computer.
If the Handshake is on, BC-3000 Plus will comm
unicate with the external computer in
following procedures:
1. BC-3000 Plus sends an ENQ (05 Hex), then waits up to 4 seconds for the external
computer to respond. If the external computer does not respond, then one more ENQ (05
Hex) is tried. If it fails again, the analyzer aborts the transmission and reports a
transmission error;
2. The external computer must respond by
sending an ACK (06 Hex). If any other response
is received, another ENQ (05 Hex) will be s
ent by the analyzer (maximum two ENQ [05
Hex] will be sent);
3. The analyzer then sends
:
Body of text
EOT (04 Hex)
ETX (03 Hex)
4. Disconnection.
BC-3000 Plus sends an ETX 03 Hex), then waits 4 seconds for the external computer to
respond. If no response is received, one more ETX (03 Hex) is sent, BC-3000 Plus waits 4
seconds before giving up and gives alarm of communication error.
Esta también.
If the external compute responds ACK, the tran
smission is done successfully. If the external
computer responds NACK
(15 Hex), the analyzer repeat the transmis
sion from step 3. If the
received response from the computer is neither ACK (06 Hex) nor NACK (15 Hex), the analyzer sends ETX(03 Hex) again.
Podemos hacer la primera opción. Si te envía
ENQ (05 Hex)
a tu PC con tu interfaz, le enviamos
ACK (06 Hex)
O bien automáticamente al instante, o dentro de 30 segundos o lo enviamos nosotros con un botón. Haremos el programa lo más simple posible. Vamos por parte y esta es una de ella.
¿Cómo se comporta la máquina si solo hacemos esto y nada más?
Solo por ahora.
Código sencillo, recibe datos en el richTextBox y con un button le envía el ENQ que tanto desea la máquina al ser encendida.
Imports System.Collections.Generic
Imports System.ComponentModel
Imports System.Data
Imports System.Drawing
Imports System.Linq
Imports System.Text
Imports System.Threading.Tasks
Imports System.Windows.Forms
Imports System.IO.Ports
' No olvidar.
Namespace Probando_RS232
Public Partial Class Form_Principal
Inherits Form
' Utilizremos un string como buffer de recepción.
Private Recibidos As String
Public Sub New()
InitializeComponent()
' Abrir puerto mientras se ejecute la aplicación.
If Not serialPort1.IsOpen Then
Try
serialPort1.Open()
Catch ex As System.Exception
MessageBox.Show(ex.ToString())
End Try
' Ejecutar la función Recepcion por disparo del Evento 'DataReived'.
serialPort1.DataReceived += New SerialDataReceivedEventHandler(AddressOf Recepcion)
End If
End Sub
' Al recibir datos.
Private Sub Recepcion(sender As Object, e As SerialDataReceivedEventArgs)
' Acumula los caracteres recibidos a nuestro 'buffer' (string).
Recibidos += serialPort1.ReadExisting()
' Invocar o llamar al proceso de tramas.
Invoke(New EventHandler(AddressOf Actualizar))
End Sub
Private Sub Actualizar(sender As Object, e As EventArgs)
'asignar el valor de la trama al texto box
richTextBox_Mensajes.Text = Recibidos
End Sub
Private Sub button_Enviar_ENQ_05_Click(sender As Object, e As EventArgs)
' Enviar tramas de bytes.
Dim miBuffer As Byte() = New Byte(9) {}
' Led_13_ON son 10 byte máximo.
miBuffer(0) = &H5
' ASCII letra "ENQ".
serialPort1.Write(miBuffer, 0, miBuffer.Length)
' Envia las tramas de bytes.
End Sub
End Class
End Namespace
Saludos.