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 个:
- 你需要比简单地调用 adslogstr 更多的逻辑,因为如果循环调用 adslogstr,你最终会向事件记录器发送垃圾邮件。
- 在其他项目中重用
- 如果需要,您可以将 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# 解决方案中考虑了很多 :)
谢谢!
当我在 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 个:
- 你需要比简单地调用 adslogstr 更多的逻辑,因为如果循环调用 adslogstr,你最终会向事件记录器发送垃圾邮件。
- 在其他项目中重用
- 如果需要,您可以将 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# 解决方案中考虑了很多 :) 谢谢!