状态机-使用C++在Twincat 3上进行PLC编程

state machine - PLC programming on Twincat 3 using C++

本文关键字:PLC 编程 Twincat 使用 C++ 状态机      更新时间:2023-10-16

我正试图为望远镜的圆顶创建一个控制模块。我将使用Beckhoff PLC。我不知道如何进行整个过程。我有C++知识,但我不确定是否使用TwinCAT对PLC进行编程。

在TwinCAT中为PLC编程是否与编写任何其他控制程序相同?此外,我应该选择状态机模块吗?然而,由于我缺乏编程知识,我不确定我是否能够应付状态机的编程。

此特定应用程序需要考虑的事项:

  • 操作望远镜圆顶通常不需要很多步骤
  • 即使在使用状态机等步骤进行思考时,也有必要不断检查启用某一步骤的条件是否仍然满足(有些东西可能会卡住,电机可能会过热,风可能会改变圆顶或望远镜的一部分的位置(

您最好有一个显式扫描:input=>logic=>output,这是典型的梯形图逻辑或等效结构化文本。在我看来,结构化文本将更容易编辑和理解。

至于C++,很有可能在C++中模拟PLC扫描:

  • 有一个中央循环,并遵守本文件"PLC编程规则"中规定的许多规则
  • 在这个中心循环中,连续执行以下操作:

    从传感器读取

    执行逻辑运算和计算

    写入执行器(在这种情况下为电机(

"真正的"PLC的优点是,您将能够实时调试,并在活动操作期间观察和更改所有变量。

在C++中模拟这一点也是很有可能的。但对于一个相对简单的项目,我会坚持使用现有的PLC。

因此,在我看来,结构化文本或梯形逻辑是最合适的。

TwinCAT 3和其他语言可以用C++编程(TwinSAFE也可以用C++编写(。它不是一个标准的C++,而是一个受限制的版本。此外,TwinCAT 3中的C++编程有点棘手,如果与IEC 61131语言(ST、CFC、SFC、IL、LADDER等(相比,您需要执行一些额外的步骤来将C++代码集成到TwinCAT任务中。

例如,ST是一种简单明了的语言,与PASCAL、C++或C#非常相似。PLC编程的图形语言(如CFC/SFC(非常推荐,功能非常强大。这些语言可以帮助你以与机器电气工作方式非常相似的方式进行编码,如果你对电气有一些概念,你会发现它们非常简单和更好。

PLC编程和常规编程之间的主要区别在于PLC的工作方式,正如Jacques de Hooge发布的链接中完美描述的那样。每个PLC循环或扫描有三个步骤:

  1. 读取所有过程输入信号。在Beckhoff中,通过工业网络通信获得的变量被透明地读取,就好像它们直接连接到PLC一样。这些信号在整个周期内保持不变
  2. 执行用户代码。在TwinCAT3中,该用户代码可以用任何IEC61131语言、C++和MATLAB/Simulink进行编程。C++和Simulink都需要额外的许可证才能运行
  3. 激活输出信号。这些信号将在整个下一次扫描中保持恒定,而不考虑该扫描中变量的实际值

看门狗正在监视扫描,以确保在扫描时间(通常为10-20毫秒(执行扫描,并在相应的时隙开始下一次扫描。如果扫描未在扫描时间内完成,则会重置为开始,并可能导致CPU停止。

因此,PLC作为一个没有终点的连续循环工作,常规的PC应用程序有应用程序的开始和结束。此外,PLC编程中的内存管理和FB/对象定向与PC编程有很大不同,C++也不太适合PLC模型。

TwinCAT基于CodeSyS,因此其工作原理与Schneider的Somachine或Omron、ABB、Allen-Bradley等的其他PLC非常相似。

我认为,与其用C++/ST/编写状态机程序,更好的选择是使用一个由一些CFC/ST代码备份的SFC控制器。请记住,只需使用SFC,您就可以获得Beckhoff为您开发的状态机,您只需要编程(在ST或其他语言中(每个步骤中要做什么,以及如何从一个步骤过渡到另一个步骤。