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

📄 ttgetmsg2.cpp

📁 用于网络控制系统仿真
💻 CPP
字号:
/* * TrueTime, Version 1.5 * Copyright (c) 2007 * Martin Ohlin, Dan Henriksson and Anton Cervin * Department of Automatic Control LTH * Lund University, Sweden */#define KERNEL_MATLAB#include "../ttnetwork.h" mxArray *ttGetMsgMATLAB(int networkNbr, int receiver, double* signalPower);void mexFunction( int nlhs, mxArray *plhs[],                  int nrhs, const mxArray *prhs[] ){  int network, receiver, trigger;  // Check number and type of arguments.   if (nrhs != 3 ) {    printf("ttGetMsg: Wrong number of input arguments!\nUsage: ttGetMsg(network, receiver, trigger)");    return;  }    if (!mxIsDoubleScalar(prhs[2])) {    printf("ttGetMsg: trigger must be an integer scalar");    return;  }  trigger = (int) *mxGetPr(prhs[2]);  // At time 0, the block is executed once to get an initial output signal.  // But we do not want to send any messages at this time, unless the trigger  // is really activated.  if ( trigger==0 ){    plhs[0] = mxCreateScalarDouble(0);    return;  }  if (!mxIsDoubleScalar(prhs[0])) {    printf("ttGetMsg: network must be an integer scalar");    return;  }  network = (int) *mxGetPr(prhs[0]);  if (!mxIsDoubleScalar(prhs[1])) {    printf("ttGetMsg: receiver must be an integer scalar");    return;  }  receiver = (int) *mxGetPr(prhs[1]);  double signalPower;  plhs[0] = ttGetMsgMATLAB(network, receiver, &signalPower);  if ( nlhs>=2 ){    plhs[1] = mxCreateScalarDouble(signalPower);  }}// do the dirty work: poke around inside nwsys of network block NWmsg *nwGetMsg(RTnetwork* nwsys, int nodeNbr) {  NWmsg *m;  if ((m = (NWmsg *)nwsys->nwnodes[nodeNbr]->postprocQ->getFirst()) != NULL) {    nwsys->nwnodes[nodeNbr]->postprocQ->removeNode(m);  }  return m;}// For use from Matlab mex function//char *ttGetMsgMATLAB(int networkNbr)mxArray *ttGetMsgMATLAB(int networkNbr, int receiver, double* signalPower){  RTnetwork *nwsys;  char nwsysbuf[100];  sprintf(nwsysbuf, "_nwsys_%d", networkNbr);  mxArray *var = (mxArray*)mexGetVariablePtr("global", nwsysbuf);  if (var == NULL) {    printf("_nwsys_%d not found!\n", networkNbr);    return 0;  }  nwsys = (RTnetwork *)(*((int *)mxGetPr(var)));  if (receiver < 0 || receiver > nwsys->nbrOfNodes) {    printf("receiver number out of bounds.\n");    return 0;  }  NWmsg *nwmsg = nwGetMsg(nwsys, receiver-1);  if (nwmsg == NULL) {    *signalPower = 0;    printf("Error in %s, line:%d\n", __FUNCTION__, __LINE__);    return NULL;  }  mxArray* data = mxDuplicateArray(nwmsg->dataMATLAB);  *signalPower = nwmsg->signalPower;  // Delete message   mxDestroyArray(nwmsg->dataMATLAB);  delete nwmsg;  return data;}

⌨️ 快捷键说明

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