SIEMENS西门子衡水授权总代理
S7-300的RLO上升沿检测指令-(P)- 的作用是不是会受程序扫描时间影响?
(1)我在FC块里面用到-(P)- ,发现程序比较长的时候就出现下图中情况,根本不能用来检测上升沿;
(2)当我把OB1其他的程序都删掉时,只调用这个FC块时,就可以检测上升沿,不会有问题。
(3)另一个是我尝试-(P)-指令要是不在FC块,直接在OB1中,也是不会有问题。
下面是廖常初老师的回帖:P线圈(上升沿检测指令)上面的地址用来保存上一扫描周期的RLO的值,不能使用FB、FC的临时局部变量。改为全局变量或FB的静态变量就可以了。因为调用程序时同一级FB、FC的临时变量公用同一片地址区,前面调用的块的临时变量被后面调用的块的临时变量覆盖,上升沿检测指令不能正常运行。在OB1中只调用一个FC,公用的地址区变成该FC独用,没有问题。OB1的临时变量的地址区是OB1单独使用的,程序放在OB1里也没有问题。
(D)CMP(P)比较-------将两源操作元件的数据作代数比较,结果送到目标元件中,决定目标元件的状态。
源操作元件:K/HKnX KnY KnM KnS T C D V/Z
目标元件:YM S
格式:LDX0
CMP(P)K100 C20 M0
X0由OFF到ON时: 当K100>C20当前值时,M0=1
当K100=C20当前值时,M1=1
当K100当用连续方式执行CMP时,条件满足时,每个扫描周期执行一次。
(D)ZMP(P)区间比较--------将一个数据与两个源元件的数据区间作比较,结果送到目标元件中,决定目标元件的状态。
源操作元件:K/HKnX KnY KnM KnS T C D V/Z
目标元件:YM S
格式:LDX0
ZCP(P)K100 K120 C30 M3
X0由OFF到ON时:当K100>C30当前值时,M3=1
当K100≤C30≥K120时,M4=1
当K120当用连续方式执行ZCP时,条件满足时,每个扫描周期执行一次。
(D)MOV(P)传送---------将操作元件的数据传送到目标元件中。
源操作元件:K/HKnX KnY KnM KnS T C D V/Z
目标元件:KnYKnM KnS T C D V/Z
格式:LDX0
MOV(P)K100 D10
当X0由OFF到ON时,将100传送到D10中
当用连续方式执行MOV时,条件满足时,每个扫描周期执行一次。
对于32位数据用DMOV传送,用元件号相临的两元件组成元件对。元件对的用奇数、偶数均可,但为避免出错,元件对的建议统一用偶数。
当传送指令执行时,常数自动转化成二进制数存入目标元件。
SMOV(P)移位传送--------将源元件的数据转化为BCD码,将BCD码根据要求移位后,传送到目标元件中。
源操作元件:K/HKnX KnY KnM KnS T C D V/Z
目标元件:KnYKnM KnS T C D V/Z
m:KH K/H的取值范围:1—4,即D1的值不可超过9999
n:KH
使用格式:如D1=1685D2=0
LDX0
SMOV(P)D1 K4 K2 D2 K3
当X0由OFF到ON时:将D1=1685转化为BCD码为0001 0110 1000 0101
D2=0转化为BCD码为 0000 0000 0000 0000
再将D1的BCD码从右起第4位开始的向右2位,移到D2中右起第3位开始向右的2位,1位和第4位不变。此时D2为 0000 0001 0110 000 ,D2=160
当用连续方式执行SMOV时,条件满足时,每个扫描周期执行一次。
(D)CML(P)取反传送----------将源元件内数据转化为二进制数逐位取反(0→1,1→0),并传送到目标元件。
源操作元件:K/HKnX KnY KnM KnS T C D V/Z
目标元件:KnYKnM KnS T C D V/Z
格式:如D0=11