Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在matlab中编译代码时,如何访问实时工具的内核文件ttnetwork.cpp中的svalue[10800]数组?_C++_Arrays_Matlab - Fatal编程技术网

C++ 在matlab中编译代码时,如何访问实时工具的内核文件ttnetwork.cpp中的svalue[10800]数组?

C++ 在matlab中编译代码时,如何访问实时工具的内核文件ttnetwork.cpp中的svalue[10800]数组?,c++,arrays,matlab,C++,Arrays,Matlab,该工具出现在以下链接中。内核目录中有一个文件ttkernel.cpp,我根据examples/networked/c++/controller_init.cpp中的svalue[]矩阵做出了一些决定 嗯?你是在问如何将变量传递给函数吗?您是否在询问如何将变量传递给函数? #define S_FUNCTION_NAME controller_init #include "ttkernel.cpp" double svalue[10800]; int k=0; struct PD_Data {

该工具出现在以下链接中。内核目录中有一个文件ttkernel.cpp,我根据examples/networked/c++/controller_init.cpp中的svalue[]矩阵做出了一些决定


嗯?你是在问如何将变量传递给函数吗?您是否在询问如何将变量传递给函数?
#define S_FUNCTION_NAME controller_init
#include "ttkernel.cpp"
double svalue[10800];
int k=0;

struct PD_Data {
    // ctrl params
    double K, Td, N, h, ad, bd;

    // ctrl states
    double yold, Dold, u;
};

// Kernel data strucutre
struct Kernel_Data {
    struct PD_Data *pddata;
    double *dummydata;
};

// controller code function
double controller_code(int seg, void *data)
{
    double *msg;
    double r, y, P, D;
    PD_Data* d = (PD_Data*) data;

    switch(seg) {
        case 1:
            msg = (double*) ttGetMsg(); // get sensor value
            if (msg != NULL) {
                y = *msg;
                svalue[k++]=y;
                delete msg; // delete message
            } else {
                mexPrintf("Error in controller: no message received!\n");
                y = 0.0;
            }

            r = ttAnalogIn(1);

            P = d->K*(r-y);
            D = d->ad*d->Dold + d->bd*(d->yold-y);
            d->u = P + D;
            d->Dold = D;
            d->yold = y;
            return 0.0005;

        default:
            msg = new double;
            *msg = d->u;
            ttSendMsg(1, msg, 80); // Send 80 bits to node 1 (actuator)
            return FINISHED;
    }

}


void init() {

    // Initialize TrueTime kernel
    ttInitKernel(prioDM); // deadline-monotonic scheduling

    // Allocate kernel data and store pointer in UserData
    Kernel_Data *kdata = new Kernel_Data;
    ttSetUserData(kdata);

    // Read the input argument from the block dialogue
    mxArray *initarg = ttGetInitArg();
    if (!mxIsDoubleScalar(initarg)) {
        TT_MEX_ERROR("The init argument must be a number!\n");
        return;
    }

    // Create task data (local memory)
    PD_Data *data = new PD_Data;
    kdata->pddata = data;

    data->h = 0.010;
    data->K = 1.0;
    data->Td = 0.04;
    data->N = 100.0;
    data->ad = data->Td/(data->N*data->h+data->Td);
    data->bd = data->N*data->K*data->ad;
    data->yold = 0.0;
    data->Dold = 0.0;
    data->u = 0.0;

    // Sporadic controller task, activated by arriving network message
    double deadline = data->h;
    ttCreateTask("controller_task", deadline, controller_code, data);
    ttAttachNetworkHandler("controller_task");

}

void cleanup() {

    Kernel_Data *kdata = (Kernel_Data *)ttGetUserData();
    delete kdata->pddata;
    delete kdata;
}