功能指令及应用(s7-200)
·传送类指令
·运算指令
·子程序
·时钟指令
·中断
·PID指令
·通信指令
一、传送、移位、填充指令
1、传送类
1-1:单一传送(Move):指令格式(MOV* IN,OUT //*:B、W、DW(LAD中)D(STL中)、R) 功能描述:使能端输入有效时,把数据从IN传到OUT所指的存储单元 数据类型:输入/输出均为一致
1-2:块传送(Block Move):指令格式(BM* IN,OUT,N //*:B、W、DW(LAD中)D(STL中)、R; N<=255) 功能表述:使能端有效时把从IN开始的N个数据传送到OUT开始的N个字符存储单元。 数据类型:输入/输出相同
1-3:字节立即传送(Move Immediate):
字节立即读:BIR IN,OUT
字节立即写:BIW IN,OUT
举例:
LD I0.0
EU
MOVB VB100,VB200
MOVW VW110,VW210
MOVD VD120,VD120
BMB VB130,VB230,4 //传送4个字节
VMW VW140,VW240
BIR IB1,VB270 //从I1物理输入状态立即送到VB270中,不受扫描周期的影响
BIW VB270,QB0 //将VB270中的数据立即从Q0输出,不受扫描周期的影响
2、移位与循环指令
类型:左移、右移、左循环、右循环
2-1:移位指令(shift)
移出数据存储单元与SM1.1(溢出)相连接。
移位次数与移位数据长度有关,超出的次数无效(例如字左移20次,实际只有16次)
若移位操作使得最后数据变为0,则零存储器标志位(SM1.0)自动置位
左移:SL* OUT,N
右移:SR* OUT,N
注意:LAD中输入/输出的位置可以不同,但在STL中相同
举例:
LD I0.0
EU
SLB VB0,2
SRW VW10,3
2-2:循环移位指令(Route)
移出端与另一端相连,同时又与SM1.0(溢出)相连
移位次数与数据长度有关,若设定值大于数据长度,则取余数,作为移位长度
左移:RL* OUT,N
右移:RR* OUT,N
注意:LAD中输入/输出的位置可以不同,但在STL中相同
举例:
LD I0.0
EU
RRW VW0,3
2-3:寄存器移位指令(shift register)
使能端有效时,每个扫描周期移位一次,注:不要用边沿跳变来控制使能端的状态,不然就失去了应用意义
移出端与SM1.1(溢出)相连。移位时,一端进入SM1.1,另一端自动补上DATA移入低位
移位分为正向和反向:
正向:N>0 最低字节的最低位移入,最高字节的最高位移出
反向:相反
举例:
LD I0.0
EU
SHRB I0.5,V20.0,5
3、字节交换指令
功能表述:高字节和低字节进行交换
数据类型:输入为字
举例:
LD I0.0
EU
SWAP VW10
4、填充指令(Memory fill)
功能表述:将“字”型输入数据IN填充到输出OUT所指的单元开始的N个存储单元中
举例:
LD SM0.1
FILL 10,VW100,12 //将10填充到vw100以后的12个字节中去
二、运算和数学指令
注:LAD与STL中的区别是,STL中OUT要和IN1、IN2中的一个为同一个地址存储单元。而在LAD中可以不同
所以!!!!:建议使用LAD进行运算和数学指令的编程
1、加法指令:
功能描述:LAD:IN1+IN2=OUT; STL:IN+OUT=OUT
数据类型:输入输出相同(I DI R)
STL表示:+* IN1,OUT
2、减法指令:
功能描述:LAD:IN1-IN2=OUT; STL:OUT-IN1=OUT
数据类型:输入输出相同(I DI R)
STL表示:-* IN1,OUT
3、乘法指令
3-1:一般乘法指令
LAD:IN1*IN2=OUT
STL:IN1*OUT=OUT
数据类型:输入输出相同(I DI R)
3-2:完全整数乘法:
LAD:IN1*IN2=OUT
STL:IN1*OUT=OUT
数据类型:输入为INT 输出为DINT
4、除法指令
4-1:一般除法指令(Divide)
LAD:IN1/IN2=OUT
STL:OUT/IN1=OUT
数据类型:输入/输出相同,不保留余数(I DI R)
4-2:完全整数除法(Divide integer to double integer)
两个16位符号整数相除,产生一个32的结果,低16位为商,高16位为余数。
LAD:IN1/IN2=OUT
STL:OUT/IN1=OUT
举例:
LD I0.0
EU
MOVW VW10,VW16
+I VW12,VW16
MOVW VW10,VW18
-I VW12,VW18
MOVW VW10,VW22
MUL VW12,VD20 //完全乘法
MOVW VW10