当前位置:文档之家› ABB AC500系列PLC指令与功能块手册

ABB AC500系列PLC指令与功能块手册

ABB AC500系列PLC指令与功能块手册
ABB AC500系列PLC指令与功能块手册

技术资料

ABB AC500系列PLC指令与功能块手册

前言

AC500是ABB公司推出的一款可升级的和灵活的自动化控制系统,可完美地满足客户需求。此系统采用了底板上组合模块的结构, 包括多种CPU模块、通信接口模块、I/O模块及特殊功能模块等。同时,ABB公司还推出了功能强大的PS501编程软件及丰富的指令系统。

AC500系列PLC可为不同工业领域的用户提供个性化的解决方案,适用于逻辑控制、顺序控制、过程控制和传动控制等领域。

我们已尽全力保证该文件的正确性和完整性。但是,不可能有绝对没错的文件,因而欢迎您随时向我们提出宝贵的意见和建议。

如何使用本手册

如果已经熟练掌握PS501编程软件,直接通过目录查找需要的指令。

如果刚刚开始学习PS501编程软件,建议阅读“第1章 AC500 PLC指令概述”。

如果对PLC所使用的操作数与数据类型不是很了解,建议阅读第2、3章。

附录包含指令速查表、IEC标准指令表、指令关联冲突速查表。

目录

1.指令系统概述 (2)

1.1 指令的定义与分类 (2)

1.2 指令库的定义与分类 (9)

1.2.1 基本指令库 (9)

1.2.2 扩展指令库 (9)

1.3指令库的添加 (9)

1.4 指令系统使用注意事项 (9)

2.操作数 (2)

2.1常数 (2)

2.1.1 BOOL常数 (9)

2.1.2 TIME常数 (9)

2.1.3 DATA常数 (9)

2.1.4 TIME_OF_DAY常数 (9)

2.1.5 DATE_AND_TIME常数 (9)

2.1.6 数值常数 (9)

2.1.7 REAL/LREAL常数 (9)

2.1.8 STRING常数 (9)

2.1.9类型符 (9)

2.2 变量 (9)

2.2.1 变量 (9)

2.2.2 地址 (9)

2.2.3 存取数组、结构和POU变量 (9)

2.2.4 变量的位寻址 (9)

2.2.5 功能 (9)

3.数据类型 (2)

3.1 标准数据类型 (2)

3.1.1 布尔型数据类型 (2)

3.1.2 整型数据类型 (2)

3.1.3 实型数据类型REAL/LREAL (2)

3.1.6 时间常数 (2)

3.2 用户数据类型 (2)

3.2.1 数组 (2)

3.2.2 指针 (2)

3.2.3 枚举(ENUM) (2)

3.2.4 结构(STRUCT) (2)

3.2.5 参考类型(别名) (2)

3.2.6 子范围类型 (2)

4.基本指令 (2)

4.1 算术运算指令 (2)

4.1.1 ADD—加法指令 (9)

4.1.2 MUL—乘法指令 (9)

4.1.3 SUB—减法指令 (9)

4.1.4 DIV—除法指令 (9)

4.1.5 MOD—取余指令 (9)

4.2 赋值指令(MOVE) (2)

4.3逻辑运算指令 (2)

4.3.1 AND—与指令 (9)

4.3.2 OR—或指令 (9)

4.3.3 XOR—异或指令 (9)

4.3.4 NOT—取非指令 (9)

4.4移位指令 (2)

4.4.1 SHL—左移指令 (9)

4.4.2 SHR—右移指令 (9)

4.4.3 ROL—循环左移指令 (9)

4.4.4 ROR—循环右移指令 (9)

4.5选择指令 (2)

4.5.1 SEL—二选一指令 (9)

4.5.2 MAX—取最大值指令 (9)

4.5.5 MUX—多选一指令 (9)

4.6比较指令 (2)

4.6.1 GT—大于指令 (9)

4.6.2 LT—小于指令 (9)

4.6.3 GE—大于等于指令 (9)

4.6.4 LE—小于等于指令 (9)

4.6.5 EQ—等于指令 (9)

4.6.6 NE—不等于指令 (9)

4.7数据类型转换指令 (2)

4.7.1 BOOL_TO_—布尔类型转换指令 (9)

4.7.2 BYTE_TO_—字节类型转换指令 (9)

4.7.3 WORD_TO_—字类型转换指令 (9)

4.7.4 DWORD_TO_—双字类型转换指令 (9)

4.7.5 SINT_TO_—单整型转换指令 (9)

4.7.6 USINT_TO_—无符号单整型转换指令 (9)

4.7.7 INT_TO_—整数类型转换指令 (9)

4.7.8 UINT_TO_—无符号整数类型转换指令 (9)

4.7.9 DINT_TO_—双整数类型转换指令 (9)

4.7.10 UDINT_TO_—无符号双整数类型转换指令 (9)

4.7.11 REAL_TO_—实数类型转换指令 (9)

4.7.12 TIME_TO_—时间类型转换指令 (9)

4.7.13 DATE_TO_—日期类型转换指令 (9)

4.7.14 DT_TO_—日期时间类型转换指令 (9)

4.7.15 TOD_TO_—时间类型转换指令 (9)

4.7.16 STRING_TO_—字符类型转换指令 (9)

4.7.17 TRUNC—截短转换指令 (9)

4.8初等数学运算指令 (2)

4.8.1 ABS—绝对值指令 (9)

4.8.2 SQRT—平方根指令 (9)

4.8.5 EXP—指数指令 (9)

4.8.6 SIN—正弦指令 (9)

4.8.7 COS—余弦指令 (9)

4.8.8 TAN—正切指令 (9)

4.8.9 ASIN—反正弦指令 (9)

4.8.10 ACOS—反余弦指令 (9)

4.8.11 ATAN—反正切指令 (9)

4.8.12 EXPT—幂指令 (9)

4.9地址运算指令 (2)

4.9.1 ADR—取地址指令 (9)

4.9.2 ^—取地址内容指令 (9)

4.9.3 BITADR—位地址指令 (9)

4.9.4 INDEXOF—索引指令 (9)

4.9.5 SIZEOF—数据类型大小指令 (9)

4.10调用指令(CAL) (2)

4.11初始化操作指令(INI) (2)

4.12 字符串处理指令(Standard.lib) (2)

4.12.1 CONCAT—合并字符串指令 (9)

4.12.2 DELETE—删除字符指令 (9)

4.12.3 FIND—查找字符串指令 (9)

4.12.4 INSERT—插入字符串指令 (9)

4.12.5 LEFT—左边取字符串指令 (9)

4.12.6 LEN—取字符串长度指令 (9)

4.12.7 MID—中间取字符串指令 (9)

4.12.8 REPLACE—替换字符串指令 (9)

4.12.9 RIGHT—右边取字符串指令 (9)

4.13 库版本信息检查指令(Util.lib) (2)

4.14 BCD码转换指令(Util.lib) (2)

4.14.1 BCD_TO_INT—BCD码转整型指令 (9)

4.15.1 EXTRACT—位提取指令 (9)

4.15.2 PACK—位整合指令 (9)

4.15.3 PUTBIT—位赋值指令 (9)

4.15.4 UNPACK—位拆分指令 (9)

4.16 高等数学运算指令(Util.lib) (2)

4.16.1 DERIVATIVE—微分 (9)

4.16.2 INTEGRAL—积分 (9)

4.16.3 STATISTICS_INT—整型统计 (9)

4.16.4 STATISTICS_REAL—实型统计 (9)

4.16.5 VARIANCE—平方偏差 (9)

4.17 控制器指令(Util.lib) (2)

4.17.1 PD—比例微分控制器 (9)

4.17.2 PID—比例积分微分控制器 (9)

4.17.3 PID_FIXCYCLE—比例积分微分控制器 (9)

4.18 信号发生器指令(Util.lib) (2)

4.18.1 BLINK—脉冲信号发生器 (9)

4.18.2 GEN—典型周期信号发生器 (9)

4.19 函数操纵器指令(Util.lib) (2)

4.19.1 CHARCURVE—特征曲线 (9)

4.19.2 RAMP_INT—整型限速 (9)

4.19.3 RAMP_REAL—实型限速 (9)

4.20 模拟量处理指令(Util.lib) (2)

4.20.1 HYSTERESIS—滞后 (9)

4.20.2 LIMITALARM—上下限报警 (9)

4.21 双稳态指令(Standard.lib) (2)

4.21.1 SR—置位优先双稳态器 (9)

4.21.2 RS—复位优先双稳态器 (9)

4.22 触发器指令(Standard.lib) (2)

4.22.1 R_TRIG—上升沿检测触发器 (9)

4.23.1 CTU—递增计数器 (9)

4.23.2 CTD—递减计数器 (9)

4.23.3 CTUD—递增递减计数器 (9)

4.24 定时器(Standard.lib) (2)

4.24.1 TP—普通定时器 (9)

4.24.2 TON—通电延时定时器 (9)

4.24.3 TOF—断电延时定时器 (9)

4.24.4 RTC—实时时钟 (9)

5.AC500扩展指令 (2)

5.1 外部系统库 (2)

5.1.1 BATT—读取电池状况 (9)

5.1.2 CLOCK—显示及校正时钟 (9)

5.1.3 CLOCK_DT—以“DT”格式显示及校正时钟 (9)

5.2 内部系统库 (2)

5.2.1 CPU_INFO—读取CPU类型 (9)

5.2.2 DIAG_ACK—确认一个错误 (9)

5.2.3 DIAG_ACK_ALL—确认一个错误类别的所有错误 (9)

5.2.4 DIAG_EVENT—生成一个错误事件 (9)

5.2.5 DIAG_GET—读取错误 (9)

5.2.6 DIAG_INFO—显示对所有还未被读取的错误的观察 (9)

5.2.7 FLASH_DEL—删除闪存中的一个数据段 (9)

5.2.8 FLASH_READ—从闪存中读取一个数据段 (9)

5.2.9 FLASH_WRITE—将一个数据段写到闪存中 (9)

5.2.10 IO_DIAG—读取I/O总线的诊断数据 (9)

5.2.11 IO_INFO—读取连到I/O总线的设备的数量 (9)

5.2.12 IO_MODULE_DIAG—读取I/O总线的模块诊断数据 (9)

5.2.13 IO_VERSION—读取I/O总线驱动的版本 (9)

5.2.14 RTS_INFO—读取CPU实时系统的版本 (9)

5.2.15 SD_READ—从SD卡读取一个数据段 (9)

5.2.17 SLOT_INFO—读取插槽信息 (9)

5.2.18 SYS_TIME—读取系统时间 (9)

5.3 Modbus库 (2)

5.3.1 COM_MOD_MAST—处理Modbus主机报文 (9)

5.4 ASCII通信库 (2)

5.4.1 COM_REC—通过一个“自由模式”的串行接口接收数据 (9)

5.4.2 COM_SEND—通过一个“自由模式”的串行接口发送数据 (9)

5.5 Ethernet库 (2)

5.5.1 ETH_MOD_INFO—从OpenModbus中读取关于TCP/IP处理的状态信息 (9)

5.5.2 ETH_MOD_MAST—在TCP/IP客户端(主机)报文上处理OpenModbus (9)

5.5.3 ETH_OWN_IP—输出自已的IP地址 (9)

5.5.4 ETH_UDP_INFO—从UDP/IP处理中读取状态信息 (9)

5.5.5 ETH_UDP_REC—从UDP/IP接收缓存中读取一个数据包 (9)

5.5.6 ETH_UDP_SEND—通过以太网UDP/IP发送一个数据包到一个工作站 (9)

5.5.7 ETH_UDP_STO—从超时数据缓存读取以太网UDP/IP超时数据包 (9)

5.5.8 IP_ADR_DWORD_TO_STRING—IP地址的格式转化 (9)

5.5.9 IP_ADR_STRING_TO_DWORD—IP地址的格式转化 (9)

