>
题目: 白动将A处的料搬运到料罐C处。 1. 有手动,半自动,自动切换功能。 I0.1(半自动切换按钮),I0.2(自动切换按钮),两个都不接通为手动;系统的三个状态分别由三个指示灯显示:手动(Q0.0),半自动(Q0.1),自动(Q0.2);模式切换必须在停机状态下(停机状态为没有前进,没有后退,没有装料,没有卸料)。 2. 手动 可以通过按钮控制,A处(I0.3:按钮,Q0.3:装料电磁阀),C处(I0.4:按钮,Q0.4:卸料电磁阀),小车的前进(Q0.5,I0.5:按钮)和后退(Q0.6,I0.6:按钮)。 3.半自动 按下启动按钮(I0.7),如果小车在原点(I1.0)位置打开电磁阀Q0.3开始装料,5秒后关闭,小车开始向前运行,碰到终点开关(I1.1),小车停止并开始卸料(Q0.4),5秒后停止卸料小车返回原点停止。 4.自动 自动状态下按下启动小车在原点位置开始装料,动作和半自动一样,卸料完成后返回原点又自动装料,一直循环,直到按下停止开关(I1.2)小车把料卸完回到原点停止。 5.回原点 按下回原点按钮(I1.3),检测到小车未在原点,自动启动回原点程序。(先前进至终点卸料5秒,再返回停在原点) 分析: 采用一个FB块编写(也可以采用多个FB块编写或者利用FC块编写均可)。 第一步先编写模式切换;第二步编写手动;第三步编写自动和半自动,因为自动和半自动区别在于有无自动循环,所以可以将动作一起写完,再去判断是自动还是半自动;最后写回原点。 程序分段如下: 1)模式切换: 2)手动动作: 3)自动/半自动动作 注意:这里写的自动半自动动作都是嵌套再IF条件中。 4)回原点
全套程序如下: //模式切换 #停机状态 := NOT "装料阀" AND NOT "前进" AND NOT "卸料阀" AND NOT "后退"; IF #停机状态 THEN "手动模式" := NOT "半自动切换按钮" AND NOT "自动切换按钮"; "自动模式" := "自动切换按钮" AND NOT "半自动切换按钮"; "半自动模式" := NOT "自动切换按钮" AND "半自动切换按钮"; END_IF; //手动 IF "手动模式" AND #回原点流程=0 THEN "装料阀" := "装料按钮" AND "原点"; "前进" := "前进按钮" AND NOT "终点"; "卸料阀" := "卸料按钮" AND "终点"; "后退" := "后退按钮" AND NOT "原点"; END_IF; //自动/半自动 IF ( "自动模式" OR "半自动模式" )AND #回原点流程=0 THEN #R_TRIG_Instance(CLK := "启动"); #R_TRIG_Instance_1(CLK:="停止"); IF #R_TRIG_Instance_1.Q THEN #停止标志 := 1; END_IF; IF #R_TRIG_Instance.Q AND #流程=0 THEN #流程 := 1; END_IF; IF #流程 = 1 AND "原点" THEN "装料阀" := 1; #流程 := 2; END_IF; #T0(IN:=#流程 = 2, PT:=T#5S); IF #T0.Q THEN "装料阀" := 0; #流程 := 3; END_IF; IF #流程 = 3 THEN "前进" := 1; END_IF; IF #流程 = 3 AND "终点" THEN "前进" := 0; #流程 := 4; END_IF; IF #流程 = 4THEN "卸料阀" := 1; END_IF; #T1(IN:=#流程 = 4, PT:=T#5S); IF #T1.Q THEN "卸料阀" := 0; #流程 := 5; END_IF; IF #流程 = 5 THEN "后退" := 1; END_IF; IF #流程 = 5 AND "原点" THEN "后退" := 0; #流程 := 6; END_IF; IF #流程 = 6 AND "半自动模式" THEN #流程 :=0; END_IF; IF #流程 = 6 AND "自动模式" AND NOT #停止标志 THEN #流程 := 1; END_IF; IF #流程 = 6 AND "自动模式" AND #停止标志 THEN #流程 := 0; #停止标志 := 0; END_IF; END_IF; //回原点 IF "回原点按钮" AND NOT "原点" AND #回原点流程=0 THEN #回原点流程 := 1; END_IF; IF #回原点流程 = 1 THEN "前进" := 1; END_IF; IF #回原点流程 = 1 AND "终点" THEN "前进" := 0; #回原点流程 := 2; END_IF; IF #回原点流程 = 2 THEN "卸料阀" := 1; END_IF; #T2(IN:=#回原点流程 = 2, PT:=T#5S); IF #T2.Q THEN "卸料阀" := 0; #回原点流程 := 3; END_IF; IF #回原点流程 = 3 THEN "后退" := 1; END_IF; IF #回原点流程 = 3 AND "原点" THEN "后退" := 0; #回原点流程 := 0; END_IF;
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |