├── .gitignore
├── Bladed_NREL5MW_model
├── NREL_5MW_CPC.prj
├── NREL_5MW_CPC.prx
└── wind012.wnd
├── LICENSE
├── README.md
├── Simulink_32bit
├── BlankCntrlr_SimulinkSetupAndBuild.m
├── BlankCntrlr_model.mdl
├── DISCONtmf_LINUX
│ └── discon.tmf
├── DISCONtmf_PC
│ └── discon.tmf
├── README.txt
├── discon.tlc
├── discon_main.c
└── setup_mssdk71.bat
└── Simulink_64bit
├── DISCON_Empty.slx
├── DISCON_NREL5MW.slx
├── Parameters_NREL5MW.mat
├── discon.tlc
├── discon_main.c
└── discon_vc.tmf
/.gitignore:
--------------------------------------------------------------------------------
1 | slprj
--------------------------------------------------------------------------------
/Bladed_NREL5MW_model/NREL_5MW_CPC.prj:
--------------------------------------------------------------------------------
1 |
2 |
3 | 0.2
4 |
5 |
1172 |
1173 |
1174 | Position
1175 | false
1176 |
1177 |
1178 | cdecl
1179 |
1180 | Continuous
1181 | 0
1182 |
1183 | false
1184 |
1185 | true
1186 | -0.13962632270625383
1187 | 0.13962632270625383
1188 | false
1189 | 0
1190 | 0
1191 |
1192 |
1193 | 188.49543355168146
1194 | 0.02
1195 |
1196 |
1197 | 0.3
1198 |
1199 | false
1200 |
1201 | 0
1202 | 0
1203 |
1204 | false
1205 |
1206 | 0
1207 | 0
1208 |
1209 | 0
1210 | false
1211 |
1212 | false
1213 | 0
1214 | 0
1215 | 0
1216 | 0
1217 | 0
1218 |
1219 |
1220 |
1221 |
1222 | 0
1223 | 0
1224 |
1225 |
1226 | false
1227 | false
1228 | false
1229 | false
1230 |
1231 |
1232 | false
1233 |
1234 | Constant
1235 | 0
1236 |
1237 |
1238 |
1239 |
1240 |
1241 | false
1242 |
1243 | 0
1244 | 0
1245 | {{0} {0}}
1246 |
1247 |
1248 |
1249 |
1250 |
--------------------------------------------------------------------------------
/Bladed_NREL5MW_model/wind012.wnd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TUDelft-DataDrivenControl/DISCON_Simulink/daa4d1f5667ac145cbdcb7333946c860d7f5ea37/Bladed_NREL5MW_model/wind012.wnd
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2018 Delft Center for Systems & Control, Data-Driven Control (TU Delft)
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # External Controller design for GH Bladed and OpenFAST (Bladed interface)
2 |
3 | ## Contents
4 |
5 | ### Folder -- Bladed_NREL5MW_model:
6 | - NREL_5MW_CPC.prj/prx GH Bladed project of a 5MW turbine
7 | - wind012.wnd Sample 12 m/s turbulent wind file (Bladed)
8 |
9 | ### Folder -- Simulink_32bit:
10 | Refer to README.txt file in the folder (Credits and thanks to J. Butterworth, Envision Energy)
11 |
12 | ### Folder -- Simulink_64bit:
13 | - DISCON_Empty.slx Empty controller file, including all available inputs and outputs
14 | - DISCON_NREL5MW.slx Baseline NREL5MW controller for use with Bladed or OpenFAST
15 | - Parameters_NREL5MW.mat Parameters needed for compilation of the controller
16 | - discon.c C file (needed for the generation of DISCON.DLL from a Simulink model)
17 | - discon.tlc TLC file (needed for the generation of DISCON.DLL from a Simulink model)
18 | - discon_vc.tmf TMF file (needed for the generation of DISCON.DLL from a Simulink model)
19 |
20 | ## Requirements (for 64-bit DLL/SO compilation):
21 | 1. GH Bladed
22 | 2. MATLAB / Simulink, tested with 2018b, but might also work with other versions
23 | 3. Microsoft Visual Studio 2005/2008/2010
24 |
25 | ## Compiling DISCON DLL 32-bit:
26 | 1a. For 32-bit DLL compilation, install Windows Windows SDK 7.1, and see further instructions in the "Simulink_32bit\README.txt" file:
27 | https://nl.mathworks.com/matlabcentral/answers/101105-how-do-i-install-microsoft-windows-sdk-7-1
28 |
29 | ## Compiling DISCON DLL 64-bit:
30 | 1. For 64-bit compilation, download the latest 64-bit MATLAB version (tested with 2018b) and install the MinGW compiler:
31 | https://nl.mathworks.com/support/compilers.html
32 | 2. Open MATLAB and load the Parameters_NREL5MW.mat in your current workspace
33 | 3. Change your current folder to the .\Simulink_files folder
34 | 4. Open DISCON_xxx.slx in Simulink
35 | 5. Press CTRL-B to build a DLL
36 |
37 | Note: When compiling a 32-bit DISCON DLL, you can use the DLL with Bladed and a 32-bit version of OpenFAST (fast_win32.exe). When you use a 64-bit version of MATLAB, the compiled DLL will also be 64-bit, which is incompatible with Bladed, but compatible with 64-bit OpenFAST (openfast_x64.exe).
38 |
39 | Comments:
40 | 1. Do not change the names of the inputs and outputs blocks in DISCON_xxx.slx
41 | 2. Do not change the name DISCON_xxx.slx to DISCON.slx (all other names are allowed)
42 |
43 | ## Referencing
44 | When you use DISCON_Simulink in any publication, please cite the following paper:
45 | * Mulders, S.P. and Zaaijer, M.B. and Bos, R. and van Wingerden, J.W. "Wind turbine control: open-source software for control education, standardization and compilation". Journal of Physics: Conference Series. Vol. 1452. No. 1. IOP Publishing, 2020. [Link to the paper](https://iopscience.iop.org/article/10.1088/1742-6596/1452/1/012010)
46 |
47 | ## References
48 | Sebastiaan Mulders
49 | S.P.Mulders@tudelft.nl
50 | Delft Center of Systems and Control
51 | Delft University of Technology
52 |
53 | Credits to:
54 |
55 | Ivo Houtzager
56 | Delft Center of Systems and Control
57 | Delft University of Technology
58 |
59 | Jeffrey Butterworth, Ph.D. (Support in making 32 bit compilation possible with a 64 bit MATLAB)
60 | Envision Energy
61 | 1919 14th Street, Suite 800
62 | Boulder, CO 80302
63 |
--------------------------------------------------------------------------------
/Simulink_32bit/BlankCntrlr_SimulinkSetupAndBuild.m:
--------------------------------------------------------------------------------
1 |
2 | close all, clear, clc;
3 |
4 |
5 |
6 | % This simple script aligns the path to the model ... and then
7 | % generates code from the Simulink model and builds the DLL or SO.
8 |
9 | SmlkMdl = 'BlankCntrlr_model';
10 |
11 |
12 | Ts = 0.01; % Sec
13 |
14 | open(SmlkMdl)
15 |
16 | % Building the DLL (Windows) or SO (Linux)
17 | % ==================================================
18 | if ispc % WINDOWS DLL Build (32-bit DLL from 32 or 64 bit Matlab)
19 | % Copy the discon.tmf file from DISCONtmf_PC and put it in your build
20 | % directory (with discon_main.c, discon.tlc, etc.). This will
21 | % provide the details needed to build a DLL (rather than an SO).
22 | if strcmp(computer('arch'),'win64') % 64-bit Matlab installation.
23 | % Build DLL in two-step process that supports creating 32-bit DLL creation
24 | % from a 64-bit installation of Matlab (R2017a).
25 | % Note: Using 'Microsoft Windows SDK 7.1 (C)' for C language compilation.
26 | % Set compiler with 'mex -setup'
27 | % Two-step process:
28 | % 1) Generate code-only from Simulink model
29 | % 2) Replace resulting R2017a(64bit) setup_mssdk71.bat with R2013b(32bit)
30 | % setup_mssdk71.bat file and finish building the DLL.
31 | sprintf('32-bit DLL build with 64-bit Matlab installation.../n')
32 | codegenfolder = sprintf('%s_discon_rtw',SmlkMdl);
33 | R2013bSDKSetup = fullfile(pwd,'setup_mssdk71.bat'); % Path to the R2013b setup_mssdk71.bat (saved in git).
34 | load_system(SmlkMdl);
35 | set_param(SmlkMdl, 'GenCodeOnly', true);
36 | slbuild(SmlkMdl);
37 | cd(codegenfolder);
38 | delete('setup_mssdk71.bat');
39 | copyfile(R2013bSDKSetup);
40 | system([SmlkMdl '.bat']);
41 | cd('../');
42 | else % 32-bit Matlab installation.
43 | % If using 32-bit installation of Matlab, can simply generate code and
44 | % build DLL directly from the Simulink model (Ctrl-B) in the same way that
45 | % a *.so is built in Linux. Or with the following commands...
46 | sprintf('32-bit DLL build with 32-bit Matlab installation.../n')
47 | load_system(SmlkMdl);
48 | slbuild(SmlkMdl);
49 | codegenfolder = sprintf('%s_discon_rtw',SmlkMdl);
50 | cd(codegenfolder);
51 | system([SmlkMdl '.bat']);
52 | cd('../');
53 | end
54 | else % LINUX SO Build (64-bit DLL from 64-bit Matlab)
55 | % Copy the discon.tmf file from DISCONtmf_LINUX and put it in your build
56 | % directory (with discon_main.c, discon.tlc, etc.). This will provide
57 | % the details needed to build an SO (rather than a DLL).
58 | % Open the model and uncheck "generate code only" in the "code generation
59 | % tab" of "model configuration parameters". I'm still looking for a way
60 | % to automate this in the same way as the WINDOWS version.
61 | % If using 64-bit installation of Matlab, can simply generate code and
62 | % build SO directly from the Simulink model (Ctrl-B),
63 | % or with the following commands...
64 | sprintf('64-bit SO build with 64-bit Matlab installation.../n')
65 | load_system(SmlkMdl);
66 | slbuild(SmlkMdl);
67 | end
68 |
69 |
70 |
71 |
--------------------------------------------------------------------------------
/Simulink_32bit/DISCONtmf_LINUX/discon.tmf:
--------------------------------------------------------------------------------
1 | # Copyright 1994-2016 The MathWorks, Inc.
2 | #
3 | # File : grt_unix.tmf
4 | #
5 | # Abstract:
6 | # Template makefile for building a UNIX-based stand-alone generic
7 | # real-time version of Simulink model using generated C code.
8 | #
9 | # This makefile attempts to conform to the guidelines specified in the
10 | # IEEE Std 1003.2-1992 (POSIX) standard. It is designed to be used
11 | # with GNU Make which is located in matlabroot/rtw/bin.
12 | #
13 | # Note that this template is automatically customized by the build
14 | # procedure to create ".mk"
15 | #
16 | # The following defines can be used to modify the behavior of the
17 | # build:
18 | # OPT_OPTS - Optimization options. Default is -O.
19 | # CPP_OPTS - C++ compiler options.
20 | # OPTS - User specific compile options.
21 | # USER_SRCS - Additional user sources, such as files needed by
22 | # S-functions.
23 | # USER_INCLUDES - Additional include paths
24 | # (i.e. USER_INCLUDES="-Iwhere-ever -Iwhere-ever2")
25 | #
26 | # To enable debugging:
27 | # set DEBUG_BUILD = 1 below, which will trigger OPTS=-g and
28 | # LDFLAGS += -g (may vary with compiler version, see compiler doc)
29 | #
30 | # This template makefile is designed to be used with a system target
31 | # file that contains 'rtwgensettings.BuildDirSuffix' see grt.tlc
32 |
33 | #------------------------ Macros read by make_rtw ------------------------------
34 | #
35 | # The following macros are read by the build procedure:
36 | #
37 | # MAKECMD - This is the command used to invoke the make utility
38 | # HOST - What platform this template makefile is targeted for
39 | # (i.e. PC or UNIX)
40 | # BUILD - Invoke make from the build procedure (yes/no)?
41 | # SYS_TARGET_FILE - Name of system target file.
42 |
43 | MAKECMD = |>MATLAB_BIN<|/|>ARCH<|/gmake
44 | HOST = UNIX
45 | BUILD = yes
46 | SYS_TARGET_FILE = discon.tlc
47 | COMPILER_TOOL_CHAIN = unix
48 |
49 |
50 | #---------------------- Tokens expanded by make_rtw ----------------------------
51 | #
52 | # The following tokens, when wrapped with "|>" and "<|" are expanded by the
53 | # build procedure.
54 | #
55 | # MODEL_NAME - Name of the Simulink block diagram
56 | # MODEL_MODULES - Any additional generated source modules
57 | # MAKEFILE_NAME - Name of makefile created from template makefile .mk
58 | # MATLAB_ROOT - Path to where MATLAB is installed.
59 | # S_FUNCTIONS - List of S-functions.
60 | # S_FUNCTIONS_LIB - List of S-functions libraries to link.
61 | # NUMST - Number of sample times
62 | # TID01EQ - yes (1) or no (0): Are sampling rates of continuous task
63 | # (tid=0) and 1st discrete task equal.
64 | # NCSTATES - Number of continuous states
65 | # COMPUTER - Computer type. See the MATLAB computer command.
66 | # BUILDARGS - Options passed in at the command line.
67 | # MULTITASKING - yes (1) or no (0): Is solver mode multitasking
68 | # MAT_FILE - yes (1) or no (0): Should mat file logging be done
69 | # EXT_MODE - yes (1) or no (0): Build for external mode
70 | # TMW_EXTMODE_TESTING - yes (1) or no (0): Build ext_test.c for external mode
71 | # testing.
72 | # EXTMODE_TRANSPORT - Index of transport mechanism (e.g. tcpip, serial) for extmode
73 | # EXTMODE_STATIC - yes (1) or no (0): Use static instead of dynamic mem alloc.
74 | # EXTMODE_STATIC_SIZE - Size of static memory allocation buffer.
75 | # GEN_MDLREF_SFCN - (1/0): are we generating model reference wrapper s-function
76 | # TGT_FCN_LIB - Target Funtion library to use
77 | # MODELREFS - List of referenced models
78 |
79 | MODEL = |>MODEL_NAME<|
80 | MODULES = |>MODEL_MODULES<|
81 | MAKEFILE = |>MAKEFILE_NAME<|
82 | MATLAB_ROOT = |>MATLAB_ROOT<|
83 | ALT_MATLAB_ROOT = |>ALT_MATLAB_ROOT<|
84 | MATLAB_BIN = |>MATLAB_BIN<|
85 | MASTER_ANCHOR_DIR = |>MASTER_ANCHOR_DIR<|
86 | START_DIR = |>START_DIR<|
87 | S_FUNCTIONS = |>S_FUNCTIONS<|
88 | S_FUNCTIONS_LIB = |>S_FUNCTIONS_LIB<|
89 | NUMST = |>NUMST<|
90 | TID01EQ = |>TID01EQ<|
91 | NCSTATES = |>NCSTATES<|
92 | COMPUTER = |>COMPUTER<|
93 | BUILDARGS = |>BUILDARGS<|
94 | MULTITASKING = |>MULTITASKING<|
95 | MAT_FILE = |>MAT_FILE<|
96 | EXT_MODE = |>EXT_MODE<|
97 | TMW_EXTMODE_TESTING = |>TMW_EXTMODE_TESTING<|
98 | EXTMODE_TRANSPORT = |>EXTMODE_TRANSPORT<|
99 | EXTMODE_STATIC = |>EXTMODE_STATIC_ALLOC<|
100 | EXTMODE_STATIC_SIZE = |>EXTMODE_STATIC_ALLOC_SIZE<|
101 | MEXEXT = |>MEXEXT<|
102 | TGT_FCN_LIB = |>TGT_FCN_LIB<|
103 | MODELREFS = |>MODELREFS<|
104 | SHARED_SRC = |>SHARED_SRC<|
105 | SHARED_SRC_DIR = |>SHARED_SRC_DIR<|
106 | SHARED_BIN_DIR = |>SHARED_BIN_DIR<|
107 | SHARED_LIB = |>SHARED_LIB<|
108 | TARGET_LANG_EXT = |>TARGET_LANG_EXT<|
109 | OPTIMIZATION_FLAGS = |>OPTIMIZATION_FLAGS<|
110 | ADDITIONAL_LDFLAGS = |>ADDITIONAL_LDFLAGS<|
111 | DEFINES_CUSTOM = |>DEFINES_CUSTOM<|
112 | SYSTEM_LIBS = |>SYSTEM_LIBS<|
113 | CODE_INTERFACE_PACKAGING = |>CODE_INTERFACE_PACKAGING<|
114 |
115 | CLASSIC_INTERFACE = |>CLASSIC_INTERFACE<|
116 | # Optional for GRT
117 | ALLOCATIONFCN = |>GENERATE_ALLOC_FCN<|
118 | ONESTEPFCN = |>COMBINE_OUTPUT_UPDATE_FCNS<|
119 | TERMFCN = 1
120 | MULTI_INSTANCE_CODE = |>MULTI_INSTANCE_CODE<|
121 |
122 | # To enable debugging:
123 | # set DEBUG_BUILD = 1
124 | DEBUG_BUILD = 0
125 |
126 | #--------------------------- Model and reference models -----------------------
127 | MODELLIB = |>MODELLIB<|
128 | MODELREF_LINK_LIBS = |>MODELREF_LINK_LIBS<|
129 | MODELREF_INC_PATH = |>START_MDLREFINC_EXPAND_INCLUDES<|-I|>MODELREF_INC_PATH<| |>END_MDLREFINC_EXPAND_INCLUDES<|
130 | RELATIVE_PATH_TO_ANCHOR = |>RELATIVE_PATH_TO_ANCHOR<|
131 | # NONE: standalone, SIM: modelref sim, RTW: modelref coder target
132 | MODELREF_TARGET_TYPE = |>MODELREF_TARGET_TYPE<|
133 |
134 | #-- In the case when directory name contains space ---
135 | ifneq ($(MATLAB_ROOT),$(ALT_MATLAB_ROOT))
136 | MATLAB_ROOT := $(ALT_MATLAB_ROOT)
137 | endif
138 |
139 | #--------------------------- Tool Specifications -------------------------------
140 |
141 | include $(MATLAB_ROOT)/rtw/c/tools/unixtools.mk
142 |
143 | #------------------------------ Include Path -----------------------------------
144 |
145 | MATLAB_INCLUDES = \
146 | -I$(MATLAB_ROOT)/simulink/include \
147 | -I$(MATLAB_ROOT)/extern/include \
148 | -I$(MATLAB_ROOT)/rtw/c/src \
149 | -I$(MATLAB_ROOT)/rtw/c/src/ext_mode/common
150 |
151 | # Additional file include paths
152 | ADD_INCLUDES = \
153 | |>START_EXPAND_INCLUDES<| -I|>EXPAND_DIR_NAME<| \
154 | |>END_EXPAND_INCLUDES<|
155 |
156 | SHARED_INCLUDES =
157 | ifneq ($(SHARED_SRC_DIR),)
158 | SHARED_INCLUDES = -I$(SHARED_SRC_DIR)
159 | endif
160 |
161 | INCLUDES = -I. -I$(RELATIVE_PATH_TO_ANCHOR) $(MATLAB_INCLUDES) $(ADD_INCLUDES) $(USER_INCLUDES) \
162 | $(INSTRUMENT_INCLUDES) $(MODELREF_INC_PATH) $(SHARED_INCLUDES)
163 |
164 | #----------------------------- External mode -----------------------------------
165 | # Uncomment -DVERBOSE to have information printed to stdout
166 | # To add a new transport layer, see the comments in
167 | # /toolbox/simulink/simulink/extmode_transports.m
168 | ifeq ($(EXT_MODE),1)
169 | EXT_CC_OPTS = -DEXT_MODE -D$(COMPUTER) #-DVERBOSE
170 | EXT_LIB =
171 | EXT_SRC = ext_svr.c updown.c ext_work.c
172 | LINT_EXT_COMMON_SRC =
173 | LINT_EXT_TCPIP_SRC =
174 | ifeq ($(EXTMODE_TRANSPORT),0) #tcpip
175 | EXT_SRC += rtiostream_interface.c rtiostream_tcpip.c
176 | LINT_EXT_COMMON_SRC = ext_svr.c updown.c ext_work.c \
177 | rtiostream_interface.c
178 | LINT_EXT_TCPIP_SRC = rtiostream_tcpip.c
179 | endif
180 | ifeq ($(EXTMODE_TRANSPORT),1) #serial
181 | EXT_SRC += ext_svr_serial_transport.c ext_serial_pkt.c
182 | EXT_SRC += rtiostream_serial_interface.c rtiostream_serial.c
183 | endif
184 | ifeq ($(TMW_EXTMODE_TESTING),1)
185 | EXT_SRC += ext_test.c
186 | EXT_CC_OPTS += -DTMW_EXTMODE_TESTING
187 | endif
188 | ifeq ($(EXTMODE_STATIC),1)
189 | EXT_SRC += mem_mgr.c
190 | LINT_EXT_COMMON_SRC += mem_mgr.c
191 | EXT_CC_OPTS += -DEXTMODE_STATIC -DEXTMODE_STATIC_SIZE=$(EXTMODE_STATIC_SIZE)
192 | endif
193 | ifeq ($(COMPUTER),SOL64)
194 | EXT_LIB = -lsocket -lnsl
195 | endif
196 | endif
197 |
198 | #----------------------------- Real-Time Model ---------------------------------
199 | RTM_CC_OPTS = -DUSE_RTMODEL
200 |
201 | #-------------------------------- C Flags --------------------------------------
202 |
203 | # Optimization Options
204 | ifndef OPT_OPTS
205 | OPT_OPTS = $(DEFAULT_OPT_OPTS)
206 | endif
207 |
208 | # General User Options
209 | ifeq ($(DEBUG_BUILD),0)
210 | DBG_FLAG =
211 | else
212 | # Set OPTS=-g and any additional flags for debugging
213 | DBG_FLAG = -g
214 | LDFLAGS += -g
215 | endif
216 |
217 | LDFLAGS += -Wl,-rpath,"$(MATLAB_ROOT)/bin/$(ARCH)" -L"$(MATLAB_ROOT)/bin/$(ARCH)"
218 | # https://gcc.gnu.org/bugs/segfault.html
219 | # -g -rdynamic -O0 -v -Q -da
220 |
221 | # Compiler options, etc:
222 | ifneq ($(OPTIMIZATION_FLAGS),)
223 | CC_OPTS = $(OPTS) $(EXT_CC_OPTS) $(RTM_CC_OPTS) $(OPTIMIZATION_FLAGS)
224 | else
225 | CC_OPTS = $(OPT_OPTS) $(OPTS) $(EXT_CC_OPTS) $(RTM_CC_OPTS)
226 | endif
227 |
228 |
229 | CPP_REQ_DEFINES = -DMODEL=$(MODEL) -DRT -DNUMST=$(NUMST) \
230 | -DTID01EQ=$(TID01EQ) -DNCSTATES=$(NCSTATES) -DUNIX \
231 | -DMT=$(MULTITASKING) -DHAVESTDIO -DMAT_FILE=$(MAT_FILE) \
232 | -DONESTEPFCN=$(ONESTEPFCN) -DTERMFCN=$(TERMFCN) \
233 | -DMULTI_INSTANCE_CODE=$(MULTI_INSTANCE_CODE) \
234 | -DCLASSIC_INTERFACE=$(CLASSIC_INTERFACE) \
235 | -DALLOCATIONFCN=$(ALLOCATIONFCN)
236 |
237 |
238 | CFLAGS = $(ANSI_OPTS) $(DBG_FLAG) $(CC_OPTS) $(DEFINES_CUSTOM) $(CPP_REQ_DEFINES) $(INCLUDES) -std=c99
239 | # -Wall -Q -g
240 | # https://gcc.gnu.org/bugs/segfault.html
241 | CPPFLAGS = $(CPP_ANSI_OPTS) $(DBG_FLAG) $(CPP_OPTS) $(CC_OPTS) $(DEFINES_CUSTOM) $(CPP_REQ_DEFINES) $(INCLUDES)
242 | #-------------------------- Additional Libraries ------------------------------
243 |
244 | SYSTEM_LIBS += $(EXT_LIB) -lm
245 |
246 | LIBS =
247 | |>START_PRECOMP_LIBRARIES<|
248 | ifeq ($(OPT_OPTS),$(DEFAULT_OPT_OPTS))
249 | LIBS += |>EXPAND_LIBRARY_LOCATION<|/|>EXPAND_LIBRARY_NAME<|_std.a
250 | else
251 | LIBS += |>EXPAND_LIBRARY_NAME<|.a
252 | endif
253 | |>END_PRECOMP_LIBRARIES<| |>START_EXPAND_LIBRARIES<|
254 | LIBS += |>EXPAND_LIBRARY_NAME<|.a |>END_EXPAND_LIBRARIES<|
255 | LIBS += $(S_FUNCTIONS_LIB) $(INSTRUMENT_LIBS)
256 |
257 | #----------------------------- Source Files ------------------------------------
258 |
259 | USER_SRCS =
260 |
261 | USER_OBJS = $(addsuffix .o, $(basename $(USER_SRCS)))
262 | LOCAL_USER_OBJS = $(notdir $(USER_OBJS))
263 |
264 |
265 |
266 | SRCS = $(MODULES) $(S_FUNCTIONS)
267 |
268 | ifeq ($(MODELREF_TARGET_TYPE), NONE)
269 | # PRODUCT = $(RELATIVE_PATH_TO_ANCHOR)/$(MODEL)
270 | # PRODUCT = $(RELATIVE_PATH_TO_ANCHOR)/$(MODEL).so
271 | PRODUCT = $(RELATIVE_PATH_TO_ANCHOR)/DISCON.so
272 | BIN_SETTING = $(LD) -shared $(LDFLAGS) -o $(PRODUCT)
273 | BUILD_PRODUCT_TYPE = "executable"
274 | ifeq ($(CLASSIC_INTERFACE), 1)
275 | MAIN_SRC = discon_main.c
276 | OTHER_SRC = rt_sim.c
277 | else
278 | ifeq ($(MULTI_INSTANCE_CODE), 1)
279 | ifeq "$(CODE_INTERFACE_PACKAGING)" "C++ class"
280 | MAIN_SRC = rt_cppclass_main.cpp
281 | else
282 | MAIN_SRC = rt_malloc_main.c
283 | endif
284 | else
285 | MAIN_SRC = rt_main.c
286 | endif
287 | OTHER_SRC =
288 | endif
289 | SRCS += $(MODEL).$(TARGET_LANG_EXT) $(MAIN_SRC) $(OTHER_SRC) $(EXT_SRC)
290 | else
291 | # Model reference coder target
292 | PRODUCT = $(MODELLIB)
293 | BUILD_PRODUCT_TYPE = "library"
294 | endif
295 |
296 | OBJS = $(addsuffix .o, $(basename $(SRCS))) $(USER_OBJS)
297 | LINK_OBJS = $(addsuffix .o, $(basename $(SRCS))) $(LOCAL_USER_OBJS)
298 |
299 | SHARED_SRC := $(wildcard $(SHARED_SRC))
300 | SHARED_OBJS_NO_PATH = $(addsuffix .o, $(basename $(notdir $(SHARED_SRC))))
301 | SHARED_OBJS = $(addprefix $(join $(SHARED_BIN_DIR), /), $(SHARED_OBJS_NO_PATH))
302 |
303 | ADDITIONAL_LDFLAGS += $(ARCH_SPECIFIC_LDFLAGS)
304 |
305 | #------------- Test Compile using gcc -Wall to look for warnings ---------------
306 | #
307 | # DO_GCC_TEST=1 runs gcc with compiler warning flags on all the source files
308 | # used in this build. This includes the generated code, and any user source
309 | # files needed for the build and placed in this directory.
310 | #
311 | # WARN_ON_GLNX=1 runs the linux compiler with warnings flags. On hand-written
312 | # code we use the max amount of flags availabe while on the generated code, a
313 | # few less.
314 | #
315 | # See rtw/c/tools/unixtools.mk for the definition of GCC_WARN_OPTS
316 | GCC_TEST_CMD := echo
317 | GCC_TEST_OUT := > /dev/null
318 | ifeq ($(DO_GCC_TEST), 1)
319 | GCC_TEST := gcc -c -o /dev/null $(GCC_WARN_OPTS_MAX) $(CPP_REQ_DEFINES) \
320 | $(INCLUDES)
321 | GCC_TEST_CMD := echo; echo "\#\#\# GCC_TEST $(GCC_TEST) $<"; $(GCC_TEST)
322 | GCC_TEST_OUT := ; echo
323 | endif
324 |
325 | #----------------------------- Lint (sol2 only) --------------------------------
326 |
327 | ifeq ($(CLASSIC_INTERFACE), 1)
328 | LINT_SRCS = discon_main.c \
329 | $(MATLAB_ROOT)/rtw/c/src/rt_sim.c
330 | else
331 | ifeq "$(CODE_INTERFACE_PACKAGING)" "C++ class"
332 | LINT_SRCS = $(MATLAB_ROOT)/rtw/c/src/common/rt_cppclass_main.cpp
333 | else
334 | LINT_SRCS = $(MATLAB_ROOT)/rtw/c/src/common/rt_main.c
335 | endif
336 | endif
337 | ifneq ($(LINT_EXT_COMMON_SRC), )
338 | LINT_SRCS += $(MATLAB_ROOT)/rtw/c/src/ext_mode/common/$(LINT_EXT_COMMON_SRC)
339 | endif
340 | ifneq ($(LINT_EXT_TCPIP_SRC), )
341 | LINT_SRCS += $(MATLAB_ROOT)/rtw/c/src/rtiostream/rtiostreamtcpip/$(LINT_EXT_TCPIP_SRC)
342 | endif
343 | LINT_SRCS += $(MODEL).$(TARGET_LANG_EXT) $(MODULES) $(USER_SRCS) $(S_FUNCTIONS)
344 | LINTOPTSFILE = $(MODEL).lintopts
345 |
346 | LINT_ERROFF1 = E_NAME_DEF_NOT_USED2,E_NAME_DECL_NOT_USED_DEF2
347 | LINT_ERROFF2 = $(LINT_ERROFF1),E_FUNC_ARG_UNUSED
348 | LINT_ERROFF = $(LINT_ERROFF2),E_INDISTING_FROM_TRUNC2,E_NAME_USED_NOT_DEF2
349 |
350 | #--------------------------------- Rules ---------------------------------------
351 | ifeq ($(MODELREF_TARGET_TYPE),NONE)
352 | $(PRODUCT) : $(OBJS) $(SHARED_LIB) $(LIBS) $(MODELREF_LINK_LIBS)
353 | $(BIN_SETTING) $(LINK_OBJS) $(MODELREF_LINK_LIBS) $(SHARED_LIB) $(LIBS) $(ADDITIONAL_LDFLAGS) $(SYSTEM_LIBS)
354 | @echo "### Created $(BUILD_PRODUCT_TYPE): $@"
355 | else
356 | $(PRODUCT) : $(OBJS) $(SHARED_LIB)
357 | @rm -f $(MODELLIB)
358 | $(AR) ruvs $(MODELLIB) $(LINK_OBJS)
359 | @echo "### Created $(MODELLIB)"
360 | @echo "### Created $(BUILD_PRODUCT_TYPE): $@"
361 | endif
362 |
363 | ifneq ($(SHARED_SRC_DIR),)
364 | $(SHARED_BIN_DIR)/%.o : $(SHARED_SRC_DIR)/%.c
365 | $(CC) -c -o $@ $(CFLAGS) $(GCC_WALL_FLAG_MAX) "$<"
366 |
367 | $(SHARED_BIN_DIR)/%.o : $(SHARED_SRC_DIR)/%.cpp
368 | $(CPP) -c -o $@ $(CPPFLAGS) $(GCC_WALL_FLAG_MAX) "$<"
369 | endif
370 |
371 | %.o : %.c
372 | @$(GCC_TEST_CMD) "$<" $(GCC_TEST_OUT)
373 | $(CC) -c $(CFLAGS) $(GCC_WALL_FLAG) "$<"
374 |
375 | %.o : %.cpp
376 | @$(GCC_TEST_CMD) "$<" $(GCC_TEST_OUT)
377 | $(CPP) -c $(CPPFLAGS) $(GCC_WALL_FLAG) "$<"
378 |
379 | %.o : $(RELATIVE_PATH_TO_ANCHOR)/%.c
380 | @$(GCC_TEST_CMD) "$<" $(GCC_TEST_OUT)
381 | $(CC) -c $(CFLAGS) $(GCC_WALL_FLAG) "$<"
382 |
383 | %.o : $(RELATIVE_PATH_TO_ANCHOR)/%.cpp
384 | @$(GCC_TEST_CMD) "$<" $(GCC_TEST_OUT)
385 | $(CPP) -c $(CPPFLAGS) "$<"
386 |
387 | ifeq ($(CLASSIC_INTERFACE), 1)
388 | ifeq ($(TARGET_LANG_EXT),cpp)
389 | %.o : $(MATLAB_ROOT)/rtw/c/grt/%.c
390 | @$(GCC_TEST_CMD) "$<" $(GCC_TEST_OUT)
391 | $(CPP) -c $(CPPFLAGS) $(GCC_WALL_FLAG_MAX) "$<"
392 | else
393 | %.o : $(MATLAB_ROOT)/rtw/c/grt/%.c
394 | @$(GCC_TEST_CMD) "$<" $(GCC_TEST_OUT)
395 | $(CC) -c $(CFLAGS) $(GCC_WALL_FLAG_MAX) "$<"
396 | endif
397 | else
398 | ifeq ($(TARGET_LANG_EXT),cpp)
399 | %.o : $(MATLAB_ROOT)/rtw/c/src/common/%.cpp
400 | @$(GCC_TEST_CMD) "$<" $(GCC_TEST_OUT)
401 | $(CPP) -c $(CPPFLAGS) $(GCC_WALL_FLAG_MAX) "$<"
402 |
403 | %.o : $(MATLAB_ROOT)/rtw/c/src/common/%.c
404 | @$(GCC_TEST_CMD) "$<" $(GCC_TEST_OUT)
405 | $(CPP) -c $(CPPFLAGS) $(GCC_WALL_FLAG_MAX) "$<"
406 | else
407 | %.o : $(MATLAB_ROOT)/rtw/c/src/common/%.c
408 | @$(GCC_TEST_CMD) "$<" $(GCC_TEST_OUT)
409 | $(CC) -c $(CFLAGS) $(GCC_WALL_FLAG_MAX) "$<"
410 | endif
411 | endif
412 |
413 | %.o : $(MATLAB_ROOT)/rtw/c/src/%.c
414 | @$(GCC_TEST_CMD) "$<" $(GCC_TEST_OUT)
415 | $(CC) -c $(CFLAGS) $(GCC_WALL_FLAG_MAX) "$<"
416 |
417 | %.o : $(MATLAB_ROOT)/rtw/c/src/ext_mode/common/%.c
418 | @$(GCC_TEST_CMD) "$<" $(GCC_TEST_OUT)
419 | $(CC) -c $(CFLAGS) $(GCC_WALL_FLAG_MAX) "$<"
420 |
421 | %.o : $(MATLAB_ROOT)/rtw/c/src/rtiostream/rtiostreamtcpip/%.c
422 | @$(GCC_TEST_CMD) "$<" $(GCC_TEST_OUT)
423 | $(CC) -c $(CFLAGS) $(GCC_WALL_FLAG_MAX) "$<"
424 |
425 | %.o : $(MATLAB_ROOT)/rtw/c/src/ext_mode/custom/%.c
426 | @$(GCC_TEST_CMD) "$<" $(GCC_TEST_OUT)
427 | $(CC) -c $(CFLAGS) $(GCC_WALL_FLAG_MAX) "$<"
428 |
429 | |>START_EXPAND_RULES<|%.o : |>EXPAND_DIR_NAME<|/%.c
430 | @$(GCC_TEST_CMD) "$<" $(GCC_TEST_OUT)
431 | $(CC) -c $(CFLAGS) $(GCC_WALL_FLAG_MAX) "$<"
432 |
433 | |>END_EXPAND_RULES<|
434 |
435 | |>START_EXPAND_RULES<|%.o : |>EXPAND_DIR_NAME<|/%.cpp
436 | @$(GCC_TEST_CMD) "$<" $(GCC_TEST_OUT)
437 | $(CPP) -c $(CPPFLAGS) "$<"
438 | |>END_EXPAND_RULES<|
439 |
440 | %.o : $(MATLAB_ROOT)/simulink/src/%.c
441 | @$(GCC_TEST_CMD) "$<" $(GCC_TEST_OUT)
442 | $(CC) -c $(CFLAGS) $(GCC_WALL_FLAG_MAX) "$<"
443 |
444 | %.o : $(MATLAB_ROOT)/simulink/src/%.cpp
445 | @$(GCC_TEST_CMD) "$<" $(GCC_TEST_OUT)
446 | $(CPP) -c $(CPPFLAGS) "$<"
447 |
448 | #------------------------------- Libraries -------------------------------------
449 |
450 | |>START_EXPAND_LIBRARIES<|MODULES_|>EXPAND_LIBRARY_NAME<| = \
451 | |>START_EXPAND_MODULES<| |>EXPAND_MODULE_NAME<|.o \
452 | |>END_EXPAND_MODULES<|
453 |
454 | |>EXPAND_LIBRARY_NAME<|.a : $(MAKEFILE) rtw_proj.tmw $(MODULES_|>EXPAND_LIBRARY_NAME<|)
455 | @echo "### Creating $@ "
456 | $(AR) rs $@ $(MODULES_|>EXPAND_LIBRARY_NAME<|)
457 | @echo "### $@ Created "
458 |
459 | |>END_EXPAND_LIBRARIES<|
460 |
461 | |>START_PRECOMP_LIBRARIES<|MODULES_|>EXPAND_LIBRARY_NAME<| = \
462 | |>START_EXPAND_MODULES<| |>EXPAND_MODULE_NAME<|.o \
463 | |>END_EXPAND_MODULES<|
464 |
465 | |>EXPAND_LIBRARY_NAME<|.a : $(MAKEFILE) rtw_proj.tmw $(MODULES_|>EXPAND_LIBRARY_NAME<|)
466 | @echo "### Creating $@ "
467 | $(AR) rs $@ $(MODULES_|>EXPAND_LIBRARY_NAME<|)
468 | @echo "### $@ Created "
469 |
470 | |>END_PRECOMP_LIBRARIES<|
471 |
472 | #----------------------------- Dependencies ------------------------------------
473 |
474 | $(OBJS) : $(MAKEFILE) rtw_proj.tmw
475 |
476 | $(SHARED_LIB) : $(SHARED_OBJS)
477 | @echo "### Creating $@ "
478 | $(AR) ruvs $@ $(SHARED_OBJS)
479 | @echo "### $@ Created "
480 |
481 |
482 | #--------- Miscellaneous rules to purge, clean and lint (sol2 only) ------------
483 |
484 | purge : clean
485 | @echo "### Deleting the generated source code for $(MODEL)"
486 | @\rm -f $(MODEL).c $(MODEL).h $(MODEL)_types.h $(MODEL)_data.c \
487 | $(MODEL)_private.h $(MODEL).rtw $(MODULES) rtw_proj.tmw $(MAKEFILE)
488 |
489 | clean :
490 | @echo "### Deleting the objects and $(PRODUCT)"
491 | @\rm -f $(LINK_OBJS) $(PRODUCT)
492 |
493 | lint : rtwlib.ln
494 | @lint -errchk -errhdr=%user -errtags=yes -F -L. -lrtwlib -x -Xc \
495 | -erroff=$(LINT_ERROFF) \
496 | -D_POSIX_C_SOURCE $(CFLAGS) $(LINT_SRCS)
497 | @\rm -f $(LINTOPTSFILE)
498 | @echo
499 | @echo "### Created lint output only, no executable"
500 | @echo
501 |
502 | rtwlib.ln : $(MAKEFILE) rtw_proj.tmw
503 | @echo
504 | @echo "### Linting ..."
505 | @echo
506 | @\rm -f llib-lrtwlib.ln $(LINTOPTSFILE)
507 | @echo "-dirout=. -errchk -errhdr=%user " >> $(LINTOPTSFILE)
508 | @echo "-errtags -F -ortwlib -x -Xc " >> $(LINTOPTSFILE)
509 | @echo "-erroff=$(LINT_ERROFF) " >> $(LINTOPTSFILE)
510 | @echo "-D_POSIX_C_SOURCE $(CFLAGS) " >> $(LINTOPTSFILE)
511 | @for file in $(MATLAB_ROOT)/rtw/c/libsrc/*.c; do \
512 | echo "$$file " >> $(LINTOPTSFILE); \
513 | done
514 | lint -flagsrc=$(LINTOPTSFILE)
515 |
516 | # EOF: grt_unix.tmf
517 |
--------------------------------------------------------------------------------
/Simulink_32bit/DISCONtmf_PC/discon.tmf:
--------------------------------------------------------------------------------
1 | # Copyright 1994-2009 The MathWorks, Inc.
2 | #
3 | # File : discon_vc.tmf $Revision: 1.71.4.31 $
4 | #
5 | # Abstract:
6 | # Real-Time Workshop template makefile for building a Windows-based
7 | # stand-alone generic real-time version of Simulink model using
8 | # generated C code and the
9 | # Microsoft Visual C/C++ compiler versions: 6.0, 7.1, 8.0
10 | #
11 | # Note that this template is automatically customized by the Real-Time
12 | # Workshop build procedure to create ".mk"
13 | #
14 | # The following defines can be used to modify the behavior of the
15 | # build:
16 | #
17 | # OPT_OPTS - Optimization option. See DEFAULT_OPT_OPTS in
18 | # vctools.mak for default.
19 | # OPTS - User specific options.
20 | # CPP_OPTS - C++ compiler options.
21 | # USER_SRCS - Additional user sources, such as files needed by
22 | # S-functions.
23 | # USER_INCLUDES - Additional include paths
24 | # (i.e. USER_INCLUDES="-Iwhere-ever -Iwhere-ever2")
25 | #
26 | # To enable debugging:
27 | # set DEBUG_BUILD = 1, which will trigger OPTS=-Zi (may vary with
28 | # compiler version, see compiler doc)
29 | #
30 | # This template makefile is designed to be used with a system target
31 | # file that contains 'rtwgensettings.BuildDirSuffix' see grt.tlc
32 |
33 |
34 | #------------------------ Macros read by make_rtw -----------------------------
35 | #
36 | # The following macros are read by the Real-Time Workshop build procedure:
37 | #
38 | # MAKECMD - This is the command used to invoke the make utility
39 | # HOST - What platform this template makefile is targeted for
40 | # (i.e. PC or UNIX)
41 | # BUILD - Invoke make from the Real-Time Workshop build procedure
42 | # (yes/no)?
43 | # SYS_TARGET_FILE - Name of system target file.
44 |
45 | MAKECMD = nmake
46 | HOST = PC
47 | BUILD = yes
48 | SYS_TARGET_FILE = discon.tlc
49 | BUILD_SUCCESS = ^#^#^# Created
50 | COMPILER_TOOL_CHAIN = vc
51 |
52 | #---------------------- Tokens expanded by make_rtw ---------------------------
53 | #
54 | # The following tokens, when wrapped with "|>" and "<|" are expanded by the
55 | # Real-Time Workshop build procedure.
56 | #
57 | # MODEL_NAME - Name of the Simulink block diagram
58 | # MODEL_MODULES - Any additional generated source modules
59 | # MAKEFILE_NAME - Name of makefile created from template makefile .mk
60 | # MATLAB_ROOT - Path to were MATLAB is installed.
61 | # MATLAB_BIN - Path to MATLAB executable.
62 | # S_FUNCTIONS - List of S-functions.
63 | # S_FUNCTIONS_LIB - List of S-functions libraries to link.
64 | # SOLVER - Solver source file name
65 | # NUMST - Number of sample times
66 | # TID01EQ - yes (1) or no (0): Are sampling rates of continuous task
67 | # (tid=0) and 1st discrete task equal.
68 | # NCSTATES - Number of continuous states
69 | # BUILDARGS - Options passed in at the command line.
70 | # MULTITASKING - yes (1) or no (0): Is solver mode multitasking
71 | # EXT_MODE - yes (1) or no (0): Build for external mode
72 | # TMW_EXTMODE_TESTING - yes (1) or no (0): Build ext_test.c for external mode
73 | # testing.
74 | # EXTMODE_TRANSPORT - Index of transport mechanism (e.g. tcpip, serial) for extmode
75 | # EXTMODE_STATIC - yes (1) or no (0): Use static instead of dynamic mem alloc.
76 | # EXTMODE_STATIC_SIZE - Size of static memory allocation buffer.
77 | # MEX_OPT_FILE - mex option file name
78 | # VISUAL_VER - Visual C++ version information
79 |
80 | MODEL = |>MODEL_NAME<|
81 | MODULES = |>MODEL_MODULES<|
82 | MAKEFILE = |>MAKEFILE_NAME<|
83 | MATLAB_ROOT = |>MATLAB_ROOT<|
84 | ALT_MATLAB_ROOT = |>ALT_MATLAB_ROOT<|
85 | MATLAB_BIN = |>MATLAB_BIN<|
86 | ALT_MATLAB_BIN = |>ALT_MATLAB_BIN<|
87 | MASTER_ANCHOR_DIR = |>MASTER_ANCHOR_DIR<|
88 | START_DIR = |>START_DIR<|
89 | S_FUNCTIONS = |>S_FUNCTIONS<|
90 | S_FUNCTIONS_LIB = |>S_FUNCTIONS_LIB<|
91 | SOLVER = |>SOLVER<|
92 | NUMST = |>NUMST<|
93 | TID01EQ = |>TID01EQ<|
94 | NCSTATES = |>NCSTATES<|
95 | BUILDARGS = |>BUILDARGS<|
96 | MULTITASKING = |>MULTITASKING<|
97 | EXT_MODE = |>EXT_MODE<|
98 | TMW_EXTMODE_TESTING = |>TMW_EXTMODE_TESTING<|
99 | EXTMODE_TRANSPORT = |>EXTMODE_TRANSPORT<|
100 | EXTMODE_STATIC = |>EXTMODE_STATIC_ALLOC<|
101 | EXTMODE_STATIC_SIZE = |>EXTMODE_STATIC_ALLOC_SIZE<|
102 |
103 | MODELREFS = |>MODELREFS<|
104 | SHARED_SRC = |>SHARED_SRC<|
105 | SHARED_SRC_DIR = |>SHARED_SRC_DIR<|
106 | SHARED_BIN_DIR = |>SHARED_BIN_DIR<|
107 | SHARED_LIB = |>SHARED_LIB<|
108 | TARGET_LANG_EXT = |>TARGET_LANG_EXT<|
109 | MEX_OPT_FILE = |>MEX_OPT_FILE<|
110 | VISUAL_VER = |>VISUAL_VER<|
111 | OPTIMIZATION_FLAGS = |>OPTIMIZATION_FLAGS<|
112 | ADDITIONAL_LDFLAGS = |>ADDITIONAL_LDFLAGS<|
113 |
114 | # To enable debugging:
115 | # set DEBUG_BUILD = 1
116 | DEBUG_BUILD = 0
117 |
118 | #--------------------------- Model and reference models -----------------------
119 | MODELLIB = |>MODELLIB<|
120 | MODELREF_LINK_LIBS = |>MODELREF_LINK_LIBS<|
121 | MODELREF_LINK_RSPFILE = |>MODELREF_LINK_RSPFILE_NAME<|
122 | MODELREF_INC_PATH = |>START_MDLREFINC_EXPAND_INCLUDES<|-I|>MODELREF_INC_PATH<| |>END_MDLREFINC_EXPAND_INCLUDES<|
123 | RELATIVE_PATH_TO_ANCHOR = |>RELATIVE_PATH_TO_ANCHOR<|
124 | MODELREF_TARGET_TYPE = |>MODELREF_TARGET_TYPE<|
125 |
126 | !if "$(MATLAB_ROOT)" != "$(ALT_MATLAB_ROOT)"
127 | MATLAB_ROOT = $(ALT_MATLAB_ROOT)
128 | !endif
129 | !if "$(MATLAB_BIN)" != "$(ALT_MATLAB_BIN)"
130 | MATLAB_BIN = $(ALT_MATLAB_BIN)
131 | !endif
132 |
133 | #--------------------------- Tool Specifications ------------------------------
134 |
135 | !include $(MATLAB_ROOT)\rtw\c\tools\vctools.mak
136 |
137 | PERL = $(MATLAB_ROOT)\sys\perl\win32\bin\perl
138 | #------------------------------ Include/Lib Path ------------------------------
139 |
140 | MATLAB_INCLUDES = $(MATLAB_ROOT)\simulink\include
141 | MATLAB_INCLUDES = $(MATLAB_INCLUDES);$(MATLAB_ROOT)\extern\include
142 | MATLAB_INCLUDES = $(MATLAB_INCLUDES);$(MATLAB_ROOT)\rtw\c\src
143 | MATLAB_INCLUDES = $(MATLAB_INCLUDES);$(MATLAB_ROOT)\rtw\c\src\ext_mode\common
144 |
145 | # Additional file include paths
146 | |>START_EXPAND_INCLUDES<|
147 | MATLAB_INCLUDES = $(MATLAB_INCLUDES);|>EXPAND_DIR_NAME<||>END_EXPAND_INCLUDES<|
148 |
149 | INCLUDE = .;$(RELATIVE_PATH_TO_ANCHOR);$(MATLAB_INCLUDES);$(INCLUDE)
150 |
151 | !if "$(SHARED_SRC_DIR)" != ""
152 | INCLUDE = $(INCLUDE);$(SHARED_SRC_DIR)
153 | !endif
154 |
155 | #------------------------ External mode ---------------------------------------
156 | # Uncomment -DVERBOSE to have information printed to stdout
157 | # To add a new transport layer, see the comments in
158 | # /toolbox/simulink/simulink/extmode_transports.m
159 | !if $(EXT_MODE) == 1
160 | EXT_CC_OPTS = -DEXT_MODE # -DVERBOSE
161 | !if $(EXTMODE_TRANSPORT) == 0 #tcpip
162 | EXT_SRC = ext_svr.c updown.c ext_work.c rtiostream_interface.c rtiostream_tcpip.c
163 | EXT_LIB = wsock32.lib
164 | !endif
165 | !if $(EXTMODE_TRANSPORT) == 1 #serial_win32
166 | EXT_SRC = ext_svr.c updown.c ext_work.c ext_svr_serial_transport.c
167 | EXT_SRC = $(EXT_SRC) ext_serial_pkt.c ext_serial_win32_port.c
168 | EXT_LIB =
169 | !endif
170 | !if $(TMW_EXTMODE_TESTING) == 1
171 | EXT_SRC = $(EXT_SRC) ext_test.c
172 | EXT_CC_OPTS = $(EXT_CC_OPTS) -DTMW_EXTMODE_TESTING
173 | !endif
174 | !if $(EXTMODE_STATIC) == 1
175 | EXT_SRC = $(EXT_SRC) mem_mgr.c
176 | EXT_CC_OPTS = $(EXT_CC_OPTS) -DEXTMODE_STATIC -DEXTMODE_STATIC_SIZE=$(EXTMODE_STATIC_SIZE)
177 | !endif
178 | !else
179 | EXT_SRC =
180 | EXT_CC_OPTS =
181 | EXT_LIB =
182 | !endif
183 |
184 | #------------------------ rtModel ----------------------------------------------
185 |
186 | RTM_CC_OPTS = -DUSE_RTMODEL
187 |
188 | #----------------- Compiler and Linker Options --------------------------------
189 |
190 | # Optimization Options
191 | OPT_OPTS = $(DEFAULT_OPT_OPTS)
192 |
193 | # General User Options
194 | !if "$(DEBUG_BUILD)" == "0"
195 | OPTS =
196 | !else
197 | # Set OPT_OPTS=-Zi and any additional flags for debugging
198 | OPTS = -Zi
199 | !endif
200 |
201 | !if "$(OPTIMIZATION_FLAGS)" != ""
202 | CC_OPTS = $(OPTS) $(EXT_CC_OPTS) $(RTM_CC_OPTS) $(OPTIMIZATION_FLAGS)
203 | !else
204 | CC_OPTS = $(OPT_OPTS) $(OPTS) $(EXT_CC_OPTS) $(RTM_CC_OPTS)
205 | !endif
206 | CPP_REQ_DEFINES = -DMODEL=$(MODEL) -DRT -DNUMST=$(NUMST) \
207 | -DTID01EQ=$(TID01EQ) -DNCSTATES=$(NCSTATES) \
208 | -DMT=$(MULTITASKING) -DHAVESTDIO
209 |
210 | # Uncomment this line to move warning level to W4
211 | # cflags = $(cflags:W3=W4)
212 | CFLAGS = $(MODELREF_INC_PATH) $(cflags) $(cvarsmt) $(CFLAGS_VERSPECIFIC)\
213 | $(CC_OPTS) $(CPP_REQ_DEFINES) $(USER_INCLUDES)
214 | CPPFLAGS = $(MODELREF_INC_PATH) $(cflags) $(cvarsmt) $(CPPFLAGS_VERSPECIFIC)\
215 | $(CPP_OPTS) $(CC_OPTS) $(CPP_REQ_DEFINES) $(USER_INCLUDES)
216 | LDFLAGS = $(ldebug) $(conflags) $(EXT_LIB) $(conlibsmt) libcpmt.lib $(ADDITIONAL_LDFLAGS)
217 |
218 |
219 | # libcpmt.lib is the multi-threaded, static lib version of the C++ standard lib
220 |
221 | #----------------------------- Source Files -----------------------------------
222 |
223 |
224 | #Dynamic library
225 | !if "$(MODELREF_TARGET_TYPE)" == "NONE"
226 | PRODUCT = $(RELATIVE_PATH_TO_ANCHOR)\DISCON.dll
227 |
228 | REQ_SRCS = $(MODEL).$(TARGET_LANG_EXT) $(MODULES) \
229 | discon_main.c rt_sim.c $(SOLVER) $(EXT_SRC)
230 |
231 | #Model Reference Target
232 | !else
233 | PRODUCT = $(MODELLIB)
234 | REQ_SRCS = $(MODULES)
235 | !endif
236 |
237 | USER_SRCS =
238 |
239 | SRCS = $(REQ_SRCS) $(USER_SRCS) $(S_FUNCTIONS)
240 | OBJS_CPP_UPPER = $(SRCS:.CPP=.obj)
241 | OBJS_CPP_LOWER = $(OBJS_CPP_UPPER:.cpp=.obj)
242 | OBJS_C_UPPER = $(OBJS_CPP_LOWER:.C=.obj)
243 | OBJS = $(OBJS_C_UPPER:.c=.obj)
244 | SHARED_OBJS = $(SHARED_SRC:.c=.obj)
245 | # ------------------------- Additional Libraries ------------------------------
246 |
247 | LIBS =
248 | |>START_PRECOMP_LIBRARIES<|
249 | !if "$(OPT_OPTS)" == "$(DEFAULT_OPT_OPTS)"
250 | LIBS = $(LIBS) |>EXPAND_LIBRARY_LOCATION<|\|>EXPAND_LIBRARY_NAME<|_vc.lib
251 | !else
252 | LIBS = $(LIBS) |>EXPAND_LIBRARY_NAME<|.lib
253 | !endif |>END_PRECOMP_LIBRARIES<|
254 | |>START_EXPAND_LIBRARIES<|
255 | LIBS = $(LIBS) |>EXPAND_LIBRARY_NAME<|.lib |>END_EXPAND_LIBRARIES<|
256 | LIBS = $(LIBS)
257 |
258 | # ---------------------------- Linker Script ----------------------------------
259 |
260 | CMD_FILE = $(MODEL).lnk
261 | GEN_LNK_SCRIPT = $(MATLAB_ROOT)\rtw\c\tools\mkvc_lnk.pl
262 |
263 | #--------------------------------- Rules --------------------------------------
264 | all: set_environment_variables $(PRODUCT)
265 |
266 | !if "$(MODELREF_TARGET_TYPE)" == "NONE"
267 | #--- Stand-alone model ---
268 | $(PRODUCT) : $(OBJS) $(SHARED_LIB) $(LIBS) $(MODELREF_LINK_LIBS)
269 | @cmd /C "echo ### Linking ..."
270 | $(PERL) $(GEN_LNK_SCRIPT) $(CMD_FILE) $(OBJS)
271 | $(LD) /DLL $(LDFLAGS) $(S_FUNCTIONS_LIB) $(SHARED_LIB) $(LIBS) $(MAT_LIBS) @$(CMD_FILE) @$(MODELREF_LINK_RSPFILE) -out:$@
272 | @del $(CMD_FILE)
273 | @cmd /C "echo $(BUILD_SUCCESS) dynamic library DISCON.dll"
274 | !else
275 | #--- Model reference RTW Target ---
276 | $(PRODUCT) : $(OBJS) $(SHARED_LIB)
277 | @cmd /C "echo ### Linking ..."
278 | $(PERL) $(GEN_LNK_SCRIPT) $(CMD_FILE) $(OBJS)
279 | $(LD) -lib /OUT:$(MODELLIB) @$(CMD_FILE) $(S_FUNCTIONS_LIB)
280 | @cmd /C "echo $(BUILD_SUCCESS) static library $(MODELLIB)"
281 | !endif
282 |
283 | {$(MATLAB_ROOT)\rtw\c\grt}.c.obj :
284 | @cmd /C "echo ### Compiling $<"
285 | $(CC) $(CFLAGS) $<
286 |
287 | {$(MATLAB_ROOT)\rtw\c\src}.c.obj :
288 | @cmd /C "echo ### Compiling $<"
289 | $(CC) $(CFLAGS) $<
290 |
291 | {$(MATLAB_ROOT)\rtw\c\src\ext_mode\common}.c.obj :
292 | @cmd /C "echo ### Compiling $<"
293 | $(CC) $(CFLAGS) $<
294 |
295 | {$(MATLAB_ROOT)\rtw\c\src\rtiostream\rtiostreamtcpip}.c.obj :
296 | @cmd /C "echo ### Compiling $<"
297 | $(CC) $(CFLAGS) $<
298 |
299 | {$(MATLAB_ROOT)\rtw\c\src\ext_mode\serial}.c.obj :
300 | @cmd /C "echo ### Compiling $<"
301 | $(CC) $(CFLAGS) $<
302 |
303 | {$(MATLAB_ROOT)\rtw\c\src\ext_mode\custom}.c.obj :
304 | @cmd /C "echo ### Compiling $<"
305 | $(CC) $(CFLAGS) $<
306 |
307 | # Additional sources
308 |
309 | |>START_EXPAND_RULES<|{|>EXPAND_DIR_NAME<|}.c.obj :
310 | @cmd /C "echo ### Compiling $<"
311 | $(CC) $(CFLAGS) $<
312 |
313 | |>END_EXPAND_RULES<|
314 |
315 | |>START_EXPAND_RULES<|{|>EXPAND_DIR_NAME<|}.cpp.obj :
316 | @cmd /C "echo ### Compiling $<"
317 | $(CC) $(CPPFLAGS) $<
318 |
319 | |>END_EXPAND_RULES<|
320 |
321 | # Look in simulink/src helper files
322 |
323 | {$(MATLAB_ROOT)\simulink\src}.c.obj :
324 | @cmd /C "echo ### Compiling $<"
325 | $(CC) $(CFLAGS) $<
326 |
327 | {$(MATLAB_ROOT)\simulink\src}.cpp.obj :
328 | @cmd /C "echo ### Compiling $<"
329 | $(CC) $(CPPFLAGS) $<
330 |
331 | # Put these rule last, otherwise nmake will check toolboxes first
332 |
333 | {$(RELATIVE_PATH_TO_ANCHOR)}.c.obj :
334 | @cmd /C "echo ### Compiling $<"
335 | $(CC) $(CFLAGS) $<
336 |
337 | {$(RELATIVE_PATH_TO_ANCHOR)}.cpp.obj :
338 | @cmd /C "echo ### Compiling $<"
339 | $(CC) $(CPPFLAGS) $<
340 |
341 | .c.obj :
342 | @cmd /C "echo ### Compiling $<"
343 | $(CC) $(CFLAGS) $<
344 |
345 | .cpp.obj :
346 | @cmd /C "echo ### Compiling $<"
347 | $(CC) $(CPPFLAGS) $<
348 |
349 | !if "$(SHARED_LIB)" != ""
350 | $(SHARED_LIB) : $(SHARED_SRC)
351 | @cmd /C "echo ### Creating $@"
352 | @$(CC) $(CFLAGS) -Fo$(SHARED_BIN_DIR)\ @<<
353 | $?
354 | <<
355 | @$(LIBCMD) /nologo /out:$@ $(SHARED_OBJS)
356 | @cmd /C "echo ### $@ Created"
357 | !endif
358 |
359 |
360 | set_environment_variables:
361 | @set INCLUDE=$(INCLUDE)
362 | @set LIB=$(LIB)
363 |
364 | # Libraries:
365 |
366 | |>START_EXPAND_LIBRARIES<|MODULES_|>EXPAND_LIBRARY_NAME<| = \
367 | |>START_EXPAND_MODULES<| |>EXPAND_MODULE_NAME<|.obj \
368 | |>END_EXPAND_MODULES<|
369 |
370 | |>EXPAND_LIBRARY_NAME<|.lib : rtw_proj.tmw $(MAKEFILE) $(MODULES_|>EXPAND_LIBRARY_NAME<|)
371 | @cmd /C "echo ### Creating $@"
372 | $(LIBCMD) /nologo /out:$@ $(MODULES_|>EXPAND_LIBRARY_NAME<|)
373 | @cmd /C "echo ### $@ Created"
374 |
375 | |>END_EXPAND_LIBRARIES<|
376 |
377 | |>START_PRECOMP_LIBRARIES<|MODULES_|>EXPAND_LIBRARY_NAME<| = \
378 | |>START_EXPAND_MODULES<| |>EXPAND_MODULE_NAME<|.obj \
379 | |>END_EXPAND_MODULES<|
380 |
381 | |>EXPAND_LIBRARY_NAME<|.lib : rtw_proj.tmw $(MAKEFILE) $(MODULES_|>EXPAND_LIBRARY_NAME<|)
382 | @cmd /C "echo ### Creating $@"
383 | $(LIBCMD) /nologo /out:$@ $(MODULES_|>EXPAND_LIBRARY_NAME<|)
384 | @cmd /C "echo ### $@ Created"
385 |
386 | |>END_PRECOMP_LIBRARIES<|
387 |
388 | #----------------------------- Dependencies -----------------------------------
389 |
390 | $(OBJS) : $(MAKEFILE) rtw_proj.tmw
391 |
--------------------------------------------------------------------------------
/Simulink_32bit/README.txt:
--------------------------------------------------------------------------------
1 | August 10, 2017 -- J. Butterworth
2 | Creating "Bladed-Style" DLLs (Windows) and SOs (Linux) from Matlab R2017a
3 |
4 |
5 | Files and Directories:
6 | ======================
7 | * File: README.txt -- This readme file
8 | * File: BlankCntrlr_SimulinkSetupAndBuild.m -- Matlab m-file that walks the user through the build process
9 | * File: BlankCntrlr_model.mdl -- A Simulink model set up to be a empty ("dummy") controller. It is configured to be built into a DLL or SO in this process
10 | * File: discon_main.c -- DISCON main file
11 | * File: discon.tlc -- DISCON target file
12 | * File: setup_mssdk71.bat -- Bat file that allows the build of a 32-bit DLL from a 64bit installation of Matlab (in this case, R2017a)
13 | * Directory: DISCONtmf_LINUX -- Directory that contains discon.tmf, a template makefile configured for LINUX
14 | * Directory: DISCONtmf_PC -- Directory that contains discon.tmf, a template makefile configured for WINDOWS
15 |
16 | Setup:
17 | ======================
18 | As before, the sampling time Ts must be defined in the MATLAB workspace, as it is needed for compilation.
19 | For WINDOWS, use the Windows SDK 7.1 compiler and configure Matlab to use it....
20 | You also need to install the Windows SDK 7.1, and after installation enable it with the mex –setup command in MATLAB, see:
21 | https://nl.mathworks.com/matlabcentral/answers/101105-how-do-i-install-microsoft-windows-sdk-7-1
22 | https://www.microsoft.com/en-us/download/details.aspx?id=8279
23 | For LINUX, use the gcc compiler and and configure Matlab to use it.
24 |
25 |
26 |
27 | Building the DLL (Windows -- 32-bit DLL from 32-bit or 64-bit Matlab):
28 | ======================
29 | Copy the discon.tmf file from DISCONtmf_PC and put it in your build directory (with discon_main.c, discon.tlc, etc.). This will provide the details needed to build a DLL (rather than an SO).
30 |
31 | Run the script BlankCntrlr_SimulinkSetupAndBuild.m. The script will determine if Matlab is a 32-bit of 64-bit installation and build the DLL appropriately.
32 |
33 | For a 64-bit Matlab installation:
34 | The DLL is created in two-step process that supports creating 32-bit DLL creation from a 64-bit installation of Matlab (R2017a)
35 | 1) Generate code-only from Simulink model
36 | 2) Replace resulting R2017a(64bit) setup_mssdk71.bat with R2013b(32bit) setup_mssdk71.bat file and finish building the DLL.
37 |
38 | For a 32-bit Matlab installation:
39 | One can simply generate code and build the DLL directly from the Simulink model {Ctrl-B} (but one MUST uncheck "generate code only" in the "code generation tab" of "model configuration parameters" in the Simulink model). Also, the script BlankCntrlr_SimulinkSetupAndBuild.m can build the model regardless of the "generate code only" setting.
40 |
41 |
42 |
43 | Building the SO (LINUX -- 64-bit SO from 64-bit Matlab):
44 | ======================
45 | Copy the discon.tmf file from DISCONtmf_LINUX and put it in your build directory (with discon_main.c, discon.tlc, etc.). This will provide the details needed to build an SO (rather than a DLL).
46 |
47 | Open the model and uncheck "generate code only" in the "code generation tab" of "model configuration parameters". I'm still looking for a way to automate this in the same way as the WINDOWS version.
48 |
49 | One can simply generate code and build the DLL directly from the Simulink model {Ctrl-B}. Also, the script BlankCntrlr_SimulinkSetupAndBuild.m can build the model regardless of the "generate code only" setting.
50 |
51 |
52 |
--------------------------------------------------------------------------------
/Simulink_32bit/discon.tlc:
--------------------------------------------------------------------------------
1 | %% SYSTLC: DISCON DLL Target (for use with GH BLADED) \
2 | %% TMF: discon_vc.tmf MAKE: make_rtw EXTMODE: ext_comm
3 | %%
4 | %% $RCSfile: discon.tlc,v $
5 | %% $Revision: 1.31.4.8 $
6 | %% $Date: 2004/07/01 04:40:51 $
7 | %%
8 | %% Copyright 1994-2004 The MathWorks, Inc.
9 | %% Abstract: Generic real-time system target file.
10 | %%
11 | %selectfile NULL_FILE
12 |
13 | %assign TargetType = "RT"
14 | %assign Language = "C"
15 | %assign GenRTModel = 1
16 | %assign _GRT_ = 1
17 |
18 | %assign MatFileLogging = 1
19 |
20 | %include "codegenentry.tlc"
21 |
22 |
23 | %% The contents between 'BEGIN_RTW_OPTIONS' and 'END_RTW_OPTIONS' in this file
24 | %% are used to maintain backward compatibility to R13 and preR13 custom target
25 | %% file only. If you want to use this file as a template to develop your
26 | %% own system target file, you need to remove the 'CONFIGSET_TARGET_COMPONENT'
27 | %% section at the end of this file.
28 | %%
29 | /%
30 | BEGIN_RTW_OPTIONS
31 |
32 | % second page of category item
33 | rtwoptions(1).prompt = 'DISCON code generation options';
34 | rtwoptions(1).type = 'Category';
35 | rtwoptions(1).enable = 'on';
36 | rtwoptions(1).default = 2; % number of items under this category
37 | % excluding this one.
38 | rtwoptions(1).popupstrings = '';
39 | rtwoptions(1).tlcvariable = '';
40 | rtwoptions(1).tooltip = '';
41 | rtwoptions(1).callback = '';
42 | rtwoptions(1).opencallback = '';
43 | rtwoptions(1).closecallback = '';
44 | rtwoptions(1).makevariable = '';
45 |
46 | rtwoptions(2).prompt = 'MAT-file variable name modifier';
47 | rtwoptions(2).type = 'Popup';
48 | rtwoptions(2).default = 'rt_';
49 | rtwoptions(2).popupstrings = 'rt_|_rt|none';
50 | rtwoptions(2).tlcvariable = 'LogVarNameModifier';
51 | rtwoptions(2).tooltip = ...
52 | ['prefix rt_ to variable name,', sprintf('\n'), ...
53 | 'append _rt to variable name,', sprintf('\n'), ...
54 | 'or no modification'];
55 |
56 | rtwoptions(3).prompt = 'Ignore custom storage classes';
57 | rtwoptions(3).type = 'Checkbox';
58 | rtwoptions(3).default = 'on';
59 | rtwoptions(3).tlcvariable = 'IgnoreCustomStorageClasses';
60 | rtwoptions(3).tooltip = ['Treat custom storage classes as ''Auto''.'];
61 | rtwoptions(3).opencallback = [ ...
62 | 'objTag = ''Ignore custom storage classes_CheckboxTag'';', ...
63 | 'obj = findobj(DialogFig,''Tag'',objTag);', ...
64 | 'set(obj, ''Enable'', sl(''onoff'',ecoderinstalled));'];
65 |
66 | rtwoptions(4).prompt = 'External Mode code generation options';
67 | rtwoptions(4).type = 'Category';
68 | rtwoptions(4).enable = 'on';
69 | rtwoptions(4).default = 5; % number of items under this category
70 | % excluding this one.
71 | rtwoptions(4).popupstrings = '';
72 | rtwoptions(4).tlcvariable = '';
73 | rtwoptions(4).tooltip = '';
74 | rtwoptions(4).callback = '';
75 | rtwoptions(4).opencallback = '';
76 | rtwoptions(4).closecallback = '';
77 | rtwoptions(4).makevariable = '';
78 |
79 | rtwoptions(5).prompt = 'External mode';
80 | rtwoptions(5).type = 'Checkbox';
81 | rtwoptions(5).default = 'off';
82 | rtwoptions(5).tlcvariable = 'ExtMode';
83 | rtwoptions(5).makevariable = 'EXT_MODE';
84 | rtwoptions(5).tooltip = ...
85 | ['Adds communication support',sprintf('\n'), ...
86 | 'for use with Simulink external mode'];
87 |
88 | % Enable/disable other external mode controls.
89 | rtwoptions(5).callback = [ ...
90 | 'DialogFig = get(gcbo,''Parent'');',...
91 | 'sl(''extmodecallback'', ''extmode_checkbox_callback'', DialogFig);', ...
92 | ];
93 |
94 | rtwoptions(6).prompt = 'Transport';
95 | rtwoptions(6).type = 'Popup';
96 | rtwoptions(6).default = 'tcpip';
97 | rtwoptions(6).popupstrings = ['tcpip|', ...
98 | 'serial_win32'];
99 | rtwoptions(6).tlcvariable = 'ExtModeTransport';
100 | rtwoptions(6).makevariable = 'EXTMODE_TRANSPORT';
101 | rtwoptions(6).tooltip = ...
102 | ['Chooses transport mechanism for external mode'];
103 |
104 | % Synchronize with "External mode" checkbox option
105 | rtwoptions(6).opencallback = [ ...
106 | 'ExtModeTable = {''tcpip'' ''ext_comm'';', ...
107 | '''serial_win32'' ''ext_serial_win32_comm''};', ...
108 | 'ud = DialogUserData;', ...
109 | 'ud = extmodecallback(''transport_popup_opencallback'',model,DialogFig,ud,ExtModeTable);', ...
110 | 'DialogUserData = ud;', ...
111 | ];
112 |
113 | % Set extmode mex-file according to extmode transport mechanism.
114 | rtwoptions(6).closecallback = [ ...
115 | 'ExtModeTable = {''tcpip'' ''ext_comm'';', ...
116 | '''serial_win32'' ''ext_serial_win32_comm''};', ...
117 | 'ud = DialogUserData;', ...
118 | 'ud = extmodecallback(''transport_popup_closecallback'',model,DialogFig,ud,ExtModeTable);', ...
119 | 'DialogUserData = ud;', ...
120 | ];
121 |
122 | rtwoptions(7).prompt = 'Static memory allocation';
123 | rtwoptions(7).type = 'Checkbox';
124 | rtwoptions(7).default = 'off';
125 | rtwoptions(7).tlcvariable = 'ExtModeStaticAlloc';
126 | rtwoptions(7).makevariable = 'EXTMODE_STATIC_ALLOC';
127 | rtwoptions(7).tooltip = ...
128 | ['Forces external mode to use static',sprintf('\n'), ...
129 | 'instead of dynamic memory allocation'];
130 |
131 | % Enable/disable external mode static allocation size selection.
132 | rtwoptions(7).callback = [ ...
133 | 'DialogFig = get(gcbo,''Parent'');',...
134 | 'sl(''extmodecallback'', ''staticmem_checkbox_callback'', DialogFig);', ...
135 | ];
136 |
137 | % Synchronize with "External mode" checkbox option
138 | rtwoptions(7).opencallback = [ ...
139 | 'extmodecallback(''staticmem_checkbox_opencallback'',DialogFig);', ...
140 | ];
141 |
142 | rtwoptions(8).prompt = 'Static memory buffer size';
143 | rtwoptions(8).type = 'Edit';
144 | rtwoptions(8).default = '1000000';
145 | rtwoptions(8).tlcvariable = 'ExtModeStaticAllocSize';
146 | rtwoptions(8).makevariable = 'EXTMODE_STATIC_ALLOC_SIZE';
147 | rtwoptions(8).tooltip = ...
148 | ['Size of external mode static allocation buffer'];
149 |
150 | % Synchronize with "External mode static allocation" option
151 | rtwoptions(8).opencallback = [ ...
152 | 'extmodecallback(''staticmemsize_edit_opencallback'',DialogFig);', ...
153 | ];
154 |
155 | rtwoptions(9).prompt = 'External mode testing';
156 | rtwoptions(9).type = 'NonUI';
157 | rtwoptions(9).default = '0';
158 | rtwoptions(9).tlcvariable = 'ExtModeTesting';
159 | rtwoptions(9).makevariable = 'TMW_EXTMODE_TESTING';
160 | rtwoptions(9).tooltip = ...
161 | ['Internal testing flag for Simulink external mode'];
162 |
163 | %----------------------------------------%
164 | % Configure RTW code generation settings %
165 | %----------------------------------------%
166 |
167 | rtwgensettings.BuildDirSuffix = '_discon_rtw';
168 |
169 | END_RTW_OPTIONS
170 | %/
171 | %% The content between 'BEGIN_CONFIGSET_TARGET_COMPONENT' and
172 | %% 'END_CONFIGSET_TARGET_COMPONENT' is for the MathWorks internal use
173 | %% only. You must remove this section if you intend to use this file
174 | %% as a template for your own system target development.
175 | /%
176 | BEGIN_CONFIGSET_TARGET_COMPONENT
177 |
178 | targetComponentClass = 'Simulink.GRTTargetCC';
179 |
180 | END_CONFIGSET_TARGET_COMPONENT
181 | %/
182 |
183 |
--------------------------------------------------------------------------------
/Simulink_32bit/discon_main.c:
--------------------------------------------------------------------------------
1 | /*
2 | * File : discon_main.c
3 | *
4 | * Abstract:
5 | * A DISCON main for the use with GH BLADED that runs under most
6 | * operating systems.
7 | *
8 | * This file may be a useful starting point when targeting a new
9 | * controller.
10 | *
11 | * Updated 11-Apr-2017 by B. Jonkman, for Matlab R2017a
12 | *
13 | * Compiler specified defines:
14 | * RT - Required.
15 | * MODEL=modelname - Required.
16 | * NUMST=# - Required. Number of sample times.
17 | * NCSTATES=# - Required. Number of continuous states.
18 | * TID01EQ=1 or 0 - Optional. Only define to 1 if sample time task
19 | * id's 0 and 1 have equal rates.
20 | * MULTITASKING - Optional. (use MT for a synonym).
21 | * SAVEFILE - Optional (non-quoted) name of .mat file to create.
22 | * Default is .mat
23 | */
24 |
25 | /*=========*
26 | * Headers *
27 | *=========*/
28 | #include
29 | #include
30 | #include
31 | #include
32 | //#include
33 |
34 | #include "rtwtypes.h"
35 | #include "rtmodel.h"
36 | #include "rt_sim.h"
37 | #include "rt_logging.h"
38 | #ifdef UseMMIDataLogging
39 | #include "rt_logging_mmi.h"
40 | #endif
41 | #include "rt_nonfinite.h"
42 | #include "ext_work.h"
43 |
44 | /*=========*
45 | * Defines *
46 | *=========*/
47 |
48 | // Generic helper definitions for shared library support
49 | #if defined _WIN32 || defined __CYGWIN__
50 | #define DISCON_DLL_IMPORT __declspec(dllimport)
51 | #define DISCON_DLL_EXPORT __declspec(dllexport)
52 | #define DISCON_DLL_LOCAL
53 | #else
54 | #if __GNUC__ >= 4
55 | #define DISCON_DLL_IMPORT __attribute__ ((visibility ("default")))
56 | #define DISCON_DLL_EXPORT __attribute__ ((visibility ("default")))
57 | #define DISCON_DLL_LOCAL __attribute__ ((visibility ("hidden")))
58 | #else
59 | #define DISCON_DLL_IMPORT
60 | #define DISCON_DLL_EXPORT
61 | #define DISCON_DLL_LOCAL
62 | #endif
63 | #endif
64 |
65 | #define DISCON_API DISCON_DLL_EXPORT
66 | #define DISCON_LOCAL DISCON_DLL_LOCAL
67 |
68 | // # ifdef __GNUC__
69 | // # define CDECL __attribute__ ((__cdecl__))
70 | // # else
71 | // # define CDECL __cdecl
72 | // # endif
73 |
74 | # ifdef __GNUC__
75 | # define CDECL
76 | # else
77 | # define CDECL __cdecl
78 | # endif
79 |
80 |
81 |
82 | #ifndef TRUE
83 | #define FALSE (0)
84 | #define TRUE (1)
85 | #endif
86 |
87 |
88 | #ifndef EXIT_FAILURE
89 | #define EXIT_FAILURE 1
90 | #endif
91 | #ifndef EXIT_SUCCESS
92 | #define EXIT_SUCCESS 0
93 | #endif
94 |
95 | #define QUOTE1(name) #name
96 | #define QUOTE(name) QUOTE1(name) /* need to expand name */
97 |
98 | #ifndef RT
99 | #error "must define RT"
100 | #endif
101 |
102 | #ifndef MODEL
103 | #error "must define MODEL"
104 | #endif
105 |
106 | #ifndef NUMST
107 | #error "must define number of sample times, NUMST"
108 | #endif
109 |
110 | #ifndef NCSTATES
111 | #error "must define NCSTATES"
112 | #endif
113 |
114 | #ifndef SAVEFILE
115 | #define MATFILE2(file) #file ".mat"
116 | #define MATFILE1(file) MATFILE2(file)
117 | #define MATFILE MATFILE1(MODEL)
118 | #else
119 | #define MATFILE QUOTE(SAVEFILE)
120 | #endif
121 |
122 | #define RUN_FOREVER -1.0
123 |
124 | #define EXPAND_CONCAT(name1,name2) name1 ## name2
125 | #define CONCAT(name1,name2) EXPAND_CONCAT(name1,name2)
126 | #define RT_MODEL CONCAT(MODEL,_rtModel)
127 |
128 | #define EXPAND_CONCAT3(name1,name2,name3) name1 ## _ ## name2.name3
129 | #define CONCAT3(name1,name2,name3) EXPAND_CONCAT3(name1,name2,name3)
130 | #define SIG_MODEL(suffix,name) CONCAT3(MODEL,suffix,name)
131 |
132 | #define NINT(a) ((a) >= 0.0 ? (int)((a)+0.5) : (int)((a)-0.5))
133 | #define MIN(a,b) ((a)>(b)?(b):(a))
134 |
135 | /*====================*
136 | * External functions *
137 | *====================*/
138 | extern RT_MODEL *MODEL(void);
139 |
140 | extern void MdlInitializeSizes(void);
141 | extern void MdlInitializeSampleTimes(void);
142 | extern void MdlStart(void);
143 | extern void MdlOutputs(int_T tid);
144 | extern void MdlUpdate(int_T tid);
145 | extern void MdlTerminate(void);
146 |
147 | #if NCSTATES > 0
148 | extern void rt_ODECreateIntegrationData(RTWSolverInfo *si);
149 | extern void rt_ODEUpdateContinuousStates(RTWSolverInfo *si);
150 |
151 | # define rt_CreateIntegrationData(S) \
152 | rt_ODECreateIntegrationData(rtmGetRTWSolverInfo(S));
153 | # define rt_UpdateContinuousStates(S) \
154 | rt_ODEUpdateContinuousStates(rtmGetRTWSolverInfo(S));
155 | # else
156 | # define rt_CreateIntegrationData(S) \
157 | rtsiSetSolverName(rtmGetRTWSolverInfo(S),"FixedStepDiscrete");
158 | # define rt_UpdateContinuousStates(S) /* Do Nothing */
159 | #endif
160 |
161 |
162 | /*==================================*
163 | * Global data local to this module *
164 | *==================================*/
165 | static struct {
166 | int_T stopExecutionFlag;
167 | int_T isrOverrun;
168 | int_T overrunFlags[NUMST];
169 | int_T eventFlags[NUMST];
170 | const char_T *errmsg;
171 | } GBLbuf;
172 |
173 | #ifdef EXT_MODE
174 | # define rtExtModeSingleTaskUpload(S) \
175 | { \
176 | int stIdx; \
177 | rtExtModeUploadCheckTrigger(rtmGetNumSampleTimes(S)); \
178 | for (stIdx=0; stIdx= 0) {
610 | /* Main calculation */
611 | aviFail[0] = calcOutputController(rGeneratorSpeed, rRatedSpeed,
612 | rBelowRatedPitch, rForeAftTower, rSideTower,
613 | rRotorAzimuth, rOP1RootMoment, rOP2RootMoment,
614 | rOP3RootMoment, rMeasuredPitch, rMeasuredTorque,
615 | rModeGain, &rTorqueDemand, &rBlade1Pitch,
616 | &rBlade2Pitch, &rBlade3Pitch, errorMsg);
617 | //&rBlade2Pitch, &rBlade3Pitch, &errorMsg);
618 | }
619 | else if (iStatus == -1) {
620 | /* Main calculation */
621 | aviFail[0] = calcOutputController(rGeneratorSpeed, rRatedSpeed,
622 | rBelowRatedPitch, rForeAftTower, rSideTower,
623 | rRotorAzimuth, rOP1RootMoment, rOP2RootMoment,
624 | rOP3RootMoment, rMeasuredPitch, rMeasuredTorque,
625 | rModeGain, &rTorqueDemand, &rBlade1Pitch,
626 | &rBlade2Pitch, &rBlade3Pitch, errorMsg);
627 | //&rBlade2Pitch, &rBlade3Pitch, &errorMsg);
628 |
629 | /* Perform Cleanup */
630 | aviFail[0] = performCleanup(errorMsg);
631 | }
632 | else {
633 | aviFail[0] = -1;
634 | sprintf(errorMsg, "iStatus is not recognized: %d", iStatus);
635 | }
636 |
637 | /* Store variables too Bladed (See Appendix A) */
638 | avrSwap[27] = 1; /* Individual Pitch control */
639 | avrSwap[34] = 1; /* Generator contactor status */
640 | avrSwap[35] = 0; /* Shaft brake status: 0=off */
641 | avrSwap[40] = 0; /* Demanded yaw actuator torque */
642 | avrSwap[41] = rBlade1Pitch; /* Blade 1 pitch angle demand */
643 | avrSwap[42] = rBlade2Pitch; /* Blade 2 pitch angle demand */
644 | avrSwap[43] = rBlade3Pitch; /* Blade 3 pitch angle demand */
645 | avrSwap[46] = rTorqueDemand; /* Torque angle demand */
646 | avrSwap[47] = 0; /* Demanded nacelle yaw rate */
647 | avrSwap[54] = 0; /* Pitch override */
648 | avrSwap[55] = 0; /* Torque override */
649 | avrSwap[64] = 0; /* Number of variables returned for logging */
650 | avrSwap[71] = 0; /* Generator start-up resistance */
651 | avrSwap[78] = 1; /* Request for loads: 0=none */
652 | avrSwap[79] = 0; /* Variable slip current status */
653 | avrSwap[80] = 0; /* Variable slip current demand */
654 |
655 | /* Return message */
656 | memcpy(avcMsg, errorMsg, MIN(256, NINT(avrSwap[48])));
657 |
658 | return;
659 | } /* end DISCON */
660 |
661 | /* EOF: discon_main.c */
662 |
--------------------------------------------------------------------------------
/Simulink_32bit/setup_mssdk71.bat:
--------------------------------------------------------------------------------
1 | @echo off
2 | rem MSSDK71OPTS.BAT
3 | rem
4 | rem Compile and link options used for building MEX-files
5 | rem using the Microsoft Windows Software Development Kit.
6 | rem
7 | rem $Revision: 1.1.6.4 $ $Date: 2012/07/23 18:50:26 $
8 | rem Copyright 2010 The MathWorks, Inc.
9 | rem
10 | rem StorageVersion: 1.0
11 | rem C++keyFileName: MSSDK71OPTS.BAT
12 | rem C++keyName: Microsoft SDK
13 | rem C++keyManufacturer: Microsoft
14 | rem C++keyVersion: 7.1
15 | rem C++keyLanguage: C++
16 | rem C++keyLinkerName: Microsoft SDK
17 | rem C++keyLinkerVersion: 7.1
18 | rem
19 | rem ********************************************************************
20 | rem General parameters
21 | rem ********************************************************************
22 |
23 | set MATLAB=%MATLAB%
24 | set VSINSTALLDIR=c:\Program Files (x86)\Microsoft Visual Studio 10.0
25 | set VCINSTALLDIR=%VSINSTALLDIR%\VC
26 | rem In this case, LINKERDIR is being used to specify the location of the SDK
27 | set LINKERDIR=C:\Program Files\Microsoft SDKs\Windows\v7.1\
28 | set PATH=%VCINSTALLDIR%\bin;%VCINSTALLDIR%\VCPackages;%VSINSTALLDIR%\Common7\IDE;%VSINSTALLDIR%\Common7\Tools;%LINKERDIR%\bin;%MATLAB_BIN%;%PATH%
29 | set INCLUDE=%VCINSTALLDIR%\INCLUDE;%LINKERDIR%\include;%LINKERDIR%\include\gl;%VCINSTALLDIR%\ATLMFC\INCLUDE;%INCLUDE%
30 | set LIB=%VCINSTALLDIR%\LIB;%LINKERDIR%\LIB;%VCINSTALLDIR%\ATLMFC\LIB;%MATLAB%\extern\lib\win32;%LIB%
31 | set MW_TARGET_ARCH=win32
32 |
33 | rem ********************************************************************
34 | rem Compiler parameters
35 | rem ********************************************************************
36 | set COMPILER=cl
37 | set COMPFLAGS=/c /GR /W3 /EHs /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0 /DMATLAB_MEX_FILE /nologo /MD
38 | set OPTIMFLAGS=/O2 /Oy- /DNDEBUG
39 | set DEBUGFLAGS=/Z7
40 | set NAME_OBJECT=/Fo
41 |
42 | rem ********************************************************************
43 | rem Linker parameters
44 | rem ********************************************************************
45 | set LIBLOC=%MATLAB%\extern\lib\win32\microsoft
46 | set LINKER=link
47 | set LINKFLAGS=/dll /export:%ENTRYPOINT% /LIBPATH:"%LIBLOC%" libmx.lib libmex.lib libmat.lib /MACHINE:X86 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /manifest /incremental:NO /implib:"%LIB_NAME%.x" /MAP:"%OUTDIR%%MEX_NAME%%MEX_EXT%.map"
48 | set LINKOPTIMFLAGS=
49 | set LINKDEBUGFLAGS=/debug /PDB:"%OUTDIR%%MEX_NAME%%MEX_EXT%.pdb"
50 | set LINK_FILE=
51 | set LINK_LIB=
52 | set NAME_OUTPUT=/out:"%OUTDIR%%MEX_NAME%%MEX_EXT%"
53 | set RSP_FILE_INDICATOR=@
54 |
55 | rem ********************************************************************
56 | rem Resource compiler parameters
57 | rem ********************************************************************
58 | set RC_COMPILER=rc /fo "%OUTDIR%mexversion.res"
59 | set RC_LINKER=
60 |
61 | set POSTLINK_CMDS=del "%LIB_NAME%.x" "%LIB_NAME%.exp"
62 | set POSTLINK_CMDS1=mt -outputresource:"%OUTDIR%%MEX_NAME%%MEX_EXT%;2" -manifest "%OUTDIR%%MEX_NAME%%MEX_EXT%.manifest"
63 | set POSTLINK_CMDS2=del "%OUTDIR%%MEX_NAME%%MEX_EXT%.manifest"
64 | set POSTLINK_CMDS3=del "%OUTDIR%%MEX_NAME%%MEX_EXT%.map"
65 |
--------------------------------------------------------------------------------
/Simulink_64bit/DISCON_Empty.slx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TUDelft-DataDrivenControl/DISCON_Simulink/daa4d1f5667ac145cbdcb7333946c860d7f5ea37/Simulink_64bit/DISCON_Empty.slx
--------------------------------------------------------------------------------
/Simulink_64bit/DISCON_NREL5MW.slx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TUDelft-DataDrivenControl/DISCON_Simulink/daa4d1f5667ac145cbdcb7333946c860d7f5ea37/Simulink_64bit/DISCON_NREL5MW.slx
--------------------------------------------------------------------------------
/Simulink_64bit/Parameters_NREL5MW.mat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TUDelft-DataDrivenControl/DISCON_Simulink/daa4d1f5667ac145cbdcb7333946c860d7f5ea37/Simulink_64bit/Parameters_NREL5MW.mat
--------------------------------------------------------------------------------
/Simulink_64bit/discon.tlc:
--------------------------------------------------------------------------------
1 | %% SYSTLC: DISCON DLL Target (for use with GH BLADED) \
2 | %% TMF: grt_default_tmf MAKE: make_rtw EXTMODE: ext_comm
3 | %% SYSTLC: Create Visual C/C++ Solution File for Simulink Coder\
4 | %% TMF: discon_vc.tmf MAKE: make_rtw EXTMODE: ext_comm
5 | %%
6 | %%
7 | %%
8 | %%
9 | %%
10 | %% Copyright 1994-2016 The MathWorks, Inc.
11 | %% Abstract: Generic real-time system target file.
12 | %%
13 | %selectfile NULL_FILE
14 |
15 | %assign TargetType = "RT"
16 | %assign Language = "C"
17 | %assign GenRTModel = 1
18 | %assign _GRT_ = 1
19 | %assign TargetRegistMutexOp = 1
20 | %assign TargetRegistSynchroOp = 1
21 |
22 | %include "codegenentry.tlc"
23 |
24 |
25 | %% The contents between 'BEGIN_RTW_OPTIONS' and 'END_RTW_OPTIONS' in this file
26 | %% are used to maintain backward compatibility to R13 and preR13 custom target
27 | %% file only. If you want to use this file as a template to develop your
28 | %% own system target file, you need to remove the 'CONFIGSET_TARGET_COMPONENT'
29 | %% section at the end of this file.
30 | %%
31 | /%
32 | BEGIN_RTW_OPTIONS
33 |
34 | % second page of category item
35 | rtwoptions(1).prompt = 'DISCON code generation options';
36 | rtwoptions(1).type = 'Category';
37 | rtwoptions(1).enable = 'on';
38 | rtwoptions(1).default = 2; % number of items under this category
39 | % excluding this one.
40 | rtwoptions(1).popupstrings = '';
41 | rtwoptions(1).tlcvariable = '';
42 | rtwoptions(1).tooltip = '';
43 | rtwoptions(1).callback = '';
44 | rtwoptions(1).opencallback = '';
45 | rtwoptions(1).closecallback = '';
46 | rtwoptions(1).makevariable = '';
47 |
48 | rtwoptions(2).prompt = 'MAT-file variable name modifier';
49 | rtwoptions(2).type = 'Popup';
50 | rtwoptions(2).default = 'rt_';
51 | rtwoptions(2).popupstrings = 'rt_|_rt|none';
52 | rtwoptions(2).tlcvariable = 'LogVarNameModifier';
53 | rtwoptions(2).tooltip = ...
54 | ['prefix rt_ to variable name,', sprintf('\n'), ...
55 | 'append _rt to variable name,', sprintf('\n'), ...
56 | 'or no modification'];
57 |
58 | rtwoptions(3).prompt = 'Ignore custom storage classes';
59 | rtwoptions(3).type = 'Checkbox';
60 | rtwoptions(3).default = 'on';
61 | rtwoptions(3).tlcvariable = 'IgnoreCustomStorageClasses';
62 | rtwoptions(3).tooltip = ['Treat custom storage classes as ''Auto''.'];
63 | rtwoptions(3).opencallback = [ ...
64 | 'objTag = ''Ignore custom storage classes_CheckboxTag'';', ...
65 | 'obj = findobj(DialogFig,''Tag'',objTag);', ...
66 | 'set(obj, ''Enable'', sl(''onoff'',ecoderinstalled));'];
67 |
68 | rtwoptions(4).prompt = 'External Mode code generation options';
69 | rtwoptions(4).type = 'Category';
70 | rtwoptions(4).enable = 'on';
71 | rtwoptions(4).default = 5; % number of items under this category
72 | % excluding this one.
73 | rtwoptions(4).popupstrings = '';
74 | rtwoptions(4).tlcvariable = '';
75 | rtwoptions(4).tooltip = '';
76 | rtwoptions(4).callback = '';
77 | rtwoptions(4).opencallback = '';
78 | rtwoptions(4).closecallback = '';
79 | rtwoptions(4).makevariable = '';
80 |
81 | rtwoptions(5).prompt = 'External mode';
82 | rtwoptions(5).type = 'Checkbox';
83 | rtwoptions(5).default = 'off';
84 | rtwoptions(5).tlcvariable = 'ExtMode';
85 | rtwoptions(5).makevariable = 'EXT_MODE';
86 | rtwoptions(5).tooltip = ...
87 | ['Adds communication support',sprintf('\n'), ...
88 | 'for use with Simulink external mode'];
89 |
90 | % Enable/disable other external mode controls.
91 | rtwoptions(5).callback = [ ...
92 | 'DialogFig = get(gcbo,''Parent'');',...
93 | 'sl(''extmodecallback'', ''extmode_checkbox_callback'', DialogFig);', ...
94 | ];
95 |
96 | rtwoptions(6).prompt = 'Transport';
97 | rtwoptions(6).type = 'Popup';
98 | rtwoptions(6).default = 'tcpip';
99 | rtwoptions(6).popupstrings = ['tcpip|', ...
100 | 'serial'];
101 | rtwoptions(6).tlcvariable = 'ExtModeTransport';
102 | rtwoptions(6).makevariable = 'EXTMODE_TRANSPORT';
103 | rtwoptions(6).tooltip = ...
104 | ['Chooses transport mechanism for external mode'];
105 |
106 | % Synchronize with "External mode" checkbox option
107 | rtwoptions(6).opencallback = [ ...
108 | 'ExtModeTable = {''tcpip'' ''ext_comm'';', ...
109 | '''serial'' ''ext_serial_win32_comm''};', ...
110 | 'ud = DialogUserData;', ...
111 | 'ud = extmodecallback(''transport_popup_opencallback'',model,DialogFig,ud,ExtModeTable);', ...
112 | 'DialogUserData = ud;', ...
113 | ];
114 |
115 | % Set extmode mex-file according to extmode transport mechanism.
116 | rtwoptions(6).closecallback = [ ...
117 | 'ExtModeTable = {''tcpip'' ''ext_comm'';', ...
118 | '''serial'' ''ext_serial_win32_comm''};', ...
119 | 'ud = DialogUserData;', ...
120 | 'ud = extmodecallback(''transport_popup_closecallback'',model,DialogFig,ud,ExtModeTable);', ...
121 | 'DialogUserData = ud;', ...
122 | ];
123 |
124 | rtwoptions(7).prompt = 'Static memory allocation';
125 | rtwoptions(7).type = 'Checkbox';
126 | rtwoptions(7).default = 'off';
127 | rtwoptions(7).tlcvariable = 'ExtModeStaticAlloc';
128 | rtwoptions(7).makevariable = 'EXTMODE_STATIC_ALLOC';
129 | rtwoptions(7).tooltip = ...
130 | ['Forces external mode to use static',sprintf('\n'), ...
131 | 'instead of dynamic memory allocation'];
132 |
133 | % Enable/disable external mode static allocation size selection.
134 | rtwoptions(7).callback = [ ...
135 | 'DialogFig = get(gcbo,''Parent'');',...
136 | 'sl(''extmodecallback'', ''staticmem_checkbox_callback'', DialogFig);', ...
137 | ];
138 |
139 | % Synchronize with "External mode" checkbox option
140 | rtwoptions(7).opencallback = [ ...
141 | 'extmodecallback(''staticmem_checkbox_opencallback'',DialogFig);', ...
142 | ];
143 |
144 | rtwoptions(8).prompt = 'Static memory buffer size';
145 | rtwoptions(8).type = 'Edit';
146 | rtwoptions(8).default = '1000000';
147 | rtwoptions(8).tlcvariable = 'ExtModeStaticAllocSize';
148 | rtwoptions(8).makevariable = 'EXTMODE_STATIC_ALLOC_SIZE';
149 | rtwoptions(8).tooltip = ...
150 | ['Size of external mode static allocation buffer'];
151 |
152 | % Synchronize with "External mode static allocation" option
153 | rtwoptions(8).opencallback = [ ...
154 | 'extmodecallback(''staticmemsize_edit_opencallback'',DialogFig);', ...
155 | ];
156 |
157 | rtwoptions(9).prompt = 'External mode testing';
158 | rtwoptions(9).type = 'NonUI';
159 | rtwoptions(9).default = '0';
160 | rtwoptions(9).tlcvariable = 'ExtModeTesting';
161 | rtwoptions(9).makevariable = 'TMW_EXTMODE_TESTING';
162 | rtwoptions(9).tooltip = ...
163 | ['Internal testing flag for Simulink external mode'];
164 |
165 | %----------------------------------------%
166 | % Configure RTW code generation settings %
167 | %----------------------------------------%
168 |
169 | rtwgensettings.BuildDirSuffix = '_discon_rtw';
170 |
171 | END_RTW_OPTIONS
172 | %/
173 | %% The content between 'BEGIN_CONFIGSET_TARGET_COMPONENT' and
174 | %% 'END_CONFIGSET_TARGET_COMPONENT' is for the MathWorks internal use
175 | %% only. You must remove this section if you intend to use this file
176 | %% as a template for your own system target development.
177 | /%
178 | BEGIN_CONFIGSET_TARGET_COMPONENT
179 |
180 | targetComponentClass = 'Simulink.GRTTargetCC';
181 |
182 | END_CONFIGSET_TARGET_COMPONENT
183 | %/
184 |
185 |
--------------------------------------------------------------------------------
/Simulink_64bit/discon_main.c:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 1994-2012 The MathWorks, Inc.
3 | *
4 | * File : classic_main.c
5 | *
6 | * Abstract:
7 | * A Generic "Real-Time (single tasking or pseudo-multitasking,
8 | * statically allocated data)" main that runs under most
9 | * operating systems.
10 | *
11 | * This file may be a useful starting point when targeting a new
12 | * processor or microcontroller.
13 | *
14 | *
15 | * Compiler specified defines:
16 | * RT - Required.
17 | * MODEL=modelname - Required.
18 | * NUMST=# - Required. Number of sample times.
19 | * NCSTATES=# - Required. Number of continuous states.
20 | * TID01EQ=1 or 0 - Optional. Only define to 1 if sample time task
21 | * id's 0 and 1 have equal rates.
22 | * MULTITASKING - Optional. (use MT for a synonym).
23 | * SAVEFILE - Optional (non-quoted) name of .mat file to create.
24 | * Default is .mat
25 | */
26 |
27 | #include
28 | #include
29 | #include
30 | #include
31 | FILE *pFile; //Added by JW to read the init file
32 |
33 | #include "rtwtypes.h"
34 | # include "rtmodel.h"
35 | #include "rt_sim.h"
36 | #include "rt_logging.h"
37 | #ifdef UseMMIDataLogging
38 | #include "rt_logging_mmi.h"
39 | #endif
40 |
41 | #include "ext_work.h"
42 |
43 |
44 |
45 | /*=========*
46 | * Defines *
47 | *=========*/
48 |
49 | #ifndef TRUE
50 | #define FALSE (0)
51 | #define TRUE (1)
52 | #endif
53 |
54 | #ifndef EXIT_FAILURE
55 | #define EXIT_FAILURE 1
56 | #endif
57 | #ifndef EXIT_SUCCESS
58 | #define EXIT_SUCCESS 0
59 | #endif
60 |
61 | #define QUOTE1(name) #name
62 | #define QUOTE(name) QUOTE1(name) /* need to expand name */
63 |
64 | #ifndef RT
65 | # error "must define RT"
66 | #endif
67 |
68 | #ifndef MODEL
69 | # error "must define MODEL"
70 | #endif
71 |
72 | #ifndef NUMST
73 | # error "must define number of sample times, NUMST"
74 | #endif
75 |
76 | #ifndef NCSTATES
77 | # error "must define NCSTATES"
78 | #endif
79 |
80 | #ifndef SAVEFILE
81 | # define MATFILE2(file) #file ".mat"
82 | # define MATFILE1(file) MATFILE2(file)
83 | # define MATFILE MATFILE1(MODEL)
84 | #else
85 | # define MATFILE QUOTE(SAVEFILE)
86 | #endif
87 |
88 | #define RUN_FOREVER -1.0
89 |
90 | #define EXPAND_CONCAT(name1,name2) name1 ## name2
91 | #define CONCAT(name1,name2) EXPAND_CONCAT(name1,name2)
92 | #define RT_MODEL CONCAT(MODEL,_rtModel)
93 |
94 | #define EXPAND_CONCAT3(name1,name2,name3) name1 ## _ ## name2 ## . ## name3
95 | #define CONCAT3(name1,name2,name3) EXPAND_CONCAT3(name1,name2,name3)
96 | #define SIG_MODEL(suffix,name) CONCAT3(MODEL,suffix,name)
97 |
98 | #define NINT(a) ((a) >= 0.0 ? (int)((a)+0.5) : (int)((a)-0.5))
99 | #define MIN(a,b) ((a)>(b)?(b):(a))
100 |
101 | /*====================*
102 | * External functions *
103 | *====================*/
104 | #ifdef __cplusplus
105 |
106 | extern "C" {
107 |
108 | #endif
109 |
110 | extern RT_MODEL *MODEL(void);
111 |
112 | extern void MdlInitializeSizes(void);
113 | extern void MdlInitializeSampleTimes(void);
114 | extern void MdlStart(void);
115 | extern void MdlOutputs(int_T tid);
116 | extern void MdlUpdate(int_T tid);
117 | extern void MdlTerminate(void);
118 |
119 | extern void __declspec(dllexport) __cdecl DISCON(float *avrSwap, int *aviFail, char *accInfile, char *avcOutname, char *avcMsg);
120 |
121 | #ifdef __cplusplus
122 |
123 | }
124 | #endif
125 |
126 | #if NCSTATES > 0
127 | #ifdef __cplusplus
128 |
129 | extern "C" {
130 |
131 | #endif
132 | extern void rt_ODECreateIntegrationData(RTWSolverInfo *si);
133 | extern void rt_ODEUpdateContinuousStates(RTWSolverInfo *si);
134 | #ifdef __cplusplus
135 |
136 | }
137 | #endif
138 |
139 | # define rt_CreateIntegrationData(S) \
140 | rt_ODECreateIntegrationData(rtmGetRTWSolverInfo(S));
141 | # define rt_UpdateContinuousStates(S) \
142 | rt_ODEUpdateContinuousStates(rtmGetRTWSolverInfo(S));
143 | # else
144 | # define rt_CreateIntegrationData(S) \
145 | rtsiSetSolverName(rtmGetRTWSolverInfo(S),"FixedStepDiscrete");
146 | # define rt_UpdateContinuousStates(S) /* Do Nothing */
147 | #endif
148 |
149 |
150 | /*==================================*
151 | * Global data local to this module *
152 | *==================================*/
153 |
154 | static struct {
155 | int_T stopExecutionFlag;
156 | int_T isrOverrun;
157 | int_T overrunFlags[NUMST];
158 | int_T eventFlags[NUMST];
159 | const char_T *errmsg;
160 | } GBLbuf;
161 |
162 |
163 | #ifdef EXT_MODE
164 | # define rtExtModeSingleTaskUpload(S) \
165 | { \
166 | int stIdx; \
167 | rtExtModeUploadCheckTrigger(rtmGetNumSampleTimes(S)); \
168 | for (stIdx=0; stIdx -w -port \n",QUOTE(MODEL));
640 | (void) printf("arguments:\n");
641 | (void) printf(" -tf - overrides final time specified in "
642 | "Simulink (inf for no limit).\n");
643 | (void) printf(" -w - waits for Simulink to start model "
644 | "in External Mode.\n");
645 | (void) printf(" -port - overrides 17725 default port in "
646 | "External Mode, valid range 256 to 65535.\n");
647 | }
648 |
649 | /* This function is added by JW to read the external inputs from Bladed */
650 | float* SetParams(float *avrSwap)
651 | {
652 | char mystring [200];
653 | int iStatus;
654 |
655 | iStatus = NINT(avrSwap[0]);
656 |
657 | if (iStatus == 0)
658 | {
659 | pFile = fopen ("discon.in","r");
660 | if (pFile == NULL) {avrSwap[128]=1;}
661 | else {
662 | fgets (mystring , 200 , pFile);
663 | avrSwap[119]=atof(mystring);
664 | fgets (mystring , 200 , pFile);
665 | avrSwap[120]=atof(mystring);
666 | fgets (mystring , 200 , pFile);
667 | avrSwap[121]=atof(mystring);
668 | fgets (mystring , 200 , pFile);
669 | avrSwap[122]=atof(mystring);
670 | fgets (mystring , 200 , pFile);
671 | avrSwap[123]=atof(mystring);
672 | fgets (mystring , 200 , pFile);
673 | avrSwap[124]=atof(mystring);
674 | fgets (mystring , 200 , pFile);
675 | avrSwap[125]=atof(mystring);
676 | fgets (mystring , 200 , pFile);
677 | avrSwap[126]=atof(mystring);
678 | fgets (mystring , 200 , pFile);
679 | avrSwap[127]=atof(mystring);
680 | fgets (mystring , 200 , pFile);
681 | avrSwap[128]=atof(mystring);
682 | fgets (mystring , 200 , pFile);
683 | avrSwap[129]=atof(mystring);
684 | fgets (mystring , 200 , pFile);
685 | avrSwap[130]=atof(mystring);
686 | fgets (mystring , 200 , pFile);
687 | avrSwap[131]=atof(mystring);
688 | fgets (mystring , 200 , pFile);
689 | avrSwap[132]=atof(mystring);
690 | fgets (mystring , 200 , pFile);
691 | avrSwap[133]=atof(mystring);
692 | fgets (mystring , 200 , pFile);
693 | avrSwap[134]=atof(mystring);
694 | fgets (mystring , 200 , pFile);
695 | avrSwap[135]=atof(mystring);
696 | fgets (mystring , 200 , pFile);
697 | avrSwap[136]=atof(mystring);
698 | fgets (mystring , 200 , pFile);
699 | avrSwap[137]=atof(mystring);
700 | fgets (mystring , 200 , pFile);
701 | avrSwap[138]=atof(mystring);
702 | fclose (pFile);
703 | }
704 | }
705 | return(avrSwap);
706 | }
707 |
708 | /*===================*
709 | * Visible functions *
710 | *===================*/
711 |
712 |
713 | /* Function: main =============================================================
714 | *
715 | * Abstract:
716 | * Execute model on a generic target such as a workstation.
717 | */
718 | void __declspec(dllexport) __cdecl DISCON(float *avrSwap, int *aviFail, char *accInfile, char *avcOutname, char *avcMsg)
719 | {
720 | int iStatus, iFirstLog;
721 | char errorMsg[257], OutName[1025];// inFile[257];
722 | float rTime, rSample, rGeneratorSpeed, rRatedSpeed, rBelowRatedPitch,
723 | rRotorAzimuth, rOP1RootMoment, rOP2RootMoment, rOP3RootMoment, rIP1RootMoment, rIP2RootMoment, rIP3RootMoment,
724 | rForeAftTower, rSideTower, rMeasuredPitch, rMeasuredTorque, rShaftTorque,
725 | rModeGain, rInit, rUserVar1, rUserVar2, rUserVar3, rUserVar4, rUserVar5, rUserVar6, rUserVar7, rUserVar8, rUserVar9, rUserVar10,
726 | rUserVar11,rUserVar12,rUserVar13,rUserVar14,rUserVar15,rUserVar16,rUserVar17,rUserVar18,rUserVar19,rUserVar20,rYawError,rYawBearingRate,rElectricalPower;
727 | static float rTorqueDemand, rPitchDemand, rBlade1Pitch, rBlade2Pitch,
728 | rBlade3Pitch, rYawRate, rLog1,rLog2,rLog3,rLog4,rLog5,rLog6,rLog7,rLog8,rLog9,rLog10,rLog11,rLog12,rLog13,rLog14,rLog15,rLog16,rLog17,rLog18,rLog19,rLog20;
729 |
730 | /* Take local copies of strings */
731 | //memcpy(inFile, accInfile, NINT(avrSwap[49]));
732 | //inFile[NINT(avrSwap[49])+1] = '\0';
733 | //memcpy(outName, avcOutname, NINT(avrSwap[50]));
734 | //outName[NINT(avrSwap[50])+1] = '\0';
735 |
736 | /* Set message to blank */
737 | memset(errorMsg, ' ', 257);
738 |
739 | /* Set constants JW turned this on, see function just above this call*/
740 | SetParams(avrSwap); /*PF disable this call for Labview's sake*/
741 |
742 | /* Load variables from Bladed (See Appendix A) */
743 | iStatus = NINT(avrSwap[0]);
744 | rInit = avrSwap[0];
745 | rUserVar1 = avrSwap[119];
746 | rUserVar2 = avrSwap[120];
747 | rUserVar3 = avrSwap[121];
748 | rUserVar4 = avrSwap[122];
749 | rUserVar5 = avrSwap[123];
750 | rUserVar6 = avrSwap[124];
751 | rUserVar7 = avrSwap[125];
752 | rUserVar8 = avrSwap[126];
753 | rUserVar9 = avrSwap[127];
754 | rUserVar10 = avrSwap[128];
755 | rUserVar11 = avrSwap[129];
756 | rUserVar12 = avrSwap[130];
757 | rUserVar13 = avrSwap[131];
758 | rUserVar14 = avrSwap[132];
759 | rUserVar15 = avrSwap[133];
760 | rUserVar16 = avrSwap[134];
761 | rUserVar17 = avrSwap[135];
762 | rUserVar18 = avrSwap[136];
763 | rUserVar19 = avrSwap[137];
764 | rUserVar20 = avrSwap[138];
765 | rTime = avrSwap[1];
766 | rSample = avrSwap[2];
767 | rMeasuredPitch = avrSwap[3];
768 | rBelowRatedPitch = avrSwap[4];
769 | rModeGain = avrSwap[15];
770 | rRatedSpeed = avrSwap[18];
771 | rGeneratorSpeed = avrSwap[19];
772 | rMeasuredTorque = avrSwap[22]; /* this was number 22 but I believe it should be 108 but that is the LSS Torque */
773 | rShaftTorque = avrSwap[108];
774 | rOP1RootMoment = avrSwap[29];
775 | rOP2RootMoment = avrSwap[30];
776 | rOP3RootMoment = avrSwap[31];
777 | rIP1RootMoment = avrSwap[68];
778 | rIP2RootMoment = avrSwap[69];
779 | rIP3RootMoment = avrSwap[70];
780 | rForeAftTower = avrSwap[52];
781 | rSideTower = avrSwap[53];
782 | rRotorAzimuth = avrSwap[59];
783 | rYawError = avrSwap[23];
784 | rYawBearingRate = avrSwap[162];
785 | rElectricalPower = avrSwap[14];
786 |
787 | /* determine iStatus */
788 | aviFail[0] = 0;
789 | if (iStatus == 0) {
790 |
791 | /* Initialize Controller */
792 | aviFail[0] = initiateController(errorMsg);
793 |
794 | aviFail[0] = calcOutputController(rUserVar1, rUserVar2, rUserVar3, rUserVar4, rUserVar5,rUserVar6, rUserVar7, rUserVar8, rUserVar9, rUserVar10,
795 | rUserVar11,rUserVar12,rUserVar13,rUserVar14,rUserVar15,rUserVar16,rUserVar17,rUserVar18,rUserVar19,rUserVar20, rInit, rGeneratorSpeed, rRatedSpeed,
796 | rBelowRatedPitch, rForeAftTower, rSideTower,
797 | rRotorAzimuth, rOP1RootMoment, rOP2RootMoment,
798 | rOP3RootMoment, rIP1RootMoment, rIP2RootMoment,
799 | rIP3RootMoment, rMeasuredPitch, rMeasuredTorque, rShaftTorque,
800 | rModeGain, rYawError, rYawBearingRate, rElectricalPower, &rTorqueDemand, &rBlade1Pitch,
801 | &rBlade2Pitch, &rBlade3Pitch, &rPitchDemand, &errorMsg, &rYawRate,
802 | &rLog1,&rLog2,&rLog3,&rLog4,&rLog5,&rLog6,&rLog7,&rLog8,&rLog9,&rLog10,&rLog11,&rLog12,&rLog13,&rLog14,&rLog15,&rLog16,&rLog17,&rLog18,&rLog19,&rLog20);
803 |
804 |
805 | rPitchDemand = rMeasuredPitch;
806 | rTorqueDemand = rMeasuredTorque;
807 | sprintf(errorMsg, "Controller initialization complete");
808 | }
809 | else if (iStatus >= 0) {
810 | /* Main calculation */
811 | aviFail[0] = calcOutputController(rUserVar1, rUserVar2, rUserVar3, rUserVar4, rUserVar5,rUserVar6, rUserVar7, rUserVar8, rUserVar9, rUserVar10,
812 | rUserVar11,rUserVar12,rUserVar13,rUserVar14,rUserVar15,rUserVar16,rUserVar17,rUserVar18,rUserVar19,rUserVar20, rInit, rGeneratorSpeed, rRatedSpeed,
813 | rBelowRatedPitch, rForeAftTower, rSideTower,
814 | rRotorAzimuth, rOP1RootMoment, rOP2RootMoment,
815 | rOP3RootMoment, rIP1RootMoment, rIP2RootMoment,
816 | rIP3RootMoment, rMeasuredPitch, rMeasuredTorque, rShaftTorque,
817 | rModeGain, rYawError, rYawBearingRate, rElectricalPower, &rTorqueDemand, &rBlade1Pitch,
818 | &rBlade2Pitch, &rBlade3Pitch, &rPitchDemand, &errorMsg, &rYawRate,
819 | &rLog1,&rLog2,&rLog3,&rLog4,&rLog5,&rLog6,&rLog7,&rLog8,&rLog9,&rLog10,&rLog11,&rLog12,&rLog13,&rLog14,&rLog15,&rLog16,&rLog17,&rLog18,&rLog19,&rLog20);
820 | }
821 | else if (iStatus == -1) {
822 | /* Main calculation */
823 | aviFail[0] = calcOutputController(rUserVar1, rUserVar2, rUserVar3, rUserVar4, rUserVar5,rUserVar6, rUserVar7, rUserVar8, rUserVar9, rUserVar10,
824 | rUserVar11,rUserVar12,rUserVar13,rUserVar14,rUserVar15,rUserVar16,rUserVar17,rUserVar18,rUserVar19,rUserVar20, rInit, rGeneratorSpeed, rRatedSpeed,
825 | rBelowRatedPitch, rForeAftTower, rSideTower,
826 | rRotorAzimuth, rOP1RootMoment, rOP2RootMoment,
827 | rOP3RootMoment, rIP1RootMoment, rIP2RootMoment,
828 | rIP3RootMoment, rMeasuredPitch, rMeasuredTorque, rShaftTorque,
829 | rModeGain, rYawError, rYawBearingRate, rElectricalPower, &rTorqueDemand, &rBlade1Pitch,
830 | &rBlade2Pitch, &rBlade3Pitch, &rPitchDemand, &errorMsg, &rYawRate,
831 | &rLog1,&rLog2,&rLog3,&rLog4,&rLog5,&rLog6,&rLog7,&rLog8,&rLog9,&rLog10,&rLog11,&rLog12,&rLog13,&rLog14,&rLog15,&rLog16,&rLog17,&rLog18,&rLog19,&rLog20);
832 |
833 | /* Perform Cleanup */
834 | aviFail[0] = performCleanup(errorMsg);
835 | }
836 | else {
837 | aviFail[0] = -1;
838 | sprintf(errorMsg, "iStatus is not recognized: %d", iStatus);
839 | }
840 |
841 | /* Store variables to Bladed (See Appendix A) */
842 | avrSwap[9] = 0; /* Pitch Angle */
843 | avrSwap[27] = 1; /* Individual Pitch control */
844 | avrSwap[34] = 1; /* Generator contactor status */
845 | avrSwap[35] = 0; /* Shaft brake status: 0=off */
846 | avrSwap[40] = 0; /* Demanded yaw actuator torque */
847 | avrSwap[41] = rBlade1Pitch; /* Blade 1 pitch angle demand */
848 | avrSwap[42] = rBlade2Pitch; /* Blade 2 pitch angle demand */
849 | avrSwap[43] = rBlade3Pitch; /* Blade 3 pitch angle demand */
850 | avrSwap[44] = rPitchDemand; /* Pitch angle demand CPC*/
851 | avrSwap[46] = rTorqueDemand; /* Generator torque demand */
852 | avrSwap[47] = rYawRate; /* Demanded nacelle yaw rate */
853 | avrSwap[54] = 0; /* Pitch override */
854 | avrSwap[55] = 0; /* Torque override */
855 | avrSwap[71] = 0; /* Generator start-up resistance */
856 | avrSwap[78] = 1; /* Request for loads: 0=none */
857 | avrSwap[79] = 0; /* Variable slip current status */
858 | avrSwap[80] = 0; /* Variable slip current demand */
859 |
860 | // To read the log variables in bladed (JW)
861 | avrSwap[64] =0; /* Number of variables returned for logging */
862 | iFirstLog = NINT(avrSwap[62])-1; //added also this iFirstLog as an integer
863 | strcpy(OutName, "Log1:-;Log2:-;Log3:-;Log4:-;Log5:-;Log6:-;Log7:-;Log8:-;Log9:-;Log10:-;Log11:-;Log12:-;Log13:-;Log14:-;Log15:-;Log16:-;Log17:-;Log18:-;Log19:-;Log20:-;"); //Names and units
864 | avrSwap[iFirstLog] =rLog1; /*avrSwap[144] = rLog1;*/
865 | avrSwap[iFirstLog+1] =rLog2; /*avrSwap[144] = rLog2;*/
866 | avrSwap[iFirstLog+2] =rLog3; /*avrSwap[144] = rLog3;*/
867 | avrSwap[iFirstLog+3] =rLog4; /*avrSwap[144] = rLog4;*/
868 | avrSwap[iFirstLog+4] =rLog5; /*avrSwap[144] = rLog5;*/
869 | avrSwap[iFirstLog+5] =rLog6; /*avrSwap[144] = rLog6;*/
870 | avrSwap[iFirstLog+6] =rLog7; /*avrSwap[144] = rLog7;*/
871 | avrSwap[iFirstLog+7] =rLog8; /*avrSwap[144] = rLog8;*/
872 | avrSwap[iFirstLog+8] =rLog9; /*avrSwap[144] = rLog9;*/
873 | avrSwap[iFirstLog+9] =rLog10; /*avrSwap[144] = rLog10;*/
874 | avrSwap[iFirstLog+10] =rLog11; /*avrSwap[144] = rLog11;*/
875 | avrSwap[iFirstLog+11] =rLog12; /*avrSwap[144] = rLog12;*/
876 | avrSwap[iFirstLog+12] =rLog13; /*avrSwap[144] = rLog13;*/
877 | avrSwap[iFirstLog+13] =rLog14; /*avrSwap[144] = rLog14;*/
878 | avrSwap[iFirstLog+14] =rLog15; /*avrSwap[144] = rLog15;*/
879 | avrSwap[iFirstLog+15] =rLog16; /*avrSwap[144] = rLog16;*/
880 | avrSwap[iFirstLog+16] =rLog17; /*avrSwap[144] = rLog17;*/
881 | avrSwap[iFirstLog+17] =rLog18; /*avrSwap[144] = rLog18;*/
882 | avrSwap[iFirstLog+18] =rLog19; /*avrSwap[144] = rLog19;*/
883 | avrSwap[iFirstLog+19] =rLog20; /*avrSwap[144] = rLog20;*/
884 |
885 | //Return strings
886 | memcpy(avcOutname,OutName, NINT(avrSwap[63]));
887 | memcpy(avcMsg,errorMsg,MIN(256,NINT(avrSwap[48])));
888 |
889 | return;
890 | }
891 | /* end DISON */
892 |
893 |
894 |
895 | /* EOF: discon_main.c */
896 |
--------------------------------------------------------------------------------
/Simulink_64bit/discon_vc.tmf:
--------------------------------------------------------------------------------
1 | # Copyright 1994-2014 The MathWorks, Inc.
2 | #
3 | # File : discon_vc.tmf $Revision: 1.71.4.31 $
4 | #
5 | # Abstract:
6 | # Template makefile for building a Windows-based stand-alone generic
7 | # real-time version of Simulink model using generated C code and the
8 |
9 | # Microsoft Visual C/C++ compiler versions: 6.0, 7.1, 8.0
10 | #
11 | # Note that this template is automatically customized by the build
12 | # procedure to create ".mk"
13 | #
14 | # The following defines can be used to modify the behavior of the
15 | # build:
16 | #
17 | # OPT_OPTS - Optimization option. See DEFAULT_OPT_OPTS in
18 | # vctools.mak for default.
19 | # OPTS - User specific options.
20 | # CPP_OPTS - C++ compiler options.
21 | # USER_SRCS - Additional user sources, such as files needed by
22 | # S-functions.
23 | # USER_INCLUDES - Additional include paths
24 | # (i.e. USER_INCLUDES="-Iwhere-ever -Iwhere-ever2")
25 | #
26 | # To enable debugging:
27 | # set DEBUG_BUILD = 1, which will trigger OPTS=-Zi (may vary with
28 | # compiler version, see compiler doc)
29 | #
30 | # This template makefile is designed to be used with a system target
31 | # file that contains 'rtwgensettings.BuildDirSuffix' see grt.tlc
32 |
33 |
34 | #------------------------ Macros read by make_rtw -----------------------------
35 | #
36 | # The following macros are read by the build procedure:
37 | #
38 | # MAKECMD - This is the command used to invoke the make utility
39 | # HOST - What platform this template makefile is targeted for
40 | # (i.e. PC or UNIX)
41 | # BUILD - Invoke make from the build procedure (yes/no)?
42 | # SYS_TARGET_FILE - Name of system target file.
43 |
44 | MAKECMD = nmake
45 | HOST = PC
46 | BUILD = yes
47 | SYS_TARGET_FILE = discon.tlc
48 | BUILD_SUCCESS = ^#^#^# Created
49 | COMPILER_TOOL_CHAIN = vc
50 |
51 | #---------------------- Tokens expanded by make_rtw ---------------------------
52 | #
53 | # The following tokens, when wrapped with "|>" and "<|" are expanded by the
54 | # build procedure.
55 | #
56 | # MODEL_NAME - Name of the Simulink block diagram
57 | # MODEL_MODULES - Any additional generated source modules
58 | # MAKEFILE_NAME - Name of makefile created from template makefile .mk
59 | # MATLAB_ROOT - Path to where MATLAB is installed.
60 | # MATLAB_BIN - Path to MATLAB executable.
61 | # S_FUNCTIONS - List of S-functions.
62 | # S_FUNCTIONS_LIB - List of S-functions libraries to link.
63 | # SOLVER - Solver source file name
64 | # NUMST - Number of sample times
65 | # TID01EQ - yes (1) or no (0): Are sampling rates of continuous task
66 | # (tid=0) and 1st discrete task equal.
67 | # NCSTATES - Number of continuous states
68 | # BUILDARGS - Options passed in at the command line.
69 | # MULTITASKING - yes (1) or no (0): Is solver mode multitasking
70 | # MAT_FILE - yes (1) or no (0): Should mat file logging be done
71 | # EXT_MODE - yes (1) or no (0): Build for external mode
72 | # TMW_EXTMODE_TESTING - yes (1) or no (0): Build ext_test.c for external mode
73 | # testing.
74 | # EXTMODE_TRANSPORT - Index of transport mechanism (e.g. tcpip, serial) for extmode
75 | # EXTMODE_STATIC - yes (1) or no (0): Use static instead of dynamic mem alloc.
76 | # EXTMODE_STATIC_SIZE - Size of static memory allocation buffer.
77 | # MEX_OPT_FILE - mex option file name
78 | # VISUAL_VER - Visual C++ version information
79 |
80 | MODEL = |>MODEL_NAME<|
81 | MODULES = |>MODEL_MODULES<|
82 | MAKEFILE = |>MAKEFILE_NAME<|
83 | MATLAB_ROOT = |>MATLAB_ROOT<|
84 | ALT_MATLAB_ROOT = |>ALT_MATLAB_ROOT<|
85 | MATLAB_BIN = |>MATLAB_BIN<|
86 | ALT_MATLAB_BIN = |>ALT_MATLAB_BIN<|
87 | MASTER_ANCHOR_DIR = |>MASTER_ANCHOR_DIR<|
88 | START_DIR = |>START_DIR<|
89 | S_FUNCTIONS = |>S_FUNCTIONS<|
90 | S_FUNCTIONS_LIB = |>S_FUNCTIONS_LIB<|
91 | NUMST = |>NUMST<|
92 | TID01EQ = |>TID01EQ<|
93 | NCSTATES = |>NCSTATES<|
94 | BUILDARGS = |>BUILDARGS<|
95 | MULTITASKING = |>MULTITASKING<|
96 | MAT_FILE = |>MAT_FILE<|
97 | EXT_MODE = |>EXT_MODE<|
98 | TMW_EXTMODE_TESTING = |>TMW_EXTMODE_TESTING<|
99 | EXTMODE_TRANSPORT = |>EXTMODE_TRANSPORT<|
100 | EXTMODE_STATIC = |>EXTMODE_STATIC_ALLOC<|
101 | EXTMODE_STATIC_SIZE = |>EXTMODE_STATIC_ALLOC_SIZE<|
102 |
103 | CODE_INTERFACE_PACKAGING = |>CODE_INTERFACE_PACKAGING<|
104 |
105 | CLASSIC_INTERFACE = |>CLASSIC_INTERFACE<|
106 | # Optional for GRT
107 | ALLOCATIONFCN = |>GENERATE_ALLOC_FCN<|
108 | ONESTEPFCN = |>COMBINE_OUTPUT_UPDATE_FCNS<|
109 | TERMFCN = 1
110 | MULTI_INSTANCE_CODE = |>MULTI_INSTANCE_CODE<|
111 |
112 | MODELREFS = |>MODELREFS<|
113 | SHARED_SRC = |>SHARED_SRC<|
114 | SHARED_SRC_DIR = |>SHARED_SRC_DIR<|
115 | SHARED_BIN_DIR = |>SHARED_BIN_DIR<|
116 | SHARED_LIB = |>SHARED_LIB<|
117 | TARGET_LANG_EXT = |>TARGET_LANG_EXT<|
118 | MEX_OPT_FILE = |>MEX_OPT_FILE<|
119 | VISUAL_VER = |>VISUAL_VER<|
120 | OPTIMIZATION_FLAGS = |>OPTIMIZATION_FLAGS<|
121 | ADDITIONAL_LDFLAGS = |>ADDITIONAL_LDFLAGS<|
122 |
123 | # To enable debugging:
124 | # set DEBUG_BUILD = 1
125 | DEBUG_BUILD = 0
126 |
127 | #--------------------------- Model and reference models -----------------------
128 | MODELLIB = |>MODELLIB<|
129 | MODELREF_LINK_LIBS = |>MODELREF_LINK_LIBS<|
130 | MODELREF_LINK_RSPFILE = |>MODELREF_LINK_RSPFILE_NAME<|
131 | MODELREF_INC_PATH = |>START_MDLREFINC_EXPAND_INCLUDES<|-I|>MODELREF_INC_PATH<| |>END_MDLREFINC_EXPAND_INCLUDES<|
132 | RELATIVE_PATH_TO_ANCHOR = |>RELATIVE_PATH_TO_ANCHOR<|
133 | MODELREF_TARGET_TYPE = |>MODELREF_TARGET_TYPE<|
134 |
135 | !if "$(MATLAB_ROOT)" != "$(ALT_MATLAB_ROOT)"
136 | MATLAB_ROOT = $(ALT_MATLAB_ROOT)
137 | !endif
138 | !if "$(MATLAB_BIN)" != "$(ALT_MATLAB_BIN)"
139 | MATLAB_BIN = $(ALT_MATLAB_BIN)
140 | !endif
141 |
142 | #--------------------------- Tool Specifications ------------------------------
143 |
144 | !include $(MATLAB_ROOT)\rtw\c\tools\vctools.mak
145 |
146 | PERL = $(MATLAB_ROOT)\sys\perl\win32\bin\perl
147 | #------------------------------ Include/Lib Path ------------------------------
148 |
149 | MATLAB_INCLUDES = $(MATLAB_ROOT)\simulink\include
150 | MATLAB_INCLUDES = $(MATLAB_INCLUDES);$(MATLAB_ROOT)\extern\include
151 | MATLAB_INCLUDES = $(MATLAB_INCLUDES);$(MATLAB_ROOT)\rtw\c\src
152 | MATLAB_INCLUDES = $(MATLAB_INCLUDES);$(MATLAB_ROOT)\rtw\c\src\ext_mode\common
153 |
154 | # Additional file include paths
155 | |>START_EXPAND_INCLUDES<|
156 | MATLAB_INCLUDES = $(MATLAB_INCLUDES);|>EXPAND_DIR_NAME<||>END_EXPAND_INCLUDES<|
157 |
158 | INCLUDE = .;$(RELATIVE_PATH_TO_ANCHOR);$(MATLAB_INCLUDES);$(INCLUDE)
159 |
160 | !if "$(SHARED_SRC_DIR)" != ""
161 | INCLUDE = $(INCLUDE);$(SHARED_SRC_DIR)
162 | !endif
163 |
164 | #------------------------ External mode ---------------------------------------
165 | # Uncomment -DVERBOSE to have information printed to stdout
166 | # To add a new transport layer, see the comments in
167 | # /toolbox/simulink/simulink/extmode_transports.m
168 | !if $(EXT_MODE) == 1
169 | EXT_CC_OPTS = -DEXT_MODE # -DVERBOSE
170 | !if $(EXTMODE_TRANSPORT) == 0 #tcpip
171 | EXT_SRC = ext_svr.c updown.c ext_work.c rtiostream_interface.c rtiostream_tcpip.c
172 | EXT_LIB = wsock32.lib
173 | !endif
174 | !if $(EXTMODE_TRANSPORT) == 1 #serial_win32
175 | EXT_SRC = ext_svr.c updown.c ext_work.c ext_svr_serial_transport.c
176 | EXT_SRC = $(EXT_SRC) ext_serial_pkt.c rtiostream_serial_interface.c rtiostream_serial.c
177 | EXT_LIB =
178 | !endif
179 | !if $(TMW_EXTMODE_TESTING) == 1
180 | EXT_SRC = $(EXT_SRC) ext_test.c
181 | EXT_CC_OPTS = $(EXT_CC_OPTS) -DTMW_EXTMODE_TESTING
182 | !endif
183 | !if $(EXTMODE_STATIC) == 1
184 | EXT_SRC = $(EXT_SRC) mem_mgr.c
185 | EXT_CC_OPTS = $(EXT_CC_OPTS) -DEXTMODE_STATIC -DEXTMODE_STATIC_SIZE=$(EXTMODE_STATIC_SIZE)
186 | !endif
187 | !else
188 | EXT_SRC =
189 | EXT_CC_OPTS =
190 | EXT_LIB =
191 | !endif
192 |
193 | #------------------------ rtModel ----------------------------------------------
194 |
195 | RTM_CC_OPTS = -DUSE_RTMODEL
196 |
197 | #----------------- Compiler and Linker Options --------------------------------
198 |
199 | # Optimization Options
200 | OPT_OPTS = $(DEFAULT_OPT_OPTS)
201 |
202 | # General User Options
203 | !if "$(DEBUG_BUILD)" == "0"
204 | DBG_FLAG =
205 | !else
206 | # Set OPT_OPTS=-Zi and any additional flags for debugging
207 | DBG_FLAG = -Zi
208 | !endif
209 |
210 | !if "$(OPTIMIZATION_FLAGS)" != ""
211 | CC_OPTS = $(OPTS) $(EXT_CC_OPTS) $(RTM_CC_OPTS) $(OPTIMIZATION_FLAGS)
212 | !else
213 | CC_OPTS = $(OPT_OPTS) $(OPTS) $(EXT_CC_OPTS) $(RTM_CC_OPTS)
214 | !endif
215 | CPP_REQ_DEFINES = -DMODEL=$(MODEL) -DRT -DNUMST=$(NUMST) \
216 | -DTID01EQ=$(TID01EQ) -DNCSTATES=$(NCSTATES) \
217 | -DMT=$(MULTITASKING) -DHAVESTDIO -DMAT_FILE=$(MAT_FILE) \
218 | -DONESTEPFCN=$(ONESTEPFCN) -DTERMFCN=$(TERMFCN) \
219 | -DMULTI_INSTANCE_CODE=$(MULTI_INSTANCE_CODE) \
220 | -DCLASSIC_INTERFACE=$(CLASSIC_INTERFACE) \
221 | -DALLOCATIONFCN=$(ALLOCATIONFCN)
222 |
223 | # Uncomment this line to move warning level to W4
224 | # cflags = $(cflags:W3=W4)
225 | CFLAGS = $(MODELREF_INC_PATH) $(cflags) $(cvarsmt) $(CFLAGS_VERSPECIFIC)\
226 | $(DBG_FLAG) $(CC_OPTS) $(CPP_REQ_DEFINES) $(USER_INCLUDES)
227 | CPPFLAGS = $(MODELREF_INC_PATH) $(cflags) $(cvarsmt) $(CPPFLAGS_VERSPECIFIC)\
228 | $(DBG_FLAG) $(CPP_OPTS) $(CC_OPTS) $(CPP_REQ_DEFINES) $(USER_INCLUDES)
229 | LDFLAGS = $(ldebug) $(conflags) $(EXT_LIB) $(conlibsmt) libcpmt.lib $(ADDITIONAL_LDFLAGS)
230 |
231 |
232 | # libcpmt.lib is the multi-threaded, static lib version of the C++ standard lib
233 |
234 | #----------------------------- Source Files -----------------------------------
235 |
236 |
237 | #Dynamic library
238 | !if "$(MODELREF_TARGET_TYPE)" == "NONE"
239 | PRODUCT = $(RELATIVE_PATH_TO_ANCHOR)\DISCON.dll
240 |
241 | !if "$(CLASSIC_INTERFACE)" == "1"
242 | MAIN_SRC = classic_main.c
243 | OTHER_SRC = rt_sim.c
244 | !else
245 | !if "$(MULTI_INSTANCE_CODE)" == "1"
246 | !if "$(CODE_INTERFACE_PACKAGING)" == "C++ class"
247 | MAIN_SRC = rt_cppclass_main.cpp
248 | !else
249 | MAIN_SRC = rt_malloc_main.c
250 | !endif
251 | !else
252 | MAIN_SRC = rt_main.c
253 | !endif
254 | OTHER_SRC =
255 | !endif
256 | REQ_SRCS = $(MODEL).$(TARGET_LANG_EXT) $(MODULES) \
257 | discon_main.c rt_sim.c $(EXT_SRC)
258 |
259 | #Model Reference Target
260 | !else
261 | PRODUCT = $(MODELLIB)
262 | REQ_SRCS = $(MODULES)
263 | !endif
264 |
265 | USER_SRCS =
266 |
267 | SRCS = $(REQ_SRCS) $(USER_SRCS) $(S_FUNCTIONS)
268 | OBJS_CPP_UPPER = $(SRCS:.CPP=.obj)
269 | OBJS_CPP_LOWER = $(OBJS_CPP_UPPER:.cpp=.obj)
270 | OBJS_C_UPPER = $(OBJS_CPP_LOWER:.C=.obj)
271 | OBJS = $(OBJS_C_UPPER:.c=.obj)
272 | SHARED_OBJS = $(SHARED_BIN_DIR)\*.obj
273 | # ------------------------- Additional Libraries ------------------------------
274 |
275 | LIBS =
276 | |>START_PRECOMP_LIBRARIES<|
277 | !if "$(OPT_OPTS)" == "$(DEFAULT_OPT_OPTS)"
278 | LIBS = $(LIBS) |>EXPAND_LIBRARY_LOCATION<|\|>EXPAND_LIBRARY_NAME<|_vc.lib
279 | !else
280 | LIBS = $(LIBS) |>EXPAND_LIBRARY_NAME<|.lib
281 | !endif |>END_PRECOMP_LIBRARIES<|
282 | |>START_EXPAND_LIBRARIES<|
283 | LIBS = $(LIBS) |>EXPAND_LIBRARY_NAME<|.lib |>END_EXPAND_LIBRARIES<|
284 | LIBS = $(LIBS)
285 |
286 | # ---------------------------- Linker Script ----------------------------------
287 |
288 | CMD_FILE = $(MODEL).lnk
289 | GEN_LNK_SCRIPT = $(MATLAB_ROOT)\rtw\c\tools\mkvc_lnk.pl
290 |
291 | #--------------------------------- Rules --------------------------------------
292 | all: set_environment_variables $(PRODUCT)
293 |
294 | !if "$(MODELREF_TARGET_TYPE)" == "NONE"
295 | #--- Stand-alone model ---
296 | $(PRODUCT) : $(OBJS) $(SHARED_LIB) $(LIBS) $(MODELREF_LINK_LIBS)
297 | @cmd /C "echo ### Linking ..."
298 | $(PERL) $(GEN_LNK_SCRIPT) $(CMD_FILE) $(OBJS)
299 | $(LD) /DLL $(LDFLAGS) $(S_FUNCTIONS_LIB) $(SHARED_LIB) $(LIBS) $(MAT_LIBS) @$(CMD_FILE) @$(MODELREF_LINK_RSPFILE) -out:$@
300 | @del $(CMD_FILE)
301 | @cmd /C "echo $(BUILD_SUCCESS) dynamic library DISCON.dll"
302 | !else
303 | #--- Model reference Coder Target ---
304 | $(PRODUCT) : $(OBJS) $(SHARED_LIB)
305 | @cmd /C "echo ### Linking ..."
306 | $(PERL) $(GEN_LNK_SCRIPT) $(CMD_FILE) $(OBJS)
307 | $(LD) -lib /OUT:$(MODELLIB) @$(CMD_FILE) $(S_FUNCTIONS_LIB)
308 | @cmd /C "echo $(BUILD_SUCCESS) static library $(MODELLIB)"
309 | !endif
310 |
311 | !if "$(CLASSIC_INTERFACE)" == "1"
312 | !if "$(TARGET_LANG_EXT)" == "cpp"
313 | {$(MATLAB_ROOT)\rtw\c\grt}.c.obj :
314 | @cmd /C "echo ### Compiling $<"
315 | $(CC) /TP $(CPPFLAGS) $<
316 | !else
317 | {$(MATLAB_ROOT)\rtw\c\grt}.c.obj :
318 | @cmd /C "echo ### Compiling $<"
319 | $(CC) $(CFLAGS) $<
320 | !endif
321 | !else
322 | !if "$(TARGET_LANG_EXT)" == "cpp"
323 | {$(MATLAB_ROOT)\rtw\c\src\common}.cpp.obj :
324 | @cmd /C "echo ### Compiling $<"
325 | $(CC) /TP $(CPPFLAGS) $<
326 |
327 | {$(MATLAB_ROOT)\rtw\c\src\common}.c.obj :
328 | @cmd /C "echo ### Compiling $<"
329 | $(CC) /TP $(CPPFLAGS) $<
330 | !else
331 | {$(MATLAB_ROOT)\rtw\c\src\common}.c.obj :
332 | @cmd /C "echo ### Compiling $<"
333 | $(CC) $(CFLAGS) $<
334 | !endif
335 | !endif
336 |
337 | {$(MATLAB_ROOT)\rtw\c\src}.c.obj :
338 | @cmd /C "echo ### Compiling $<"
339 | $(CC) $(CFLAGS) $<
340 |
341 | {$(MATLAB_ROOT)\rtw\c\src\ext_mode\common}.c.obj :
342 | @cmd /C "echo ### Compiling $<"
343 | $(CC) $(CFLAGS) $<
344 |
345 | {$(MATLAB_ROOT)\rtw\c\src\rtiostream\rtiostreamtcpip}.c.obj :
346 | @cmd /C "echo ### Compiling $<"
347 | $(CC) $(CFLAGS) $<
348 |
349 | {$(MATLAB_ROOT)\rtw\c\src\ext_mode\serial}.c.obj :
350 | @cmd /C "echo ### Compiling $<"
351 | $(CC) $(CFLAGS) $<
352 |
353 | {$(MATLAB_ROOT)\rtw\c\src\ext_mode\custom}.c.obj :
354 | @cmd /C "echo ### Compiling $<"
355 | $(CC) $(CFLAGS) $<
356 |
357 | # Additional sources
358 |
359 | |>START_EXPAND_RULES<|{|>EXPAND_DIR_NAME<|}.c.obj :
360 | @cmd /C "echo ### Compiling $<"
361 | $(CC) $(CFLAGS) $<
362 |
363 | |>END_EXPAND_RULES<|
364 |
365 | |>START_EXPAND_RULES<|{|>EXPAND_DIR_NAME<|}.cpp.obj :
366 | @cmd /C "echo ### Compiling $<"
367 | $(CC) $(CPPFLAGS) $<
368 |
369 | |>END_EXPAND_RULES<|
370 |
371 | # Look in simulink/src helper files
372 |
373 | {$(MATLAB_ROOT)\simulink\src}.c.obj :
374 | @cmd /C "echo ### Compiling $<"
375 | $(CC) $(CFLAGS) $<
376 |
377 | {$(MATLAB_ROOT)\simulink\src}.cpp.obj :
378 | @cmd /C "echo ### Compiling $<"
379 | $(CC) $(CPPFLAGS) $<
380 |
381 | # Put these rule last, otherwise nmake will check toolboxes first
382 |
383 | {$(RELATIVE_PATH_TO_ANCHOR)}.c.obj :
384 | @cmd /C "echo ### Compiling $<"
385 | $(CC) $(CFLAGS) $<
386 |
387 | {$(RELATIVE_PATH_TO_ANCHOR)}.cpp.obj :
388 | @cmd /C "echo ### Compiling $<"
389 | $(CC) $(CPPFLAGS) $<
390 |
391 | .c.obj :
392 | @cmd /C "echo ### Compiling $<"
393 | $(CC) $(CFLAGS) $<
394 |
395 | .cpp.obj :
396 | @cmd /C "echo ### Compiling $<"
397 | $(CC) $(CPPFLAGS) $<
398 |
399 | !if "$(SHARED_LIB)" != ""
400 | $(SHARED_LIB) : $(SHARED_SRC)
401 | @cmd /C "echo ### Creating $@"
402 | @$(CC) $(CFLAGS) -Fo$(SHARED_BIN_DIR)\ @<<
403 | $?
404 | <<
405 | @$(LIBCMD) /nologo /out:$@ $(SHARED_OBJS)
406 | @cmd /C "echo ### $@ Created"
407 | !endif
408 |
409 |
410 | set_environment_variables:
411 | @set INCLUDE=$(INCLUDE)
412 | @set LIB=$(LIB)
413 |
414 | # Libraries:
415 |
416 | |>START_EXPAND_LIBRARIES<|MODULES_|>EXPAND_LIBRARY_NAME<| = \
417 | |>START_EXPAND_MODULES<| |>EXPAND_MODULE_NAME<|.obj \
418 | |>END_EXPAND_MODULES<|
419 |
420 | |>EXPAND_LIBRARY_NAME<|.lib : rtw_proj.tmw $(MAKEFILE) $(MODULES_|>EXPAND_LIBRARY_NAME<|)
421 | @cmd /C "echo ### Creating $@"
422 | $(LIBCMD) /nologo /out:$@ $(MODULES_|>EXPAND_LIBRARY_NAME<|)
423 | @cmd /C "echo ### $@ Created"
424 |
425 | |>END_EXPAND_LIBRARIES<|
426 |
427 | |>START_PRECOMP_LIBRARIES<|MODULES_|>EXPAND_LIBRARY_NAME<| = \
428 | |>START_EXPAND_MODULES<| |>EXPAND_MODULE_NAME<|.obj \
429 | |>END_EXPAND_MODULES<|
430 |
431 | |>EXPAND_LIBRARY_NAME<|.lib : rtw_proj.tmw $(MAKEFILE) $(MODULES_|>EXPAND_LIBRARY_NAME<|)
432 | @cmd /C "echo ### Creating $@"
433 | $(LIBCMD) /nologo /out:$@ $(MODULES_|>EXPAND_LIBRARY_NAME<|)
434 | @cmd /C "echo ### $@ Created"
435 |
436 | |>END_PRECOMP_LIBRARIES<|
437 |
438 | #----------------------------- Dependencies -----------------------------------
439 |
440 | $(OBJS) : $(MAKEFILE) rtw_proj.tmw
441 |
--------------------------------------------------------------------------------