马上注册,享受更多特权
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
在ST环境下, 原生的轴控功能块的语义化会比较弱, 对于梯形图下可能这个问题不大, 但如果用ST的话, 我自己用的话觉得就会用的比较变扭.
我的处理方法是将轴控功能块的对象都用同一个功能块(AxisCtrl)整合起来, 并赋予这个总轴控功能块控制方法.
相当于把真正的轴对象包起来, 用包住它的AxisCtrl来处理所有操作, 这样的好处是可以在AxisCtrl中处理很多的重复操作并整合功能, 对轴的操作都是这个轴对象本身的方法, 避免掉产生各种外部变量, 让代码更容易读懂, 也方便之后的修改, 只要修改方法函数本身不需要改动其它外部的代码.
理想状态是这样(伪代码):
\\ 实例化轴控对象
AXCtrl(...)
\\ 使能
AXCtrl.power(...)
\\ 绝对移动
AXCtrl.moveAbsolute(...)
\\ 停止
AXCtrl.stop(...)
但是
这个只能在完整的ST下才能做到, 目前Easy系列的LiteST下功能块没有自己的属性 方法, 这两个区别有点像C和C with class.
本来AxisCtrl有自己的变量 自己的方法, 自己的方法可以访问自己的变量, 但是现在没有啦! 也就是说需要一个作用域覆盖轴控对象和控制方法的变量去存储轴的信息.
所以它就变成了这个样(伪代码):
\\ 实例化轴控对象
AXCtrl(state := AXState, ......)
\\ 使能
AC_Power(state := AXState, ......)
\\ 绝对移动
AC_MoveAbsolute(state := AXState, ......)
\\ 停止
AC_Stop(state := AXState, ......)
多了一个 State 变量, 用来存储轴的信息.
当然这个也只是我个人习惯的设计方法, 只是分享出来给大家参考下.
|