COM-Port + Simulink
4 次查看(过去 30 天)
显示 更早的评论
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 个评论
TAB
2012-5-18
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
2012-5-18
Also, I believe the Instrument Control Toolbox has serial port communication blocks already: http://www.mathworks.com/products/instrument/hardware/serial.html
回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Block and Blockset Authoring 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!