Для некоторых блоков математической функции вы можете замена кода системы управления на основе расчета или алгоритма аппроксимации, сконфигурированного для того блока. Например, можно сконфигурировать:
Блок Reciprocal Sqrt, чтобы использовать Newton-Raphson
или Exact
метод расчета.
Блок Trigonometric Function, с набором Function к sin
потому что
, или sincos
, использовать метод приближения CORDIC
или None
.
Можно задать заменяющие записи кода, чтобы заменить эти функции для одного или все доступных методов расчета. Например, можно задать запись, чтобы заменить только Newton-Raphson
экземпляры rSqrt
функция.
Чтобы установить алгоритм для функции в определении записи, используйте EntryInfoAlgorithm
свойство в вызове функционального setTflCFunctionEntryParameters
. В следующей таблице перечислены аргументы для определения метода расчета, чтобы соответствовать во время генерации кода.
Функция | Аргумент |
---|---|
rSqrt |
|
sin cos sincos |
|
Например, чтобы заменить только Newton-Raphson
экземпляры rSqrt
функционируйте, создайте запись можно следующим образом:
Создайте табличный файл определения, который содержит функциональное определение. Например:
function hTable = crl_rsqrt() %CRL_TABLE_RSQRT - Define function entry for code replacement table.
В теле функции составьте таблицу путем вызова функционального RTW.TflTable
.
hTable = RTW.TflTable;
Создайте запись для отображения функции с вызовом RTW.TflCFunctionEntry
функция.
% Create entry for rsqrt function replacement
fcn_entry = RTW.TflCFunctionEntry;
Параметры записи функции множества с вызовом setTflCFunctionEntryParameters
функция.
setTflCFunctionEntryParameters(fcn_entry, ... 'Key', 'rSqrt', ... 'Priority', 80, ... 'ImplementationName', 'rsqrt_newton', ... 'ImplementationHeaderFile', 'rsqrt.h', ... 'EntryInfoAlgorithm', 'RTW_NEWTON_RAPHSON');
Создайте концептуальные аргументы y1
и u1
. Этот пример использует вызовы createAndAddConceptualArg
функция, чтобы создать и добавить аргумент с одним вызовом функции.
createAndAddConceptualArg(fcn_entry, 'RTW.TflArgNumeric', ... 'Name', 'y1', ... 'IOType', 'RTW_IO_OUTPUT', ... 'DataTypeMode', 'double'); createAndAddConceptualArg(e, 'RTW.TflArgNumeric', ... 'Name', 'u1', ... 'DataTypeMode', 'double');
Скопируйте концептуальные аргументы в аргументы реализации. Этот пример использует вызов copyConceptualArgsToImplementation
функция, чтобы создать и добавить аргументы реализации в запись путем копирования соответствия с концептуальными аргументами.
copyConceptualArgsToImplementation(fcn_entry);
Добавьте запись в заменяющую таблицу кода с вызовом addEntry
функция.
addEntry(hTable, fcn_entry);
Сохраните табличный файл определения. Используйте имя табличной функции определения, чтобы назвать файл.
Сгенерированный код для Newton-Raphson
экземпляр rSqrt
функция похожа на следующий код:
/* Model step function */ void mrsqrt_step(void) { /* Outport: '<Root>/Out1' incorporates: * Inport: '<Root>/In1' * Sqrt: '<Root>/rSqrtBlk' */ mrsqrt_Y.Out1 = rsqrt_newton(mrsqrt_U.In1); }