Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Error! DAQmxreaddigitalscalaru32()-the signal is not compatible (https://www.clubdelphi.com/foros/showthread.php?t=71280)

monretutiel 10-12-2010 17:23:47

Error! DAQmxreaddigitalscalaru32()-the signal is not compatible
 
No me reconoce las entradas del simseny el builder, hago un caption en un label para ver como me varia el valor de una función de entrada analógica y no varía ¿alguna solución?.Me urge bastante si alguien me pudiera dar una dirección para mandarle el miniprograma y que le eche un vistazo
Gracias.

monretutiel 11-12-2010 03:52:55

Error! DAQmxreaddigitalscalaru32()-the signal is not compatible
 
Alguien sabe a que puede ser debido este error el problema es al iniciar el simulador simseny.Adjunto mi proceso

Código c++
Cita:

//---------------------------------------------------------------------------
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma package(smart_init)
//Process
#include "UnitProceso.h"
#include "UnitInterfazUsuario.h"
#include <vcl.h>
#include <stdio.h>
#define SS_FALSE_DAQ // <-- AÑADIR ESTO
#include "ss_nidaqmx.h" //SimSeny header file
// sensor rebose
#define REBOSE_SENSOR_CHANNEL "Dev21/port1" // lee todo el puerto
#define REBOSE_SENSOR_BIT 0 // bit 0 es el rebose
//sensor sobrecalentamiento
#define SOBRECALENTAMIENTO_SENSOR_CHANNEL "Dev21/port1"
#define SOBRECALENTAMIENTO_SENSOR_BIT 1 // bit 1 es el sobrecalentamiento

// Espejo de salidas digitales
int mirror_DO;


//entradas
TaskHandle rebose_sensor_task;
TaskHandle sobrecalentamiento_sensor_task;
TaskHandle temperatura_sensor_task;
TaskHandle nivel_sensor_task;
//salidas
TaskHandle actuadores_task;
TaskHandle analog_output_task;

// reporte de errores del proceso --------------------------------------------------
void process_error(int32 code, char *suffix) {
AnsiString msg;
char buff[200]; // buffer para los mensajes de erro
msg = "Error: ";
msg = msg + suffix;
msg = msg + "\n";
msg = msg + "In: ";
DAQmxGetErrorString (code, buff, 200); // obtiene el mensaje de error
msg = msg + buff;
ShowMessage(msg);
exit(1); // fuerza el final de la aplicacion
}

// Inicializacion proceso ---------------------------------------------------
void process_init(void) {
int32 daq_error;
mirror_DO = 0x00;//Inicializacion espejos


// preparacion sensor rebose
// error para tarea rebose
daq_error = DAQmxCreateTask("rebose task",&rebose_sensor_task);
if (daq_error != 0)
process_error(daq_error,"process_init()->rebose_1");
// ahora mete nuevos canales, aqui el puerto completo
daq_error = DAQmxCreateDIChan(rebose_sensor_task, "Dev21/port0",
"",DAQmx_Val_ChanForAllLines);
if (daq_error != 0)
process_error(daq_error,"process_init()->rebose_2");


// -- preparacion sensor sobrecalentamiento
// error para tarea sobrecalentamiento
daq_error = DAQmxCreateTask("sobrecalentamiento task",&sobrecalentamiento_sensor_task);
if (daq_error != 0)
process_error(daq_error,"process_init()->sobrecalentamiento_3");
// ahora mete nuevos canales, aqui el puerto completo
daq_error = DAQmxCreateDIChan(sobrecalentamiento_sensor_task, "Dev21/port0",
"",DAQmx_Val_ChanForAllLines);
if (daq_error != 0)
process_error(daq_error,"process_init()->sobrecalentamiento_4");


// -- preparacion sensor temperatura
daq_error = DAQmxCreateTask("temperatura task",&temperatura_sensor_task);
if (daq_error != 0)
process_error(daq_error,"process_init()->temperatura_5");
daq_error = DAQmxCreateAIVoltageChan (temperatura_sensor_task, "Dev21/ai0",
"", DAQmx_Val_RSE, 0.0, 10.0, DAQmx_Val_Volts, NULL);
if (daq_error != 0)
process_error(daq_error,"process_init()->temperatura_6");

// -- preparacion sensor nivel
daq_error = DAQmxCreateTask("nivel task",&nivel_sensor_task);
if (daq_error != 0)
process_error(daq_error,"process_init()->nivel_7");
daq_error = DAQmxCreateAIVoltageChan (nivel_sensor_task, "Dev21/ai1",
"", DAQmx_Val_RSE, 6.0, 0.0, DAQmx_Val_Volts, NULL);
if (daq_error != 0)
process_error(daq_error,"process_init()->nivel_8");


// -- preparacion salida digital
daq_error = DAQmxCreateTask("actuadores task", &actuadores_task);
if (daq_error != 0)
process_error(daq_error,"process_init()->digitalo9");
// lee el puerto completo
daq_error = DAQmxCreateDOChan (actuadores_task, "Dev21/port0",
"",DAQmx_Val_ChanForAllLines);


//preparacion salida analógica
daq_error=DAQmxCreateTask("Analog Output Task",&analog_output_task);
if(daq_error!=0)
process_error(daq_error,"process_init()->analoga10");
daq_error=DAQmxCreateAOVoltageChan(analog_output_task, //taskHandle
"Dev0/ao0", //physicalChannel
"", //nameToAssignToChannel
0.0, //minVal
10.0, //maxVal
DAQmx_Val_Volts, //units
NULL); //customScaleName

if(daq_error!=0)
process_error(daq_error,
"process_init()->analoga11");
}



// lee rebose y devuelve el estado ------------------------------------
bool process_read_rebose(void) {
int32 daq_error;
uInt32 data;
// Esta tarea empieza automaticamente y no have falta iniciarla
daq_error = DAQmxReadDigitalScalarU32 (rebose_sensor_task, 0.0, &data,
NULL);
if (daq_error != 0)
process_error(daq_error,"process_read_rebose()");
// DAQmxStopTask() optional
if ((data & 0x01) == 0) { //rebose sensor bit 0
return(REBOSE_YES);

} else {
return(REBOSE_NO);
}
}

// lee sobrecalentamiento y devuelve el estado ------------------------------------
bool process_read_sobrecalentamiento(void) {
int32 daq_error;
uInt32 data;
// Esta tarea empieza automaticamente y no hace falta iniciarla
daq_error = DAQmxReadDigitalScalarU32 (sobrecalentamiento_sensor_task, 0.0, &data,
NULL);
if (daq_error != 0)
process_error(daq_error,"process_read_sobrecalentamiento()");
// DAQmxStopTask() optional
if ((data & 0x02) == 0) { //sobrecalentamiento sensor bit 1
return(SOBRECALENTAMIENTO_NO);

} else {
return(SOBRECALENTAMIENTO_YES);
}
}
// lee sensor temperatura y devuelve estado--------------------------------------------------
double process_read_temperatura(void) {
int32 daq_error;
float64 volts;
double degrees;
// ?? esta tarea empieza automaticamente
daq_error = DAQmxReadAnalogScalarF64 (temperatura_sensor_task, 1.0,
&volts, NULL);
if (daq_error != 0)
process_error(daq_error,"process_read_temperatura()");
else
degrees = volts * 10;//grados = voltios * (100.0/10.0); // funcion real, 0V=0ºC, 10V=100ºC
return(degrees);
}

// lee sensor nivel y devuelve estado --------------------------------------------------
double process_read_nivel(void) {
int32 daq_error;
float64 volts;
double liter;
// ?? esta tarea empieza automaticamente
daq_error = DAQmxReadAnalogScalarF64 (nivel_sensor_task, 1.0,
&volts, NULL);
if (daq_error != 0)
process_error(daq_error,"process_read_nivel()");
else
liter = (633.33333*volts)+3800 ; //litros = (633.33333*volts)+3800; // funcion real,
return(liter);
}

// escribe el actuador valvula -----------------------------------------------------
//0->cerrada, 1->abierta
void process_write_valvula(int state) {
int32 daq_error;
if (state == VALVULA_OPEN) {
mirror_DO = mirror_DO & ~0x01; // bit 0
} else {
mirror_DO = mirror_DO | 0x01;
}
daq_error = DAQmxWriteDigitalScalarU32 (actuadores_task, true, 0.0,
mirror_DO, NULL);
if (daq_error != 0)
process_error(daq_error,"process_write_valve()");
}
// escribe el actuador calefactor -----------------------------------------------------
//0->apagado, 1->encendido
void process_write_calefactor(int state) {
int32 daq_error;
if (state == CALEFACTOR_ON) {
mirror_DO = mirror_DO & ~0x02; // bit 0
} else {
mirror_DO = mirror_DO | 0x02;
}
daq_error = DAQmxWriteDigitalScalarU32 (actuadores_task, true, 0.0,
mirror_DO, NULL);
if (daq_error != 0)
process_error(daq_error,"process_write_calefactor()");
}
//escribe el actuador bomba------------------------------------------------------------
void process_write_bomba(double value)
{
float64 volts;
int32 daq_error;
volts=(value/20); //FDT (Actuador) Potencia/20 = voltios
daq_error=DAQmxWriteAnalogScalarF64(analog_output_task, //taskHandle
true, //autoStart
1.0, //timeout
volts, //value
NULL); //reserved
if(daq_error!=0)
process_error(daq_error,
"process_write_bomb()");
}



La franja horaria es GMT +2. Ahora son las 07:56:29.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi