Visual Basic Foro

Programación => Visual Basic 6 => Mensaje iniciado por: coco en Junio 03, 2010, 07:31:04 pm

Título: [src] clsCom: manejo del puerto serie
Publicado por: coco en Junio 03, 2010, 07:31:04 pm
Despues de ver un par de ejemplos del manejo del puerto serie en PSC, diseñe esta clase; porque los que habia ahi eran un desastre.
Los que quieren usar el puerto serie de la pc (COM1,COMx) obviamente saben que necesitan el control MSCOMM.ocx, pero aca hay una solucion: clsCom.

La clase tiene todo adentro, y es muy sencilla de usar.

Propiedades:

Metodos:

Aca te dejo un ejemplo bien facil donde se muestran todas las funciones de la clase:
Código: (vb) [Seleccionar]
Private WithEvents f_objCom As clsCom

Private Sub Form_Load()
    Set f_objCom = New clsCom
    f_objCom.ComPort = 1 ' COM1
    f_objCom.ComSettings = "115200,N,8,1" ' 115200 bps, sin paridad, 8 bits de data, 1 bit de stop
    f_objCom.TimerDelay = 500 ' 500ms para chequear si entro data
    Call f_objCom.InitCom
   
    Call f_objCom.WriteCom("Serie!")
End Sub

Private Sub Form_Unload(Cancel As Integer)
   
    Set f_objCom = Nothing

End Sub

Private Sub f_objCom_DataReceived(ByVal strData As String)
    Debug.Print "DataRcv: "; strData
End Sub


