状态机-使用C++在Twincat 3上进行PLC编程
state machine - PLC programming on Twincat 3 using C++
我正试图为望远镜的圆顶创建一个控制模块。我将使用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循环或扫描有三个步骤:
- 读取所有过程输入信号。在Beckhoff中,通过工业网络通信获得的变量被透明地读取,就好像它们直接连接到PLC一样。这些信号在整个周期内保持不变
- 执行用户代码。在TwinCAT3中,该用户代码可以用任何IEC61131语言、C++和MATLAB/Simulink进行编程。C++和Simulink都需要额外的许可证才能运行
- 激活输出信号。这些信号将在整个下一次扫描中保持恒定,而不考虑该扫描中变量的实际值
看门狗正在监视扫描,以确保在扫描时间(通常为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或其他语言中(每个步骤中要做什么,以及如何从一个步骤过渡到另一个步骤。
- 有一个打印语句的函数是一种糟糕的编程实践吗
- 我是C++编程的新手,这些代码之间有什么区别,我应该使用哪一个
- 模板元编程:如何将参数包组合成新的参数包
- Qt Q串行端口未编程设备未关闭
- 模板元编程 - 尝试实现维度分析
- 我是编程新手
- C++编程从外部文本文件定义数组大小
- 了解算法的性能差异(如果以不同的编程语言实现)
- 使用 Gtkmm 以编程方式选择 Gtk::TextView 中的文本
- 如何将可变参数模板转换为多个单个模板?(C++竞争编程调试模板)
- 使用命名空间正确编程
- C++编程:运算符重载中的引用如何工作?
- Arduino 模块化编程与全局和设置
- C++ 运算符修改/元编程策略,用于不那么冗长的语法
- 在没有管理员权限的情况下,在 c++ 中以编程方式将程序添加到启动
- 如何以编程方式将音频从任何录制设备路由到任何播放设备
- 试图修复一个错误,该错误不会让我开始编程其余部分
- C++模板编程设计问题 - 根据输入文件返回不同的类型
- Frank Luna 在他的书"使用 DirectX12 进行 3D 游戏编程"的介绍中盒子示例的问题
- 状态机-使用C++在Twincat 3上进行PLC编程