5.6 PROFIBUS库 (2)

5.6.1 DPM_CTRL—将全局控制指令发送到DP从机 (9)

5.6.2 DPM_READ_INPUT—读取从机的输入数据,该从机没被指派给主机 (9)

5.6.3 DPM_READ_OUTPUT—读取从机的输出数据,该从机没被指派给主机 (9)

5.6.4 DPM_SET_PRM—将用户参数发送到DP从机 (9)

5.6.5 DPM_SLV_DIAG—获得DP从机的详细诊断数据 (9)

5.6.6 DPM_STAT—读出PROFIBUS通讯模块的状态 (9)

5.6.7 DPM_SYS_DIAG—读出所有DP从机的状态概述 (9)

5.6.8 DPV1_MSAC1_READ—从DPV1从机读取一个数据块 (9)

5.6.9 DPV1_MSAC1_WRITE—将一个数据块写到DPV1从机 (9)

6. 编程方式

附录 (2)

1A C500指令速查表 (2)

第1章指令系统概述

ABB公司AC500系列PLC为用户提供了丰富的指令,这些指令均可通过编程软件PS501进行调用,操作简单,使用方便。请注意,PS501 V1.2.1可以调用本手册介绍的所有指令。

1.1 指令的定义与分类

在可编程控制器中,使CPU完成某种操作或实现某种功能的命令及多个命令的组合称为指令,指令的集合称为指令系统。指令系统是可编程控制器硬件和软件的桥梁,是可编程控制器程序设计的基础。

PS501提供了丰富的指令,按照功能不同可分为转换指令、比较指令、类型转换指令、逻辑运算指令等类型。为了便于理解和记忆,我们把这些类型分为两大类,一类是基本指令,包括全部IEC标准规定指令、高等数学运算指令等,另一类是扩展指令,包括总线通讯应用指令、系统功能指令等。扩展指令都是通过功能块方式实现的,而且对应库的名字大都是以“XXX_AC500_Vxx”命名的,具体见附录。

AC500指令在编程软件中有函数和功能块两种实现方式。函数和功能块都是PS501软件的程序组织单元,都是预先编好的、实现某种功能的程序,功能块输出可以是一个或多个结果,每一个功能块实例都有一个相关的标识符(即实例名称),函数则不需要标识符,而且只有一个输出结果(即函数的返回值)。“附录AC500指令速查表”中注明了指令的实现方式,FUN表明指令是以函数方式实现,FB则表明指令是以功能块方式实现的。

提示:

1.2 指令库的定义与分类

编写PLC程序的过程中,经常会引用一些有库指令,如字符串处理指令、触发器指令、计数器指令、PID 控制器等等。把这些具有相关功能的指令集合起来进行存储,建立专门的指令库。

指令库是AC500 PLC指令代码的集合,所有的库都对应有库文件(库名.lib),调用某个库指令,必需载入相应的库文件。

按照库中指令代码功能不同将其分为基本指令库、扩展指令库两类:

基本指令库:指基本指令的集合。

扩展指令库:指扩展指令的集合,其库名大都数以“xxx_AC500_Vxx”命名。

按照库中指令执行代码所在位置的不同,指令库又可分为三类:

第一类:PS501内部开放指令库。指令执行代码存在于库文件之中,可以使用PS501软件打开库文件,对指令的执行代码进行修改,用户也可以自己制作内部库。当程序下装到PLC之中,占用用户程序空间较大。

第二类:PS501内部不开放指令库。指令执行代码存在于“库名.hex”文件之中,用户无法使用PS501软件打开库文件,对指令的执行代码进行修改。使用时应保证hex文件的文件名与lib文件的文件名一致,且存在于同一目录下。当程序下装到PLC之中,占用用户程序空间较大。

第三类:PS501外部指令库。指令执行代码已经存在于PLC底层系统之中,用户无法修改此类库所包含的执行代码。当程序下装到PLC之中,占用用户程序空间较少。

