第三章 FP1的指令系统 第一节 概述.

Slides:



Advertisements
Similar presentations
因数与倍数 2 、 5 的倍数的特征
Advertisements

2 和 5 的倍数的特征 运动热身 怎样找一个数的倍数? 从小到大写出 2 的倍数( 10 个): 写出 5 的倍数( 6 个) 2 , 4 , 6 , 8 , 10 , 12 , 14 , 16 , 18 , 20 5 , 10 , 15 , 20 , 25 , 30.
2.8 函数的微分 1 微分的定义 2 微分的几何意义 3 微分公式与微分运算法则 4 微分在近似计算中的应用.
第四单元 100 以内数的认识
练一练: 在数轴上画出表示下列各数的点, 并指出这些点相互间的关系: -6 , 6 , -3 , 3 , -1.5, 1.5.
实验四 利用中规模芯片设计时序电路(二).
C语言实验 第一课 标题:学号+姓名.
可编程序控制器 (FP1型PLC) 清华大学电机系电工学教研室 唐庆玉 编 海南风光.
在PHP和MYSQL中实现完美的中文显示
第4章 指令系统 4.1 概述 4.2 基本指令 4.3 常用的应用指令 4.4 数据传送和比较指令 4.5 数据移位和数据转换指令 4.6
功能指令 第一节 功能指令的基本知识 第二节 程序流控制(FNC00~FNC09) 第三节 传送和比较指令(FNC10~FNC19)
走进编程 程序的顺序结构(二).
辅导课程六.
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
第十章 IDL访问数据库 10.1 数据库与数据库访问 1、数据库 数据库中数据的组织由低到高分为四级:字段、记录、表、数据库四种。
实验四 组合逻辑电路的设计与测试 一.实验目的 1.掌握组合逻辑电路的设计 方法 2.学会对组合逻辑电路的测 试方法.
时序逻辑电路实验 一、 实验目的 1.熟悉集成计数器的功能和使用方法; 2.利用集成计数器设计任意进制计数器。 二、实验原理
第二章 Java语言基础.
逆向工程-汇编语言
CPU结构和功能.
用event class 从input的root文件中,由DmpDataBuffer::ReadObject读取数据的问题
第六章 松下电工PLC编程工具及三维力控监控组态软件简介
第一章 函数与极限.
第4章 PHP流程控制语句.
计算.
C语言程序设计 主讲教师:陆幼利.
简单介绍 用C++实现简单的模板数据结构 ArrayList(数组, 类似std::vector)
学习目标 1、什么是字符集 2、字符集四个级别 3、如何选择字符集.
工业机器人技术基础及应用 主讲人:顾老师
模块6 S7-200 PLC基本逻辑指令 项目 6.2 电动机Y-减压起动控制设计 项目 6.2 电动机Y-减压起动控制设计
线段的有关计算.
第四章 MCS-51定时器/计数器 一、定时器结构 1.定时器结构框图
线 性 代 数 厦门大学线性代数教学组 2019年4月24日6时8分 / 45.
第9章 位 运 算.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月13日.
工业机器人知识要点解析 (ABB机器人) 主讲人:王老师
<编程达人入门课程> 本节内容 内存的使用 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群: ,
成绩是怎么算出来的? 16级第一学期半期考试成绩 班级 姓名 语文 数学 英语 政治 历史 地理 物理 化学 生物 总分 1 张三1 115
第4章 Excel电子表格制作软件 4.4 函数(一).
组合逻辑电路 ——中规模组合逻辑集成电路.
实验三 16位算术逻辑运算实验 不带进位控制的算术运算 置AR=1: 设置开关CN 1 不带进位 0 带进位运算;
第 13 章 触发器和时序逻辑电路 13.1 双稳态触发器 13.2 寄存器 13.3 计数器 定时器及其应用.
第九节 赋值运算符和赋值表达式.
iSIGHT 基本培训 使用 Excel的栅栏问题
长春理工大学 电工电子实验教学中心 数字电路实验 数字电路实验室.
实验二 带进位控制8位算术逻辑运算实验 带进位控制8位算术逻辑运算: ① 带进位运算 ② 保存运算后产生进位
§6.7 子空间的直和 一、直和的定义 二、直和的判定 三、多个子空间的直和.
可编程序控制器 (FP1型PLC) 清华大学电机系电工学教研室 唐庆玉 编 海南风光.
College of Computer Science & Technology
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
HSC高速输出例程 HORNER APG.
3 可编程控制器及其应用 可编程控制器是以中央处理器为核心,综合计算机和自动控制等先进技术而发展起来的一种工业控制器。
6.1 定时器/计数器的结构及工作原理 定时器/计数器的结构 定时器/计数器T0、T1的逻辑结构如图6-1所示。
3. 逻辑运算指令 A、简单逻辑操作指令 CLR A. (不影响CY、AC、 OV标志) CPL A
工业机器人知识要点解析 (ABB机器人) 主讲人:王老师
实验目的:掌握数据的顺序存储结构及它们在计算机中的操作。 实验内容:
第六章 Excel的应用 五、EXCEL的数据库功能 1、Excel的数据库及其结构 2、Excel下的数据排序 (1)Excel的字段名行
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
循环程序设计 在程序中包含重复执行的程序段称为循环程序设计。循环程序可以使程序结构性强、可读性好,从而大大提高了程序质量。
信号发生电路 -非正弦波发生电路.
第四节 向量的乘积 一、两向量的数量积 二、两向量的向量积.
数据表示 第 2 讲.
第8章 创建与使用图块 将一个或多个单一的实体对象整合为一个对象,这个对象就是图块。图块中的各实体可以具有各自的图层、线性、颜色等特征。在应用时,图块作为一个独立的、完整的对象进行操作,可以根据需要按一定比例和角度将图块插入到需要的位置。 2019/6/30.
微机原理与接口技术 西安邮电大学计算机学院 董 梁.
上节复习(11.7) 1、定时/计数器的基本原理? 2、定时/计数器的结构组成? 3、定时/计数器的控制关系?
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
第九章 存储器和可编程逻辑器件 本章主要内容 半导体存储器 只读存储器 随机存取存储器 存储器容量的扩展 可编程逻辑器件
第9章 位 运 算.
第四章 基本指令 要求: 熟练掌握基本逻辑指令及应用。 掌握梯形图编程规则。.
学习目标 1、什么是列类型 2、列类型之数值类型.
Presentation transcript:

第三章 FP1的指令系统 第一节 概述

一、继电器系统与PLC指令系统 可编程控制器来源于继电器系统和计算机系统,可以将其理解为计算机化的继电器系统。继电器在控制系统中主要起两种作用: 1)逻辑运算。运用继电器触点的串、并联接等完成逻辑与、或、非等功能,因而可完成较复杂的逻辑运算。 2)弱电控制强电。即通过有关的触点的通断,控制继电器的电磁线圈,从而来控制强电的断通。 对于简单控制功能的完成,采用继电器控制系统具有简单、可靠、方便等特点,因此,继电器控制系统得到了广泛应用。

注意: PLC内部的硬件资源多数是以继电器的概念出现的。注意,只是概念上的继电器,并非物理继电器。这里所指的继电器均为软继电器,是由PLC内部的存储单元构成的。

二、FP1指令系统分类 表3-1 FP1系列可编程控制器指令统计表 分类名称 C14/C16 C24/C40 C56/C72 基本指令 顺序指令 19 功能指令 7 8 控制指令 15 18 条件比较指令 36 高级指令 数据传输指令 11 1l 数据运算及比较指令 41 数据转换指令 16 26 数据位移指令 14 位操作指令 6 特殊功能指令 总计 131 196 198

FP1的指令按照功能可分为两大类 基本指令 高级指令 按照在手持编程器上的输入方式可为三种 键盘指令。可以直接在键盘上输入的指令(即各种指令在手持编程器上有相应的按键)。 非键盘指令。键盘上找不到,输入时需借助于“SC”和“HELP”键,指令方可输入。 扩展功能指令。也是键盘上找不到的,但可通过输入其功能号将其输入,即用“FN”键加上数字键输入该类指令。这类指令在指令表中都各自带有功能编号,在显示器上显示为“FN ×××”,其中N是功能编号,×××是指令的助记符。输入功能编号后,助记符可自动显示,不必由用户输入。

第三章 FP1的指令系统 第二节 FP1的基本指令系统

基本指令可分为四大类,即 基本顺序指令:主要执行以位(bit)为单位的逻辑操作,是继电器控制电路的基础。 基本功能指令:有定时器、计数器和移位寄存器指令。 控制指令:可根据条件判断,来决定程序执行顺序和流程的指令。 比较指令:主要进行数据比较。 基本指令多数是构成继电器顺序控制电路的基础,所以借用继电器的线圈和触点来表示。同时,该类指令还是可编程控制器使用中最常见、也是用得最多的指令,因此,属于必须熟练掌握和运用的内容。

