Ayuda Con Puertos COMM

Ayuda Con Puertos COMM

Postby carloslmm » Sat Feb 06, 2010 3:36 am

Un Saludo a Toda la Comunidad Antes Que nada, Agradesco la Ayuda posble sobre este tema, Tengo un Cliente Con una Bascula la cual esta conectada al puerto com1: todo se enlasa muy bien recibo informacion del puerto y la muestrio hasta ahi todo esta bien, solo que ese indicador se le puede enviar comandos que especifica el manual, le mando que borre algo del indicador de la bascula y no me recibe ningun comando, Pero si lo haces del hyperterminal, con la misma configuracion y recibe informacion y le tecleas los comandos directamente y los ejecuta, ya le cambie todo al programa y nada, si alguien tinen algo de informacion se los agradeceria Muchisimo.

Fwh 9.12 y Harbour

Gracias y a Sus Orden

Carlos I. De La Rosa
carloslmm@hotmail.com
Los Mochis, Sin.
carloslmm
 
Posts: 71
Joined: Sat Oct 20, 2007 3:02 pm
Location: Sinaloa Mexico

Re: Ayuda Con Puertos COMM

Postby Antonio Linares » Sun Feb 07, 2010 8:50 am

Carlos,

Como estas haciendo para enviarle los datos al puerto com ? Muestranos el código y lo revisamos.

Tambien puedes revisar ejemplos en FWH\samples\TestComm.prg y Phone.prg
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41414
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Ayuda Con Puertos COMM

Postby carloslmm » Mon Feb 08, 2010 4:00 pm

Gracias Señor Antonio, Claro que si, le agradesco su atencion, aqui anexo la funcion que realiza la consulta y envio de datos

Code: Select all  Expand view
#include "FiveWin.ch"
#include "TCBrowse.ch"


#define FULL_SIZE  405
#define HALF_SIZE  260

#define IN_BUFFER   128
//#define IN_BUFFER   128
#define TERM_SIZE  128

static mandaeste,pesox,ncomm,obrwti,nBytes
static osay01,oFont1m,oFont2m,cadenax,oget6

Function TICKET()
store space(15)   to mandaeste
store "000000000" to pesox
store 0           to folix,nBytes
store fob         to fec1
store space(30)   to cadenax

select 26
errnet = netuse('ticket',.f.,3)
if errnet = .f.
   return .f.
endif
set index to ticket
set order to 1
campoti = { field(1),field(2),field(3),field(5),field(4),field(6) }

//SET RESOURCES TO "bb.DLL"
DEFINE FONT oFont1m NAME "Ms sanserif" SIZE 0,-14
DEFINE FONT oFont2m NAME "Ms sanserif" SIZE 0,-62
nComm := linitComm2()
DEFINE DIALOG paciare resource 'TICKET' of oWnd



   REDEFINE GET oget1    Var folix                  ID 505 OF paciare  Picture '9999999'
   REDEFINE GET oget2    Var fec1                   ID 517 OF paciare
   REDEFINE GET oget6    Var cadenax                ID 511 OF paciare

   REDEFINE GET oget3    Var mandaeste                ID 503 OF paciare  picture "@!"
   //REDEFINE SAY osay01   Prompt pesox                 ID 600 OF paciare   FONT oFont2m  Picture '9,999,999'
   REDEFINE GET osay01   Var pesox                    ID 600 OF paciare  picture "@!"   FONT oFont2m

   oget1:disable()
   oget2:disable()
   osay01:disable()
   oget1:ldiscolors = .f.
   oget2:ldiscolors = .f.
   osay01:ldiscolors = .f.

select 26
REDEFINE BROWSE obrwti ID 510 OF paciare  GRID MESSAGE "Ticket" //ON CHANGE CAMBIOSf(oget1)

obrwti:bKeydown  := {|nkeyp,nflagp| MITECLAti(nkeyp,nflagp,obrwti,campoti,paciare)}
obrwti:bLDblClick = {| | paciare:end() }

