西门子STEP 7在使用STL指令编程时,状态位的状态极其重要,有些指令的执行与状态位有关,比如“位逻辑指令A”,而大部分指令的执行却与状态位无关,比如“装载指令L”。对于刚刚接触STEP 7的朋友们来说很难理解。
指令的执行与状态位有关的指令有如下:
位逻辑指令、定时器指令、计数器指令;
位逻辑指令、定时器指令、计数器指令;
这些指令在执行前,状态位的相关位的状态会影响到执行结果,比如如下程序:
A M 0.0
CU C 0 //M0.0有上升沿时,计数器C0就加1
A M 0.1
L C#5
S C 0
A M 0.2
R C 0
A C 0
= M 0.7
如果将以上程序改为如下程序,则结果完全不同:
A M 0.0
CLR
CU C 0 //M0.0有上升沿时,因为有了CLR指令将状态位RLO位置0,所以计数器C0不在计数
A M 0.1
L C#5
S C 0
A M 0.2
R C 0
A C 0
= M 0.7
指令的执行与状态位有关的指令有如下:
转换指令、数据块指令、逻辑控制指令、整数运算指令、浮点型数学运算指令、转载与传送指令、程序控制指令、移位和循环指令、字逻辑指令、累加器指令。、
无论状态位是什么状态,这些指令在每个扫描周期都会被执行,因此,在指令前加位逻辑限制条件没有用。比如:L指令,无论L指令执行之前是什么位逻辑指令,在每个扫描周期L指令都会被执行,只有在L指令前加跳转指令,才会不被执行。比如如下指令:
L MW0 //装载MW0的数据到ACCU1-L中,每个扫描中期都会执行
T MW10 //将ACCU-L中的数据输出到MW10,每个扫描中期都会执行
如果将以上程序改为如下:
A M100.0
CLR
L MW0 //装载MW0的数据到ACCU1-L中,无论M100.0状态如何,均会执行
T MW10 //将ACCU-L中的数据输出到MW10,无论M100.0状态如何,均会执行
因此,无论M100.0状态如何,L MW0和T MW10始终都会执行。
如果不想让L MW0和T MW10指令执行,则应该改为如下:
A M100.0 //
JC _001 //当M100.0为1时,程序跳转到_001处;如果M100.0为0时,往下执行
L MW0 //装载MW0的数据到ACCU1-L中,当M100.0为1时不执行
T MW10 //将ACCU-L中的数据输出到MW10,当M100.0为1时不执行
_001: BLD 0 //程序跳转到此处继续执行
- 下一篇:如何正确选择伺服电机和步进电机
- 上一篇:西门子传感器的分类