一、基本顺序指令 基本顺序指令主要是对继电器和继电器触点进行逻辑操作的指令。 FP1的指令表达式比较简单,由操作码和操作数构成,格式为: 地址 操作码 操作数 其中,操作码规定了CPU所执行的功能。 例如:AN X0,表示对X0进行与操作 操作数包含了操作数的地址、性质和内容。操作数可以没有,也可以是一个、两个、三个甚至四个,随不同的指令而不同。如 / 指令就没有操作数。

表中对应项目为“×”表示该项不可用,为空则表示可用。 例如:OT指令对应继电器X项为“×”,说明OT指令的操作数不能为X继电器。 表3-3 基本顺序指令的操作数 指令助记符 继电器 定时/计数器触点 X Y R T C ST、ST/ OT × AN、AN/ OR、OR/ SET、RST KP 表中对应项目为“×”表示该项不可用,为空则表示可用。 例如:OT指令对应继电器X项为“×”,说明OT指令的操作数不能为X继电器。

1. 输入输出指令:ST、ST/、OT ST 加载 用A类触点(常开触点)开始逻辑运算的指令。 ST/ 加载非 用B类触点(常闭触点)开始逻辑运算的指令。 OT 输出 输出运算结果到指定的输出端,是继电器线 圈的驱动指令。 / 非 将该指令处的运算结果取反。 其中,ST和ST/用于开始一个新的逻辑行。

例3-1

例题说明: 当X0接通时,Y0接通;当X0断开时,Y1接通、Y2接通。 由例中可见,Y0和Y1都受控于X0,但是因为Y1前面有非指令,因此与Y0的状态正好相反,这与继电器系统明显不同,在继电器系统中,X0断开,Y1回路就不可能导通。 此外,对于输出Y2,也是当输入触点X0断开时,Y2接通,与Y1的控制方式一样。可见,常闭触点的功能可以用上述两种方式实现,这在时序图中可以更为直观地看到。

注意事项 / 指令为逻辑取反指令,可单独使用,但是一般都是与其它指令组合形成新指令使用,如ST/。 OT不能直接从左母线开始,但是必须以右母线结束。 OT指令可以连续使用,构成并联输出,也属于分支的一种,可参见堆栈指令。 一般情况下,对于某个输出继电器只能用一次OT指令,否则,可编程控制器按照出错对待。

2. 逻辑操作指令:AN、AN/、OR、OR/ AN/ 与非 串联一个B类(常闭)触点。 OR 或 并联一个A类(常开)触点。 OR/ 或非 并联一个B类(常闭)触点。

例3-2

例题说明: 当X0、X4接通且X3断开时,R0接通;R0同时又是Y0的控制触点,R0接通时Y0也接通。 由于X0、X1和X2三个触点并联,X2与X0同为常开触点,所以X2和X0具有同样的性质;而X1为常闭触点,与X0的性质正好相反。X2和X1的时序图也与X0相同或相反,故这里略去。 注意事项 AN、AN/、OR、OR/ 可连续使用。

3. 块逻辑操作指令:ANS、ORS ANS 组与 执行多指令块的与操作,即实现多个逻辑块相串联。 ORS 组或 执行多指令块的或操作,即实现多个逻辑块相并联。

例3-3

例题说明: 从时序图上看,该例的逻辑关系显得比较复杂,但是仔细分析就可发现Y0有四个接通段,分别代表了该例子的四种有效组合。 当X0、X1接通且X4接通时,Y0接通,对应图中第1段接通情况。 当X0、X1接通且X5接通时,Y0接通,对应图中第2段接通情况。 当X2、X3接通且X4接通时,Y0接通,对应图中第3段接通情况。 当X2、X3接通且X5接通时,Y0接通,对应图中第4段接通情况。

注意事项 掌握ANS、ORS的关键主要有两点:一是要理解好串、并联关系,二是要形成块的观念。针对例3-3,在下面的图中,分别从程序和逻辑关系表达式两方面对此加以具体说明。 从图中可见,X0和X1串联后组成逻辑块1,X2和X3串联后组成逻辑块2,用ORS将逻辑块1和逻辑块2并联起来,组合成为逻辑块3;然后由X4和X5并联后组成逻辑块4,再用ANS将逻辑块3和逻辑块4串联起来,组合成为逻辑块5,结果输出给Y0。

4. 堆栈指令:PSHS、RDS、POPS PSHS 推入堆栈 存储该指令处的操作结果。 RDS 读取堆栈 读出PSHS指令存储的操作结果。 POPS 弹出堆栈 读出并清除由PSHS指令存储的操作结果。 堆栈指令主要用于构成具有分支结构的梯形图,使用时必须遵循规定的PSHS、RDS、POPS的先后顺序。

例3-4

例题说明: 当X0接通时,程序依次完成下述操作。 存储PSHS指令处的运算结果(这里指X0的状态),这时X0接通,则当X1也接通且X2断开时,Y0输出。 由RDS指令读出存储的结果,即X0接通,则当X3接通时,Y1输出。 由RDS指令读出存储的结果,即X0接通,则当X4断开时,Y2输出。 由POPS指令读出存储的结果,即X0接通,则当X5接通时,Y3输出;然后将PSHS指令存储的结果清除,即解除与X0的关联,后续指令的执行将不再受X0影响。 当X6接通时,Y4输出。此时与X0的状态不再相关。 本例中连用了两个RDS指令,目的是为了说明该指令只是读存储结果,而不影响存储结果;在执行了POPS后,就结束了堆栈指令,不再与X0的状态相关,如例中,Y4的状态只受X6控制。

注意事项 当程序中遇到PSHS时,可理解为是将左母线到PSHS指令(即分支点)之间的所有指令存储起来,推入堆栈,提供给下面的支路使用。换个角度,也可理解为左母线向右平移到分支点,随后的指令从平移后的左母线处开始。 RDS用于PSHS之后,这样,当每次遇到RDS时,该指令相当于将PSHS保存的指令重新调出,随后的指令表面上是接着RDS,实际上相当于接着堆栈中的指令来写。在功能上看,也就是相当于将堆栈中的那段梯形图与RDS后面的梯形图直接串联起来。 POPS相当于先执行RDS的功能,然后结束本次堆栈,因此,用在PSHS和RDS的后面,作为分支结构的最后一个分支回路。 从上面对构成堆栈的三个指令的分析可知,最简单的分支,即两个分支,可只由PSHS和POPS构成;而三个以上的分支,则通过反复调用RDS指令完成,这点可参见例题。也就是说,一组堆栈指令中,有且只有一个PSHS和一个POPS,但是可以没有或有多个RDS。 注意区分分支结构和并联输出结构梯形图。二者的本质区别在于:分支结构中,分支点与输出点之间串联有触点,而不单纯是输出线圈。 堆栈指令的复杂应用还包括嵌套使用。

5. 微分指令:DF、DF/ DF 上升沿微分 检测到触发信号上升沿,使触点接通一个扫描周期。 DF/ 下降沿微分 检测到触发信号下降沿,使触点接通一个扫描周期。

例3-5

例题说明: 当检测到触发信号的上升沿时,即X1断开、X2接通且X0由OFF→ON时,Y0接通一个扫描周期。另一种情况是X0接通、X2接通且X1由ON→OFF时,Y0也接通一个扫描周期,这是由于X1是常闭触点的缘故。 当检测到触发信号的下降沿时,即X2接通且X0由ON→OFF时,Y1接通一个扫描周期。

注意事项 DF和DF/ 指令的作用都是在控制条件满足的瞬间,触发后面的被控对象(触点或操作指令),使其接通一个扫描周期。这两条指令的区别在于:前者是当控制条件接通瞬间(上升沿)起作用,而后者是在控制条件断开瞬间(下降沿)起作用。这两个微分指令在实际程序中很有用,可用于控制那些只需触发执行一次的动作。在程序中,对微分指令的使用次数无限制。 这里所谓的“触发信号”,指的是DF或DF/前面指令的运算结果,而不是单纯的某个触点的状态,如例中X0与X1的组合;也不是后面的触点状态,如在时序图中的t1时刻,X0和X1都处于有效状态,X2的上升沿却不能使Y0接通。

6. 置位、复位指令:SET、RST SET 置位 保持触点接通,为ON。 RST 复位 保持触点断开,为OFF。

例3-6 例题说明: 该程序执行的结果是,当X0接通时,使Y0接通,此后不管X0是何状态,Y0一直保持接通。而当X1接通时,将Y0断开,此后不管X1是何状态,Y0一直保持断开。

7. 保持指令:KP KP 保持 使输出为ON,并保持。 KP指令的作用是将输出线圈接通并保持。该指令有两个控制条件,一个是置位条件(S)、另一个是复位条件(R)。当满足置位条件,输出继电器(Y或R)接通,一旦接通后,无论置位条件如何变化,该继电器仍然保持接通状态,直至复位条件满足时断开。 S端与R端相比,R端的优先权高,即如果两个信号同时接通,复位信号优先有效。

例3-7 例题说明: 注意事项 当X0接通时,Y0接通;当X1接通时,Y0断开,而不论X0状态如何。 该指令与SET、RST有些类似,另外,SET、RST允许输出重复使用,而KP指令则不允许。

8. 空操作指令:NOP NOP 空操作 空操作。 PLC执行NOP指令时,无任何操作,但是要消耗一定的时间。 当没有输入程序或进行清理内存操作时,程序存储器各单元均自动为空操作指令。 可用NOP作为查找时的特殊标记,人为插入若干个NOP指令,对程序进行分段,便于检查和修改。如程序中某一点插入的NOP指令的数量超出1个,编程系统会自动对其进行编号,因此,该指令常在调试程序时使用,此时,程序的大小有所增加,但是对运算结果没有影响。

二、基本功能指令 基本功能指令主要包括一些具有定时器、计数器和移位寄存器三种功能的指令。其中,定时和计数本质上是同一功能。根据指令功能分类,将高级指令中的可逆计数指令F118(UDC)、左右移位指令F119(LRSR)以及辅助定时器指令F137(STMR)也包括在内。 表3-5 基本功能指令的操作数 指令 助记符 可用寄存器 继电器 定时/ 计数器 寄存器 索引 常数 修正值 WX WY WR SV EV DT IX IY K H TM预置值 × CT预置值 SR

TMR 以0.01s为最小时间单位,设置延时接通的定时器。 TMX 以0.1s为最小时间单位,设置延时接通的定时器。 1.定时器指令:TM、F137(STMR) TMR 以0.01s为最小时间单位,设置延时接通的定时器。 TMX 以0.1s为最小时间单位,设置延时接通的定时器。 TMY 以1.0s为最小时间单位,设置延时接通的定时器。 定时器的工作原理为:定时器为减1计数。当程序进入运行状态后,输入触点接通瞬间定时器开始工作,先将设定值寄存器SV的内容装入过程值寄存器EV中,然后开始计数。每来一个时钟脉冲,过程值减1,直至EV中内容减为0时,该定时器各对应触点动作,即常开触点闭合、常闭触点断开。而当输入触点断开时,定时器复位,对应触点恢复原来状态,且EV清零,但SV不变。若在定时器未达到设定时间时断开其输入触点,则定时器停止计时,其过程值寄存器被清零,且定时器对应触点不动作,直至输入触点再接通,重新开始定时。

简单的说,当定时器的执行条件成立时,定时器以R、X、Y所规定的时间单位对预置值作减计数,预置值减为0时,定时器导通。其对应的常开触点闭合,常闭触点断开。

例3-8 例题说明: 当X0接通时,定时器开始定时,10秒后,定时时间到,定时器对应的常开触点T1接通,使输出继电器Y0导通为ON;当X0断开时,定时器复位,对应的常开触点T1断开,输出继电器Y0断开为OFF。

注意事项 1) TM指令是减法计数型预置定时器,参数有两个,一个是时间单位,即定时时钟,可分为3种,R=0.01s,X=0.1s,Y=1.0s;另一个是预置值,只能用十进制,编程格式为K加上十进制数,因此,取值范围可表示为K1 ~ K32767。这样,定时时间就可以根据上述两个参数直接计算出来,即 定时时间 = 时间单位×预置值 也正是由于这个原因,TM R1 K1000、TM X1 K100、TM Y1 K10这三条指令的延时时间是相同的,都是10秒,差别仅在于定时的时间精度不同。对于这个例子,由于只用到定时结果,采用上述任何一种写法都可以。 2) 定时器的设定值和过程值会自动存入相同编号的专用寄存器SV和EV中,因此可通过察看同一编号的SV和EV内容来监控该定时器的工作情况。采用不同的定时时钟会影响精度,也就是说,过程值EV的变化过程不同。

3) 同输出继电器的概念一样,定时器也包括线圈和触点两个部分,采用相同编号,但是线圈是用来设置,触点则是用于引用。因此,在同一个程序中,相同编号的定时器只能使用一次,即设置一次,而该定时器的触点可以通过常开或常闭触点的形式被多次引用。 4) 在FP1-C24中,初始定义有100个定时器,编号为T0 ~ T99,通过系统寄存器No.5可重新设置定时器的个数。 5) 由于定时器在定时过程中需持续接通,所以在程序中定时器的控制信号后面不能串联微分指令。 6) 在实际的PLC程序中,定时器的使用是非常灵活的,如将若干个定时器串联或是将定时器和计数器级联使用可扩大定时范围,或将两个定时器互锁使用可构成方波发生器,还可以在程序中利用高级指令F0(MV)直接在SV寄存器中写入预置值,从而实现可变定时时间控制。

F137(STMR) 以0.01s为最小时间单位设置延时接通的定时器。该定时器与TMR类似,但是设置方式上有所区别。下面举例说明。 例3-9 例题说明: 该例与上例中使用TMX实现的定时结果类似,但是当用R900D作为定时器的触点编程时,务必将R900D编写在紧随F137(STMR)指令之后。此外,这里的DT5起到与经过值寄存器EV类似的作用。

2.计数器指令:CT、F118(UDC) CT指令是一个减计数型的预置计数器。其工作原理为:程序一进入“运行”方式,计数器就自动进入初始状态,此时SV的值被自动装入EV,当计数器的计数输入端CP检测到一个脉冲上升沿时,预置值被减1,当预置值被减为0时,计数器接通,其相应的常开触点闭合,常闭触点断开。计数器的另一输入端为复位输入端R,当R端接收到一个脉冲上升沿时计数器复位,计数器不接通,其常开触点断开,常闭触点闭合;当R端接收到脉冲下降沿时,将预置值数据再次从SV传送到EV中,计数器开始工作。计数器CT指令的梯形图符号如下图所示。

例3-10 例题说明: 程序开始运行时,计数器自动进入计数状态。当检测到X0的上升沿500次时,计数器对应的常开触点C101接通,使输出继电器Y0导通为ON;当X1接通时,计数器复位清零,对应的常开触点C101断开,输出继电器Y0断开为OFF。

注意事项 FP1-C24中,共有44个计数器,编号为C100 ~ C143。此编号可用系统寄存器No.5重新设置。设置时注意TM和CT的编号要前后错开。 计数器与定时器有密切的关系,编号也是连续的。定时器本质上就是计数器,只不过是对固定间隔的时钟脉冲进行计数,因此两者有许多性质是类似的。 与定时器一样,每个计数器都有对应相同编号的16位专用寄存器SV和EV,以存储预置值和过程值。 同一程序中相同编号的计数器只能使用一次,而对应的常开和常闭触点可使用无数次。 计数器有两个输入端,即计数脉冲输入端CP和复位端R,分别由两个输入触点控制, R端比CP端优先权高。 计数器的预置值即为计数器的初始值,该值为0 ~ 32767中的任意十进制数,书写时前面一定要加字母“K”。

F118(UDC)指令,也起到计数器的作用。与CT不同的是,该指令可以根据参数设置,分别实现加/减计数的功能,下面举例说明。 例3-11

例题说明: 使用F118(UDC)指令编程时,一定要有加/减控制、计数输入和复位触发三个信号。 当检测到复位触发信号X2的下降沿时,DT10中的数据被传送到DT0中,计数器开始工作;当检测到X2的上升沿时,即复位信号有效,DT0被清0,计数器停止工作。 X0为加/减控制信号,当其为ON时,进行加计数,为OFF时,进行减计数。 X1为计数输入信号,检测到其上升沿时,根据X0的状态,执行加1或减1计数。 这里,DT10相当于CT指令中的预置值寄存器SV,DT0相当于经过值寄存器EV。当DT0中的结果为0时,特殊内部寄存器R900B接通,内部寄存器R50有输出。

3.移位指令:SR、F119(LRSR) SR为左移移位指令。其功能为:当R端为OFF状态时,该指令有效。这时,每检测到一个CP端的上升沿(OFF→ON),WRn中的数据就从低位向高位依次左移一位,其中,WRn的最低位用数据输入端IN的状态补入,最高位数据丢失。当R为ON状态时,该指令复位,WRn中的数据被清零。此外,需要指出的是,该指令的操作数只能用内部字继电器WR,n为WR继电器的编号。

例3-12 例题说明: 当复位信号X3为OFF状态时,每当检测到移位信号X2的上升沿,WR6寄存器的数据左移1位,最高位丢失,最低位由当时数据输入信号X1的状态决定:如果当时X1处于接通状态,则补1,否则,补0。 如果X3接通,WR6的内容清0,这时X2信号无效,移位指令停止工作。

