|
|
|
|
@@ -32,11 +32,11 @@ static char* lastConfStr = NULL;
|
|
|
|
|
static int alreadyLoaded = 0;
|
|
|
|
|
|
|
|
|
|
/** Optional.
|
|
|
|
|
* Will be called once after successfull load into ecmc.
|
|
|
|
|
* Will be called once after successful load into ecmc.
|
|
|
|
|
* Return value other than 0 will be considered error.
|
|
|
|
|
* configStr can be used for configuration parameters.
|
|
|
|
|
**/
|
|
|
|
|
int daqConstruct(char *configStr)
|
|
|
|
|
static int daqConstruct(char *configStr)
|
|
|
|
|
{
|
|
|
|
|
if(alreadyLoaded) {
|
|
|
|
|
printf("Error: Plugin ecmc_plugin_daq already loaded and can only be loaded once.");
|
|
|
|
|
@@ -51,7 +51,7 @@ int daqConstruct(char *configStr)
|
|
|
|
|
/** Optional function.
|
|
|
|
|
* Will be called once at unload.
|
|
|
|
|
**/
|
|
|
|
|
void daqDestruct(void)
|
|
|
|
|
static void daqDestruct(void)
|
|
|
|
|
{
|
|
|
|
|
// Segfaults here during destruction?! need to check..
|
|
|
|
|
//deleteAllDAQs();
|
|
|
|
|
@@ -61,19 +61,19 @@ void daqDestruct(void)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/** Optional function.
|
|
|
|
|
* Will be called each realtime cycle if definded
|
|
|
|
|
* ecmcError: Error code of ecmc. Makes it posible for
|
|
|
|
|
* Will be called each realtime cycle if defined
|
|
|
|
|
* ecmcError: Error code of ecmc. Makes it possible for
|
|
|
|
|
* this plugin to react on ecmc errors
|
|
|
|
|
* Return value other than 0 will be considered to be an error code in ecmc.
|
|
|
|
|
**/
|
|
|
|
|
int daqRealtime(int ecmcError)
|
|
|
|
|
static int daqRealtime(int ecmcError)
|
|
|
|
|
{
|
|
|
|
|
lastEcmcError = ecmcError;
|
|
|
|
|
return executeDAQs();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int daqEnterRT(){
|
|
|
|
|
static int daqEnterRT(){
|
|
|
|
|
return validateDAQs(); //linkDataToDAQs();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -81,31 +81,16 @@ int daqEnterRT(){
|
|
|
|
|
* Will be called once just before leaving realtime mode
|
|
|
|
|
* Return value other than 0 will be considered error.
|
|
|
|
|
**/
|
|
|
|
|
int daqExitRT(void){
|
|
|
|
|
static int daqExitRT(void){
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// // Plc function for clear of buffers
|
|
|
|
|
// double daq_clear(double index) {
|
|
|
|
|
// return (double)clearDAQ((int)index);
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
// Plc function for enable
|
|
|
|
|
//double daq_enable(double index, double enable) {
|
|
|
|
|
// return 0; //(double)enableDAQ((int)index, (int)enable);
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
// // Plc function for trigg new measurement (will clear buffers)
|
|
|
|
|
// double daq_trigg(double index) {
|
|
|
|
|
// return (double)triggDAQ((int)index);
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
// Register data for plugin so ecmc know what to use
|
|
|
|
|
struct ecmcPluginData pluginDataDef = {
|
|
|
|
|
static struct ecmcPluginData pluginDataDef = {
|
|
|
|
|
// Allways use ECMC_PLUG_VERSION_MAGIC
|
|
|
|
|
.ifVersion = ECMC_PLUG_VERSION_MAGIC,
|
|
|
|
|
// Name
|
|
|
|
|
.name = "ecmcPlugin_DAQ",
|
|
|
|
|
.name = "ecmc_plugin_daq",
|
|
|
|
|
// Description
|
|
|
|
|
.desc = "DAQ plugin for use with ecmc.",
|
|
|
|
|
// Option description
|
|
|
|
|
@@ -124,28 +109,6 @@ struct ecmcPluginData pluginDataDef = {
|
|
|
|
|
.realtimeExitFnc = daqExitRT,
|
|
|
|
|
// PLC funcs
|
|
|
|
|
.funcs[0] = {0},
|
|
|
|
|
// { /*----fft_clear----*/
|
|
|
|
|
// // Function name (this is the name you use in ecmc plc-code)
|
|
|
|
|
// .funcName = "daq_enable",
|
|
|
|
|
// // Function description
|
|
|
|
|
// .funcDesc = "daq_enable(index,enable) : Enable/disaable daq[index].",
|
|
|
|
|
// /**
|
|
|
|
|
// * 12 different prototypes allowed (only doubles since reg in plc).
|
|
|
|
|
// * Only funcArg${argCount} func shall be assigned the rest set to NULL.
|
|
|
|
|
// **/
|
|
|
|
|
// .funcArg0 = NULL,
|
|
|
|
|
// .funcArg1 = NULL,
|
|
|
|
|
// .funcArg2 = daq_enable,
|
|
|
|
|
// .funcArg3 = NULL,
|
|
|
|
|
// .funcArg4 = NULL,
|
|
|
|
|
// .funcArg5 = NULL,
|
|
|
|
|
// .funcArg6 = NULL,
|
|
|
|
|
// .funcArg7 = NULL,
|
|
|
|
|
// .funcArg8 = NULL,
|
|
|
|
|
// .funcArg9 = NULL,
|
|
|
|
|
// .funcArg10 = NULL,
|
|
|
|
|
// .funcGenericObj = NULL,
|
|
|
|
|
// },
|
|
|
|
|
.consts[0] = {0}, // last element set all to zero..
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|