This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] 编译器/TMS320F28069:Simulink 外部目标 C2000代码生成故障

Guru**** 2595770 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/966860/compiler-tms320f28069-simulink-external-target-c2000-code-generation-failure

器件型号:TMS320F28069

工具/软件:TI C/C++编译器

Simulink 代码生成的 C2000硬件。 由于 TI C 链接器未找到库文件、基本 Simscape 模型无法生成代码。

错误消息中的特定注释、以便联系 TI 技术支持。 连接了模型和输出。 支持案例 CS0358648。

出现故障的模型文件示例。

e2e.ti.com/.../TI_5F00_Simscape_5F00_CodeGen_5F00_Test.7z

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Mark、

    链接期间发生的第一组错误是因为指定了库、但它们不存在。  第一个是:

    错误:找不到文件"C:/Program Files\MATLAB /R2020b/toolbox/physmod/simcape /engli/sli/lib/win64/ssc_sli"

    这实际上看起来更像是一个搜索路径、而不是一个库。  在"文件搜索路径"下的链接器选项中、顶部段用于指定要包含的库名称、底部段用于查找其位置。  可以在顶部段中指定路径以及库名称。   

    "ssc_sli"是否为文件名?  例如、如果您转至"C:/Program Files\MATLAB /R2020b/toolbox/physmod/simcape /engl/sli/lib/win64"、该文件是否存在?  没有文件扩展名是很奇怪的。  我还发现奇怪的是路径中有"win64"。  通常、我会尝试避免路径中的空间、但看起来这并不会导致这里的问题。

    我们无法访问 MATLAB、因此我们无法对所连接的模型执行任何操作。

    此致、

    John

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 John:

    感谢您的跟进。

    这是丢失文件所在的目录的内容。 所有库都被命名为 SSC_SLI_ .lib

    看起来链接器行被截断。 我将 MATLAB 重新安装到 C:\MATLAB、以去除空格并缩短路径、并在链接器中确认了新路径。 构建错误仍然相同。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    所有 库均命名为 ssc_sli_ lib

    我没有需要检查的 MATLAB 工具箱许可证、但我认为这些库都适用于 Windows 编译器。

    扩展嵌入式和通用实时系统目标文件 建议 Simscape 模型可以为嵌入式目标生成代码。 我认为您应该询问 MathWorks 支持有关链接器错误的信息、以及如何生成面向 C2000器件的 Simcape 模型。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    切斯特是对的、所有这些看起来都不像 C2000库。  最好联系 Mathworks。  我在网上找到了一些参考资料、建议您拥有 C2000嵌入式编码器时可以这样做、但您需要使用 Mathworks 来解决这个问题。

    此致、

    John   

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你(们)好。

    我确实与 Mathworks 进行了讨论、他们告诉我 TI 编译器存在问题(可疑)。

    所以... 您能帮我解答一些要向 Mathworks 提出的具体问题吗、我会尝试让他们对此进行一些处理。

    谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="Chester Gillon">我没有需要检查的 MATLAB 工具箱许可证、但我认为这些库都适用于 Windows 编译器。我找到了安装 Simscape 的许可证。

    C:\Program Files\MATLAB \R2020b\toolbox\fphysmod\simcape \engl\sli\lib\win64目录中的所有库文件均适用于 Intel (32位或64位)。 objdump 报告以下文件格式:

    • elf64-x86-64
    • PE-i386
    • PE-x86-64

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="Mark Edwards1]So... 您能帮我解决一些要向 Mathworks 提出的具体问题吗?我会尝试让他们对此进行一些处理。

    询问他们从何处获取为 TI C2000器件构建的 simcape 库。

    此致、

    John

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尽管 Simcape 块编译为通用定点 C 代码、该代码应与任何嵌入式目标兼容。

    没有特定于 IO 或目标的函数。 不确定 Simscape 需要特定于 C2000的内容是什么?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的、Simscape 块可以生成标准 ANSI/ISO C 代码、您可以将其导入 CCS 以部署到 TI MCU 中。

    有一个适用于 C2000器件和外设的特定解决方案->更多信息、请访问 :https://e2e.ti.com/support/microcontrollers/c2000/f/171/t/484814

    谢谢、

    -Brian

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Brian、

    由于 Simcape 块未编译任何 I/O 或 C2000特定功能、我和您一样认为、Simcape 编译为 C、与任何其他 Simulink 块一样链接到嵌入式 C 目标编译。

    但是、我有一个支持案例、Mathworks (Jonathan Chang [参考:_00Di0HA1u._5003q1MYrAG:ref ])对此进行了说明:

    "此错误是由于 Embedded Coder 生成不支持 Simscape PMLSM 块造成的。  遗憾的是、这种不兼容性所导致的错误消息似乎是不准确的。"

    现在、我不知道为什么 Simultink C 编码器支持此 Simscape 块、而嵌入式编码器不支持此 Simscape 块(或为什么需要它)。

    前面两个问题涉及 Mathworks 支持、他们坚持错误是由于 TI 编译器错误导致的、因此我对所告知的内容不太相信、但仍然没有解决方案。 如果您能提供帮助、我将不胜感激。  

    谢谢、

    标记。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Mark、您好!

    我听说过其他产品在 ECoder 支持方面不具有完全兼容性、因此这似乎是合理的。 很抱歉。 我想并说它可能与代码优化有关-常规生成的 C 代码可用于测试和仿真、但未针对嵌入式应用进行优化(这就是您应该使用 Embedded Coder 的原因)。 您无法解决此问题、但通常这些问题会作为未来版本的增强功能从技术支持传递到开发。

    我建议使用"权变措施"并使用本机 Simulink 块构建您自己的 PMSM 切换逻辑以替换 Simscape 块。 本机 Simulink 块具有 ECoder 支持、并可进行良好优化。 您可能会快速地进行测试、看看更换 PMSM 块是否会允许您的模型正确构建。 但是、可能需要一些时间来制定您的 PMSM 逻辑、以便它以您希望的方式工作。

    注意: 我们有一 个电机控制时钟集产品、它完全与 ECoder 配合使用、并且具有 PMSM 块支持、但我认为 PMSM 块的保真度比 Simscape 中详细的第一个原理方程更加通用。 但这可能足以/适合您的项目。

    https://www.mathworks.com/help/mcb/ref/surfacemountpmsm.html

    谢谢、

    -Brian

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的回复 Brian、

    我正在研发一款线性电机、 PMLSM 块 可以很好地参数化到我的实际受控体。 它是一个单块、消耗3PH 电流、输出运动、这正是我对观测器控制方案的需求。  

    是否有方法将该块编译为 C、并将其作为外部代码或 S-function 进行处理?

    感谢您、我们将介绍您参考的电机控制时钟集。

    标记。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Mark、您好!

     您可以按照建议尝试使用 Simulink Coder 生成常规 C 代码、然后尝试深入研究实现方案、并导入为传统 C 代码(C 代码 S-function)。我不知道此变通办法是否会最终满足您的需求、 但当然值得一试-比尝试编写自己的 C 代码 s 函数块更快。 我可能会首先在没有 PMLSM 块的情况下执行快速构建测试、只是为了验证在生成代码时模型中没有其他 gotchas。

    我想您已经知道一个警告:Simscape Electrical 中的稳定仿真的采样时间可能与您在 MCU 上实际可以实现的时间不匹配。 对于部署到嵌入式系统的控件、您通常会看到保真度更低、采样时间更慢。 此外、解算器可能会改变/以不同的方式实现。 YMMV -但我看到 Simscape Electrical 系统具有许多"硬"开关、这些开关可以完美地进行仿真、但最终无法在 MCU 上实现。

    谢谢、

    -Brian