注意:移位区内的首地址和末地址要求是同一种类型的寄存器,并满足D1≤D2。 F119(LRSR)指令为左/右移位寄存器指令,使16-bit内部继电器中的数据向左或向右移动1-bit。F119(LRSR)指令可以使用作为数据区的寄存器和常数见下表。 D1:移位区内首地址寄存器; D2:移位区内末地址寄存器; 注意:移位区内的首地址和末地址要求是同一种类型的寄存器,并满足D1≤D2。 操作数 可用寄存器 继电器 定时/ 计数器 寄存器 索引 常数 修正值 WX WY WR SV EV DT IX IY K H D1 × D2

例3-13

例题说明: F119(LRSR)指令需要有4个输入信号,即左/右移位信号、数据输入、移位信号和复位触发信号,分别对应例中X0 ~ X3共4个触点。DT0指定移位区首地址,DT9指定末地址。 当X3为ON时,复位信号有效,DT0和DT9均被清0,移位寄存器停止工作。 当X3为OFF时,移位寄存器正常工作。这时,由移位触发信号X2的上升沿触发移位操作,移动的方向由X0决定,若X0为ON,表示进行数据左移,为OFF,表示进行数据右移。至于移入的数据为1还是为0,则取决于X1的状态,若X1接通,移入数据为1,否则,移入数据为0。 这里,DT0 ~ DT9构成了连续的16位寄存器区,移位操作使所有位同时进行,整个区域按照高位在左侧、低位在右侧的顺序排列。

三、控制指令 从程序的执行步骤和结构构成上看,基本顺序指令和基本功能指令是按照其地址顺序执行的,直到程序结束为止;而控制指令则可以改变程序的执行顺序和流程,产生跳转和循环,构成复杂的程序及逻辑结构。 PLC指令的执行特点是采用扫描执行方式,这里就存在扫描和执行的关系的问题:对于一段代码,扫描并执行是正常的步骤,但是也存在另外一种情况,就是扫描但不执行,从时间上看,仍然要占用CPU时间,但从结果上看,什么也没有作,相当于忽略了这段代码。因此,这种情况比较特殊,在控制指令部分会经常遇到,要注意区别。 另外,触发信号的概念在这部分经常用到,实际上与前文提到的控制信号是一样的,可以是一个触点,也可以是多个触点的组合,用于控制(触发)相关程序的执行。

1.主控继电器指令:MC、MCE MC:主控继电器指令。 MCE:主控继电器结束指令。 功能:用于在程序中将某一段程序单独界定出来。当MC前面的控制触点闭合时,执行MC至MCE间的指令;当该触点断开时,不执行MC至MCE间的指令。

例3-14

例题说明: 当控制触点X0接通时,执行MC0到MCE0之间的程序,这时,从上图中的梯形图可以看出,效果等同于右侧的简化梯形图。否则,不执行MC0到MCE0之间的程序。 值得注意的是,当主控继电器控制触点断开时,在MC至MCE之间的程序,遵循扫描但不执行的规则,可编程控制器仍然扫描这段程序,不能简单地认为可编程控制器跳过了这段程序。而且,在该程序段中不同的指令状态变化情况也有所不同,具体情况参见下表。 指令或寄存器 状态变化 OT(Y、R等) 全部OFF状态 KP、SET、RST 保持控制触点断开前对应各继电器的状态 TM、F137(STMR) 复位,即停止工作 CT、F118(UDC) 保持控制触点断开前经过值,但停止工作 SR、F119(LRSR) 其它指令 扫描但是不执行

注意事项 MC和MCE在程序中应成对出现,每对编号相同,编号范围为0 ~ 31之间的整数。而且,同一编号在一个程序中只能出现一次。 MC和MCE的顺序不能颠倒。 MC指令不能直接从母线开始,即必须有控制触点。 在一对主控继电器指令(MC、MCE)之间可以嵌套另一对主控继电器指令。

2.跳转指令:JP、LBL JP:跳转指令。 LBL:跳转标记指令。 当控制触点闭合时,跳转到和JP指令编号相同的LBL处,不执行JP和LBL之间的程序,转而执行LBL指令之后的程序。与主控指令不同,遵循不扫描不执行的原则,在执行跳转指令时,JP和LBL之间的指令略过,所以可使整个程序的扫描周期变短。

例3-15 例题说明: 在JP1指令的前面、JP1与LBL1中间、以及LBL1的后面都可能有其它的指令程序段,如图所示。当控制触点X0断开时,跳转指令不起作用,JP1与LBL1中间的指令正常执行,与没有跳转指令一样;当控制触点X0接通时,执行跳转指令,跳过JP1与LBL1中间的程序段,直接执行LBL1的后面的程序段。

注意事项 可以使用多个编号相同的JP指令,即允许设置多个跳向一处的跳转点,编号可以是0 ~ 63以内的任意整数,但不能出现相同编号的LBL指令,否则程序将无法确定将要跳转的位置。 LBL指令应该放在同序号的JP指令的后面,当然,放在前面也可以,不过这时扫描不会终止,而且可能发生瓶颈错误,详细内容请参见手册。 JP指令不能直接从母线开始,即前面必须有触发信号。 在一对跳转指令之间可以嵌套另一对跳转指令。 不能从结束指令ED以前的程序跳转到ED以后的程序中去;不能在子程序或中断程序与主程序之间跳转;不能在步进区和非步进区进行跳转。

3.循环跳转指令:LOOP、LBL LOOP:循环指令。 LBL:循环标记指令。 循环指令的功能为:当执行条件成立时,循环次数减1,如果结果不为0,跳转到与LOOP相同编号的LBL处,执行LBL指令后的程序。重复上述过程,直至结果为0,停止循环;当执行条件不成立时,不循环执行。

例3-16 例题说明: 当X6接通时,数据寄存器DT0的预置值减1,若结果不为0,LOOP指令跳转到LBL1处,执行LBL1之后的程序。重复执行相同的操作直至DT0中的内容变为0,结束循环。 当X6断开时,不执行循环。

注意事项 可以使用多个编号相同的LOOP指令,编号可以是0 ~ 63以内的任意整数,但不能出现相同编号的LBL指令,否则程序将无法确定循环区间。此外,该指令可以与JP指令共用相同编号的LBL指令,但为了程序清晰,尽量避免。 LBL指令与同编号的LOOP指令的前后顺序不限,但工作过程不同。一般将LBL指令放于LOOP指令的上面,此时,执行循环指令的整个过程都是在一个扫描周期内完成的,所以整个循环过程不可太长,否则扫描周期变长,影响了PLC的响应速度,有时甚至会出错。 LOOP指令不能直接从母线开始,即必须有触发信号。当某编号的LOOP对应的触发信号接通时,与同编号的LBL即构成一个循环。 循环跳转指令可以嵌套使用。 不能从结束指令ED以前的程序跳转到ED以后的程序中去;也不能在子程序或中断程序与主程序之间跳转;不能在步进区和非步进区进行跳转。

4.结束指令:ED、CNDE 例3-17 例题说明: ED:结束指令,表示主程序结束。 当控制触点X0闭合时,条件结束指令CNDE起作用,返回程序起始地址,当前的扫描结束,进入下一次扫描;否则,控制触点X0断开,继续执行下面的指令扫描,当遇到ED指令,才结束当前的扫描。

5. 步进指令:SSTP、NSTP、NSTL、CSTP、STPE NSTP、NSTL:转入指定步进过程指令。这两个指令的功能一样,都是当触发信号来时,程序转入下一段步进程序段,并将前面程序所用过的数据区清除,输出OT关断、定时器TM复位。区别在于触发方式不同,前者为脉冲式,仅当控制触点闭合瞬间动作,即检测控制触点的上升沿,类似于微分指令;后者为扫描式,每次扫描检测到控制触点闭合都要动作。 CSTP:复位指定的步进过程。 STPE:步进结束指令,结束整个步进过程。 除了用于生产过程的顺序控制,步进指令还可用于选择分支控制、并行分支控制等,

例3-18 例题说明: 当检测到X0的上升沿时,执行步进过程1(SSTP1~SSTP2);当X1接通时,清除步进过程1,并执行步进过程2;当X3接通时,清除步进过程50,步进程序执行完毕。

注意事项 步进程序中允许输出OT直接同左母线相连。 步进程序中不能使用MC和MCE、JP和LBL、LOOP和LBL、ED和CNDE指令。 在步进程序区中,识别一个过程是从一个SSTP指令开始到下一个SSTP指令,或一个SSTP指令到STPE指令,即步进程序区全部结束。 当NSTP或NSTL前面的控制触点接通时,程序进入下一段步进程序。这里的控制触点和步进控制程序区结束指令STPE都是必需的。

