当我在 C# 中的 switch 语句中使用枚举时,我习惯于在默认情况下添加调试中断语句,以防止向枚举添加开关未涵盖的项目。在调试期间,如果代码遇到默认情况,代码将中断。
现在我正在编写一个 beckhoff PLC,并希望在 CASE 中做同样的事情......不然...STL 中的结束案例。这在PLC编程中是否可能和/或正常?
我认为你不能。此外,停止PLC程序并阻止其执行与机器相关的代码也是不可取的。
相反,您可以使用 ADSLOGSTR 函数记录到事件记录器。或显示消息框。这将适用于 TC2 和 TC3。
您可以在在线模式下设置断点,但正如 pboedker 指出的那样,一旦到达断点(除非您有特殊配置,但这是另一个主题(,您的 EtherCat 主站将超时,您的安全模块将产生 COM 错误,您的驱动器也需要重置。
如果您的项目中没有真正的硬件和 ethercat 主站,则可以毫无后顾之忧地使用断点。
我个人采取另一种方法。
我总是在 plc 中构建一个单独的调试可视化和一个特殊的调试功能块,它可以帮助我跟踪项目中的错误。
例如,在您的情况下,当程序流达到默认情况时,我会简单地使用错误代码和字符串调用 Debug-FunctionBlock 的特殊方法。 然后,错误代码和字符串将在调试可视化中可视化。
即使这比简单地调用adslogstr要费一点力,我也宁愿实现一个单独的调试功能块,原因有3个:
- 无论如何,您需要更多的逻辑,而不仅仅是调用adslogstr,因为如果循环调用adslogstr,您最终会向事件记录器发送垃圾邮件。
- 在其他项目中重用
- 如果需要,您可以将调试可视化扩展到测试套件,这会派上用场
您可以在此处找到有关 beckhoff 可视化的更多信息:
https://infosys.beckhoff.com/english.php?content=../content/1033/tc3_plc_intro/3523377803.html&id=
断点是可能的,就像菲利波说的那样。您可以通过设置 KeepOutputsOnBP 来防止输出在断点期间重置(请参阅此处:https://stackoverflow.com/a/52158801/8140625(。
当发生这种情况时,您还可以使用ADSLOGSTR
将错误/警告/注释消息设置为Visual Studio(请参阅此处:https://stackoverflow.com/a/51700613/8140625(。因此,使用适当的消息向CASE ELSE
添加ADSLOGSTR
调用,您将在错误列表/TwinCAT控制台中看到它。
编辑:不知何故错过了pboedkers的答案,他已经回答了ADSLOGSTR。
我喜欢菲利波的解决方案。将来可以轻松更改调试函数的行为,而无需过多地接触代码。
我在 C# 解决方案中想了很多:) 谢谢!