ADD COLUMN TO BROWSE obrwti DATA ticket->folio      HEAD "Folio"     OEM WIDTH 80   PICTURE "@!"   EDITABLE  ALign right  //DOUBLE CURSOR
ADD COLUMN TO BROWSE obrwti DATA ticket->fecha      HEAD "Fecha"     OEM WIDTH 90                  EDITABLE
ADD COLUMN TO BROWSE obrwti DATA ticket->producto   HEAD "Producto"  OEM WIDTH 250                 EDITABLE
ADD COLUMN TO BROWSE obrwti DATA ticket->bruto      HEAD "Bruto"     OEM WIDTH 80                  EDITABLE  ALign right
ADD COLUMN TO BROWSE obrwti DATA ticket->tara       HEAD "Tara"      OEM WIDTH 80                  EDITABLE  ALign right
ADD COLUMN TO BROWSE obrwti DATA ticket->neto       HEAD "Neto"      OEM WIDTH 80                  EDITABLE  ALign right

   REDEFINE BUTTON ID 502 Of paciare ACTION paciare:end() CANCEL // Eliminar

   REDEFINE BUTTON ID 508 Of paciare ACTION COMTARA()            // TARA
   REDEFINE BUTTON ID 507 Of paciare ACTION COMIMPRE()           // Impresion
   REDEFINE BUTTON ID 509 Of paciare ACTION COMGROSS()           // Gross

   REDEFINE BUTTON ID 506 Of paciare ACTION comanda()            // Cadena Directa
   REDEFINE BUTTON ID 512 Of paciare ACTION comanda2()           // Envio de Comandos Directo2
   REDEFINE BUTTON ID 513 Of paciare ACTION comanda3()           // Envio de Comandos Directo3

   paciare:bCommNotify = { | nComm, nStatus | BytesAtPo5( nComm, nStatus ) }

ACTIVATE DIALOG paciare  CENTERED ON INIT ( EnableCommNotification( nComm, paciare:hWnd, IN_BUFFER, IN_BUFFER ) )
CloseComm( nComm )
SET RESOURCES TO
return .t.


function COMANDA2(  )
sendmodem(chr(75)+chr(50) ) // K2 Enviando numero  2
sendmodem(chr(13) )
sendmodem(chr(75)+chr(48) ) // K0 Enviando numero 0
sendmodem(chr(13) )
sendmodem(chr(75)+chr(48) ) // K0 Enviando numero 0
sendmodem(chr(13) )

sendmodem(chr(75)+chr(84)+chr(65)+chr(82)+chr(69) ) // comando KTARE
sendmodem(chr(13) )                                 // ENTER

sendmodem("KTARE" )  // De Nuevo Rectificando

? "Comandos Enviados"
return .t.

function COMANDA3(  )
sendmodem("K2" )        //2
sendmodem("KENTER" )
sendmodem("k0" )        //0
sendmodem("KENTER" )
sendmodem("k0" )        //0
sendmodem("KENTER" )
sendmodem("KTARE" )
sendmodem("KENTER" )
? "Comandos Enviados 2"
return .t.


function COMANDA(  )
quees = alltrim(mandaeste)
for ix = 1 to len(quees)
    xcara = "K" + substr(quees,ix,1)
    xcara = xcara
    sendmodem(  xcara )
    sendmodem( "
"
)

next
sendmodem( "KTARE" )
sendmodem( "
"
)
? "Comandos Enviados Correctamente"
return .t.

function SendModem( cMsg )
   nBytes = 0
   nBytes := WriteComm( nComm, cMsg )

   if nBytes < 0
      MsgStop( "Modem error: " + Str( GetCommError( nComm ) ) )
   endif

return nil

function COMTARA(  )
sendmodem( "KTARE" )
sendmodem( "
"
)
sendmodem( "KENTER" )
return .t.

function COMIMPRE(  )
sendmodem( "KPRINT" )
sendmodem( "
"
)
sendmodem( "KENTER" )
return .t.

function COMGROSS(  )
sendmodem( "KGROSS" )
sendmodem( "KENTER" )
return .t.

function lInitcomm2()
   local cDcb, nError, nBytes
select 20
errnet = netuse('factores',.f.,3)
if errnet = .f.
   return .f.
endif

if !factores->bascula
   return .t.
endif

   xcom = alltrim(factores->puerto) // Puerto comm1,9600
   nCommx = OpenComm( xcom, 128 , 128 )
   cadena = factores->puerto+':'+alltrim(str(factores->velocidad)) + ','+factores->paridad+','+factores->bit_datos+','+factores->bit_parada
   //if ! BuildCommDcb( "COM1:9600,n,8,1", @cDcb )
   if ! BuildCommDcb( cadena, @cDcb )
      nError = GetCommError( nCommx )
      MsgStop( "Error initializing Puerto!" )
      return .f.
   endif
   if ! SetCommState( nCommx, cDcb )
      nError = GetCommError( nComm )
      MsgStop( "Error En EL Estdo del Puerto!" )
      return .f.
   endif
   //? 'puerto abierto'
   //EnableCommNotification( nComm, oDlg:hWnd, IN_BUFFER, IN_BUFFER )
return nCommx

//----------------------------------------------------------------------------//

function BytesAtPo5( nComm, nStatus )

   local cBuffer := Space( IN_BUFFER )
    numeros = 0
   cTerminal := Space( TERM_SIZE )

   numeros = ReadComm( nComm, @cBuffer )

   cTerminal = oemtoansi(  left(cBuffer,12)  ,TERM_SIZE )
   pesox = alltrim(cTerminal)
   oget6:refresh()
   pesox = substr(pesox,2,8)
   cadenax = pesox

   //select 1
   //xxx = ''
   //xxx = cterminal
   pesoxx = val(pesox)

   osay01:refresh()