6.子程序调用指令:CALL、SUB、RET 子程序调用指令的功能:当CALL n指令的执行条件成立时,程序转至子程序起始指令SUB n处,执行SUB n到RET之间的第n号子程序。遇到RET指令,子程序结束并返回到CALL n的下一条指令处,继续执行主程序。

例3-19 例题说明: 当X0接通时,程序从主程序转到编号为1的子程序的起始地址SUB 1处,开始执行子程序;当执行到RET处时,子程序执行完毕,返回到主程序调用处,从CALL 1指令的下一条指令继续执行随后的主程序。 当X0断开时,不调用子程序,继续执行主程序。

注意事项 FP1-C24可用子程序的个数为16个,即子程序编号范围为SUB0 ~ SUB15,且两个子程序的编号不能相同。 子程序必须编写在主程序的ED指令后面,由子程序入口标志SUB开始,最后是RET指令,缺一不可。 子程序调用指令CALL可以在主程序、子程序或中断程序中使用,可见,子程序可以嵌套调用,但最多不超过5层。 当控制触点为OFF时,子程序不执行。这时,子程序内的指令状态如下表所示。 指令或寄存器 状态变化 OT、KP、SET、RST 保持控制触点断开前对应各继电器的状态 TM、F137(STMR) 不执行 CT、F118(UDC);SR、F119(LRSR) 保持控制触点断开前经过值,但停止工作 其它指令

7.中断指令:INT、ICTL、IRET ICTL:中断控制指令,用于设定中断的类型及参数。 INT: 中断程序开始标志。 IRET:中断程序结束标志。 为了提高PLC的实时控制能力,提高PLC与外部设备配合运行的工作效率以及PLC处理突发事件的能力,FP1设置了中断功能。中断就是中止当前正在运行的程序,去执行为要求立即响应信号而编制的中断服务程序,执行完毕再返回原先被中止的程序并继续运行。

FP1的中断类型 FP1-C24以上机型均有中断功能,其中断功能有两种类型,一种是外部中断,又叫硬件中断,一种是定时中断,又叫软件中断。 1) 外部中断共有8个中断源X0 ~ X7,对应中断入口为 X0 − INT0 X4 − INT4 X1 − INT1 X5 − INT5 X2 − INT2 X6 − INT6 X3 − INT3 X7 − INT7 其优先级别为INT0最高,INT7最低。FP1规定中断信号的持续时间应≥2ms。 2) 内部定时中断是通过软件编程来设定每间隔一定的时间去响应一次中断服务程序,定时中断的中断入口为INT24。

中断的实现 1) 对于内部定时中断,是通过编程来实现的,定时中断的时间,由中断命令控制字设定。 对于外部中断,应先设定系统寄存器No.403的值,然后再设定中断控制字,并按中断程序的书写格式编写程序。 此外,与普通微机不同,PLC的中断是非嵌套的,也就是说,在执行低级中断时,若有高级中断到来,并不立即响应高级中断,而是在执行完当前中断后,才响应高级中断。 中断控制字的设置 ICTL是中断控制字指令,有二个操作数S1和S2。它可以是常数H,也可以是某个寄存器的数据。其中S1设置中断类型,S2设置中断参数。具体设置方法参见手册。

注意事项 使用外部中断之前,首先设置系统寄存器No.403。 ICTL指令应和DF指令配合使用。 中断子程序应放在主程序结束指令ED之后。 INT和IRET指令必须成对使用。 中断子程序中不能使用定时器指令TM。 中断子程序的执行时间不受扫描周期的限制。 中断子程序中可以使用子程序调用指令。

四、比较指令 比较指令由3部分组成 第一部分为助记符,分别由ST、AN、OR开始,用于指定条件满足后要进行的操作是开始,还是逻辑与、逻辑或; 第二部分为比较运算符,主要有等于(=)、大于(>)、小于(<)、大于等于(>=)、小于等于(<=)和不等于(<>)共6种关系,满足关系则为真、不满足则为假; 第三部分为比较操作数,可以为常数,即通常所说的直接寻址方式,也可以为寄存器的值,即通常所说的间接寻址方式。第二部分比较运算符指定进行的操作即是针对这两个数。

例3-20 例题说明: 该程序的功能为:根据DT2中的数据范围,或(DT1,DT0)中的内容,来决定R0的输出状态。设DT2中数据用x表示,(DT1,DT0)中数据用y表示,则当16≤x≤32,或者y≥64时,R0导通,输出为ON;否则,R0断开,输出为OFF。 从该例可以看出,比较指令实际上相当于一个条件触点,根据条件是否满足,决定触点的通断。

注意事项 单字比较为16位数据,双字比较为32位数据,用寄存器寻址时,后者采用两个相邻寄存器联合取值,如例中(DT1,DT0),表示由DT1和DT0联合构成32位数据。 在构成梯形图时,ST、AN、OR与基本顺序指令中用法类似,区别仅在于操作数上,前者为寄存器(16-bit或32-bit),后者为继电器(1-bit)。 单字指令步数为5步,而双字指令步数为9步。

第三章 FP1的指令系统 第三节 高级指令概述

一、高级指令的类型 数据传送指令:16位、32位数据,以及位数据的传送、拷贝、交换等功能。 算术运算指令:二进制数和BCD码的加、减、乘、除等算术运算。 数据比较指令:16位或32位数据的比较。 逻辑运算指令:16位数据的与、或、异或和同或运算。 数据转换指令:16位或32位数据按指定的格式进行转换。 数据移位指令:16位数据进行左移、右移、循环移位和数据块移位等。 位操作指令:16位数据以位为单位,进行置位、复位、求反、测试以及位状态统计等操作。 特殊功能指令:包括时间单位的变换、I/O刷新、进位标志的置位和复位、串口通信及高速计数器指令等等。

二、高级指令的构成 高级指令由大写字母“F”、指令功能号、助记符和操作数组成,指令的格式如下。 Fn是指令功能号,Fn=F0 ~ F165。不同的功能号规定CPU进行不同的操作。指令的助记符用英文缩写表示,一般可据此大致推测出该指令的功能。 S是源操作数或源数据区,D是目的操作数或目的数据区,分别指定操作数或其地址、性质和内容。 操作数可以是一个、二个或者三个,取决于所用的指令,可以是单字(16-bit)和双字(32-bit)的数据,若为位操作指令,还可以是位(1-bit)数据。

三、高级指令的操作数 1.进位制 2、寄存器和常数 二进制系统(BIN) 十进制常数(K常数) 十六进制常数(H常数) 二进制表示的十进制数(BCD码) 2、寄存器和常数 字继电器(WX、WY、WR)、定时器/计数器区(T、C、SV、EV)、数据寄存器(DT)、索引寄存器(IX、IY)和常数(K、H)均由1个字(16-bit)构成,且以字为单位进行处理。字继电器的内容按位对应其继电器元件的状态。

四、使用高级指令应注意的问题 在高级指令的前面必须加控制触点(触发信号),而在后面只能是右母线。 根据执行的过程,FP1的指令有两种类型,即F型和P型。如果控制触点接通后,其后续的指令每个扫描周期都要执行一次,称为“F型”指令;否则,如果后续的指令只在触发信号的上升沿执行一次,称为“P型”指令。本书中只介绍“F型”指令,如果在控制过程中需要只执行一次高级指令,可在F型高级指令的前面使用微分指令(DF)实现。 如果多个高级指令连续使用同一控制触点,不必每次都画出或写出该控制触点。见下图中虚线部分,第二、第三个指令的X0触点可以省略,则图(a)简化为图(b)。 (a) (b)

第三章 FP1的指令系统 第四节 FP1的高级指令

一、数据传送指令 1.数据传送:F0(MV)、F1(DMV)、F2(MV/)、F3(DMV/) 数据传送指令的功能是将源操作数中的数据,按照规定的要求,复制到目的操作数中去,可分为数据传送、位传送、数字传送、块传送及复制、寄存器交换等。 1.数据传送:F0(MV)、F1(DMV)、F2(MV/)、F3(DMV/) [F0 MV S, D ]:将一个16位的常数或寄存器中的数据传送到另一个寄存器中去。 [F1 DMV S, D ]:将一个32位的常数或寄存器区中的数据传送到另一个寄存器区中去。 [F2 MV/ S, D ]:将一个16位的常数或寄存器中的数据取反后传送到另一个寄存器中去。 [F3 DMV/ S, D ]:将一个32位的常数或寄存器区中的数据取反后传送到另一个寄存器区中去。

例3-21 该程序的功能是:当控制触点X0闭合时,每个扫描周期都要重复将十进制数100传送到内部字寄存器DT0中。 F0(MV)指令对源操作数没有要求,而目的操作数不能是输入继电器WX和常数K、H,原因很明显:目的操作数是用来保存结果的,自然不能用输入继电器和常数。后面介绍的其它指令也有类似情况。

