⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 controller_init.cpp

📁 一个很棒的网络控制系统仿真软件
💻 CPP
字号:
// Distributed control system: controller node//// Receives messages from the sensor node, computes control signal// and sends it to the actuator node. Also contains a high-priority// disturbing task.#define S_FUNCTION_NAME controller_init#include "ttkernel.cpp"// PID data structureclass PD_Data {public:  // ctrl params  double K, Td, N, h, ad, bd;    // ctrl states  double yold, Dold, u;};// controller code functiondouble ctrl_code(int seg, void *data){  double *m;  double r, y, P, D;  PD_Data* d = (PD_Data*) data;  switch(seg) {  case 1:    ttWait("packet");    return 0.0;  case 2:    m = (double*) ttGetMsg(); // get sensor value    y = *m;    delete m; // delete message    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;  case 3:    m = new double;    *m = d->u;    ttSendMsg(2, m, 10); // Send 10 bytes to node 2 (actuator)    ttSetNextSegment(1); // loop and wait for new packet    return 0.0;  }}// interfering task code functiondouble dummy_code(int seg, void *data){  switch (seg) {  case 1:    return 0.004;  case 2:    return FINISHED;  }}double msgRcvhandler(int seg, void *data){  ttNotifyAll("packet");  return FINISHED;}PD_Data* data;void init() {  // Initialize TrueTime kernel    ttInitKernel(1, 0, FP); // nbrOfInputs, nbrOfOutputs, fixed priority    // Create task data (local memory)  data = new PD_Data;  data->K = 1.5;  data->Td = 0.035;  data->N = 100000.0;  data->h = 0.010;  data->ad = data->Td/(data->N*data->h+data->Td);  data->bd = data->N*data->K*data->Td/(data->N*data->h+data->Td);  data->yold = 0.0;  data->Dold = 0.0;  data->u = 0.0;  // Controller task  double deadline = 0.010;  double prio = 2.0;  ttCreateTask("pid_task", deadline, prio, ctrl_code, data);  ttCreateJob("pid_task");  // Disturbance task (uncomment to add disturbance task)  // double offset = 0.0002;  // double period = 0.007;  // prio = 1.0;  // ttCreatePeriodicTask("dummy", offset, period, prio, dummy_code);  // Initialize network  ttCreateInterruptHandler("msgRcv", prio, msgRcvhandler);  ttInitNetwork(4, "msgRcv"); // node #4 in the network    ttCreateEvent("packet");}void cleanup() {  delete data;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -