| 注册| 产品展厅| 收藏该商铺

行业产品

当前位置:
上海庆惜自动化设备有限公司>>西门子代理商>> 西门子代理商滁州西门子PLC系列代理商

滁州西门子PLC系列代理商

返回列表页
  • 滁州西门子PLC系列代理商
  • 滁州西门子PLC系列代理商
  • 滁州西门子PLC系列代理商
  • 滁州西门子PLC系列代理商
  • 滁州西门子PLC系列代理商
收藏
举报
参考价 88
订货量 1
具体成交价以合同协议为准
  • 型号 西门子代理商
  • 品牌 Siemens/西门子
  • 厂商性质 经销商
  • 所在地 上海市
在线询价 收藏产品

更新时间:2019-03-01 14:14:53浏览次数:427

联系我们时请说明是化工仪器网上看到的信息,谢谢!

同类优质产品

更多产品

产品简介

产地类别 进口
滁州西门子PLC系列代理商
中国已进入了经济“新常态"格局,企业面临转型升级的关键时刻。西门子以客户面临的挑战为驱动力,凭借的工程技术与创新能力,以电气化、自动化和数字化产品,解决方案和服务,为客户带来更大价值——更强的灵活性,更高的效率,更快的上市时间,实现可持续的发展。我们将这种力量称之为“博大精深,同心致远"。

详细介绍

                         滁州西门子PLC系列代理商

 

西门子PLC300系列的设计步骤与实例

S7-300系列PLC应用系统设计

PLC应用系统设计的内容和步骤

PLC应用系统的硬件设计

PLC应用系统的软件设计

PLC应用系统设计实例

PLC应用系统设计的内容和步骤

系统设计的原则与内容

1.设计原则

(1) 大限度地满足被控设备或生产过程的控制要求;

(2) 在满足控制要求的前提下,力求简单、经济,操作方便;

(3) 保证控制系统工作安全可靠;

(4) 考虑到今后的发展改进,应适当留有进一步扩展的余地。

2.设计内容

(1) 拟定控制系统设计的技术条件,它是整个设计的依据;

(2) 选择电气传动形式和电动机、电磁阀等执行机构;

(3) 选定PLC的型号;

(4) 编制PLC的输入输出分配表或绘制输入输出端子接线图;

(5) 根据系统要求编写软件说明书,然后再进行程序设计;

(6) 重视人机界面的设计,增强人与机器之间的友善关系;

(7) 设计操作台、电气柜及非标准电器元部件;

(8) 编写设计说明书和使用说明书。

系统设计和调试的主要步骤

1.深入了解和分析被控对象的工艺条件和控制要求

2.确定IO设备,常用的输入设备有按钮、选择开关、行程开关、传感器等,常用的输出设备有继电器、接触器、指示灯、电磁阀等。

3.选择合适的PLC类型, 根据已确定的用户IO设备,统计所需的输入信号和输出信号的点数,选择合适的PLC类型。

4.分配IO点,编制出输入输出端子的接线图。

5.设计应用系统梯形图程序,这一步是整个应用系统设计核心的工作。

6.将程序输入PLC,当使用计算机上编程时,可将程序下载到PLC中。

7.进行软件测试,在将PLC连接到现场设备上之前,必须进行软件测试,以排除程序中的错误。

8.应用系统整体调试,在PLC软硬件设计和控制柜及现场施工完成后,就可以进行整个系统的联机调试。调试中发现的问题要逐一排除,直至调试成功。

9.编制技术文件, 系统技术文件包括功能说明书、电气原理图、电器布置图、电气元件明细表、PLC梯形图等。

PLC选型

在满足控制要求的前提下,选型时应选择的性能价格比,具体应考虑以下几点。

1.性能与任务相适应

2.PLC的处理速度应满足实时控制的要求

3.PLC应用系统结构合理、机型系列应统一

4.在线编程和离线编程的选择

PLC容量估算

PLC容量包括两个方面:一是IO的点数,二是用户存储器的 容量。

1.IO点数的估算

根据功能说明书,可统计出PLC系统的开关量IO点数及模拟量IO通道数,以及开关量和模拟量的信号类型。应在统计后得出IO总点数的基础上,增加10%~15%的裕量。选定的PLC机型的IO能力极限值必须大于IO点数估算值,并应尽量避免使PLC能力接近饱和,一般应留有30%左右的裕量。

2. 存储器容量估算

用户应用程序占用多少内存与许多因素有关,如IO点数、控制要求、运算处理量、程序结构等。因此在程序设计之前只能粗略的估算。根据经验,每个IO点及有关功能器件占用的内存大致如下:

所需存储器容量(KB)=(1~1.25)×(DI×10+DO×8+AIO×100+CP×300)1024

其中:DI为数字量输入总点数;DO为数字量输出总点数;AIAO为模拟量IO通道总数;CP为通信接口总数。

IO模块的选择

1.开关量输入模块的选择

PLC的输入模块用来检测来自现场(如按钮、行程开关、温控开关、压力开关等)电平信号,并将其转换为PLC内部的低电平信号。开关量输入模块按输入点数分,常用的有8点、12点、16点、32点等;按工作电压分,常用的有直流5 V、12 V、24 V,交流110 V、220 V等选择输入模块主要应考虑以下两点:

(1) 根据现场输入信号(如按钮、行程开关)与PLC输入模块距离的远近来选择电压的高低。一般,24 V以下属低电平,其传输距离不宜太远。如12 V电压模块一般不超过10 m,距离较远的设备选用较高电压模块比较可靠。

(2) 高密度的输入模块,如32点输入模块,允许同时接通的点数取决于输入电压和环境温度。一般,同时接通的点数不得超过总输入点数的60%。

;按外部接线方式又可分为汇点输入、分隔输入等。

2.开关量输出模块的选择

输出模块的任务是将PLC内部低电平的控制信号转换为外部所需电平的输出信号,驱动外部负载。输出模块有三种输出方式:继电器输出、双向可控硅输出和晶体管输出。

1) 输出方式的选择

继电器输出价格便宜,使用电压范围广,导通压降小,承受瞬间过电压和过电流的能力较强,且有隔离作用。但继电器有触点,寿命较短,且响应速度较慢,适用于动作不频繁的交直流负载。当驱动电感性负载时,大开闭频率不得超过1 Hz。

晶闸管输出(交流)和晶体管输出(直流)都属于无触点开关输出,适用于通断频繁的感性负载。感性负载在断开瞬间会产生较高的反压,必须采取抑制措施

2) 输出电流的选择

模块的输出电流必须大于负载电流的额定值,如果负载电流较大,输出模块不能直接驱动,则应增加中间放大环节。对于电容性负载、热敏电阻负载,考虑到接通时有冲击电流,故要留有足够的裕量。

3) 允许同时接通的输出点数

在选用输出模块时,还要看整个输出模块的满负荷能力,如OMRON公司的CQM1-OC222是16点输出模块,每个点允许通过电流2 A(AC250 VDC24 V)。但整个模块允许通过的大电流仅8 A。

分配输入输出点

一般输入点与输入信号、输出点与输出控制是一一对应的;在个别情况下,也有两个信号用一个输入点的,那样就应在接入输入点前,按逻辑关系接好线(如两个触点先串联或并联),然后再接到输入点。

1. 明确IO通道范围

不同型号的PLC,其输入输出通道的范围是不一样的,应根据所选PLC型号,弄清相应的IO点地址的分配。

2. 内部辅助继电器

内部辅助继电器不对外输出,不能直接连接外部器件,而是在控制其他继电器、定时器、计数器时作数据存储或数据处理用。根据程序设计的需要,应合理安排PLC的内部辅助继电器,在设计说明书中应详细列出各内部辅助继电器在程序中的用途,避免重复使用。

3.分配定时器计数器

对用到定时器和计数器的控制系统,注意定时器和计数器的编号不能相同。若扫描时间较长,则要使用高速定时器以保证计时准确

安全回路设计

安全回路起保护人身安全和设备安全的作用,它应能独立于PLC工作,并采用非半导体的机电元件以硬接线方式构成。

确保系统安全的硬接线逻辑回路,在以下几种情况下将发挥安全保护作用:① PLC或机电元件检测到设备发生紧急异常状态时;② PLC失控时;③ 操作人员需要紧急干预时。

设计安全回路的任务包括以下内容:

(1) 确定控制回路之间逻辑和操作上的互锁关系;

(2) 设计硬回路以提供对过程中重要设备的手动安全性干预手段;

(3) 为PLC定义故障形式和重新启动特性。

PLC应用系统的软件设计

PLC应用软件设计的内容

PLC应用软件的设计是一项十分复杂的工作,它要求设计人员既要有PLC、计算机程序设计的基础,又要有自动控制的技术,还要有一定的现场实践经验。

一个实用的PLC软件工程的设计通常要涉及以下几个方面的内容:

(1) PLC软件功能的分析与设计;

(2) IO信号及数据结构分析与设计(3) 程序结构分析与设计;

(4) 软件设计规格说明书编制;

(5) 用编程语言、PLC指令进行程序设计;

(6) 软件测试;

(7) 程序使用说明书编制。

PLC应用系统的软件设计步骤

根据可编程序控制器系统硬件结构和生产工艺要求,在软件规格说明书的基础上,编制实际应用程序并形成程序说明书的过程就是应用系统的软件设计。

1. 制定设备运行方案

制定方案就是根据生产工艺的要求,分析各输入、输出与各种操作之间的逻辑关系,确定需要检测的量和控制的方法,并设计出系统中各设备的操作内容和操作顺序。据此便可画出流程图。

2. 画控制流程图

对于较复杂的应用系统,需要绘制系统控制流程图,用以清楚地表明动作的顺序和条件。对于简单的控制系统,可省去这一步。

3. 制定系统的抗干扰措施

根据现场工作环境、干扰源的性质等因素,综合制定系统的硬件和软件抗干扰措施,如硬件上的电源隔离、信号滤波,软件上的平均值滤波等。

4. 编写程序

根据被控对象的输入输出信号及所选定的PLC型号分配PLC的硬件资源,为梯形图的各种继电器或接点进行编号,再按照软件规格说明书(技术要求、编制依据、测试),用梯形图进行编程。

5. 软件测试

刚编写好的程序难免有缺陷或错误。为了及时发现和消除程序中的错误和缺陷,需要对程序进行离线测试。经调试、排错、修改及模拟运行后,才能正式投入运行。

6. 编制程序使用说明书

当一项软件工程完成后,为了便于用户和现场调试人员的使用,应对所编制的程序进行说明,说明书应包括程序设计的依据、结构、功能、流程图,各项功能单元的分析,PLC的IO信号,软件程序操作使用的步骤、注意事项等。

PLC应用系统设计实例

机械手控制系统设计

1. 工艺过程及控制要求

1) 工艺过程

图6.1所示为一简易物料搬运机械手的工艺流程图。该机械手是一个水平垂直位移的机械设备,其操作是将工件从左工作台搬运到右工作台,由光耦合器VLC来检测工作台上有没有工件。机械手通常位于原点,它的动作全部由气缸驱动,而气缸则由相应的电磁阀控制。其中,上升下降和左移右移分别由双线圈二位电磁阀控制,放松夹紧由一个单线圈二位电磁阀(称为夹紧电磁阀)控制。

2) 控制要求

机械手整个搬运过程要求都能自动控制。在启动过程中能切换到手动控制及自动控制或半自动控制(又称单周期控制),以便对设备进行调整和检修。图6.2是机械手控制系统的逻辑流程图。系统启动之前,机械手处于原始位置,条件是机械手在高位﹑左位。

2. 可编程序控制器选型

1) 硬件配置

系统输入信号有3个启动按钮,4个限位开关,5个手动输入信号,1个有工件检测信号,共计14个数字量输入信号;输出信号有机械手上升下降驱动信号﹑左移右移驱动信号和机械手夹紧驱动信号,共有5个数字量输出信号。不需模拟量模块,选择S7-300系列的CPU313,加上数字量输入模块SM321及输出模块SM322就可以满足要求,而且还有一定的裕量。

2) IO地址分配

将14个输入信号、5个输出信号与PLC的IO端一一对应,编排好地址,

其它地址分配

(1) 夹紧定时器T1,定时5 s;

(2) 放松定时器T2,定时5 s;

(3) 自动方式标志M0.0;

(4) 单动方式标志M0.1;

(5) 手动方式标志M0.2;

(6) 结束标志M0.5。

3. 机械手程序设计

1) 逻辑功能块(子程序)

逻辑功能块包括两个部分:自动方式或单动方式控制(FC10)和手动方式控制(FC11)。

(1) 自动方式或单动方式控制(FC10)的具体程序(梯形图表示)如图6.3所示。

(2) 手动方式控制(FC11)的具体程序(梯形图表示)如图6.4所示。

2) 组织块(主程序)

组织块OB1用于设定机械手启动方式,主要负责功能块或子程序的调用,是自动运行还是单动运行,以及系统的循环扫描、故障诊断和输出刷新。其梯形图如图6.5所示。

5.1 编程方式与程序块

5.2 数据块与数据结构

5.3 S7系列PLC程序设计

5.1.1 S7-300编程方式简介

S7-300系列PLC的编程语言是STEP 7。STEP 7继承了STEP 5语言结构化程序设计的优点,用文件块的形式管理用户编写的程序及程序运行所需的数据。如果这些文件块是子程序,则可以通过调用语句,将它们组成结构化的用户程序。这样,PLC的程序组织明确,结构清晰,易于修改。

为支持结构化程序设计,STEP 7用户程序通常由组织块(OB)、功能块(FB)或功能块(FC)等三种类型的逻辑块和数据块(DB)组成。

组织块(OB)是系统操作程序与用户应用程序在各种条件下的接口界面,用于控制程序的运行。OB块根据操作系统调用的条件(如时间中断、报警中断等)可分成几种类型,这些类型有不同的优先级,高优先级的OB可以中断低优先级的OB。每个S7 CPU包含一套可编程的OB块(随CPU而不同),不同的OB块执行特定的功能。

OB1是主程序循环块,在任何情况下,它都是需要的。根据过程控制的复杂程度,可将所有程序放入OB1中进行线性编程,或将程序用不同的逻辑块加以结构化,通过OB1调用这些逻辑块,并允许块间的相互调用。块的调用指令中止当前块(调用块)的运行调用,然后执行被调用块的所有指令。一旦被调用的块被完成,执行调用指令的块继续执行调用指令后的指令。调用块可以是任何逻辑块,被调用块只能是功能块(除OB外的逻辑块)。图5.1所示是一个STEP 7调用实例。除了OB1,操作系统可以调用其它的OB块以响应确定事件。其它可用的OB块随所用的CPU性能和控制过程的要求而定。

功能块(FB、FC)实际上是用户子程序,分为带“记忆”的功能块FB和不带“记忆”的功能块FC。前者有一个数据结构与该功能块的参数表*相同的数据块(DB)附属于该功能块,并随功能块的调用而打开,随功能块的结束而关闭。该附属数据块叫做背景数据块(Instance Data Block),存放在背景数据块中的数据在FB块结束时继续保持,即被“记忆”。功能块FC没有背景数据块,当FC完成操作后数据不能保持。

数据块(DB)是用户定义的用于存取数据的存储区,可以被打开或关闭。DB可以是属于某个FB的情景数据块,也可以是通用的全局数据块,用于FB或FC。S7 CPU还提供标准系统功能块(SFB、SFC),它们是预先编好的,经过测试后集成在S7 CPU中的功能程序库。用户可以直接调用它们,高效地编制自己的程序。由于它们是操作系统的一部分,因此不需将其作为用户程序下载到PLC。与FB块相似,SFB需要一个背景数据块,并需将此DB块作为程序的一部分安装到CPU中。不同的CPU提供不同的SFB、SFC功能。

系统数据块(SDB)是为存放PLC参数所建立的系统数据存储区。用STEP 7的S7组态软件可以将PLC组态数据和其它操作参数存放于SDB中。

功能块编程及调用

功能块由两个主要部分组成:一部分是每个功能块的变量声明表,变量声明表声明此块的局部数据;另一部分是逻辑指令组成的程序,程序要用到变量声明表中给出的局部数据。

当调用功能块时,需提供块执行时要用到的数据或变量,也就是将外部数据传递给功能块,这被称为参数传递。参数传递的方式使得功能块具有通用性,它可被其它的块调用,以完成多个类似的控制任务。

1. 变量声明表(局部数据)

每个逻辑块前部都有一个变量声明表,在变量声明表中定义逻辑块用到的局部数据。局部数据分为参数和局部变量两大类,局部变量又包括静态变量和临时变量(暂态变量)两种。参数是在调用块和被调用块间传递的数据。静态变量和临时变量是仅供逻辑块本身使用的数据。表5.1给出了局部数据声明类型,表中内容的排列顺序也是在变量声明

表中声明变量的顺序和变量在内存中的存储顺序。在逻辑块中不需使用的局部数据类型,可以不必在变量声明表中声明。

表5.1 局部数据类型

变 量 名 类 型 说 明

输入参数 In 由调用逻辑块的块提供数据,输入给逻辑块的指令

输出参数 Out 向调用逻辑块的块返回参数,即从逻辑块输出结果数据

IO参数 In_Out 参数的值由调用块的块提供,由逻辑块处理修改,然后返回

静态变量 Stat 静态变量存储在背景数据块中,块调用结束后,其内容被保留

临时变量 Temp 临时变量存储在L堆栈中,块执行结束变量的值因被其它内容覆盖而丢掉

对于功能块FB,操作系统为参数及静态变量分配的存储空间是背景数据块。这样参数变量在背景数据块中留有运行结果备份。在调用FB时,若没有提供实参,则功能块使用背景数据块中的数值。操作系统在L堆栈中给FB的临时变量分配存储空间。

对于功能块FC,操作系统在L堆栈中给FC的临时变量分配存储空间。由于没有背景数据块,因而FC不能使用静态变量。输入、输出、IO参数以指向实参的指针形式存储在操作系统为参数传递而保留的额外空间中。

对于组织块OB来说,其调用是由操作系统管理的,用户不能参与。因此,OB只有定义在L堆栈中的临时变量。

1) 形参

为保证功能块对同一类设备控制的通用性,用户在编程时就不能使用具体设备对应的存储区地址参数(如不能使用I1.0等),而是使用这类设备的抽象地址参数。这些抽象参数称为形式参数,简称形参。将该设备的相应实际存储区地址参数(简称实参)传递给功能块,功能块在运行时以实参替代形参,从而可通过调用功能块实现对具体设备的控制。当对另一设备控制时,同样也可通过调用实参将其传递给功能块。

