可编程序控制器(PLC)知识总结
参考博图软件以及西门子S7-1200/1500PLC学习手册
本文章用于记录学习总结
一、PLC概述、结构和工作原理
可编程序控制器(Programmable Logic Controller)简称PLC,是一种数字运算操作的电子系统,它采用可编程序的存储器,用来在其内部存储执行逻辑运算、顺序控制、定时、计数和算术运算等操作的指令,并通过数字、模拟的输入和输出,控制各种类型的机械或生产过程。
(一)PLC的特点与功能
PLC的主要特点:
(1) 抗干扰能力强,可靠性高;
(2) 程序简单易学,系统的设计调试周期短;
(3) 安装简单,维修方便;
(4) 采用模块化结构,体积小,重量轻;
(5) 丰富的I/O接口模块,扩展能力强;
PLC的功能:
(1) 控制功能:逻辑控制、定时控制、计数控制、顺序控制;
(2) 数据采集、存储与处理功能:数学运算功能、数据与模拟数据处理,有的还具有PID功能;
(3) 输入/输出接口调理功能:具有A/D、D/A转换功能,通过I/O模块完成对模拟量的控制和调节;
(4) 通信、联网功能:PLC通信包括PLC相互之间、PLC与上位计算机以及和其他智能设备之间的通信;
(5) 人机界面功能:
(6) 编程、调试功能:使用复杂程度不同的手持、便携和桌面式编程器、工作站和操作屏,进行编程、调试、监视、试验和记录,并通过打印机打印出程序文件。
(二)PLC基本结构
可编程序控制器的功能结构区由CPU(中央处理器)、存储器和输入接口/输出接口三部分组成。
(三)PLC工作过程
PLC的运行程序的方式与微型计算机相比有较大的不同,微型计算机运行程序时,一旦执行到END指令,程序便运行结束;而PLC从0号存储地址所存放的第一条用户程序开始,在无中断或跳转的情况下,按存储地址号递增的方向顺序逐条执行用户程序,直到END指令结束。然后再从头开始执行,并周而复始地重复,直到停机或者运行状态为STOP,把PLC执行程序的这种工作方式称为扫描工作方式。每扫描完一次程序就构成了一个扫描周期。另外,PLC对输入、输出信号的处理与微型计算机不同。微型计算机对输入、输出信号实时而PLC对输入、输出信号是集中批处理。
(四)PLC的扫描过程
PLC扫描的工作方式主要分为三个阶段:输入扫描、程序执行和输出刷新。
(五)PLC品牌
目前PLC得到广泛应用。其中最为代表的公司有德国的西门子公司、AEG公司,法国的TE(施耐德)公司,美国的A-B公司,日本的小型的PLC具有一定的特色,知名品牌有三菱、欧姆龙、松下、富士等。目前我国使用的小型PLC主要以日本和国产的品牌为主,而大中型PLC主要以欧美品牌为主。
本知识总结主要以西门子S7-1200/1500来介绍。
二、S7-1500硬件及系统特性介绍
SIMATIC S7 系列产品分为:S7-200、S7-200CN、S7-200 SMART、S7-300、S7-400、S7-1200和S7-1500共七个产品系列。SIMATIC产品除了SIMATIC S7外还有M7、C7和WinAC系列。这里主要简单介绍S7-1500系列PLC。
(一)S7-1500PLC硬件介绍
S7-1500系列PLC主要用于中高端工厂自动化控制系统,适合较复杂的应用。S7-1500 CPU模块有标准型,紧凑型,分布式三种类型。SIMATIC S7-1500标准型控制器如下图所示:
SIMATIC S7-1500组态编程使用STEP 7 V13 Update4 或者以上版本,支持的编程语言有LAD、FBD、SCL、STL、GRAPH。中央机架最大支持32个模块:CPU +31个模块(I/O、通讯、电源),机架是采用单排配置,所有模块都在一个导轨上,通过U型连接器连接。超过这些可通过ET 200MP分布式 I/O进行扩展。S7-1500的通讯模块主要有DP、PN、以太网。S7-1500 CPU 标配以太网端口,PROFIBUS接口。S7-1500PLC有两种电源:系统电源(PS)和负载电源(PM)。
S7-1500标准型CPU连接的信号模块和ET200MP的信号模块是相同的,信号模块分为数字量模块和模拟量模块。数字量模块分为:数字量输入模块(DI)、数字量输出模块(DQ)和数字量输入/输出混合模块(DI/DQ)。模拟量模块分为:模拟量输入模块(AI)、模拟量输出模块(AQ)和模拟量输入/输出混合模块(AI/AQ)。
(二)S7-1500PLC系统性能
S7-1500PLC相对于300/400性能上有明显提升:响应时间短,提高了生产效率;缩短了程序扫描周期;CPU位指令处理时间最短可达1ns;集成运动控制,可控制高达128轴。
CPU配置显示面板:统一纯文本诊断信息,缩短停机和诊断时间;即插即用,无需编程;可设置操作密码;可设置CPU的IP地址。
配置PROFINET标准接口:具有PN IRT功能,可确保精准的响应时间以及工厂设备的高精度工作;集成具有不同IP地址的标准以太网口和PROFINET网口;集成网络服务器,可通过网页浏览器快速浏览诊断信息。
优化的诊断机制:STEP7、HMI、Web Server、CPU显示面板支持统一数据显示,可进行高效故障分析;集成系统诊断功能,模块系统诊断功能支持即插即用模式;即便CPU处于停止模式,也不会丢失系统故障和报警信息。
关于S7-1500PLC的详细介绍参考西门子S7-1200/1500PLC学习手册第三章。
三、TIA博图(Portal)软件的安装与介绍
TIA博途平台包含:SIMATIC STEP 7、SIMATIC WinCC 、SINAMICS Startdrive。
(1) SIMATIC STEP 7:STEP 7是用于组态S7-1200、S7-1500、S7-300/400和WinAC控制器系列的工程组态软件。
(2) SIMATIC WinCC:WinCC是一种可视化软件,组态SIMATIC面板(触摸屏)、SIMATIC工业PC以及标准PC的工程组态软件。
(3) SINAMICS Startdrive:此软件能够直观的将SINAMICS变频器集成到自动化环境中。由于具有相同操作概念,消除了接口瓶颈,并且具有较高的用户友好性,因此可将SINAMICS变频器快速集成到自动环境中,并使用TIA博途对它们进行调试。
关于软件安装,先安装STEP7(对PLC的编程),再安装WinCC(用于对触摸屏的编程),最后安装PLCSIM(用于PLC的仿真,不需要可以不用安装),Sim_EKB_Install_2017_04_01是获取西门子许可证的工具软件。
软件界面介绍参考:西门子S7-1200/1500PLC学习手册第四章。
四、编程语言学习
(一)编程语言
STEP 7所支持的PLC编程语言非常丰富。该软件的标准版支持STL(语句表)、LAD(梯形图)及FBD(功能块图)3种基本编程语言,并且在STEP 7中可以相互转换。专业版附加对GRAPH(顺序功能图)、SCL(结构化控制语言)、HiGraph(图形编程语言)、CFC(连续功能图)等编程语言的支持。不同的编程语言可供不同知识背景的人员采用。下面着重介绍最常用的三种编程语言:LAD、FBD、SCL。
1.LAD(梯形图)
LAD(梯形图)是一种图形语言,比较形象直观,容易掌握,用得最多,堪称用户第一编程语言。梯形图与继电器控制电路图的表达方式极为相似,适合于熟悉继电器控制电路的用户使用,特别适用于数字量逻辑控制。
常规指令有如下:
—| |—常开触点:当操作数的信号状态为“1”时,常开触点将关闭,同时输出的信号状态置位为输入的信号状态。当操作数的信号状态为“0”时,不会激活常开触点,同时该指令输出的信号状态复位为“0”。
—|/|—常闭触点:当操作数的信号状态为“1”时,常闭触点将打开,同时该指令输出的信号状态复位为“0”。当操作数的信号状态为“0”时,不会启用常闭触点,同时将该输入的信号状态传输到输出。
—( )—线圈:可以使用“赋值”指令来置位指定操作数的位。如果线圈输入的逻辑运算结果 (RLO) 的信号状态为“1”,则将指定操作数的信号状态置位为“1”。如果线圈输入的信号状态为“0”,则指定操作数的位将复位为“0”。
梯形图编程原则:
① 每一逻辑行总是起于左母线,最后终止于线圈或右母线(右母线可以不画出)。
② 无论选择哪种机型的PLC,所用元件的编号必须在该机型的有效范围内。
③ 触点的使用次数不受限制。
④ 在梯形图中同一线圈只能出现一次。如果在程序中,同一线圈使用了两次或多次,称为“双线圈输出”。对于“双线圈输出”,有些PLC视为语法错误,绝对不允许(如三菱FX系列PLC);有些PLC则将前面的输出视为无效,只有最后一次输出有效(如西门子PLC);而有些PLC在含有跳转指令或步进指令的梯形图中允许双线圈输出。
⑤ 对于不可编程的梯形图必须经过等效变换,变成可编程图形。
⑥ 在有几个串联电路相并联时,应将串联触点多的回路放在上方,归纳为“上多下少”的原则;在有几个并联电路相串联时,应将并联触点多的回路放在左方,归纳为“左多有少”的原则。因为这样所编制的程序简洁明了,语句较少。
⑦ 为了安全考虑,PLC输入端子上接入的停止按钮和急停按钮,应使用常闭触点,而不应使用常开触点。
2.FBD(功能块图)
FBD(功能块图)使用类似于布尔代数的图形逻辑符号来表示控制逻辑,一些复杂的功能用指令框表示。FBD比较适合于有数字电路基础的编程人员使用。
&:“与”运算:可以使用指令“与”运算来查询两个或更多指定操作数的信号状态,并根据“与”运算的真值表评估这些信号状态。当操作数“TagIn_1”和“TagIn_2”的信号状态为“1”时,输出“TagOut”将置位,当操作数“TagIn_1”和“TagIn_2”为“0”时,该输出将复位。
≥1:“或”运算:可以使用指令“或”运算来查询两个或更多指定操作数的信号状态,并根据“或”运算的真值表评估这些信号状态。如果操作数“TagIn_1”或“TagIn_2”的信号状态为“1”,则输出“TagOut”将置位。
取反 RLO:可以使用“取反 RLO”指令对逻辑运算结果 (RLO) 的信号状态进行取反。满足以下条件时,将置位输出“TagOut”:输入“TagIn_1”和/或“TagIn_2”的信号状态为“0”;输入“TagIn_3”和/或“TagIn_4”的信号状态为“0”,或者输入“TagIn_5”的信号状态为“1”。
=:赋值:可以使用“赋值”指令来置位指定操作数的位。 如果该功能框输入逻辑运算结果 (RLO) 的信号状态为“1”,则指定操作数的信号状态将置位为“1”。 如果该功能框输入的信号状态为“0”,指定操作数的位将复位为“0”。
3.SCL(结构化控制语言)
S7-SCL(Structured Control Language:结构控制语言)是一种类似于PASCAL的高级文本编辑语言,可以简化数学计算、数据管理和组织工作。
① 选择语句
选择语句有IF和CASE,其使用方法和C语言等高级计算机语言的用法类似,其功能如下表所示。
语句 | 说明 |
---|---|
IF | 是二选一的语句,判断条件是“TRUE”或者“FALSE”控制程序进入不同的分支进行执行 |
CASE | 是一个多选语句,根据变量值,程序有多个分支 |
IF:条件执行
IF <condition> THEN <instructions>
END_IF;
CASE:创建多路分支
CASE _variable_name_ OF
1: // Statement section case 1;
2..4: // Statement section case 2 to 4;
ELSE // Statement section ELSE;
END_CASE;
② 循环语句
S7-SCL提供的循环语句有三种:FOR语句、WHILE语句和REPEAT语句,其功能如下表所示。
语句 | 说明 |
---|---|
FOR | 只要控制变量在指定的范围内,就重复执行语句序列 |
WHILE | 只要一个执行条件满足,某一语句就周而复始地执行 |
REPEAT | 重复执行某一语句,知道终止该程序的条件满足为止 |
FOR:在计数循环中执行
FOR INDEX:=1 TO 50 BY 2 DO
// Statement section FOR;
END_FOR;
WHILE:满足条件时执行
WHILE _condition_ DO
// Statement section WHILE;
END_WHILE;
REPEAT:终止的条件满足前执行
REPEAT
INDEX:=INDEX+2;//循环执行
UNTIL INDEX>50
END_REPEAT
③ 程序跳转语句
在S7-PLC中的跳转语句有四种:CONTINUE语句、EXIT语句、GOTO语句和RETURN语句。其功能说明如下表所示。
语句 | 说明 |
---|---|
CONTINUE | 用于终止当前循环反复执行 |
EXIT | 不管循环终止条件是否满足,在任意点退出循环 |
GOTO | 使程序立即跳转到指定的标号处 |
RETURN | 使得程序跳出正在执行的块 |
(二)变量与数据类型
1.变量
PLC中的变量的定义包含变量名称、数据类型、地址、保持性、其他功能与注释。
要求:允许使用字母、数字、特殊字符;不建议使用这些预留的关键字:int、byte等;变量名称中不允许使用双引号。
常用地址:
I:输入映像寄存器
Q:输出映像寄存器
M:中间寄存器
L:临时变量寄存器
PI:(外部输入寄存器)
PQ:(外部输出寄存器)
T:(定时器)、C:(计数器)
DB: 数据寄存器
保持性:可保持/不可保持
可保持:断电后重启数据仍然保持;
不可保持:断电后数据不会保持。
注:若CPU出现重大故障后停机,则所有数据丢失。
2.基本数据类型
3.复杂数据类型
(1)数组(ARRAY)
数组是由一组同一类型的数据组合在一起而形成的复杂数据类型。数组的维数最大可以到6维;数组中的元素可以是基本数据类型或者复杂数据类型中的任一数据类型(Array类型除外,即数组类型不可以嵌套);数组中每一维的下标取值范围是-32768~32767,要求下标的下限。
(2)结构(STRUCT)
结构是由一组不同类型(结构的元素可以是基本的或复杂的数据类型)的数据组合在一起而形成的复杂数据类型。结构通常用来定义一组相关的数据。
(3) 字符串(STRING)
字符串是最多有254个字符(CHAR)的一维数组,最大长度为256个字节(其中前两个字节用来存储字符串的长度信息)。字符串常量用单引号括起来。
(4)日期和时间(DATE_AND_TIME)
用于存储年、月、日、时、分、秒、毫秒和星期,占用8个字节,用BCD格式保存。星期天的代码为1,1~6的代码为2~7。
(5)用户定义的数据类型(UDT)
用户定义数据类型表示自定义的结构,存放在UDT块中(UDT1~UDT65535),在另一个数据类型中作为一个数据类型“模板”。当输入数据块时,如果需要输入几个相同的结构,利用UDT可以节省输入时间。
(6)功能块类型(FB、SFB)
这种数据类型仅可以在FB的静态变量区定义,用于实现多背景DB。
4.参数数据类型
参数类型是一种用于逻辑块(FB、FC)之间传递参数的数据类型,主要有以下几种:
(1)TIMER(定时器)和COUNTER(计数器)。
(2)BLOCK(块):指定一个块用作输入和输出,实参应为同类型的块。
(3)POINTER(指针):6字节指针类型,用来传递DB的块号和数据地址。
(4)ANY:10字节指针类型,用来传递DB块号、数据地址、数据数量以及数据类型。
(三)程序中的块
PLC内块的分类与使用:
OB:组织块,不需要调用(不允许)直接执行,每一个组织块都具有自己相应的功能。
FC:函数,是没有专用存储区的代码块。FC中形参与实参必须一一对应(即每一个形参都必须有一个实参)。
FB:函数块,是将自身的值永久存储在背景数据块中的代码块,从而在块执行后这些值仍然可用。
DB:数据块,保存程序数据。大致分为全局数据块和背景数据块。
1.线性程序(线性编程)
所谓线性程序结构,就是将整个用户程序连续放置在一个循环程序块(OB1)中,块中的程序按顺序执行,CPU通过反复执行OB1来实现自动化控制任务。这种结构和PLC所代替的硬接线继电器控制类似,CPU逐条地处理指令。事实上所有的程序都可以用线性结构实现,不过,线性结构一般适用于相对简单的程序编写。
2.分部式程序(分部编程、分块编程)
所谓分部程序,就是将整个程序按任务分成若干个部分,并分别放置在不同的功能(FC)、功能块(FB)及组织块中,在一个块中可以进一步分解成段。在组织块OB1中包含按顺序调用其他块的指令,并控制程序执行。
在分部程序中,既无数据交换,也不存在重复利用的程序代码。功能(FC)和功能块(FB)不传递也不接收参数,分部程序结构的编程效率比线性程序有所提高,程序测试也较方便,对程序员的要求也不太高。对不太复杂的
控制程序可考虑采用这种程序结构。
3.结构化程序(结构化编程或模块化编程)
所谓结构化程序,就是处理复杂自动化控制任务的过程中,为了使任务更易于控制,常把过程要求类似或相关的功能进行分类,分割为可用于几个任务的通用解决方案的小任务,这些小任务以相应的程序段表示,称为块(FC或FB)。OB1通过调用这些程序块来完成整个自动化控制任务。
结构化程序的特点是每个块(FC或FB)在OB1中可能会被多次调用,以完成具有相同过程工艺要求的不同控制对象。这种结构可简化程序设计过程、减小代码长度、提高编程效率,比较适合于较复杂自动化控制任务的设计。
(四)位逻辑运算
位逻辑指令用于二进制数的逻辑运算。位逻辑运算的结果简称为RLO。位逻辑指令是常用的指令之一,主要有与运算指令、与非运算指令、或运算指令、或非运算指令、置位运算指令、复位运算指令、嵌套指令和线圈指令等。
LAD指令 | 功能描述 | 功能描述 |
---|---|---|
—( R )— | 复位输出 | 可以使用“复位输出”指令将指定操作数的信号状态复位为“0” |
—( S )— | 置位输出 | 使用“置位输出”指令,可将指定操作数的信号状态置位为“1” |
SET_BF | 置位位域 | 使用“置位位域”(Set bit field) 指令,可对从某个特定地址开始的多个位进行置位 |
RESET_BF | 复位位域 | 可以使用“复位位域”(Reset bit field) 指令复位从某个特定地址开始的多个位 |
SR | 置位/复位触发器 | 可以使用“置位复位触发器”指令,根据输入 S 和 R1 的信号状态,置位或复位指定操作数的位 |
RS | 复位/置位触发器 | 使用“复位置位触发器”指令,根据 R 和 S1 输入端的信号状态,复位或置位指定操作数的位 |
– | P | – |
– | N | – |
–§– | 在信号上升沿置位操作数 | 可以使用“在信号上升沿置位操作数”指令在逻辑运算结果 (RLO) 从“0”变为“1”时置位指定操作数(<操作数 1>) |
–(N)– | 在信号下降沿置位操作数 | 可以使用“在信号下降沿置位操作数”指令在逻辑运算结果 (RLO) 从“1”变为“0”时置位指定操作数(<操作数 1>) |
P_TRIG | 扫描 RLO 的信号上升沿 | 使用“扫描 RLO 的信号上升沿”指令,可查询逻辑运算结果 (RLO) 的信号状态从“0”到“1”的更改 |
N_TRIG | 扫描 RLO 的信号下降沿 | 使用“扫描 RLO 的信号下降沿”指令,可查询逻辑运算结果 (RLO) 的信号状态从“1”到“0”的更改 |
R_TRIG | 检查信号上升沿 | 使用“检测信号上升沿”指令,可以检测输入 CLK 的从“0”到“1”的状态变化 |
F_TRIG | 检查信号下降沿 | 使用“检测信号下降沿”指令,可以检测输入 CLK 的从“1”到“0”的状态变化 |
注:具体参数用法参考手册。
(五)计数器
计数器的功能是完成计数功能,可以实现加法计数和减法计数。
(1) CTU:加计数:可以使用“加计数”指令,递增输出 CV 的值。
当“TagIn_1”操作数的信号状态从“0”变为“1”时,将执行“加计数”指令,同时“Tag_CV”操作数的当前计数器值加 1。每检测到一个额外的信号上升沿,计数器值都会递增,直至达到该数据类型的上限 (INT = 32767)。PV 参数的值作为确定“TagOut”输出的限制。只要当前计数器值大于或等于操作数“Tag_PV”的值,输出“TagOut”的信号状态就为“1”。在其它任何情况下,输出“TagOut”的信号状态均为“0”。
(2) CTD:减计数:可以使用“减计数”指令,递减输出 CV 的值。
当“TagIn_1”操作数的信号状态从“0”变为“1”时,执行该指令且“Tag_CV”输出的值减 1。每检测到一个信号上升沿,计数器值就会递减 1,直到达到所指定数据类型的下限 (INT = -32768)。只要当前计数器值小于或等于 0,“TagOut”输出的信号状态就为“1”。在其它任何情况下,输出“TagOut”的信号状态均为“0”。
(3) CTUD:加减计数:可以使用“加减计数”指令,递增和递减输出 CV 的计数器值。
如果输入“TagIn_1”或“TagIn_2”的信号状态从“0”变为“1”(信号上升沿),则执行“加减计数”指令。输入“TagIn_1”出现信号上升沿时,当前计数器值加 1 并存储在输出“Tag_CV”中。输入“TagIn_2”出现信号上升沿时,计数器值减 1 并存储在输出“Tag_CV”中。输入 CU 出现信号上升沿时,计数器值将递增,直至其达到上限值 32767。输入 CD 出现信号上升沿时,计数器值将递减,直至其达到下限 (INT=-32768)。只要当前计数器值大于或等于“Tag_PV”输入的值,“TagOut”输出的信号状态就为“1”。在其它任何情况下,输出“TagOut”的信号状态均为“0”。只要当前计数器值小于或等0,“TagOut_QD”输出的信号状态就为“1”。在其它任何情况下,输出“TagOut_QD”的信号状态均为“0”。
更多传统计数器参考博途中的信息系统。
(六)定时器
博途的SIMATIC定时器指令较为丰富,除了常用的接通延时定时器(SD)和断开延时定时器(SF)之外,还有脉冲定时器(SP)、扩展脉冲定时器(SE)和保持型接通延时定时器(SS)共5类。定时器有其存储区域,每个定时器有一个16位的字和一个二进制的值。定时器的字存放当前定时值。二进制的值表示定时器的接点状态。
(1) TP:生成脉冲:使用“生成脉冲”(Generate pulse) 指令,可以将输出 Q 置位为预设的一段时间。
当“Tag_Start”操作数的信号状态从“0”变为“1”时,PT 参数预设的时间开始计时,且“Tag_Status”操作数将设置为“1”。当前时间值存储在“Tag_ElapsedTime”操作数中。定时器计时结束时,操作数“Tag_Status”的信号状态复位为“0”。
(2) TON:生成接通延时:可以使用“生成接通延时”(Generate on-delay) 指令将 Q 输出的设置延时设定的时间 PT。
当“Tag_Start”操作数的信号状态从“0”变为“1”时,PT 参数预设的时间开始计时。超过该时间周期后,操作数“Tag_Status”的信号状态将置“1”。只要操作数 Tag_Start 的信号状态为“1”,操作数 Tag_Status 就会保持置位为“1”。当前时间值存储在“Tag_ElapsedTime”操作数中。当操作数 Tag_Start 的信号状态从“1”变为“0”时,将复位操作数 Tag_Status。
(3) TOF:生成关断延时:可以使用“生成关断延时”(Generate off-delay) 指令将 Q 输出的复位延时设定的时间 PT。
当操作数“Tag_Start”的信号状态从“0”变为“1”时,操作数“Tag_Status”的信号状态将置位为“1”。当“Tag_Start”操作数的信号状态从“1”变为“0”时,PT 参数预设的时间将开始计时。只要该时间仍在计时,“Tag_Status”操作数就会保持置位为 TRUE。该时间计时完毕后,“Tag_Status”操作数将复位为 FALSE。当前时间值存储在“Tag_ElapsedTime”操作数中。
(4) TONR:时间累加器:可以使用“时间累加器”指令来累加由参数 PT 设定的时间段内的时间值。
当“Tag_Start”操作数的信号状态从“0”变为“1”时,PT 参数预设的时间开始计时。只要操作数“Tag_Start”的信号状态为“1”,该时间就继续计时。当操作数“Tag_Start”的信号状态从“1”变为“0”时,计时将停止,并记录操作数 Tag_ElapsedTime 中的当前时间值。当操作数“Tag_Start”的信号状态从“0”变为“1”时,将继续从发生信号跃迁“1”到“0”时记录的时间值开始计时。达到 PT 参数中指定的时间值时,“Tag_Status”操作数的信号状态将置位为“1”。当前时间值存储在“Tag_ElapsedTime”操作数中。
(5)—( TP )—:启动脉冲定时器:使用“启动脉冲定时器”指令启动将指定周期作为脉冲的 IEC 定时器。
(6)—( TON )—:启动接通延时定时器:使用“启动接通延时定时器”指令启动将指定周期作为接通延时的 IEC 定时器。
(7)—( TOF )—:启动关断延时定时器:使用“启动关断延时定时器”指令启动将指定周期作为接通延时的 IEC 定时器。
(8)—( TONR )—:时间累加器:可以使用“时间累加器”指令记录指令“1”输入的信号长度。
(9)—( RT )—:复位定时器:使用“复位定时器”指令,可将 IEC 定时器复位为“0”。
(10)—( PT )—:加载持续时间:可以使用“加载持续时间”指令为 IEC 定时器设置时间。
更多传统定时器参考博途中的信息系统。
(七)移动指令
(1)MOVE:移动值:可以使用“移动值”指令将 IN 输入操作数中的内容传送给 OUT1 输出的操作数中。
如果操作数“TagIn”返回信号状态“1”,则执行该指令。该指令将操作数“TagIn_Value”的内容复制到操作数“TagOut_Value”,并将“TagOut”的信号状态置位为“1”。
(2)MOVE_BLK:块移动:可以使用“移动块”指令将一个存储区(源范围)的数据移动到另一个存储区(目标范围)中。
如果操作数“TagIn_1”和“TagIn_2”的信号状态为“1”,则执行该指令。从第三个元素开始,该指令选择 #a_array 变量中的三个 INT 元素,并将其内容复制到 #b_array 输出变量中,从第二个元素开始。如果该指令成功执行,则使能输出 ENO 的信号状态为“1”,同时置位输出“TagOut”。
(3)UMOVE_BLK:不可中断的存储区移动:可以使用“不可中断的存储区移动”(Move block uninterruptible) 指令将一个存储区(源范围)的数据移动到另一个存储区(目标范围)中。
如果操作数“TagIn_1”和“TagIn_2”的信号状态为“1”,则执行该指令。从第三个元素开始,该指令选择 #a_array 变量中的三个 INT 元素,并将其内容复制到 #b_array 输出变量中,从第二个元素开始。此移动操作不会被操作系统的其它任务打断。如果成功执行该指令,则输出 ENO 的信号状态为“1”,并将置位输出“TagOut”。
(4)FILL_BLK:填充块:可以使用“填充存储区”指令,用 IN 输入的值填充一个存储区域(目标范围)。
如果操作数“TagIn_1”和“TagIn_2”的信号状态为“1”,则执行该指令。该指令从操作数从第一个元素开始,将 #FillValue 的值复制到 #TargetArea 输出变量中三次。如果成功执行该指令,则将 TagOut 和“ENO”使能输出的信号状态置位为“1”。
(5)UFILL_BLK:不可中断的存储区填充:可以使用“不可中断的存储区填充”(Fill block uninterruptible) 指令,用 IN 输入的值填充一个存储区域(目标范围)。该指令不可中断。
如果操作数“TagIn_1”和“TagIn_2”的信号状态为“1”,则执行该指令。该指令从操作数从第一个元素开始,将 #FillValue 的值复制到 #TargetArea 输出变量中三次。此移动操作不会被操作系统的其它任务打断。如果成功执行该指令,则将 TagOut 和“ENO”使能输出的信号状态置位为“1”。
(6)SWAP:交换:可以使用“交换”指令更改输入 IN 中字节的顺序,并在输出 OUT 中查询结果。
如果操作数“TagIn”的信号状态为“1”,则执行“交换”指令。字节的顺序已更改,并存储在操作数“TagOut_Value”中。
(八)比较指令
比较指令可以对如整数、双整数、实数等数据类型的数值进行比较。比较指令对输入操作数1和输入操作数2进行比较,如果比较结果为真,则逻辑运算结果RLO为“1”,反之则为“0”。比较的两个数必须数据类型相同。
LAD指令 | 功能描述 | 说明 |
---|---|---|
CMP == | 等于 | 可以使用“等于”指令判断第一个比较值(<操作数 1>)是否等于第二个比较值(<操作数 2>) |
CMP <> | 不等于 | 使用“不等于”指令判断第一个比较值(<操作数 1>)是否不等于第二个比较值(<操作数 2>) |
CMP >= | 大于或等于 | 可以使用“大于或等于”指令判断第一个比较值(<操作数 1>)是否大于或等于第二个比较值(<操作数 2>) |
CMP > | 大于 | 可以使用“大于”指令确定第一个比较值(<操作数 1>)是否大于第二个比较值(<操作数 2>) |
CMP < | 小于 | 可以使用“小于”指令判断第一个比较值(<操作数 1>)是否小于第二个比较值(<操作数 2>) |
----I OK I---- | 检查有效性 | 可使用“检查有效性”指令检查操作数的值(<操作数>)是否为有效的浮点数 |
—I NOT_OK I– | 检查无效性 | 可使用“检查无效性”指令检查操作数的值(<操作数>)是否为无效的浮点数 |
OUT_RANGE | 值超出范围 | 可以使用“值超出范围”指令查询输入 VAL 的值是否超出指定的取值范围 |
IN_RANGE | 值在范围内 | 可以使用“值在范围内”指令查询输入 VAL 的值是否在指定的取值范围内 |
EQ_Type | 比较数据类型与变量数据类型是否“相等” | 可以使用“比较 EQUAL 的数据类型与一个变量的数据类型”指令查询 VARIANT 指向的一个变量的数据类型 |
NE_Type | 比较数据类型与变量数据类型是否“不相等” | 可以使用“比较数据类型与变量数据类型是否“不相等””指令查询 VARIANT 指向的变量没有的数据类型 |
EQ_ElemType | 比较 ARRAY 元素数据类型与变量数据类型是否“相等” | 可以使用“比较 ARRAY 元素数据类型与变量数据类型是否“相等””指令查询 VARIANT 指向的变量的数据类型 |
NE_ElemType | 比较 ARRAY 元素数据类型与变量数据类型是否“不相等” | 可以使用“比较 ARRAY 元素数据类型与变量数据类型是否“不相等””指令查询 VARIANT 指向的变量没有的数据类型 |
IS_NULL | 检查 EQUALS NULL 指针 | 可以使用“检查 EQUALS NULL 指针”指令查询 VARIANT 是否指向 NULL 指针而没有指向对象 |
NOT_NULL | 检查 UNEQUALS NULL 指针 | 可以使用“检查 UNEQUALS NULL 指针”指令查询 VARIANT 是否不指向 NULL 指针,而是指向对象 |
IS_ARRAY | 检查 ARRAY | 可以使用“检查 ARRAY”指令查询 VARIANT 是否指向 ARRAY 数据类型的变量 |
(九)数学函数
数学函数非常重要,在模拟量的处理、PID的控制等很多场合都要用到数学函数指令。
LAD指令 | 功能描述 | 说明 |
---|---|---|
ADD | 加 | 使用“加”指令,将输入 IN1 的值与输入 IN2 的值相加,并在输出 OUT(OUT:= IN1+IN2)处查询总和 |
SUB | 减 | 使用“减”指令,将输入 IN2 的值从输入 IN1 的值中减去,并在输出 OUT(OUT:= IN1-IN2)处查询差值 |
MUL | 乘 | 使用“乘”指令,将输入 IN1 的值与输入 IN2 的值相乘,并在输出 OUT(OUT:= IN1*IN2)处查询乘积 |
DIV | 除 | 可以使用“除”指令,将输入 IN1 的值除以输入 IN2 的值,并在输出 OUT (OUT := IN1/IN2) 处查询商值 |
MOD | 返回除法的余数 | 可以使用“返回除法的余数”指令,将输入 IN1 的值除以输入 IN2 的值,并通过输出 OUT 查询余数 |
NEG | 取反 | 可以使用“取反 ”指令,更改输入 IN 的值符号,并通过输出 OUT 查询结果。 例如,如果输入 IN 为正值,则该值的负等效值将发送到输出 OUT |
INC | 递增 | 可以使用“递增”指令将参数 IN/OUT 操作数的值更改为下一个较大的值并查询结果 |
DEC | 递减 | 可以使用“递减”指令将参数 IN/OUT 操作数的值更改为下一个较小的值并查询结果 |
ABS | 计算绝对值 | 可以使用“计算绝对值”指令计算输入 IN 指定的值的绝对值。 该指令的结果存储在输出 OUT 中,可供查询 |
MIN | 获取最小值 | “获取最小值”指令比较可用输入的值,并将最小的值写入输出 OUT 中。在指令框中可以通过其它输入来扩展输入的数量 |
MAX | 获取最大值 | “获取最小值”指令比较可用输入的值,并将最小的值写入输出 OUT 中。在指令框中可以通过其它输入来扩展输入的数量 |
LIMIT | 设置限值 | 可以使用“设置限值”指令,将输入 IN 的值限制在输入 MN 与 MX 的值范围之间 |
SQR | 计算平方 | 可以使用“计算平方”指令计算输入 IN 的浮点值的平方,并将结果写入输出 OUT |
SQRT | 计算平方根 | 可以使用“计算平方根”指令计算输入 IN 的浮点值的平方根,并将结果写入输出 OUT |
LN | 计算自然对数 | 使用“计算自然对数”指令,可以计算输入 IN 处值以 (e = 2.718282) 为底的自然对数。 计算结果将存储在输出 OUT 中,可供查询 |
EXP | 计算指数值 | 可以使用“计算指数值”指令,以 e (e = 2.718282e) 为底计算输入 IN 的值的指数, 并将结果存储在输出 OUT 中,可供查询 (OUT = eIN) |
SIN | 计算正弦值 | 可以使用“计算正弦值”指令计算一个角度的正弦。 在输入 IN 中以弧度为单位指定角度值。 该指令的结果存储在输出 OUT 中,可供查询 |
COS | 计算余弦值 | 可以使用“计算余弦值”指令计算角度的余弦。在输入 IN 中以弧度为单位指定角度值。 该指令的结果存储在输出 OUT 中,可供查询 |
TAN | 计算正切值 | 可以使用“计算正切值”指令计算一个角度的正切。在输入 IN 中以弧度为单位指定角度值。该指令的结果存储在输出 OUT 中,可供查询 |
ASIN | 计算反正弦值 | 可以使用“计算反正弦值”指令,根据输入 IN 指定的正弦值,计算与该值对应的角度值。 输入 IN 中指定的值只能是 -1 到 +1 范围内的有效浮点数。计算出的角度值以弧度为单位,在输出 OUT 中输出,范围在 -π/2 到 +π/2 之间 |
ACOS | 计算反余弦值 | 可以使用“计算反余弦值”指令,根据输入 IN 指定的余弦值,计算与该值对应的角度值。 输入 IN 中指定的值只能是 -1 到 +1 范围内的有效浮点数。 计算出的角度值以弧度为单位,在输出 OUT 中输出,范围在 0 到 +π 之间 |
ATAN | 计算反正切值 | 可以使用“计算反正切值”指令,根据输入 IN 指定的正切值,计算与该值对应的角度值。 输入 IN 中的值只能是有效的浮点数(或 -NaN/+NaN)。 计算出的角度值以弧度形式在输出 OUT 中输出,范围在 -π/2 到 +π/2 之间 |
FRAC | 返回分数 | 可以使用“返回小数”指令确定输入 IN 的值的小数位。 查询结果存储在输出 OUT 并且可在那进行查询。 如果输入 IN 的值类似于 123.4567,则输出 OUT 的值为 0.4567 |
EXPT | 取幂 | 可以使用“取幂”指令使用输入 IN1 指定的值为幂对输入 IN2 的值进行幂运算。该指令的结果存储在输出 OUT |
(十)转换指令
转换指令是将一种数据格式转换成另一种数据格式进行存储。例如,要让一个整型数据和双整型数据进行算术运算,一般要将整型数据转换成双整形数据。
LAD指令 | 功能描述 | 说明 |
---|---|---|
CONVERT | 转换值 | “转换值”指令将读取参数 IN 的内容,并根据指令框中设置的数据类型对其进行转换。转换值存储在输出 OUT 中 |
ROUND | 取整 | 可以使用“取整”指令将输入 IN 的值四舍五入取整为最接近的整数。 该指令将输入 IN 的值解释为浮点数,并将其转换为最接近的整数。 如果输入值恰好是相邻偶数和奇数的平均数,则选择取整为偶数。 该指令的结果存储在输出 OUT 中,可供查询 |
CEIL | 浮点数向上取整 | 可以使用“浮点数向上取整”指令将输入 IN 的值向上取整为相邻整数。 该指令将输入 IN 的值解释为浮点数,并将其向上转换为相邻的较大整数。 该指令的结果存储在输出 OUT 中,可供查询。 输出值可以大于或等于输入值 |
FLOOR | 浮点数向下取整 | 可以使用“浮点数向下取整”指令将输入 IN 的值向下取整为相邻整数。 该指令将输入 IN 的值解释为浮点数,并将其向下转换为相邻的较小整数。 该指令的结果存储在输出 OUT 中,可供查询。 输出值可以小于或等于输入值 |
TRUNC | 截尾取整 | 可以使用“截尾取整”指令获取输入 IN 值的整数部分。 输入 IN 的值被解释为浮点数。 该指令仅选择浮点数的整数部分,并将其发送到输出 OUT 中,不带小数位 |
SCALE_X | 缩放 | 可以使用“缩放”指令,通过将输入 VALUE 的值映射到指定的值范围来对其进行缩放。 执行“缩放”指令时,会将输入 VALUE 的浮点数值缩放到由参数 MIN 和 MAX 指定的取值范围。 缩放操作的结果为整数,存储在输出 OUT 中 |
NORM_X | 标准化 | 可以使用“标准化”指令,通过将输入 VALUE 中变量的值映射到线性标尺对其进行标准化。 可以使用参数 MIN 和 MAX 定义(应用于该标尺的)取值范围的限值。 根据要标准化的值在其取值范围内的位置,计算出输出 OUT 的结果并将其另存为一个浮点数。 如果要标准化的值等于输入 MIN 的值,输出 OUT 将返回值“0.0”。 如果要标准化的值等于输入 MAX 的值,则输出 OUT 需返回值“1.0” |
(十一)字逻辑运算
自逻辑指令就是对16字或者32双字等逐位进行逻辑运算,一个操作数在累加器1,另一个操作数在累加器2,指令中也允许有立即数(常数)的形式输出。
LAD指令 | 功能描述 | 说明 |
---|---|---|
AND | “与”运算 | 可以使用“与”运算指令将输入 IN1 的值和输入 IN2 的值按位进行“与”运算,并在输出 OUT 中查询结果 |
OR | “或”运算 | 可以使用“或”运算指令将输入 IN1 的值和输入 IN2 的值按位进行“或”运算,并在输出 OUT 中查询结果 |
XOR | “异或”运算 | 可以使用“异或”运算指令将输入 IN1 的值和输入 IN2 的值按位进行“异或”运算,并在输出 OUT 中查询结果 |
INVERT | 求反码 | 可以使用“求反码”指令对输入 IN 的各个位的信号状态取反 |
DECO | 解码 | 可以使用“解码”指令,将输入值指定的输出值中的某个位置位。“解码”指令读取输入 IN 的值,并将输出值中位号与读取值对应的那个位置位。输出值中的其它位以零填充 |
ENCO | 编码 | 可以使用“编码”指令读取输入值中最低有效位的位号并将其发送到输出 OUT。“编码”指令选择输入 IN 值的最低有效位,并将该位号写入到输出 OUT 的变量中 |
SEL | 选择 | “选择”指令根据开关(输入 G)的情况,选择输入 IN0 或 IN1 中的一个,并将其内容复制到输出 OUT。如果输入 G 的信号状态为“0”,则移动输入 IN0 的值。如果输入 G 的信号状态为“1”,则将输入 IN1 的值移动到输出 OUT 中 |
MUX | 多路复用 | 可以使用指令“多路复用”将选定输入的内容复制到输出 OUT。可以扩展指令框中可选输入的编号。最多可声明 32 个输入 |
DEMUX | 多路分用 | 可以使用指令“多路分用”将输入 IN 的内容复制到选定的输出。可以在指令框中扩展选定输出的编号。在此框中自动对输出编号。编号从 OUT0 开始,对于每个新输出,此编号连续递增。可以使用参数 K 定义要将输入 IN 的内容复制到的输出 |
(十二)移位和循环
移位指令能够将累加器的内容逐位向左或者向右移动。移动的位数由N决定。向左移N位相当于累加器的内容乘以2N,向右移相当于累加器的内容除以2N。移位指令在逻辑控制中使用也很方便。
LAD指令 | 功能描述 | 说明 |
---|---|---|
SHR | 右移 | 可以使用“右移”指令将输入 IN 中操作数的内容按位向右移位,并在输出 OUT 中查询结果。参数 N 用于指定将指定值移位的位数。如果参数 N 的值为“0”,则将输入 IN 的值复制到输出 OUT 的操作数中 |
SHL | 左移 | 可以使用“左移”指令将输入 IN 中操作数的内容按位向左移位,并在输出 OUT 中查询结果。参数 N 用于指定将指定值移位的位数。如果参数 N 的值为“0”,则将输入 IN 的值复制到输出 OUT 的操作数中 |
ROR | 循环右移 | 可以使用“循环右移”指令将输入 IN 中操作数的内容按位向右循环移位,并在输出 OUT 中查询结果。参数 N 用于指定循环移位中待移动的位数。用移出的位填充因循环移位而空出的位。如果参数 N 的值为“0”,则将输入 IN 的值复制到输出 OUT 的操作数中 |
ROL | 循环左移 | 可以使用“循环左移”指令将输入 IN 中操作数的内容按位向左循环移位,并在输出 OUT 中查询结果。参数 N 用于指定循环移位中待移动的位数。用移出的位填充因循环移位而空出的位。如果参数 N 的值为“0”,则将输入 IN 的值复制到输出 OUT 的操作数中 |
(十三)程序控制指令
控制指令包括逻辑控制指令和程序控制指令。逻辑控制指令是指逻辑块中的跳转和循环指令。在没有执行跳转和循环指令之前,各语句按照先后顺序执行,也就是线性扫描。而逻辑控制指令终止了线性扫描,跳转到地址标号(Label)所指的地址,程序再次开始线性扫描。逻辑控制指令没有参数,只有一个地址标号。
LAD指令 | 功能描述 | 说明 |
---|---|---|
—( JMP ) | 若 RLO = “1” 则跳转 | 可以使用“若 RLO = “1” 则跳转”指令中断程序的顺序执行,并从其它程序段继续执行。目标程序段必须由跳转标签 (LABEL) 进行标识。在指令上方的占位符指定该跳转标签的名称。指定的跳转标签与执行的指令必须位于同一数据块中。指定的名称在块中只能出现一次。一个程度段中只能使用一个跳转线圈 |
—( JMPN ) | 若 RLO = "0"则跳转 | 当该指令输入的逻辑运算结果为“0”时,使用“若 RLO = “0” 则跳转”指令,可中断程序的顺序执行,并从其它程序段继续执行。目标程序段必须由跳转标签 (LABEL) 进行标识。在指令上方的占位符指定该跳转标签的名称。指定的跳转标签与执行的指令必须位于同一数据块中。指定的名称在块中只能出现一次。一个程度段中只能使用一个跳转线圈 |
LABEL | 跳转标签 | 可使用跳转标签来标识一个目标程序段。执行跳转时,应继续执行该程序段中的的程序。跳转标签与指定跳转标签的指令必须位于同一数据块中。跳转标签的名称在块中只能分配一次。CPU S7-1200 最多可以声明 32 个跳转标签,而 CPU S7-1500 最多可以声明 256 个跳转标签 |
SWITCH | 跳转分支指令 | 可以使用“跳转分支指令”根据一个或多个比较指令的结果,定义要执行的多个程序跳转。在参数 K 中指定要比较的值。将该值与各个输入提供的值进行比较。可以为每个输入选择比较方法。各比较指令的可用性取决于指令的数据类型 |
–(RET) | 返回 | 可使用“返回”指令停止有条件执行或无条件执行的块。程序块退出时,返回值(操作数)的信号状态与调用程序块的使能输出ENO 相对应 |
RET | 返回指令 | 每个程序段中只能使用一个跳转线圈 |
ENDIS_PW | 限制和启用密码合法性 | 每个程序段中只能使用一个跳转线圈 |
RE_TRIGR | 重置周期 | 监视时间 “重置周期监视时间”指令用于重新触发 CPU 的循环时间监控。根据 CPU 组态中所设置的时间,重新启动循环监视时间 |
STP | 退出程序 | “退出程序”指令用于将 CPU 设置为 STOP 模式,从而结束程序的运行。是否从 RUN 模式转换为 STOP 模式,具体取决于 CPU 的组态 |
GET_ERROR | 获取本地错误信息 | 可以使用“获取本地错误信息”指令查询程序块内的错误。通常为编程错误或访问错误。在程序块的执行过程中,如果系统报告了一个错误,则上一执行该指令后执行该块时发生第一个错误的详细信息将存储在输出 ERROR 处的操作数中 |
GET_ERR_ID | 获取本地错误 ID | 可以使用“获取本地错误 ID”指令查询块内发生的错误。该错误通常为访问错误。如果在上一次执行该指令后块执行过程中系统报告块执行错误,则将变量中所发生第一个错误的错误 ID 存储在输出 ID 中 |
INIT_RD | 初始化所有保留数据 | 可以使用“初始化所有保留数据”指令同时复位所有数据块、位存储器以及 SIMATIC 定时器和计数器中的保持性数据。由于该指令的执行时间超出程序周期的持续时间,因此只能在启动 OB 中执行 |
WAIT | 组态延时时间 | 可使用“组态延时时间”指令,将程序的执行过程暂停一段特定的时间。在该指令的参数 WT 中时间段的单位为微秒 |
RUNTIME | 测量程序运行时间 | “测量程序运行时间”指令用于测量整个程序、单个块或命令序列的运行时间 |
(十四)日期和时间
日期和时间指令是对两个时间变量进行比较,可以读取和写入系统时间和本地时间。
LAD指令 | 功能描述 | 说明 |
---|---|---|
T_COMP | 比较时间变量 | 此指令用于对数据类型为“定时器”或“日期和时间”的两个变量的内容进行比较 |
T_CONV | 转换时间并提取 | 使用指令“T_CONV”将 IN 输入参数的数据类型转换为 OUT 输出上输出的数据类型。从输入和输出的指令框中选择进行转换的数据格式 |
T_ADD | 时间加运算 | 使用该指令将 IN1 输入中的时间信息加到 IN2 输入中的时间信息上。可以在 OUT 输出参数中查询结果 |
T_SUB | 时间相减 | 使用该指令将 IN1 输入参数中的时间值减去 IN2 输入参数中的时间值。可通过输出参数 OUT 查询差值 |
T_DIFF | 时间值相减 | 使用该指令将 IN1 输入参数中的时间值减去 IN2 输入参数中的时间值。结果将发送到输出参数 OUT 中 |
T_COMBINE | 组合时间 | 该指令用于合并日期值和时间值,并生成一个合并日期时间值 |
WR_SYS_T | 设置时间 | 使用该指令,可设置 CPU 时钟的日期和时间(模块时间)。在输入参数 IN 中输入日期和时间 |
RD_SYS_T | 读取时间 | 可以使用该指令读取 CPU 时钟的当前日期和当前时间(模块时间) |
RD_LOC_T | 读取本地时间 | 使用该指令从 CPU 时钟读取当前本地时间,并将此时间在 OUT 输出中输出。在输出本地时间时,会用到夏令时和标准时间的时区和开始时间(已在 CPU 时钟的组态中设置)的相关信息 |
WR_LOC_T | 写入本地时间 | 指令“WR_LOC_T”用于设置 CPU 时钟的日期和时间。在输入参数 LOCTIME 中,输入日期和时间作为本地时间 |
SET_TIMEZONE | 使用指令“SET_TIMEZONE”设置进行本地时区和夏令时/标准时间切换的参数 | |
RTM | 运行时间定时器 | 可使用该指令对 CPU 的 32 位运行小时计数器执行设置、启动、停止和读取操作 |
TIME_TCK | 读取系统时间 | 使用指令“TIME_TCK”,可以读取 CPU 的系统时间。该系统时间是一个时间计数器,从 0 开始计数,直至最大值 2147483647 ms。发生溢出时,系统时间将重新从“0”开始计数 |
(十五)字符串+字符
LAD指令 | 功能描述 | 说明 |
---|---|---|
S_MOVE | 移动字符串 | 可以使用此指令将参数 IN 中字符串 (W)STRING 的内容写入在参数 OUT 中指定的数据区域。要复制数据类型为 ARRAY 的变量,可使用指令“MOVE_BLK”“UMOVE_BLK” |
S_COMP | 比较字符串 | 使用该指令,可比较两个 (W)STRING 格式的变量的内容,并将比较结果作为返回值输出。要比较的变量连接到输入 IN1 和 IN2 。只能为这些输入参数指定用符号定义的变量。使用指令框,可选择比较条件。如果满足比较条件(例如大于或等于),则输出参数 OUT 的信号状态将设置为“1” |
S_CONV | 转换字符串 | 使用该指令将 IN 输入中的值转换为 OUT 输出中指定的数据格式。通过为 OUT 输出参数选择数据类型,确定转换的输出格式 |
VAL_STRG | 将数字值转换为字符串 | 在 IN 输入参数中指定要转换的值。通过选择数据类型来决定数字值的格式。可以在 OUT 输出参数中查询转换结果 |
STRG_VAL | 将字符串转换为整数或浮点数 | 在 IN 输入参数中指定要转换的值。通过选择数据类型来决定数字值的格式。可以在 OUT 输出参数中查询转换结果 |
Strg_TO_Chars | 将字符串转换为 Array of CHAR | 通过指令“Strg_TO_Chars”,可将数据类型为 STRING 的字符串复制到 Array of CHAR 或 Array of BYTE 中;或将数据类型为 WSTRING 的字符串复制到 Array of WCHAR 或 Array of WORD 中。该操作只能复制 ASCII 字符 |
Chars_TO_Strg | 将 Array of CHAR 转换为字符串 | 通过指令“Chars_TO_Strg”,可将字符串从 Array of CHAR 或 Array of BYTE 复制到数据类型为 STRING 的字符串中;或将字符串从 ARRAY of WCHAR 或 Array of WORD 复制到数据类型为 WSTRING. 的字符串中。复制操作仅支持 ASCII 字符 |
MAX_LEN | 确定字符串的长度 | (W)STRING 数据类型的变量包含两个长度:最大长度和当前长度(即当前有效字符的数量) |
JOIN | 连接多个字符串 | “JOIN”指令可以将多个字符串连接为一个数组 |
SPLIT | 将字符数组分为多个字符串 | “SPLIT”指令会将数组 (Array of CHAR / WCHAR) 转换为多个单独的字符串(Array of STRING / WSTRING 或结构) |
(十六)中断
(1)启动组织块:Startup ,[OB 100]。“启动“OB 将在 PLC 的工作模式从 STOP 切换为 RUN 时执行一次。完成后,将开始执行主“程序循环“OB。
(2)循环中断组织块:Cyclic interrupt,[OB 30]。通过“循环中断”OB,可以定期启动程序,而无须执行循环程序。可以在本对话框或在该 OB 的属性中定义时间间隔。
指令 功能描述 说明
SET_CINT:设置循环中断参数 通过该指令,可置位循环中断 OB 的参数。根据 OB 的具体时间间隔和相位偏移,生成循环中断 OB 的开始时间。OB 的时间间隔是指周期调用该 OB 的时间间隔。相位偏移是指循环中断 OB 调用偏移的时间间隔。
QRY_CINT:查询循环中断参数 通过该指令,可查询循环中断 OB 的当前参数。该循环中断 OB 由 OB_NR 参数进行标识。查询的循环中断参数的值对应于执行“QRY_CINT”指令时的值。
(3)时间中断组织块:Time of day,[OB 10]。在指定时间可以启动时间 OB 一次或定期启动。
LAD指令 | 功能描述 | 说明 |
---|---|---|
SET_TINTL | 设置时间中断 | 指令“SET_TINTL”用于在用户程序中设置时间中断组织块的开始日期和时间,而不是在硬件配置中进行设置 |
CAN_TINT | 取消时间中断 | 指令“CAN_TINT”可用于删除指定时间中断组织块的开始日期和时间。这会取消激活时间中断,并且不再调用该组织块 |
ACT_TINT | 启用时间中断 | 指令“ACT_TINT”可用于从用户程序中激活时间中断组织块。在执行该指令之前,时间中断 OB 必须已设置了开始日期和时间 |
QRY_TINT | 查询时间中断的状态 | 可使用该指令在 STATUS 输出参数中显示时间中断组织块的状态 |
(4)延时中断组织块:Time delay interrupt,[OB 20]。指定的延时时间到达后,“延时中断” OB 将中断程序的循环执行。延时时间在扩展指令 “SRT_DINT” 的输入参数中指定。
LAD指令 | 功能描述 | 说明 |
---|---|---|
SRT_DINT | 启动延时中断 | 指令“SRT_DINT”用于启动延时中断,该中断在超过参数 DTIME 指定的延时时间后调用延时中断 OB。要进行延时中断,可执行一次延时中断 OB。如果延时中断未执行且再次调用指令“SRT_DINT”,则系统将删除现有的延时中断,并启动一个新的延时中断 |
CAN_DINT | 取消延时中断 | 该指令可用于取消启动的延时中断,因此也可在组态的延时时间后取消延时中断 OB 的调用。在 OB_NR 参数中,可以指定将取消调用的组织块编号 |
QRY_DINT | 查询延时中断状态 | 指令“QRY_DINT”用于查询延时中断的状态 |
(5)硬件中断组织块:Hardware interrupt,[OB 40]。硬件中断 OB 将中断程序的循环执行来响应硬件事件信号。这些事件必须已在所组态硬件的属性中定义。在使用此组织块时:
1、用设备组态CPU属性中的常规数字量输入,通道设置好上升沿、下降沿启用的硬件中断名称。
2、在系统和适中存储器,点开启用系统存储器字节。
(十七)分布式IO之组态与连接
采用分布式I/O模块,可以通过一条通信线和PLC连接,节省了布线,节省了PLC自身的I/O点数。
1、对西门子S7-1500来说,分布式I/O必须具备与TIA博途软件相匹配的GSD文件。
2、导入GSD文件,并把模块添加到设备组态内。
3、把CPU与分布式I/O相连,并且添加同一个网段的IP地址。
4、为分布式I/O添加输入输出。
5、确认分布式I/O的MAC地址。
6、在设备中查找分布式I/O并且进行分配IP地址与设备名称(IP地址与设备名称不能重复)。
7、查看分布式I/O有无报警,并测试输入输出是否正常。
LAD指令 | 功能描述 | 说明 |
---|---|---|
RDREC | 读取数据记录 | 使用指令“RDREC”从使用 ID 寻址的模块中读取编号为 INDEX 的数据记录。该模块可以是中央机架中的一个模块或一个分布式模块(PROFIBUS DP 或 PROFINET IO) |
WRREC | 写数据记录 | 指令“WRREC”用于将 RECORD 数据记录传送到地址为 ID 的组件中。该组件可以是中央机架中的一个模块或一个分布式组件(PROFIBUS DP 或 PROFINET IO) |