主要内容

调试您的TLC代码

tlcdebug.教程概述

客观的:介绍TLC调试器。您将学习如何设置断点并熟悉TLC Debugger命令。

文件夹:matlabroot./工具箱/ RTW / RTWDEMOS / Tlctutorial / TLCDebug打开

只要调用构建过程,您就可以导致调用TLC调试器。在本教程中,您将使用它来检测一个错误.tlc.叫做型号的文件simple_log.。该错误会导致生成的代码从模型的独立版本输出以与其仿真输出不同。教程通过以下步骤指导您:

  1. 入门- 运行模型并检查输出

  2. 从模型生成和运行代码- 将编译的结果与原始输出进行比较

  3. 启动调试器并使用其命令- 你可以用调试器做的事情

  4. 调试Timesn.tlc.- 找出出了什么问题

  5. 修复错误并验证- 修复错误和验证修复的简单方法

入门

  1. 复制文件tlctutorial / tlcdebug.到您当前的工作目录。

  2. 在matlab.®命令窗口,为S-function创建MEX文件:

    mex timesn.c.

    这避免了使用Simulink附带的版本金宝app®软件。

    笔记

    如果您之前没有运行,则可能会发生错误mex-setup.

  3. 打开模型simple_log.。该模型看起来像这样。

  4. 在里面数据导入/导出配置参数的窗格对话框,检查时间输出。这会导致模型变量登录到MATLAB工作空间。

  5. 运行模型。在这一点模拟选项卡,单击跑步。变量兜售you ..出现在您的Matlab工作区中。

  6. 双击you ..在里面工作区matlab命令窗口的窗格。变量编辑器显示6x1阵列输出simple_log.。显示屏如下所示:

    第1列包含在端口收集的六个时间步长(3S和0)的离散脉冲输出OUT1.

接下来,您生成独立版本simple_log.。您执行它并将其结果与上面显示的Simulink的输出进行比较。金宝app

笔记

出于本练习的目的,提供了TLC文件,Timesn.tlc.,包含一个错误。此版本必须与使用它的模型相同的文件夹。

