西门子CPU1214C中央处理单元西门子中国总代理 西门子授权代理商
西门子CPU1214C中央处理单元西门子中国总代理 西门子授权代理商
西门子CPU1214C中央处理单元西门子中国总代理 西门子授权代理商
西门子PLC编程需注意的八个事项
初学PLC梯形图编程,应要遵循一定的规则,并养成良好的习惯。下面以西门子PLC为例,简单介绍一下PLC梯形图编程时需要遵循的规则,希望对大家有所帮助。有一点需要说明的是,本文虽以西门子PLC为例,但这些规则在其它PLC编程时也可同样遵守。
输入采样
在输入采样阶段,PLC以扫描方式依次地读入所有输入状态和数据,并将它们存入I/O映象区中的相应得单元内。输入采样结束后,转入用户程序执行和输出刷新阶段。在这两个阶段中,即使输入状态和数据发生变化,I/O映象区中的相应单元的状态和数据也不会改变。因此,如果输入是脉冲信号,则该脉冲信号的宽度必须大于一个扫描周期,才能保证在任何情况下,该输入均能被读入。
用户程序执行
在用户程序执行阶段,PLC总是按由上而下的顺序依次地扫描用户程序(梯形图)。在扫描每一条梯形图时,又总是先扫描梯形图左边的由各触点构成的控制线路,并按先左后右、先上后下的顺序对由触点构成的控制线路进行逻辑运算,然后根据逻辑运算的结果,刷新该逻辑线圈在系统RAM存储区中对应位的状态;或者刷新该输出线圈在I/O映象区中对应位的状态;或者确定是否要执行该梯形图所规定的特殊功能指令。
即,在用户程序执行过程中,只有输入点在I/O映象区内的状态和数据不会发生变化,而其他输出点和软设备在I/O映象区或系统RAM存储区内的状态和数据都有可能发生变化,而且排在上面的梯形图,其程序执行结果会对排在下面的凡是用到这些线圈或数据的梯形图起作用;相反,排在下面的梯形图,其被刷新的逻辑线圈的状态或数据只能到下一个扫描周期才能对排在其上面的程序起作用。
输出刷新
当扫描用户程序结束后,PLC就进入输出刷新阶段。在此期间,CPU按照I/O映象区内对应的状态和数据刷新所有的输出锁存电路,再经输出电路驱动相应的外设。这时,才是PLC的真正输出。
同样的若干条梯形图,其排列次序不同,执行的结果也不同。另外,采用扫描用户程序的运行结果与继电器控制装置的硬逻辑并行运行的结果有所区别。当然,如果扫描周期所占用的时间对整个运行来说可以忽略,那么二者之间就没有什么区别了。
西门子plc编程中应该注意的问题:
1.中断程序中可以调用子程序
累加器和逻辑堆栈式的存蓄器在中断程序和被调用的子程序中都是共用的
2.中断程序和主程序下数据是可以共享的
中断程序虽说是可以共享的,但是我们要注意的是中断事件中事情异步特性的因数影响,来解决共享数据的一致性问题,在中断事件中主程序执行的任何一个地方都是有可能出现的。
3.通信接口的中断
PLC的串行通信口是可以有梯形图或者语句表程序控制的。通信口的这种操作模式称为自有端口的模式。在自由的情况下,就可以用程序定义波特率,每个字节的位数等等,在执行主程序的过程中,申请中断,才能定义自由端口模式,利用接收和发送中断可以简化程序对通信的控制。
4.I/O中断
I/O中断包括上升或下降沿中断,告诉计数器中断和脉冲串输出中断。
S7-200CPU用输入I0.0~I0.3的上升或下降产生了中断,则发生的事件被输入端子捕获,这样的上升沿或者下降可被用来指示当某个事件发生时必须引起注意的条件。
5.时基中断
6.中断的优先级和排队
7.中断的限制
8.中断程序编程步骤
西门子PLC局部变量表与子程序使用技巧有哪些
局部变量表
1.局部变量与全局变量
程序中的每个POU(Program Organizational Unit,程序组织单元)均有白己的由64字节L存储器组成的局部变量表。它们用来定义有范围限制的变量,局部变量只在它被创建的POU中有效。与之相反,全局符号在各POU中均有效,只能在符号表/全局变量表中定义。全局符号与局部变量名称相同时,在定义局部变量的POU中,该局部变量的定义优先,该全局定义则在儿它POU中使用。
局部变量适用于以下两种情况:
(1)在子程序中只用局部变量,不用juedui地址或全局符号,子程序可移植到别的项目去。
(2)如果使用临时变量(TEMP),同一片物理存储器可在不同的程序中重复使用。
如果不是上述两种情况,不需要使用局部变量。通过在符号表(SIMATIC)或全局变量表(IEC)中进行定义,可使符号成为全局变量。
2.局部变量的类型
TEMP(临时变量):暂时保存在局部数据区中的变量。只有在执行该POU时,定义的临时变量才被使用,POU执行完后,不再使用临时变量的数值。在主程序或中断程序中.局部变量表只包含TEMP变量。子程序中的局部变量表还有下面的3种变量:
IN(输人变量):由调用它的POU提供的输人参数。
OUT(输出变量);返回给调用它的POU的输出参数。
IN_OUT(输人/输出变量);其初始值由调用它的POU提供,被子程序修改后返问给调用它的POU。
3.局部变量的赋值
在局部变量表中赋值时,只需指定声明局部变量的类型(TEMP,IN,IN_OUT或OUT)和数据类型(参见SIMATIC和IEC1131-3的数据类型),但不指定存储器地址,程序编辑器自动地在L存储区中为所有局部变量指定存储器位置。
4.在局部变量表中增加新的变量
对于主程序与中断程序,局部变量表显示一组已被预先定义为TEMP(临时)变量的行。要向表中增加行,只需用右键单击表中的某一行,选择“插人→行"指令,在所选行的上部插人新的行,选择“插人→行下"指令,在所选行的下部插人新的行。
对于子程序,局部变量表显示数据类型被预先定义为IN、IN_OUT.OUT和TEMP的一系列行,不能改变它们的顺序。如果要增加新的局部变量,必须用鼠标右键单击已有的行,并用弹出菜单在所击行的上下插人相同类型的另一局部变量。
5.局部变量数据类型检查
局部变量作为参数向子程序传递时,在该子程序的局部变量表中指定的数据类型必须调用POU中的数据类型值匹配。
例如从主程序0B1调用子程序SBR0,使用名为INPUT1的全局符号作为子程序的输人参数。在SBRO的局部变量表中,已经定义了一个名为FIRST的局部变量作为该输入参数,当0B1调用SBR0时,INPUTI的数值被传人FIRST,INPUTI和FIRST的数据类型必须匹配。
6.显示或隐藏局部变量表
将水平分裂条拉至程序编辑器视窗的倾部,则不再疑示局部变量表,但它仍然存在。将分裂条下拉,将再次显示局部变量表。
7.在局部变量表中进行赋值
在程序中使用符号名时,程序编辑器首先检查有关POU的局部变量表,然后检查符号表/全局变量表。如果某符号名在两处都没有定义,程序编辑器则将其视为全局符号,程序编辑器指定一条绿色波浪状下画线,并将名称括在双引号中,例如"UndefinedLocalVar(未定义的局部变量)。如果后来对该符号名赋了值,程序编辑器不会自动再次读取局部变量表并修改它。为了将该符号名作为局部变量使用,必须手工删除程序代码中的引号,并在符号名前插人#号,例如改为#UndefinedLocalVar。
各子程序最多可调用16个输人/输出参数,如果超出16个,将返回错误。
选择希望的变量类型所在的行,并在名称域中键人变量名称,在数据类型城中键人数据类型。不需在局部变量表中的安量名称前加并号,#号只在程序代码中的局部变量名之前使用。
局部变量名可包含数字、字母和下画号(“_”),也可以包含扩展字符(ASII128-ASCII255)。第一个字符必须是字可或扩展字符,关键字不能作为符号名。
局部变量表中的变量名被下载和存储在CPU存储器中,使用较长的变量名将占用较多的存储空问。