Simulink仿真入门到精通(十八 ) TLC语言

TLC(Target Language Compiler)是一种为转换为目标语言而存在的额解释性语言,其目的就是将模型中编译出来的rtw文件转换为目标代码(C/C++等)。与M语言类似,既可以写成脚本文件,也能够作为函数存在,都是解释性语言,更相似的是它们都提供具有强大功能的内建函数库。

18.1 TLC的作用

  1. 支持模型针对通用或特定目标硬件的代码生成功能;
  2. 为S函数模块提供代码生成功能,可以让用户自己增加支持代码生成的模块;
  3. 在代码生成过程中,生成不依赖S函数模块的自定义过程代码。

Simulink中提供了很多既有TLC文件,如果擅自修改可能导致Simulink Coder功能性错误,故Mathworks提倡用户尽量不要修改TLC。但是如果能熟练掌握TLC的运行机制和编写方法,不仅不会伤害SImulink的功能,还可以巧妙利用TLC语言实现更多的自动化代码生成功能。

18.2 TLC的语法

TLC是一种以单个%打头的关键字为命令,空格之后跟参数的脚本语言,自身包含了流控制语法、内建函数、关键字和常用命令。

18.2.1 基本语法

  1. [text|%<expression>]*

    text表示字符串,将原原本本地展开到输出流中。在%<>之中的是TLC变量,通过%<>作用将变量的执行结果显示到输出流中。

  2. %keyword[arguement1,arguement2,...]

    %keyword表示TLC语言中的命令符,[arguement1,arguement2,...]则表示这个命令符所操作的参数。

如:

% assign Str = "Hello World"

%warning、%error、%trace命令可以将其后的变量或字符串的内容输出。

>> tlc text.tlc
Warning:  Simulink User

>> tlc text.tlc
Error:  Simulink User
Main program:
==> [00] text.tlc:<NONE>(1)

错误使用 tlc_new
Error: Errors occurred - aborting


出错 tlc (line 88)
  tlc_new(varargin{:});

若用%trace命令代替%warning命令显示信息,只有在执行TLC文件时在最后增加-v或者-v1才能将%trace后的信息显示出来。

TLC语言有两个内建宏TLC_TRUE=1和TLC_FALSE=0,在TLC语言的编写中会经常用到。

18.2.2 常用指令

注释

单行注释:双百分号%%

多行注释:/% comment %/

变量内容扩展

即通过%<>操作符将其内容扩展到输出流中。

%%text.tlc
%assign input1 = 3
%assign input2 = 5
%warning %<input1> + %<input2> = %<input1 + input2>
>> tlc text.tlc
Warning:  3 + 5 = 8

注意:%<>不能嵌套使用。

条件分支

%if expression
%elseif expression
%else
%endif

例:

%%text.tlc
%assign var = 2
%if ISEQUAL(var,1)
    %warning evering is OK.
%else
    %warning var should be 1 but now there is something wrong.
%endif
>> tlc text.tlc
Warning:  var should be 1 but now there is something wrong.

在内建函数ISEQUAL中不需要使用%<>。

开关分支

%switch expression
%case expression
%break
%default
%break
%endswitch

每个%case分支后必须跟%break才能起到真正的选择作用,否则将执行下一个%case语句。

%%text.tlc
%assign data = [1,2,3,4,5]
%switch TYPE(data)
%case "Number"
%warning Type is Number.
%break
%case "String"
%warning Type is String.
%break
%case "Vector"
%warning Type is Vector.
%break
%case "Matrix"
%warning Type is Matrix.
%break
%endswitch
>> tlc text.tlc
Warning:  Type is Vector.

循环

含%foreach、%roll、%for 3种常用方式。

(1)%foreach

%foreach loopIdx = iterNum
xxxxx
%endforeach

上述语句将loopIdx作为循环体句柄变量控制循环进行,从0开始,每次增加1,一直循环到iterMum-1为止。每个%foreach需要使用%endforeach来终止。

在循环体中可以使用%continue终止当前循环进入下一个循环,或者使用%break直接跳出循环。

%%text.tlc
%assign data = [1,2,3,4,5]
%foreach idx = 5
    %if ISEQUAL(idx,1)
        %continue
	%elseif ISEQUAL(idx,4)
        %break
    %endif
    %warning data[%<idx>] = %<data[idx]>
%endforeach
>> tlc text.tlc
Warning:  data[0] = 1
Warning:  data[2] = 3
Warning:  data[3] = 4

(2)%roll

%roll
%endroll
%%text.tlc
%assign data = [1,2,3,4,5]
%foreach idx = 5
    %if ISEQUAL(idx,1)
        %continue
    %elseif ISEQUAL(idx,4)
        %break
    %endif
    %warning data[%<idx>] = %<data[idx]>
%endforeach

猜你喜欢

转载自www.cnblogs.com/dingdangsunny/p/12276167.html