7
西门子6ES7314-6BH04-0AB0产品齐全
1本地数据堆栈区L是局部变量,L变量仅在调用它的子程序中有效。
不同子程序中的L变量可用同名。如,FC1中有L0.1,FC2中也有L0.1这个变量,而2者间没任何关系、也不会相互冲突。
2不需要做初始化
3 局部变量解释:
L 是局部存储器,作为暂时存储器或给子程序传递参数,L也可以L*.*(如L2.5 是BOOL 量,是二个字节的五位),LB,LW,LD来存取,但仅仅在它被创建的块中有效,它也可以在符号表中定义,但只能在各个POU自己的符号表中定义.
4. 全局变量和局部变量在符号寻址编程时,全局变量直接显示符号名,而局部变量在符号前会加上#,采用局部变量编程有很多优势:程序可以功能化移植(减少重复编程量),大程序方便协同作战(把任务分成各个功能块),这是SIEMENS的PLC比较优越性之处。
5 使用时请注意,一定要先赋值,后使用局部变量又称临时本地数据区(L堆栈),位于CPU的工作存储区用于存储程序块(OB、FB、FC)被调用时的临时数据,访问临时数据比访问数据块中的数据快。
“L是局部变量,只能在局部使用,不能在全局使用。”只是在这个程序块中可以使用的,使用结束后就会自动复位,它不能被其他的程序使用。临时变量的使用原则就是:先赋值,再使用
在S7-300CPU中,每一个级的局部数据区的大小是固定的。一般在组织块中调用程序块(FB、FC等),操作系统分配给每一个执行级(组织块OB,一般在OB块执行并调用其它FB、FC)的局部数据区的大数量为256B(字节),组织块OB自己占去20B或22B,还剩下多234B可分配给FC或FB。如果块中定义的局部数据的数量大于256字节,该块将不能下载到CPU中。在下载过程中提示错误信息:The?block?could?not?be?copied(该块不能被复制)。如果单击错误信息框中的Detail(详细)按钮,将弹出帮助信息:Incorrect?local?data?length(不正确的局部数据长度)。
在SIMATIC管理器中依次展开你的项目到Blocks(块),右击选中某个块,选择菜单bbbbbb?Properties(目标属性)选项。在块的属性对话框中,可以看到块所需要的局部数据字节数(Length长度:Local?Data(局部数据))。
在SIMATIC管理器中选中你的项目的Block(块(文件夹,执行菜单命令Options(选项)/Reference?Data(参考数据)/Display(显示),然后选择Program?Structure(程序结构),即可在参考表中查看局部数据的占用情况。西门子PLC具有很完善的自诊断功能,如出现故障,借助自诊断程序可以方便的找到出现故障的部件,换后就可以恢复正常工作。故障处理的方法可参看西门子S7-200PLC系统手册的故障处理指南。实践证明,外部设备的故障率远PLC,而这些设备故障时,PLC不会自动停机,可使故障范围扩大。为了及时发现故障,可用梯形图程序实现故障的自诊断和自处理。
1. 时检测
机械设备在各工步的所需的时间基本不变,因此可以用时间为参考,在可编程控制器发出信号,相应的外部执行机构开始动作时起动一个定时器开始定计时,定时器的设定值比正常情况下该动作的持续时间长20%左右。如某执行机构在正常情况下运行10s后,使限位开关动作,发出动作结束的信号。在该执行机构开始动作时起动设定值为12s的定时器定时,若12s后还没有收到动作结束的信号,由定时器的常开触点发出故障信号,
西门子PLC CPU里的暖启动,冷启动,热启动,它们之间到底有什么本质的区别?在实际应用中又有何真正的用处呢?
答:冷启动(Cold restart):所有的数据(过程映象,位存储器、定时器和计数器)都被初始化,包括数据块均被重置为存储在装载存储器(Load memory)中的初始值,与这些数据是否被组态为可保持还是不可保持无关。执行启动组织块OB102,并不是S7400所有CPU 都支持此功能。
暖启动(Warm restart):复位过程映象(PII,PIQ)以及非保持性位存储器(M)、定时器(T)和计数器(C)。定义的保持性存储器(M)、定时器(T)和计数器(C)会保存其后有效值。在有后备电池时,所有DB块数据被保存。没有后备电池时,由于没有非易失性存储区, DB数据和M,T,C均无法保持,这是300与S7-400 PLC大的不同。
执行启动组织块OB100。用户如果没有改过启动类型,系统默认设为暖启动。
手动暖启动:STOP->RUN (在CPU属性中选择暖启动,CPU若是有CRST/WRST 选择开关, 则设为CRST 才能执行手动暖启动)
自动暖启动:Power Off->Power On(也就是给CPU上电时会执行自动暖启动,CRST/WRST 选 择开关对其没有影响)
热启动(Hot restart):只有在有后备电池时才能实现,所有的数据都会保持其后有效值。程序从断点处执行,在当前循环完成之前,输出不会改变其状态。启动时执行OB101。
只有S7-400CPU才能进行热启动。
手动热启动:STOP->RUN+WRST(在CPU属性中选择热启动,CPU 若是有CRST/WRST 选择开关,则设为WRST 才能执行手动热启动)
自动热启动:Power Off->Power On(热启动也就是给CPU上电时会执行自动热启动, CRST/WRST 选择开关对其没有影响) 当PLC的用户程序要保留在RAM中时,就会用到电池,电池通常是3V或3.6V的不可充电的锂电池,电池的使用寿命通常是五年左右,电池用久了,电压就会下降,当其下降到不足以保证RAM中数据时,RAM中的程序就会丢失。如果用户没有备份程序,就会相当麻烦。
一般PLC内部设有电池电压检测电路,当电压下降到一定程度时,PLC就会报警,提醒换电池。PLC的使用说明书都有提供换电池的方法。一般来 说,PLC在断电后,因为PLC上RAM电源端接有充电电容,即使把电池去掉,电容上充电电量也足够RAM内的数据保持一段时间,所以如果取掉电池后在短 时间内(通常5分钟)再将新电池换上去,数据是不会丢失的。
但用户实际使用PLC的环境情况不尽相同,例如电容的容量下降,RAM电源回路有 灰尘、油泥等形成放电回路等,这会加快PLC断电后电容的放电速度,从而使时间不好把握。如果在带电的情况下换电池就可保程序万无一失。因为电源始终会 有电压加在RAM芯片的电源脚。当然换时亦要小心应对,注意电池的性以及避免短路情况发生。
是把PLC通电15分钟(给内部电容充电),断电,在5分钟内换好新的电池,再上电试一下;
西门子PLC有带卡的,有不带电池的;也有带卡的,带电池的。程序存在MMC卡中,如果没有存储卡,需要电池保存程序的,换电池时候务必注意,带电的情况下,将旧电池取出来,然后将新电池换上即可。



面向对象编程是计算机语言的一种的编程模式,在工业控制系统的PLC程序中也可以采用这种设计思想,虽然我们无法实现面向对象的很多特点如“继承”,甚至于它根本就不具备面向对象编程语言的特点,但面向对象编程的基本概念就是类和类的实例(即对象),我们只需要使用这种概念就可以了。在计算机编程中我们需要把一些事物抽象和归纳,才能编写类,而在工业控制系统中,控制对象如:电机,阀等等是很明显的控制类别,不需要抽象就可以很明显的针对它们编写类,以下将会用到西门子的Step7编程语言和的Unity 编程语言来讲解PLC的面向对象编程。
一、 实现方式
面向对象编程在Step7中使用功能块(即FB)编程,一谈到此大家就会想到西门子提出的模块化编程,不错,就是这个模块化编程,但西门子提出的模块化、背景数据块、多重背景等名词并不能让大家很明白的理解和使用这种的设计理念。如果大家从面向对象编程的角度去理解,则可以很好的理解这种设计模式。“FB块”被看 成“类”,它可以被看成是对相似的控制对象的代码归纳,如对MM440的变频器可以编写FB块:MtrMM440,这在面向对象编程中称为“类”,当需要 编程控制具体的电机时,可以给它分配一个背景DB块,在面向对象编程中称为类的实现(即创建类的实例:对象),当需要控制多个电机时,可以分配不同的背景 DB到这个FB块,即创建类的多个实例。Step7中有另外一种程序块,即FC块,以FC块为主的编程在西门子中称为结构化编程,这也可以类比于计算机编程中的面向过程编程,即纯粹以函数为主体的编程。
的Unity软件编程可以好的理解面向对象编程。它的DFB定义中包含输入/输出参数,私有/共有变量,以及代码实现,而这正是计算机的面向对象 编程中“类”的基本元素,而创建类的实例(对象)就像创建普通的“布尔”变量一样,只需在“Function Blocks”中定义这种“类”的变量即可。
Step7和Unity都可以采用面向过程和面向对象编程方式,这两种编程方式的区别类似于计算机语言中的C语言和C++语言编程的区别。
以下的讲解将会把Step7中的FB和Unity中的DFB称为“类”,Step7中的FB+背景DB以及Unity中DFB的实例称为“对象”。
二、 面向对象编程架构
以上讲解的是实现细节,而编程思想是建立在程序架构上的,不是某个局部使用了面向对象方式,则可以称之为这种编程就是面向对象编程。这种编程需要从以下方面着手:
1、 电路设计的结构化。
这里主要以自动线为主介绍,对于单机机床可以是它的简化结构,
<1>、自动线层:这是层次,它拥有一个主PLC,对属于它下面的各区域控制
<2>、工程层:拥有立的配送电系统,但没有PLC,只有分布式模块,由自动线控制。顾名思义,它有着较大的立性,可以作为一个单的工程项目设计和制造,当自动线比较小时,可以省略该层次。
<3>、功能组层:根据工艺划分,将实现某一个工艺功能的区段设备划分为一个功能组,它隶属于工程层,当工程层被省略时,隶属于自动线层。
面向对象编程并不一定要求使用以上的结构,但好的电气结构利于面向对象编程。
2、 任何控制对象逻辑都在“类”中实现。
为了做到这点,分析与控制对象相关的信息,譬如,对于一个电机,有以下相关的信息需要考虑:
输入信息:
<1>、电路保护信息,如电机的空气开关,热继电器等。
<2>、功能保护信息,如运动电机的限位开关,风机的风压开关,油泵的油位开关等。
<3>、启动和终止条件,以上的电路保护和功能保护都可能导致电机运转终止,复位也可能导致重启动,但这里的条件指的是正常运行的启动和终止条件,譬如顺序控制的流程步。
<4>、控制模式:如手动和自动等。
<5>、故障复位:通过复位信息,重新启动。
输出信息:
<1>、控制输出,如控制电机的主接触器。
<2>、状态信息输出
<3>、故障输出
.........
状态储存信息:
用于代码实现的中间变量以及可以被人机界面读出的状态变量等
把以上信息都整合到一个类中,并尽量使类的参数标准化。不过,同编程语言还是曾在一些差别,针对Step7,应该遵循的标准是:程序结构由FC实现,对象控制由FB实现,如下的一种结构体系(其电气结构来自上面的介绍):这只不过是一个粗略的PLC程序架构体系,好的架构应该完善和科学。
3、 规划好数据结构
数据结构的定义相当重要,并尽量统一这些结构,不要顾虑存储空间,当今的PLC内存足以容纳大量的数据。说明一点的是在Step7中尽量不要在类的外部定义数据结构(UDT),而是在类里面定义,虽然会造成不同类中同一结构的重复性定义,但却提高了类的立性。
三、 优越性
1、 标准化
使用这种设计模式,可以将程序设计分为两个阶段,即标准库、基本架构开发,以及实际应用层面设计。其中标准库、基本架构是程序标准化的基础,而应用层设计是针对具体的控制工程编程,这样可以把程序设计人员分成两类,一类是标准开发,由程序员负责,一类是应用设计(其中程序调试规划到应用设计),由 经过标准化培训的一般程序员完成,通过这种分配就可以解决中国工业自动化中面临的尴尬局面。传统的中国控制工业,一个程序设计由一个人完成,这样他还负责现场调试,而拥有丰富经验的程序员一般是三十岁后,这时他已经成家,而显然长期出差对家庭不利,很多的程序员为了家庭考虑不得不改行,要么转到管 理岗位,要么去制造工厂搞设备维护,这是资源的严重流失。毫无疑问,使用以上的设计流程,我么可以让经验丰富的程序员搞标准库和架构的设计,而让刚踏入这个行业的年轻人搞应用设计和调试,这不仅可以让老程序员继续他自己的工作,而不影响家庭,也可以让年轻的程序员参入现场调试,培养自己的经验,提高自己的 收入。
这可能让某些人士担心,认为年轻的程序员可以参加现场的调试吗?可以肯定的是没有标准化支撑的程序不仅年轻的程序员编不出来,而且现场调试会问题多多。但有了好的标准化后,一年半以上工作经验的程序员就应该能够立面对自动线。
PLC中的面向对象编程的就是黑匣子编程,针对Step7,我们使用FB去实现每一个对象的控制,控制逻辑、报警处理、信号交换全在FB中,对于应用设计人员,不需要明白里面的代码实现,只需要了解该FB的功能以及如何使用好它就行,这样对于应用程序人员的编程能力要求大大降低,对于编程只不过是遵循架构,拷贝代码,改变输入输出条件而已。
那么调试呢?很多人认为使用FB编程的烦就是FB的多次调用后,根本无法诊断这些代码,从技术层面上讲确实如此,我们除了从背景DB上查看信息外, 是无法在它多次被调用后监控代码的,但我已说过,这是黑匣子编程,我们不需要诊断这些代码,只需要知道什么样的输入、什么样的参数设定导致什么样的输出就行,代码的逻辑与功能好坏是由标准库开发人员负责的,这就要求标准开发人员需要对他设计的功能块在不同条件下进行不同的测试,保证无误,还需要编写完整、 详尽的功能说明文档,以便于应用设计人员了解这些块,标准架构并不是出来就一劳永逸的,针对千变万化的工程,它是需要不断完善和修订的,这也是一个工程公司可以实实在在进行知识积累的地方。
程序不仅需要给调试人员使用,而且用户(设备维护人员)也需要了解,如果把完整的标准库文档给用户,可能曾在技术外泄的可能,若不给,对他们诊断设备可能曾在困难,这就需要标准人员制作另外一分文档,即设备维护文档,其知识的透漏以用户能够使用程序进行诊断为限。
2、 重用性和易管理型
计算机面向对象编程的优点也有重用性和易管理型,在PLC中也曾在,以Step7为例,需要讨论FC和FB的差异。观察数据类型,FB比FC只不过多一个 “STAT”类型,在使用上FB需要背景DB,FC不需要,但就这个差别导致FB拥有自己立的数据储存空间,而FC的数据储存却借助公有变量(如中 间变量M或者共享DB),有这样一种准则,程序块的立性越强,其重用性也越好,产生数据访问冲突的可能性也少,则易于管理。有些公司生产的PLC, 其程序语言没有类似FB 的这种特性,这时可以采用类似“FC+共享DB”的替代方案解决,但它的立性已经大大降低。
同样的代码的立性是标准的一个重要环节,很难想象一个与其他功能块之间有着千丝万缕联系的功能块能够被作为标准块在不同工程中有效的重复使用。
纵观计算机语言的发展,开始的编程都是令人恐怖的,而当今的编程让人们得到很大的解脱,有很多现成的标准类库实用,人们可以把多的编程精力放在实现功能本身上,PLC编程也应该朝这种方向发展,应该让多的人从事应用层面的设计,那些标准功能块不应该重复的被不同人员开发,虽然各大PLC厂开发了大量 的程序库,但工业控制对象各式各样,不**业都应该拥有自己的程序库,而代码的可重用性是评价这些功能块好坏的关键。
主控继电器(Master Control Relay)简称MCR。
主控继电器用来控制MCR区内的指令是否被正常执行,相当于一个用来接通和断开“能量流”的主令开关。有关指令:
MCRA:MCR区指令;
MCRD:取消MCR区指令;
MCR(:打开MCR区指令,在MCR堆栈中保持该指令之前的逻辑运算结果RLO(即MCR位);
MCR):关闭MCR区指令,从MCR堆栈中取出保存的逻辑运算结果RLO;
MCR(,MCR)指令成对使用,以表示受控临时“电源线”的形成与终止。
例:
MCRA //MCR区
A I0.2
MCR( //RLO保存到MCR堆栈,打开MCR区,I0.2=1则MCR位为1,反之为0
A I3.1
=Q 4.0 //如MCR位为0,不管I3.1的状态如何,Q4.0被置为0
A I0.5
JNB -001
L MW20
T QW10 //如MCR位为0,MW20内容送入QW10
-001:NOP0
)MCR //结束MCR控制区
MCRD //关闭MCR区
A I1.1
=Q4.1 //这两条指令在MCR区之外,不受MCR位的控制
在此,在转帖有关例题:
MCR指令叫做主控指令,简单地讲是有这么一个MCR的栈区。在这个栈区内的操作不仅受分步条件控制,还可以用MCR的ON或OFF来进行总控制!如:
STL Explanation
MCRA //Activate MCR area.
A I 1.0
MCR( //Save RLO in MCR stack, open MCR area. MCR = "on" when RLO=1 (I?.0 ="1"); MCR = "off" when RLO=0 (I 1.0 ="0")
A I 4.0
= Q 8.0 //If MCR = "off", then Q 8.0 is set to "0" regardless of I 4.0.
L MW20
T QW10 //If MCR = "off", then "0" is transferred to QW10.
)MCR //End MCR area.
MCRD //Deactivate MCR area.
A I 1.1
= Q 8.1 //These instructions are outside of the MCR area and are not dependent upon the MCR bit.
在上例中,用I 1.0来作为MCR取的条件,既将A I 1.0逻辑结果RLO存入MCR区,MCR区是否为NO取决于RLO,RLO=0时MCR区为NO,在此条件下,区内的逻辑结果受MCR总控,既如A I 4.0 = Q 8.0一句,只要MCR区为NO,Q 8.0即为零,而不管I 4.0的状态如何
在工业自动化这个行业里,相信大多是都知道PLC这个自动化产品吧。可惜关于西门子PLC,又知道多少呢?本文就是阐述西门子PLC的工作原理及运行过程。
处理器是西门子PLC正常作业的神经,当PLC投入运转时,要它以扫描的方法接纳现场各输入设备的状况和数据,并别离存入I/O映象区,然后从用户顺序存储器中逐条读取用户顺序,颠末指令解说后按指令的规则履行逻辑或管用运算的成果送入I/O映象区或数据寄存器内。等所有的用户顺序履行结束之后,终将I/O映象区的各输出状况或输出寄存器内的数据传送到相应的输出设备,如此循环运转,直到中止运转。
其次是存储器。存储器是寄存体系软件的称之为体系顺序存储器;寄存应用顺序的存储器则被咱们成为是用户成粗存储器。
其三是电源。当PLC投入运转后,其作业进程通常分为三个期间,即输入采样、用户顺序履行和输出改写三个期间。完结上述三个期间称作一个扫描周期。
西门子自动化产品PLC是一种应用于企业的计算机,全名为可编程控制器。当西门子可编程器投入运行时,其工作过程通常分为三个阶段,即输入采样、用户程序执行和输出刷新三个阶段。完成上述三个阶段称作一个扫描周期。在整个运行期间, PLC的CPU以一定的扫描速度重复执行上述三个阶段。 西门子S7-1200的IEC格式的定时器属于功能块。在插入定时器指令时,要求创建一个16字节的IEC_Timer数据类型的DB结构(即背景数据块),来保存有关的数据。在功能块中,可以事先创建一个IEC_Timer数据类型的静态变量(多重背景),然后将它给定时器指令。
CPU没有给任何特定的定时器指令分配专门的资源。每个定时器使用DB结构和一个连续运行的内部CPU定时器(我的理解是一个硬件定时器)来执行定时。
在定时器指令的输入IN的上升沿启动定时器时,连续运行的内部CPU定时器的值将被复制到为该定时器指令分配的DB结构的元素START(起始值)中。
该起始值在定时器继续运行期间将保持不变,以后将在每次新定时器时使用。以下条件时将会执行定时器新:
1)执行定时器指令(TP、TON、TOF 或 TONR);
2)定时器结构的元素ELAPSED(经过的时间)或位输出Q作为其它指令的参数,该指令被执行。
新定时器时,将从内部CPU定时器的当前值中减去上述起始值,得到经过的时间ELAPSED。再将ELAPSED与预设值PT进行比较,以确定定时器的位输出Q的状态。然后新该定时器的DB结构的元素ELAPSED和Q。达到预设值PT后,定时器不会继续累加经过的时间ELAPSED。
STEP 7 Basic的V11版与V10.5版相比,增加了类似于S7-300/400的定时器线圈指令。
从上述的定时器内部的定时机制可知,在使用定时器时,其定时精度与CPU的扫描周期有很大的关系。在CPU两次新定时器之间,定时器的输入、输出参数保持不变。
为了验证上述结论,在FB1中调用定时器指令TP,在OB1中用I0.1作为调用条件,调用FB1。用监视表格监视定时器的输出Q和经过的时间ET,用输入IN的上升沿启动定时器后,如果I0.1为0状态,没有调用FB1和执行定时器指令,定时器的输出Q和经过的时间ET保持不变。只有在调用FB1,执行定时器指令时,ET的值才会变化。
监控定时器( Watchdog)又称,它的定时时间为300ms,每次扫描它都被自动复位一次,正常工作时如果扫描周期小于300ms,监控定时器不起作用。如果强烈的外部干扰使PLC(可编程序控制器)偏离正常的程序执行路线,监控定时器不再被周期性地复位,定时时间到时,PLC(可编程序控制器)将停止运行。
在以下情况下扫描周期可能大于300ms,监控定时器会停止执行用户程序:
(1)用户程序很长。
(2)出现中断事件时,执行中断程序的时间较长。
(3)循环指令使扫描时间延长。
为了防止在正常情况下监控定时器动作,可将监控定时器复位(WDR)指令插入到程序中适当的地方,使监控定时器复位。如果FOR/NEXT循环程序的执行时间可能过监控定时器的定时时间,可将WDR指令插入到循环程序中。条件跳转指令JMP若在它对应的标号之后(即程序往回跳),可能因连续反复跳步使它们之间的程序被反复执行,总的执行时间过监控定时器的定时时间。为了避免出现这样的情况,可在JMP指令和对应的标号之间插入WDR指令。
使用WDR指令后,在终止本次扫描之前,下列操作将被禁止:
(1)通信(自由口模式除外)。
(2)I/O新(立即I/O除外)。
(3)强制新。
(4)SM位新(不能新SM0,SM5~SM29)。
(5)运行时间诊断。
(6)在中断程序中的STOP指令。
(7)如果扫描时间过25s,10ms定时器和lOOms定时器不能正确累计时间。
如果将PLC CPU的方式开关切换到STOP位置,1.4S内CPU转到停止模式。
西门子PLC CPU的控制程序由主程序、子程序和中断程序组成。STEP 7-Micro/WIN 32在程序编辑器窗口里为每个POU(程序组织单元)提供一个立的页。主程序总是1页,后面是子程序或中断程序。
因为各个程序在编辑器窗口里被分开,编译时在程序结束的地方自动加入无条件结束指令或无条件返回指令。用户程序只能使用条件结束和条件返回指令。
1.子程序的作用
子程序常用于需要多次反复执行相同任务的地方,只需要写一次子程序,别的程序在需要子程序的时候调用它,而重写该程序。子程序的调用是有条件的,未调用它时不会执行子程序中的指令,因此使用子程序可以减少扫描时间。
使用子程序可以将程序分成管理的小块,使程序结构简单清晰,易于查错和维护。如果子程序中只引用参数和局部变量,可以将子程序移植到其他项目。为了移植子程序,应避免使用全局符号和变量,如I、Q、M、SM、Al、AQ、V、T、C、S、AC等存储器中的地址。
2.子程序的创建
可采用下列方法创建PLC子程序:在“编辑”菜单中选择“插入→子程序”;在程序编辑器视窗中按鼠标右键,从弹出菜单中选择“插入→子程序”。程序编辑器将从原来的POU显示进入新的子程序,程序编辑器底部将出现标志新的子程序的新标签,在程序编辑器窗口中可以对新的子程序编程。可以使用该子程序的局部变量表定义参数,各子程序多可以定义16个IN、OUT参数。用右键双击指令树中的子程序或中断程序的图标,在弹出的窗口中选择“重新命名”,可修改它们的名称。
西门子PLC CPU的控制程序由主程序、子程序和中断程序组成。STEP 7-Micro/WIN 32在程序编辑器窗口里为每个POU(程序组织单元)提供一个立的页。主程序总是1页,后面是子程序或中断程序。
因为各个程序在编辑器窗口里被分开,编译时在程序结束的地方自动加入无条件结束指令或无条件返回指令。用户程序只能使用条件结束和条件返回指令。
1.子程序的作用
子程序常用于需要多次反复执行相同任务的地方,只需要写一次子程序,别的程序在需要子程序的时候调用它,而重写该程序。子程序的调用是有条件的,未调用它时不会执行子程序中的指令,因此使用子程序可以减少扫描时间。
使用子程序可以将程序分成管理的小块,使程序结构简单清晰,易于查错和维护。如果子程序中只引用参数和局部变量,可以将子程序移植到其他项目。为了移植子程序,应避免使用全局符号和变量,如I、Q、M、SM、Al、AQ、V、T、C、S、AC等存储器中的地址。
2.子程序的创建
可采用下列方法创建PLC子程序:在“编辑”菜单中选择“插入→子程序”;在程序编辑器视窗中按鼠标右键,从弹出菜单中选择“插入→子程序”。程序编辑器将从原来的POU显示进入新的子程序,程序编辑器底部将出现标志新的子程序的新标签,在程序编辑器窗口中可以对新的子程序编程。可以使用该子程序的局部变量表定义参数,各子程序多可以定义16个IN、OUT参数。用右键双击指令树中的子程序或中断程序的图标,在弹出的窗口中选择“重新命名”,可修改它们的名称。
西门子的TIA(全集成自动化)的概念可以说是建立在通信的基础上的,无论是Profibus还是Profinet,或者是Asi甚至是Wireless,各种通讯形式将不同的分系统联系起来,从而组成了完整的TIA控制系统,而其中所用到的服务和协议,可以想象也是非常繁多的。
ISO/OSI模型中层面不同,协议也不同,s7属于层也就是应用层协议,可加载ISO,ISO ON TCP、MPI、PROFIBUS等网络上。
TCP和ISO/OSI的区别和联系:严格的说,这两者都不是单个协议,而是一个协议集合。ISO是标准化组织的简称,OSI是由其推出的开放式网络系统的一个框架,就像一个文件柜,共有七个抽屉,由下向上共分为物理层、链路层、网络层、传输层、表示层、会话层、应用层。这是一个官方的指导框架,各厂商生产适合装放在相应的抽屉中产品。
而TCP是事实存在的一种网框架,是分了四个抽屉的文件柜,分别是网络接口层(相当于OSI的物理层和链路层)、网络层、传输层、应用层。这是先于OSI出现的框架,是绝大多数厂商遵守的标准,应用为广泛。
两者并不矛盾,OSI是理论上的一种结构,有助于对网络及通信规程的认知,而TCP实际上也是在此框架上的一种广泛应用事实结构。都对各厂家的上下层软硬件产品相互兼容起到了决定性作用。
例如我们西门子设备的通信,网络接口层有串行通信,采用RS422/RS485标准(注意不是网络协议,这是电气规程约定)和以太网通信,采用Ethernet 802.3标准。在传输层上可以使用PORFIBUS、MPI、MDBUS等网络协议。而在以太网结构上可以使用TCP/IP、SNMP、FTP、HTTP等网络协议。STEP7、TIA实际上就是集成了这些协议的应用层程序。不同的子网一般情况下是不互通的,如果要建立通信,那就要在网络层上做路由并要设定接口网关才可通信。
S7通信和S5兼容通信的区别。如果多个西门子PLC通信,采用S7兼容通信合适一些。Profibus_s7应该是西门子一种优化的通讯解决方案,我们是上位机厂家,一般和300/400PLC通讯时,如果个MPI口被占用时,往往需要使用DP口进行通讯 ,这时基于Profibus总线的Profibus_s7通讯就是一种有效的方案了,他是真正的主-主通讯,而且使用的是1,2,7层,通讯简单快速有效。
S7-300/400PLC之间的Profibus_s7通讯可以调用库里的块,上位机和Profibus_s7通讯 采用的应该是类似调库的方式,上位机通过applicaion和S7_connection这些参数建立的初始化。前提是需要在step7组态时组好pc station的虚拟站点。
Profbus网络et200m和hmi可以使用同一种协议,例如DP,但HMI需要配置Direct key。也常常使用不同的协议,前者是Dp,后者是S7。一起通信在于Profibus总线通信的设置呀,一种是循环的通信Dp,另一种是肺循环的通信S7。两者从通信速度上说是一样的,因为在一根总线是12M。而效率却不同,一次循环可以和IO进行了通信,但是一次循环却未必和HMI尚的IO进行全部通信,可能需要几个周期。