例3-22 与上例相比,该例有5点不同,下面加以详细说明。 1) 在控制触点后,增加了微分指令DF,表示该指令仅在检测到控制触点X0闭合时执行一次; 2) F3(DMV/)指令助记符的第一个字符为“D”,表示该指令为双字操作,目的操作数为DT0寄存器,表示数据保存在寄存器DT1、DT0构成的32位单元中。在以后的双字操作指令中也遵循这一原则,即由相邻2个16位寄存器联合构成一个32位寄存器,默认指定的是低16位寄存器。如果低16位区已指定为(S、D),则高位自动指定为(S+1, D+1),本例中: S+1(高位)=WR3,S(低位)=WR2 D+1(高位)=DT1,D(低位)=DT0

3) F3(DMV/)指令助记符的最后一个字符为“/”,表示在进行传送时,要对被传送的数据先进行取反,然后将结果送往目的寄存器区。 4) 源操作数和目的操作数都用寄存器方式寻址,源操作数在执行指令后内容不变,目的操作数则被覆盖,相当于执行数据拷贝操作。数据的传递关系与结果参看下表。 5) 与F0(MV)指令不同的是,S和D不能用IY寄存器。IX和IY除用作索引寄存器外,还可以用作通用寄存器。当用作通用16位寄存器时,二者可单独使用;当用作32位存储区时,二者联用,IX存低16位,IY存高16位,因此程序中只能引用IX,IY由系统自动引用,无论是S还是D均如此。这个规则对于所有的双字(32-bit)指令都适用。

2. 位传输:F5(BTM)、F6(DGT) [ F5 BTM S, n, D ]:16位二进制数的位传送指令。将一个16位二进制数的任意指定位,拷贝到另一个16位二进制数据中的任意指定位中去。 [ F6 DGT S, n, D ]:16位十六进制数的位传送指令。将一个16位数据按十六进制,传送若干位(digit)到另一个16位寄存器区中去。

例3-23 例题说明: 当控制触点X0接通时,WX0中第05位数据传送到DT0中的第11位去,如下图所示。WX0中的数据由前面的程序赋值,DT0中的数据可能已经赋值,也可能没有赋值,但是执行完该指令后,DT0的第11位被赋值为1。

在F5(BTM)指令中,S为源操作数,是被传送的16位常数或寄存器中的数据;D为目的操作数,表示接收数据的16位目的寄存器;n是16位的操作数,又称传输控制码,它指明了源操作数中哪一位数据将被传送以及传送到目的操作数中的哪一位置。在n中,bit0 ~ bit3用以指定源操作数中哪一位将被传送,bit8 ~ bit11用以指定被传送数据放在目的操作数的什么位置,bit4 ~ bit7、bit12 ~ bit15这8位未用,可随便取值,不影响结果,为简便计,一般均取为0。因此,本例中源区位地址取为H5,目的区位地址取为HB。n的设置参见下图。

对于F6(DGT),在n的定义上有所不同,一是数据操作的最小单位为十六进制的1位,即1digit,相当于二进制的4bits;二是要拷贝的数据不像F5那样只有1位,而是有效范围内的任意位,因此还需要指定参与操作的位数。n的设置可参考下图。 由图中可见,n的bit12 ~ bit15未用,以十六进制表示,即digit3未用。

为了能够表示数据段,采用的是“首地址+段长度”的表示方式,即由digit2表示目的区首地址、digit1表示要拷贝的数据段位数、digit0表示源区首地址,这样进行操作的数据区地址就可唯一确定。 举例而言,若想将源区的4个十六进制位(digit0 ~ digit3)拷贝到目的区的4个十六进制位(digit1 ~ digit3,digit0),可将n取值为H0130,其含义见左图,执行情况见右图。 值得注意的是,这里有个“循环”的概念,即如果目的区位数不够,自动回到最小位,再进行拷贝。如例中S的digit3应该送给D中的digit4,但是D的最大位为digit3,则该数据自动送往D的digit0。

3. 块传输指令:F10(BKMV)、F11(COPY) 格式: [ F10 BKMV S1, S2, D ] 说明:数据段采用的是“首地址+尾地址”的表示方式,即将指定的以S1为起始地址、S2为终止地址的数据块拷贝到以D为起始地址的目的区中。要求S1和S2应为同一类型的寄存器,且S2≥S1。 2) F11(COPY):块拷贝指令。 格式: [ F11 COPY S, D1, D2 ] 说明:即将由S指定的16-bit常数或寄存器中的值重复拷贝到以D1为起始地址、D2为终止地址的目的区中。要求D1和D2应为同一类型的寄存器,且D2≥D1。

4.数据交换指令:F15(XCH)、F16(DXCH)、F17(SWAP) 格式: [ F15 XCH D1, D2 ] 说明:将D1和D2寄存器中的16位数据互相交换。 2) F16(DXCH):32位数据交换。 格式: [ F16 DXCH D1, D2 ] 说明:将(D1+1,D1)寄存器中的32位数据与(D2+l,D2)中的32位数据互换。 3) F17(SWAP):16位数据的高低字节互换。 格式: [ F17 SWAP D ] 说明:将D寄存器中的16位数据高8位和低8位互换。

二、算术运算指令 算术运算指令共有32条,但是同前面介绍的比较指令类似,规律性很强。因此,书中仅对其规律加以总结分析,掌握规律后,结合指令表,不难掌握这类指令。 1、指令分类 按照进位制可分为二进制BIN算术运算指令和BCD码算术运算指令,各为16条指令,后者在指令中增加大写字母“B”以示区别。 按照参与运算的数据字长(位数)可以分为单字(16-bit)和双字(32-bit)指令,后者在助记符中以大写字母“D”区别,在FP1的其它指令中也是采用这种方式。 按照运算规则可分为加、减、乘、除四则运算,以及加1、减1共六种基本运算。其中,加1和减1可以看作是加、减运算的特例。 按照参与运算的操作数的多少可分为一操作数、两操作数和三操作数。

2.操作数的数据范围 16位二进制数:−32768 ~ 32767 或H8000 ~ H7FFF。 32位二进制数:−2147483648 ~ 2147483647 或H80000000 ~ H7FFFFFFF。 4位BCD码: 0 ~ 9999。 8位BCD码: 0 ~ 99999999。

R9008:错误标志。当有操作错误发生时,R9008接通一个扫描周期,并把发生错误的地址存入DT9018中。 3.运算标志 算术运算要影响标志继电器,包括特殊内部继电器R9008、R9009和R900B。这里仅对影响情况做简单概括,详细情况需要结合具体的指令,参考手册学习掌握。 R9008:错误标志。当有操作错误发生时,R9008接通一个扫描周期,并把发生错误的地址存入DT9018中。 R9009:进位、借位或溢出标志。当运算结果溢出或由移位指令将其置1时,R9009接通一个扫描周期。 R900B:0结果标志。当比较指令中比较结果相同,或是算术运算结果为0时,R900B接通一个扫描周期。

4.运算规则 1) 加法指令的算法 两操作数:(D) + (S) → (D) 三操作数:(S1) + (S2) → (D) 2) 减法指令的算法 两操作数:(D) – (S) → (D) 三操作数:(S1) – (S2) → (D) 3) 乘法指令的算法 (S1) × (S2) → (D) 乘法运算可能会导致16位数据升为32位,因此结果用32位存储;同理,32位乘法结果用64位存储。存储区自动取指定寄存器连续的高位寄存器,例如指定寄存器为D,对于64位,结果自动存于(D+3, D+2, D+1, D)四个连续寄存器中。

4) 除法指令的算法 (S1) ÷ (S2) → (D) 除法运算在每次运算完后,商数保存于D中或(D+1, D)中。此外,还可能产生余数,如果是单字运算,可到DT9015中取余数;如果是双字运算,可到(DT9016, DT9015)中取余数。 5) 加1和减1指令算法 加1指令:(D) + 1 → (D) 减1指令:(D) – 1 → (D) 算术运算一般都是一次性的,而PLC采用的是扫描执行方式,因此该类指令常常和微分指令(DF)联合使用。下面举例对算术指令加以说明。

5.举例 例3-24:用算术运算指令完成算式, 这里包括了加、减、乘、除四种运算。要求X1闭合时开始运算,X0闭合时各单元清零,且清零优先。 解:使用二进制(BIN)运算指令实现时,梯形图如下图。同样的功能也可采用BCD码运算指令实现。

三、数据比较指令 数据比较指令包括16位或32位数据比较指令、一个16位或32位数据与数据区间进行比较、数据块比较等5条指令。比较的结果用特殊内部继电器R9009、R900A、R900B和R900C的状态来表示。 1.16位和32位数据比较指令:F60(CMP)、F61(DCMP) [ F60 CMP, S1, S2 ]:16位数据比较指令。 [ F61 DCMP, S1, S2 ]:32位数据比较指令。 该类指令的功能为:当控制触点闭合时,将S1指定数据与S2指定数据进行比较,比较的结果反映到标志位中。