形参需在功能块的变量声明表中定义,实参在调用功能块时给出。在功能块的不同调用处,可为形参提供不同的实参,但实参的数据类型必须与形参*。用户程序可定义功能块的输入值参数或输出值参数,也可定义一参数作为输入输出值。参数传递可将调用块的信息传递给被调用块,也能把被调用块的运行结果返回给调用块。

2) 静态变量

静态变量在PLC运行期间始终被存储。S7将静态变量定义在背景数据块中,当被调用块运行时,能读出或修改静态变量;被调用块运行结束后,静态变量保留在数据块中。由于只有功能块FB有关联的背景数据块,因此只能为FB定义静态变量。功能块FC不能有静态变量。

3) 临时变量

临时变量仅在逻辑块运行时有效,逻辑块结束时存储临时变量的内存被操作系统另行 分配。S7将临时变量定义在L堆栈中,L堆栈是为存储逻辑块的临时变量而专设的。当块程序运行时,在L堆栈中建立该块的临时变量,一旦块执行结束,堆栈重新分配,因而信息丢失。

逻辑块局部数据的数据类型

在变量声明表中,要明确局部数据的数据类型,这样操作系统才能给变量分配确定的 存储空间。局部数据可以是基本数据类型或复式数据类型,也可以是专门用于参数传递 的所谓的“参数类型”。参数类型包括定时器、计数器、块的地址或指针等,见表5.2。表5.2 参数类型变量

参数类型 大 小 说 明

定时器(Timer) 2 B 在功能块中定义一个定时器形参,调用时赋予定时器实参

计数器(Counter) 2 B 在功能块中定义一个计数器形参,调用时赋予计数器实参

块:

Block_FB

Block_FC

Block_DB

Block_SDB 2 B 在功能块中定义一个功能块或数据块形参变量,调用时给功能块类或数据块类形参赋予实际的功能块或数据块编号,如

FC 101、DB 42

指针(Pointer) 6 B 在功能块中定义一个形参,该形参说明的是内存的地址指针。例如,调用时可给形参赋予实参P#M50.0,以访问内存M50.0

ANY 10 B 当实参的数据类型未知时,可以使用该类型

1) 定时器或计数器参数类型

在功能块中定义一个定时器或计数器类型的形参,功能块就能使用一个定时器或计数器,而不需明确具体的定时器或计数器,等到调用该功能块时再确定定时器或计数器号。这使用户程序能灵活性地分配和使用定时器或计数器。当给定时器或计数器参数类型形参分配实参时,在“T”或“C”后跟一个有效整数,如T 100。

2) 块参数类型

当定义一个作为输入输出的块时,参数声明决定了块的类型(FB、FC、DB等)。当为块参数类型形参分配实参时,可以使用物理地址,如FC 101,也可使用符号地址,如“valve

3) 指针参数类型

一个指针给出的是变量的地址,而不是变量的数值大小。在有些功能块中,可能使用指针编程更为方便。用定义指针类型的形参,就能在功能块中先使用一个虚设的指针,待调用功能块时再为其赋予确定的地址。当为指针参数类型形参分配实参时,需要指明内存地址,例如P#M50.0。

3. 块调用过程及内存分配

CPU提供块堆栈(B堆栈)来存储与处理被中断块的有关信息。当发生块调用或有来自更高优先级的中断时,就有相关的块信息存储在B堆栈里,并影响部分内存和寄存器。图5.2显示了调用块时B堆栈与L堆栈的变化。图5.3提供了关于STEP 7的块调用情况。

1) B堆栈与L堆栈

B堆栈是CPU系统内存中的一部分,它存储以下被中断块的数据:

(1) 块号、块类型、优先级、被中断块的返回地址;

(2) 块寄存器DB、DI被中断前的内容;

(3) 临时变量的指针(被中断块的L堆栈地址)。

STEP 7中可使用的B堆栈大小是有限制的,对于S7-300 CPU,则可在B堆栈中存储8个块的信息。因此,块调用嵌套深度也是有限制的,多可同时激活8个块。

L堆栈是CPU内存中的一部分,它在块调用时被重新分配。L堆栈用来存储逻辑块中定义的临时变量,也分配给临时本地数据使用。梯形图的方块指令与标准功能块也可能使用L堆栈存储运算的中间结果。

2) 调用功能块FB

当调用功能块FB时,会有以下事件发生:

(1) 调用块的地址和返回位置存储在块堆栈中,调用块的临时变量压入L堆栈;

(2) 数据块DB寄存器内容与DI寄存器内容交换;

(3) 新的数据块地址装入DI寄存器;

(4) 被调用块的实参装入DB和L堆栈上部;

(5) 当功能块FB结束时,先前块的现场信息从块堆栈中弹出,临时变量弹出L堆栈;

(6) DB和DI寄存器内容交换。

当调用功能块FB时,STEP 7并不一定要求给FB形参赋予实参,除非参数是复式数据类型的IO形参或参数类型形参。如果没有给FB形参赋予实参,则功能块FB就调用背景数据块内的数值。该数值是在功能块的变量声明表内或背景数据块内设置的形参初始数值。

3) 调用功能块FC

当调用功能块FC时会有以下事件发生:

(1) 功能块FC实参的指针存到调用块的L堆栈;

(2) 调用块的地址和返回位置存储在块堆栈,调用块的局部数据压入L堆栈;

(3) 功能块存储临时变量的L堆栈区被推入L堆栈上部;

(4) 当被调用功能块FC结束时,先前块的信息存储在块堆栈中,临时变量弹出L堆栈。

因为功能块FC不用背景数据块,不能分配初始数值给功能块FC的局部数据,所以必须给功能块FC提供实参。

STEP 7为功能块FC提供了一个特殊的返回值输出参数(关键字:RET_VAL)。当在文本文件中创建功能块FC时,你可以在定义功能块FC命令后输入数据类型(如BOOL或INT)。对文本文件进行编译时,STEP 7会自动生成RET_VAL输出参数。当用STEP 7的程序编辑器(Program Editor)以增量模式创建功能块FC时,可在FC的变量声明表中声明一个输出参数RET_VAL,并指明其数据类型。