从模型生成和运行代码

  1. Ctrl + B.

    代码生成器生成,编译和链接C源代码。MATLAB命令窗口显示构建的进度,其中以这些消息结尾:

    ###创建可执行文件:simple_log.exe ###成功完成模型构建过程:Simple_log
  2. 运行刚刚键入创建的独立模型

    !simple_log.

    这导致消息

    **启动模型** **创建simple_log.mat **
  3. 通过将变量放在工作区中,检查结果。在里面当前文件夹窗格,双击simple_log.mat.,然后双击RT_YOUT.(可变的独立版本you ..) 在里面工作区窗格。

    相比RT_YOUT.you ..。你注意到差异吗?你能猜测什么造成的价值RT_YOUT.改变?

    查看TLC放置在构建文件夹中的生成的C代码(simple_log_grt_rtw.)有助于确定问题。

  4. 编辑simple_log.c.看看它mdloutputs.函数,应如下所示出现:

    / *模型输出函数* /静态void simple_log_output(void){/ * stancetepulsegenerator:' /离散脉冲生成器'* / simple_log_b.discretepulsegenerator =(simple_log_dw.clocktickcounter <1.0)&&(simple_log_dw.clocktickcounter> = 0)?1.0:0.0;if(simple_log_dw.clocktickcounter> = 2.0  -  1.0){simple_log_dw.clocktickcounter = 0;} else {simple_log_dw.clocktickcounter ++;} / *结束ultipulsegenerator:' / /离散脉冲发生器'* / / * s函数(timen):' / gain1st'包含:*出口:' / out1'* // *S函数块: / gain1st * // *乘以3.0 * / simple_log_y.out1 = simple_log_b.discretepulsegenerator * 1;}

请注意靠近末尾的线路:

simple_log_b.first_output = simple_log_b.discretepulsegenerator * 1;
当它应该在3.0和0.0之间交替的变量时,如何将不正确的产品分配给输出的错误是如何分配给输出的?使用调试器找出答案。

启动调试器并使用其命令

您使用TLC调试器监视代码生成过程。由于默认情况下未调用,因此您需要显式请求调试器。

  1. 设置TLC调试环境并开始构建应用程序:

    1. 选择配置参数>代码生成窗格,并选择选项保留.rtw文件生成代码时启动TLC调试器。点击

    2. 构建模型。

      MATLAB命令窗口描述了构建过程。建造停止了Timesn.tlc.文件并显示命令提示符:

      tlc-debug>
  2. 类型帮助列出TLC调试器命令。以下是您在调试器中可以做的一些事情。

    • 查看和查询TLC范围中的各种实体。

      TLC-DEBUG> WHOS CompledModel TLC-Debug>打印CompileDModel.numsystems TLC-Debug>打印类型(CompiledModel.numsystems)
    • 检查当前上下文中的陈述。

      tlc-debug>列表tlc-debug>列表10,40
    • 移动到下一行代码。

      tlc-debug>下一个
    • 进入一个函数。

      tlc-debug>步骤
    • 将常量值分配给变量,例如输入信号

      tlc-debug>分配u = 5.0
    • 设置您在代码的其他部分或在其他部分的断点。

      tlc-debug> break timesn.tlc:10
    • 执行直到下一个断点。

      tlc-debug>继续
    • 清除您建立的断点。

      tlc-debug>清除1 tlc-debug>清除全部
  3. 如果已尝试了TLC调试器命令,请执行剩余的代码以完成构建过程,然后构建simple_log.再次。建造停止了Timesn.tlc.文件并显示命令提示符:

    tlc-debug>

调试Timesn.tlc.

现在环顾四周,了解代码有什么问题:

  1. 在第20行设置一个断点Timesn.tlc.

    TLC-Debug> Break Timesn.tlc:20
  2. 指示TLC调试器进入断点。

    tlc-debug>继续

    TLC流程输入,报告其进度,进入第20行Timesn.tlc.,显示线路和暂停。

    ###加载TLC函数库... ###初始传递模型以缓存用户定义的代码。###缓存模型源代码。断点1 00020:%卷IDX = Rollregions,LCV = Lollthreshold,块,“滚筒”,滚动
  3. 使用谁是命令查看当前范围中的变量。

    TLC-DEBUG> WHOS变量在其中:增益真实rollvars矢量块已解决的系统已解决
  4. 使用print命令检查变量(名称区分大小写)。

    TLC-DEBUG>打印增益3.0 TLC-DEBUG>打印rollvars [U,Y]
  5. 执行一步。

    tlc-debug>步骤00021:% = \
  6. 因为它是一个内置的功能,所以通过前进下一个命令。

    tlc-debug>下一个。00022:% * 1;

    这是C语句的起源,负责错误的恒定输出,simple_log_b.first_output = simple_log_b.discretepulsegenerator * 1;

  7. 放弃TLC调试器放弃构建。类型

    tlc-debug>退出

    显示错误消息,显示您使用TLC调试器停止构建辞职命令。关闭错误窗口。

修复错误并验证

您识别的问题是由在TLC函数内的恒定而不是变量来引起的fcnelimineseunneetaryParams()。这是一个典型的编码误差,并且很容易修复。这是您需要修复的代码。

%函数输出(块,系统)输出%分配gain = sfcnparamsettings.mygain / *%块:% * / %% / *乘以%<增益> * /%分配rollvars = [“u“,”y“]%roll idx = rollregions,lcv = lollthreshold,块,”滚子“,rollvars% = \% * 1;%Endroll%Endfunction %% [Eof] Timesn.tlc
  1. 修复编码错误,编辑Timesn.tlc.。线路

     * 1;
    将评估的输入乘以1.将行更改为
     *%<增益>;

    节省Timesn.tlc.

  2. 再次构建独立模型。通过键入完成构建继续在每一个tlc-debug>迅速的。

  3. 通过键入执行独立模型

    !simple_log.
    一个新的版本simple_log.mat.创建包含其输出。

  4. 加载simple_log.mat.并比较工作区变量RT_YOUT.you ..,正如你之前所做的那样。现在应该对应第一列中的值。

相关话题