Ver Mensaje Individual
  #6
Antiguo 6 de febrero de 2022, 02:23
Ale
Forero Junior
Última Actividad 23.06.2026 00:14
Posts Posts: 43
Likes enviados Enviados: 19
Likes recibidos Recibidos: 2
Predeterminado Ayuda con comunicación por Dll con impresor fiscal
0 Inactivo Inactivo

Hola buenas noches. Sigo sin darme cuenta como comunicarme con impresora fiscal sam4s por intermedio de la DLL de la empresa.
no puedo abrir el puerto com1.
Parte del manual de las funciones de la DLL, dice asi:

MANUAL FUNCIONES

A continuación se describen las funciones que contiene la librería.
Ver ejemplos de uso en el Capítulo V y el la carpeta Ejemplos (incluida junto a esta documento).
int SerialPortOpen (int portnum)
Abre el puerto serial.
Parámetros:
portnum: número de puertos serial. Ej.: el COM8 es el 8.
Retorno: 1 en caso de éxito, 0 en caso de error.
int SerialBaudSet (int baudrate)
Establece la velocidad a usar con el puerto serial, debe coincidir con la configurada en el equipo. Por
ejemplo 115200. Llamar antes de SerialPortOpen. No tiene ningún efecto si el equipo se encuentra
conectado por USB.
Retorno: 1 en caso de éxito, 0 en caso de error.
int SerialPortClose ()
Cierra el puerto serial.
Retorno: 1 en caso de éxito, 0 en caso de error.
int IFOpBegin (const char * name)
Comienza a preparar un nuevo comando por nombre.
Parámetros:
name: nombre del comando. Ver comandos disponibles en el Capítulo III.
Retorno: 1 en caso de éxito, 0 en caso de error.
etc..

cargo las funciones y comando de la dll, en el cobol85 asi.

Código:
[tpv.Entry]
SerialPortOpen=Sam4sFiscalDriver.dll
SerialBaudSet=Sam4sFiscalDriver.dll
SerialPortClose=Sam4sFiscalDriver.dll
IFOpBegin=Sam4sFiscalDriver.dll
IFOpSend=Sam4sFiscalDriver.dll
dentro de mi programa.:

Código COBOL:
  1.  WORKING-STORAGE SECTION.
  2.  01 RESPUESTA-IMPRESOR    PIC S9(9) COMP-5.
  3.  01 FUNCION               PIC X(50).
  4.  PROCEDURE       DIVISION.
  5.   inicio.
  6.     MOVE "SerialPortClose ()" to FUNCION.
  7.     CALL FUNCION WITH STDCALL RETURNING RESPUESTA-IMPRESOR.

** cerrar el puerto me funciona, porque según el manual valor 1 = operacion correcta.
ahora cuando quiero abrirlo no me funciona se cierra el programa y no tira ningun error.:
Código COBOL:
  1. WORKING-STORAGE SECTION.
  2.  01 RESPUESTA-IMPRESOR    PIC S9(9) COMP-5.
  3.  01 FUNCION               PIC X(50).
  4.  PROCEDURE       DIVISION.
  5.   inicio.  
  6.     MOVE "SerialPortOpen (1)" to FUNCION.
  7.     CALL FUNCION WITH STDCALL RETURNING RESPUESTA-IMPRESOR.
*** no se que estoy haciendo mal. les agradecería me ayuden si alguno logra darse cuenta.
utilizo Powecobol 5
ahora les pongo un ejemplo en otros lenguajes.
Código VB:
  1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  2.         'MsgBox("Sam4sFiscalDriver Version: " + Drv.version)
  3.  
  4.         'Configura velocidad de comunicacion del puerto serial
  5.        Dim baudrate = 9600
  6.         If (Drv.SerialBaudSet(baudrate) = 0) Then
  7.             MsgBox("No se pudo configurar la velocidad " & baudrate)
  8.             Return
  9.         End If
  10.  
  11.         'Abre el puerto serial
  12.        Dim comnum = 8
  13.         If (Drv.SerialPortOpen(comnum) = 0) Then
  14.             MsgBox("No se pudo abrir el puerto serial " & comnum)
  15.             Return
  16.         End If
  17.  
  18.         ' Si hay un documento abierto, lo cancela primero
  19.        Drv.IFOpBegin("DocumentoEnCurso")
  20.         If (Drv.IFOpSend(1) = 0) Then
  21.             CmdError("DocumentoEnCurso")
  22.             Return
  23.         End If
  24.         If (Drv.IFOpRetIntGet("CodigoTipo") <> 0) Then
  25.             Drv.IFOpBegin("Cancelar")
  26.             If (Drv.IFOpSend(1) = 0) Then
  27.                 CmdError("Cancelar")
  28.                 Return
  29.             End If
  30.         End If
  31.        
  32.         'Ejemplo: Tique
  33.         Drv.IFOpBegin("AbrirTique")
  34.         If (Drv.IFOpSend(1) = 0) Then
  35.             CmdError("AbrirTique")
  36.             Return
  37.         End If
  38.  
  39.         Drv.IFOpBegin("ItemVenta")
  40.         Drv.IFOpParamSet("Descripcion", "Item de prueba")
  41.         Drv.IFOpParamFloatSet("Precio", 1.2345)
  42.         Drv.IFOpParamFloatSet("IVA", 21.0)
  43.         Drv.IFOpParamSet("CodigoProducto", "7791234567898")
  44.         If (Drv.IFOpSend(1) = 0) Then
  45.             CmdError("ItemVenta")
  46.             Return
  47.         End If


---------- Post añadido el 6 de febrero de 2022 a las 02:40 ----------

Perdón. logre encotrarle la vuelta
Código COBOL:
  1.  working...
  2.     01 NPORT                 PIC S9(9) COMP-5.
  3.  
  4.  
  5.     MOVE 1 TO NPORT.
  6.     MOVE "SerialPortOpen" to FUNCION.
  7.     CALL FUNCION WITH STDCALL USING BY VALUE NPORT RETURNING RESPUESTA-IMPRESOR.

ahora no me toma funciones. las envio asi.
Código COBOL:
  1.   MOVE 'IFOpBegin ("CierreZ")' TO FUNCION.
  2.   CALL FUNCION WITH STDCALL using by reference RESPUESTA-IMPRESOR.
el manual explica esto.:
Código CPP:
  1. int IFOpBegin (const char * name)
Comienza a preparar un nuevo comando por nombre.
Parámetros:
• name: nombre del comando. Ver comandos disponibles en el Capítulo III.
Retorno: 1 en caso de éxito, 0 en caso de error.

ejemplo en otro lenguaje..
Código CPP:
  1. drv.IFOpBegin("CierreZ");
  2.  cmd_send(drv);

saludos, perdón por las molestias.. muchas gracias...

Comentario de Moderador
Por favor, usa los botones de resalto de sintaxis para lenguajes de programación que hay en el editor.
También no crees hilos nuevos si ya existe uno tratando el mismo tema

Última edición por Kuk fecha: 6 de febrero de 2022 a las 15:08. Razón: Botones de sintaxis/duplicado de hilos
Ale is offline   Responder Con Cita