MATLAB TLC语言


TLC

Target Language Compiler,目标语言编译器  

[text | %]*

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

%keyword[argement1, argument2,...]

%kewword表示TLC语言中的命令符,[argument1, argument2,...]中则表示这个命令符所操作的参数

赋值

%assign Str = "Hello World";

% %assign表示其后的语句是对变量赋值

输出信息

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

%error命令只是在输出内容前自动增加error,并非warning的字样,并且会给出TLC报错信息

% 使用%trace命令代替%warning命令显示信息,在执行TLC文件时需要增加-v或-vl才能将%trace的命令给显示出来

执行

运行TLC,在命令行输入:tlc xxxx.tlc

宏定义

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

注释

%%注释

/%块注释%/

变量内容扩展(使用变量到输出流中)

%warning % + % = %

条件

%if

%else

%end

开关

%switch

%case

%break

%default

%break

%endswitch

循环

%foreach loopindex = iternum

XXXXX

%endforeach

 

//如果exp2为非零,则只执行一遍,并且对str赋值

//如果exp2为0,则执行exp1的次数,不进行赋值并且只执行%body和%endbody之间的部分

%for exp1, exp2, str = exp3

Coder section 1

%body

Coder section 2

%endbody

Coder section 3

%endfor

多维数据循环

%assign rollvars = ["U","Y","P"] //U:输入端口,Y:输出端口,P:模块参数

%roll sigindex = rollregions, lcv = rollthreshold,block,“Roller”,rollvars

//rollregions是自动计算出来的模块输入、输出或参数的维数向量

// rollthreshold表示当信号维数小于此数时不生成for循环,默认为5

%assign y = LibBlockOutputSignal(0,“”,lcv,sigindex)

%assign u = LibBlockOutputSignal(0,“”,lcv,sigindex)

% = %*2;

%endroll

文件流

%openfile buffer = “my_flow_control.txt” a/w //a:追加,w:重写

%selectfile buffer

aaaaaaaaa //会将这串文本输入到txt文件中

%closefile buffer

记录

相当于结构体

创建记录

%createrecord record{

foo1;

sunrecord{

foo2

}

}

追加记录

%addtorecord record str “i love simulink”

合并记录

%mergerecord record1 record2

拷贝记录

%copyrecord newrecord1 oldrecord1

删除记录

可删除TLC变量、记录、记录中的域(用%with和%endwith进行范围指定)

%with record

%undef foo1

%endwith

变量清除

使用undef

语句换行连接(字符串中不可使用)

C语言:换行连接符\

TLC:...

输入文件控制

%include string //搜索路径下寻找名为string的文件

%addincludepath string //添加搜索路径

搜索顺序

1、当前路径

2、所有的%addincludepath路径,依照从下到上

3、命令行中通过-I命令添加的路径

输出格式控制

使用16为精度的指数显示

%realformat “EXPONENTIAL”

无精度损失和最小字符数格式(为s函数提供生成代码功能的模块级TLC)

%realformat “EXPONENTIAL”

指定语言种类

%language "C"

%implements “Block-Type” “Language”

//Block-Type:模块的S函数名

//Language:语言种类

%implements Interupts “C”

函数

%function name(optinal - arguments) void

%return

%endfunction

SIMULINK模块和TLC联系

%generatefile “Type” “blockwise.tlc” 

//Type:rtw文件中模块的记录中Type参数的值,也即模块blocktype属性

%generatefile “Sin” “Sin_wave.tlc”

断言

%assert expression

expression == TLC_FALSE,TLC将进行堆栈追踪

数据转换

%CAST(“数据类型”,variablename)

存在

%EXISTS(Var)

记录域操作

%ISFIELD 是否为记录域

%SETFIELD 设置

%GETFIELD 获取

%REMOVEFIELD 移除

相等

%ISEQUAL

空值

%ISEMPTY

类型

%TYPE(var)

空格

仅仅空格:\n,\t,\r

%WHITE_SPACE(var)

调用matlab函数

有返回值:%assign res = FEVAL("disp",“aaaaa”),只能接收首个返回值

无返回值:%matlab disp("aaaaa")