功能块编程与调用举例

对功能块编程分两步进行:*步是定义局部变量(填写局部变量表);第二步是编写要执行的程序,可以用梯形图或语句表两种形式编程,并在编程过程中使用定义了的局部变量(数据)。

定义局部变量的工作内容包括:

(1) 分别定义形参、静态变量和临时变量(FC块中不包括静态变量);

(2) 确定各变量的声明类型(Decl.)、变量名(Name)和数据类型(Data Type),还要为变量设置初始值(Initial Value)(尽管对有些变量初始值不一定有意义)。如果需要还可为变量注释(Comment)。在增量编程模式下,STEP 7将自动产生局部变量地址(Address)。

写功能块程序时,可以用以下两种方式使用局部变量:

(1) 使用变量名,此时变量名前加前缀“#”,以区别于在符号表中定义的符号地址。增量方式下,前缀会自动产生。

(2) 直接使用局部变量的地址,这种方式只对背景数据块和L堆栈有效。

在调用FB块时,要说明其背景数据块。背景数据块应在调用前生成,其顺序格式与变量声明表必须保持*。在增量方式下,调用FB块时,STEP 7会自动提醒并生成背景数据块。此时也为背景数据块设置了初始值,该初始值与变量声明表中的相同。当然也可以为背景数据块设置当前值(Current Value),即存储在CPU中的数值。

1.二分频器

假设功能块FC10是二分频器产生程序,功能是对不同的输入位进行二分频处理。以下给出了FC10的变量声明表和语句表程序。在程序中使用了跳变沿检测指令。

1) FC10的变量声明表(见表5.3)

Address Decl. Symbol Data Type Initial Value Comment

0.0 In INP BOOL FALSE 脉冲输入信号

1.0 Out OUTP BOOL FALSE 脉冲输出信号

2.0 In_Out ETF BOOL FALSE 跳变沿标志

2) 语句表程序

Network 1

A #INP 对脉冲输入信号产生RLO

FP #ETF 对前面的RLO进行跳变沿检测,若有正跳沿则RLO=1,否则RLO=0

NOT 取反RLO

BEC 若RLO=1(没有正跳沿),结束块;若RLO=0(有正跳沿),继续执行下一条指令

AN #OUTP

= #OUTP 输出信号反转

BEU 无条件结束块

在功能块FCl0中定义了三个形参,程序中以引用变量名方式使用了形参变量。也可以为FC10在符号表中定义一个符号名,如“BINARY”,并选用以下两种方式之一调用功能块FC10。调用时为形参分别赋予实参I0.0、Q4.0和M10.0,以对输入位I0.0进行二分频以产生输出脉冲Q4.0。

调用方式1 调用方式2

CALL FC10 CALL BINARY

INP:= I0.0 INP:= I0.0

OUTP:= Q4.0 OUTP:= Q4.0

ETF:= M10.0 ETF:= M10.0

2.读模拟输入量程序

一些S7-300的应用系统中,使用8通道模拟量模块采集信号,当模块数量较多时,读模拟输入量就很繁琐。下面给出一个通用程序FC100,利用它可以方便地把模拟量读回并顺序存入数据块,因为模入模块的起始地址、通道数、存储数据块号及数据在数据块中的存储起始位置均是可变的,所以可在调用FC100时灵活确定。

Address Decl. Symbol Data Type Initial Value Comment

0.0 In PIW_Addr INT

模入模块通道起始地址

2.0 In CH_LEN INT

要读入的通道数

4.0 In DB_No INT

存储数据块号

6.0 In DBW_Addr INT

存储在数据块中的字地址

Network 1

L #DB_No

T LW0

OPN DB[LW 0] 打开存储数据块

L #PIW_Addr

SLD 3 形成模入模块地址指针

T LD4 在临时本地数据双字LD 4中存储模入模块地址指针

L #DBW_Addr

SLD 3 形成数据块存储地址指针

T LD8 在临时本地数据双字LD 8中存入数据块存储地址指针

L #CH_LEN 以要读入的通道数为循环次数,装入累加器1

2.读模拟输入量程序

一些S7-300的应用系统中,使用8通道模拟量模块采集信号,当模块数量较多时,读模拟输入量就很繁琐。下面给出一个通用程序FC100,利用它可以方便地把模拟量读回并顺序存入数据块,因为模入模块的起始地址、通道数、存储数据块号及数据在数据块中的存储起始位置均是可变的,所以可在调用FC100时灵活确定。

Address Decl. Symbol Data Type Initial Value Comment

0.0 In PIW_Addr INT

模入模块通道起始地址

2.0 In CH_LEN INT

要读入的通道数

4.0 In DB_No INT

存储数据块号

6.0 In DBW_Addr INT

存储在数据块中的字地址

Network 1

L #DB_No

T LW0

OPN DB[LW 0] 打开存储数据块

L #PIW_Addr

SLD 3 形成模入模块地址指针

T LD4 在临时本地数据双字LD 4中存储模入模块地址指针

L #DBW_Addr

SLD 3 形成数据块存储地址指针

T LD8 在临时本地数据双字LD 8中存入数据块存储地址指针

L #CH_LEN 以要读入的通道数为循环次数,装入累加器1

NEXT:T LW 0

将累加器1的值,装入循环次数计数器LW0(临时本地数据字)

L LD4

LARl 将模入模块地址指针装入地址寄存器1

