您好,欢迎光临上海图书公司! 登录
可编程自动化控制器原理与实践--基于国产HPAC系统(教育部高等学校机械类专业教学指导委员会规划教材)
ISBN:9787302651291
作者:编者:王晓宇|责编:苗庆波
定价:¥59.8
出版社:清华大学
版次:第1版
印次:第1次印刷
开本:4 平装
页数:297页
商品详情
目录

第1章  公有元素
  1.1  控制器模型
    1.1.1  软件模型
    1.1.2  通信模型
    1.1.3  功能模型
  1.2  标准符号
    1.2.1  字符集
    1.2.2  标识符
    1.2.3  分界符
    1.2.4  关键字
    1.2.5  空格和注释
  1.3  数据标称
    1.3.1  数值标称
    1.3.2  字符串标称
    1.3.3  时间标称
  1.4  数据类型
    1.4.1  基本数据类型
    1.4.2  一般数据类型
    1.4.3  衍生数据类型
    1.4.4  取值范围和初始化
    1.4.5  衍生类型
  1.5  变量
    1.5.1  变量的表示
    1.5.2  变量的属性
  习题
第2章  程序组织单元
  2.1  函数
    2.1.1  函数的表示
    2.1.2  函数的附加属性
    2.1.3  用户自定义函数
  2.2  标准函数
    2.2.1  类型转换类函数
    2.2.2  数值类函数
    2.2.3  算术类函数
    2.2.4  位串类函数
    2.2.5  选择和比较类函数
    2.2.6  字符串类函数
    2.2.7  时间数据类型函数
    2.2.8  枚举数据类型函数
  2.3  功能块
    2.3.1  功能块的表示
    2.3.2  功能块的特性
  2.4  标准功能块
    2.4.1  双稳元素功能块
    2.4.2  边沿检测功能块
    2.4.3  计数器功能块
    2.4.4  定时器功能块
  2.5  程序
    2.5.1  程序的表示
    2.5.2  程序的特性
  2.6  小结
  习题
第3章  文本类编程语言
  3.1  指令表编程语言
    3.1.1  指令格式
    3.1.2  指令集
    3.1.3  指令分类
    3.1.4  函数和功能块调用
    3.1.5  示例
  3.2  结构化文本编程语言
    3.2.1  语句和表达式
    3.2.2  赋值调用类语句
    3.2.3  流控类语句
  习题
第4章  图形类编程语言
  4.1  梯形图编程语言
    4.1.1  组成元素
    4.1.2  函数和功能块的图形表示
    4.1.3  扫描执行顺序
    4.1.4  示例
  4.2  功能块图编程语言
    4.2.1  组成元素
    4.2.2  连接和执行顺序
    4.2.3  示例
  习题
第5章  SFC编程语言
  5.1  组成元素
    5.1.1  步
    5.1.2  行动
    5.1.3  转换
  5.2  连接和执行顺序
    5.2.1  连接结构
    5.2.2  限定符
    5.2.3  执行顺序
  5.3  示例
    5.3.1  跑马灯
    5.3.2  交通灯
  习题
第6章  状态机和SFC
  6.1  模型驱动开发
  6.2  状态机模型
    6.2.1  状态机的定义
    6.2.2  状态机与流程图、多线程的关系
    6.2.3  状态机与SFC
  6.3  SFC组态原理
    6.3.1  转换规则
    6.3.2  推荐的SFC风格
    6.3.3  SFC编程语言的典型问题
  6.4  SFC语言转换
    6.4.1  SFC转LD
    6.4.2  SFC转ST
  习题
第7章  现场总线和组态
  7.1  概述
  7.2  CANopen现场总线
    7.2.1  CAN链路层
    7.2.2  报文格式
    7.2.3  COBID
    7.2.4  节点状态机
  7.3  CANopen通信对象
    7.3.1  网络管理
    7.3.2  过程数据对象
    7.3.3  服务数据对象
  7.4  对象字典
    7.4.1  对象字典的结构
    7.4.2  PDO映射
  7.5  COE总线组态
    7.5.1  HPAC系统构成
    7.5.2  COE主站数据区
    7.5.3  扫描和分配
  习题
第8章  HPAC数据访问
  8.1  运行时系统
    8.1.1  生成过程
    8.1.2  组成结构
  8.2  数据访问
    8.2.1  I/O类过程数据
    8.2.2  轴类过程数据
    8.2.3  QTouch
    8.2.4  Modbus
    8.2.5  共享数据区
    8.2.6  脚本层接口
    8.2.7  单步调试
  8.3  示例
    8.3.1  QTouchHMI
    8.3.2  双缓冲数据采集
  习题
第9章  运动控制原理
  9.1  PLCopen运动控制规范
    9.1.1  概述
    9.1.2  轴状态机
  9.2  初始化类
    9.2.1  MC_Init
    9.2.2  MC_Power
  9.3  单轴运动类
    9.3.1  MC_Absolute
    9.3.2  MC_Relative
    9.3.3  MC_SetPosition
    9.3.4  MC_Home
    9.3.5  MC_Halt
    9.3.6  MC_Stop
    9.3.7  MC_Reset
    9.3.8  MC_Velocity
  9.4  多轴运动类
    9.4.1  MC_CamIn
    9.4.2  MC_CamOut
    9.4.3  MC_Combine
    9.4.4  MC_GearIn
    9.4.5  MC_GearOut
  9.5  轴参数
    9.5.1  初始化参数类
    9.5.2  运行参数类
    9.5.3  轴数据操作功能块
  习题
第10章  安全控制原理
  10.1  PLCopenSafety
    10.1.1  概述
    10.1.2  安全软件架构模型
    10.1.3  安全布尔
    10.1.4  安全功能块的基本规则
  10.2  信号互检
    10.2.1  SF_Equivalent
    10.2.2  SF_Antivalent
  10.3  安全开关
    10.3.1  SF_ModeSelector
    10.3.2  SF_ESPE
    10.3.3  SF_TestableSafetySensor
    10.3.4  SF_GuardMonitoring
    10.3.5  SF_GuardLocking
    10.3.6  SF_EnableSwitch
  10.4  上、下料
    10.4.1  SF_MutingSeq
    10.4.2  SF_MutingPar
    10.4.3  SF_MutingPar_2Sensor
    10.4.4  SF_TwoHandControlTypeII
  10.5  外部交互
    10.5.1  SF_OutControl
    10.5.2  SF_EDM
    10.5.3  SF_SafetyRequest
    10.5.4  SF_SafetyLimitedSpeed
    10.5.5  SF_SafeStop
  习题
第11章  应用案例
  11.1  逻辑控制
    11.1.1  自保持与解除回路
    11.1.2  交替输出回路
    11.1.3  先入信号优先回路
    11.1.42  4h时钟
    11.1.5  异步电动机正反转
    11.1.6  脉波波宽调变
    11.1.7  霓虹灯循环左移
  11.2  伺服电动机运动控制
    11.2.1  电动机正反转
    11.2.2  电动机正反转
    11.2.3  无限单向位移
    11.2.4  缓冲模式
    11.2.5  电动机回零
    11.2.6  电动机点动
    11.2.7  电子凸轮正反转
    11.2.8  轴组合
  11.3  安全集成设计模式
    11.3.1  模式切换
    11.3.2  急停和限位
    11.3.3  流程和报警
    11.3.4  循环计数
    11.3.5  单轴装配机
    11.3.6  小结
  习题
参考文献

