[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

HP 33120A - Generador de Ondas -



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 debian-user-spanish-request@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org



Reply to: