Beckhoff PLC 在 CASE OF 问题中使用 ENUM

Beckhoff PLC using ENUM's in CASE OF question

当我在 C# 的 switch 语句中使用枚举时,我习惯在 Default case 中添加 debug break 语句,以防止向枚举中添加 switch 未涵盖的项目。在调试期间,如果遇到默认情况,代码将中断。

现在我正在对一个 beckhoff PLC 进行编程,并希望在 STL 中的 CASE .. OF ELSE ...END CASE 中执行相同的操作。这在PLC编程中可能and/or正常吗?

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

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

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

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

我个人采取另一种方法。

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

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

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

  1. 你需要比简单地调用 adslogstr 更多的逻辑,因为如果循环调用 adslogstr,你最终会向事件记录器发送垃圾邮件。
  2. 在其他项目中重用
  3. 如果需要,您可以将 Debug-Visualization 扩展为 Test-Suite,这可以派上用场

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

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

像 Filippo 所说的那样,断点是可能的。您可以通过设置 KeepOutputsOnBP 来防止在断点期间重置输出(参见:)。

您还可以使用 ADSLOGSTR 将 error/warning/note 消息设置为您的 Visual Studio(请参阅:)。因此,使用适当的消息向您的 CASE ELSE 添加一个 ADSLOGSTR 调用,您将在错误列表/TwinCAT 控制台中看到它。

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

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

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