第 4章 基本指令
第 4章 基本指令
4.1 位操作类指令
4.2 运算指令
4.3 其他数据处理指令
4.4 表功能指令
4.5 转换指令
第 4章 基本指令
本章学习目的
l 位操作类指令, 主要是位操作及运算指令,
与时也包含与位操作密切相关的定时器和计数
器指令等 。
l 运算指令, 包括常用的算术运算和逻辑运算
指令 。
l 其他数据处理类, 包括数据的传送, 移位,
填充和交换等指令 。
l 表功能指令, 包括对表的存取和查找指令 。
l 转换指令, 包括数据类型转换, 码转换和字
符转换指令 。
返回本章首页
第 4章 基本指令
4.1 位操作类指令
4.1.1 指令使用概述
4.1.2 基本逻辑指令
4.1.3 复杂逻辑指令
4.1.4 定时器指令
4.1.5 计数器指令
4.1.6 比较
返回本章首页
第 4章 基本指令
4.1.1 指令使用概述
1,主机的有效
编程范围
存储器的存储
容量及各编程
元件的有效编
程范围如右表
4.1所示 。
第 4章 基本指令
许
多
指
令
中
含
有
操
作
数
,
操
作
数
的
有
效
编
址
范
围
如
表
4.
2
所
示
。
第 4章 基本指令
( 1) 指令例
整数加法
+I,整数加法指令 。 使能输入有效时, 将两个单字长 ( 16位 ) 的符
号整数 IN1和 IN2相加, 产生一个 16位整数结果输出 ( OUT) 。
在 LAD和 FBD 中, 以指令盒形式编程 。 指令盒的执行结果:
IN1+IN2=OUT
在 STL中, 执行结果,IN1+OUT=OUT
IN1和 IN2的寻址范围,VW,IW,QW,MW,SW,SMW,LW、
AIW,T,C,AC,*VD,*AC,*LD和常数 。
OUT的寻址范围,VW,IW,QW,MW,SW,SMW,LW,T、
C,AC,*VD,*AC和 *LD。
第 4章 基本指令
本指令影响的特殊存储
器位,SM1.0(零);
SM1.1(溢出);
SM1.2(负)
使能流输出 ENO断开
的出错条件,SM1.1
(溢出); SM4.3(运
行时间); 0006(间接
寻址)
指令格式:
+I IN1,OUT
第 4章 基本指令
例,+I VW0,VW4
本指令在梯形图和语句表中的编程如图 4.1所示 。
图 4.1 整数加法
LD I0,0 // 使能输入端
+I V W 0,V W 4
// 整数加法
//V W 0+ V W 4= V W 4
第 4章 基本指令
3,梯形图的基本绘制规则
( 1) Network
( 2)能流 /使能
( 3)编程顺序
( 4)编号分配
( 5)内、外触点的配合
( 6)触点的使用次数
( 7)线圈的使用次数
( 8)线圈的连接
返回本节
第 4章 基本指令
4.1.2 基本逻辑指令
基本逻辑指令在语句表语言中是指对位存储单元
的简单逻辑运算, 在梯形图中是指对触点的简单
连接和对标准线圈的输出 。
一般来说, 语句表语言更适合于熟悉可编程序控
制器和逻辑编程方面有经验的编程人员 。 用这种
语言可以编写出用梯形图或功能框图无法实现的
程序 。 选择语句表时进行位运算要考虑主机的内
部存储结构 。
第 4章 基本指令
可编程序控制器中的
堆栈与计算机中的堆
栈结构相同, 堆栈是
一组能够存储和取出
数据的暂时存储单元 。
堆 栈 的 存 取 特 点 是
,后进先出,, S7-
200可编程序控制器的
主机逻辑堆栈结构如
表 4.3所示 。
第 4章 基本指令
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) =,输出指令
第 4章 基本指令
在语句表中, LD,LDN,A,AN,O,ON,NOT这几
条指令的执行对逻辑堆栈的影响分别如表 4.4,表 4.5其后
的说明 。
第 4章 基本指令
表 4.5 指令 A I0.2的执行
第 4章 基本指令
程序实例:
本程序段用以
介绍标准触点
指令在梯形图,
语句表和功能
块图 3种语言编
程中的应用,
仔细比较不同
编程工具的区
别与联系 。
其梯形图和语
句表程序结构
如图 4.2所示 。
LD I0, 0 // 装入常开触点
O I0, 1 // 或常开触点
A I0, 2 // 与常开触点
= Q 0, 0 // 输出触点
// 如果本梯级中将 I0, 1 的触点改
// 为 Q 0, 0 的常开触点,则成为电
// 机起动停止控制环节的梯形图。
L D N I0, 0 // 装入常闭触点
ON I0, 1 // 或常闭触点
AN I0, 2 // 与常闭触点
= Q 0, 1 //
LD I0, 0 //
O I0, 1 //
A I0, 2 //
NOT // 取非,即输出反相
= Q 0, 3 //
图 4.2 标准触点 LAD和 STL例
第 4章 基本指令
本程序对应的
功能框图如图
4.3所示 。 在功
能框图中, 常
闭触点的装入
和串并联用指
令盒的对应输
入信号端加圆
圈来表示 。
程序执行的时
序图如图 4.4所
示 。
LD I0, 0 / /
O I0, 1 / /
A I0, 2 / /
= Q 0, 0 / /
//
//
L D N I0, 0 / /
ON I0, 1 / /
AN I0, 2 / /
= Q 0, 1 / /
//
//
LD I0, 0 / /
O I0, 1 / /
A I0, 2 / /
NOT //
= Q 0, 3 / /
图 4.3 标准触点 FBD例
2,正负跳变指令
第 4章 基本指令
图 4,4 时序图
I0.0
Q0.2
Q0.0
I0.2
I0.1
第 4章 基本指令
负跳变触点检测到脉冲的每一次负跳变后,
产生一个微分脉冲 。
指令格式,ED ( 无操作数 )
应用举例:图 4.5是跳变指令的程序片断 。
图 4.6是图 4.5指令执行的时序 。
第 4章 基本指令
LD I0, 0 // 输入常开触点
EU // 脉冲正跳变
= Q 0, 0 // 输出触点
LD I0, 0 //
ED // 脉冲负跳变
= Q 0, 1 //
图 4.5 跳变应用
第 4章 基本指令
图 4.6 时序
I0.0
Q0.1
Q0.0
第 4章 基本指令
( 1) S,置位指令
( 2) R,复位指令
置位即置 1,复位即置 0。 置位和复位指令可以将位存储区
的某一位开始的一个或多个 ( 最多可达 255个 ) 同类存储器
位置 1或置 0。 这两条指令在使用时需指明三点:操作性质,
开始位和位的数量 。 各操作数类型及范围如表 4.6所示 。
3,置位和复位指令
第 4章 基本指令
( 1) S,置位指令
将位存储区的指定位 ( 位 bit) 开始的 N个同类存
储器位置位 。
用法,S bit,N
例,S Q0.0,1
第 4章 基本指令
( 2) R,复位指令
将位存储区的指定位 ( 位 bit) 开始的 N个同类存
储器位复位 。 当用复位指令时, 如果是对定时器
T位或计数器 C位进行复位, 则定时器位或计数器
位被复位, 同时, 定时器或计数器的当前值被清
零 。
用法,R bit,N
例,R Q0.2,3
应用举例:图 4.7为置位和复位指令应用程序片断 。
第 4章 基本指令
LD I0, 0 // 装入常开触点
A I0, 1 // 与常开触点
= Q 1, 0 // 输出触点
LD I0, 0 //
A I0, 1 //
S Q 0, 0,1 // 将 Q 0, 0 开始的 / / 1
个触点置 1
R Q 0, 2,3 // 将 Q 0, 2 开始的 // 3
个触点置 0
图 4.7 置位复位
第 4章 基本指令
本程序对应的时序图如图 4.8所示 。
图 4.8 时序图
I0.0
Q 0, 2 - Q 0, 4
Q0.0
Q1.0
I0.1
第 4章 基本指令
4,立即指令
( 1)立即触点指令
( 2) =I,立即输出指令
( 3) SI,立即置位指令
( 4) RI,立即复位指令
第 4章 基本指令
( 1) 立即触点指令
在每个标准触点指令的后面加, I”。 指令执行时,
立即读取物理输入点的值, 但是不刷新对应映像
寄存器的值 。
这类指令包括,LDI,LDNI,AI,ANI,OI和
ONI。 下面以 LDI指令为例 。
用法,LDI bit
例,LDI I0.2
注意,bit只能是 I类型 。
第 4章 基本指令
( 2) =I,立即输出指令
用立即指令访问输出点时, 把栈顶值立即复制到
指令所指出的物理输出点, 同时, 相应的输出映
像寄存器的内容也被刷新 。
用法,=I bit
例,=I Q0.2
注意,bit只能是 Q类型 。
第 4章 基本指令
( 3) SI,立即置位指令
用立即置位指令访问输出点时, 从指令所指出的位 ( bit)
开始的 N个 ( 最多为 128个 ) 物理输出点被立即置位, 同
时, 相应的输出映像寄存器的内容也被刷新 。
用法,SI bit,N
例,SI Q0.0,2
注意,bit只能是 Q类型 。 SI和 RI指令的操作数类型及范
围如表 4.7所示 。
第 4章 基本指令
( 4) RI,立即复位指令
用立即复位指令访问输出点时, 从指令所指出的
位 ( bit) 开始的 N个 ( 最多为 128个 ) 物理输出点
被立即复位, 同时, 相应的输出映像寄存器的内
容也被刷新 。
用法,RI bit,N
例,RI Q0.0,1
应用举例:
图 4.9为立即指令应用中的一段程序, 图 4.10是程
序对应的时序图 。
第 4章 基本指令
LD I 0.0 // 装入常开触点
= Q 0.0 // 输出触点,非立即
=I Q 0.1 // 立即输出触点
SI Q 0.2,1 // 从 Q 0.2 开始的 1 个
// 触点被立即置 1
L D I I 0.0 // 立即输入触点指令
= Q 0.3 //
图 4.9 立即指令程序
第 4章 基本指令
图 4.10 时序图
返回本节
扫描周期 n 扫描周期 n + 1 扫描周期 n + 3扫描周期 n + 2
输出刷新 输出刷新输出刷新输出刷新输出刷新
输入扫描
输入扫描
输入扫描输入扫描输入扫描
Q 0, 1
I 0, 0
Q 0, 0
Q 0, 3
Q 0, 2
第 4章 基本指令
4.1.3 复杂逻辑指令
1,栈装载与指令
2,栈装载或指令
3,逻辑推入栈指令
4,逻辑弹出栈指令
5,逻辑读栈指令
6,装入堆栈指令
第 4章 基本指令
1,栈装载与指令
ALD,栈装载与指令 ( 与块 ) 。 在梯形图中用于将并联
电路块进行串联连接 。
在语句表中指令 ALD执行情况如表 4.8所示 。
第 4章 基本指令
OLD,栈装载或指令 ( 或块 ) 。 在梯形图中用于
将串联电路块进行并联连接 。
在语句表中指令 OLD执行情况如表 4.9所示 。
2,栈装载或指令
第 4章 基本指令
LPS,逻辑推入栈指令 ( 分支或主控指令 ) 。 在梯形图中
的分支结构中, 用于生成一条新的母线, 左侧为主控逻
辑块时, 第一个完整的从逻辑行从此处开始 。
注意,使用 LPS指令时, 本指令为分支的开始, 以后必须
有分支结束指令 LPP。 即 LPS与 LPP指令必须成对出现 。
在语句表中指令 LPS执行情况如下表 4.10所示 。
3,逻辑推入栈指令
第 4章 基本指令
4,逻辑弹出栈指令
LPP,逻辑弹出栈指令 ( 分支结束或主控复位指令 ) 。 在梯形图中的
分支结构中, 用于将 LPS指令生成一条新的母线进行恢复 。
注意,使用 LPP指令时, 必须出现在 LPS的后面, 与 LPS成对出现 。
在语句表中指令 LPP执行情况如下表 4.11所示 。
第 4章 基本指令
5,逻辑读栈指令
LRD,逻辑读栈指令 。 在梯形图中的分支结构中, 当左
侧为主控逻辑块时, 开始第二个和后边更多的从逻辑块 。
在语句表中指令 LRD 执行情况如表 4.12所示 。
第 4章 基本指令
6,装入堆栈指令
LDS,装入堆栈指令 。 本指令编程时较少使用 。
指令格式,LDS n ( n为 0~8的整数 )
例,LDS 4
指令 LDS 4
在语句表中执行情况如下表 4.13所示 。
第 4章 基本指令
应用举例:
图 4.11是复杂逻辑指令在实际应用中的一段程序的梯形图 。
LD I0, 0 // 装入常开触点
O I2, 2 // 或常开触点
LD I0, 1 // 被串的块开始
LD I2, 0 // 被并路开始
A I2, 1 //
O L D // 栈装载或,并路结束
A L D // 栈装载与,串路结束
LD I0, 0 //
L P S // 逻辑推入栈,主控
A I0, 5 //
= Q 7, 0 //
L RD // 逻辑读栈,新母线
LD I2, 1 //
O I1, 3 //
A L D // 栈装载与
= Q 6, 0 //
L P P // 逻辑弹出栈,母 线复原
LD I3, 1 //
O I2, 0 //
A L D //
= Q 1, 3 //
图
4.
11
复
杂
逻
辑
指
令
的
应
用
返回本节
第 4章 基本指令
4.1.4 定时器指令
系统提供 3种定时指令,TON,TONR和 TOF。
精度等级:
S7-200定时器的精度 ( 时间增量 /时间单位 /分辨率 ) 有 3
个等级,1ms,10ms和 100ms,精度等级和定时器号关系
如表 4.14所示 。
第 4章 基本指令
指令操作数
1)编号:
2)预设值 PT:
3)使能输入(只对 LAD和 FBD):
第 4章 基本指令
1,接通延时定时器
TON,接通延时定时器指令 。 用于单一
间隔的定时 。 上电周期或首次扫描, 定
时器位 OFF,当前值为 0。 使能输入接
通时, 定时器位为 OFF,当前值从 0开
始计数时间, 当前值达到预设值时, 定
时器位 ON,当前值连续计数到 32767。
使能输入断开, 定时器自动复位, 即定
时器位 OFF,当前值为 0。
指令格式,TON Txxx,PT
例,TON T120,8
第 4章 基本指令
2,有记忆接通延时定时器
TONR,有记忆接通延时定时器指令 。 用于
对许多间隔的累计定时 。 上电周期或首次扫
描, 定时器位 OFF,当前值保持 。 使能输入
接通时, 定时器位为 OFF,当前值从 0开始
计数时间 。 使能输入断开, 定时器位和当前
值保持最后状态 。 使能输入再次接通时, 当
前值从上次的保持值继续计数, 当累计当前
值达到预设值时, 定时器位 ON,当前值连
续计数到 32767。
TONR定时器只能用复位指令进行复位操作 。
指令格式,TONR Txxx,PT
例,TONR T20,63
第 4章 基本指令
3,断开延时定时器
TOF,断开延时定时器指令 。 用于断开
后的单一间隔定时 。 上电周期或首次扫
描, 定时器位 OFF,当前值为 0。 使能输
入接通时, 定时器位为 ON,当前值为 0。
当使能输入由接通到断开时, 定时器开
始计数, 当前值达到预设值时, 定时器
位 OFF,当前值等于预设值, 停止计数 。
TOF复位后, 如果使能输入再有从 ON到
OFF的负跳变, 则可实现再次启动 。
指令格式,TOFTxxx,PT
例,TOF T35,6
第 4章 基本指令
4,应用举例
例 1:图 4.12是介绍 3种定时器的工作特性的
程序片断, 其中 T35为通电延时定时器, T2
为有记忆通电延时定时器, T36为断电延时
定时器 。
第 4章 基本指令
LD I0, 0 // 使能输入
T O N T 3 5,+ 4 // 通电延时定时
// 延时时间为
/ / 4 0 m s
LD I0, 0 //
T O N R T 2,+ 1 0 // 有记忆通电
// 延时时间累计
// 为 1 0 0 0 m s
LD I0, 0 //
T O F T 3 6,+ 3 // 断电延时定时
// 延时时间为
// 30 ms
图 4.12 定时器特性
第 4章 基本指令
本梯形图程序中输入输出执行时序关系如图 4.13
所示 。
图 4.13 定时器时序
T 3 6 位
4
10
3
I 0, 0
T 3 3 当前值
T2 当前值
T 3 3 位
3T2 位
T 3 6 当前值
最大值
最大值
4
第 4章 基本指令
例 2:用 TON构造各种类型的时间继电器触点 。
有的厂商的 PLC只有 TON定时器, 因此, 在这种情况下
可以利用 TON来构造断电延时型的各种触点 。
图 4.14是用 TON构造 TOF作用的触点 。 其时序图与 TOF
的时序完全相同 。
图 4.15用通电延时定时器与输出继电器组成带瞬动触点的
定时器 。
图 4.16是利用常开触点实现通电和断电都延时的触点作用 。
本程序实现的功能是:用输入端 I0.0控制输出端 Q0.0,当
I0.0接通后, 过 3个时间单位 Q0.0端输出接通, 当 I0.0断开
后, 过 6个时间单位 Q0.0断开 。
第 4章 基本指令 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 定时器应用
第 4章 基本指令
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.14 定时器应用
第 4章 基本指令
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章 基本指令
LD I0, 0 //
T O N T 3 3,+ 3 // 常开通电延时
// 用作通电延时定时
LD Q 0, 0 // 断电延时的基础
AN I0, 0 // 断电延时开始
T O N T 3 4,+ 6 // 通电延时定时器
// 用作断电延时计时
LD T 3 3 //
O Q 0, 0 //
AN T 3 4 //
= Q 0, 0 // 用作通、断电延时
图 4.16 定时器应用
返回本节
第 4章 基本指令
4.1.5 计数器指令
1,概 述
2,增计数器
3,增减计数器
4,减计数器
5,应用举例
第 4章 基本指令
1,概述
计数器用来累计输入脉冲的次数。计数器也是由
集成电路构成,是应用非常广泛的编程元件,经
常用来对产品进行计数。
计数器指令有 3种:增计数 CTU, 增减计数
CTUD和减计数 CTD。
指令操作数有 4方面:编号, 预设值, 脉冲输入
和复位输入 。
第 4章 基本指令
LD M 0, 0 // 起动信号
= Q 0, 1 // 起动电机 M1
T O N T 4 0,+ 2 0 0 // 延时 2 0 0 0 m s
// 后起动电机 M2
LD T 4 0 //
= Q 0, 2 // 起动电机 M2
T O N T 4 1,+ 3 0 0 // 延时 3 0 0 0 m s
// 后起动电机 M3
LD T 4 1 //
= Q 0, 3 // 起动电机 M3
图 4.18 电机顺序起动
第 4章 基本指令
2,增计数器
CTU,增计数器指令 。 首次扫描, 定时器位 OFF,
当前值为 0。 脉冲输入的每个上升沿, 计数器计
数 1次, 当前值增加 1个单位, 当前值达到预设值
时, 计数器位 ON,当前值继续计数到 32767停止
计数 。 复位输入有效或执行复位指令, 计数器自
动复位, 即计数器位 OFF,当前值为 0。
指令格式,CTU Cxxx,PV
例,CTU C20,3
程序实例:
图 4.19为增计数器的程序片断和时序图 。
第 4章 基本指令
LD I0,0 // 计数脉冲信号输入端
LD I0,1 // 复位信号输入端
C T U C 20,+ 3 // 增计数,计数设定值
// 为 3 个脉冲
LD C 20 // 计数值达到 3,则
= Q 0,0 // 将输入位置 1
第 4章 基本指令
I 0, 0
I 0, 1
C 2 0 当前值
C 2 0 位
图 4.19 增计数程序及时序
第 4章 基本指令
3,增减计数器
CTUD,增减计数器指令。有两个脉冲输入端,CU输入端用于递增
计数,CD输入端用于递减计数。
指令格式,CTUD Cxxx,PV
例,CTUD C30,5
程序实例:如图 4.20所示为增减计数器的程序片断和时序图。
LD I0, 0 // 增计数输入端
LD I0, 1 // 减计数输入端
LD I0, 2 // 复位输入端
C T U D C 3 0,+ 5 // 增减计数,设定
// 脉冲数为 5 。
LD C 3 0 // 计数器触点
= Q 0, 0 // 输出触点
第 4章 基本指令
图 4.20 增减计数程序及时序
1
2
3
4
5
4
3
4
3
4
5
6
7
I 0, 0
I 0, 1
I 0, 2
C 3 0 当前值
C 3 0 位
第 4章 基本指令
4,减计数器
CTD,增减计数器指令 。 脉冲输入端 CD用于递减计数 。
首次扫描, 定时器位 OFF,当前值为等于预设值 PV。 计
数器检测到 CD输入的每个上升沿时, 计数器当前值减小 1
个单位, 当前值减到 0时, 计数器位 ON。
复位输入有效或执行复位指令, 计数器自动复位, 即计
数器位 OFF,当前值复位为预设值, 而不是 0。
指令格式,CTD Cxxx,PV
例,CTD C40,4
程序实例:图 4.21为减计数器的程序片断和时序图 。
第 4章 基本指令
LD I0,0 // 减计数脉冲输入端
LD I0,1 // 复位输入端
C T D C 40,+ 4 // 减计数器,设定计数
// 脉冲数为 4 。
LD C 40 // 装入计数器触点
= Q 0,0 // 输出触点
第 4章 基本指令
图 4.21 减计数程序及时序
I 0, 0
I 0, 1
C 4 0 当前值
C 4 0 位
第 4章 基本指令
5,应用举例
1) 循环计数 。
以上三种类型的计数器如果在使用时, 将计数器
位的常开触点作为复位输入信号, 则可以实现循
环计数 。
2) 用计数器和定时器配合增加延时时间, 如图
4.22所示 。 试分析以下程序中实际延时为多长时
间 。
第 4章 基本指令
LD I0, 0 // 启动通电延时
AN M 0, 0 // 重新启动延时
T ON T 5 0,+3 0 0 0 0 // 通电延时定时器
// 时间设定为 3 0 0 0 s
LD T 5 0 // 延时时间到
= M 0, 0 // 关定时器,产生一个
// 脉冲。
LD M 0, 0 // 每隔 3 0 0 0 s 输入一个
// 脉冲
L DN I0, 0 // 复位输入
CT U C2 0,+ 1 0 // 增计数器,累计脉冲
// 的总数。
第 4章 基本指令
图 4.22 计数器应用例
返回本节
1 2 3 111054
I 0, 0
T 5 0 位
C 2 0 位
第 4章 基本指令
4.1.6 比较
1,字节比较
2,整数比较
3,双字整数比较
4,实数比较
5,应用举例
第 4章 基本指令
1,字节比较
字节比较用于比较两个字节型整数值 IN1和 IN2的
大小, 字节比较是无符号的 。 比较式可以是 LDB、
AB或 OB后直接加比较运算符构成 。
如,LDB=,AB<>,OB>= 等 。
整数 IN1和 IN2的寻址范围,VB,IB,QB,MB、
SB,SMB,LB,*VD,*AC,*LD和常数 。
指令格式例:
LDB= VB10,VB12
AB<>MB0,MB1
OB<= AC1,116
第 4章 基本指令
2,整数比较
整数比较用于比较两个一字长整数值 IN1和 IN2的大小,
整数比较是有符号的 ( 整数范围为 16#8000和 16#7FFF之
间 ) 。 比较式可以是 LDW,AW或 OW后直接加比较运算
符构成 。
如,LDW=,AW<>,OW>=等 。
整数 IN1和 IN2的寻址范围,VW,IW,QW,MW,SW、
SMW,LW,AIW,T,C,AC,*VD,*AC,*LD和常
数 。
指令格式例:
LDW=VW10,VW12
AW<> MW0,MW4
OW<=AC2,1160
第 4章 基本指令
3,双字整数比较
双字整数比较用于比较两个双字长整数值 IN1和
IN2的大小,双字整数比较是有符号的(双字整
数范围为 16#80000000和 16#7FFFFFFF之间)。
指令格式例:
LDD= VD10,VD14
AD<> MD0,MD8
OD<= AC0,1160000
LDD>= HC0,*AC0
第 4章 基本指令
4,实数比较
实数比较用于比较两个双字长实数值 IN1和 IN2的
大小, 实数比较是有符号的 ( 负实数范围为 -
1.175495E-38 和 -3.402823E+38, 正实数范围为
+1.175495E-38和 +3.402823E+38) 。 比较式可以
是 LDR,AR或 OR后直接加比较运算符构成 。
指令格式例:
LDR= VD10,VD18
AR<> MD0,MD12
OR<= AC1,1160.478
AR> *AC1,VD100
第 4章 基本指令
5,应用举例
控制要求:
一自动仓库存放某种货物, 最多 6000箱, 需对所
存的货物进出计数 。 货物多于 1000箱, 灯 L1亮;
货物多于 5000箱, 灯 L2亮 。
其中, L1和 L2分别受 Q0.0和 Q0.1控制, 数值 1000
和 5000分别存储在 VW20和 VW30字存储单元中 。
本控制系统的程序如图 4.23所示 。 程序执行时序
如图 4.24所示 。
第 4章 基本指令
图 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章 基本指令
图 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章 基本指令
4.2 运算指令
4.2.1 加法
4.2.2 减法
4.2.3 乘法
4.2.4 除法
4.2.5 数学函数指令
4.2.6 增减
4.2.7 逻辑运算
返回本章首页
第 4章 基本指令
4.2.1 加法
1,整数加法
+I,整数加法指令 。 使能输入有效时, 将两个单
字长 ( 16位 ) 的符号整数 IN1和 IN2相加, 产生一
个 16位整数结果 OUT。
第 4章 基本指令
LD I0, 0 // 使能输入端
+I V W 0,V W 4
// 整数加法
/ / V W 0 + V W 4 = V W 4
图 4.25 整数加法例
第 4章 基本指令
2,双整数加法
+D,双整数加法指令 。 使能输入有效时, 将两个双字长 ( 32位 ) 的
符号双整数 IN1和 IN2相加, 产生一个 32位双整数结果 OUT。
在 LAD和 FBD中, 以指令盒形式编程, 执行结果,IN1+IN2=OUT。
在 STL中, 执行结果,IN1+OUT=OUT。
OUT的寻址范围,VD,ID,QD,MD,SD,SMD,LD,AC、
*VD,*AC,*LD。
指令格式,+D IN1,OUT
例,+D VD0,VD4
第 4章 基本指令
+R,实数加法指令 。 使能输入有效时, 将两个双字长 ( 32位 ) 的实
数 IN1和 IN2相加, 产生一个 32位实数结果 OUT。
在 LAD和 FBD中, 以指令盒形式编程, 执行结果,IN1+IN2=OUT。
OUT的寻址范围,VD,ID,QD,MD,SD,SMD,LD,AC、
*VD,*AC,*LD。
本指令影响的特殊存储器位,SM1.0( 零 ) ; SM1.1( 溢出 ) ;
SM1.2( 负 ) 。
返回本节
第 4章 基本指令
4.2.2 减法
减法指令是对有符号数进行相减操作 。 包括:整
数减法, 双整数减法和实数减法 。 这三种减法指
令与所对应的加法指令除运算法则不同之外, 其
他方面基本相同 。
第 4章 基本指令
在 LAD和 FBD中, 以指令盒形式编程, 执行结果,IN1-IN2=OUT。
在 STL中, 执行结果,OUT- IN2=OUT。
指令格式,-I IN2,OUT ( 整数减法 )
-D IN2,OUT ( 双整数减法 )
-R IN2,OUT ( 实数减法 )
例,-I AC0,VW4
返回本节
第 4章 基本指令
4.2.3 乘法
*I,整数乘法指令 。 使能输入有
效时, 将两个单字长 ( 16位 ) 的
符号整数 IN1和 IN2相乘, 产生一
个 16位整数结果 OUT。
指令格式,*I IN1,OUT
例,*I VW0,AC0
1,整数乘法
第 4章 基本指令
2,完全整数乘法
MUL,完全整数乘法指令。使能输入有效时,将两个单
字长( 16位)的符号整数 IN1和 IN2相乘,产生一个 32位
双整数结果 OUT。
在 LAD和 FBD中,以指令盒形式编程,执行结果:
IN1*IN2=OUT。
OUT的寻址范围,VD,ID,QD,MD,SD,SMD,LD、
AC,*VD,*AC,*LD。
本指令影响的特殊存储器位,SM1.0( 零 ) ; SM1.1( 溢
出 ) ; SM1.2( 负 ) ; SM1.3( 被 0除 ) 。
指令格式,MUL IN1,OUT
例,MUL AC0,VD10
第 4章 基本指令
3,双整数乘法
*D,双整数乘法指令。使能输入有效时,将两个双字长
( 32位)的符号整数 IN1和 IN2相乘,产生一个 32位双整
数结果 OUT。
在 STL中, 执行结果,IN1*OUT=OUT。
IN1和 IN2的寻址范围,VD,ID,QD,MD,SD,SMD、
LD,HC,AC,*VD,*AC,*LD和常数 。
OUT的寻址范围,VD,ID,QD,MD,SD,SMD,LD、
AC,*VD,*AC,*LD。
本指令影响的特殊存储器位,SM1.0( 零 ) ; SM1.1( 溢
出 ) ; SM1.2( 负 ) ; SM1.3( 被 0除 ) 。
指令格式,*D IN1,OUT
例,*D VD0,AC0
第 4章 基本指令
4,实数乘法
*R,实数乘法指令 。 使能输入有效时, 将两个双字长 ( 32位 )
的实数 IN1和 IN2相乘, 产生一个 32位实数结果 OUT。
在 LAD 和 FBD 中, 以 指 令 盒 形 式 编 程, 执 行 结 果,
IN1*IN2=OUT。
在 STL中, 执行结果,IN1*OUT=OUT。
IN1和 IN2的寻址范围,VD,ID,QD,MD,SD,SMD,LD、
AC,*VD,*AC,*LD和常数 。
OUT的寻址范围,VD,ID,QD,MD,SD,SMD,LD,AC、
*VD,*AC,*LD。
本指令影响的特殊存储器位,SM1.0( 零 ) ; SM1.1( 溢出 ) ;
SM1.2( 负 ) ; SM1.3( 被 0除 ) 。
指令格式,*R IN1,OUT
例,*R VD0,AC0
返回本节
第 4章 基本指令
4.2.4 除法
在 LAD和 FBD中, 以指令盒形式编程, 执行结果,IN1/IN2=OUT。
在 STL中, 执行结果,OUT/ IN2=OUT。
指令格式,/I IN2,OUT ( 整数除法 )
DIV IN2,OUT ( 整数完全除法 )
/D IN2,OUT ( 双整数除法 )
/R IN2,OUT ( 实数除法 )
第 4章 基本指令
例,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 除法指令应用
第 4章 基本指令
对于除法指令:
对于完全除法指令:
返回本节
第 4章 基本指令
4.2.5 数学函数指令
1,平方根
2,自然对数
3,指数
4,正弦、余弦、正切
第 4章 基本指令
1,平方根
SQRT,平方根指令 。 把一个双字长 ( 32位 ) 的实数
IN开平方, 得到 32位的实数结果 。
在 LAD和 FBD中, 以指令盒形式编程, 执行结果:
SQRT(IN)=OUT。
在 STL中, 执行结果,SQRT(IN)=OUT。
本指令影响的特殊存储器位,SM1.0( 零 ) ; SM1.1
( 溢出和非法值 ) ; SM1.2( 负 ) 。
使能流输出 ENO断开的出错条件,SM1.1( 溢出 ) ;
SM4.3( 运行时间 ) ; 0006( 间接寻址 ) 。
指令格式,SQRT IN,OUT
例,SQRT VD0,AC0
第 4章 基本指令
2,自然对数
LN,自然对数指
令 。 将一个双字
长 ( 32 位 ) 的实
数 IN取自然对数,
得到 32 位的实数
结果 。
应用实例:
求以 10为底的 50
( 存于 VD0) 的常
用对数, 结果放
到 AC0。
本运算程序如图
4.27所示 。
LD I0, 0 // 使能输入
LN V D 0,A C0 //
// 自然对数
// L n (V D 0 )= A C0
LN 1 0, 0,V D 1 0 0 //
// 自然对数
// L n (1 0 )= V D 1 0 0
/R V D 1 0 0,A C0 //
// 实数除法指令
// A C0 / V D 1 0 0 = V D 1 0 0
图 4.27 自然对数的应用
第 4章 基本指令
3,指数
EXP,指数指令。将一个双字长
( 32位)的实数 IN取以 e为底的指
数,得到 32位的实数结果 OUT。
在 LAD和 FBD中,以指令盒形式编
程,执行结果,EXP(IN)=OUT。
在 STL中,执行结果:
EXP(IN)=OUT。
指令格式,EXP IN,OUT
例,EXP VD0,AC0
第 4章 基本指令
4,正弦、余弦、正切
SIN,COS,TAN,即正弦, 余弦, 正切指令 。 将一个双
字长 ( 32位 ) 的实数弧度值 IN分别取正弦, 余弦, 正切,
各得到 32位的实数结果 。
如果已知输入值为角度, 要先将角度值转化为弧度值,
方法:使用 ( *R) MUL_R指令用角度值乘以 π/180° 即
可 。
第 4章 基本指令
例,TAN VD0,AC0
应用实例:求 COS160o的值 。 如图 4.28所示 。
LD I0, 0 // 使能输入
M O V R 3, 1 4 1 5 9,A C0 //
// π 装入 A C0
/R 1 8 0, 0,A C0 //
// 得 π /180 弧度
//
*R 1 6 0, 0,A C0 //
// 角度转化为弧度
//
CO S A C0,A C1 //
// 求余弦指令
// 结果存放到 A C1
图 4.28 三角函数应用例
返回本节
第 4章 基本指令
4.2.6 增减
1,字节增和字节减
2,字增和字减
3,双字增和双字减
4,应用实例
第 4章 基本指令
1,字节增和字节减
INCB,字节增指令 。 使能输入有效时, 把一字节长的无
符号输入数 ( IN) 加 1,得到一
字节的无符号输出结果 OUT。
DECB,字节减指令 。 使能输入有效时, 把一字节长的无
符号输入数 ( IN) 减 1,得到一字节的无符号输出结果
OUT。
第 4章 基本指令
2,字增和字减
第 4章 基本指令
3,双字增和双字减
INCD,双字增指令 。 使能输入有效时, 把双字长 ( 32位 )
的有符号输入数 ( IN) 加 1,得到双字长的有符号输出结
果 OUT。
DECD,双字减指令 。 使能输入有效时, 把双字长的有符
号输入数 ( IN) 减 1,得到双字长的有符号输出结果 OUT。
第 4章 基本指令
4,应用实例
控制要求:
食品加工厂对饮
料生产线上的盒
装饮料进行计数,
每 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 增减指令的应用
返回本节
第 4章 基本指令
4.2.7 逻辑运算
1,字节逻辑运算
2,字逻辑运算
3,双字逻辑运算
第 4章 基本指令
1,字节逻辑运算
字节逻辑运算包括字节与, 字节或, 字节异或,
字节取反 。
第 4章 基本指令
2,字逻辑运算
字节逻辑运算包括字节与, 字节或, 字节异或,
字节取反 。
第 4章 基本指令
3,双字逻辑运算
字逻辑运算包括双字与、双字或、双字异或、双
字取反。
返回本节
第 4章 基本指令
4.3 其他数据处理指令
4.3.1 传送类指令
4.3.2 移位指令
4.3.3 字节交换指令
4.3.4 填充指令
返回本章首页
第 4章 基本指令
4.3.1 传送类指令
1,单一传送
( 1) MOVB,字节传送指令
( 2) BIR,传送字节立即读指令
( 3) BIW,传送字节立即写指令
( 4) MOVW,字传送指令
( 5) MOVD,双字传送指令
( 6) MOVR,实数传送指令
2,块传送
( 1) BMB,字节块传送指令
( 2) BMW,字块传送指令
( 3) BMD,双字块传送指令
第 4章 基本指令
1,单一传送
( 1) MOVB,字节传送指令
使能输入有效时, 把一个单字节无符号数
据由 IN传送到 OUT所指的字节存储单元 。
IN的寻址范围,VB,IB,QB,MB,SB、
SMB,LB,AC,*VD,*AC,*LD和常
数 。
OUT的寻址范围,VB,IB,QB,MB、
SB,SMB,LB,AC,*VD,*AC,*LD。
指令格式,MOVB IN1,OUT
例,MOVB VB0,QB0
第 4章 基本指令
( 2) BIR,传送字节立即读指令
使能输入有效时, 立即读取单字
节物理输入区数据 IN,并传送到
OUT所指的字节存储单元 。
IN的寻址范围,IB
OUT的寻址范围,VB,IB,QB、
MB,SB,SMB,LB,AC,*VD、
*AC,*LD。
指令格式,BIR IN1,OUT
例,BIR IB0,VB10
第 4章 基本指令
2,块传送
指令可用来进行一次多个(最多 255个)数据的传送,
数据块类型可以是字节块、字块、双字块。
三条指令中 N的寻址范围都是,VB,IB,QB,MB、
SB,SMB,LB,AC,*VD,*AC,*LD和常数。
使 ENO断开的出错条件,SM4.3(运行时间); 0006
(间接寻址); 0091(数超界)。
返回本节
第 4章 基本指令
4.3.2 移位指令
1,左移和右移
2,循环左移、循环右移
3,寄存器移位
第 4章 基本指令
( 1) 字节左移和字节右移
SLB和 SRB,字节左移和字节右移 。 使能输入有效时, 把
字节型输入数据 IN左移或右移 N位后, 再将结果输出到
OUT所指的字节存储单元 。 最大实际可移位次数为 8。
1,左移和右移
第 4章 基本指令
以第一条指令为例, 指令执行情况如表 4.16所示 。
表 4.16 指令 SLB执行结果
第 4章 基本指令
SLW和 SRW,字左移和字右移 。 指令盒与字节
移位比较, 只有名称变为 SHR_W和 SHR_W。 使
能输入有效时, 把字型输入数据 IN左移或右移 N
位后, 再将结果输出到 OUT所指的字存储单元 。
最大实际可移位次数为 16。
指令格式,SLW OUT,N ( 字左移 )
SRW OUT,N ( 字右移 )
例,SLW MW0,2
SRW LW0,3
以第二条指令为例, 指令执行情况如表 4.17所示 。
第 4章 基本指令
第 4章 基本指令
( 3) 双字左移和双字右移
SLD和 SRD,双字左移和双字右移 。 指令盒与字节移位比
较, 只有名称变为 SHL_DW和 SHR_DW,其他部分完全
相同 。 使能输入有效时, 把双字型输入数据 IN左移或右
移 N位后, 再将结果输出到 OUT所指的双字存储单元 。 最
大实际可移位次数为 32。
指令格式,SLD OUT,N ( 双字左移 )
SRD OUT,N ( 双字右移 )
例,SLD MD0,2
SRD LD0,3
第 4章 基本指令
2,循环左移、循环右移
循环左移和循环右移根据所循环移位的数的长度分别又可
分为字节型、字型、双字型。
循环移位特点:
移位数据存储单元的移出端与另一端相连,同时又与
SM1.1(溢出)相连,所以最后被移出的位被移到另一端
的同时,也被放到 SM1.1位存储单元。例如在循环右移时,
移位数据的最右端位移入最左端,同时又进入 SM1.1。
SM1.1始终存放最后一次被移出的位。
第 4章 基本指令
循环移位 的类型
( 1)字节循环左移和字节循环右移
( 2)字循环左移和字循环右移
( 3)双字循环左移和双字循环右移
表 4.18 指令 RRW执行结果
第 4章 基本指令
SHRB,寄存器移位指令 。
该指令在梯形图中有 3个数据输入端:
DATA为数值输入, 将该位的值移入移
位寄存器; S_BIT为移位寄存器的最低位
端; N指定移位寄存器的长度 。 每次使能
输入有效时, 整个移位寄存器移动 1位 。
移位特点:
移位寄存器长度在指令中指定, 没有字
节型, 字型, 双字型之分 。 可指定的最
大长度为 64位, 可正也可负 。
3,寄存器移位
第 4章 基本指令
表 4.19 指令 SHRB执行结果
返回本节
第 4章 基本指令
4.3.3 字节交换指令
SWAP,字节交换指令 。 使能输入有效时, 将字型输入数据 IN的高
字节和低字节进行交换 。
本指令只对字型数据进行处理, 指令的执行不影响的特殊存储器位 。
使能流输出 ENO断开的出错条件,SM4.3( 运行时间 ) ; 0006( 间接
寻址 ) 。
指令格式,SWAP IN ( 字节交换 )
例,SWAP VW10
以第本指令为例, 指令执行情况如表 4.20所示 。
返回本节
第 4章 基本指令
4.3.4 填充指令
FILL,存储器填充指令 。 使能输入有效时, 用字型
输入数据 IN填充从输出 OUT所指的单元开始的 N个字
存储单元 。
填充指令只对字型数据进行处理, N值为字节型, 可
取从 1~255的整数 。 指令的执行不影响的特殊存储器
位 。
使能流输出 ENO断开的出错条件,SM4.3( 运行时
间 ) ; 0006( 间接寻址 ) ; 0091( 操作数超界 ) 。
指令格式,FILL IN,OUT,N ( 填充指令 )
例,FILL 10,VW100,12
本条指令的执行结果是:将数据 10填充到从 VW100
到 VW122共 12个字存储单元 。
返回本节
第 4章 基本指令
4.4 表功能指令
4.4.1 表存数指令
4.4.2 表取数指令
4.4.3 表查找指令
返回本章首页
第 4章 基本指令
表只对字型数据存储,表的格式例如表 4.21所示。
第 4章 基本指令
4.4.1 表存数指令
ATT,表存数指令 。
该指令在梯形图中有 2个数据输入端,DATA为数
值输入, 指出将被存储的字型数据或其地址;
TBL表格的首地址, 用以指明被访问的表格 。 当
使能输入有效时, 将输入字型数据添加到指定的
表格中 。
表存数特点:
表存数时, 新存的数据添加在表中最后一个数据
的后面 。 每向表中存一个数据, 实际填表数 EC会
自动加 1。
第 4章 基本指令
表 4.22 指令 ATT执行结果
返回本节
第 4章 基本指令
4.4.2 表取数指令
1,FIFO,先进先出指令
2,LIFO,后进先出指令
第 4章 基本指令
1,FIFO,先进先出指令
当使能输入有效时, 从 TBL指明的表中移
出第一个字型数据并将其输出到 DATA所
指定的字单元 。
FIFO表取数特点:
取数时, 移出的数据总是最先进入表中的
数据 。 每次从表中移出一个数据, 剩余数
据依次上移一个字单元位置, 同时实际填
表数 EC会自动减 1。
指令格式,FIFO TBL,DATA
例,FIFO VW100,AC0
如果仍是对表 4.21存取,则指令执行情况
如表 4.23所示。
第 4章 基本指令
表 4.23 指令 FIFO执行结果
第 4章 基本指令
2,LIFO,后进先出指令
当使能输入有效时, 从 TBL指明的表中移
出最后一个字型数据并将其输出到 DATA
所指定的字单元 。
LIFO表取数特点:
取数时, 移出的数据是最后进入表中的数
据 。 每次从表中取出一个数据, 剩余数据
位置保持不变, 实际填表数 EC会自动减 1。
指令格式,LIFO TBL,DATA
例,LIFO VW100,AC0
如果仍是对表 4.21存取, 则指令执行情况
如表 4.24所示 。
第 4章 基本指令
表 4.24 指令 LIFO执行结果
返回本节
第 4章 基本指令
4.4.3 表查找指令
FND?,表查找指令 。 通过表查找指令可以
从字型数表中找出符合条件的数据所在的
表中数据编号, 编号范围为 0~99。
在梯形图中有 4个数据输入端,TBL表格的
首地址, 用以指明被访问的表格; PTN是
用来描述查表条件时进行比较的数据;
CMD是比较运算符,?, 的编码, 它是一
个 1~4的数值, 分别代表 =,<>,<和 >运算
符; INDX用来指定表中符合查找条件的数
据的地址 。
第 4章 基本指令
表 4.25 表查找指令执行结果
返回本节
第 4章 基本指令
4.5 转换指令
4.5.1 数据类型转换
4.5.2 编码和译码
4.5.3 七段码
4.5.4 字符串转换
返回本章首页
第 4章 基本指令
4.5.1 数据类型转换
1,字节与整数
( 1) 字节到整数
( 2) 整数到字节
2,整数与双整数
( 1)双整数到整数
( 2)整数到双整数
3,双整数与实数
( 1)实数到双整数
( 2)双整数到实数
4,整数与 BCD码
( 1) BCD码到整数
( 2)整数到 BCD码
5,程序实例
第 4章 基本指令
1,字节与整数
( 1) 字节到整数
BTI,字节转换为整数指令 。 使能输入有效时,
将字节输入数据 IN转换成整数类型, 并将结果送
到 OUT输出 。 字节型是无符号的, 所以没有符号
扩展 。
使能流输出 ENO断开的出错条件,SM4.3( 运行
时间 ) ; 0006( 间接寻址 ) 。
指令格式,BTI IN,OUT
例,BTI VB0,AC0
第 4章 基本指令
( 2) 整数到字节
ITB,整数转换字节指令 。 使能输入有效时, 将整数输入
数据 IN转换成字节类型, 并将结果送到 OUT输出 。 输入
数据超出字节范围 ( 0~255) 则产生溢出 。
移位指令影响的特殊存储器位,SM1.1( 溢出 ) 。
使能流输出 ENO断开的出错条件,SM1.1( 溢出 ) ;
SM4.3( 运行时间 ) ; 0006( 间接寻址 ) 。
指令格式,ITB IN,OUT
例,ITB AC0,VB10
第 4章 基本指令
2,整数与双整数
( 1) 双整数到整数
DTI,双整数转换为整数指令 。 使能输入有效时, 将双整
数输入数据 IN转换成整数类型, 并将结果送到 OUT输出 。
输入数据超出整数范围则产生溢出 。
移位指令影响的特殊存储器位,SM1.1( 溢出 ) 。
使能流输出 ENO断开的出错条件,SM1.1( 溢出 ) ;
SM4.3( 运行时间 ) ; 0006( 间接寻址 ) 。
指令格式,DTI IN,OUT
例,DTI AC0,VW20
第 4章 基本指令
( 2) 整数到双整数
ITD,整数转换为双整数指令 。 使能输入有效时,
将整数输入数据 IN转换成双整数类型 ( 符号进行
扩展 ), 并将结果送到 OUT输出 。
使能流输出 ENO断开的出错条件,SM4.3( 运行
时间 ) ; 0006( 间接寻址 ) 。
指令格式,ITD IN,OUT
例,ITD VW0,AC0
第 4章 基本指令
3,双整数与实数
( 1) 实数到双整数
第 4章 基本指令
( 2) 双整数到实数
DTR,双整数转换实数指令 。 使能输入有效时,
将双整数输入数据 IN转换成实型, 并将结果送到
OUT输出 。
使能流输出 ENO断开的出错条件,SM4.3(运行
时间); 0006(间接寻址)。
指令格式,DTR IN,OUT
例,DTR AC0,VD100
第 4章 基本指令
4,整数与 BCD码
( 1) BCD码到整数
BCDI,BCD码转换为整数指令 。
使能输入有效时, 将 BCD码输入
数据 IN转换成整数类型, 并将结
果送到 OUT输出 。 输入数据 IN
的范围为 0~9999。
指令格式,BCDI OUT
例,BCDI AC0
第 4章 基本指令
( 2) 整数到 BCD码
IBCD,整数转换为 BCD码指令 。
使能输入有效时, 将整数输入数据
IN转换成 BCD码类型, 并将结果
送到 OUT输出 。 输入数据 IN的范
围为 0~9999。
指令格式,IBCD OUT
例,IBCD AC0
第 4章 基本指令
5,程序实例
功能:
模拟量控制程序中
的数据类型转换 。
将模拟量输入端采
样值由整数转换为
双整数, 然后由双
整数转换为实数,
再除以一个比例因
子得到 PLC可以处
理的范围内的值 。
程序实现:
本程序如图 4.30 所
示 。
LD S M 0, 0 // 使能输入
IT D A IW 2,A C0 //
// 整数转换为双整数
//
D T R A C0,A C0 //
// 双整数转换为实数
//
/R 3 2 7 6 8, 0,A C0 //
// 实数除法指令
// A C0 / 3 2 7 6 8 = V D 1 0 0
M O V R A C0,V D 2 0 0 //
// 实数传送指令
返回本节
第 4章 基本指令
4.5.2 编码和译码
1,编码
ENCO,编码指令 。 使能输入有效时, 将字型输
入数据 IN的最低有效位 ( 值为 1的位 ) 的位号输
出到 OUT所指定的字节单元的低 4位 。 即用半个
字节来对一个字型数据 16位中的 1位有效位进行
编码 。
使能流输出 ENO断开的出错条件,SM4.3( 运行
时间 ) ; 0006( 间接寻址 ) 。
指令格式,ENCO IN,OUT
例,ENCO AC0,VB0
第 4章 基本指令
以本指令为例, 指令执行情况如表 4.26所示 。
表 4.26 编码指令执行结果
第 4章 基本指令
2,译码
DECO,译码指令 。 使能输入有效时, 将字节型输入数据
IN的低 4位所表示的位号对 OUT所指定的字单元的对应位
置 1,其他位置 0。 即对半个字节的编码进行译码来选择
一个字型数据 16位中的 1位 。
使能流输出 ENO断开的出错条件,SM4.3( 运行时间 ) ;
0006( 间接寻址 ) 。
指令格式,DECO IN,OUT
例,DECO VB0,AC0
本指令执行情况如表 4.27所示 。
第 4章 基本指令
返回本节
第 4章 基本指令
4.5.3 七段码
SEG,七段码指令 。 使能输入有效时, 将字节型
输入数据 IN的低 4位有效数字产生相应的七段码,
并将其输出到 OUT所指定的字节单元 。
返回本节
第 4章 基本指令
4.5.4 字符串转换
1,指令种类
( 1) ASCII码转换 16进制指令
( 2) 16进制到 ASCII码
( 3) 整数到 ASCII码
( 4) 双整数到 ASCII码
( 5) 实数到 ASCII码
第 4章 基本指令
2,指令介绍
下面仅以 ASCII码转换 16进制指令为例说明字符
串与其他数据类型之间的转换 。
ATH,ASCII码转换 16进制指令 。 指令盒中有 3
个操作数,IN,开始字符的字节地址, 字节类型;
LEN,字符串的长度, 字节类型, 最大长度为
255; OUT,输出目的开始字节地址, 字节类型 。
使能输入有效时, 把从 IN开始的长度为 LEN的
ASCII码转换为 16进制数, 并将结果送到 OUT开
始的字节进行输出 。
第 4章 基本指令
3,程序实例
以上面的指令为例, 条指令的执行结果如表 4.28
所示, 程序如图 4.31所示 。
表 4.28 指令 ATH执行结果
第 4章 基本指令
LD I2, 0 // 使能输入
A T H V B 1 0 0,V B 2 0 0,3 //
// 从 V B 1 0 0 开始的
// 3 个字符转换为
// 16 进制数值
LD I2, 1 //
M O V W V W 2 0 0,A C 0 //
// 字传送指令
// 结果输出到 A C 0
图 4.31 字符串转换
返回本节
第 4章 基本指令
4.1 位操作类指令
4.2 运算指令
4.3 其他数据处理指令
4.4 表功能指令
4.5 转换指令
第 4章 基本指令
本章学习目的
l 位操作类指令, 主要是位操作及运算指令,
与时也包含与位操作密切相关的定时器和计数
器指令等 。
l 运算指令, 包括常用的算术运算和逻辑运算
指令 。
l 其他数据处理类, 包括数据的传送, 移位,
填充和交换等指令 。
l 表功能指令, 包括对表的存取和查找指令 。
l 转换指令, 包括数据类型转换, 码转换和字
符转换指令 。
返回本章首页
第 4章 基本指令
4.1 位操作类指令
4.1.1 指令使用概述
4.1.2 基本逻辑指令
4.1.3 复杂逻辑指令
4.1.4 定时器指令
4.1.5 计数器指令
4.1.6 比较
返回本章首页
第 4章 基本指令
4.1.1 指令使用概述
1,主机的有效
编程范围
存储器的存储
容量及各编程
元件的有效编
程范围如右表
4.1所示 。
第 4章 基本指令
许
多
指
令
中
含
有
操
作
数
,
操
作
数
的
有
效
编
址
范
围
如
表
4.
2
所
示
。
第 4章 基本指令
( 1) 指令例
整数加法
+I,整数加法指令 。 使能输入有效时, 将两个单字长 ( 16位 ) 的符
号整数 IN1和 IN2相加, 产生一个 16位整数结果输出 ( OUT) 。
在 LAD和 FBD 中, 以指令盒形式编程 。 指令盒的执行结果:
IN1+IN2=OUT
在 STL中, 执行结果,IN1+OUT=OUT
IN1和 IN2的寻址范围,VW,IW,QW,MW,SW,SMW,LW、
AIW,T,C,AC,*VD,*AC,*LD和常数 。
OUT的寻址范围,VW,IW,QW,MW,SW,SMW,LW,T、
C,AC,*VD,*AC和 *LD。
第 4章 基本指令
本指令影响的特殊存储
器位,SM1.0(零);
SM1.1(溢出);
SM1.2(负)
使能流输出 ENO断开
的出错条件,SM1.1
(溢出); SM4.3(运
行时间); 0006(间接
寻址)
指令格式:
+I IN1,OUT
第 4章 基本指令
例,+I VW0,VW4
本指令在梯形图和语句表中的编程如图 4.1所示 。
图 4.1 整数加法
LD I0,0 // 使能输入端
+I V W 0,V W 4
// 整数加法
//V W 0+ V W 4= V W 4
第 4章 基本指令
3,梯形图的基本绘制规则
( 1) Network
( 2)能流 /使能
( 3)编程顺序
( 4)编号分配
( 5)内、外触点的配合
( 6)触点的使用次数
( 7)线圈的使用次数
( 8)线圈的连接
返回本节
第 4章 基本指令
4.1.2 基本逻辑指令
基本逻辑指令在语句表语言中是指对位存储单元
的简单逻辑运算, 在梯形图中是指对触点的简单
连接和对标准线圈的输出 。
一般来说, 语句表语言更适合于熟悉可编程序控
制器和逻辑编程方面有经验的编程人员 。 用这种
语言可以编写出用梯形图或功能框图无法实现的
程序 。 选择语句表时进行位运算要考虑主机的内
部存储结构 。
第 4章 基本指令
可编程序控制器中的
堆栈与计算机中的堆
栈结构相同, 堆栈是
一组能够存储和取出
数据的暂时存储单元 。
堆 栈 的 存 取 特 点 是
,后进先出,, S7-
200可编程序控制器的
主机逻辑堆栈结构如
表 4.3所示 。
第 4章 基本指令
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) =,输出指令
第 4章 基本指令
在语句表中, LD,LDN,A,AN,O,ON,NOT这几
条指令的执行对逻辑堆栈的影响分别如表 4.4,表 4.5其后
的说明 。
第 4章 基本指令
表 4.5 指令 A I0.2的执行
第 4章 基本指令
程序实例:
本程序段用以
介绍标准触点
指令在梯形图,
语句表和功能
块图 3种语言编
程中的应用,
仔细比较不同
编程工具的区
别与联系 。
其梯形图和语
句表程序结构
如图 4.2所示 。
LD I0, 0 // 装入常开触点
O I0, 1 // 或常开触点
A I0, 2 // 与常开触点
= Q 0, 0 // 输出触点
// 如果本梯级中将 I0, 1 的触点改
// 为 Q 0, 0 的常开触点,则成为电
// 机起动停止控制环节的梯形图。
L D N I0, 0 // 装入常闭触点
ON I0, 1 // 或常闭触点
AN I0, 2 // 与常闭触点
= Q 0, 1 //
LD I0, 0 //
O I0, 1 //
A I0, 2 //
NOT // 取非,即输出反相
= Q 0, 3 //
图 4.2 标准触点 LAD和 STL例
第 4章 基本指令
本程序对应的
功能框图如图
4.3所示 。 在功
能框图中, 常
闭触点的装入
和串并联用指
令盒的对应输
入信号端加圆
圈来表示 。
程序执行的时
序图如图 4.4所
示 。
LD I0, 0 / /
O I0, 1 / /
A I0, 2 / /
= Q 0, 0 / /
//
//
L D N I0, 0 / /
ON I0, 1 / /
AN I0, 2 / /
= Q 0, 1 / /
//
//
LD I0, 0 / /
O I0, 1 / /
A I0, 2 / /
NOT //
= Q 0, 3 / /
图 4.3 标准触点 FBD例
2,正负跳变指令
第 4章 基本指令
图 4,4 时序图
I0.0
Q0.2
Q0.0
I0.2
I0.1
第 4章 基本指令
负跳变触点检测到脉冲的每一次负跳变后,
产生一个微分脉冲 。
指令格式,ED ( 无操作数 )
应用举例:图 4.5是跳变指令的程序片断 。
图 4.6是图 4.5指令执行的时序 。
第 4章 基本指令
LD I0, 0 // 输入常开触点
EU // 脉冲正跳变
= Q 0, 0 // 输出触点
LD I0, 0 //
ED // 脉冲负跳变
= Q 0, 1 //
图 4.5 跳变应用
第 4章 基本指令
图 4.6 时序
I0.0
Q0.1
Q0.0
第 4章 基本指令
( 1) S,置位指令
( 2) R,复位指令
置位即置 1,复位即置 0。 置位和复位指令可以将位存储区
的某一位开始的一个或多个 ( 最多可达 255个 ) 同类存储器
位置 1或置 0。 这两条指令在使用时需指明三点:操作性质,
开始位和位的数量 。 各操作数类型及范围如表 4.6所示 。
3,置位和复位指令
第 4章 基本指令
( 1) S,置位指令
将位存储区的指定位 ( 位 bit) 开始的 N个同类存
储器位置位 。
用法,S bit,N
例,S Q0.0,1
第 4章 基本指令
( 2) R,复位指令
将位存储区的指定位 ( 位 bit) 开始的 N个同类存
储器位复位 。 当用复位指令时, 如果是对定时器
T位或计数器 C位进行复位, 则定时器位或计数器
位被复位, 同时, 定时器或计数器的当前值被清
零 。
用法,R bit,N
例,R Q0.2,3
应用举例:图 4.7为置位和复位指令应用程序片断 。
第 4章 基本指令
LD I0, 0 // 装入常开触点
A I0, 1 // 与常开触点
= Q 1, 0 // 输出触点
LD I0, 0 //
A I0, 1 //
S Q 0, 0,1 // 将 Q 0, 0 开始的 / / 1
个触点置 1
R Q 0, 2,3 // 将 Q 0, 2 开始的 // 3
个触点置 0
图 4.7 置位复位
第 4章 基本指令
本程序对应的时序图如图 4.8所示 。
图 4.8 时序图
I0.0
Q 0, 2 - Q 0, 4
Q0.0
Q1.0
I0.1
第 4章 基本指令
4,立即指令
( 1)立即触点指令
( 2) =I,立即输出指令
( 3) SI,立即置位指令
( 4) RI,立即复位指令
第 4章 基本指令
( 1) 立即触点指令
在每个标准触点指令的后面加, I”。 指令执行时,
立即读取物理输入点的值, 但是不刷新对应映像
寄存器的值 。
这类指令包括,LDI,LDNI,AI,ANI,OI和
ONI。 下面以 LDI指令为例 。
用法,LDI bit
例,LDI I0.2
注意,bit只能是 I类型 。
第 4章 基本指令
( 2) =I,立即输出指令
用立即指令访问输出点时, 把栈顶值立即复制到
指令所指出的物理输出点, 同时, 相应的输出映
像寄存器的内容也被刷新 。
用法,=I bit
例,=I Q0.2
注意,bit只能是 Q类型 。
第 4章 基本指令
( 3) SI,立即置位指令
用立即置位指令访问输出点时, 从指令所指出的位 ( bit)
开始的 N个 ( 最多为 128个 ) 物理输出点被立即置位, 同
时, 相应的输出映像寄存器的内容也被刷新 。
用法,SI bit,N
例,SI Q0.0,2
注意,bit只能是 Q类型 。 SI和 RI指令的操作数类型及范
围如表 4.7所示 。
第 4章 基本指令
( 4) RI,立即复位指令
用立即复位指令访问输出点时, 从指令所指出的
位 ( bit) 开始的 N个 ( 最多为 128个 ) 物理输出点
被立即复位, 同时, 相应的输出映像寄存器的内
容也被刷新 。
用法,RI bit,N
例,RI Q0.0,1
应用举例:
图 4.9为立即指令应用中的一段程序, 图 4.10是程
序对应的时序图 。
第 4章 基本指令
LD I 0.0 // 装入常开触点
= Q 0.0 // 输出触点,非立即
=I Q 0.1 // 立即输出触点
SI Q 0.2,1 // 从 Q 0.2 开始的 1 个
// 触点被立即置 1
L D I I 0.0 // 立即输入触点指令
= Q 0.3 //
图 4.9 立即指令程序
第 4章 基本指令
图 4.10 时序图
返回本节
扫描周期 n 扫描周期 n + 1 扫描周期 n + 3扫描周期 n + 2
输出刷新 输出刷新输出刷新输出刷新输出刷新
输入扫描
输入扫描
输入扫描输入扫描输入扫描
Q 0, 1
I 0, 0
Q 0, 0
Q 0, 3
Q 0, 2
第 4章 基本指令
4.1.3 复杂逻辑指令
1,栈装载与指令
2,栈装载或指令
3,逻辑推入栈指令
4,逻辑弹出栈指令
5,逻辑读栈指令
6,装入堆栈指令
第 4章 基本指令
1,栈装载与指令
ALD,栈装载与指令 ( 与块 ) 。 在梯形图中用于将并联
电路块进行串联连接 。
在语句表中指令 ALD执行情况如表 4.8所示 。
第 4章 基本指令
OLD,栈装载或指令 ( 或块 ) 。 在梯形图中用于
将串联电路块进行并联连接 。
在语句表中指令 OLD执行情况如表 4.9所示 。
2,栈装载或指令
第 4章 基本指令
LPS,逻辑推入栈指令 ( 分支或主控指令 ) 。 在梯形图中
的分支结构中, 用于生成一条新的母线, 左侧为主控逻
辑块时, 第一个完整的从逻辑行从此处开始 。
注意,使用 LPS指令时, 本指令为分支的开始, 以后必须
有分支结束指令 LPP。 即 LPS与 LPP指令必须成对出现 。
在语句表中指令 LPS执行情况如下表 4.10所示 。
3,逻辑推入栈指令
第 4章 基本指令
4,逻辑弹出栈指令
LPP,逻辑弹出栈指令 ( 分支结束或主控复位指令 ) 。 在梯形图中的
分支结构中, 用于将 LPS指令生成一条新的母线进行恢复 。
注意,使用 LPP指令时, 必须出现在 LPS的后面, 与 LPS成对出现 。
在语句表中指令 LPP执行情况如下表 4.11所示 。
第 4章 基本指令
5,逻辑读栈指令
LRD,逻辑读栈指令 。 在梯形图中的分支结构中, 当左
侧为主控逻辑块时, 开始第二个和后边更多的从逻辑块 。
在语句表中指令 LRD 执行情况如表 4.12所示 。
第 4章 基本指令
6,装入堆栈指令
LDS,装入堆栈指令 。 本指令编程时较少使用 。
指令格式,LDS n ( n为 0~8的整数 )
例,LDS 4
指令 LDS 4
在语句表中执行情况如下表 4.13所示 。
第 4章 基本指令
应用举例:
图 4.11是复杂逻辑指令在实际应用中的一段程序的梯形图 。
LD I0, 0 // 装入常开触点
O I2, 2 // 或常开触点
LD I0, 1 // 被串的块开始
LD I2, 0 // 被并路开始
A I2, 1 //
O L D // 栈装载或,并路结束
A L D // 栈装载与,串路结束
LD I0, 0 //
L P S // 逻辑推入栈,主控
A I0, 5 //
= Q 7, 0 //
L RD // 逻辑读栈,新母线
LD I2, 1 //
O I1, 3 //
A L D // 栈装载与
= Q 6, 0 //
L P P // 逻辑弹出栈,母 线复原
LD I3, 1 //
O I2, 0 //
A L D //
= Q 1, 3 //
图
4.
11
复
杂
逻
辑
指
令
的
应
用
返回本节
第 4章 基本指令
4.1.4 定时器指令
系统提供 3种定时指令,TON,TONR和 TOF。
精度等级:
S7-200定时器的精度 ( 时间增量 /时间单位 /分辨率 ) 有 3
个等级,1ms,10ms和 100ms,精度等级和定时器号关系
如表 4.14所示 。
第 4章 基本指令
指令操作数
1)编号:
2)预设值 PT:
3)使能输入(只对 LAD和 FBD):
第 4章 基本指令
1,接通延时定时器
TON,接通延时定时器指令 。 用于单一
间隔的定时 。 上电周期或首次扫描, 定
时器位 OFF,当前值为 0。 使能输入接
通时, 定时器位为 OFF,当前值从 0开
始计数时间, 当前值达到预设值时, 定
时器位 ON,当前值连续计数到 32767。
使能输入断开, 定时器自动复位, 即定
时器位 OFF,当前值为 0。
指令格式,TON Txxx,PT
例,TON T120,8
第 4章 基本指令
2,有记忆接通延时定时器
TONR,有记忆接通延时定时器指令 。 用于
对许多间隔的累计定时 。 上电周期或首次扫
描, 定时器位 OFF,当前值保持 。 使能输入
接通时, 定时器位为 OFF,当前值从 0开始
计数时间 。 使能输入断开, 定时器位和当前
值保持最后状态 。 使能输入再次接通时, 当
前值从上次的保持值继续计数, 当累计当前
值达到预设值时, 定时器位 ON,当前值连
续计数到 32767。
TONR定时器只能用复位指令进行复位操作 。
指令格式,TONR Txxx,PT
例,TONR T20,63
第 4章 基本指令
3,断开延时定时器
TOF,断开延时定时器指令 。 用于断开
后的单一间隔定时 。 上电周期或首次扫
描, 定时器位 OFF,当前值为 0。 使能输
入接通时, 定时器位为 ON,当前值为 0。
当使能输入由接通到断开时, 定时器开
始计数, 当前值达到预设值时, 定时器
位 OFF,当前值等于预设值, 停止计数 。
TOF复位后, 如果使能输入再有从 ON到
OFF的负跳变, 则可实现再次启动 。
指令格式,TOFTxxx,PT
例,TOF T35,6
第 4章 基本指令
4,应用举例
例 1:图 4.12是介绍 3种定时器的工作特性的
程序片断, 其中 T35为通电延时定时器, T2
为有记忆通电延时定时器, T36为断电延时
定时器 。
第 4章 基本指令
LD I0, 0 // 使能输入
T O N T 3 5,+ 4 // 通电延时定时
// 延时时间为
/ / 4 0 m s
LD I0, 0 //
T O N R T 2,+ 1 0 // 有记忆通电
// 延时时间累计
// 为 1 0 0 0 m s
LD I0, 0 //
T O F T 3 6,+ 3 // 断电延时定时
// 延时时间为
// 30 ms
图 4.12 定时器特性
第 4章 基本指令
本梯形图程序中输入输出执行时序关系如图 4.13
所示 。
图 4.13 定时器时序
T 3 6 位
4
10
3
I 0, 0
T 3 3 当前值
T2 当前值
T 3 3 位
3T2 位
T 3 6 当前值
最大值
最大值
4
第 4章 基本指令
例 2:用 TON构造各种类型的时间继电器触点 。
有的厂商的 PLC只有 TON定时器, 因此, 在这种情况下
可以利用 TON来构造断电延时型的各种触点 。
图 4.14是用 TON构造 TOF作用的触点 。 其时序图与 TOF
的时序完全相同 。
图 4.15用通电延时定时器与输出继电器组成带瞬动触点的
定时器 。
图 4.16是利用常开触点实现通电和断电都延时的触点作用 。
本程序实现的功能是:用输入端 I0.0控制输出端 Q0.0,当
I0.0接通后, 过 3个时间单位 Q0.0端输出接通, 当 I0.0断开
后, 过 6个时间单位 Q0.0断开 。
第 4章 基本指令 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 定时器应用
第 4章 基本指令
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.14 定时器应用
第 4章 基本指令
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章 基本指令
LD I0, 0 //
T O N T 3 3,+ 3 // 常开通电延时
// 用作通电延时定时
LD Q 0, 0 // 断电延时的基础
AN I0, 0 // 断电延时开始
T O N T 3 4,+ 6 // 通电延时定时器
// 用作断电延时计时
LD T 3 3 //
O Q 0, 0 //
AN T 3 4 //
= Q 0, 0 // 用作通、断电延时
图 4.16 定时器应用
返回本节
第 4章 基本指令
4.1.5 计数器指令
1,概 述
2,增计数器
3,增减计数器
4,减计数器
5,应用举例
第 4章 基本指令
1,概述
计数器用来累计输入脉冲的次数。计数器也是由
集成电路构成,是应用非常广泛的编程元件,经
常用来对产品进行计数。
计数器指令有 3种:增计数 CTU, 增减计数
CTUD和减计数 CTD。
指令操作数有 4方面:编号, 预设值, 脉冲输入
和复位输入 。
第 4章 基本指令
LD M 0, 0 // 起动信号
= Q 0, 1 // 起动电机 M1
T O N T 4 0,+ 2 0 0 // 延时 2 0 0 0 m s
// 后起动电机 M2
LD T 4 0 //
= Q 0, 2 // 起动电机 M2
T O N T 4 1,+ 3 0 0 // 延时 3 0 0 0 m s
// 后起动电机 M3
LD T 4 1 //
= Q 0, 3 // 起动电机 M3
图 4.18 电机顺序起动
第 4章 基本指令
2,增计数器
CTU,增计数器指令 。 首次扫描, 定时器位 OFF,
当前值为 0。 脉冲输入的每个上升沿, 计数器计
数 1次, 当前值增加 1个单位, 当前值达到预设值
时, 计数器位 ON,当前值继续计数到 32767停止
计数 。 复位输入有效或执行复位指令, 计数器自
动复位, 即计数器位 OFF,当前值为 0。
指令格式,CTU Cxxx,PV
例,CTU C20,3
程序实例:
图 4.19为增计数器的程序片断和时序图 。
第 4章 基本指令
LD I0,0 // 计数脉冲信号输入端
LD I0,1 // 复位信号输入端
C T U C 20,+ 3 // 增计数,计数设定值
// 为 3 个脉冲
LD C 20 // 计数值达到 3,则
= Q 0,0 // 将输入位置 1
第 4章 基本指令
I 0, 0
I 0, 1
C 2 0 当前值
C 2 0 位
图 4.19 增计数程序及时序
第 4章 基本指令
3,增减计数器
CTUD,增减计数器指令。有两个脉冲输入端,CU输入端用于递增
计数,CD输入端用于递减计数。
指令格式,CTUD Cxxx,PV
例,CTUD C30,5
程序实例:如图 4.20所示为增减计数器的程序片断和时序图。
LD I0, 0 // 增计数输入端
LD I0, 1 // 减计数输入端
LD I0, 2 // 复位输入端
C T U D C 3 0,+ 5 // 增减计数,设定
// 脉冲数为 5 。
LD C 3 0 // 计数器触点
= Q 0, 0 // 输出触点
第 4章 基本指令
图 4.20 增减计数程序及时序
1
2
3
4
5
4
3
4
3
4
5
6
7
I 0, 0
I 0, 1
I 0, 2
C 3 0 当前值
C 3 0 位
第 4章 基本指令
4,减计数器
CTD,增减计数器指令 。 脉冲输入端 CD用于递减计数 。
首次扫描, 定时器位 OFF,当前值为等于预设值 PV。 计
数器检测到 CD输入的每个上升沿时, 计数器当前值减小 1
个单位, 当前值减到 0时, 计数器位 ON。
复位输入有效或执行复位指令, 计数器自动复位, 即计
数器位 OFF,当前值复位为预设值, 而不是 0。
指令格式,CTD Cxxx,PV
例,CTD C40,4
程序实例:图 4.21为减计数器的程序片断和时序图 。
第 4章 基本指令
LD I0,0 // 减计数脉冲输入端
LD I0,1 // 复位输入端
C T D C 40,+ 4 // 减计数器,设定计数
// 脉冲数为 4 。
LD C 40 // 装入计数器触点
= Q 0,0 // 输出触点
第 4章 基本指令
图 4.21 减计数程序及时序
I 0, 0
I 0, 1
C 4 0 当前值
C 4 0 位
第 4章 基本指令
5,应用举例
1) 循环计数 。
以上三种类型的计数器如果在使用时, 将计数器
位的常开触点作为复位输入信号, 则可以实现循
环计数 。
2) 用计数器和定时器配合增加延时时间, 如图
4.22所示 。 试分析以下程序中实际延时为多长时
间 。
第 4章 基本指令
LD I0, 0 // 启动通电延时
AN M 0, 0 // 重新启动延时
T ON T 5 0,+3 0 0 0 0 // 通电延时定时器
// 时间设定为 3 0 0 0 s
LD T 5 0 // 延时时间到
= M 0, 0 // 关定时器,产生一个
// 脉冲。
LD M 0, 0 // 每隔 3 0 0 0 s 输入一个
// 脉冲
L DN I0, 0 // 复位输入
CT U C2 0,+ 1 0 // 增计数器,累计脉冲
// 的总数。
第 4章 基本指令
图 4.22 计数器应用例
返回本节
1 2 3 111054
I 0, 0
T 5 0 位
C 2 0 位
第 4章 基本指令
4.1.6 比较
1,字节比较
2,整数比较
3,双字整数比较
4,实数比较
5,应用举例
第 4章 基本指令
1,字节比较
字节比较用于比较两个字节型整数值 IN1和 IN2的
大小, 字节比较是无符号的 。 比较式可以是 LDB、
AB或 OB后直接加比较运算符构成 。
如,LDB=,AB<>,OB>= 等 。
整数 IN1和 IN2的寻址范围,VB,IB,QB,MB、
SB,SMB,LB,*VD,*AC,*LD和常数 。
指令格式例:
LDB= VB10,VB12
AB<>MB0,MB1
OB<= AC1,116
第 4章 基本指令
2,整数比较
整数比较用于比较两个一字长整数值 IN1和 IN2的大小,
整数比较是有符号的 ( 整数范围为 16#8000和 16#7FFF之
间 ) 。 比较式可以是 LDW,AW或 OW后直接加比较运算
符构成 。
如,LDW=,AW<>,OW>=等 。
整数 IN1和 IN2的寻址范围,VW,IW,QW,MW,SW、
SMW,LW,AIW,T,C,AC,*VD,*AC,*LD和常
数 。
指令格式例:
LDW=VW10,VW12
AW<> MW0,MW4
OW<=AC2,1160
第 4章 基本指令
3,双字整数比较
双字整数比较用于比较两个双字长整数值 IN1和
IN2的大小,双字整数比较是有符号的(双字整
数范围为 16#80000000和 16#7FFFFFFF之间)。
指令格式例:
LDD= VD10,VD14
AD<> MD0,MD8
OD<= AC0,1160000
LDD>= HC0,*AC0
第 4章 基本指令
4,实数比较
实数比较用于比较两个双字长实数值 IN1和 IN2的
大小, 实数比较是有符号的 ( 负实数范围为 -
1.175495E-38 和 -3.402823E+38, 正实数范围为
+1.175495E-38和 +3.402823E+38) 。 比较式可以
是 LDR,AR或 OR后直接加比较运算符构成 。
指令格式例:
LDR= VD10,VD18
AR<> MD0,MD12
OR<= AC1,1160.478
AR> *AC1,VD100
第 4章 基本指令
5,应用举例
控制要求:
一自动仓库存放某种货物, 最多 6000箱, 需对所
存的货物进出计数 。 货物多于 1000箱, 灯 L1亮;
货物多于 5000箱, 灯 L2亮 。
其中, L1和 L2分别受 Q0.0和 Q0.1控制, 数值 1000
和 5000分别存储在 VW20和 VW30字存储单元中 。
本控制系统的程序如图 4.23所示 。 程序执行时序
如图 4.24所示 。
第 4章 基本指令
图 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章 基本指令
图 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章 基本指令
4.2 运算指令
4.2.1 加法
4.2.2 减法
4.2.3 乘法
4.2.4 除法
4.2.5 数学函数指令
4.2.6 增减
4.2.7 逻辑运算
返回本章首页
第 4章 基本指令
4.2.1 加法
1,整数加法
+I,整数加法指令 。 使能输入有效时, 将两个单
字长 ( 16位 ) 的符号整数 IN1和 IN2相加, 产生一
个 16位整数结果 OUT。
第 4章 基本指令
LD I0, 0 // 使能输入端
+I V W 0,V W 4
// 整数加法
/ / V W 0 + V W 4 = V W 4
图 4.25 整数加法例
第 4章 基本指令
2,双整数加法
+D,双整数加法指令 。 使能输入有效时, 将两个双字长 ( 32位 ) 的
符号双整数 IN1和 IN2相加, 产生一个 32位双整数结果 OUT。
在 LAD和 FBD中, 以指令盒形式编程, 执行结果,IN1+IN2=OUT。
在 STL中, 执行结果,IN1+OUT=OUT。
OUT的寻址范围,VD,ID,QD,MD,SD,SMD,LD,AC、
*VD,*AC,*LD。
指令格式,+D IN1,OUT
例,+D VD0,VD4
第 4章 基本指令
+R,实数加法指令 。 使能输入有效时, 将两个双字长 ( 32位 ) 的实
数 IN1和 IN2相加, 产生一个 32位实数结果 OUT。
在 LAD和 FBD中, 以指令盒形式编程, 执行结果,IN1+IN2=OUT。
OUT的寻址范围,VD,ID,QD,MD,SD,SMD,LD,AC、
*VD,*AC,*LD。
本指令影响的特殊存储器位,SM1.0( 零 ) ; SM1.1( 溢出 ) ;
SM1.2( 负 ) 。
返回本节
第 4章 基本指令
4.2.2 减法
减法指令是对有符号数进行相减操作 。 包括:整
数减法, 双整数减法和实数减法 。 这三种减法指
令与所对应的加法指令除运算法则不同之外, 其
他方面基本相同 。
第 4章 基本指令
在 LAD和 FBD中, 以指令盒形式编程, 执行结果,IN1-IN2=OUT。
在 STL中, 执行结果,OUT- IN2=OUT。
指令格式,-I IN2,OUT ( 整数减法 )
-D IN2,OUT ( 双整数减法 )
-R IN2,OUT ( 实数减法 )
例,-I AC0,VW4
返回本节
第 4章 基本指令
4.2.3 乘法
*I,整数乘法指令 。 使能输入有
效时, 将两个单字长 ( 16位 ) 的
符号整数 IN1和 IN2相乘, 产生一
个 16位整数结果 OUT。
指令格式,*I IN1,OUT
例,*I VW0,AC0
1,整数乘法
第 4章 基本指令
2,完全整数乘法
MUL,完全整数乘法指令。使能输入有效时,将两个单
字长( 16位)的符号整数 IN1和 IN2相乘,产生一个 32位
双整数结果 OUT。
在 LAD和 FBD中,以指令盒形式编程,执行结果:
IN1*IN2=OUT。
OUT的寻址范围,VD,ID,QD,MD,SD,SMD,LD、
AC,*VD,*AC,*LD。
本指令影响的特殊存储器位,SM1.0( 零 ) ; SM1.1( 溢
出 ) ; SM1.2( 负 ) ; SM1.3( 被 0除 ) 。
指令格式,MUL IN1,OUT
例,MUL AC0,VD10
第 4章 基本指令
3,双整数乘法
*D,双整数乘法指令。使能输入有效时,将两个双字长
( 32位)的符号整数 IN1和 IN2相乘,产生一个 32位双整
数结果 OUT。
在 STL中, 执行结果,IN1*OUT=OUT。
IN1和 IN2的寻址范围,VD,ID,QD,MD,SD,SMD、
LD,HC,AC,*VD,*AC,*LD和常数 。
OUT的寻址范围,VD,ID,QD,MD,SD,SMD,LD、
AC,*VD,*AC,*LD。
本指令影响的特殊存储器位,SM1.0( 零 ) ; SM1.1( 溢
出 ) ; SM1.2( 负 ) ; SM1.3( 被 0除 ) 。
指令格式,*D IN1,OUT
例,*D VD0,AC0
第 4章 基本指令
4,实数乘法
*R,实数乘法指令 。 使能输入有效时, 将两个双字长 ( 32位 )
的实数 IN1和 IN2相乘, 产生一个 32位实数结果 OUT。
在 LAD 和 FBD 中, 以 指 令 盒 形 式 编 程, 执 行 结 果,
IN1*IN2=OUT。
在 STL中, 执行结果,IN1*OUT=OUT。
IN1和 IN2的寻址范围,VD,ID,QD,MD,SD,SMD,LD、
AC,*VD,*AC,*LD和常数 。
OUT的寻址范围,VD,ID,QD,MD,SD,SMD,LD,AC、
*VD,*AC,*LD。
本指令影响的特殊存储器位,SM1.0( 零 ) ; SM1.1( 溢出 ) ;
SM1.2( 负 ) ; SM1.3( 被 0除 ) 。
指令格式,*R IN1,OUT
例,*R VD0,AC0
返回本节
第 4章 基本指令
4.2.4 除法
在 LAD和 FBD中, 以指令盒形式编程, 执行结果,IN1/IN2=OUT。
在 STL中, 执行结果,OUT/ IN2=OUT。
指令格式,/I IN2,OUT ( 整数除法 )
DIV IN2,OUT ( 整数完全除法 )
/D IN2,OUT ( 双整数除法 )
/R IN2,OUT ( 实数除法 )
第 4章 基本指令
例,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 除法指令应用
第 4章 基本指令
对于除法指令:
对于完全除法指令:
返回本节
第 4章 基本指令
4.2.5 数学函数指令
1,平方根
2,自然对数
3,指数
4,正弦、余弦、正切
第 4章 基本指令
1,平方根
SQRT,平方根指令 。 把一个双字长 ( 32位 ) 的实数
IN开平方, 得到 32位的实数结果 。
在 LAD和 FBD中, 以指令盒形式编程, 执行结果:
SQRT(IN)=OUT。
在 STL中, 执行结果,SQRT(IN)=OUT。
本指令影响的特殊存储器位,SM1.0( 零 ) ; SM1.1
( 溢出和非法值 ) ; SM1.2( 负 ) 。
使能流输出 ENO断开的出错条件,SM1.1( 溢出 ) ;
SM4.3( 运行时间 ) ; 0006( 间接寻址 ) 。
指令格式,SQRT IN,OUT
例,SQRT VD0,AC0
第 4章 基本指令
2,自然对数
LN,自然对数指
令 。 将一个双字
长 ( 32 位 ) 的实
数 IN取自然对数,
得到 32 位的实数
结果 。
应用实例:
求以 10为底的 50
( 存于 VD0) 的常
用对数, 结果放
到 AC0。
本运算程序如图
4.27所示 。
LD I0, 0 // 使能输入
LN V D 0,A C0 //
// 自然对数
// L n (V D 0 )= A C0
LN 1 0, 0,V D 1 0 0 //
// 自然对数
// L n (1 0 )= V D 1 0 0
/R V D 1 0 0,A C0 //
// 实数除法指令
// A C0 / V D 1 0 0 = V D 1 0 0
图 4.27 自然对数的应用
第 4章 基本指令
3,指数
EXP,指数指令。将一个双字长
( 32位)的实数 IN取以 e为底的指
数,得到 32位的实数结果 OUT。
在 LAD和 FBD中,以指令盒形式编
程,执行结果,EXP(IN)=OUT。
在 STL中,执行结果:
EXP(IN)=OUT。
指令格式,EXP IN,OUT
例,EXP VD0,AC0
第 4章 基本指令
4,正弦、余弦、正切
SIN,COS,TAN,即正弦, 余弦, 正切指令 。 将一个双
字长 ( 32位 ) 的实数弧度值 IN分别取正弦, 余弦, 正切,
各得到 32位的实数结果 。
如果已知输入值为角度, 要先将角度值转化为弧度值,
方法:使用 ( *R) MUL_R指令用角度值乘以 π/180° 即
可 。
第 4章 基本指令
例,TAN VD0,AC0
应用实例:求 COS160o的值 。 如图 4.28所示 。
LD I0, 0 // 使能输入
M O V R 3, 1 4 1 5 9,A C0 //
// π 装入 A C0
/R 1 8 0, 0,A C0 //
// 得 π /180 弧度
//
*R 1 6 0, 0,A C0 //
// 角度转化为弧度
//
CO S A C0,A C1 //
// 求余弦指令
// 结果存放到 A C1
图 4.28 三角函数应用例
返回本节
第 4章 基本指令
4.2.6 增减
1,字节增和字节减
2,字增和字减
3,双字增和双字减
4,应用实例
第 4章 基本指令
1,字节增和字节减
INCB,字节增指令 。 使能输入有效时, 把一字节长的无
符号输入数 ( IN) 加 1,得到一
字节的无符号输出结果 OUT。
DECB,字节减指令 。 使能输入有效时, 把一字节长的无
符号输入数 ( IN) 减 1,得到一字节的无符号输出结果
OUT。
第 4章 基本指令
2,字增和字减
第 4章 基本指令
3,双字增和双字减
INCD,双字增指令 。 使能输入有效时, 把双字长 ( 32位 )
的有符号输入数 ( IN) 加 1,得到双字长的有符号输出结
果 OUT。
DECD,双字减指令 。 使能输入有效时, 把双字长的有符
号输入数 ( IN) 减 1,得到双字长的有符号输出结果 OUT。
第 4章 基本指令
4,应用实例
控制要求:
食品加工厂对饮
料生产线上的盒
装饮料进行计数,
每 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 增减指令的应用
返回本节
第 4章 基本指令
4.2.7 逻辑运算
1,字节逻辑运算
2,字逻辑运算
3,双字逻辑运算
第 4章 基本指令
1,字节逻辑运算
字节逻辑运算包括字节与, 字节或, 字节异或,
字节取反 。
第 4章 基本指令
2,字逻辑运算
字节逻辑运算包括字节与, 字节或, 字节异或,
字节取反 。
第 4章 基本指令
3,双字逻辑运算
字逻辑运算包括双字与、双字或、双字异或、双
字取反。
返回本节
第 4章 基本指令
4.3 其他数据处理指令
4.3.1 传送类指令
4.3.2 移位指令
4.3.3 字节交换指令
4.3.4 填充指令
返回本章首页
第 4章 基本指令
4.3.1 传送类指令
1,单一传送
( 1) MOVB,字节传送指令
( 2) BIR,传送字节立即读指令
( 3) BIW,传送字节立即写指令
( 4) MOVW,字传送指令
( 5) MOVD,双字传送指令
( 6) MOVR,实数传送指令
2,块传送
( 1) BMB,字节块传送指令
( 2) BMW,字块传送指令
( 3) BMD,双字块传送指令
第 4章 基本指令
1,单一传送
( 1) MOVB,字节传送指令
使能输入有效时, 把一个单字节无符号数
据由 IN传送到 OUT所指的字节存储单元 。
IN的寻址范围,VB,IB,QB,MB,SB、
SMB,LB,AC,*VD,*AC,*LD和常
数 。
OUT的寻址范围,VB,IB,QB,MB、
SB,SMB,LB,AC,*VD,*AC,*LD。
指令格式,MOVB IN1,OUT
例,MOVB VB0,QB0
第 4章 基本指令
( 2) BIR,传送字节立即读指令
使能输入有效时, 立即读取单字
节物理输入区数据 IN,并传送到
OUT所指的字节存储单元 。
IN的寻址范围,IB
OUT的寻址范围,VB,IB,QB、
MB,SB,SMB,LB,AC,*VD、
*AC,*LD。
指令格式,BIR IN1,OUT
例,BIR IB0,VB10
第 4章 基本指令
2,块传送
指令可用来进行一次多个(最多 255个)数据的传送,
数据块类型可以是字节块、字块、双字块。
三条指令中 N的寻址范围都是,VB,IB,QB,MB、
SB,SMB,LB,AC,*VD,*AC,*LD和常数。
使 ENO断开的出错条件,SM4.3(运行时间); 0006
(间接寻址); 0091(数超界)。
返回本节
第 4章 基本指令
4.3.2 移位指令
1,左移和右移
2,循环左移、循环右移
3,寄存器移位
第 4章 基本指令
( 1) 字节左移和字节右移
SLB和 SRB,字节左移和字节右移 。 使能输入有效时, 把
字节型输入数据 IN左移或右移 N位后, 再将结果输出到
OUT所指的字节存储单元 。 最大实际可移位次数为 8。
1,左移和右移
第 4章 基本指令
以第一条指令为例, 指令执行情况如表 4.16所示 。
表 4.16 指令 SLB执行结果
第 4章 基本指令
SLW和 SRW,字左移和字右移 。 指令盒与字节
移位比较, 只有名称变为 SHR_W和 SHR_W。 使
能输入有效时, 把字型输入数据 IN左移或右移 N
位后, 再将结果输出到 OUT所指的字存储单元 。
最大实际可移位次数为 16。
指令格式,SLW OUT,N ( 字左移 )
SRW OUT,N ( 字右移 )
例,SLW MW0,2
SRW LW0,3
以第二条指令为例, 指令执行情况如表 4.17所示 。
第 4章 基本指令
第 4章 基本指令
( 3) 双字左移和双字右移
SLD和 SRD,双字左移和双字右移 。 指令盒与字节移位比
较, 只有名称变为 SHL_DW和 SHR_DW,其他部分完全
相同 。 使能输入有效时, 把双字型输入数据 IN左移或右
移 N位后, 再将结果输出到 OUT所指的双字存储单元 。 最
大实际可移位次数为 32。
指令格式,SLD OUT,N ( 双字左移 )
SRD OUT,N ( 双字右移 )
例,SLD MD0,2
SRD LD0,3
第 4章 基本指令
2,循环左移、循环右移
循环左移和循环右移根据所循环移位的数的长度分别又可
分为字节型、字型、双字型。
循环移位特点:
移位数据存储单元的移出端与另一端相连,同时又与
SM1.1(溢出)相连,所以最后被移出的位被移到另一端
的同时,也被放到 SM1.1位存储单元。例如在循环右移时,
移位数据的最右端位移入最左端,同时又进入 SM1.1。
SM1.1始终存放最后一次被移出的位。
第 4章 基本指令
循环移位 的类型
( 1)字节循环左移和字节循环右移
( 2)字循环左移和字循环右移
( 3)双字循环左移和双字循环右移
表 4.18 指令 RRW执行结果
第 4章 基本指令
SHRB,寄存器移位指令 。
该指令在梯形图中有 3个数据输入端:
DATA为数值输入, 将该位的值移入移
位寄存器; S_BIT为移位寄存器的最低位
端; N指定移位寄存器的长度 。 每次使能
输入有效时, 整个移位寄存器移动 1位 。
移位特点:
移位寄存器长度在指令中指定, 没有字
节型, 字型, 双字型之分 。 可指定的最
大长度为 64位, 可正也可负 。
3,寄存器移位
第 4章 基本指令
表 4.19 指令 SHRB执行结果
返回本节
第 4章 基本指令
4.3.3 字节交换指令
SWAP,字节交换指令 。 使能输入有效时, 将字型输入数据 IN的高
字节和低字节进行交换 。
本指令只对字型数据进行处理, 指令的执行不影响的特殊存储器位 。
使能流输出 ENO断开的出错条件,SM4.3( 运行时间 ) ; 0006( 间接
寻址 ) 。
指令格式,SWAP IN ( 字节交换 )
例,SWAP VW10
以第本指令为例, 指令执行情况如表 4.20所示 。
返回本节
第 4章 基本指令
4.3.4 填充指令
FILL,存储器填充指令 。 使能输入有效时, 用字型
输入数据 IN填充从输出 OUT所指的单元开始的 N个字
存储单元 。
填充指令只对字型数据进行处理, N值为字节型, 可
取从 1~255的整数 。 指令的执行不影响的特殊存储器
位 。
使能流输出 ENO断开的出错条件,SM4.3( 运行时
间 ) ; 0006( 间接寻址 ) ; 0091( 操作数超界 ) 。
指令格式,FILL IN,OUT,N ( 填充指令 )
例,FILL 10,VW100,12
本条指令的执行结果是:将数据 10填充到从 VW100
到 VW122共 12个字存储单元 。
返回本节
第 4章 基本指令
4.4 表功能指令
4.4.1 表存数指令
4.4.2 表取数指令
4.4.3 表查找指令
返回本章首页
第 4章 基本指令
表只对字型数据存储,表的格式例如表 4.21所示。
第 4章 基本指令
4.4.1 表存数指令
ATT,表存数指令 。
该指令在梯形图中有 2个数据输入端,DATA为数
值输入, 指出将被存储的字型数据或其地址;
TBL表格的首地址, 用以指明被访问的表格 。 当
使能输入有效时, 将输入字型数据添加到指定的
表格中 。
表存数特点:
表存数时, 新存的数据添加在表中最后一个数据
的后面 。 每向表中存一个数据, 实际填表数 EC会
自动加 1。
第 4章 基本指令
表 4.22 指令 ATT执行结果
返回本节
第 4章 基本指令
4.4.2 表取数指令
1,FIFO,先进先出指令
2,LIFO,后进先出指令
第 4章 基本指令
1,FIFO,先进先出指令
当使能输入有效时, 从 TBL指明的表中移
出第一个字型数据并将其输出到 DATA所
指定的字单元 。
FIFO表取数特点:
取数时, 移出的数据总是最先进入表中的
数据 。 每次从表中移出一个数据, 剩余数
据依次上移一个字单元位置, 同时实际填
表数 EC会自动减 1。
指令格式,FIFO TBL,DATA
例,FIFO VW100,AC0
如果仍是对表 4.21存取,则指令执行情况
如表 4.23所示。
第 4章 基本指令
表 4.23 指令 FIFO执行结果
第 4章 基本指令
2,LIFO,后进先出指令
当使能输入有效时, 从 TBL指明的表中移
出最后一个字型数据并将其输出到 DATA
所指定的字单元 。
LIFO表取数特点:
取数时, 移出的数据是最后进入表中的数
据 。 每次从表中取出一个数据, 剩余数据
位置保持不变, 实际填表数 EC会自动减 1。
指令格式,LIFO TBL,DATA
例,LIFO VW100,AC0
如果仍是对表 4.21存取, 则指令执行情况
如表 4.24所示 。
第 4章 基本指令
表 4.24 指令 LIFO执行结果
返回本节
第 4章 基本指令
4.4.3 表查找指令
FND?,表查找指令 。 通过表查找指令可以
从字型数表中找出符合条件的数据所在的
表中数据编号, 编号范围为 0~99。
在梯形图中有 4个数据输入端,TBL表格的
首地址, 用以指明被访问的表格; PTN是
用来描述查表条件时进行比较的数据;
CMD是比较运算符,?, 的编码, 它是一
个 1~4的数值, 分别代表 =,<>,<和 >运算
符; INDX用来指定表中符合查找条件的数
据的地址 。
第 4章 基本指令
表 4.25 表查找指令执行结果
返回本节
第 4章 基本指令
4.5 转换指令
4.5.1 数据类型转换
4.5.2 编码和译码
4.5.3 七段码
4.5.4 字符串转换
返回本章首页
第 4章 基本指令
4.5.1 数据类型转换
1,字节与整数
( 1) 字节到整数
( 2) 整数到字节
2,整数与双整数
( 1)双整数到整数
( 2)整数到双整数
3,双整数与实数
( 1)实数到双整数
( 2)双整数到实数
4,整数与 BCD码
( 1) BCD码到整数
( 2)整数到 BCD码
5,程序实例
第 4章 基本指令
1,字节与整数
( 1) 字节到整数
BTI,字节转换为整数指令 。 使能输入有效时,
将字节输入数据 IN转换成整数类型, 并将结果送
到 OUT输出 。 字节型是无符号的, 所以没有符号
扩展 。
使能流输出 ENO断开的出错条件,SM4.3( 运行
时间 ) ; 0006( 间接寻址 ) 。
指令格式,BTI IN,OUT
例,BTI VB0,AC0
第 4章 基本指令
( 2) 整数到字节
ITB,整数转换字节指令 。 使能输入有效时, 将整数输入
数据 IN转换成字节类型, 并将结果送到 OUT输出 。 输入
数据超出字节范围 ( 0~255) 则产生溢出 。
移位指令影响的特殊存储器位,SM1.1( 溢出 ) 。
使能流输出 ENO断开的出错条件,SM1.1( 溢出 ) ;
SM4.3( 运行时间 ) ; 0006( 间接寻址 ) 。
指令格式,ITB IN,OUT
例,ITB AC0,VB10
第 4章 基本指令
2,整数与双整数
( 1) 双整数到整数
DTI,双整数转换为整数指令 。 使能输入有效时, 将双整
数输入数据 IN转换成整数类型, 并将结果送到 OUT输出 。
输入数据超出整数范围则产生溢出 。
移位指令影响的特殊存储器位,SM1.1( 溢出 ) 。
使能流输出 ENO断开的出错条件,SM1.1( 溢出 ) ;
SM4.3( 运行时间 ) ; 0006( 间接寻址 ) 。
指令格式,DTI IN,OUT
例,DTI AC0,VW20
第 4章 基本指令
( 2) 整数到双整数
ITD,整数转换为双整数指令 。 使能输入有效时,
将整数输入数据 IN转换成双整数类型 ( 符号进行
扩展 ), 并将结果送到 OUT输出 。
使能流输出 ENO断开的出错条件,SM4.3( 运行
时间 ) ; 0006( 间接寻址 ) 。
指令格式,ITD IN,OUT
例,ITD VW0,AC0
第 4章 基本指令
3,双整数与实数
( 1) 实数到双整数
第 4章 基本指令
( 2) 双整数到实数
DTR,双整数转换实数指令 。 使能输入有效时,
将双整数输入数据 IN转换成实型, 并将结果送到
OUT输出 。
使能流输出 ENO断开的出错条件,SM4.3(运行
时间); 0006(间接寻址)。
指令格式,DTR IN,OUT
例,DTR AC0,VD100
第 4章 基本指令
4,整数与 BCD码
( 1) BCD码到整数
BCDI,BCD码转换为整数指令 。
使能输入有效时, 将 BCD码输入
数据 IN转换成整数类型, 并将结
果送到 OUT输出 。 输入数据 IN
的范围为 0~9999。
指令格式,BCDI OUT
例,BCDI AC0
第 4章 基本指令
( 2) 整数到 BCD码
IBCD,整数转换为 BCD码指令 。
使能输入有效时, 将整数输入数据
IN转换成 BCD码类型, 并将结果
送到 OUT输出 。 输入数据 IN的范
围为 0~9999。
指令格式,IBCD OUT
例,IBCD AC0
第 4章 基本指令
5,程序实例
功能:
模拟量控制程序中
的数据类型转换 。
将模拟量输入端采
样值由整数转换为
双整数, 然后由双
整数转换为实数,
再除以一个比例因
子得到 PLC可以处
理的范围内的值 。
程序实现:
本程序如图 4.30 所
示 。
LD S M 0, 0 // 使能输入
IT D A IW 2,A C0 //
// 整数转换为双整数
//
D T R A C0,A C0 //
// 双整数转换为实数
//
/R 3 2 7 6 8, 0,A C0 //
// 实数除法指令
// A C0 / 3 2 7 6 8 = V D 1 0 0
M O V R A C0,V D 2 0 0 //
// 实数传送指令
返回本节
第 4章 基本指令
4.5.2 编码和译码
1,编码
ENCO,编码指令 。 使能输入有效时, 将字型输
入数据 IN的最低有效位 ( 值为 1的位 ) 的位号输
出到 OUT所指定的字节单元的低 4位 。 即用半个
字节来对一个字型数据 16位中的 1位有效位进行
编码 。
使能流输出 ENO断开的出错条件,SM4.3( 运行
时间 ) ; 0006( 间接寻址 ) 。
指令格式,ENCO IN,OUT
例,ENCO AC0,VB0
第 4章 基本指令
以本指令为例, 指令执行情况如表 4.26所示 。
表 4.26 编码指令执行结果
第 4章 基本指令
2,译码
DECO,译码指令 。 使能输入有效时, 将字节型输入数据
IN的低 4位所表示的位号对 OUT所指定的字单元的对应位
置 1,其他位置 0。 即对半个字节的编码进行译码来选择
一个字型数据 16位中的 1位 。
使能流输出 ENO断开的出错条件,SM4.3( 运行时间 ) ;
0006( 间接寻址 ) 。
指令格式,DECO IN,OUT
例,DECO VB0,AC0
本指令执行情况如表 4.27所示 。
第 4章 基本指令
返回本节
第 4章 基本指令
4.5.3 七段码
SEG,七段码指令 。 使能输入有效时, 将字节型
输入数据 IN的低 4位有效数字产生相应的七段码,
并将其输出到 OUT所指定的字节单元 。
返回本节
第 4章 基本指令
4.5.4 字符串转换
1,指令种类
( 1) ASCII码转换 16进制指令
( 2) 16进制到 ASCII码
( 3) 整数到 ASCII码
( 4) 双整数到 ASCII码
( 5) 实数到 ASCII码
第 4章 基本指令
2,指令介绍
下面仅以 ASCII码转换 16进制指令为例说明字符
串与其他数据类型之间的转换 。
ATH,ASCII码转换 16进制指令 。 指令盒中有 3
个操作数,IN,开始字符的字节地址, 字节类型;
LEN,字符串的长度, 字节类型, 最大长度为
255; OUT,输出目的开始字节地址, 字节类型 。
使能输入有效时, 把从 IN开始的长度为 LEN的
ASCII码转换为 16进制数, 并将结果送到 OUT开
始的字节进行输出 。
第 4章 基本指令
3,程序实例
以上面的指令为例, 条指令的执行结果如表 4.28
所示, 程序如图 4.31所示 。
表 4.28 指令 ATH执行结果
第 4章 基本指令
LD I2, 0 // 使能输入
A T H V B 1 0 0,V B 2 0 0,3 //
// 从 V B 1 0 0 开始的
// 3 个字符转换为
// 16 进制数值
LD I2, 1 //
M O V W V W 2 0 0,A C 0 //
// 字传送指令
// 结果输出到 A C 0
图 4.31 字符串转换
返回本节