精彩页/试读片段

    3.1 指令表编程语言
    指令表(Instruction List,IL)编程语言是一种与汇编语言类似的低级编程语言,
    程序员使用基本指令进行排列式编程,其主要特点是实现简单和容易学习。
    对于小型的简单过程控制,IL 语言是理想的编程语言。因为其编译执行器实现非
    常简单,所以功能局限的低档 PLC 就可以支持指令表编程。如果在运行时系统中实
    现了 IL 指令,编译和构建过程也可省略,可直接解释执行。因此,IL 也常被一些传
    统的硬 PLC 作为目标指令集,将其他编程语言转化为 IL 语言后可解释执行。
    IEC 61131-3 对各厂商五花八门的指令集进行了归纳和简化。例如采用了修正符、
    函数和功能块,以及复杂数据类型的支持等,将原来必须通过专门指令实现的操作改
    为通过修正符、函数和功能块调用的方式实现,大幅减少了指令的数量。
    由于 IL 语言的功能和开发方式过于底层,在大型复杂的控制程序中较少使用,
    IEC 61131-3 提出了新的结构化文本语言而不再以 IL 语言作为基础和目标语言,因
    此其存在感日益降低。
    3.1.1 指令格式
    指令表编程语言代码由指令顺序排列组成,指令由操作符(可带修正符)和操作
    数组成,指令具有如下格式:
    标号: 操作符/函数 操作数 (* 注释 *)
    每条指令占一行,指令由一个操作符、一个或几个操作数组成,指令的修正符可
    根据实际需求结合操作符及操作数组合使用。操作符与操作数之间至少需要有一个空
    格来分隔,多于一个的操作数用逗号分隔,标号与操作符用冒号分隔。可根据应用要
    求对每行指令添加注释,注释应在程序行的最后面,不允许在行首和中间。
    操作符也叫指令符,用于规定操作的方法,例如和当前结果寄存器进行或逻辑运
    算、和当前结果寄存器进行与逻辑运算等。操作符可以与修正符进行组合,以实现对
    操作符的修正;操作数是操作的对象,可以是数据常量或变量。
    标号用于流程控制操作,例如 JMP 操作的操作数表示跳转的目的地址,标号无
    须作为变量进行定义,但不能与变量重名。
    指令表编程语言定义了一个堆栈保存运算结果,最新的结果保持在栈顶称为当前
    结果寄存器,栈内元素的存储位数是可变的,可适应所有的数据类型。
    执行 IL 时,依次将当前结果寄存器与操作数进行操作符规定的运算,并将运算
    结果存放回当前结果寄存器,直到指令表结束。
    例 3-1 指令格式
    标号 操作符 操作数 注释
    BEGIN: LD Start (* Start 为启动按钮,按下为 1 *)
    OR Ready (* 自保触点 *)
    ANDN Stop (* Stop 为停车按钮,按下为 1 *)
    ST Ready (* 启动设备 *)
    例 3-1 用于对某设备进行启保停控制。程序中标号为 BEGIN 的指令读取变量
    Start 中的信号(启动按钮),存放至当前结果寄存器。第 2 行用于将第 1 行指令的结
    果和变量 Ready 中的信号(设备的自保信号)进行或逻辑运算,运算结果仍存放到当
    前结果寄存器。第 3 行指令用于将第 2 行的运算结果和变量 Stop 中的信号(停止按
    钮)取反后的结果进行与逻辑运算,结果仍存放到当前的结果寄存器。第 4 行指令用
    于将当前结果寄存器存放的信号传送到变量 Ready 中存放。
    3.1.2 指令集
    IEC 61131-3 对传统的硬 PLC 指令表编程语言进行了标准化,采用函数和功能块,
    使用数据类型的超载属性等,使编程语言更简单灵活,指令更精简,其主要变化如下:
    (1)采用函数和功能块调用,将指令集简化为表 3-1 中的 9 类 24 种指令。例如,
    移位指令、算术运算指令、位串类指令等都可以用标准提供的函数直接实现。
    表 3-1 操作符和修正符
    操作符 修正符 操作数 说明
    传统 PLC 操作符和
    修正符示例
    LD N ANY 设置当前值等于操作数
    LD, LDI, STR,
    LD NOT
    ST N ANY 存储当前值到操作数位置 OUT, OUT NOT
    S
    R
    BOOL
    BOOL
    如果当前值是布尔值 1,则操作数置位到 1
    如果当前值是布尔值 1,则操作数复位到 0
    S, SET
    R, RESET, RST
    AND
    &结果寄存器的内容变为
    布尔值 1 *)
    JMPC LAB2(* 当前结果寄存器的内容为 1,跳转执行 LAB2 开始的程序 *)
    JMP LAB3(* 当前结果寄存器的内容为 0,跳转执行 LAB3 开始的程序 *)
    LAB2: … …
    在例 3-5 中,GT 5 指令使当前结果寄存器的内容从整数类型改变为布尔类型,
    JMPC LAB2 指令执行后,LAB2 标号开始的程序应首先设置当前结果寄存器的内容。
    3. 置位类指令和复位类指令
    输出类指令用于对操作数指定的数据单元进行复位和置位,传统 PLC 中一般包
    括 S、SET、R、RST 等同类指令,标准指令集定义了 S 和 R 指令表示置位和复位类
    指令,S 是 Set 的缩写,R 是 Reset 的缩写,具体格式如下:
    S 操作数(* 当结果为 1 时将数据单元设置为 1,否则不变 *)
    R 操作数(* 当结果为 1 时将数据单元设置为 0,否则不变 *)
    本类指令具有记忆属性。执行 S 操作后,数据存储单元的内容被设置为 1,并且
    被记忆和保持到执行 R 操作数指令,执行 R 操作数指令使数据存储单元的内容被设
    置为 0;同样,该存储单元的内容要保持到执行 S 操作数的指令,并使其内容设置到
    1 为止。
    S 和 R 指令功能可用 SR 和 RS 功能块的调用实现,但与 RS 或 SR 不同,S 指令
    和 R 指令的执行是根据程序中的位置确定优先级的,另外功能块要先设置 S 和 R 两
    个输入端才能执行调用指令。
    相比电气控制中的启动和停止控制,S 指令实现启动控制,R 指令实现停止控制。
    两者的区别是电气控制的启动和停止控制中,启动信号按钮是常开触点,停止信号按
    钮是常闭触点。而 S 和 R 指令中,这两个信号都是常开触点。
    表 3-5 是 S 和 R 指令的一些示例。
    表 3-5 S 和 R 指令示例
    指令 说明
    SETEX: LD TRUE 当前值为 TRUE
    S START 当前值为 TRUE,START 变量值写 TRUE 且保持
    LD FALSE 当前值为 FALSE
    S STOP 当前值为 FALSE,STOP 变量保持不变
    RESETEX: LD TRUE 当前值为 TRUE
    R STOP 当前值为 TRUE,STOP 变量值写 FALSE 且保持
    59
    S 表示有条件的输出 ST 指令,R 表示有条件的输出 STN 指令。当前结果寄存器
    为 1 时,S 操作数指令执行置位操作,R 操作数指令执行复位操作。而当前结果寄存
    器为 0 时,指令不执行。
    4. 逻辑运算类指令
    传统 PLC 指令表编程语言中也有逻辑类运算指令,但操作范围一般局限于位,指
    令除 AND、OR 等外,也有用 A、O 等指令,小型 PLC 通常不设 XOR 指令。标准指
    令集定义的逻辑运算指令有 AND(N)、OR(N)、XOR(N)和 NOT 等。指令的具
    体格式如下:
    逻辑运算操作符 操作数
    逻辑运算操作符 N 操作数
    可表示为下列形式:
    AND 操作数 或 ANDN 操作数 或 &操作数 或 &N 操作数
    OR 操作数 或 ORN 操作数
    XOR 操作数 或 XORN 操作数
    NOT 操作数
    逻辑运算操作符包括与(AND 或 &)、或(OR)、非(NOT)和异或(XOR)等
    逻辑运算,将当前结果寄存器的内容与操作数内容进行规定的逻辑运算,并将运算结
    果存放到当前结果寄存器。逻辑运算操作符 N 是上述逻辑运算符与 N 修正符的组合,
    是将当前结果寄存器的内容与数据存储单元内容的取反结果进行规定的逻辑运算,并
    将运算结果存放到当前结果寄存器中。
    在标准指令表编程语言中,逻辑运算类指令的操作数只能是一个。但操作范围可
    以是对位、字节、字、双字和长字的逻辑运算,它们对其中的每个位进行相应的逻辑
    运算。
    例 3-6 电动机控制程序
    LD A (* 存取符号变量即启动按钮A的信号 *)
    OR C (* 与输出变量 C 进行“或”运算,实现触点自保 *)
    ANDN B (* 与停止按钮 B 的取反信号进行"与"逻辑运算 *)
    ST C (* 输出到输出变量即接触器 C 的信号 *)
    例 3-6 与例 3-3 是典型的电动机控制程序。注意:输入变量 A、B 和输出变量 C
    都是符号变量,传统的 PLC 程序较多使用直接变量,使用符号变量的好处是代码复
    用比较方便。
    5. 算术运算类指令
    算术运算类指令包括 ADD(加)、SUB(减)、MUL(乘)、DIV(除)和 MOD
    (模除)等。指令的具体格式如下:
    60
    OR
    XOR
    NOT
    N,(
    N,(
    N,(
    N,(
    ANY
    ANY
    ANY
    ANY
    ANY
    布尔逻辑与
    布尔逻辑与
    布尔逻辑或
    布尔逻辑异或
    布尔逻辑反(取反)
    AND, NOT, ANDI,
    ORI, ANI, OR,
    AD, ORD, INV
    ADD
    SUB
    MUL
    DIV
    MOD
    (
    (
    (
    (
    (
    ANY
    ANY
    ANY
    ANY
    ANY
    加
    减
    乘
    除
    模除
    ADD, SUB,
    MUL, DIV
    52
    续表
    操作符 修正符 操作数 说明
    传统 PLC 操作符和
    修正符示例
    GT
    GE
    EQ
    NT
    LE
    LT
    (
    (
    (
    (
    (
    (
    ANY
    ANY
    ANY
    ANY
    ANY
    ANY
    比较:大于
    比较:大于或等于
    比较:等于
    比较:不等于
    比较:小于或等于
    比较:小于
    GMP,GT,GE,
    EQ,NE,LE,LT
    JMP
    RET
    C,N
    C,N
    LABEL
    NAME
    跳转到标号
    从被调用的函数、功能块和程序返回
    JMP,IME
    CAL C,N 调用功能块
    ) 计算延缓的操作
    (2)数据类型的过载属性使运算变得方便。传统 PLC 指令对不同数据类型的运
    算要用不同的指令,IEC 61131-3 采用相同的指令实现。例如整数加指令和实数加指
    令在传统 PLC 中是不同的指令,而 IEC 61131-3 中采用相同的指令 ADD 即可实现。
    同时数据类型的过载属性简化了数据类型转化指令等。
    (3)采用圆括号可以方便地将程序块组合。传统 PLC 指令集对程序块的操作采
    用专用指令,如 AND LD、OR LD、AND、ORB 等,标准提供圆括号,使程序可以
    在圆括号内部执行,从而简化指令。此外,主控指令和主控返回指令、条件转移和返
    回指令等也可以用圆括号的方式实现。
    (4)采用边沿检测属性的方法对信号设置了微分功能,简化了指令集。传统 PLC
    中,各种指令都可以采用微分指令,即在边沿条件满足时只执行一次。标准中将这些
    指令用数据类型的边沿检测属性来区分,从而大大简化指令。例如,传统 PLC 指令集
    的 PLS 和各种指令的微分指令等在标准中都被边沿检测属性代替。
    (5)数据传送指令可直接用赋值函数 MOVE 实现。因为该函数具有数据类型过
    载属性,所以使数据传送指令得到简化。
    (6)设置时间类型文字和数据类型,使定时器定时设定信号的输入变得简单。传
    统 PLC 的定时器设定时间不仅与设定数值有关,还与所采用的时基时钟信号有关。在
    IEC 61131-3 中,用 Time 事件类型数据可直接设置有关的时间。设定时间也因数据类
    型过载属性而使设定时间范围大大扩展,能够满足工业应用的要求。传统 PLC 由于
    存储单元范围的限制,对长计时或长计数的应用项目,通常要用多个定时器和计数器
    串联来实现。
    (7)数据存储变得简单。传统 PLC 沿用电气控制的习惯,采用输入、输出、专用
    继电器等分类,容易造成数据存储的出错。IEC 61131-3 对数据存储采用按数据类型
    分类存储的方法,数据存储更为简单安全。
    (8)不需要 END 标志。POU 等有 END_PROGRAM 等结束标志,因此采用标
    53
    准规定的指令编程时,程序的结束不需要 END 标志。
    (9)不再用控制器、处理器状态位,直接用比较操作结果作为条件跳转的依据,跳
    转更加简洁统一。
    IEC 61131-3 指令表编程语言的指令集见表 3-1。表中的操作符可以有 0、1 或 2
    个修正符。例如 OR 有 OR、OR(、ORN 和 ORN(4 种格式,修正符 N 表示对操作符运
    算的结果取反(NOT 指令操作的是当前结果寄存器);JMP 有 JMP、JMPC、JMPCN
    3 种格式,修正符 C 表示所连接的操作符指令只有在当前运算结果的布尔值为 1 时
    才执行,而与“CN”修正符结合时,当操作结果的布尔值为 0 时才执行;跳转和返回
    指令中的操作数含义比较确定,JMP 指令操作需配有一个可以跳转执行的标号指令,
    CAL 的操作数是一个被调用的功能块的实例名,RET 操作符不需要操作数。
    比较操作符是将当前结果与操作数比较,满足比较条件时比较结果的布尔值为 1。
    例如当前结果为 2#0000_0101,则比较指令 GT ub 执行时,如果变量 ub 的内容大于
    2#0000_0101,则比较结果为 1,反之为 0。
    左圆括号“(”表示操作符的运算被延缓直到遇到右圆括号“)”,可用来实现传统
    PLC 中的程序块操作。
    操作数可以是常量或符号变量,表 3-1 中 ANY 类型的操作数具有过载功能,可
    以是任何一种基本数据类型。例如,ADD I4 表示当前值与变量 I4 的内容相加,结果
    作为当前值;OR %IX1.2 表示将当前结果与位置变量输入单元 1 的第 2 位进行或逻
    辑运算,结果作为当前值;JMP Step2 表示当前计算值的布尔值为 1 时,从标号 Step2
    的位置开始执行。RET 是无操作数的操作符,当执行到该指令时,程序将返回到函数
    调用的后一条指令处执行。
    在传统 PLC 中,不同制造商产品的位置变量地址规则是不同的,例如可以直接
    用 0000 表示存储器的第 1 个 0 位,也可以用 I0.0 表示第 1 个 0 位等。IEC 61131-3
    则实现了地址规则的标准化,用%表示这些存储单元是直接表示变量的地址,用位置
    前缀表示输入(I)、输出(Q)和存储器(M)单元。用位(X)、字节(B)、字(W)、
    双字(D)和长字(L)表示数据存储单元的大小前缀,HPAC 的位置变量地址规则见
    1.5.1 节。
    3.1.3 指令分类
    本节依次介绍指令表编程语言的 9 类指令。
    1. 数据读取类指令
    数据读取类指令用于读取操作数对应数据单元的内容,传统 PLC 中包括了 LD
    (Load)、LD NOT、STR(Start)、XIC、XIO 等指令。标准指令集统一为 LD 和 LDN
    指令实现数据的读取和读取取反。LD 是 Load 的缩写,对常开触点的数据读取用 LD
    指令;LDN 是 Load Not 的缩写,是 LD 操作符加修正符 N 组合的指令,对常闭触点
    的数据读取用 LDN 指令。指令具体格式如下:
    54
    LD 操作数(* 将操作数指定的单元内容作为当前结果存储 *)
    LDN 操作数(* 将操作数指定的单元内容取反后作为当前结果存储 *)
    LD 或 LDN 的操作数是对相应的常量或变量进行读取,读取的数据被放在当前结
    果寄存器,称为当前值。标准对操作数的数据类型没有特别规定,该指令可以读取基
    本数据的任意数据类型。
    表 3-2 是 LD 和 LDN 指令的一些示例。
    表 3-2 LD 和 LDN 指令示例
    指令 说明 当前结果寄存器的数据类型
    LD FALSE 当前值为 FALSE 布尔量
    LD 1.123 当前值为 1.123 实数
    LD T#1s 当前值为时间常数 1s 时间类型
    LD A1 当前值为变量 A1 的值 A1 的数据类型
    LDN BOOL_A1 当前值为布尔型变量 BOOL_A1 的值取反 布尔量
    数据存取类指令的执行过程如图 3-1(c)所示。
    图 3-1(a)中的梯形图代码与图 3-1(b)中的指令表代码对应,图 3-1(c)中用
    “Res”表示当前结果寄存器。LD 指令执行后,会把读取的数据保存到当前结果寄存
    器,原当前结果寄存器的数据则被压到堆栈的下一层 S[.1];对常闭触点或动断触点,
    采用逻辑取反指令 LDN,该操作是把地址为%IX0.1 的输入状态寄存器状态取反,并
    把取反的结果传送到当前结果寄存器。
    %IX0.0
    %IX0.1 %QX0.1
    %QX0.0
    %IX0.0
    %IX0.0输入状态寄存器
    %IX0.1输入状态寄存器
    %QX0.0
    %IX0.1
    %QX0.1
    LD
    ST
    LDN
    ST
    取反 Res
    S[-1]
    …
    Res
    S[-1]
    …
    (a) (b) (c)
    图 3-1 LD 和 LDN 指令执行过程
    (a)梯形图代码;(b)指令表代码;(c)指令的执行过程
    2. 数据输出类指令
    输出类指令用于将当前结果寄存器 Res 的内容传送到输出寄存器,传统 PLC 中
    的输出类指令一般包括 OUT、Q、OUT NOT、OTE 等指令。标准指令集定义了 ST
    和 STN 指令实现数据的输出和取反输出,ST 是 Store 的缩写,STN 是 Store Not 的
    缩写,是 ST 操作符加修正符 N 组合的指令,具体格式如下:
    55
    ST 操作数(* 将当前结果存储到操作数指定的单元 *)
    STN 操作数(* 将当前结果取反后存储到操作数指定的单元 *)
    表 3-3 是 ST 和 STN 指令的一些示例。
    表 3-3 ST 和 STN 指令示例
    指令 说明
    LD TRUE 当前值为 TRUE
    ST A1 当前值为 TRUE,A1 变量值为 TRUE
    STN A2 当前值为 TRUE,A2 变量值为 FALSE
    LD T#1s 当前值为 1s
    ST Ton1.PT 当前值为 1s,Ton1 的 PT 值为 1s
    与继电器的逻辑电路相似,对激励线圈用 ST 指令,例如 ST %QX0.0 指令执
    行输出到%QX0.0 激励线圈的操作;从寄存器看,该操作是把当前结果寄存器 Res
    的状态传送到地址为%QX0.0 的输出状态寄存器。对失励线圈用 STN 指令,例如
    STN %QX0.2 指令执行输出到%QX0.2 失励线圈的操作;从寄存器看,该操作是把
    当前结果寄存器 Res 的状态取反,并把取反的结果传送到地址为%QX0.2 的输出状态
    寄存器。
    图 3-2(c)显示了输出类指令的执行过程。注意:在执行 ST 和 STN 指令后,当
    前运算结果并未出栈,仍被保留在当前结果寄存器的存储单元中。
    图 3-2 ST 和 STN 指令执行过程
    (a)梯形图代码;(b)指令表代码;(c)指令执行的过程
    传统 PLC 有 3 类存储器,分别是输入、输出存储器,当前结果寄存器和堆栈。存
    取机制如下:当执行 LD 指令时,CPU 从操作数对应的输入存储器读取数据并存放到
    当前结果寄存器;当执行 OUT 指令时,当前结果寄存器的内容传送到输出存储器。
    IEC 61131-3 规定的存取机制与传统 PLC 类似,但有下列区别:传统 PLC 中,存
    储器是位存储器,只能存储位的内容,而 IEC 61131-3 的存储器可以存储位、字节、字、
    双字、长字及字符等各种数据类型的数据或变量,更为简洁灵活。
    56
    例 3-2 存取机制
    VAR
    A1 , A2 , A3: INT :=5;
    STR1: WORD :=123;
    STR2: WORD;
    END_VAR
    LD A1 (* 将 A1 内容送当前结果寄存器,即当前结果寄存器的内容为整数 5 *)
    ADD A2 (* 将 A2 内容与当前结果寄存器内容相加后的结果,即 10,送当前结果
    寄存器 *)
    ST A3 (* 将当前结果寄存器内容,即 10,送 A3,使 A3 的内容从 5 变为 10 *)
    LD STR1 (* 将 STR1 的内容送当前结果寄存器,即当前结果寄存器的内容为位串 123 *)
    ST STR2 (* 将当前结果寄存器内容,即 123,送 STR2 *)
    在例 3-2 中,A1、A2 和 A3 是内部变量,初始值均为 5,STR1 和 STR2 是 16 位
    长度的位串,STR1 的初始值为 123。执行过程中,当前结果寄存器的内容从整数类型
    变为 16 位的位串。由于存储器存储数据的类型可以变化,因此连续两个运算之间应
    注意数据类型的匹配。
    例 3-3 8 台电动机的启保停控制
    VAR_INPUT
    Start : BYTE;
    Stop : BYTE;
    END_VAR
    VAR_OUTPUT
    Motor : BYTE;
    END_VAR
    LD Start (* 读取 Start 的数据 *)
    OR Motor (* 与 Motor 的数据进行 OR 运算 *)
    ANDN Stop (* 将当前结果寄存器的内容与 Stop 的数据进行 ANDN 操作 *)
    ST Motor (* 将当前结果送至 Motor *)
    该系统的接线图如图 3-3 所示。
    图 3-3 8 台电动机启保停控制接线图
    57
    用 BYTE 类型存放 8 台电动机的启动和停止信号按钮,其中常开触点 0.X 接
    Start 字节输入,常闭触点 1.X 接 Stop 输入,激励线圈 0.Y 接电动机继电器,成组实
    现了 8 台电动机的启保停控制,不必把例 3-1 的代码写 8 遍。
    例 3-4 数据类型的错误匹配
    VAR
    A1 , A2 , A3: INT :=5;
    BB : DWORD;
    END_VAR
    LD A1 (* 将 A1 内容送当前结果寄存器,即当前结果寄存器的内容为 5 *)
    ADD 33 (* 将整数 33 与当前结果寄存器的内容相加的结果,即 38,送当前结果寄存器 *)
    ST A2 (* 将当前结果寄存器的内容,即 38,送 A2,使 A2 的内容从 5 变为 38 *)
    LD A3 (* 将 A3 内容送当前结果寄存器,即当前结果寄存器的内容为 5 *)
    ST BB (* 出错,因 BB 数据类型 DWORD 与 A3 数据类型不匹配 *)
    在例 3-4 中,执行 LD A1 后,当前结果寄存器内的数据是整数 A1,因此可与整
    数 33 相加,将结果 38 送回当前结果寄存器。但在执行 LD A3 后,不能将该数据输
    出到 DWORD 数据类型的 BB 中,修改 BB 类型为 INT 后即可正确编译执行。
    开发者应注意当前结果寄存器 Res 内的数据类型是可以改变的,表 3-4 给出了当
    前结果寄存器的操作规则。
    表 3-4 当前结果寄存器的操作规则
    改变 Res 数据类型的操作 缩写 示例
    Create(建立) C LD
    Process(处理) P GT,GE,LT,ADD,SUB,AND,OR
    Leave unchanged(保持不变) U ST,JMPC,CALC,RETC
    Set to undefined(设置为未定义) — CAL 功能块
    当功能块被调用时,随后的指令必须重新装载到当前结果寄存器,因为当从被调
    用的功能块返回时,当前结果寄存器内是未定义值的。在功能块中的第一个指令也应
    是 LD、JMP、CAL 或 RET 指令,这些指令不要求当前结果寄存器有值。
    保持不变的几条指令不改变当前结果寄存器的数据类型和值。例如,ST 指令执行
    后,在当前结果寄存器中仍保持原有的输出结果。
    例 3-5 改变当前结果寄存器的数据类型
    VAR
    A1 , A2 , A3: INT :=8;
    END_VAR
    LAB1: LD A1 (* 将 A1 内容送当前结果寄存器,即当前结果寄存器的内容为 8 *)
    ADD 2 (* 整数 2 与当前结果寄存器的内容相加后的结果 10 送当前结果寄
    存器 *)
    58
    ST A2 (* 将当前结果寄存器的内容,即 10,送 A2,使 A2 的内容从 8
    变为 10 *)
    ST A3 (* 当前结果寄存器的内容没有改变,为 10,因此 10 被送到 A3 *)
    GT 5 (* 当前结果寄存器的内容大于 5,使当前

最近浏览过的书籍