本指令库分类方法有助于读者对AC500指令系统的理解,进而更好的使用PS501软件设计程序,在下面介绍的基本指令库和扩展指令库中指出了各个指令库的类型(上面三种类型)。

提示:

1.2.1 基本指令库

●标准指令库Standard.lib

Standard.lib属于PS501外部库,在工程建立时自动添加,无需用户再次添加,包含的指令如图1-2-1所示。

图1-2-1

该库包含的AC500指令的含义如表1-2-1所示

表1-2-1

● 应用指令库Util.lib 和Util_no_Real.lib

Util.lib 与Util_no_Real.lib 属于PS501内部开放指令库,使用时需用户载入。Util.lib 包含的AC500指

令如图1-2-2所示。

应用指令库Util.lib

图1-2-2

该库包含的AC500指令的含义如表1-2-2所示。

表1-2-2

应用指令库Util_no_Real.lib

Util_no_Real.lib 包含的AC500指令如图1-2-3所示。

图1-2-3

提示:

● 系统指令库SysLibCallBack.lib

SysLibCallback.lib 属于PS501外部库,其包含的AC500指令如图1-2-4所示。SysLibCallback.lib 在工程建立时自动载入,无需用户再次载入。

图1-2-4

该库指令实现以下功能:

◆ 事件调用(SysCallbackRegister ) ◆ 解除事件调用(SysCallbackUnregistrer) ●

检查指令库Check.lib

Check.lib 属于PS501内部开放库,其包含的AC500指令分别如图1-2-5所示。

图1-2-5

该库中指令可实现以下功能:

◆被除数为零检查功能

◆边界检查功能

●IEC动作指令库Iecsfc.lib

Iecsfc.lib属于PS501内部开放库,其中只包含一个指令如图1-2-6所示。

图1-2-6

该库可实现以下功能:

提示:

1.2.2 扩展指令库

扩展指令库包括ASCII、Ethernet、Profibus、Modbus通信应用库及数据存储功能块库等,如图1-2-7所示。

图1-2-7

1.3 指令库的添加

使用库时,需要保证相应的库文件存在于如下目录:“PS501安装目录\Library\”。

启动PS501,选择“窗口/库文件管理器”,打开“库文件管理器”,点击右键,选择“添加库文件”,如图1-3-1所示。

图1-3-1

如图1-3-2,选择需要的库文件,点击“打开”,不论哪种库只需要打开对应的*.lib文件。

上面选择的库被添加到列表中,该库所包含的指令显示在列表下方的图框位置中。

1.4 指令系统使用注意事项

上升沿使能,是指每当使能端由低电平变为高电平并一直保持高电平时,执行指令的相关功能。

上电/下装后首次使能有效,是指当使能端第一次由低电平变为高电平并一直保持高电平,执行指令的相关功能,以后再由低电平变为高电平将不会执行。如果要再次使用该指令,需要重新下装或再次上电。

在使用数学运算指令时,若输出数据定义的范围小于运算结果,则高位丢失。

若指令的实例名声明在RETAIN(掉电保持)区,该指令的所有输入/输出变量都要占用RETAIN内存区,所以建议不要在RETAIN内存区声明太多的实例,以免RETAIN区空间不足。

在梯形图(LD)编程环境下,插入使能运算符与插入功能块是两种不同的指令调用方式。其不同在于,如果采用插入使能运算符调用指令,当使能端低电平时,相应的指令代码不会被扫描,如果采用插入功能块调用指令,不论使能端低电平或高电平时,相应指令代码都会将使能端作为一个输入值来扫描。

第2章操作数

在可编程控制器中,指令系统是可编程控制器硬件和软件的桥梁,是可编程控制器程序设计的基础。

与计算机的操作指令类似,可编程控制器指令的基本形式也是由操作码和操作数组成。操作码表示CPU 所要执行的操作类型和所要完成的操作功能。操作数表示CPU所要操作的对象和目的。常量、变量、地址和函数调用返回值都可以作为操作数。

2.1常数

2.1.1BOOL常数

BOOL常数为逻辑值TRUE(真)与逻辑值FALSE(假)。

