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.
Ayuda Con Puertos COMM
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: Ayuda Con Puertos COMM
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
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
Re: Ayuda Con Puertos COMM
Gracias Señor Antonio, Claro que si, le agradesco su atencion, aqui anexo la funcion que realiza la consulta y envio de datos
Les Agradeceria toda la Ayuda Posible, Gracias
Carlos I. De La Rosa
Los Mochis, Sin., Mexico
carloslmm@hotmail.com
Code: Select all
#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
Carlos I. De La Rosa
Los Mochis, Sin., Mexico
carloslmm@hotmail.com
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: Ayuda Con Puertos COMM
Carlos,
Que comandos le envias desde el hyperterminal ?
Cómo se los envias ? Pulsando "enter" al final ?
Que comandos le envias desde el hyperterminal ?
Cómo se los envias ? Pulsando "enter" al final ?
Re: Ayuda Con Puertos COMM
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
Saludos
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: Ayuda Con Puertos COMM
Carlos,
Prueba a llamar a FlushComm( nComm, 0 ) despues de enviar una instrucción completa
Prueba a llamar a FlushComm( nComm, 0 ) despues de enviar una instrucción completa
Re: Ayuda Con Puertos COMM
No lo Habia Probado Asi, Pruebo y Reporto si Se Soluciono Con Esto
Gracias.
Carlos I,. De La Rosa
carloslmm@hotmail.com
Gracias.
Carlos I,. De La Rosa
carloslmm@hotmail.com
Re: Ayuda Con Puertos COMM
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
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