L PIW[ARl,P#0.0] 读模入模块装入累加器1

T LW2 将累加器1的内容暂存入缓冲器LW2

L LD8

LARl 将数据块存储地址指针装入地址寄存器1

L LW2 将数据缓冲器中的内容装入累加器1

T DBW[ARl,P#0.0] 将累加器的内容存入数据块中

L LD4 AR1+P#2.0→AR1

+ L#16 ACC1+(.._0001_0 000)

T LD4 调整模入模块地址指针,指向下一通道Acc1+(bb bbbb bxxx)

L LD8

+ L#16

T LD8 调整数据块存储地址指针,指向下一存储地址

L LW0 将循环次数计数器LW0的值装入累加器1

LOOP NEXT 若累加器1的值不为0,将累加器减1继续循环;若累加

器为0,则结束

在FC100中,寄存器间接寻址指令OP NDB[LW0]使用了临时本地数据LW0,变量表中定义的临时变量虽然也在L堆栈中,但不能用于存储器间接寻址,从这里也可看出临时本地数据与临时变量的区别。程序中LW2、LD4和LD8起的作用也可用临时变量替代。

下面举例说明如何使用FC100。在某应用中,机架0的4号槽位安装了一个8模入模块(地址256开始),若要将前6个模入模块信号读回,存入DB50.DBW10开始的6个字单元中,可按下列形式调用FC100:

CALL FC100

PIW_Add:= 256

CH_LEN:= 6

DB_No:= 50

DBW_Addr:= 10

数据块

数据块定义在S7 CPU存储器中,用户可在存储器中建立一个或多个数据块。每个数据块可大可小,但CPU对数据块数量及数据总量有限制,如对于CPU314,用作数据块的存储器多为8 KB(8192 B),用户定义的数据总量不能超出这个限制。对数据块必须遵循先定义后使用的原则,否则,将造成系统错误。

1. 定义数据块

在编程阶段和运行程序中都能定义数据块。大多数数据块是在编程阶段用STEP 7开发软件包定义的,定义内容包括数据块号及块中的变量(包括变量符号名、数据类型以及初始值等),定义完成后,数据块中变量的顺序及类型决定了数据块的数据结构,变量的数量决定了数据块的大小。数据块在使用前,必须作为用户程序的一部分下载到CPU中。

如果确实需要,还可以在程序运行中动态定义一个数据块。动态定义时,数据块号是自动产生的,数据块在存储器中的位置是动态分配的。由于要定义的数据块有可能大于CPU存储器(用于数据块的部分)的剩余空间,因此动态定义过程有可能失败

2.访问数据块

在用户程序中可能定义了许多数据块,而每个数据块中又有许多不同类型的数据,因此,访问时需要明确数据块号和数据块中的数据类型与位置。根据明确数据块号的不同方法,可以用多种方法访问数据块中的数据。

直接在访问指令中写明数据块号,如:

L DB5.DBW10

T DB10.DBW20

L Motor_1.Speed 符号地址

另一种方法是“先打开后访问”。在访问某数据块中的数据前,先“打开”这个数据块,也就是将数据块号(数据块的起始地址)装入数据块寄存器。这样,存放在数据块中的数据就可利用数据块起始地址加偏移量的方法来访问。如:

OPN DB5

L DBW10

OPN DB10

T DBW20

在打开一个数据块时,先打开的数据块会自动关闭(没有专门的数据块关闭指令)。由于有两个数据块寄存器(DB和DI寄存器),因此,多可同时打开两个数据块。一个作为背景数据块,数据块的起始地址存储在DI寄存器中;另一个作为共享数据块,数据块的起始地址存储在DB寄存器中。打开背景数据块,在调用FB时可以自动实现。由于调用FB时使用DI寄存器,因此,一般不在FB程序中用OPN DI n指令打开数据块。

3. 背景数据块和共享数据块

背景数据块和共享数据块有不同的用途。任何FB、FC或OB均可读写存放在共享数据块中的数据。背景数据块是FB运行时的工作存储区,它存放FB的部分运行变量。调用FB时,必须一个相关的背景数据块。作为规则,只有FB块才能访问存放在背景数据块中的数据。

一般情况下,每个FB都有一个对应的背景数据块,一个FB也可以使用不同的背景数据块。如果几个FB需要的背景数据*相同,为节省存储器,则可以定义成一个背景数据块,供它们分别使用。通过多重背景数据,也可将几个FB需要的不同的背景数据定义在一个背景数据块中,以优化数据管理。各数据块在CPU的存储器中是没有区别的,只是由于打开方式不同,才在打开时有背景数据块和共享数据块之分。原则上,任何一个数据块都可以当作共享数据块或背景数据块使用,实际上,一个数据块由FB当作背景数据块使用时,必须与FB的要求格式相符。

数据结构

STEP 7数据块中的数据结构形式比较丰富,数据块中的数据既可以是基本数据类型,又可以是复式数据类型。所谓复式数据类型,是指位数超过32位的数据或由其它数据类型构成的数据组。基本数据类型在第4章中已有过介绍,本节专门说明复式数据类型。STEP 7允许4种复式数据类型,如表5.5所示。

名 称 类 型 说 明

日期-时间 DATE_AND_TIME 长度为8 B(64位)。按BCD码格式顺序存储以下信息:年(字节0)、月(字节1)、日(字节2)、小时(字节3)、分(字节4)、秒(字节5)、毫秒(字节6和7的高半字节)、星期(字节7的低半字节)

字符串 STRING 字符串是一组ASCII码,一个串内可定义多254个字符,占用256 B内存。串中每个字符占用1 B,内存中头两个字节存储串的长度信息。*个字节存放此串的定义长度(默认值为254个字符),第二个字节存放字符串实际长度。例如,String[7]定义长度为7的字符串,占用内存9 B(2+7)。若不定义长度,则默认为254个字符

数组 ARRAY 由一种数据类型组成的数据集合,数据类型可以是基本数据类型或复式数据类型。通过下标访问数组中的数据。可定义到6维数组

构造 STRUCT 由多种数据类型组成的数据集合

另一种复式数据类型称为“用户数据类型(UDT)”,它是利用STEP 7“程序编辑器”产生的,可命名构造。将大量数据组织到UDT中,在生成数据块或在变量声明表中声明变量时将变得更加方便。用户还可为UDT声明符号名。

日期-时间数据类型的名称、位数及格式是由操作系统定义的,用户不可改变,并且该类型在S7-300中必须用标准功能块SFC才能访问。其它复式数据类型则由用户在逻辑块变量声明表或数据块中定义。

1. 数组

一个数组将同种数据类型组合成整体,但不能建立数组的数组。图5.4表示一个二维 整数数组。数组的符号名是“Op_temps”,用符号名加下标可访问数组中的数据。以图5.4为例,*个整数是Op_temps[1,1],第三个为Op_temps[l,3],第四个为Op_temps[2,1],第六个为Op_temps[2,3]。

1) 建立数组

在数据块或变量声明表中可定义数组。在声明数组时,首先给数组命名,接着使用关键字(ARRAY),然后在方括号中给出数组的大小及维数。可以定义多达6维的数组,并用下标来标识数组的大小。在方括号中放下标,各维之间用逗号隔开,每一维的首尾之间用双点隔开。一个下标可以为任何一个整数值(范围:-32 768~+32 767),并包括负数。如用ARRAY[1‥3, 1‥2, 1‥3, -2‥3, 30‥32, 1‥4]来定义变量Op_temps为6维数组。该数组的*个整数为Op_temps[1, 1, 1, -2, 30, 1];后一个为Op_temps[3, 2, 3, 3, 32, 4]。图5.5显示了建立名字为Heat_2×3的二维数组(与图5.4中的数组相似)。

2) 赋初始值

