最近有好几个刚入门PLC的朋友问我:“哥,S7-200SMART没有圆弧插补功能,到底咋画圆啊?” 其实我刚学的时候也卡在这里好几天,对着手册翻来覆去看,最后抱着设备一步步试才搞明白。
今天就把我当时的实操过程整理出来,从设备接线到程序设计,每一步都讲得明明白白,新手跟着做也能成功。文末还放了完整程序,大家放心看到最后~
先说说咱们的实验装备
做实验前得把装备备齐,我当时用的这套跟很多新手朋友入门的配置差不多,大家可以参考下:
核心控制器是西门子S7-200SMART的ST20 CPU,这个型号很常见,新手入手不踩坑。运动部分是一套XYZ轴平台,带三个步进驱动器和三套电机,电机还配了丝杆——不过这里有个小细节要注意,ST20 CPU只能支持2轴高速脉冲输出,所以咱们这次只用到X轴和Y轴,Z轴先让它歇着。
实验平台长这样,大家可以对照看看自己的设备:
另外有两个关键参数得提前记好,不然后面算速度会出错:我把电机正方向定义成往电机本身的方向移动,丝杆是4mm导程的,步进驱动器的细分我设的是3200个脉冲转一圈。这些参数后续程序里都要用到,记在小本本上准没错。
接线方面也得仔细,我当时对着图纸接了两遍才确认没问题:CPU的Q0.0接X轴脉冲信号,Q0.2接X轴方向信号;Q0.1接Y轴脉冲信号,Q0.7接Y轴方向信号。具体的接线图在这,新手朋友建议接完后再检查一遍:
画圆的核心逻辑:把“圆”拆成“线段”
刚拿到问题的时候我也犯愁:S7-200SMART不像高端型号有现成的圆弧插补指令,咋画圆呢?后来翻资料的时候突然想通了——圆其实可以看成是很多很短的线段拼起来的,线段越多,看起来就越像圆。
给大家看张图就明白了:左边是把圆分成6等份,每段对应的角度是30°,看起来还是个六边形;右边分成12等份,角度15°,是不是就接近圆了?要是分个几百等份,肉眼根本看不出是线段拼的,妥妥的一个圆。
想清楚这个逻辑,画圆就简单了。只要知道三个关键信息:圆心坐标、圆的半径、画圆速度,然后分两步走就行:先把“画笔”挪到圆上,再一段一段“拼”出圆。
把XY轴分别回原点,回原点后的位置默认为XY平面坐标的原点,然后由原点移动到圆心坐标,如下图所示1点为圆心,2点为圆上点。 假设1点的坐标为(X1,Y1),速度为V,则X轴移动的距离为X1,Y轴移动的距离为Y1。根据勾股定理可计算出原点到圆心的距离“Y(0→1)”、X轴移动速度“VXaxis”和Y轴移动速度“VYaxis” ,计算公式如下所示: 当画笔到达1点后,然后Y轴不动,X轴以V的速度移动半径R的距离到达圆上2点位置,假2点的坐标为(X2,Y2) 根据三角函数可计算出3点的坐标(X3,Y3)的值分别为: X3=Cos(a)*R+X1,Y3=Sin(a)*R+Y1
根据勾股定理可计算出XY轴要移动的距离 “Y(2→3)”的值。X轴移动速度“VXaxis”和Y轴移动速度“VYaxis” ,计算公式如下所示:
注:此时X2和Y2为X轴和Y轴的当前位置,X3和Y3为X轴和Y轴要移动的目标位置,速度需要取绝对值。
同理:当画笔到达3点后,角度变为2a,则对应的圆上点为4点,坐标为(X4,Y4),如下图所示: 根据三角函数可计算出4点的坐标(X4,Y4)的值分别为: X4=Cos(2a)*R+X1,Y4=Sin(2a)*R+Y1
根据勾股定理可计算出XY轴要移动的距离 “Y(3→4)”的值。X轴移动速度“VXaxis”和Y轴移动速度“VYaxis” ,计算公式如下所示:
注:此时X3和Y3为X轴和Y轴的当前位置,X4和Y4为X轴和Y轴要移动的目标位置,速度需要取绝对值。
依次下去,每走完一次后,角度自加一次,当角度值大于360°时,则认为画圆完成。
程序设计:分4部分逐步实现
理解了逻辑,写程序就顺理成章了。我把程序分成了4个部分,新手朋友可以跟着这个结构一步步写,不容易乱。
▶ 1. 运动向导组态配置
这是基础步骤,先在软件里把运动轴配置好。打开S7-200SMART的编程软件,找到“运动向导”,按照提示选ST20 CPU,然后配置X轴和Y轴的脉冲输出端、方向信号端,再把之前记的丝杆导程、脉冲细分这些参数输进去。我当时配置的时候反复核对了参数,生怕输错一个数。
▶ 2. 初始化和回原点程序
程序开头要做初始化,比如把角度初始化成0°,设置好圆心坐标和半径。回原点程序也很重要,每次启动都要让XY轴回到原点,保证起始位置准确。我当时在程序里加了个回原点完成的指示灯,亮了之后再进行下一步,这样更稳妥。
▶ 3. 速度换算程序
这部分就是把咱们之前讲的勾股定理、三角函数的计算过程写成程序。我当时用了几个中间变量来存距离和速度,这样程序看起来更清晰,后期修改也方便。比如用“DIST_X”存X轴移动距离,“V_X”存X轴速度,一目了然。
▶ 4. 开始画圆程序
这是核心程序,实现角度累加、坐标计算、移动控制的循环。我当时写了个子程序专门处理画圆逻辑,主程序里只需要调用就行,这样结构更清晰。子程序里要注意循环的条件——角度小于等于360°的时候继续运行,超过了就停止。
子程序内部我又分了几个小模块,比如坐标计算模块、速度计算模块、移动控制模块,大家可以看下面的截图:
写好程序后一定要仿真一下,我当时仿真的时候发现角度累加的逻辑有问题,改了之后再下载到PLC里,一次就成功了。新手朋友一定要养成先仿真再下载的习惯,避免烧设备。
实验效果展示
给大家看看我当时做实验的效果,画出来的圆很光滑,精度也够。我用马克笔在平台上做了个标记,运行的时候就能清楚看到轨迹了:
最后说几句
其实S7-200SMART画圆不难,核心就是把圆拆成线段,再用数学方法算坐标和速度。我当时走的弯路,希望大家能避开。
如果大家在操作过程中遇到问题,比如程序下载后没反应、平台跑错方向,都可以在评论区留言,我看到都会回复。也欢迎大家分享自己的实操经验,咱们一起交流进步!
觉得有用的朋友别忘了点个“在看”,转发给身边学PLC的伙伴~