Hola:
Quisiera pedir ayuda sobre la configuraci�n de un
Generador de Ondas Hewlett Packard
HP 33120A
para manejarlo a trav�s de un puerto serie,
con un programita en C (bajo Linux Debian Potato).
No estoy seguro de que estas sean las listas
correctas en donde averiguar, pero Uds. sabr�n
comprender... �no?
Si alguien conoce una lista m�s acorde a mi consulta,
por favor, av�seme.
Este equipo HP lo uso en el laboratorio
y hasta ahora no logro configurarlo bien...
En cambio, s� me puedo comunicar correctamente
con un Lock-In por otro puerto serie.
En el manual del equipo, s�lo vienen unos ejemplos
en C para el Sistema Operativo comercial
del millonario Gates, pero utilizan una librer�a
especialmente hecha por Hewlett Packard para este SO,
librer�a que por otra parte yo no poseo.
Con el programita que sigue m�s abajo,
parece que tengo alg�n problema de configuraci�n
del puerto, pues el equipo HP me manda un error
en la cadena de bits enviada.
Prob� algunos cambios, pero no me resultaron...
Yo supongo que el error est� en la configuraci�n
de los flags de la estructura termios (�"c_cflags"?).
Bueno, desde ya, muchas gracias por su ayuda
y el tiempo que me han brindado.
Eduardo.
Bariloche-Argentina
/**********************************************************/
/**********************************************************/
// GENERADOR ONDAS
/**********************************************************/
#include <string.h> //Funciones: strlen (), strcmp ().
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h> //Modos de apertura y funcion open ().
#include <termios.h>
#include <stdlib.h> //Funciones: write (), close (), atol().
#include <ctype.h> //Funciones: isdigit ().
#include <time.h> //Funciones: time().
/**********************************************************/
#define SI 1
#define NO 0
// Constantes de Inicializacion de Puerto Serie:
// COM4: Puerto Serie Generador Ondas (GO):
#define PUERTO_GENERADOR_ONDAS "/dev/ttyS3"
/**********************************************************/
void Configurar_Puerto_GO (int* Archivo_Puerto_GO, int*
Salir);
void Enviar_Comando_GO (int Archivo_Puerto_GO, char
*Comando, char* Respuesta);
void Cerrar_el_Archivo_del_Puerto (int* Archivo_Puerto);
void Esperar (int t);
/**********************************************************/
void main ()
{
int Archivo_Puerto_GO;
int* Salir; int No = NO;
char Comando [1024]; // 64 = 2^6 Caracteres.
char Respuesta [1024]; // 1024 = 2^10 Caracteres.
Salir = &No;
Configurar_Puerto_GO (&Archivo_Puerto_GO, Salir);
/*--------------------------------------------------------*/
strcpy (Comando,"*RST"); // Resetear (Reinicializar) GO.
Enviar_Comando_GO (Archivo_Puerto_GO, Comando, Respuesta);
Espera (100);
strcpy (Comando,"SYST:REM");
Enviar_Comando_GO (Archivo_Puerto_GO, Comando, Respuesta);
Espera (100);
strcpy (Comando,"*CLS"); // Despejar errores antiguos del
GO.
Enviar_Comando_GO (Archivo_Puerto_GO, Comando, Respuesta);
Espera (100);
strcpy (Comando,"OUTP:LOAD#MAX");
Enviar_Comando_GO (Archivo_Puerto_GO, Comando, Respuesta);
Espera (100);
strcpy (Comando,"VOLT:OFFS#0");
Enviar_Comando_GO (Archivo_Puerto_GO, Comando, Respuesta);
Espera (100);
strcpy (Comando,"FREQ 5000");
strcat (Comando,"\r");
l = strlen (Comando);
write (Archivo_Puerto_GO, Comando, l);
/*--------------------------------------------------------*/
Cerrar_el_Archivo_del_Puerto (&Archivo_Puerto_GO);
}
/**********************************************************/
void Enviar_Comando_GO (int Archivo_Puerto_GO,
char *Comando, char* Respuesta)
{
int Char = 0, i, l, Estado = 1;
int is_response = 0;
time_t t, t0;
// Agregar "Retorno de Carro" al comando a enviar:
l = strlen (Comando);
Comando [l] = '\r' ; // Enter o "Return" (Retorno de
carro).
Comando [l+1] = 0 ;
/*
// Agregar retorno de carro al Comando
strcat (Comando,"\r");
l = strlen (Comando);
*/
write (Archivo_Puerto_GO, Comando, l);
tcdrain (Archivo_Puerto_GO);
i = 0;
if (is_response)
{
bzero (Respuesta, 1000);
// Esperar 5 segundos:
time (&t0);
while (t-t0 < 5)
time (&t);
Estado = read (Archivo_Puerto_GO, Respuesta, 1000);
Respuesta [Estado] = 0;
}
}
/**********************************************************/
void Configurar_Puerto_GO (int* Archivo_Puerto_GO, int*
Salir)
{
char CualquierTecla [2];
struct termios t_GO; // Generador de Ondas.
if ((*Archivo_Puerto_GO =
open (PUERTO_GENERADOR_ONDAS,
O_RDWR | O_NDELAY | O_NOCTTY )) == -1)
{
perror (" Error al abrir el archivo '/dev/ttyS3' = COM
4");
*Salir = SI; // SALIR DEFINITIVAMENTE.
}
else // Si NO hay error al abrir el archivo de puerto al
GO:
{
tcgetattr (*Archivo_Puerto_GO, &t_GO);
t_GO.c_cc [VMIN] = 6; // Minimo de caracteres a leer:
VMIN=6.
t_GO.c_cc [VTIME] = 200; // El GO tiene 20 s para
responder.
t_GO.c_lflag = 0;
t_GO.c_cflag = CS7| B9600 | CSTOPB | CREAD | PARENB;
t_GO.c_oflag = 0; //NLDLY; //OLCUC | OCRNL;
t_GO.c_iflag = INPCK;
if (tcsetattr (*Archivo_Puerto_GO, TCSANOW, &t_GO))
{
perror (" No se pueden pasar los nuevos atributos de
Comunicacion al SO");
printf ("\n No se pueden pasar los nuevos atributos");
printf (" de Comunicacion al SO...\n");
Cerrar_el_Archivo_del_Puerto (Archivo_Puerto_GO);
*Salir = SI; // SALIR DEFINITIVAMENTE.
}
else // Si se pudieron pasar OK los nuevos atributos al
SO:
{
/*
printf ("\n Puerto Serie conectado");
printf (" al Generador de Ondas");
printf (" configurado correctamente.\n\n");
printf (" Pulsar cualquier tecla y <Enter> para
continuar... ");
scanf ("%s", CualquierTecla);
*/
}
}
/*
Despues de hacer esto de forma correcta, estamos en
condiciones
de "hablar" con el dispositivo al otro lado del puerto.
*/
}
/**********************************************************/
void Cerrar_el_Archivo_del_Puerto (int* Archivo_Puerto)
{
close (*Archivo_Puerto);
}
/**********************************************************/
void Esperar (int t)
{
for (int i; i<t; sin(i++));
}
/**********************************************************/
/**********************************************************/
---------------------------------------------------------------------------------------
Sac� tu cuenta de e-mail gratis en http://www.data54.com y pas� a ser parte de
nuestra comunidad
--
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]