【问题标题】:Beckhoff PLC using ENUM's in CASE OF questionBeckhoff PLC 在 CASE OF question 中使用 ENUM
【发布时间】:2019-09-17 16:00:42
【问题描述】:

当我在 C# 的 switch 语句中使用 enum 时,我习惯于在 Default case 中添加一个 debug break 语句,以防止向 enum 添加未被 switch 覆盖的项目。在调试过程中,如果遇到默认情况,代码就会中断。

现在我正在对 beckhoff PLC 进行编程,并希望在 STL 中的 CASE .. OF ELSE ...END CASE 中执行相同的操作。这在 PLC 编程中是否可能和/或正常?

【问题讨论】:

    标签: enums plc


    【解决方案1】:

    我认为你不能。此外,停止 PLC 程序并阻止其执行机器相关代码也是不可取的。

    相反,您可以使用 ADSLOGSTR 函数记录到事件记录器。或者显示一个消息框。这适用于 TC2 和 TC3。

    【讨论】:

      【解决方案2】:

      您可以在 在线模式 下设置断点,但正如 pboedker 指出的那样,一旦达到断点(除非您有特殊配置,但这是另一个主题)您的 ethercat 主机将超时,您的安全模块将产生一个 com 错误,您的驱动器也需要重置。

      如果您的项目中没有真正的硬件和 ethercat 主设备,您可以毫无顾虑地使用断点。

      我个人采取另一种方法。

      我总是在 plc 中构建一个单独的 Debug-Visualization 以及一个特殊的 Debug FunctionBlock,它可以帮助我跟踪项目中的错误。

      例如,在您的情况下,当程序流程达到默认情况时,我会简单地调用带有错误代码和字符串的 Debug-FunctionBlock 的特殊方法。 然后错误代码和字符串将在 Debug-Visualization 中可视化。

      即使它比简单地调用 adslogstr 更费力,我也宁愿实现一个单独的 Debug-FunctionBlock,原因有 3 个:

      1. 无论如何,您需要更多的逻辑而不是简单地调用 adslogstr,因为如果有机会循环调用 adslogstr,您最终会向事件记录器发送垃圾邮件。
      2. 在其他项目中重复使用
      3. 如果需要,您可以将调试可视化扩展为测试套件,这样会派上用场

      您可以在此处找到有关倍福可视化的更多信息:

      https://infosys.beckhoff.com/english.php?content=../content/1033/tc3_plc_intro/3523377803.html&id=

      【讨论】:

        【解决方案3】:

        正如菲利波所说,断点是可能的。您可以通过设置 KeepOutputsOnBP 来防止在断点期间重置输出(参见:https://stackoverflow.com/a/52158801/8140625)。

        当发生这种情况时,您还可以使用 ADSLOGSTR 向您的 Visual Studio 设置错误/警告/注释消息(参见:https://stackoverflow.com/a/51700613/8140625)。因此,将 ADSLOGSTR 调用添加到您的 CASE ELSE 并带有适当的消息,您将在错误列表/TwinCAT 控制台中看到它。

        编辑:不知何故错过了 pboedkers 的答案,他已经回答了 ADSLOGSTR。

        【讨论】:

        • KeepOutputsOnBP 是一个很好的提示,但我相信安全模块无论如何都会产生 comError 并因此将整个机器设置为错误状态。
        • 可能是,没有与安全逻辑一起使用。只有正常,没有问题。
        【解决方案4】:

        我喜欢 Filippo 的解决方案。将来可以很容易地更改调试功能的行为,而无需过多地接触代码。

        我在 C# 解决方案中思考了很多 :) 谢谢!

        【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-01-29
        • 2021-04-26
        • 2018-04-08
        • 2022-11-30
        • 2011-10-11
        • 1970-01-01
        • 1970-01-01
        • 2021-08-22
        相关资源
        最近更新 更多