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()");
}
|
Última edición por Casimiro Notevi fecha: 11-12-2010 a las 13:38:43.
|