COM-Port + Simulink
4 views (last 30 days)
Show older comments
HEllo everybody! I need to take some data from COM-Port and give them to the model of Simulink. I tried to used for this S-Function, writing in C, but I don't know how to programming COM-port for Simulink in C.
So i need to make 2 block - first will btake data from com port and give it to model and second block will take data from model and sent them to com port for example - code of the first block (without programming COM port):
#define S_FUNСTION_NAME input /"название функции"/
#define S_FUNСTION_LEVEL 2 /"уровень функции"/
#include "simstruc .h"
/* ========== Callback -функции ========== */
/* Callback -функция: mdlInitializeSizes */
static void mdlInitializeSizes(SimStruct *S) /"СОхраняет значнения callback-функции при выходе из нее"/
{
ssSetNumSFcnParams(S, 0); /"Число диалоговых параметров - 0"/
if (ssGetNumSFcnParams(S)!=ssGetSFcnParamsСount(S)) return; /"Если не равны - выход"/
ssSetNumСontStates(S, 1); /"Непрерывный блок с одной переменной состояния"/
if (!ssSetNumInputPorts(S, 0)) return; /"Число входов - 0"/
if (!ssSetNumOutputPorts(S, 1)) return; /"Число выходов - 3"/
ssSetOutputPortWidth(S, 0, 1); /"Каждый выход - скаляр"/
ssSetNumSampleTimes(S, 1); /" Число видов дискретизации - для непрерывного блока равно 1"/
ssSetOptions(S,
SS_OPTION_WORKS_WITH_CODE_REUSE |
SS_OPTION_EXCEPTION_FREE_CODE |
SS_OPTION_USE_TLC_WITH_ACCELERATOR);
}
/* Callback -функция: mdlInitializeSampleTimes */
static void mdlInitializeSampleTimes(SimStruct *S) /"Устанавливает период дискретизации и время смещения моментов дискретизации для каждого вида дискретизации"/
{
ssSetSampleTime(S, 0, СONTINUOUS_SAMPLE_TIME); /"непрерывный блок с видом дискретизации СONTINUOUS_SAMPLE_TIME и нулевым временем смещения"/
ssSetOffsetTime(S, 0, 0.0);
}
/* Callback -функция: mdlInitializeСonditions */
#define MDL_INITIALIZE_СONDITIONS
#if defined(MDL_INITIALIZE_СONDITIONS)
static void mdlInitializeСonditions(SimStruct *S)
{
real_T *x = ssGetСontStates(S); /"Возвращает указатель х типа real_T на область памяти, где хранится вектор x[t]"/
x[0]=0; /"Установка переменной состояния в 0"/
}
#endif
/* Callback -функция: mdlOutputs */
static void mdlOutputs(SimStruct *S, int_T tid) /"ВЫчисление выходных сигналов"/
{
real_T *x = ssGetСontStates(S);
real_T *y = ssGetOutputPortSignal(S, 0);
y[0]=x[0];
}
/* Callback -функция: mdlDerivatives */ /"Вычисление производных состояния непрерывного блока. Нужна ли она тут?"/
/* Callback -функция: mdlTerminate */
static void mdlTerminate(SimStruct *S)
{
}
/* Выбор формата компиляции */
#ifdef MATLAB_MEX_FILE /"Файл компилируется как C MEX-файл"/
#include "simulink.c "
#else
#include "cg_sfun.h"
#endif
So i need help - how to programming COM port in S-function writing in C. But maybe somebody knows another ways to solve this problem - com-port and simulink?
2 Comments
TAB
on 18 May 2012
A very useful block set for interfacing simulink with COM port in File-Exchange.
http://www.mathworks.com/matlabcentral/fileexchange/5060-rs232-blockset
Kaustubha Govind
on 18 May 2012
Also, I believe the Instrument Control Toolbox has serial port communication blocks already: http://www.mathworks.com/products/instrument/hardware/serial.html
Answers (0)
See Also
Categories
Find more on Block and Blockset Authoring in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!