标签:
功能指令及应用(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,VW24
/I VW12,VW24
MOVW VW10,VW32
DIV VW12,VD32
5、数学函数指令
包括:平方根、自然对数、指数、正弦、余弦、正弦
5-1:平方根命令(square root)
功能描述:双子长(32)的IN开平方,送入OUT(32)
数据类型:输入/输出REAL
5-2:自然对数指令(natural logarithm)
功能描述:将一个双子长(32)的实数IN取自然对数后送到OUT(32)
数据类型:输入/输出均为REAL
举例:
LD I0.0
EU
LN VD0,AC0
LN 10.0,VD100
/R VD100,AC0
5-3:指数指令(natural exponential)
功能描述:将一个双子长(32)的实数IN取以e为底的指数后送到OUT(32)
数据类型:输入/输出均为REAL
5-4:正弦(Sine)、余弦(Cos)、正切(Tan):注:输入为“弧度值”
功能描述:将一个双子长(32)的实数IN取正弦、余弦、正切送到OUT(32)
数据类型:输入/输出均为REAL
举例:
LD I0.0
EU
MOVR 3.14159,AC0
/R 180.0,AC0
*R 10.0,AC0
COS AC0,AC1
MOVR 3.14159,AC2
/R 180.0,AC2
MOVR 120.0,AC3
*R AC2,AC3
SIN AC3,AC3
+R AC1,AC3 //SIN120°+cos10°
6、增/减指令
又称自增/自减指令。对无符号或者有符号整数进行自加1或者减1操作
6-1:增指令(Increment)
数据类型:字节、INT、DINT
INC* OUT
6-2:减指令(Decrement)
DEC* OUT
举例:
LD I0.0
EU
MOVW AC0,VW50
INCW VW50
MOVD VD100,VD110
INCD VD110
7、逻辑运算指令
包括:逻辑与、逻辑或、逻辑异或、取反。参与运算的可以是:字节、字、双字
7-1:逻辑与(logic and):AND* IN1,OUT
7-1:逻辑或(logic or):OR* IN1,OUT
7-3:逻辑异或(logic exclusive or):XOR* IN1,OUT
7-4:取反(logic invert):INV* OUT
举例:
LD I0.0
EU
ANDB VB0,AC1
ORB VB0,AC0
XORV VB0,AC2
INVB VB10
三、表功能指令
一个表:表地址(表的首地址)+最大填表数(TL)+实际填表数(EC) /!最多100个(字)填表数据!!
TL存放在表地址所指向的存储单元,第二个字地址所对应的存储单元存EC
表为“字”存储的
1、表存数指令(add to table)
LAD:AT_T_TBL
STL:ATT DATA,TBL (DATA 字型,TBL int型)字型:无符号;int:有符号。
添加到表的最后一个有效数据之后,且EC+1;
2、表取数指令
两种方式:先进先出型,后进先出型
取出后EC-1
如果试图从一个空表中取出一个数据,则特殊标志寄存器SM1.5置位
2-1:先进先出(FIFO)
FIFO TBL,DATA
LD I0.0
EU
FIFO VW100,AC0
2-2:后进先出(LIFO)
LIFO TBL,DATA
LD I0.0
EU
LIFO VW200,AC0
3、表查找指令(table find)
从数据表中取出符合条件数据的表中标号,编号范围0~99
STL格式:
FND= TBL,PTN,INDX (查找条件 =PTN)
FND<> TBL,PTN,INDX ()
FND< TBL,PTN,INDX
FND> TBL,PTN,INDX
功能描述:
TBL:被访问表格的首地址
PTN:描述查表条件时进行比较的数据
CMD:比较运算符“?”的编码为1~4的数值(分别代表=,<>,<,>)
指令执行前:先对INDX内容清0。从INDX开始搜索表TBL,寻找符合由PTN和CMP所决定的条件的数据。如果没有发现,最后INDX为EC;如果找到一个符合条件的数据,则此处的地址存到INDX
举例:
LD I0.0
EU
FND> VW100,VW300,AC0
三、转换指令
包括:数据的类型转换、码的类型转换、数据与码的类型转换
1、数据转换指令
类型:字节、整数、双整数、实数
主要码制:BCD码、ASCII码、十进制数、十六进制数。
目的:不同的数据类型之间进行数学运算,就需要将两者转成同一个类型
1-1:字节与整数
1-1-1:字节到整数
LAD:B_I STL:BTI IN,OUT
功能描述:字节型输入的IN转换成整数类型,并将其送到OUT。字节型(无符号的),所以没有符号扩展位
数据类型:输入为字节,输出为INT
1-1-2:整数到字节
LAD:I_B STL:ITB IN,OUT
功能描述:整数型输入的IN转换成字节类型。并将结果送到OUT。!!输入数超过255时产生溢出
数据类型:输入为INT,输出为字节
1-2:整数与双整数
1-2-1:双整数到整数
LAD:DI_I STL:DTI IN,OUT
功能描述:双整数输入IN转换成整数类型,并在OUT输出
1-3:双整数与实数
1-3-1:实数到双整数
两条指令ROUND TRUNC
ROUND IN,OUT (小数部分四舍五入)
TRUNC IN,OUT(小数部分舍去)
1-3-2:双整数到实数
DTR IN,OUT
1-3-3:整数到实数
没有固定的指令,先用ITD再用DTR指令
(!!@@ 字节--整型--双整型--实数,相连接的顺序有特定的转移指令,其他的需要按照顺序转换)
1-4整数与BCD
BCD binary code decimal 在计算机内用二进制表示十进制。
范围0~9999(字型)
1-4-1:BCD到整数
BCDI OUT STL中in和out使用相同的存储位置,LAD中可以不同
1-4-2:整数到BCD
IBCD OUT
2、编码和译码指令
2-1编码指令(encode)
功能描述:将“字”型数据IN的最低有效位(值为1的位)的位号输出到OUT所指定的字节单元的低4位,即,用半个字节来对一个字型数据中16位中的“1”位有效位进行编码
LD I0.0
EU
ENCO VW0,VB10
2-2:译码指令(decode)
功能描述:将字节型输入数据IN的低4位所表示的位号对OUT所指定的字单元的对应位置1,其他位置0.即,用半个字节的编码进行译码。
LD I0.0
EU
DECO VB0,VW10
3、段码指令
功能描述:将字节型IN的低4位有效数字产生相应的七段码,输出到OUT所指定的字节单元。
LD I0.0
EU
SEG VB10,QB0
4、ASCII码转换指令
一个字节存储,0-127存储不同的符号
4-1:ascii转为16进制
功能描述:从IN开始的长度为LEN的16进制转换为ascii码,并将结果送到从OUT开始的字节输出。LEN最大为255
数据类型:IN、LEN、OUT 均为字节型
LD I0.0
EU
HTA VB10,VB20,4
4-2:16进制转为ascii
功能描述:从IN开始的长度为LEN的ascii码转换为16进制数,并将结果送到OUT开始的字节输出,LEN的最大长度为255
LD I0.0
EU
ATH VB30,VB40,3
4-3:整数转换为ascii码指令
功能描述:整数IN转化为一个ascii码字符串。格式FMT指定小数点右侧的转环精度和小数点使用逗号还是点号。转换结果放在OUT指定的连续的字节中。
ITA IN,OUT,FMT
(!!FMT的低三位为小数点右侧的位数0-5. 低第四位表示逗号(1)、点号(0)表示小数点)
LD I0.0
EU
ITA VW10,VB20,16#0B
4-4:双整数转换为ascii
功能描述:双整数IN转换为一个ascii字符串。格式FMT同上。 连续的12个字节OUT存储
DTA IN,OUT,FMT
4-5:实数转为ascii
功能描述:实数IN转成ascii字符串。FMT如上。结果在OUT 3-15个字节
RTA IN,OUT,FMT
LD I0.0
EU
RTA VD10,VB20,16#A3
5、字符串转换指令
ITS IN,FMT,OUT
DTS IN,FMT,OUT
RTS IN,FMT,OUT
STI IN,INDX,OUT
STD IN,INDX,OUT
STR IN,INDX,OUT
五、字符串指令
1、字符串长度指令:SLEN IN,OUT
2、字符串复制指令:SCPY IN,OUT
3、字符串链接指令:SCAT IN,OUT
4、从字符串中复制字符串:SSCPY IN,INDX,N,OUT 从indx开始的n个
5、字符串搜索指令:SFND IN1,IN2,OUT (从in1中搜索in2字符串,out为索引起始位置,最后为搜索字符串首个字符位置!!)
6、字符搜索指令:CFND IN1,IN2,OUT
LD I0.0
EU
MOVB 1,AC0
MOVB 1,AC1
SFND VB0,VB10,AC0
CFND VB0,VB30,AC1
STR VB0,AC1,VD100
六、子程序
包括:建立子程序,子程序的调用,返回
1、子程序的建立:
编程软件,编辑,插入子程序
2、子程序的调用
2-1:子程序调用指令(CALL)
LAD: EN使能时进入子程序名的子程序 返回用—(RET)
STL:CALL 子程序名 返回:CRET
注意:1、子程序调用时,堆栈自动保存,栈顶置1,其他值为0
2、累加器可在调用程序和调用子程序之间自由传递。
3、带参数的子程序调用
子程序最多可传递16个参数。参数在子程序的局部变量表中加以定义。
局部变量表:变量名、变量类型、数据类型
规则:1、常数参数必须声明类型。如:DW#223
2、输入或输出参数没有自动数据类型功能。
3、参数在调用时必须按照一定的顺序排列
(!!???参数表中的数据可为输入/输出。所以CALL 程序名 参数…… 输入输出均可)
七、时钟指令
利用时钟指令可以实现调用系统实时时钟或根据需要设定时钟,对于控制系统的运行监视,运行记录和所有有关实时时间的控制非常方便。
1、读实时时钟指令
指令描述:读当前时间和日期,并且把它装入一个8字节的缓冲区,操作数T用来指定8个字节缓冲区的地址
TODR T
2、设定实时时钟指令
指令描述:包括时间和日期的8字节的缓冲区装入PLC的时钟去。T为8字节的其实地址
TODW T
注:1、没有使用过时钟指令的PLC,在使用前,要在编程软件中“PLC”一栏中对PLC进行时钟的设定。
2、所有的日期和时间值均要用BCD表示
3、系统不检查实时时钟各值是否正确。如2月31日
4、不能同时在主程序和中断程序中使用读写时钟指令,否则会有致命错误,中断程序中的实时时钟指令将不被执行
5、cpu224以上才有硬件时钟
八、中断
可在实时处理、运动控制、网络通信中非常重要
1、几个基本概念:
1-1、中断源及种类(中断请求来源 每个中断源分配一个编号加以识别,称作中断事件号)
通信中断:利用数据接收和发送中断可以对通信进行控制
输入/输出中断:外部输入中断(利用I0.0-I0.3的上升沿或者下降沿产生中断)、高速计数器中断(响应当前值等于预设值、技术方向改变、计数器外部复位等事件引起的中断)、脉冲串输出中断(响应给定数量的脉冲输出完成所引起的中断,常用在步进电动机的控制中)
时基中断:包括定时中断和定时器中断
定时中断:可以用来支持一个周期性的活动,周期时间以1ms为计量单位,周期可以是1-255ms
定时器中断:利用定时器对一个指定的时间段产生中断,(!!!只能使用分辨率为1ms的定时器T32和T96实现)
1-2、中断优先级
中断优先级:通信中断、输入/输出中断、时基中断
注意:!!PLC中按照先来先服务的原则执行中断程序,中断执行时,不会被其他更高的中断打断。!!中断执行时,新出现的中断请求按照优先级高低排队。
2、中断指令
中断执行时 自动保存逻辑堆栈、累加器和某些特殊标志寄存器位,保护现场。
2-1:中断连接指令(attach interrupt)
功能描述:将一个中断事件和一个中断程序建立联系,并允许这一中断事件
数据类型:中断程序号INT和中断事件号EVNT均为“字节型”。
2-2:中断分离指令(detach interrupt)
功能描述:切段一个中断事件和所有程序的联系,从而禁止了该中断事件。
2-3:开中断指令(enable interrupt)、关中断指令(disable interrupt)
ENI:开中断指令(中断允许指令)。全局开放所有被连接的中断事件。
DISI:关中断指令。
2-4:清除中断事件指令(clear event)
功能描述:可从中断队列中清楚所有的EVENT类型的中断事件。队列中清除不需要的中断事件。
2-5:中断条件返回(CRETI)
功能描述:条件返回指令,可根据前面的逻辑操作的条件从中断程序中返回。
注:1、多事件可调用一个中断程序,但一个事件不能调用多个中断程序。
2、系统由其他模式切换到RUN时,就自动关闭了所有的中断
3、可通过编程在RUN模式下,用ENI开放所有的中断
4、特别的:在一个程序中使用中断,至少有一次EMI指令
LD I0.0
MOVB 200,SMB34
ATCH INT_EX,10
ENI
//INT_EX
LD SM0.0
MOVW AIW0,VW200
标签:
原文地址:http://www.cnblogs.com/keepgoing707/p/4946396.html