下面我用一个很简单的进行角度弧度转换的函数为例来说明如何在 STEP 7 中自定义函数。(1) 我们新建一个函数FC(这个函数比较简单,不需要背景数据,不用 FB),实现的语言选择 SCL语言。函数名为“DegreeToRad”。(2) 我们要明确这个函数的输入,在上面的变量定义栏中的 Input 项目中输入 angleInDegree,类型选择为Real,如下图所示。在Return 项目中将 DegreeToRad 变量的类型改为 Real,这里注意不要修改DegreeToRad 变量的名字。 (3) 在下面的输入框输入变换公式。 这里要用 := 对变量进行赋值。你会注意到,变量 PI 是用双引号括起来的,而其它的变量(例如angleInDegree)前面则带一个井号。这是用来区分局部变量和全局变量的,局部变量用#开头表示,而全局变量用引号表示。
10.4.3 定时器定时器是我们会经常使用的一个功能,想输出随时间变化的量、想延时触发、想输出周期信号都要借助定时器。西门子的每个定时器都对应一个背景数据块。笔者早期经常犯的一个错误是,为了节省时间直接复制粘贴定时器块。其错误是不管你复制多少次,其实Zui终还是同一个定时器,后面的会覆盖前面的值。这个错误导致很多匪夷所思的错误,让笔者头疼了相当长的时间。各位一定要注意,每使用一个定时器都要重新拖进来新建。
10.4.4 磁循迹算法为了让 AGV 始终沿着磁条行走,我们要编写相应的控制程序,也就是循迹程序。循迹程序的逻辑可以非常简单,我们的输入是磁导航传感器的读数,输出则是舵轮转向的速度(或差速轮的转速差),磁条如果在 AGV车体中心线的左侧,我们就往左偏转,在右侧就往右偏转,而如果恰好在中间则保持不动。下面的仿真动画展示了这种控制策略的效果,其中只使用了一个传感器和一个舵轮,但已经可以沿着曲线行走了。磁导航传感器有六个点,安装在前方,红色的方格表示感应到了磁条,白色表示没有感应到。