2.1.2 TIME常数

TIME常数可以在PS501中声明。这些常数一般用于标准库的定时器操作。一个TIME常数总是由一个起始符“T”或“t”(或者用“TIME”或“time”)和一个数字标识符“#”组成。然后,是跟随的实际时间声明,包括天数(“d”标识)、小时(“h”标识)、分钟(“m”标识)、秒(“s”标识)和毫秒(“ms”标识)。请注意时间各项必须根据时间长度单元顺序进行设置(d在h之前,h在m之前,m在s之前,s在ms之前),但无须包含所有的时间长度单位。

在ST语言的赋值语句中,正确使用时间常数的示例如下:

下面的示例不正确:

2.1.3 DATE常数

这些常数可以用来输入日期。声时一个DATE常数时,起始符为“d”,“D”,“DATE”或“date”后跟随一个“#”号。然后你就可以按照年-月-日的格式输入任何日期。

示例:

2.1.4 TIME_OF_DAY常数

使用这种类型常数可以保存一天中的不同时间。一个TIME_OF_DAY常数的声明使用起始符“tod#”,“TOD#”,“TIME_OF_DAY#”,或“time_of_day#”,后跟随一个时间格式为:小时:分:秒的时

间。秒值可以是实数也可是小数。

示例:

2.1.5 DATA_AND_TIME常数

日期常数和一天中的时间常数可以合并起来构成一个所谓的DATE_AND_TIME常数。DATE_AND_TIME常数的起始符为“dt#”,“DT#”,“DATE_AND_TIME#”或“date_and_time#”。在日期之后用(-)字符连接时间。

示例:

2.1.6 数值常数

数值可以用二进制数、八进制数、十进制数和十六进制数表示。假如一个整数不是十进制数,你必须在该整数常数之前写出它的基数并加上数字符号(#)。在十六进制中,数值10-15通常由字母A-F表示。你可以在数值中使用下划线。

示例:

这些数值可以是变量类型BYTE,WORD,DWORD,SINT,USINT,INT,UINT,DINT,UDINT,REAL或LREAL。不允许隐式地将较大的变量类型转换为较小的变量类型。这就意味着,一个DINT变量不能简单地作为INT变量。你必须使用类型转换功能才能做到这种转换。

2.1.7 REAL/LREAL常数

REAL和LREAL常数可以使用十进制小数和指数形式表示。使用带小数点的美国格式表示实数(REAL/LREAL)。

2.1.8 STRING常数

一个字符串是一个字符队列。STRING(字符串)常数使用一个单引号作为其前缀和后缀。也可以输入空格和专用字符(如音符)。这些字符将同所有其它字符一样进行处理。在字符对列中,($)号和后面跟随的两个十六进制数组合被解释为八位字符码的十六进制表示。此外,以$作为起始符的两个字符的组合,其含义

如下表示,并以字母的顺序排列。

示例:

‘abb!!’

‘ABB and Class’

‘:-)’

2.1.9 类型符

通常,对IEC常数,有可能使用最小的数据类型。如果必需使用另一种数据类型。则可借助于类型符而不需要显式地声明常数。为此,常数可以使用一个前缀表示,该前缀决定了其类型。

其格式为:#

指定所要求的数据类型,可能的数据类型是:BOOL,SINT,USINT,BYTE,INT,UINT,WORD,DINT, UDINT,DWORD,REAL,LREAL。类型必须使用大写字母。

指定常数。输入的数据必须与下指定的数据类型相匹配。

示例:

Var1:=DINT#34;

如果常数不能保证在不丢失数据的情况下转换为目标类型,系统将发出一个出错信息。类型符可以用于一般常数。

2.2变量

2.2.1 变量

变量可以在一个POU的声明部分作为本地变量进行声明或在全局变量列表中进行声明。使用中应注意以下几点:

变量名不能包含空格和专用字符,同一变量不能进行多次声明,也不能与任何关键字同名。

变量名不区分大小写。(如:VAR1、Var1和var1表示相同的变量)

相关主题
文本预览
相关文档 最新文档