表3-14 16位数据比较指令F60(CMP) 对标志位影响 标志位结果 R900A R900B R900C R9009 >标志 =标志 <标志 进位标志 有符号数比较 S1<S2 OFF ON – S1=S2 S1>S2 BCD数据或 无符号数比较 如果程序中多次使用F60(CMP)指令,则标志继电器的状态总是取决于前面最临近的比较指令。为了保证使用中不出现混乱,一个办法是在比较指令和标志继电器前使用相同的控制触点来进行控制;另一个办法是在比较指令后立即使用相关的标志继电器。

2.16位和32位数据区间比较指令:F62(WIN)、F63(DWIN) [ F62 WIN, S1, S2, S3 ]:16位数据区段比较指令。 [ F63 DWIN, S1, S2, S3 ]:32位数据区段比较指令。 该类指令的功能为:当控制触点闭合时,将S1指定数据与S2指定下限、S3指定上限的数据区间中的数据比较,比较的结果反映到标志位中。 表3-15 16位数据区间比较指令F62(WIN)对标志位影响 标志位结果 R900A R900B R900C >标志 =标志 <标志 S1<S2 OFF ON S2≤S1≤S3 S1>S3

3.数据块比较指令:F64(BCMP) [ F64 BCMP, S1, S2, S3 ]:数据块比较指令。 该指令功能为:当控制触点闭合时,根据S1指定的比较参数,包括数据块的起点和长度,比较由S2指定首地址的数据块和由S3指定首地址的数据块中的内容,当两个数据块完全相同时,特殊内部继电器R900B接通。 S1指定的比较参数的定义见下图。

四、逻辑运算指令 1. F65(WAN): 2. F66(WOR): 3. F67(XOR): 4. F68(XNR): 该类指令很简单,包括与、或、异或和异或非4种。操作数均为16位,均有三操作数,将S1和S2分别进行上述4种运算,结果存于D中。 1. F65(WAN): 格式:[ F65 WAN S1, S2, D ] 功能:16-bit data AND,16位数据“与”运算。 2. F66(WOR): 格式:[ F66 WOR S1, S2, D ] 功能:16-bit data OR,16位数据“或”运算。 3. F67(XOR): 格式:[ F67 XOR S1, S2, D ] 功能:16-bit data exclusive OR,16位数据“异或”运算。 4. F68(XNR): 格式:[ F68 XNR S1, S2, D ] 功能:16-bit data exclusive NOR,16位数据“异或非”运算。

五、数据转换指令 数据转换指令包含各种数制、码制之间的相互转换,有二进制、十六进制及BCD码数据同ASCII码之间的相互转换,二进制数据与BCD码间的相互转换,指令较多。此外还有二进制数据的求反、求补、取绝对值;符号位的扩展等操作以及解码、编码、译码、数据分离、数据组合、数据查表等操作。通过这些指令,在程序中可以较好地解决PLC输入、输出的数据类型与内部运算数据类型不一致的问题。

1.区块检查码计算指令:F70(BCC) [F70 BCC S1, S2, S3, D]:这条指令常用于数据通信时检查数据传输是否正确。该指令是FP1指令系统中惟一的一条四操作数的指令。 2.码制变换指令:F71 ~ F83 1) F71 ~ F78:是8条三操作数的码制变换指令,分别实现十六进制数据、BCD码、16位二进制数据、32位二进制数据与ASCII码间的互换, 2) F80 ~ F83:是4条双操作数的码制变换指令,分别实现16位和32位二进制数据与BCD码数据间的互换。 根据前面所学知识,不难推测出S和D可取用的寄存器范围。即目的寄存器不可取用WX、K、H,当操作数是32位数据时,不可取用IY。

3.数据计算指令:F84 ~ F88 F84 ~ F88这5条指令是将D指定的16位数据或32位二进制数据分别求反、求补、取绝对值,并将结果存储在D或(D+1, D)中。操作数D不可用寄存器WX、K、H。 4.16位数据符号位扩展指令:F89(EXT) 该指令的功能为:将D指定的16位数据的符号位全部拷贝到D+1寄存器的各个位中,保留D寄存器,扩展结果作为32位数据存储于(D+1, D)中。用该指令可将16位数据转变为32位数据。

5.编码/解码指令:F90 ~ F92 1) [ F90 DECO S, n, D]:解码指令。所谓解码,就是将若干位二进制数转换成具有特定意义的信息,即类似于数字电路中的3-8译码器的功能,将S指定的16位二进制数根据n规定的规则进行解码,解码的结果存于以D指定的16位寄存器作为首地址的连续区域。 图3-39 n的格式示意图 2) [ F91 SEGT S, D ]:位数据七段解码指令。是把一个4位二进制数译成七段显示码。即将S指定的16位数据转换为七段显示码,转换结果存储于以D为首地址的寄存器区域中。其中,S为被译码的数据或寄存器。D为存放译码结果的寄存器首地址。 在执行该指令时,将每4−bit二进制码译成7位的七段显示码,数码的前面补0变成8位,因此,译码结果使数据位扩大了一倍。

其中,S为被编码的数据或寄存器首地址,n为编码控制字或存放控制字的寄存器。 3) [ F92 ENCO S, n, D ]:编码指令。所谓编码,就是将具有特定意义的信息变成若干位二进制数。将S指定的16位二进制数据根据n的规定进行编码,编码结果存储于D指定的寄存器中。 图3-40 n的格式示意图 其中,S为被编码的数据或寄存器首地址,n为编码控制字或存放控制字的寄存器。 nL为n的bit0 ~ bit3,用于设定编码数据的有效位长度,nL的取值范围为H1 ~ H8。S的有效位长度=2nL。 nH是n的bit8 ~ bit11,用于设定D寄存器从何位开始存放结果,nH取值范围为H0 ~ HF。

7.字符→ASCII码转换指令:F95(ASC) 6 . 数据组和/分离指令:F93、F94 1) [ F93 UNIT S, n, D ]:数据组合指令,其功能是将一组数据的低4位(bit0 ~ bit3)重新组成一个16位数据。 2) [ F94 DIST S, n, D ]:数据分离指令,其功能和数据组合指令相反,是将一个16位数,每4bits为一组分成4组,按n规定的方式,存到结果寄存器D的低4位中去。 7.字符→ASCII码转换指令:F95(ASC) [ F95 ASC S, D ]:将S指定的字符常数转换为ASCII,转换后的结果存储于以D指定的16位寄存器开始的区域中。 8.表数据查找指令:F96(SRC) [ F96 SRC S1, S2, S3 ]:在S2(首地址)和S3(尾地址)指定的数据区中查找与S1的内容相同的数据,并将查找到的数据的个数存储于特殊数据寄存器DT9037中,第一次发现该数据的位置存储于特殊数据寄存器DT9038中。

六、数据移位指令 FP1高级指令系统中包含了位、字以及字段的左/右移位指令,共有16位数据的左/右移位、4位BCD码的左/右移位,字数据的左/右移位、16位数据的左/右循环移位等12条指令。其中位移位指令有进位标志位参与运算,并分为非循环移位指令(普通移位)和循环移位指令两种。这些移位指令比前文介绍过的SR指令的功能要强大得多,且不象SR那样每次只能移动1位,而是可以根据需要,在指令中设置一次移动若干位。此外,各种通用寄存器都可以参与多种移位操作,其操作结果影响内部特殊继电器R9009(进位标志)或特殊数据寄存器DT9014。

1.16位数据的左/右移位指令 该类移位指令只是针对16位二进制数据,根据循环情况的不同又可分为普通(非循环)移位指令、循环移位指令和包含进位标志的循环移位指令三种情况。其区别主要在于移入位的数据处理上,简单地说,普通(非循环)移位指令不循环,移入位直接依次补0;循环移位指令移入位则由移出位补入;包含进位标志的循环移位指令移入位由进位标志依次补入。 这里要注意的是,为了便于理解,也可将一次移动n位的过程理解成移动n次,每次移动1位,实际上指令是一次完成移位的。

1) 普通(非循环)移位指令 [ F100 SHR, D, n ]:寄存器D中的16位数据右移n位,高位侧移入数据均为0,低位侧向右移出n位,且第n位移入进位标志位CY(R9009)中。 [ F101 SHL, D, n ]:寄存器D中的16位数据左移n位,高位侧向左移出n位,且第n位移入进位标志位CY(R9009)中,低位侧移入数据均为0。 其中,n用于设定移位的位数,为常数或16位寄存器,取值范围为K0 ~ K255。