FIXXX:
gracias a bebekbdbg, reemplazar en la funcion "InitCom"
strCom = "COM" & CStr(c_lngComPort) & ":"
por  strCom = "\\.\" & "COM" & CStr(c_lngComPort)
Y bueno, aca el link: clsCom.cls (http://sites.google.com/site/santiagohssl/clsCom.cls?attredirects=0&d=1)

saludos
Título: Re:[src] clsCom: manejo del puerto serie
Publicado por: LeandroA en Junio 04, 2010, 07:02:35 am
Muy buena coco, intente utilizarla desde vba (excel)   con una lectora de tarjeta y otro artefacto uno esta en el com1 y el otro en el com2 , pero no obtuve ninguna data, seguramente es porque hice algo mal. vos en el ejemplo pusite esto "115200,N,8,1" hay que poner algun valor especifico para una lectora de targeta?.

Saludos.
Título: Re:[src] clsCom: manejo del puerto serie
Publicado por: coco en Junio 04, 2010, 06:24:13 pm
Muy buena coco, intente utilizarla desde vba (excel)   con una lectora de tarjeta y otro artefacto uno esta en el com1 y el otro en el com2 , pero no obtuve ninguna data, seguramente es porque hice algo mal. vos en el ejemplo pusite esto "115200,N,8,1" hay que poner algun valor especifico para una lectora de targeta?.

Saludos.

y ahi esta a 115200 bps, creo que es mucha velocidad para una tarjeta, proba con 9600 que es algo mas *standard*, sino fijate en el manual del aparato a ver cual es la velocidad.

saludos!
Título: Re:[src] clsCom: manejo del puerto serie
Publicado por: k_arlytos en Junio 05, 2010, 02:59:52 am
que es eso de puertos serie?? o para q sirve esa clase plzz expliquen soy cero en eso
Título: Re:[src] clsCom: manejo del puerto serie
Publicado por: coco en Junio 05, 2010, 02:23:21 pm
que es eso de puertos serie?? o para q sirve esa clase plzz expliquen soy cero en eso
Citar
Un puerto serie o puerto serial es una interfaz de comunicaciones de datos digitales, frecuentemente utilizado por computadoras  y periféricos, en donde la información es transmitida bit a bit enviando un solo bit a la vez, en contraste con el puerto paralelo que envía varios bits simultáneamente. La comparación entre la transmisión en serie y en paralelo se puede explicar usando una analogía con las carreteras. Una carretera tradicional de un sólo carril por sentido sería como la transmisión en serie y una autovía  con varios carriles por sentido sería la transmisión en paralelo, siendo los vehículos los bits que circulan por el cable.
De Wikipedia (http://es.wikipedia.org/wiki/Puerto_serie).

saludos
Título: Re:[src] clsCom: manejo del puerto serie
Publicado por: NolO en Junio 09, 2010, 11:44:36 am
Hi! una pregunta esta clase tambien la podria usar para poder trabajar con los puertos Lpt1: Lptx:

Te comento un poco lo que me pasa, en mi bd guardo en una tabla los puertos por donde quiero que salgan las impresiones que pueden ser por los puertos com y/o los lpt, el hacer la lectura de esos campos y enviar la impresion es simple, el problema lo tengo cuando envio una impresion y la impresora esta apagada o no tiene papel o hay un problema de comunicacion(conexion), ya he visto y probado muchos ejemplos que encuentro en la web,  pero al final lo unico que pude hacer fue colocar un "On Local Error GoTo MiError" y mostrar por un block de notas de esta manera

Código: (vb) [Seleccionar]
On Local Error Goto mError
Dim rs          As ADODB.Recordset
Dim PuertoImp    As String
Dim CadCortaTicket As String
Dim CadAbreGaveta As String
'Esto para la impresora Epson TM-U220A Modelo M188A
CadAbreGaveta = Chr(27) + "p" + Chr(0) + Chr(25) + Chr(250)
CadCortaTicket = Chr(27) + "i"
Set rs = New ADODB.Recordset
rs.CursorLocation = adUseClient
rs.Open "SELECT *FROM PARAMTICKET", Con, adOpenDynamic, adLockReadOnly
if Not rs.EOF Then
PuertoImp = IIf(IsNull(rs!PuertoTicket), "", rs!PuertoTicket)
Else
        PuertoImp = PortDefault
End If
If Trim(PuertoImp) = "" Then
        MsgBox "No hay Impresora Configurada. ", vbCritical + vbDefaultButton1, " Error de Impresión"
        Exit Sub
End If
DoEvents
nfic = FreeFile
Open PuertoImp For Output As nfic
Print #nfic,"Imprime primera linea"
Print #nfic,"Imprime segunda linea"
'......
'......
Print #nfic,"Imprime n lineas"
Print #nfic, CadAbreGaveta
Print #nfic, Chr(13) + CadCortaTicket
Close nfic
' Aqui es donde le indico que lo muestre por pantalla en un block de notas
mError:
Shell "C:\WINDOWS\notepad.exe " & App.Path & "\abc.txt", vbMaximizedFocus

Se que no es la forma adecuada de solucionar el problema, pero fue lo unico que se ocurrio o tal vez no lo estoy haciendo como deberia de hacerlo.
De antemano muchas gracias por su tiempo, y mil disculpas si no he sido muy claro.

Saludos.
Título: Re:[src] clsCom: manejo del puerto serie
Publicado por: coco en Junio 09, 2010, 02:27:53 pm
Hi! una pregunta esta clase tambien la podria usar para poder trabajar con los puertos Lpt1: Lptx:

Te comento un poco lo que me pasa, en mi bd guardo en una tabla los puertos por donde quiero que salgan las impresiones que pueden ser por los puertos com y/o los lpt, el hacer la lectura de esos campos y enviar la impresion es simple, el problema lo tengo cuando envio una impresion y la impresora esta apagada o no tiene papel o hay un problema de comunicacion(conexion), ya he visto y probado muchos ejemplos que encuentro en la web,  pero al final lo unico que pude hacer fue colocar un "On Local Error GoTo MiError" y mostrar por un block de notas de esta manera

Código: (vb) [Seleccionar]
On Local Error Goto mError
Dim rs          As ADODB.Recordset
Dim PuertoImp    As String
Dim CadCortaTicket As String
Dim CadAbreGaveta As String
'Esto para la impresora Epson TM-U220A Modelo M188A
CadAbreGaveta = Chr(27) + "p" + Chr(0) + Chr(25) + Chr(250)
CadCortaTicket = Chr(27) + "i"
Set rs = New ADODB.Recordset
rs.CursorLocation = adUseClient
rs.Open "SELECT *FROM PARAMTICKET", Con, adOpenDynamic, adLockReadOnly
if Not rs.EOF Then
PuertoImp = IIf(IsNull(rs!PuertoTicket), "", rs!PuertoTicket)
Else
        PuertoImp = PortDefault
End If
If Trim(PuertoImp) = "" Then
        MsgBox "No hay Impresora Configurada. ", vbCritical + vbDefaultButton1, " Error de Impresión"
        Exit Sub
End If
DoEvents
nfic = FreeFile
Open PuertoImp For Output As nfic
Print #nfic,"Imprime primera linea"
Print #nfic,"Imprime segunda linea"
'......
'......
Print #nfic,"Imprime n lineas"
Print #nfic, CadAbreGaveta
Print #nfic, Chr(13) + CadCortaTicket
Close nfic
' Aqui es donde le indico que lo muestre por pantalla en un block de notas
mError:
Shell "C:\WINDOWS\notepad.exe " & App.Path & "\abc.txt", vbMaximizedFocus

Se que no es la forma adecuada de solucionar el problema, pero fue lo unico que se ocurrio o tal vez no lo estoy haciendo como deberia de hacerlo.
De antemano muchas gracias por su tiempo, y mil disculpas si no he sido muy claro.

Saludos.

pero eso de abrir puertos con Open "COM1" for Output, es un problema porque eso solo era valido en BASIC de DOS, en VB ya no sirve eso. es mas, creo que funcionaba en algun momento, pero con windows 9x (95,98,ME), es decir que en NT ya no sirve.

saludos
Título: Re:[src] clsCom: manejo del puerto serie
Publicado por: bebekbdg en Agosto 09, 2010, 12:28:26 pm
little improvement can not open COM31, COM32 ..
repair code:
strCom = "\\.\" & "COM" & CStr(c_lngComPort)