LEER PUERTO SERIAL VIA RDP / SOLUCIONADO PARA LOCAL Y REMOTO
-
- Posts: 179
- Joined: Sun Jan 31, 2010 3:30 pm
- Location: Bucaramanga - Colombia
LEER PUERTO SERIAL VIA RDP / SOLUCIONADO PARA LOCAL Y REMOTO
Buen dia...
Actualmente leo el puerto serial de una bascula en un pc o modo local, sin problemas, pero
ahora requiero leerlo desde una conexión o sesión tipo terminal server o RDP, todo sobre windows
La conexión debe ser por terminal server y no por red, alguien ha trabajado ese tema
Gracias
Johnson Russi
Actualmente leo el puerto serial de una bascula en un pc o modo local, sin problemas, pero
ahora requiero leerlo desde una conexión o sesión tipo terminal server o RDP, todo sobre windows
La conexión debe ser por terminal server y no por red, alguien ha trabajado ese tema
Gracias
Johnson Russi
Last edited by russimicro on Sun Feb 12, 2017 11:27 pm, edited 3 times in total.
-
- Posts: 113
- Joined: Wed Mar 11, 2009 7:32 pm
- Location: Obregon, Sonora, Mexico
Re: LEER PUERTO SERIAL VIA RDP
Hola buenos dias
1-conectar una maquina que lea el puerto serial
2.cada vez que lee grabarlo en la base de datos ( sql, mysql)
bascula peso
3. cada vez que ocupes el peso solicitar el dato
de esta manera
puedes consultar de cualquier parte el peso de x bascula
asi lo hacemos en la empresa
saludos
1-conectar una maquina que lea el puerto serial
2.cada vez que lee grabarlo en la base de datos ( sql, mysql)
bascula peso
3. cada vez que ocupes el peso solicitar el dato
de esta manera
puedes consultar de cualquier parte el peso de x bascula
asi lo hacemos en la empresa
saludos
Benjamin Casarrubias Moreno
Cd. Obregon, Sonora, Mexico
chino72vale@hotmail.com
Fivewin 16.05, Harbour 3.2, xharbour 1.2.1, Fivelinux, visual estudio 2013
Cd. Obregon, Sonora, Mexico
chino72vale@hotmail.com
Fivewin 16.05, Harbour 3.2, xharbour 1.2.1, Fivelinux, visual estudio 2013
-
- Posts: 179
- Joined: Sun Jan 31, 2010 3:30 pm
- Location: Bucaramanga - Colombia
Re: LEER PUERTO SERIAL VIA RDP
Gracias por su respuesta.
la situación es la siguiente:
En sistemas POS con múltiples cajas , para lograr mejor rendimiento , se hace a través de terminal server - RDP, donde el servidor puede ser local o en Internet ( escritorio remoto).
Si pruebo la lectura del puerto serial en modo local o estación funciona perfecto , pero si ya estoy conectado vía escritorio remoto no lee nada y no marca ningún error.
Uso :
OpenComm ...
....
ReadComm( nComm, @cBuffer) // en modo local : retorna ejp : 0.065 pero en modo escritorio remoto, el retorno es vacío,
ahora desde el sistema operativo en el mismo escritorio remoto si retorna el peso asi: c:\xx\TYPE COM4 ....0.065 0.065 0.065 0.065 ... o usando hyperterminal tambien retorna el peso .
La duda queda entonces en como funciona ReadComm(),, desde una sesión de escritorio remoto
Nota : al conectarme vía escritorio remoto active los recursos locales a usar en la sesión remota
Gracias
Johnson Russi
la situación es la siguiente:
En sistemas POS con múltiples cajas , para lograr mejor rendimiento , se hace a través de terminal server - RDP, donde el servidor puede ser local o en Internet ( escritorio remoto).
Si pruebo la lectura del puerto serial en modo local o estación funciona perfecto , pero si ya estoy conectado vía escritorio remoto no lee nada y no marca ningún error.
Uso :
OpenComm ...
....
ReadComm( nComm, @cBuffer) // en modo local : retorna ejp : 0.065 pero en modo escritorio remoto, el retorno es vacío,
ahora desde el sistema operativo en el mismo escritorio remoto si retorna el peso asi: c:\xx\TYPE COM4 ....0.065 0.065 0.065 0.065 ... o usando hyperterminal tambien retorna el peso .
La duda queda entonces en como funciona ReadComm(),, desde una sesión de escritorio remoto
Nota : al conectarme vía escritorio remoto active los recursos locales a usar en la sesión remota
Gracias
Johnson Russi
-
- Posts: 113
- Joined: Wed Mar 11, 2009 7:32 pm
- Location: Obregon, Sonora, Mexico
Re: LEER PUERTO SERIAL VIA RDP / function readComm ??
Hola buenas tardes
ya tienes mapeado el puerto en el terminal server
ya tienes mapeado el puerto en el terminal server
Benjamin Casarrubias Moreno
Cd. Obregon, Sonora, Mexico
chino72vale@hotmail.com
Fivewin 16.05, Harbour 3.2, xharbour 1.2.1, Fivelinux, visual estudio 2013
Cd. Obregon, Sonora, Mexico
chino72vale@hotmail.com
Fivewin 16.05, Harbour 3.2, xharbour 1.2.1, Fivelinux, visual estudio 2013
-
- Posts: 179
- Joined: Sun Jan 31, 2010 3:30 pm
- Location: Bucaramanga - Colombia
Re: LEER PUERTO SERIAL VIA RDP / function readComm ??
Benjamín , buena tarde...
En windows 7, no aparecen en administración de dispositivos los puertos seriales remotos...
Solo se pueden ver desde el prompt con c:\ mode comx o hyperterminal ...
No se si en windows 7 se pueden mapear o es exclusivo para windows server ??
Johnson Russi
En windows 7, no aparecen en administración de dispositivos los puertos seriales remotos...
Solo se pueden ver desde el prompt con c:\ mode comx o hyperterminal ...
No se si en windows 7 se pueden mapear o es exclusivo para windows server ??
Johnson Russi
- armando.lagunas
- Posts: 340
- Joined: Mon Oct 05, 2009 3:35 pm
- Location: Curico-Chile
- Contact:
Re: LEER PUERTO SERIAL VIA RDP / function readComm ??
Probaste con esto?
-
- Posts: 179
- Joined: Sun Jan 31, 2010 3:30 pm
- Location: Bucaramanga - Colombia
Re: LEER PUERTO SERIAL VIA RDP / function readComm ??
Si,,
Nota : al conectarme vía escritorio remoto active los recursos locales a usar en la sesión remota
Nota : al conectarme vía escritorio remoto active los recursos locales a usar en la sesión remota
-
- Posts: 179
- Joined: Sun Jan 31, 2010 3:30 pm
- Location: Bucaramanga - Colombia
Re: LEER PUERTO SERIAL VIA RDP / function readComm ??
Buen dia...
Para Antonino Linares ...
Para descartar el tema de mapeo en sesiones remota, adapte un código de java para leer puertos seriales,
y el resultado es que funciona muy bien tanto en modo local como en sesiones remota.
Queda entonces la duda de porque el ReadComm( nComm, @cBuffer) , se conecta al puerto pero no retorna ninguna cadena...(solo en sesión remota)
Gracias
Johnson Russi
Anexo código de java
codigo xharbour a manera de prueba básica... lectura de sarta
Para Antonino Linares ...
Para descartar el tema de mapeo en sesiones remota, adapte un código de java para leer puertos seriales,
y el resultado es que funciona muy bien tanto en modo local como en sesiones remota.
Queda entonces la duda de porque el ReadComm( nComm, @cBuffer) , se conecta al puerto pero no retorna ninguna cadena...(solo en sesión remota)
Gracias
Johnson Russi
Anexo código de java
Code: Select all
package comunication;
import gnu.io.CommPortIdentifier;
import gnu.io.PortInUseException;
import gnu.io.SerialPort;
import gnu.io.SerialPortEvent;
import gnu.io.SerialPortEventListener;
import gnu.io.UnsupportedCommOperationException;
import java.io.*;
import java.util.*;
/**
* Este es un ejemplo de uso del API de Comunicaciones Java que permite la
* lectura de información a través de uno de los puertos serie de la
* máquina en que se ejecuta.
* El ejemplo se ha probado en Windows y Solaris, utilizando la línea
* de código que identifica el puerto a utilizar correspondiente
*/
public class Comunication implements Runnable,SerialPortEventListener {
static CommPortIdentifier idPuerto;
static Enumeration listaPuertos;
InputStream entrada;
SerialPort puertoSerie;
Thread tLectura;
// En este ejemplo implementa un thread que es el que se encarga de
// que la aplicación se quede esperando en el puerto que se haya
// abierto a que se reciban datos.
// Primero abre el puerto y luego le fija los parámetros
public Comunication() {
// Si el puerto no está en uso, se intenta abrir
try {
puertoSerie = (SerialPort)idPuerto.open( "AplLectura",2000 );
} catch( PortInUseException e ) {
System.out.println(e);
}
// Se obtiene un canal de entrada
try {
entrada = puertoSerie.getInputStream();
} catch( IOException e ) {
System.out.println(e);
}
// Añadimos un receptor de eventos para estar informados de lo
// que suceda en el puerto
try {
puertoSerie.addEventListener( this );
} catch( TooManyListenersException e ) {
System.out.println("Peso : ");
System.out.println(e);
}
// Hacemos que se nos notifique cuando haya datos disponibles
// para lectura en el buffer de la puerta
puertoSerie.notifyOnDataAvailable( true );
// Se fijan los parámetros de comunicación del puerto
try {
puertoSerie.setSerialPortParams( 9600,
SerialPort.DATABITS_8,
SerialPort.STOPBITS_1,
SerialPort.PARITY_NONE );
} catch( UnsupportedCommOperationException e ) {
System.out.println(e);
}
// Se crea y lanza el thread que se va a encargar de quedarse
// esperando en la puerta a que haya datos disponibles
tLectura = new Thread( this );
tLectura.start();
}
@Override
public void run() {
try {
// En los threads, hay que procurar siempre que haya algún
// método de escape, para que no se queden continuamente
// bloqueados, en este caso, la comprobación de si hay datos
// o no disponibles en el buffer de la puerta, se hace
// intermitentemente
System.out.println("Entra hilo");
Thread.sleep( 2000 );
} catch( InterruptedException e )
{
System.out.println(e);
}
}
@Override
public void serialEvent( SerialPortEvent _ev ) {
System.out.println("Entra evento serial");
switch( _ev.getEventType() ) {
// La mayoría de los eventos no se trata, éstos son los
// que se producen por cambios en las líneas de control del
// puerto que se está monitorizando
case SerialPortEvent.BI:
case SerialPortEvent.OE:
case SerialPortEvent.FE:
case SerialPortEvent.PE:
case SerialPortEvent.CD:
case SerialPortEvent.CTS:
case SerialPortEvent.DSR:
case SerialPortEvent.RI:
case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
break;
// Cuando haya datos disponibles se leen y luego se
// imprime lo recibido en la consola
case SerialPortEvent.DATA_AVAILABLE:
byte[] bufferLectura = new byte[20];
try {
while( entrada.available() > 0 ) {
int nBytes = entrada.read( bufferLectura );
}
System.out.print( new String(bufferLectura) );
} catch( IOException e ) {
System.out.println(e);
}
break;
};
//System.out.println("validar datos leídos y si son validos salir del app : ");
//System.exit(-1);
}
public static void main( String[] args ) {
// Lista de los puertos disponibles en la máquina. Se carga en el
// mimo momento en que se inicia la JVM de Java
listaPuertos = CommPortIdentifier.getPortIdentifiers();
while( listaPuertos.hasMoreElements() ) {
idPuerto = (CommPortIdentifier)listaPuertos.nextElement();
if( idPuerto.getPortType() == CommPortIdentifier.PORT_SERIAL ) {
if( idPuerto.getName().equals("COM4") ) { // WINDOWS
// Lector del puerto, se quedará esperando a que llegue algo
// al puerto
Comunication lector = new Comunication();
}
}
}
}
}
Code: Select all
#include "FiveWin.ch"
LeerSerial()
function LeerSerial()
local oDlg, nComm := InitComm() , nStatus := "ok"
alerta("entro")
BytesAtPort( nComm, nStatus )
CloseComm( nComm )
alerta("salio")
return nil
function InitCOMM()
local cDcb, nError, nBytes
local nComm := OpenComm( "COM4", 1024, 128 )
if ! BuildCommDcb( "COM4:9600,n,8,1", @cDcb )
MsgStop( "Error BUILD!" )
return .f.
endif
#ifdef __CLIPPER__
if ! SetCommState( cDcb )
#else
if ! SetCommState( nComm, cDcb )
#endif
MsgStop( "Error SETCOMM!" )
return .f.
endif
return nComm
function BytesAtPort( nComm, nStatus )
local cBuffer := Space(20 ), x := 0, nBytes := 0
// n := ReadComm( nComm, @cBuffer) // <<<<---- program will lock here
for x := 1 to 20
n := ReadComm( nComm, @cBuffer) // <<<<---- program will lock here
if n > 0
exit
endif
next x
Msginfo( AllTrim( cBuffer ))
return nil
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: LEER PUERTO SERIAL VIA RDP / readComm ?? Para Antonio
En local funciona bien ?
Solo falla en sesión remota ?
Solo falla en sesión remota ?
-
- Posts: 179
- Joined: Sun Jan 31, 2010 3:30 pm
- Location: Bucaramanga - Colombia
Re: LEER PUERTO SERIAL VIA RDP / readComm ?? Para Antonio
Buen dia... Antonio
Solo en sesiones remotas , pero no marca error , solo que el retorno es vació
Johnson Russi
Solo en sesiones remotas , pero no marca error , solo que el retorno es vació
Johnson Russi
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: LEER PUERTO SERIAL VIA RDP / readComm ?? Para Antonio
Comprueba que valor devuelve GetCommError( nComm ) a continuación de llamar a ReadComm()
-
- Posts: 179
- Joined: Sun Jan 31, 2010 3:30 pm
- Location: Bucaramanga - Colombia
Re: LEER PUERTO SERIAL VIA RDP / readComm ?? Para Antonio
n := ReadComm( nComm, @cBuffer)
alert( GetCommError( nComm ) ) // = 0.00 valor retornado
alert(n) // = 0.00 valor retornado
alert(cBuffer) // retorno vacio
-
- Posts: 179
- Joined: Sun Jan 31, 2010 3:30 pm
- Location: Bucaramanga - Colombia
Re: LEER PUERTO SERIAL VIA RDP / readComm ?? Para Antonio
Antonio... Buena tarde
Para recordarle el problema de readComm en sesiones remotas
ya seguí sus recomendaciones y no funciona
Saludos
Johnson Russi
Para recordarle el problema de readComm en sesiones remotas
ya seguí sus recomendaciones y no funciona
Saludos
Johnson Russi
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: LEER PUERTO SERIAL VIA RDP / readComm ?? Para Antonio
Prueba a llamar a SysRefresh() desde aqui:
Code: Select all
for x := 1 to 20
n := ReadComm( nComm, @cBuffer) // <<<<---- program will lock here
if n > 0
exit
endif
SysRefresh()
next x
-
- Posts: 179
- Joined: Sun Jan 31, 2010 3:30 pm
- Location: Bucaramanga - Colombia
Re: LEER PUERTO SERIAL VIA RDP / readComm ?? Para Antonio
Buen día... Antonio
Incluí el sysrefresh(), y sigue igual.
He encontrado lo siguiente : en sesiones remotas los puertos seriales no se listan en la opción de Windows : panel de control /sistema / administración de dispositivos, y solo se visualizan con el comando "MODE" , hyperterminal , app en java , etc , pero si instalo un producto de terceros para usar los puertos usb y seriales en sesiones remotas (USB for Remote Desktop by fabulatech.com - por cierto muy costoso ), ya se puedan usar, y desde luego ya se visualizan de forma igual a equipos locales y la orden ReadComm, ahora si retorna el peso de la bascula.¨
Deduzco : Que aplicaciones como hyperterminal o desarrollo en java (la estoy usando ) , si pueden leer el puerto así no este listado en la sesión "administración de dispositivos" , pero ReadComm no.
Seguiré esperando su valiosa colaboración, ya que el costo de "USB for Remote Desktop by fabulatech.com", es muy alto y pasarme a una red tradicional, es imposible dada la cantidad de estaciones de trabajo, siendo así solo podría usar terminal server o cliente / servidor
Johnson Russi
Incluí el sysrefresh(), y sigue igual.
He encontrado lo siguiente : en sesiones remotas los puertos seriales no se listan en la opción de Windows : panel de control /sistema / administración de dispositivos, y solo se visualizan con el comando "MODE" , hyperterminal , app en java , etc , pero si instalo un producto de terceros para usar los puertos usb y seriales en sesiones remotas (USB for Remote Desktop by fabulatech.com - por cierto muy costoso ), ya se puedan usar, y desde luego ya se visualizan de forma igual a equipos locales y la orden ReadComm, ahora si retorna el peso de la bascula.¨
Deduzco : Que aplicaciones como hyperterminal o desarrollo en java (la estoy usando ) , si pueden leer el puerto así no este listado en la sesión "administración de dispositivos" , pero ReadComm no.
Seguiré esperando su valiosa colaboración, ya que el costo de "USB for Remote Desktop by fabulatech.com", es muy alto y pasarme a una red tradicional, es imposible dada la cantidad de estaciones de trabajo, siendo así solo podría usar terminal server o cliente / servidor
Johnson Russi