COM-Port + Simulink

5 ビュー (過去 30 日間)
Zerno
Zerno 2012 年 5 月 17 日
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
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
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 ExchangeBlock and Blockset Authoring についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by