S7-200PLC基本指令第四章本章学习目的
位操作类指令,主要是位操作及运算指令,
与时也包含与位操作密切相关的定时器和计数器指令等 。
运算指令,包括常用的算术运算和逻辑运算指令 。
其他数据处理类,包括数据的传送,移位,
填充和交换等指令 。
表功能指令,包括对表的存取和查找指令 。
转换指令,包括数据类型转换,码转换和字符转换指令 。
返回本章首页
4.1 概述
4.1.1数据类型
( 1) 数据类型及范围
SIMATIC S7-200系列 PLC数据类型可以是布尔型,整型和实型 ( 浮点数 ) 。 实数采用 32位单精度数来表示,其数值有较大的表示范围:正数为 +1.175495E-38~
+3.402823E+38 ; 负 数 为 -
1.175495E~38~ -3.402823E+38。
不同长度的整数所表示的数值范如表 3.8所示 。
( 2) 常数
在编程中经常会使用常数 。 常数数据长度可为字节,字和双字,在机器内部的数据都以二进制存储,但常数的书写可以用二进制,十进制,
十六进制,ASCII码或浮点数 ( 实数 ) 等多种形式 。 几种常数形式分别如表 3.9所示 。
4.1.2 S7-200数据区
数据区是 PLC中存储器存放工作数据的区域。
存储器按功能分区,可分为:
数字量输入和输出映像区 I/Q
模拟量输入和输出映像区 AI/AQ
变量存储器区 V— 存储变量或中间结果。可位、字节、字双字
顺序控制继电器区 S— 为顺序控制开辟的存储区
位存储器区 M— 存储标志,相当于中间继电器
特殊存储器区 SM--存系统状态和有关控制信息
定时器 T、计数器存储器区 C
每个存储单元编排了地址,称为软元件。
编程元件 CPU226为例输入继电器( I) I0.0~I15.7
输出继电器( Q) Q0.0~Q15.7
通用辅助继电器( M) M0.0~M31.7 256点
特殊标志继电器( SM) SM0.0~SM299.7
变量存储器( V) VB0~VB5119
局部变量存储器( L) LB0~LB63(后 4个不可用)
顺序控制继电器( S) S0.0~S31.7
定时器( T) T0~T255
计数器( C) C0~C255
模拟量输入映像寄存器( AI)
AIW0~AIW62
模拟量输出映像寄存器( AQ)
AQW0~AQW62
高速计数器( HSC) HSC0~5
累加器( AC) AC0~AC3
S7-200将编程元件统一归为存储器单元,存储单元按字节进行编址,无论所寻址的是何种数据类型,通常应指出它在所在存储区域和在区域内的字节地址 。 每个单元都有惟一的地址,地址用名称和编号两部分组成,元件名称 ( 区域地址符号 ) 如表 3.10所示 。
按位寻址的格式为,Ax.y
必须指定元件名称,字节地址和位号,如图
3.8 所示 。 图 3.8中 MSB表示最高位,LSB表示最低位 。
图 3.8 位寻址格式
M S B
I0
L S B
0
I 1 5
I4
I3
I2
I1
7 6 5 4 3 2 1
I 4,5
I 1 4,2
字节的位,即位号元件名称 ( 区域标志 )
字节地址位地址与字节地址之间的间隔
4.1.3 S7-200寻址方式
立即寻址
直接寻址
间接寻址
1立即寻址指令中操作数就是操作码所需要的具体的数据。立即数可以是字节、字、双字 。
例,MOVB 200,VB100
源操作数 目标操作数例,MOVB 16#2A,VB100
2,直接寻址方式操作码后面的操作数以地址形式给出
( 1)编址形式按位寻址的格式为,Ax.y
存储区内另有一些元件是具有一定功能的硬件,由于元件数量很少,所以不用指出元件所在存储区域的字节,而是直接指出它的编号。其寻址格式为,Ay
数据寻址格式为,ATx
例,MOVB VB0,VB100
3.间接寻址方式
间接寻址方式是,数据存放在存储器或寄存器中,
在指令中只出现所需数据所在单元的内存地址的地址 。 存储单元地址的地址又称为地址指针 。 这种间接寻址方式与计算机的间接寻址方式相同 。
例,MOVB *VD0 VB100 (VD0的内容
VB10,即 VB10的内容送 VB100,*表示地址 )
间接寻址在处理内存连续地址中的数据时非常方便,
而且可以缩短程序所生成的代码的长度,使编程更加灵活 。
用间接寻址方式存取数据需要作的工作有 3步:建立指针,间接存取和修改指针 。
( 1)建立指针
建立指针必须用双字传送指令 ( MOVD),将存储器所要访问的单元的地址装入用来作为指针的存储器单元或寄存器,装入的是地址而不是数据本身,
格式如下:
例,MOVD &VB10,VD0
MOVD &MB10,AC2
MOVD &C2,LD14
注意,建立指针用 MOVD指令 。
( 2)间接存取
指令中在操作数的前面加,*” 表示该操作数为一个指针 。
下面两条指令是建立指针和间接存取的应用方法:
MOVD &VB2,AC0
MOVW *AC0,AC1
若存储区的地址及单元中所存的数据如下所示
执行过程如下:
( 3)修改指针
下面的两条指令可以修改指针的用法:
INCD AC0
INCD AC0
MOVW *AC0,AC1
返回本节
4.1.4 S7-200的程序结构
程序组成:
主程序 OB1 一个
子程序 1 SBR0

子程序 N SBR63
中断程序 1 INT0

