还没写完,先保存下
每次编写控制气缸动作的程序 既要编写控制逻辑部分程序,又需要编写 磁簧未到位检测的程序 还需要再放到触摸屏上显示
重复的工作就会让人产生偷懒的想法:如何节省这样的工作时间,从而上班摸鱼啊?
之前使用200SMART PLC时候曾做过一个子程序用来控制电磁阀,准备在此基础上设计一个 气缸控制的子程序。
可先参考之前的案例:https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1721609&b_id=64&s_id=0&num=0#anch

首先编写子程序,控制电磁阀动作(伸出、缩回,并保持状态),顺便解决一些问题:
问题1:电磁阀数量太多,看着IO表写程序太麻烦了,有些还可能涉及到后期加点位的情况
解决方法,将气缸编上序号,同时给到位信号也给编上 序号,既方便程序自行抓取,也方便自己编写程序好找点位;
问题2:电磁阀的伸出或缩回时需要将另一方向线圈复位掉避免两头线圈都得电导致无法动作
解决方法,使用数值类型代替布尔型 表示状态,这样同时只会存在一个状态,这和之前控制电机正反转做的互锁是一个处理方式;
------------------------------------------------------------------------------------------------
好了 ,下面开始编写PCL程序
综上,新建一DB块并 创建变量
如下图所示:
输入区使用二维数组,IN[序号,伸缩位] bool ,将气缸伸缩位状态 传送到DB块中,所有程序中状态值都可以直接从中读取
输出区使用一维数组,OUT[序号] Byte,气缸伸出缩回状态值=1、=2 关联到对应Q点即可


双控输出子程序编写:
达到如下目的:
//序号1-90,给气缸编上序号方便程序处理
//动作 0 停止输出 1伸出,2缩回
//序号=99 , 动作=99 复位所有电磁阀和电机输出。
新建FC块,并定义针脚

这里新学的SCL 语句 正好拿来练练手 ,当然梯形图也可以使用
将动作值传送到对应序号的 寄存器中,这里加了写判断,避免程序出错
-------------------------------------------------------------
// 序号在0-90之间有效
IF #序号 > 0 AND #序号 < 99 THEN
// 动作=1 OR 2 、允许输出,其他动作值判定无效=0
IF #动作 = 1 OR #动作 = 2 THEN
"数据块1".OUT[#序号] := #动作;
ELSE
"数据块1".OUT[#序号] := 16#0;
END_IF;
// 序号=99,动作=16#99 防错处理
ELSIF #序号 = 99 AND (#动作 = 16#99 OR #动作 = 99 )THEN
FILL_BLK(
IN := 16#0,
COUNT := 99,
OUT => "数据块1".OUT[1]);
END_IF;
-------------------------------------------------------------
这样一个简易的 双控输出子程序就编写完成了。
仿真试下:
首次上电,确认DB块,OUT区数据都为0

M10.0得电,OUT[1]=1

M10.0断电,OUT[1]=1保持

M10.1得电,OUT[1]=2并保持,这里由于PLC循环扫描原理,M10.0、M10.1都得电,最总结果为后扫描的有效 、如果两行颠倒下,最终数值应=1 这里不做赘述了

M12.1得电,OUT[3]=2并保持

这里强制将一些OUT 区设上数值,序号=99,动作=99时候 将该区域内数据全部清零


这样 双控输出子程序就编写完成了,这程序编写确实比SMART 方便好多啊
-----------------------------------------------------------------------------------------------------
先写到这,下次接着写