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:
WORKING-STORAGE SECTION.
01 RESPUESTA-IMPRESOR PIC S9(9) COMP-5.
01 FUNCION PIC X(50).
PROCEDURE DIVISION.
inicio.
MOVE "SerialPortClose ()" to FUNCION.
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:
WORKING-STORAGE SECTION.
01 RESPUESTA-IMPRESOR PIC S9(9) COMP-5.
01 FUNCION PIC X(50).
PROCEDURE DIVISION.
inicio.
MOVE "SerialPortOpen (1)" to FUNCION.
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:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'MsgBox("Sam4sFiscalDriver Version: " + Drv.version)
'Configura velocidad de comunicacion del puerto serial
Dim baudrate = 9600
If (Drv.SerialBaudSet(baudrate) = 0) Then
MsgBox("No se pudo configurar la velocidad " & baudrate)
Return
End If
'Abre el puerto serial
Dim comnum = 8
If (Drv.SerialPortOpen(comnum) = 0) Then
MsgBox("No se pudo abrir el puerto serial " & comnum)
Return
End If
' Si hay un documento abierto, lo cancela primero
Drv.IFOpBegin("DocumentoEnCurso")
If (Drv.IFOpSend(1) = 0) Then
CmdError("DocumentoEnCurso")
Return
End If
If (Drv.IFOpRetIntGet("CodigoTipo") <> 0) Then
Drv.IFOpBegin("Cancelar")
If (Drv.IFOpSend(1) = 0) Then
CmdError("Cancelar")
Return
End If
End If
'Ejemplo: Tique
Drv.IFOpBegin("AbrirTique")
If (Drv.IFOpSend(1) = 0) Then
CmdError("AbrirTique")
Return
End If
Drv.IFOpBegin("ItemVenta")
Drv.IFOpParamSet("Descripcion", "Item de prueba")
Drv.IFOpParamFloatSet("Precio", 1.2345)
Drv.IFOpParamFloatSet("IVA", 21.0)
Drv.IFOpParamSet("CodigoProducto", "7791234567898")
If (Drv.IFOpSend(1) = 0) Then
CmdError("ItemVenta")
Return
End If
---------- Post añadido el 6 de febrero de 2022 a las 02:40 ----------
Perdón. logre encotrarle la vuelta
Código COBOL:
working...
01 NPORT PIC S9(9) COMP-5.
MOVE 1 TO NPORT.
MOVE "SerialPortOpen" to FUNCION.
CALL FUNCION WITH STDCALL USING BY VALUE NPORT RETURNING RESPUESTA-IMPRESOR.
ahora no me toma funciones. las envio asi.
Código COBOL:
MOVE 'IFOpBegin ("CierreZ")' TO FUNCION.
CALL FUNCION WITH STDCALL using by reference RESPUESTA-IMPRESOR.
el manual explica esto.:
Código CPP:
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:
drv.IFOpBegin("CierreZ");
cmd_send(drv);
saludos, perdón por las molestias.. muchas gracias...
|
|