中断程序 N INT127
4.1.5 梯形图的基本画法
编制 PLC程序前的准备:
1、设计 PLC控制系统的结构、配置;确定
I/O位置
2、根据 I/O位置确定信号的 I/O地址(端口表)
3、设计、整理输入 /输出信号间的逻辑关系梯形图的基本画法
1、在左右两条逻辑电源线之间,按系统逻辑要求从左到右排列接点和线圈;计算机编程可只画左边
2、逻辑可以是一个或多个接点的串并联,然后接到输出线圈 (或指令盒 --定时器、锁存器、移位寄存器等 )
3、所有接点必须在输出线圈左边
4、输出线圈不能不经过任何接点直接接在两个逻辑电源线之间。
如何解决:上电后指令一直执行?
上电后指令只执行一次?
上电后指令一直执行 上电后指令只执行一次
SM0.0为常 ON继电器 SM0.1为第一周期 ON继电器
5、触点不要画在垂线上应画在水平线上
() ()
6、不含触点的分支不要放在水平方向
7、应尽量把串联多的电路放在最上边;把并联多的电路放在最左边(节省指令、美观)
() ()
8尽量避免出现双线圈输出同一个程序中,同一元件的线圈使用了两次或多次,称为双线圈输出。
双线圈引起逻辑关系混乱
PLC梯形图语言的编程原则
1,梯形图由多个梯级 (网络 NETWORK)组成,每个线圈可构成一个梯级,每个梯级有多条支路,每个梯级代表一个逻辑方程;
2,梯形图中的继电器、继电器接点、线圈不是物理的,是 PLC存 储器中的位 (1=ON; 0=OFF);故编程时常开 /常闭接点可 无限次引用,线圈输出只能是一次 ;
3,梯形图中流过的不是物理电流而是“概念电流”
成为,能流,,只能 从左向右流 ;
4、用户程序的运算是根据 PLC的输入 /输出映象寄存器中的内容,逻辑运算结果可以立即被后面的程序使用;
5,PLC的内部继电器不能做控制用,只能存放逻辑控制的中间状态;
6、输出线圈不能直接驱动现场的执行元件,通过 I/O
模块上的功率器件来驱动。
7、若梯形图中串联或并联的指令数超过网络规定的数值时 (32个 ),必须使用内部继电器经分段组合来完成。
PLC梯形图语言的编程原则
4,工作方式
( 1) STOP方式
( 2) RUN方式
5,改变 CPU工作方式的方法
1) 用 PLC上的方式开关来手动切换,方式开关有 3个挡位 。
2) 用 STEP 7-Micro/Win32编程软件,应首先把主机的方式开关置于 TERM或 RUN位置,然后在此软件平台用鼠标单击 STOP和
RUN方式按钮即可 。
3) 在用户程序中用指令由 RUN方式转换到
STOP方式,前提是程序逻辑允许中断程序的执行 。
4.2 指令系统
S7-200指令系统中可分,
基本指令 ----取代继电器控制系统的指令
应用指令 ----程序控制类指令、特殊功能指令指令分类 —— 按形式分
2.功能块
1.继电器 线圈 ——( )
Enable
输入参数 IN1
IN2
N
输出参数OUT
功能 数据类型地址条件长度
EN
常开触点动合常闭触点动开
=Q0.0LD I0.0 LDN I0.0
指令分类 —— 按功能分
1。 位操作功能
2。定时器 /计数器
3。算术运算功能
4。关系运算功能
5。数据传送功能
6。转换功能
7。控制功能
4.2.1基本逻辑指令逻辑关系 梯形图 助记符
I0.0 I0.1 LD I0.0A I0.1
= Q0.0

AND
当 I0.0与 I0.1都,ON” 时,
则输出 Q0.0“ON”(1)。
Q0.0
LD I0.0
O I0.1
= Q0.0

OR
当 I0.0 或 I0.1,ON”
时,则输出 Q0“ON”(1)
I0.0
I0.1
Q0.0
LDN I0.1
= Q0.0非当 I0.1,OFF” 时则输出 Q0.0“ON”(1)
Q0.0I0.1
I0.0 *
*I0.1
Q0.0
LD 装载 =线圈输出注意,与、或、非运算均是对从该指令前面的
ST
指令到该指令的前一个指令处的结果进行运算。
A
I0.2是与图中 A点处的结果(即 I0.0与 I0.1的结果)相或,而不是与 I0.1相或。
I0.0
I0.2
I0.1 LD I0.0
A I0.1
O I0.2
= Q0.0
例:
Q0.0
逻辑关系 梯形图 助记符
LD M0.0
O M0.1
LD M0.2
O M0.3
ALD
= Q0.0
LD I0.0
A M0.1
LD I0.2
AN M0.3
OLD
= Q0.0
当,M0.0或 M0.1”与
,M0.2或 M0.3”都,ON”
时,
则输出 Q0.0“ON”。
区块与 ALD( And Stack)
区块或 OLD( Or Stack)
当,I0.0与 M0.1”或,I0.2

