各位高手:
有一个问题请教一下,有一个数据块,其中存有40个工位的参数号,不同产品其参数号是不同的,根据每个工位产品的不同,需要定期修改某个工位的参数号(在触摸屏上修改),因为每次生产在不同工位上总是有相同的产品,因此40个工位上的参数号有相同的情形,现在的问题是:怎样实现我修改一个参数号后,其它与之相同的参数号全部自动更改为我修改的号呢?如1号,3号,23号,34号,40号原先的参数号为65号,因为这些工位都换了产品,我在1号工位上将65改为50,则其它3号,23号,34号,40号也能自动更改为50呢?PLC是315-2DP,用的TP270(Protool组态)。
各位帮忙出个思路,实在想不出一个合理的方法,谢谢!
1、在PLC设置时建立DB1数据区,如各工位的参数号最大置数<255,可选用DB1的前40个字节存储器作为40个工位的参数号存数区:DB1.DBB0为第一工位的参数号存数区,DB1.DBB1为第二工位的参数号存数区。。。。DB1.DBB39为第40工位的参数号存数区。这40个存储器与触摸屏通讯。
2、如参数号相同的工位是固定的,如:1号,3号,23号,34号,40号的工位的参数号总是相同的(即总是放相同产品),而2号,5号,24号,35号,38号的工位的参数号也是相同的另一种产品...在触摸屏修改新参数号时,可规定只修改各组里工位序号最小的存储区参数即可。如第一组,只在触摸屏里改写1号存储器(DB1,DBB0)的值,程序会自动的通过MOVE指令,将DB1.DBB0的内容传递给3号(DB1,DBB2)、23号(DB1,DBB22)、34号(DB1,DBB33)40号(DB1,DBB39)里。见下面梯形图:
..........
感谢各位的关心,这几天一直在考虑这个问题,终于想出了段程序,在数据块中进行循环比较,找到相同的数后,全部进行更改。程序如下:
L #position
L 4
*I
T #Pos_temp
L #Pos_temp
L 4
-I
T #POS
L #POS
SLD 3
T #index
T #POS
L #P_max
SLD 3
T #max_temp
L #P_min
SLD 3
T #min_temp
L 0
T #i
L #index
L #max_temp
>=D
JCN mid
L 0
LAR1
L #POS
LAR2
OPN "mould_Nr"
L 40
next: T #count
L DBW [AR2,P#0.0]
L DBW [AR1,P#0.0]
==I
JCN ad1
L #In_value
T DBW [AR1,P#0.0]
L 1
L #i
+I
T #i
ad1: +AR1 P#4.0
L #count
LOOP next
JU end
mid: L #max_temp
L #index
-D
T #count_1
L #count_1
SRD 3
T #count_2
L #count_2
L 4
/I
T #count_3
L #POS
LAR2
LAR1 AR2
+AR1 P#4.0
OPN "mould_Nr"
L #count_3
Nxt: T #count
L DBW [AR2,P#0.0]
L DBW [AR1,P#0.0]
==I
JCN ad2
L #In_value
T DBW [AR1,P#0.0]
L 1
L #i
+I
T #i
ad2: +AR1 P#4.0
L #count
LOOP Nxt
L 40
L #count_3
-I
T #count_4
L 0
LAR1
OPN "mould_Nr"
L #count_4
Nx: T #count
L DBW [AR2,P#0.0]
L DBW [AR1,P#0.0]
==I
JCN ad3
L #In_value
T DBW [AR1,P#0.0]
L 1
L #i
+I
T #i
ad3: +AR1 P#4.0
L #count
LOOP Nx
end: L #In_value
T DBW [AR2,P#0.0]
L #i
T #counts
NOP 0
在OB1调用这个程序块即可。