2) 循环移位指令 [ F120 ROR, D, n ]:寄存器D中的16位数据右移n位,低位侧移出的n位依次移入高位侧,同时移出的第n位复制到进位标志位CY(R9009)中。 [ F121 ROL, D, n ]:寄存器D中的16位数据左移n位,高位侧移出的n位依次移入低位侧,同时移出的第n位复制到进位标志位CY(R9009)中。 注意这两条指令与F100和F101的区别在于:这里是循环移位,而不是补0。

3) 包含进位标志的循环移位指令 [ F122 RCR, D, n ]:寄存器D中的16位数据右移n位,移出的第n位移入进位标志位CY,而进位标志位CY原来的数据则移入从最高位侧计的第n位。 [ F123 RCL, D, n ]:寄存器D中的16位数据左移n位,移出的第n位移入进位标志位CY,而进位标志位CY原来的数据则移入从最低位侧计的第n位。

2.十六进制数的左/右移位指令 [ F105 BSR, D ]:寄存器D中的4位十六进制数右移1位,相当于右移二进制的4bits,移出的低4bits数据送到特殊数据寄存器DT9014的低4bits,同时D的高4bits变为0。 [ F106 BSL, D ]:寄存器D中的4位十六进制数左移1位,相当于左移二进制的4bits,移出的高4bits数据送到特殊数据寄存器DT9014的低4bits,同时D的低4bits变为0。

3.数据区按字左/右移位指令 [ F110 WSHR, D1, D2 ]:由D1为首地址,D2为末地址定义的16位寄存器数据区,整体右移一个字,相当于二进制的16-bit。执行后,首地址寄存器的原数据丢失,末地址寄存器为0。 [ F111 WSHL, D1, D2 ]:由D1为首地址,D2为末地址定义的16位寄存器数据区,整体左移一个字,相当于二进制的16-bit。执行后,首地址寄存器为0,末地址寄存器的原数据丢失。 同前面针对数据区操作的高级指令一样,D1和D2应是同一类型的寄存器,且末地址寄存器号应大于或等于首地址寄存器号,即D2≥D1。此外,还要注意的是首尾地址的编排顺序是左边为末地址、右边为首地址。

4.十六进制数据区的左/右移位指令 [ F112 WBSR, D1, D2 ]:由D1为首地址,D2为末地址定义的16位寄存器数据区,整体右移一个十六进制数,相当于二进制的4bits。 [ F113 WBSL, D1, D2 ]: 由D1为首地址,D2为末地址定义的16位寄存器数据区,整体左移一个十六进制数,相当于二进制的4bits。

七、位操作指令 位操作就是指被操作的对象不是字,而是字中的某一位或几位。FP1系列PLC具有较强的位操作能力,可以进行16位数据的位置位(置1)、位复位(清0)、位求反以及位测试,还可计算16位或32位数据中,位值为“1”的位数。位操作指令共有6条,可分为位处理指令和位计算指令两类。 由于这些指令可以对寄存器中数据的任意位进行控制和运算,所以在编程中有时可以起到重要作用。同样一种控制要求,用一般的基本指令实现,程序往往比较复杂;如果利用好位操作指令,可取得很好的效果,使程序变得更为简洁。

1.位处理指令 [ F130 BTS, D, n]:位置1指令。 [ F131 BTR, D, n]:位清0指令。 [ F132 BTI, D, n]: 位求反指令。 [ F133 BTT, D, n]:位测试指令。 前3条指令的功能是对位进行运算处理,分别对D寄存器中、位地址为n的数据位进行置位(置1)、复位(清0)、求反。其中,由于n用来表示16位数据的位地址,因此取值范围为K0 ~ K15。 第4条指令用于测试16位数据D中任意位n的状态为“0”还是为“1”。测试的结果存储在内部继电器R900B中,如果测试结果为0,则R900B=1;测试结果为1,R900B=0。

2.位计算指令 位计算指令就是计算寄存器的数据或常数中有多少位是“1”。 [ F135 BCU, S, D]:16位位计算指令。 [ F136 DBCU, S, D]:32位位计算指令。 F135(BCU)和F136(DBCU)的功能是分别统计S指定的16位和32位数据中位值为“1”的位的个数,并把统计的结果存储于D指定的存储区中。

八、特殊指令 1、时间变换指令:F138(HMSS)、F139(SHMS) FP1-C24以上机型均有日历及实时时钟功能。使用手持编程器或编程软件将年、月、日、时、分、秒、星期等的初值设置到特殊数据寄存器DT9054 ~ DT9057中,即可实现自动计时,即使断电后,计时也不会间断。校表时,采用舍入法,DT9058是30秒校表寄存器,当DT9058置入“1”时,若秒位显示小于30秒则舍去,若大于30秒,则分位加“1”。

1) F138(HMSS) 2) F139(SHMS) 格式:[ F138 HMSS S, D ] 功能:将以时/分/秒格式表示的时间数据,变换成以秒为单位的时间数据。将(S+1, S)中存放的时/分/秒数据转换为秒数据,结果存放于寄存器(D+1, D)中。在这里,S和D中的数据均用BCD码表示。表示形式如下图所示。 图3-47 F138指令中S和D的含义 2) F139(SHMS) 格式:[ F139 SHMS S, D ] 功能:将以秒为单位的时间数据,变换成以时/分/秒格式表示的时间数据。功能与F138完全相反。

2、进位位(CY)的置位和复位指令:F140(STC)、F141(CLC) 功能:F140(STC)和F141(CLC)指令是FP1高级指令中仅有的两条无操作数的指令,其功能是将特殊内部继电器R9009(进位标志位)置位和复位,即将R9009置为1或者清0。 3、刷新部分I/O指令:F143(IORF) 格式:[ F143 IORF D1, D2 ] 功能:刷新指定的部分I/O点。 F143指令只要触发信号接通,即使在执行程序阶段,也能立即将输入(WX)或输出(WY)寄存器D1至D2的内容刷新,避免由扫描时间造成的延时。该指令要求D1和D2为同一类型的操作数,且D2≥D1。

4、串行数据通信指令:F144(TRNS) 格式:[ F144 TRNS S, n ] 功能:通过RS232串行口与外设通讯,以字节为单位,发送或接收数据。一般型号末端带“C”的PLC带有RS232串行口。 其中,S为发送或接收数据的寄存器区首地址,且S只能使用数据寄存器DT。寄存器S用作发送或接收监视之用,之后的寄存器S+1、S+2、……,存放着发送或接收的数据。也就是说,S+1为发送和接收数据的首地址,数据存放在S+1及以后的寄存器中。n则用来设定要发送的字节数。 1) 数据发送:特殊内部继电器R9039是发送标志继电器,发送过程中R9039为OFF状态,结束后为ON状态。 2) 数据接收:特殊内部继电器R9038是接收标志继电器,接收过程中R9038为OFF状态,结束后为ON状态。

5、并行打印输出指令:F147(PR) 格式:[ F147 PR S, D ] 功能:通过并行通讯口打印输出字符。每次执行打印指令可连续打印12个字符,并占用37个扫描周期,由Y8自动发出打印脉冲。C24以上晶体管输出型的PLC具有并行打印输出功能。 其中,S指定了要输出字符的首地址,S和随后的S+1、S+2等保存的必须是字符型ASCII数据。D为打印机信号输出,只可用WY输出继电器,且0 ~ 8位与打印机对应,PLC与打印机之间的连线如下表所示。 表3-21 FP1与打印机连接端点 晶体管输出型FP1 Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7 Y8 COM DC+5V 打印机 Data1 Data2 Data3 Data4 Data5 Data6 Data7 Data8 Strobe

6、自诊断错误设置指令:F148(ERR) 格式:[ F148 ERR n ] 功能:将某特殊状态设置为自诊断错误,或者将由自诊断错误E45、E50或E200 ~ E299引起的错误状态复位。F148指令的运行由n决定,n为自诊断错误代码,范围为0和100 ~ 299。 n = 0:清除由自诊断错误E45、E50或E200 ~ E299引起的错误状态; n = 100 ~ 299:将指令的触发信号设置为第n号自诊断错误。具体内容请参见手册的“错误代码表”。 7、信息显示指令:F149(MSG) 格式:[ F149 MSG S ] 功能:将S指定的字符常数(以M开始的字符串)显示在FP编程器II屏幕上。

8、时间运算指令:F157(CADD)、F158(CSUB) 格式:[ F157 CADD S1, S2, D ] 功能:在(S1+2, S1+1, S1)指定的日期(年、月、日)和时间(时、分、秒)数据中加上(S2+1, S2)指定的时间数据,所得的结果(年、月、日、时、分、秒)存放在(D+2, D+1, D)中,日期、时间数据均用BCD码表示。 2) F158(CSUB) 格式:[ F158 CSUB S1, S2, D ] 功能:同F157(CADD)类似,只是相加运算变为相减运算,详细用法请参考手册。

第三章结束 哈尔滨理工大学 电气与电子工程学院 电气技术教研室 2003年3月24日