Cobol Foro

Cobol Foro (https://www.cobolforo.es/index.php)
-   PowerCOBOL v3 (V3L10, Win32) (https://www.cobolforo.es/forumdisplay.php?f=5)
-   -   [Sintaxis] Usando EpsonFiscalDriver.dll (https://www.cobolforo.es/showthread.php?t=1207)

jhjacomo 29 de agosto de 2020 03:39

Usando EpsonFiscalDriver.dll
 
Hola, buenas tardes al foro.
Retomando la programación del Epson TM T900AF.
Les comento la situación:
Sistema Operativo; Windows 7 64 bit
Version de Cobol: PowerCobol 3
Dll Usada: EpsonFiscalDriver.dll

Ya logré emitir Z y X sin problemas, ahora quiero ver el estado del controlador y evidentemente algo estoy haciendo mal, les copio el código:
Código COBOL:
  1. *****  getPrinterState
  2.      call ADDSTRING of p-comandos using "getPrinterStatus".
  3.      MOVE "getPrinterStatus" TO FUNC-EPSON-LIB.
  4.      move spaces to mensa.
  5.      CALL FUNC-EPSON-LIB.
  6.      move PROGRAM-STATUS to wstatus.

En todos las pruebas el PROGRM-STATUS me da cero, controlador apagado, sin papel o en uso.
En PowerCobol 3 no puedo usar CALL FUNC-EPSON-LIB WITH STDCALL RETURNING CODIGO-CmImpresor. puesto que en esta versión da error al compilar, hay que tomar la respuesta del comando en PROGRAM-STATUS.
Saludos amigos, espero me puedan dar una mano con este tema.

fastpho 29 de agosto de 2020 16:17

@jhjacomo, cual es el error que te da al compilar :
Código COBOL:
  1. ***** ESTADO IMPRESOR 0 NO HAY PROBLEMA
  2.      move "getPrinterStatus" TO FUNC-EPSON-LIB.
  3.      CALL FUNC-EPSON-LIB WITH  STDCALL RETURNING CODIGO-CmImpresor.          
  4. *> si no es cero hay problemas  40961 tapa abierta 1 poco papel 2 sin papel
  5. *>    display "codigo-impresor" ,  CODIGO-CmImpresor.

jhjacomo 29 de agosto de 2020 17:37

Hola @fastpho, , gracias por tu respuesta.

Acompaño una imagen con el error, a la derecha veras el error del compilador y a la izquierda se ve el código usado.
:yoquese:
disculpas no se pegar una imagen, como lo hago?

jhjacomo 29 de agosto de 2020 17:39

2 Archivos Adjunto(s)
Hola @fastpho, , gracias por tu respuesta.

Acompaño una imagen con el error, a la derecha veras el error del compilador y a la izquierda se ve el código usado.

ahi va la imagen

Kuk 29 de agosto de 2020 23:17

@fastpho, el compilador de PowerCOBOL v3 no acepta la palabra reservada RETURNING, simplemente esta sintaxis no existe para él.

---------- Post añadido : 23:17 ---------- Post anterior : 23:11 ----------

@jhjacomo, cómo tienes definido el campowstatus?

jhjacomo 30 de agosto de 2020 03:33

Ola Kuk, @Kuk, gracias por tu respuesta.

Si la variable wstatus esta definida en working.
Ahí va el código completo:
Código COBOL:
  1.  ENVIRONMENT DIVISION.
  2.  DATA        DIVISION.
  3.  working-Storage section.
  4.  01 sPort             PIC S9(9) COMP-5.
  5.  01 sBaudio           PIC S9(9) COMP-5.
  6.  01 gState         PIC S9(9) COMP-5.
  7.  01 FUNC-EPSON-LIB    Pic x(40).
  8.  01 version           pic x(250).
  9.  01 mensa.
  10.     03 wcomando       pic x(30).
  11.     03 wrespue        pic x(15).
  12.     03 wstatus        pic 99999999+.
  13.  PROCEDURE   DIVISION.
  14.      move POW-OFF to POW-ENABLE of ESTADO.
  15.      call CLEARLIST OF p-comandos.
  16. *****  GetAPIVersion
  17.      MOVE "GetAPIVersion" TO FUNC-EPSON-LIB.
  18.      CALL FUNC-EPSON-LIB WITH STDCALL USING BY REFERENCE VERSION.
  19.      move spaces to mensa.
  20.      move "Ver Version"  to wcomando.
  21.      move version        to wrespue.
  22.      move PROGRAM-STATUS to wstatus.
  23.      call ADDSTRING of p-comandos using mensa.
  24. *****  setComPort
  25.      MOVE spaces       TO FUNC-EPSON-LIB.
  26.      MOVE "setComPort" TO FUNC-EPSON-LIB.
  27.      move 0 to sPort.
  28.      CALL FUNC-EPSON-LIB WITH STDCALL USING BY VALUE sPort.
  29.      move spaces to mensa.
  30.      move "Seteo puerto" to wcomando.
  31.      move sPort          to wrespue.
  32.      move PROGRAM-STATUS to wstatus.
  33.      call ADDSTRING of p-comandos using mensa.
  34. *****  setBaudRate
  35.      MOVE spaces        TO FUNC-EPSON-LIB.
  36.      MOVE "setBaudRate" TO FUNC-EPSON-LIB.
  37.      move 9600          TO sBaudio *> set baudios
  38.      CALL FUNC-EPSON-LIB WITH  STDCALL   USING BY VALUE sBaudio.
  39.      move spaces to mensa.
  40.      move "Seteo velocidad puerto" to wcomando.
  41.      move sBaudio                  to wrespue.
  42.      move PROGRAM-STATUS           to wstatus.
  43.      call ADDSTRING of p-comandos using mensa.
  44. *****  getPrinterState
  45.      call ADDSTRING of p-comandos using "getPrinterStatus".
  46.      MOVE "getPrinterStatus" TO FUNC-EPSON-LIB.
  47.      move spaces to mensa.
  48.      CALL FUNC-EPSON-LIB WITH STDCALL RETURNING PROGRAM-STATUS.
  49.      move PROGRAM-STATUS to wstatus.
  50. ***** WITH  STDCALL  USING BY REFERENCE VERSION.
  51. ***** RETURNING CODIGO-CmImpresor.
  52.      move "Ver Status Impresora"  to wcomando.
  53.      call ADDSTRING of p-comandos using mensa.
  54.      call DISPLAYMESSAGE of ComFis using "Fin Status".
  55.      move POW-ON to POW-ENABLE of ESTADO.
Este código da error al compilar, si hago la llamada a la función de esta forma: "CALL FUNC-EPSON-LIB.", no da error, pero en PROGRAM-STATUS no devuelve el estado verdadero del controlador.

jhjacomo 30 de agosto de 2020 03:33

Ola Kuk, @Kuk, gracias por tu respuesta.

Si la variable wstatus esta definida en working.
Ahí va el código completo:
Código COBOL:
  1.  ENVIRONMENT DIVISION.
  2.  DATA        DIVISION.
  3.  working-Storage section.
  4.  01 sPort             PIC S9(9) COMP-5.
  5.  01 sBaudio           PIC S9(9) COMP-5.
  6.  01 gState         PIC S9(9) COMP-5.
  7.  01 FUNC-EPSON-LIB    Pic x(40).
  8.  01 version           pic x(250).
  9.  01 mensa.
  10.     03 wcomando       pic x(30).
  11.     03 wrespue        pic x(15).
  12.     03 wstatus        pic 99999999+.
  13.  PROCEDURE   DIVISION.
  14.      move POW-OFF to POW-ENABLE of ESTADO.
  15.      call CLEARLIST OF p-comandos.
  16. *****  GetAPIVersion
  17.      MOVE "GetAPIVersion" TO FUNC-EPSON-LIB.
  18.      CALL FUNC-EPSON-LIB WITH STDCALL USING BY REFERENCE VERSION.
  19.      move spaces to mensa.
  20.      move "Ver Version"  to wcomando.
  21.      move version        to wrespue.
  22.      move PROGRAM-STATUS to wstatus.
  23.      call ADDSTRING of p-comandos using mensa.
  24. *****  setComPort
  25.      MOVE spaces       TO FUNC-EPSON-LIB.
  26.      MOVE "setComPort" TO FUNC-EPSON-LIB.
  27.      move 0 to sPort.
  28.      CALL FUNC-EPSON-LIB WITH STDCALL USING BY VALUE sPort.
  29.      move spaces to mensa.
  30.      move "Seteo puerto" to wcomando.
  31.      move sPort          to wrespue.
  32.      move PROGRAM-STATUS to wstatus.
  33.      call ADDSTRING of p-comandos using mensa.
  34. *****  setBaudRate
  35.      MOVE spaces        TO FUNC-EPSON-LIB.
  36.      MOVE "setBaudRate" TO FUNC-EPSON-LIB.
  37.      move 9600          TO sBaudio *> set baudios
  38.      CALL FUNC-EPSON-LIB WITH  STDCALL   USING BY VALUE sBaudio.
  39.      move spaces to mensa.
  40.      move "Seteo velocidad puerto" to wcomando.
  41.      move sBaudio                  to wrespue.
  42.      move PROGRAM-STATUS           to wstatus.
  43.      call ADDSTRING of p-comandos using mensa.
  44. *****  getPrinterState
  45.      call ADDSTRING of p-comandos using "getPrinterStatus".
  46.      MOVE "getPrinterStatus" TO FUNC-EPSON-LIB.
  47.      move spaces to mensa.
  48.      CALL FUNC-EPSON-LIB WITH STDCALL RETURNING PROGRAM-STATUS.
  49.      move PROGRAM-STATUS to wstatus.
  50. ***** WITH  STDCALL  USING BY REFERENCE VERSION.
  51. ***** RETURNING CODIGO-CmImpresor.
  52.      move "Ver Status Impresora"  to wcomando.
  53.      call ADDSTRING of p-comandos using mensa.
  54.      call DISPLAYMESSAGE of ComFis using "Fin Status".
  55.      move POW-ON to POW-ENABLE of ESTADO.
Este código da error al compilar, si hago la llamada a la función de esta forma: "CALL FUNC-EPSON-LIB.", no da error, pero en PROGRAM-STATUS no devuelve el estado verdadero del controlador.

fastpho 30 de agosto de 2020 17:08

@jhjacomo, Para saber el Estado proba con estas lineas , solicitar primero el estado y luego leer por el medotod getPrinterStatus ver la respuesta y como dijo @Kuk, no le pongas RETURNING por que pwc3 no acepta la palabra reservada RETURNING
Código COBOL:
  1.  ENVIRONMENT     DIVISION.
  2.  DATA            DIVISION.
  3.  WORKING-STORAGE SECTION.
  4.  01 LINEA-ESTADO.
  5.     03 Comando            PIC X VALUE  X"00".
  6.     03 Comandobis         PIC X VALUE  X"01".
  7.  01 LINEA-EXTRA.  
  8.     03 DataField1         PIC X VALUE  X"00".
  9.     03 DataField2         PIC X VALUE  X"00".
  10.  01 gState            PIC S9(9) COMP-5.
  11.  01 FUNC-EPSON-LIB    Pic x(40).
  12.  01 version           pic x(250).
  13.  PROCEDURE       DIVISION.
  14.      move spaces         TO FUNC-EPSON-LIB.
  15.      MOVE 2              TO BufferLen.
  16.      MOVE "AddDataField" TO FUNC-EPSON-LIB.
  17.      CALL FUNC-EPSON-LIB WITH STDCALL USING BY REFERENCE LINEA-ESTADO
  18.                                             BY VALUE BufferLen.    
  19.  
  20.      move spaces         TO FUNC-EPSON-LIB.  
  21.      MOVE 2              TO BufferLen.
  22.      MOVE "AddDataField" TO FUNC-EPSON-LIB.
  23.      CALL FUNC-EPSON-LIB WITH STDCALL USING BY REFERENCE LINEA-EXTRA
  24.                                             BY VALUE BufferLen.    
  25.                              
  26.  
  27. *SEND  COMMAND                                  
  28.      move spaces       TO FUNC-EPSON-LIB.
  29.      MOVE "SendCommand" TO FUNC-EPSON-LIB.
  30.      CALL FUNC-EPSON-LIB WITH  STDCALL  USING BY REFERENCE VERSION.  
  31. *****  getPrinterState
  32.      move spaces             to FUNC-EPSON-LIB.
  33.      MOVE "getPrinterStatus" TO FUNC-EPSON-LIB.
  34.      CALL FUNC-EPSON-LIB.
  35. *> PROGRAM-STATUS ---> si no es cero hay problemas  40961 tapa abierta 1 poco papel 2 sin papel
  36.      move PROGRAM-STATUS to gState.
  37.      display "estado" , gState.

Kuk 30 de agosto de 2020 17:21

@jhjacomo, esa variable no te puede funcionar porque PROGRAM-STATUS es de tipo S9(9) COMP-5..

Cambia la definición de wstatus y ponle el tipo que te digo y funcionará ;)

fastpho 30 de agosto de 2020 17:35

@Kuk, Por mas que le cambie a ws-status por
Código COBOL:
  1. PIC S9(9) COMP-5
no le funcionara , siempre le devolvera zero por eso las lineas que le puse solicita primero el estado al impresor y entonces
Código COBOL:
  1.  programn-status
tendra el valor que corresponde por eso le reemplace la variable ws-status con gstate con el formato que corresponde


La franja horaria es GMT +2. Ahora son las 13:54.

Powered by: vBulletin, Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.