请大家帮忙看一下以下这段程序中的问题啊,不合理的地方帮忙找出来,告诉小弟!不胜感激!!!
0 ld x000
1 or y05
2 Ani X1
3 OUT Y5
4 LD M8002
5 SET S0
7 STL S0
8 LD Y5
9 SET S20
11 STL S20
12 RST Y2
13 RST Y3
14 RST Y4
15 LD X3
16 AND X5
17 AND X7
18 SET S21
20 STL S21
21 OUT T0 K10
24 MPS
25 AND TO
26 RST Y1
27 MRD
28 ANI X11
29 AND Y5
30 PLSY K100 K0 Y0
37 MPP
38 ANI Y01
39 ANDP X11
41 MPS
42 ANI X12
43 SET S22
45 MPP
46 AND X12
47 SET S24
49 STL S22
50 OUT Y7
51 OUT T1 K10
54 LD T1
55 SET S23
57 STL S23
58 OUT T2 K1O
61 SET Y2
62 SET Y3
63 SET Y4
64 SET Y1
65 LD T2
66 OUT S0
68 STL S24
69 OUT Y7
70 OUT T3 K10
73 LD T3
74 SET S25
76 STL S25
77 SET Y2
78 SET Y3
79 SET Y4
80 OUT T4 K3
83 LD T4
84 SET S26
86 STL S26
87 OUT T5 K20
90 RST Y2
91 RST Y3
92 RST Y4
93 LD X10
94 AND X13
95 SET Y1
96 AND T5
97 AND Y5
98 OUT S21
100 RET
101 END
知道了问题的成因后,我们就可以把楼主的“步进顺序功能程序”的毛病改正了。
改正的程序如下所示(今天不准贴图片,我就用指令表程序的形式贴出来):
0 LD X000
1 OR Y005
2 ANI X001
3 OUT Y5
4 AND M1
5 PLSY K5 K0 Y0
12 LD M8002
13 SET S0
15 STL S0
16 LD Y5
17 SET S20
19 STL S20
20 RST Y2
21 RST Y3
22 RST Y4
23 LD X3
24 AND X5
25 AND X7
26 SET S21
28 STL S21
29 OUT T0 K10
32 LD T0
33 RST Y1
34 LDI X11
35 OUT M1
36 LDI Y1
37 ANDP X011
39 MPS
40 ANI X012
41 SET S22
43 MPP
44 AND X12
45 SET S24
47 STL S22
48 OUT Y7
49 OUT T1 K10
52 LD T1
53 SET S23
55 STL S23
56 OUT T2 K10
59 SET Y2
60 SET Y3
61 SET Y4
62 SET Y1
63 LD T2
64 OUT S0
66 STL S24
67 OUT Y7
68 OUT T3 K10
71 LD T3
72 SET S25
74 STL S25
75 SET Y2
76 SET Y3
77 SET Y4
78 OUT T4 K3
81 LD T4
82 SET S26
84 STL S26
85 OUT T5 K20
88 RST Y2
89 RST Y3
90 RST Y4
91 LD X10
92 AND X13
93 SET Y1
94 AND T5
95 AND Y5
96 OUT S21
98 RET
99 END
知道了问题的成因后,我们就可以把楼主的“步进顺序功能程序”的毛病改正了。
改正的程序如下所示(今天不准贴图片,我就用指令表程序的形式贴出来):
0 LD X000
1 OR Y005
2 ANI X001
3 OUT Y5
4 AND M1
5 PLSY K5 K0 Y0
12 LD M8002
13 SET S0
15 STL S0
16 LD Y5
17 SET S20
19 STL S20
20 RST Y2
21 RST Y3
22 RST Y4
23 LD X3
24 AND X5
25 AND X7
26 SET S21
28 STL S21
29 OUT T0 K10
32 LD T0
33 RST Y1
34 LDI X11
35 OUT M1
36 LDI Y1
37 ANDP X011
39 MPS
40 ANI X012
41 SET S22
43 MPP
44 AND X12
45 SET S24
47 STL S22
48 OUT Y7
49 OUT T1 K10
52 LD T1
53 SET S23
55 STL S23
56 OUT T2 K1O
59 SET Y2
60 SET Y3
61 SET Y4
62 SET Y1
63 LD T2
64 OUT S0
66 STL S24
67 OUT Y7
68 OUT T3 K10
71 LD T3
72 SET S25
74 STL S25
75 SET Y2
76 SET Y3
77 SET Y4
78 OUT T4 K3
81 LD T4
82 SET S26
84 STL S26
85 OUT T5 K20
88 RST Y2
89 RST Y3
90 RST Y4
91 LD X10
92 AND X13
93 SET Y1
94 AND T5
95 AND Y5
96 OUT S21
98 RET
99 END
以后再遇到不懂得 还希望前辈多多指导..........
内容的回复:
今天我们谈<luw816>网友的这个SFC程序的化简问题。
对于这种实际问题,因为我们不在现场,对实际问题的信息没有全部的了解。所以,除了<luw816>之外,我们谈这个问题是没有优势的。还望<luw816>网友大力的支持,把我们需要的相关实际信息尽量的提供给我们。
譬如,我们仅仅知道这个SFC程序中的Y7是“向另一个PLC提供输入信号用的”这一信息还不够,还应该知道另一个PLC是用这个Y7信号的“ON/OFF”状态,还是只用其“上升沿”或“下降沿”?假如另一个PLC只是用这个Y7信号的“上升沿”,那么,我们就可以将原程序的101步等效化简之后只有80步(都未计END)。
今天我们谈<luw816>网友的这个SFC程序的化简问题。
对于这种实际问题,因为我们不在现场,对实际问题的信息没有全部的了解。所以,除了<luw816>之外,我们谈这个问题是没有优势的。还望<luw816>网友大力的支持,把我们需要的相关实际信息尽量的提供给我们。
譬如,我们仅仅知道这个SFC程序中的Y7是“向另一个PLC提供输入信号用的”这一信息还不够,还应该知道另一个PLC是用这个Y7信号的“ON/OFF”状态,还是只用其“上升沿”或“下降沿”?假如另一个PLC只是用这个Y7信号的“上升沿”,那么,我们就可以将原程序的101步等效化简之后只有80步(都未计END)。
内容的回复:
关于<luw816>提问的“plsy用到步进顺控中为啥会发生这么种情况?”,我早已经回复过了!
我在第56、59、60楼用这3个回帖合起来说明了<PLSY>指令放在“状态S21”的片断中会造成该指令在“状态S21”关断期间没有经过“OFF演算”,所以当“状态S21”第2次开通时,<PLSY>指令再驱动时运算出错,故“状态S21”第2次开通期间<PLSY>没有脉冲输出;“状态S21”第3次开通时,<PLSY>指令才开始执再驱动所赋予的“输出脉冲”的任务。即编程手册中所提到的<PLSY>指令的特点:
请在以下条件成立的基础上执行指令驱动接点OFF状态后的再起动。
条件: 前次驱动的脉冲输出指令的“脉冲输出中监视(Y00:[M8147],Y01:[M8148])”处于OFF状态后,必须经过1个以上演算周期方能再次执行。
这是由于脉冲输出指令的再次驱动必须经过1次以上OFF运算。若在上述条件指定时间前执行再次驱动,将在最初指令执行扫描时发生“运算错误”,在第二次指令执行扫描时开始输出用于再驱动的脉冲。
---------------------------------------------------
SFC程序的扫描过程是选择开通(ON)的“状态S内的片断” 来扫描运算的:
因为我注意到<luw816>网友的原程序中的Y2、Y3、Y4(分别控制仨电磁阀)在不同的“状态S”里总是一同ON,也一同OFF!所以,我们就没有必要分别用12条指令去操作它们了,改用4条指令分配到4个“状态S”里对Y2操作足矣。PLC的Y2对外接一个仨触点的继电器,由继电器控制仨电磁阀。
在“状态S”的分配上,原程序用了8个“状态S”,而化简的程序只用了5个“状态S”。
原程序中“状态S0”基本上没有分配实质性的任务,所以,我将原程序中“状态S20”的任务分配给了“状态S0”,从而取消了“状态S20”。
再把原程序中“状态S23”的任务合并到“状态S22”中,从而取消了“状态S23”;再把原程序中“状态S25”的任务合并到“状态S24”中,从而取消了“状态S25”。