码迷,mamicode.com
首页 > 其他好文 > 详细

PLC:学习笔记(西门子)4

时间:2015-11-08 14:14:54      阅读:371      评论:0      收藏:0      [点我收藏+]

标签:


功能指令及应用(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

PLC:学习笔记(西门子)4

标签:

原文地址:http://www.cnblogs.com/keepgoing707/p/4946396.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!