在建立数组时,STEP 7允许以两种方法给数组的元素赋初始值。对图5.5中的数组,可以为6个元素赋初始值:17,23,-45,556,3342,0;若初始值中有顺序相同的元素,写法可以简化,如要数组的头两个元素设特定数值,其余4个为10,则可简写为17,23,4(10),其中4为重复系数,10为要重复的数值。

3) 访问数组

利用数组中元素的下标可以访问数组数据,这时数据块、数组符号名及下标一起 使用。如图5.5中声明的数组在DB20(符号名:MOTOR)的*个字节处开始,用以下地址访问数组中的第二个元素:

MOTOR. Heat_2×3[1,2]

4) 利用数组传递参数

将数组作为参数传递时,要求形式参数和实际参数必须有同样的数据组织结构、相同 的数据类型,并按相同的顺序排列。

2. 构造

构造将不同数据类型组合成一个整体,见图5.6。构造的元素可以是任何基本数据类型或复式数据类型,有数组或构造元素的构造能嵌套8层。因此,STEP 7允许用户将过程中的各种关联数据统一组织在一个构造中,也为统一处理不同类型数据或参数提供了可能性

1) 建立构造

构造(STRUCT)只能在数据块或变量声明表中定义。图5.7所示为由整数(存放数量)、字节(存放原始数据)、字符(存放控制码)、浮点数(存放温度)、布尔数(完成标志信号)组成的构造。该构造的名称为Stack_1。

2) 赋初始值

按每个元素的类型和名称给构造的每个元素赋初始值。并将其写入图5.8中Initial Value(初始值栏)的相应行中。例如,可以分配如下初始值:

Amount=0

Original_data=B#l6#0

Control_code=“Z”

Temperature=98.6

End:=FALSE

3) 访问构造

(1) 用符号地址访问:如MOTO.Stack_1.Temperature,其中,MOTO为构造所在数据块DB20的符号名。

(2) 用物理地址访问:如Stack_l从DB20的字节0开始存放,Amount的物理地址是DB20.DBW0,Temperature的地址为DB20.DBD4。

4) 利用构造传递参数

构造可以作为参数来传递。将构造作为参数传递时,要求形式参数和实际参数必须有同样的数据组织结构、相同的数据类型,并按相同的顺序排列。

3. 用户数据类型

STEP 7允许将基本数据类型或复式数据类型组合成用户自己定义的数据类型,这种类型称为用户数据类型或UDT。用户数据类型必须首先单独建立,并存放在称为UDT的特殊数据块中,见图5.8。

图5.8是用“程序编辑器”建立的一个UDT,其数据组织结构与图5.7相同,该用户数据类型被定义为UDT200,并单独存储在被称为UDT200的特殊块中。也可以为UDT200建立符号名(如process_data),但是,命名只能在符号表中进行。图5.9给出了一个使用UDT定义数据块(如DBl0)的例子,数据块DBl0中定义两个变量,一个为整型,另一个为用户数据类型(UDT200)。从图中可以看出,数据块中UDT的用法与基本数据类型的用法类似。

用符号地址或物理地址两种方式可以访问UDT中的变量。例如,在DB10中定义了图5.9格式的数据,DB10的符号名为Process,访问Amount变量可分别写为DB10.DBW 2或Process.Stack_2.Amount。

建立用户数据类型的目的是为了将UDT作为一种数据类型使用,以方便定义多个结构相同的构造变量。图5.9建立的Stack_2与图5.7建立的Stack_1相比,不仅大小结构*相同,而且对Stack_1和Stack_2中元素的访问方法也*相同。在建立DB10时,由于使用了UDT而使得数据块建立过程方便快捷。在多处使用同样的UDT时,这一优点将更加突出。

程序结构设计

STEP 7不仅从不同层次充分支持合理的程序结构设计,而且也简化了结构设计的复杂程度。

一个复杂的自动化过程可以被分解并定义为一个或多个项目(PROJECT);而对于每个项目,又可以进一步分解并定义给一个或多个CPU,每个CPU都有一个控制程序(CPU_PROGRAM)。图5.10显示了一个样本过程,它分成4个不同的项目:项目1和项目2只有一个CPU,而项目3和项目4有多个CPU。这样,一个很复杂的控制任务的结构设计,就被简化为各个CPU程序的结构设计。项目间或项目中的各CPU程序之间,能以某种方式联网,实现信息共享。如在S7协议支持下,用MPI网以全局数据通信的方式可方便地建立起联系,实现一个项目中各CPU共享信息

典型的情况是一个过程控制任务只有一个项目,该项目下也仅有一个CPU程序,每一个CPU程序又可依据时间特性或事件触发特性的差异分类编入不同的组织块(OB)中。例如,需要以固定时间间隔循环执行的那部分程序编入组织块OB35中,为PLC正常运行而需进行初始化的程序编入组织块OBl00中。又如,由硬件触发的中断服务程序编入组织块OB40中,对程序执行中产生的同步错误的响应处理程序编入组织块OB121或OB122中。

-

对于各组织块中的程序,可以根据其复杂程度分别选用线性、分部或结构化等三种形式中的一种程序结构。由于组织块OB1(主程序循环)中的程序是应用程序中主要的也是复杂的部分,因此,对OB1中的程序设计合理的结构是十分重要的。下面分别说明三种典型结构的特点及选用原则。

1. 线性程序结构

用“线性”结构设计的程序连续放置在一个块内(通常为OB1),块中的程序按顺序执行。这一结构是初的PLC模拟的继电器梯形逻辑的模型。线性程序具有简单、直接的特点。编程时,不必考虑功能块如何编程及如何调用,也不必考虑如何定义局部变量及如何使用背景数据块。由于所有的指令在一个块内,因此它适用于只需一个人编写的、相对简单的控制程序。