M0.3非”,ON” 时,则输出 Q0.0“ON”。
M0.0
M0.1
M0.2
M0.3
Q0.0
I0.0
I0.2
M0.1
M0.3
Q0.0
Q 0,0I 0,0
I 0,1
Q 0,0
例 1,电动机直接启动停车控制继电器控制电路图
I/O分配:
I0.0:停车
I0.1:启动
Q0.0,KM
梯形图:
语句表
LD I0.1
O Q0.0
A I0.0
= Q0.0
L 3
K M
M
3 ~
L 1 L 2
F R
Q S
3
P E
K M
K M
S B 2
S B 1
F R
F U 2
F U 1
停止优先
Q0.0I0.0
Q0.0
I0.1
启动优先
I/O分配决定 PLC的端子接线图
PLC的端子接线方式又决定编程语言
1 L
Q 0,0
Q 0,1
Q 0,2
Q 0,3
1 M
I 0,0 I 0,1 I 0,2 I 0,3
K M
F R
S B 1
S B 2
I/O分配:
I0.0:停车
I0.1:启动
Q0.1,KM
Q0.1I0.0
Q0.1
I0.1
2.双向控制电路
--电机的正反转控制说明:双向控制电路要求 2个接触器 KM1,KM2不能同时得电,否则会造成电机电源的短路。
互锁 互锁启、保、停输入:正 SB1、反转 SB2
按钮,停止 SB3按钮输出:正、反转接触器置位、复位指令
I 0,0
Q 0,1
S
1
I 0,1
Q 0,1
1
R
I 0,0
I 0,1
Q 0,1
I 0,0
Q 0,1
I 0,0
Q 0,1
与下面指令区别立即 I/O指令 — 立即输入
I 2,1
Q 1,2
I 2,3
Q 1,1
I
II
执行立即输入指令时,只是立即读取物理输入点的值,
而不改变输入映像寄存器的值。
一 个 扫 描 周 期输 出 映 象 寄存 器 Q 1,1
执 行 指 令 执 行 指 令一 个 扫 描 周 期输 入 映 象 寄存 器 I 2,1
输 入 端子 I 2,1
输 出 端 子
Q 1,1
输 入 端子 I 2,3
输 出 映 象存 器 Q 1,2
输 出 端 子
Q 1,2
立即 I/O指令 — 立即输出一 个 扫 描 周 期输 出 映 象 寄存 器 Q 1,1
执 行 指 令 执 行 指 令一 个 扫 描 周 期输 入 映 象 寄存 器 I 2,1
输 入 端子 I 2,1
输 出 端 子
Q 1,1
输 入 端子 I 2,3
输 出 映 象存 器 Q 1,2
输 出 端 子
Q 1,2
I 2,1
Q 1,2
I 2,3
Q 1,1
I
II
执行立即输出指令时,则将结果同时立即复制到物理输出点和相应的输出映象寄存器立即 I/O指令 — 立即置位和复位指令
I 0,1
I 0,2
2
Q 2,0
Q 2,0
S I
R I
2
L D I 0,1
S I Q 2,0,2
R I Q 2,0,2
L D I 0,2
须指出,立即 I/O指令是直接访问物理输入输出点的,比一般指令访问输入输出映象寄存器占用
CPU时间要长,因而不能盲目地使用立即指令,否则,会加长扫描周期时间
,反而对系统造成不利影响。
空操作正跳变负跳变能流到达取非触点时,能流就停止;能流未到达取非触点时,能流就通过。
检测到每一次正跳变(信号后,让能流通过一个扫描周期的时间检测到每一次负跳变信号后,让能流通过一个扫描周期的时间取非
NOT
P
N
I 0,0 I 0,1
( )
N O T
I 0,0
( )
N
I 0,0
( )
P
Q 0,0
Q 0,1
Q 0,2
输入映象寄存器 I0.0
输出映象寄存器 Q0.0
输出映象寄存器 Q0.2
输出映象寄存器 Q0.1
一个周期一个周期空操作指令( NOP N)不影响程序的执行。
操作数 N是常数 0~255
( )
N O P
N
小结 1,标准触点指令
( 1) LD:装入常开触点 ( LoaD)
( 2) LDN:装入常闭触点( LoaD Not)
( 3) A:与常开触点( And)
( 4) AN:与常闭触点( And Not)。
( 5) O:或常闭触点( Or)
( 6) ON:或常闭触点( Or Not)
( 7) NOT:触点取非(输出反相)
( 8) =,输出指令
( 1) EU:上微分 ( 正跳变 )
( 2) ED:下微分( 负跳变 )
3,正负跳变指令
2,区块与或
( 1) ALD,区块与
( 2) OLD,区块或
( 1) S,置位指令
( 2) R,复位指令
4,置位和复位指令
5,立即指令
( 1)立即输入触点指令 LDI,LDNI,AI、
ANI,OI和 ONI。
( 2) =I,立即输出指令
( 3) SI,立即置位指令
( 4) RI,立即复位指令
4.2.2,定时器及定时器指令输入接点设定值,
1~32767
定时器号码
( 0~ 255)
IN
PT
T37
TON
定时器分辨率(时基)有三种,1ms、
10ms,100ms。定时器的分辨率由定时器号决定定时器的实际设定时间 T=设定值 PT× 分辨率
TON,接通延时定时器
TOF,断开延时定时器
TONR,有记忆接通延时定时器类型具有计时功能的软继电器有 16位的计数器,每过一个时基时间,当前值 SV加一
TS=1200*0.1=120S
延时接通定时器 TON
其工作波形图如下:
I0.1
Q0.1
计时值 SV
设定值 PT
TS
T38
TON
PT
IN
I0.1
1200
( )
T38 Q0.1
计时值复位定时器组成:
1)有一 16位的计数器 sv,用以计时
2)有一位存储器,反映定时器状态,
计时时间到为,1”,反之为,0”
SV<PT,T38=0 SV>=PT,T38=1
IN=1,开始计时
IN=0,复位延时断开定时器 TOF
其工作波形图如下,
I0.1
Q0.1
计时值设定值
TS
设定值使能输入 TOF
PT
IN
T38
TOF
PT
IN
I0.1
1200
T38
( )
T38 Q0.1
TS=1200*0.1=120S
IN=1,SV=0,T38=1
IN=0,开始计时,当计时时间到,SV=PT
时,T38=0
计时值复位保持型定时器 TONR
其工作波形图如下:
输入端
Q0.1
当前值设定值
TS
TS= 120*10ms
T4
M0.1
输入端设定值
TONR
PT
IN
TONR
PT
IN
I0.1
120
T4
( )
T4 Q0.1
( )T4R1
M0.1
最大值 32767
120
计时值不复位
IN=1,开始计时,
SV<PT,T=0
当 SV=>PT,T=1,;
当 IN=0,不复位
① 1ms分辩率定时器中断刷新方式,每隔 1ms刷新一次,刷新定时器位和定时器当前值,在一个扫描周期中要刷新多次,当前值在一个扫描周期内可能不一致。
+ 1 0 0
T 3 2T 3 2
/
T 3 2 Q 0,0
A + 1 0 0
T 3 2Q 0,0
/
T 3 2 Q 0,0
I N
P T
T O N I N
P T
T O N
( a ) ( b )
② 10ms分辩率定时器
10ms分辩率定时器启动后,定时器对 10ms时间间隔进行计时。程序执行时,在每次扫描周期的开始对 10ms定时器刷新,在一个扫描周期内定时器位和定时器当前值保持不变。
③ 100ms分辨率定时器
100ms定时器启动后,定时器对 100ms时间间隔进行计时。只有在定时器指令执行时,100ms定时器的当前值才被刷新。如果定时器线圈被激励后,不能保证在每个扫描周期都执行一次定时器指令,不能及时刷新,会丢失时基脉冲,造成计时不准。
定时器的刷新方式
+ 1 0 0
T 3 2
T 3 2
/
T 3 2
Q 0,0
A
+ 1 0 0
T 3 2
Q 0,0
/
T 3 2
Q 0,0
I N
P T
T O N
I N
P T
T O N
( a )
( b )
自复位式的定时器
T33
T33
T33
错误 正确
+ 1 0 0
T 3 7
Q 0,0
/
T 3 7
Q 0,0
I N
P T
T O N
正确使用定时器
例:用 TON构造各种类型的时间继电器触点 。
有的厂商的 PLC只有 TON定时器,因此,在这种情况下可以利用 TON来构造断电延时型的各种触点 。
图 4.14是用 TON构造 TOF作用的触点 。 其时序图与 TOF的时序完全相同 。
瞬时闭合,延时断开继电器
LD I0,0 // 启动 M0,0
O M0,0 // 自保
AN T 3 3 // 断开 M0,0
= M0,0 // 瞬时闭合
// 延时 5 0 m s 断开
AN I0,0 // 连续输出
T O N T 3 3,+ 5 //
图 4.14 定时器应用
LD I0,0 //
= Q 0,0 // 定时器的瞬动触点
T O N T 3 3,+ 5 0 // 通电延时定时器
// 时间为 5 0 0 m s
LD T 3 3 //
= Q 0,1 // 延时动作触点图 4.15 定时器应用图 4.15用通电延时定时器与输出继电器组成带瞬动触点的定时器。
LD I 0,0 //
T O N T 33,+ 3 // 常开通电延时
// 用作通电延时定时
LD Q 0,0 // 断电延时的基础
AN I 0.0 // 断电延时开始
T O N T 34,+ 6 // 通电延时定时器
// 用作断电延时计时
LD T 33 //
O Q 0,0 //
AN T 34 //
= Q 0,0 // 用作通、断电延时图 4.16 定时器应用返回本节图 4.16是利用常开触点实现通电和断电都延时的触点作用。
本程序实现的功能是:用输入端 I0.0控制输出端 Q0.0,
当 I0.0接通后,
过 3个时间单位 Q0.0端输出接通,当
I0.0断开后,
过 6个时间单位 Q0.0断开。
练习:
锅炉鼓风机和引风机的控制,要求:鼓风机比引风机晚 10s启动,引风机比鼓风机晚 18 s
停机,请设计梯形图控制程序。
启动停止引风机鼓风机
10s 18s
作业:声光报警程序
防盗报警:
有位置开关接 I0.0,声音解除按钮接 I0.1
试验按钮接 I0.2(检查灯、蜂鸣器是否完好 )
报警灯接 Q0.0,报警的蜂鸣器接 Q0.1
要求:位置开关断开报警灯闪烁 (周期 1S),蜂鸣器响,按解除按钮,蜂鸣器停,按试验按钮灯亮蜂鸣器响。
分析:闪烁用两个定时器构成振荡器
1L Q0.0 Q0.1 Q0.2 Q0.3
1M I0.0 I0.1 I0.2 I0.3
SB1 SB2
4.2.3 计数器指令定时器是对 PLC内部的时钟脉冲进行计数,而计数器是对外部的或由程序产生的计数脉冲进行计数 。
当前值,计数器累计计数的当前值( 16位有符号整数),
它存放在计数器的 16位( bit)当前值寄存器中。
每个计数器只有一个 16位的当前值寄存器地址。在一个程序中,同一计数器号不要重复使用,更不可分配给几个不同类型的计数器。
增计数器
I 0,2
I 0,3
C 2 0 当 前 值
C 2 0 计 数 器 位设定值,
-32768~32767
CU
PV
C20
CTU
R
复位计脉冲数
I 0,2
I 0,3
C T U C 2 0,3
L D I 0,2
L D I 0,3
C U C T U
R
3
C 2 0
P V
计数器 SV<PV,C=0;
SV>=PV时,计数器位被置位,1”,并继续计数,
R=1时,SV=0,C=0
减计数器
I 1,3
I 1,4
3
C D C T D
L D
P V
C 4 0
L D I 1,3
L D I 1,4
C T D C 4 0,3CD
PV
C(0~255)
CTD
LD
复位,装设定值计脉冲数
I1.3
I1.4
当前值输出
2
1
计数器 SV=PV,C=0;
SV=0时,停止计数,同时计数器位被置位,1”
LD=1时,SV=PV
设定值增 /减计数器
I 1,0
I 1,1
4
I 1,2
C U C T U D
C 3 0
C D
R
P V
L D I 1,0
L D I 1,1
L D I 1,2
C T U D C 3 0,4
增计数减计数复位 CU CTUD
C30
CD
R
PV
C(0~255)
I1.0
I1.1
I1.2
当前值输出端当前值
CU有脉冲,SV=SV+1;
CD有脉冲,SV=SV-1;
SV<PV,C=0,SV>=PV,C=1;
R=1时,SV=0,C=0
例 5,计数器应用举例,产品数量检测产品通过检测器
PH
机械手
KM1 KM2传送带电机
PLC的 I/O分配:
I0.0—传送带停机按钮
I0.1—传送带起动按钮
I0.2—产品通过检测器 PH
Q0.0—传送带电机 KM1
Q0.1—机械手 KM2
T37—定时器,定时 2秒
C10—计数器,初始值 24
(每 24个产品机械手动作 1次)
机械手动作后,
延时 2秒,将机械手电磁铁切断,同时将
C10复位。 C10复位后,T37也复位
电机起动后,R1产生宽度为一个扫描周期的正脉冲,使 C20和 T37复位
起、停传送带电机计数器应用举例,产品数量检测
Q0.0
Q0.0
I0.2
24
C20
T37
20
C20
Q0.1
每检测到一个产品,I0.2产生一个正脉冲,
使 C20计一个数
C20每计 24个数,机械手动作一次
机械手动作后,延时 2秒,将机械手电磁铁切断,同时将 C20复位。 C20
复位后,Q0.1和 T37也复位
( )
I0.0 I0.1
C20
CU
PV
CTU
R
( )
IN
PT
TON
T37
T37
P
Q0.0
应用举例
1) 循环计数 。
以上三种类型的计数器如果在使用时,将计数器位的常开触点作为复位输入信号,则可以实现循环计数 。
2) 用计数器和定时器配合增加延时时间,
如图 4.22所示 。 试分析以下程序中实际延时为多长时间 。
24
C20
CU
PV
CTU
R
I0.0
C20
LD I 0,0 // 启动通电延时
AN M 0,0 // 重新启动延时
T O N T 50,+ 300 00 // 通电延时定时器
// 时间设定为 3000 s
LD T 50 // 延时时间到
= M 0,0 // 关定时器,产生一个
// 脉冲。
LD M 0,0 // 每隔 30 00 s 输入一个
// 脉冲
L D N I 0,0 // 复位输入
C T U C 20,+ 10 // 增计数器,累计脉冲
// 的总数 3000 0S = 8,3 小时。
长延时程序图 4.22 计数器应用例返回本节
1 2 3 111054
I 0,0
T 5 0 位
C 2 0 位
分析:
1.运料小车右行 Q0.1:
车在 1,2,3位,4要料; 1,2位,3要料; 1位,2要料
2.运料小车左行:
车在 2,3,4位,1要料; 3,4位,2要料; 4位,3要料
3.运料小车停止:要料号与位号相同例,//响应优先级顺序 (要料时刻相同时,料仓号小者优先)
//停车 (要料号与位号相同)
//右行 (车在 1,2,3位,4要料; 1,2位,3要料; 1,
2要 料 )
//左行( 车在 2,3,4位,1要料; 3,4位,2要料; 4,
3要料)
分析:由 I0.0或 I0.1启动时序控制,因此,用定时器来实现。
用 T101,T102、
T103,T104组成 30s、
40s,45s,55s的延时,T105延时 5s
闪烁:用 PLC内部的秒时钟脉冲配计数器实现。
SM0.5---周期 1s,占空比 0.5的脉冲( P58
SM功能)
4.2.4 比较指令字节比较 整数比较 双字整数比较 实数比较比较关系符有:
等于 =,大于 >,小于 <,不等 <>,大于等于 >=,小于等于 <=。
5,应用举例
控制要求:
一自动仓库存放某种货物,最多 6000箱,需对所存的货物进出计数 。 货物多于 1000箱,
灯 L1亮;货物多于 5000箱,灯 L2亮 。
其中,进货信号 I0.0,出货信号 I0.1; L1和
L2分别受 Q0.0和 Q0.1控制,数值 1000和 5000
分别存储在 VW20和 VW30字存储单元中 。
本控制系统的程序如图 4.23所示 。 程序执行时序如图 4.24所示 。
图 4.23 程序举例
LD I0,0 // 增计数输入端
LD I0,1 // 减计数输入端
LD I0,2 // 复位输入端
CT U D C30,+ 1 0 0 0 0 // 增减计数,
// 设定脉冲数
// 为 1 0 0 0 0 。
L D W > = C30,V W 2 0 // 比较计数器
// 当前值是否大于
//V W 2 0 中的值
= Q 0,0 // 输出触点
L D W > = C30,V W 3 0 // 比较计数器
// 当前值是否大于
//V W 3 0 中的值
= Q 0,1 // 输出触点图 4.24 时序图
1 0 0 0 1 0 0 0
5 0 0 0 5 0 0 0
C3 0 当前值
Q 0,0
Q 0,1
返回本节
4.2.5传送指令 — 数据传送指令
MOV-B
EN
IN OUT
ENO
MOV-W
EN
IN OUT
ENO
MOV-DW
EN
IN OUT
ENO
MOV-R
EN
IN OUT
ENO
MOVB IN,OUT MOVW IN,OUT MOVDW IN,OUT MOVR IN,OUT
例:
若 I0.1=1,则将 VW100的数据传送到 AC0MOVW VW100,AC0
I0.1 MOV-W
EN
IN OUT
ENO
VW100 AC0
VW100 10 46
MSB LSB
10 46AC0
MSB LSB
VD10
数据块传送指令 数据块传送指令把从输入( IN)指定地址的 N个连续字节、字、双字的内容传送到从输出(
OUT)指定地址开始的 N个连续字节
、字、双字的存储单元中去。
MOVB IN,OUT MOVW IN,OUT MOVDW IN,OUT
BLKMOV-DW
EN
IN OUT
ENO
N
BLKMOV-W
EN
IN OUT
ENO
N
BLKMOV-B
EN
IN OUT
ENO
N
传送字节立即读、写指令传送字节立即写( BIW)指令,
将从输入端( IN)指定字节地址的内容写入输出端( OUT)指定字节地址的物理输出点( QB)。
传送字节立即读( BIR)指令,读取输入端( IN)指定字节地址的物理输入点( IB)的值,并写入输出端( OUT)指定字节地址的存储单元中。
传送字节立即读传送字节立即写
MOV-BIR
EN
IN OUT
ENO
BIW IN,OUT
MOV-BIW
EN
IN OUT
ENO
BIR IN,OUT 不受扫描周期影响
4.2.6移位寄存器指令
SHR_B---右移指令
SHR_W
SHR_DW
SHL_B---左移指令
SHL_W
SHL_DW 左右被移走的位填 0
SHR_B
EN
IN
N
OUTVB20
5
VB0
ROR_B---循环右移指令
ROR_W
ROR_DW
ROL_B---循环左移指令
ROL_W
ROL_DW
右移 N位,移出的位送最左边 左移 N位,移出的位送最右边
自定义移位指令
N>0由低向高位移,反之向低移
ENO
I0.1
P EN
DATA
S_BIT
N
SHRB
I0.2
V10.0
4
ENO
LD I0.1
EU
SHRB I0.2,V10.0,4
I0.2
07
7 0
1 0 0 1
1
1 10 0
溢 出 位移 位 前移 位 一 次 后
VB10.0
VB10.0
I0.1
I0.2
正 跳 变
S_BIT
SM1.1
在自动生产线上的应用说明:生产线有 5个工位,
0号工位是检查站,I0.0
4号工位是剔除站。 Q0.0
产品经过检查站检查是否合格。
当不合格产品移到 4号工位时,剔除不合格产品 。
传送带启动 I0.1
PLC如何编程? SHRB指令的功能示意图?
5
4.2.7 数学运算指令 — 1.加法指令
+I IN1,OUT +D IN1,OUT +R IN1,OUT
ADD-I
EN
IN1
OUT
ENO
IN2
ADD-DI
EN
IN1 OUT
ENO
IN2
ADD-R
EN
IN1 OUT
ENO
IN2
-I IN2,OUT -D IN2,OUT -R IN2,OUT
SUB-I
EN
IN1
OUT
ENO
IN2
SUB-DI
EN
IN1 OUT
ENO
IN2
SUB-R
EN
IN1 OUT
ENO
IN2
2.减法指令
3.乘法指令
*I IN1,OUT *D IN1,OUT *R IN1,OUT
MUL-I
EN
IN1
OUT
ENO
IN2
MUL-DI
EN
IN1 OUT
ENO
IN2
MUL-R
EN
IN1 OUT
ENO
IN2
MUL IN1,OUT
MUL
EN
IN1 OUT
ENO
IN2
4.除法指令
/I IN2,OUT /D IN2,OUT /R IN2,OUT
DIV-I
EN
IN1
OUT
ENO
IN2
DIV-DI
EN
IN1 OUT
ENO
IN2
DIV-R
EN
IN1 OUT
ENO
IN2
DIV IN2,OUT
DIV
EN
IN1 OUT
ENO
IN2
整数完全除法指令,把输入端( IN)指定的两个 16位整数相除,产生一个 32位结果,并送到输出端( OUT)指定的存储单元中去。其中高 16位是余数,低 16
位是商。
整数完全除法整数完全乘法整数乘法整数除法
16位整数商整数加法、减法、乘法、除法 ------字双整数加法、减法、乘法、除法 -----------双字整数完全乘法、除法 ----------输入位字,输出为双字实数加法、减法、乘法、除法 --------双字
例,DIV VW10,VD100
/I VW20,VW200
两条指令的编程及执行情况比较如图 4.26所示 。
LD I0,0 // 使能输入端
D IV V W 1 0,V D 1 0 0 // 完全除法
// V W 1 0 2 / V W 1 0 = V D 1 0 0
LD I0,1 // 使能输入端
/I V W 2 0,V W 2 0 0 // 整数除法
//V W 2 0 0 / V W 2 0 = V W 2 0 0
图 4.26 除法指令应用对于除法指令:
对于完全除法指令:
返回本节
2003
2003