//if conpeso = .t.
//   oget5p:refresh()
//endif

return nil


Les Agradeceria toda la Ayuda Posible, Gracias

Carlos I. De La Rosa
Los Mochis, Sin., Mexico
carloslmm@hotmail.com
carloslmm
 
Posts: 71
Joined: Sat Oct 20, 2007 3:02 pm
Location: Sinaloa Mexico

Re: Ayuda Con Puertos COMM

Postby Antonio Linares » Tue Feb 09, 2010 1:20 am

Carlos,

Que comandos le envias desde el hyperterminal ?

Cómo se los envias ? Pulsando "enter" al final ?
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41414
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Ayuda Con Puertos COMM

Postby carloslmm » Tue Feb 09, 2010 2:01 am

Los Comandos los he enviado Como cadena de caracter y el chr(13) he separado la cadena enviando caracter por caracter como lo solicita el indicador K0 para enviar cero al indicardo, K1 numero uno....K9 KTARE para TARA, KGROSS para resetear a cero, KPRINT Mandar Imprimir el Ticket de la Bascula, Los he enviado como CHR(x) cada letra, y si en efecto para cada comando Lleva enter al FInal K0 enter k1 enter, todo esto al estar ejecutando el programa, si recibo datos del indicador, lo que es el peso de la bascula esta correcto y en linea no tiene Tardanza alguna de refrscado, ahora con Hyperterminal igual esta recibiendo los datos del peso y si tecleas cada letra del teclado las recibe y en cuanto das el enter ejecuta el comando, ejemplo esta recibiendo datos y tecleas K 0 ENTER y recibe el K0 ya que le vas a mandar el comando de que haga con lo que los numero que le enviaste como KTARE ENTER realisa muy bien la intruccion y le mandas KGROS y todo perfecto, no se cual puede ser la diferencia de enviar comandos con nuestros programas y de enviarlos directamnete de Hyperterminal, si he visto los ejemplos de phone y testtcomm y ya he realizado pruebas con ellos con modems y funcionan perfectamente, solo que con los indicadores me trabe, Gracia señor Antonio Estoy al Pendiente.

Saludos
carloslmm
 
Posts: 71
Joined: Sat Oct 20, 2007 3:02 pm
Location: Sinaloa Mexico

Re: Ayuda Con Puertos COMM

Postby Antonio Linares » Tue Feb 09, 2010 9:34 pm

Carlos,

Prueba a llamar a FlushComm( nComm, 0 ) despues de enviar una instrucción completa
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41414
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Ayuda Con Puertos COMM

Postby carloslmm » Wed Feb 10, 2010 7:19 pm

No lo Habia Probado Asi, Pruebo y Reporto si Se Soluciono Con Esto

Gracias.
Carlos I,. De La Rosa
carloslmm@hotmail.com
carloslmm
 
Posts: 71
Joined: Sat Oct 20, 2007 3:02 pm
Location: Sinaloa Mexico

Re: Ayuda Con Puertos COMM

Postby carloslmm » Tue Feb 23, 2010 4:30 pm

Hola ha Todos

Despues de tantas Pruebas he resuleto esto de los puertos, anexe la funcion de flushcomm(), pero continuaba el problema que no procesaba los comandos enviados al indicador de la bascula, esto se vino a solucionar de forma temporal y rapaida anexando un ciclo for a la funcion que manda escribir los comandos, a i forma de ver las cosas, creo que no todos los dispositivos funcionan igual algunos procesan mas rapidos los comandos que otros ya sea por memorio o alguna otra cosa, bueno anexo la parte del codigo con el cambio realizado y si es posible el señor antonio tenga alguna sugerencia en alguna funcion de mas a fondo nos ayudara con eso, me di cuenta que hyperterminal maneja un retardador a la hora de escribir comandos.

//////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
function SendModem( cMsg )
nBytes = 0
nBytes := WriteComm( nComm, cMsg )

for ix = 1 to laespera // El valor de LaEspera seria de acuerdo al dispositivo
next ix // Puse 1,000,000 Asi pudo Funcionar

if nBytes < 0
MsgStop( "Error de Envio!!: " + Str( GetCommError( nComm ) ) )
endif

if FlushComm( nComm, 0 ) != 0 // Esta Inst. La Deje Pero Seguia Igual
nError = GetCommError( nComm )
MsgInfo( "FlushComm Error: " + Str( nError ) )
endif
return nil
//////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////

Muchas Gracias Señor Antonio por su Ayuda, aqui seguiremos.
Que esten Bien Todos
Carlos I. De La Rosa.
carloslmm@hotmail.com
carloslmm
 
Posts: 71
Joined: Sat Oct 20, 2007 3:02 pm
Location: Sinaloa Mexico


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 36 guests