这是一种部分模块化的程序结构,也称为部分结构化。程序被分成各部分放在若干功能块中,每个功能块含有用于一种设备的一系列控制逻辑。放置在组织块OB1中的指令决定控制程序的各功能块的执行。比如说,一个分部程序可能包含以下内容:

(1) 用于控制设备每一部分的FC;

(2) 用于控制设备每一工作状态的FC;

(3) 用于控制操作员接口的FC;

(4) 用于进行PLC自诊断的FC。

在分部程序中,既无数据交换也没有重复利用的程序代码。各功能块收集并使用自己的数据,功能块不传递也不接收参数,功能块的编程与调用比较简单。由于每个功能区分为不同的块,因而使得多个程序员能够同时编程而不发生冲突。分部程序结构的编程效率比线性程序有所提高,程序测试也较方便,对程序员的要求也不太高。对不太复杂的控制程序可考虑采用这种程序结构。

3. 结构化程序结构

*结构化(模块化)的程序结构是PLC程序设计和编程较有效的结构形式,它可用于复杂程度高、程序规模大的控制应用程序设计。结构化程序可以重复使用某些功能块,只需要在使用功能块时为其提供不同的环境变量(实参),就能完成对不同设备的控制。例如,在工业搅拌控制过程中有三台泵,对它们的控制功能相似,可以编写一个用于对泵进行控制的功能块,编程时先定义泵控制所需的变量(形参),并使用这些变量构成一个称为“泵控制”的一般功能块。在调用该功能块时,通过改变传入功能块中的参数(实参),可以分别对成分A、成分B和搅拌桶中的三台泵进行控制。

结构化程序有高的编程和程序调试效率,应用程序代码量也小。结构化程序也支持多个程序员协同编程。这种程序结构建立在对PLC系统功能的合理分析、分解及综合的基础之上,程序具体结构形式的确定与程序设计人员的水平及经验关系很大,对程序员的要求也较前两种高。

1. 将过程分割为任务和区域

一个自动化过程包括许多单个的任务,通过识别一个过程内的相关任务组,然后将这些组再分解为更小的任务,即使复杂的过程也能够被定义。下面将这个工业搅拌过程构造为四个功能区域:配料A区域、配料B区域、混合罐区域和排料区域。

2. 说明各个功能区域

1) 配料A和配料B区域

(1) 每种配料的管道都配备有一个入口和一个进料阀以及进料泵。

(2) 进料管还有流量传感器。

(3) 当罐的液面传感器指示罐满时,进料泵的接通必须被锁定。

(4) 当排料阀打开时,进料泵的启动必须被锁定。

(5) 在启动进料泵后1 s内必须打开入口阀和进料阀。

(6) 在进料泵停止后(来自流量传感器的信号)阀门必须立即被关闭以防止配料从泵中泄露。

(7) 进料泵的启动与一个时间监控功能相结合,换句话说,在泵启动后的7 s之内,流量传感器会报告溢出。

(8) 当进料泵运行时,如果流量传感器没有流量信号,进料泵必须尽可能快地断开。

(9) 必须对进料泵启动的次数进行计数(维护间隔)。

2) 混合罐区域

(1) 当罐的液面传感器指示“液面低于低限”或排料阀打开时,搅拌电机的启动必须被锁定。

(2) 搅拌电机在达到额定速度时要发出一个响应信号。如果在电机启动后10 s内还未接收到该信号,则电机必须被断开。

(3) 必须对搅拌电机的启动次数进行计数(维护间隔)。

(4) 在混合罐中必须安装三个传感器。① 罐装满:一个常闭触点。当达到罐的高液面时,该触点断开。② 罐中液面高于低限:一个常开触点。如果达到低限,该触点关闭。③ 罐非空:一个常开触点,如果罐不空,该触点闭合。

3) 排料区域

(1) 罐内产品的排出由一个螺线管阀门控制。

(2) 这个螺线管阀门由操作员控制,但是迟在“罐空”信号产生时,该阀必须被关闭。

(3) 当搅拌电机在工作或罐空时打开排料阀必须被锁定。

3. 定义逻辑块

通过程序块可以将用户程序分布到不同的块中并建立块调用的分层结构来组织程序。本例中用户程序主要由组织块OB1、功能块FB1、功能FC1及三个数据块DB1~DB3组成。图5.12所示为结构化编程的块的分层调用结构。

(1) OB1:与CPU操作系统的接口,包含主要程序。在OBl中调用块FBl和FCl并传送控制过程所需的特定参数。

(2) FB1:用于配料A的进料泵、配料B的进料泵和搅拌电机的控制。由于要求*(接通、断开、计数应用程序等),可以通过同一个功能块实现。

(3) 背景DB1~DB3:用于控制配料A、配料B的进料泵和搅拌电机的实参及静态数据各不相同,因此分别存储在与FBl相关的三个背景DB中。

(4) FC1:用于阀的控制。配料A和B的入口阀和进料阀以及排料阀共同使用本逻辑块。

符号名

如果在用户程序中使用了符号,则必须用STEP 7在符号表中对这些符号进行定义。表5.6所示为所用的程序组件的符号名及地址。

5. 生成电机的FB

电机的FB包括以下逻辑功能:

(1) 启动和停止输入。

(2) 允许设备操作的一系列互锁(泵和搅拌电机)。互锁状态存储在OB1的临时局域数据(L堆栈)中(“Motor_enable”和“Valve_enable”),并且当电机的FB被处理时与启动和停止的输入进行逻辑组合。

(3) 来自设备的反馈必须在一个特定的时间内出现,否则就假定有故障或错误出现,并使电机停止。

(4) 时间点和响应时间或错误故障循环持续时间都必须被。

(5) 如果启动按钮被按下并且电机被使能,则设备自行接通并运行直至按下停机按钮。

(6) 当设备接通时,一个定时器启动运行,如果在定时器的时间到达之前未接到来自设备的响应信号,则停机。

滁州西门子PLC系列代理商

收藏该商铺

登录 后再收藏

提示

您的留言已提交成功!我们将在第一时间回复您~
二维码 意见反馈
在线留言