5.加一指令
6.减一指令
INC_B
EN
IN OUT
ENO
INCB OUT
INC_W
EN
IN OUT
ENO
INCW OUT
INC_D
EN
IN OUT
ENO
INCD OUT
DEC_B
EN
IN OUT
ENO
INCB OUT
DEC_W
EN
IN OUT
ENO
INCW OUT
DEC_D
EN
IN OUT
ENO
INCD OUT
INC_B
EN
IN OUT
ENO
I0.4
VB0 VB10
应用实例
控制要求:
食品加工厂对饮料生产线上的盒装饮料进行计数,每 24
盒为一箱,要求能记录生产的箱数 。
程序及说明:
程序如图 4.29所示 。
LD I0,0 // 增脉冲输入端
LD C3 0 // 复位输入端
// 循环计数
CT U C3 0,+ 2 4 // 增计数指令
// 设定脉冲数为 24
LD C3 0 // 装入计数器触点
// 作为双字增的
// 脉冲输入
IN CD V D1 0 0 // 双字增指令
//
图 4.29 增减指令的应用返回本节均为 32位双字,如,VD*,AC0~4
7.开平方指令 9.指数函数指令
8.自然对数指令 10.三角函数指令(弧度)
SQRT
EN
IN OUT
ENO
SQRT IN,OUT
LN
EN
IN OUT
ENO
LN IN,OUT
EXP
EN
IN OUT
ENO
EXP IN,OUT
SIN
EN
IN OUT
ENO
SIN IN,OUT
COS
EN
IN OUT
ENO
COS IN,OUT
TAN
EN
IN OUT
ENO
TAN IN,OUT
例:求常用对数(变量在 VD0)
例:求 150度的正弦
4.2.8表功能指令
1 表存数指令
2 表取数指令
3 表查找指令表只对字型数据存储,表的格式例如表 4.21所示。
1、表存数指令
ATT,表存数指令 。
该指令在梯形图中有 2个数据输入端,DATA
为数值输入,指出将被存储的字型数据或其地址; TBL表格的首地址,用以指明被访问的表格 。 当使能输入有效时,将输入字型数据添加到指定的表格中 。
表存数特点:
表存数时,新存的数据添加在表中最后一个数据的后面 。 每向表中存一个数据,实际填表数 EC会自动加 1。
ATT DATA,TBL
AD_T_TBL
EN
DATA
ENO
TBL
执行后表数据 4,EC=51234
ATT DATA,TBL
AD_T_TBL
EN
DATA
ENO
TBL
VW0
VW100
1234VW0
0005
2表取数指令
1.) FIFO,先进先出指令
2.) LIFO,后进先出指令
1) FIFO先进先出指令
当使能输入有效时,从 TBL指明的表中移出第一个字型数据并将其输出到 DATA所指定的字单元 。
FIFO表取数特点:
取数时,移出的数据总是最先进入表中的数据 。
每次从表中移出一个数据,剩余数据依次上移一个字单元位置,同时实际填表数 EC会自动减 1。
指令格式,FIFO TBL,DATA
例,FIFO VW100,AC0
如果仍是对表 4.21存取,则指令执行情况如表
4.23所示。
表 4.23 指令 FIFO执行结果
2) LIFO后进先出指令
当使能输入有效时,从 TBL指明的表中移出最后一个字型数据并将其输出到 DATA所指定的字单元 。
LIFO表取数特点:
取数时,移出的数据是最后进入表中的数据 。 每次从表中取出一个数据,剩余数据位置保持不变,
实际填表数 EC会自动减 1。
指令格式,LIFO TBL,DATA
例,LIFO VW100,AC0
如果仍是对表 4.21存取,则指令执行情况如表
4.24所示 。
表 4.24 指令 LIFO执行结果
4.4.3 表查找指令
FND?,表查找指令 。 通过表查找指令可以从字型数表中找出符合条件的数据所在的表中数据编号,编号范围为 0~99。
在梯形图中有 4个数据输入端:
TBL表格的首地址,用以指明被访问的表格;
PTN是用来描述查表条件时进行比较的数据;
CMD是比较运算符,?,的编码,它是一个
1~4的数值,分别代表 =,<>,<和 >运算符;
INDX用来指定表中符合查找条件的数据的地址 。
表 4.25 表查找指令执行结果
5000
注意:执行查表指令前应对
INDX的内容清零例题 电梯停层信号的获取可通过查表指令来确定
以 6层电梯控制为例:
在存储单元中设置 内呼信号表,外上呼信号表 和 外下呼信号表 ----呼梯信号与楼层相同 ----停车,有呼梯信号时,
轿厢内停车命令 外上呼层 外下呼 层
0010
007
0
停 1层
2
3
4
5
6
VW100
VW102
VW104
VW106
VW108
VW110
VW112
VW114
VW116
TL
EC
d0
d1
d2
d3
d4
d5
d6
0010
006
0
1层上呼
2
3
4
5
0
VW120
VW122
VW124
VW126
VW128
VW130
VW132
VW134
VW136
TL
EC
d0
d1
d2
d3
d4
d5
d6
0010
007
0
1
2
3
4
5
6
VW140
VW142
VW144
VW146
VW148
VW150
VW152
VW154
VW156
TL
EC
d0
d1
d2
d3
d4
d5
d6
有某层呼梯信号时,将相应楼层数存入相应单元
2
没有呼梯信号的楼层表内填 0
0
确定前方停层站原则
停层判断在每次电动机启动后进行,每次只查询本方向前一站是否停层。
电动机上行启动后楼层数加 1,反之减 1,然后在三个表中查询有相同层号否,若有停车,
若无前方站不停,继续前行,楼层数加 1开始下一轮查询。
查表顺序:
先查内停层,再查同向的外呼表
其中 VB5存放轿厢当前位置 ---当前层数
M30.0停层信号
M31.0启动信号
M12.1上行指示
M12.2下行指示
M15.1查询内呼表
M15.2查询外上呼表
M15.3查询外下呼表
//轿厢当前层数送 VB31
层数加 1
//查内呼表 ----等于前方层数
//判断是否有内呼信号
//查外上呼表 ----等于前方层数
//判断是否有外上呼信号
//查外下呼表 ----等于前方层数
4.2.9转换指令
BCD码转为整数( BCDI)指令,将输入端( IN)
指定的 BCD码转换成整数,并将结果存放到输出端(
OUT)指定的存储单元中去。输入数据的范围是 0到
9999( BCD码)。
整数转为 BCD码( IBCD)指令,将输入端
( IN)指定的整数转换成 BCD码,并将结果存放到输出端( OUT)指定的存储单元中去。输入数据的范围是 0到 9999。
指令影响的特殊存储器位,SM1.6(非法 BCD)
BCD-I
EN
IN OUT
ENO
IBCD OUT
I-BCD
EN
IN OUT
ENO
BCDI OUT
无符号操作
1,BCD码与整数的转换双字整数转换为实数
2.双字整数与实数的转换
DI-R
EN
IN OUT
ENO
ROUND IN,OUT
ROUND
EN
IN OUT
ENO
TRUNC
EN
IN OUT
ENO
TRUNC IN,OUTDTR IN,OUT
实数转换为双字整数四舍五入实数转换为双字整数双字整数转为实数( DTR)指令:将输入端( IN)指定的
32位有符号整数转换成 32位实数
ROUND取整指令,转换时 实数的小数部分四舍五入。
TRUNC取整指令,实数 舍去小数部分 后,转换成 32位有符号整数。
实数转为双字整数指令可分为四舍五入取整( ROUND)和舍去尾数后取整
( TRUNC)指令。
取整指令被转换的输入值应是有效的实数,如果实数值太大,使输出无法表示,那末溢出位( SM1.1)被置位 。
3.双整数与整数的转换
DI-I
EN
IN OUT
ENO
ITD IN,OUT
I-DI
EN
IN OUT
ENO
DTI IN,OUT
输入端( IN)的有符号双整数转换成整数,并存入 OUT。被转换的输入值应是有效的双整数
,否则溢出位( SM1.1
)被置位 。
欲将整数转换为实数,可先用 ITD指令把整数转换为双整数,然后再用 DTR指令把双整数转换为实数。
4.整数与字节的转换
I-B
EN
IN OUT
ENO
BTI IN,OUT
B-I
EN
IN OUT
ENO
ITB IN,OUT
( 1)字节到整数
BTI,字节转换为整数指令。
使能输入有效时,将字节输入数据 IN转换成整数类型,并将结果送到 OUT输出。字节型是无符号的,所以没有符号扩展。
使能流输出 ENO断开的出错条件,SM4.3(运行时间); 0006(间接寻址)。
指令格式,BTI IN,OUT
例,BTI VB0,AC0
例 3-26
C10计数器的计数值为现场测的以英寸为单位的长度,现将该长度改为厘米,并保存整数部分。
1英寸 =2.54厘米
要用实数乘法,故要将双整形变实数。程序如下:
例:
101C10 英寸
AC1
5编码和译码
1,编码
ENCO,编码指令 。 使能输入有效时,将字型输入数据 IN的最低有效位 ( 值为 1的位 ) 的位号输出到 OUT所指定的字节单元的低 4位 。 即用半个字节来对一个字型数据 16位中的 1位有效位进行编码 。
使能流输出 ENO断开的出错条件,SM4.3( 运行时间 ) ; 0006( 间接寻址 ) 。
指令格式,ENCO IN,OUT
例,ENCO AC0,VB0
DECO
EN
IN OUT
ENO
ENCO IN,OUT
ENCO
EN
IN OUT
ENO
DECO IN,OUT
以本指令为例,指令执行情况如表 4.26所示 。 ENCO AC0,VB0
表 4.26 编码指令执行结果
2,译码
DECO,译码指令 。 使能输入有效时,将字节型输入数据 IN的低 4位所表示的位号对 OUT所指定的字单元的对应位置 1,其他位置 0。 即对半个字节的编码进行译码来选择一个字型数据
16位中的 1位 。
使能流输出 ENO断开的出错条件,SM4.3( 运行时间 ) ; 0006( 间接寻址 ) 。
指令格式,DECO IN,OUT
例,DECO VB0,AC0
本指令执行情况如表 4.27所示 。
6.七段码
SEG,七段码指令 。 使能输入有效时,将字节型输入数据 IN的低 4位有效数字产生相应的七段码,并将其输出到
OUT所指定的字节单元 。
SEG
EN
IN OUT
ENO
SEG IN,OUT
7.字符串转换
1,指令种类
( 1) ASCII码转换 16进制指令
( 2) 16进制到 ASCII码
( 3) 整数到 ASCII码
( 4) 双整数到 ASCII码
( 5) 实数到 ASCII码
ATH IN1,OUT,LEN HTA IN1,OUT,LEN
HTA
EN
IN1 OUT
ENO
LEN
ITA IN1,OUT,FMT
ITA
EN
IN1 OUT
ENO
FMT
DTA IN1,OUT,FMT
DTA
EN
IN OUT
ENO
FMT
ATH
EN
IN1 OUT
ENO
LEN
练习
编写一段梯形图程序,要求:
1)有 20个字型数据存储在从 VB100开始的存储区,求这 20 个字型数据的平均值。
2)如果平均值小于 1000,则将这 20个数据移到从 VB200开始的存储区,这 20个数据的相对位置在移动前后不变。
3)如果平均值大于 1000,则绿灯亮。