西门子PLC程序指令注意点
- 格式:pdf
- 大小:241.47 KB
- 文档页数:6
西门子PLC编程操作及注意事项一、PLC基本概念可编程控制器(Programmable Controller)是计算机家族中的一员,是为工业控制而设计制造的。
早期的可编程控制器称作可编程逻辑控制器(Programmable Logic Controller),简称 PLC,它主要用来代替继电器实现逻辑控制。
随着技术的发展,这种装置的功能已经大大超过了逻辑控制的范围,因此,今天这种装置称作可编程控制器,简称PC。
但是为了避免与个人计算机(Personal Computer)的简称混淆,所以将可编程控制器简称PLC。
二、PLC的基本结构PLC实质是一种专用于工业控制的计算机,其硬件结构基本上与微型计算机相同。
A、中央处理器(CPU)中央处理器(CPU)是PLC的控制中枢。
它按照PLC系统成程序赋予的功能接收并存储从编程器键入的用户程序和数据;检查电源、存储器、I/O以及报警定时器的状态,并能诊断用户程序中的语法错误。
当PLC投入运行时,首先它以扫描的方式接受现场各输入装置的状态和数据,并分别存入I/O映象区,然后从用户程序存储器中逐条读取用户程序,经过命令解释后,按指令的规定执行逻辑或数字运算的结果送入I/O映象区或数字寄存器内。
等所有的用户程序执行完毕之后,最后将I/O映象区的各输出状态或输出寄存器内的数据传送到相应的输出装置,如此循环运行,直到停止运行。
为了进一步提高PLC的可靠性,近年来对大型PLC还采用双CPU构成冗余系统(如S1501\二期循环水、除盐水等系统),或采用三CPU(TS300等)的表决式系统。
这样即使某个CPU出现故障,整个系统仍能正常运行。
B、存储器存储系统程序的存储器称为系统存储器。
存储应用软件的存储器称为用户存储器。
(一) PLC常用的存储器类型1. RAM (Random Assess Memory)这是一种读/写存储器(随机存储器),其存取速度最快,由锂电池支持。
2. EPROM (Erasable Programmable Read Only Memory)这是一种可擦除的只读存储器。
PLC编程应注意七大基本原则PLC编程应注意以下基本原则。
(1)外部输入/输出继电器、内部继电器、定时器、计数器等软元件的触点可重复使用,没有必要特意采用复杂程序结构来减少触点的使用次数。
(2)梯形图每一行都是从左母线开始,线圈接在最右边。
在继电器控制原理图中,继电器的触点可以放在线圈的右边,但在梯形图中触点不允许放在线圈的右边。
如图1所示。
(3)线圈不能直接与左母线相连,也就是说线圈输出作为逻辑结果必须有条件。
必要时可以使用一个内部继电器的动断触点或内部特殊继电器来实现。
参见图2所示。
(4)同一编号的线圈在一个程序中使用两次以上称为双线圈输出。
双线圈输出容易引起误操作,这时前面的输出无效,只有最后的输出才有效。
但该输出线圈对应触点的动作,要根据该逻辑运算之前的输出状态来判断。
如图3所示,由于M1双线圈输出,所以,M1输出随最后一个M1输出变化,Y1随第一个M1线圈变化,而Y2随第二个M1输出变化。
所以,一般情况下,应尽可能避免双线圈输出。
(5)梯形图程序必须符合顺序执行的原则,即从左到右,从上到下执行,如不符合顺序执行的电路不能直接编程,例如图4所示电路不能直接编程。
(6)梯形图中串、并联的触点次数没有限制,可以无限制的使用,如图5所示。
(7)两个或两个以上的线圈可以并联输出,如图6所示。
CPM1A系列PLC具有比较丰富的指令集,按其功能可分为两大类:基本指令和特殊功能指令。
其指令功能与FX系列PLC大同小异,这里不再详述。
CPM1A系列PLC指令一般由助记符和操作数两部分组成,助记符表示CPU执行此命令所要完成的功能,而操作数则指出CPU的操作对象。
操作数既可以是前面介绍的通道号和继电器编号,也可以是DM区或是立即数。
立即数可以用十进制数表示,也可以用十六进制数表示。
可能影响执行指令的系统标志有:ER(错误标志)、CY(进位标志)、EQ(相等标志)、GR(大于标志)和LE(小于标志)等。
一、基本指令CPM1A系列PLC的基本逻辑指令与FX系列PLC较为相似,梯形图表达方式也大致相同,这里列表表示CPM1A系列PLC的基本逻辑指令(见表4-8)2.电路块串联的编程电路块串联的编程如图4-3所示,当串联的电路块多于两个时,电路块连接的指令语句方法有两种:方法1是电路块的逐块连接,方法2是电路块编写后总连接,两种编写法的指令条数相同。
PLC编程时三个注意事项
初学plc编程应注意这三个方面,少走弯路,双线圈输出丨程序的优化设计丨编程元件的位置。
1.双线圈输出
如果在同一个程序中,同一元件的线圈使用了两次或多次,称为双线圈输出。
对于输出继电器来说,在扫描周期结束时,真正输出的是最后一个Y0的线圈的状态(见图1a)。
Y0的线圈的通断状态除了对外部负载起作用外,通过它的触点,还可能对程序中别的元件的状态产生影响。
图1a中Y0两个线圈所在的电路将梯形图划分为3个区域。
因为PLC是循环执行程序的,最上面和最下面的区域中Y0的状态相同。
如果两个线圈的通断状态相反,不同区域中Y0的触点的状态也是相反的,可能使程序运行异常。
曾遇到因双线圈引起的输出继电器快速振荡的异常现象。
所以一般应避免出现双线圈输出现象,例如可以将图1a改为图2b 。
2.程序的优化设计
在设计并联电路时,应将单个触点的支路放在下面;设计串联电路时,应将单个触点放在右边,否则将多使用一条指令(见图2)。
建议在有线圈的并联电路中将单个线圈放在上面,将图2a的电路改为图2b 的电路,可以避免使用入栈指令MPS和出栈指令MPP。
3.编程元件的位置
输出类元件(例如OUT,MC,SET,RST,PLS,PLF和大多数应用指令)应放在
梯形图的最右边,宦们不能直接与左侧母线相连。
有的指令(如END和MCR 指令)不能用触点驱动,必须直接与左侧母线或临时母线相连。
使用PLC编程需要特别注意的九个问题(缺一不可)你碰到过电源板故障吗?有遇到输出和输入故障吗?程序丢失有过吗?也许你在十多年的维修路上只遇到过一次PLC输出点坏了,暂未有过其他PLC硬件出问题!也许你在电焊后就碰到了电子板的各种问题。
也许西门子200系列的编程口烧毁N多次、输出继电器粘连、晶体管输出短路等等,不一而足。
面对这些问题你是否非常头疼?据说,遵守PLC使用九大原则,能有效避免,而且还能少走弯路哦~PLC使用的九大注意事项:一、PLC自身故障判断一般来说,PLC是极其可靠的设备,出故障率很低。
PLC的CPU 等硬件损坏或软件运行出错的概率几乎为零;PLC输入点如不是强电入侵所致,几乎也不会损坏;PLC输出继电器的常开点,若不是外围负载短路或设计不合理,负载电流超出额定范围,触点的寿命也很长。
因此,我们查找电气故障点,重点要放在PLC的外围电气元件上,不要总是怀疑PLC硬件或程序有问题,这对快速维修好故障设备、快速恢复生产是十分重要的,因此笔者所谈的PLC控制回路的电气故障检修,重点不在PLC本身,而是PLC所控制回路中的外围电气元件。
二、输入输出(I/O)模块的选取输出模块分为晶体管、双向可控硅、接点型。
晶体管型的开关速度最快(一般0.2ms),但负载能力最小,约0.2~0.3A、24VDC,适用于快速开关、信号联系的设备,一般与变频、直流装置等信号连接,应注意晶体管漏电流对负载的影响。
可控硅型优点是无触点、具有交流负载特性,负载能力不大。
继电器输出具有交直流负载特点,负载能力大。
常规控制中一般首先选用继电器触点型输出,缺点是开关速度慢,一般在10ms左右,不适于高频开关应用。
三、接地问题PLC系统接地要求比较严格,最好有独立的专用接地系统,还要注意与PLC有关的其他设备也要可靠接地。
多个电路接地点连接在一起时,会产生意想不到的电流,导致逻辑错误或损坏电路。
而产生不同的接地电势的原因,通常是由于接地点在物理区域上被分隔的太远,当相距很远的设备被通信电缆或传感器连接在一起的时候,电缆线和地之间的电流就会流经整个电路,即使在很短的距离内,大型设备的负载电流也可以在其与地电势之间产生变化,或者通过电磁作用直接产生不可预知的电流。
S7-200系列的基本逻辑指令S7-200系列的基本逻辑指令与FX系列和CPM1A系列基本逻辑指令大体相似,编程和梯形图表达方式也相差不多,这里列表表示S7-200系列的基本逻辑指令(见表)。
表S7-200系列的基本逻辑指令S7-200系列PLC的比较指令在SIEMENS S7-200的编程软件STEP-7中,有专门的比较指令:IN1与IN2比较,比较的数据类型可以是B、I(W)、D、R,即字节、字整数、双字整数和实数;还可以有其他的比较式:>、<、≥、≤、<>等等。
当满足比较等式,则该触点闭合。
与LMODSOFT指令对照:在LMODSOFT中,没有直接的数的比较指令,但SUB 指令可以通过其执行减法功能后的三个输出端的状态实现整数的比较功能。
若与LMODSOFT 中的SUB指令对应,则在STEP-7中应有三个比较指令:>、=、< 来分别对应SUB 指令的三个输出;若还要对应≥、≤、或<>,则根据SUB指令三个输出端的不同组合,均可找到对应的比较指令。
比如:①(30007)>(40030)①+②(30007)≥②(30007)=(40030)②+③(30007)≤(40030)③(30007)<(40030)①+③(30007)<>(40030)S7-200系列PLC的定时器指令类型、编号及分辨率TON——接通延时TONR——有记忆接通延时TOF——断开延时3种分辨率(时基):1ms、10ms、100ms——分别对应不同的定时器号定时器6个要素:指令格式(时基、编号等)预置值——PT使能——IN 复位——3种定时器不同当前值——Txxx 定时器状态(位)——可由触点显示定时值=时基×预置值PT。
由于定时器的计时间隔与程序的扫描周期并不同步,定时器可能在其时基(1ms、10ms、100ms)内任何时间启动,所以,未避免计时时间丢失,一般要求设置PT预置值必须大于最小需要的时间间隔。
西门子S7-200 PLC指令学习S7-200系列的基本逻辑指令S7-200系列的基本逻辑指令与FX系列和CPM1A系列基本逻辑指令大体相似,编程和梯形图表达方式也相差不多,这里列表表示S7-200系列的基本逻辑指令(见表)。
表S7-200系列的基本逻辑指令S7-200系列PLC的比较指令在SIEMENS S7-200的编程软件STEP-7中,有专门的比较指令:IN1与IN2比较,比较的数据类型可以是B、I(W)、D、R,即字节、字整数、双字整数和实数;还可以有其他的比较式:>、<、≥、≤、<>等等。
当满足比较等式,则该触点闭合。
与LMODSOFT指令对照:在LMODSOFT中,没有直接的数的比较指令,但SUB指令可以通过其执行减法功能后的三个输出端的状态实现整数的比较功能。
若与LMODSOFT 中的SUB指令对应,则在STEP-7中应有三个比较指令: >、=、< 来分别对应SUB 指令的三个输出;若还要对应≥、≤、或<>,则根据SUB指令三个输出端的不同组合,均可找到对应的比较指令。
比如:①(30007)>(40030)②(30007)=(40030)③ (30007)<(40030)①+②(30007)≥②+③(30007)≤(40030)①+③(30007)<>(40030)S7-200系列PLC的定时器指令类型、编号及分辨率TON——接通延时TONR——有记忆接通延时TOF——断开延时3种分辨率(时基):1ms、10ms、100ms——分别对应不同的定时器号定时器6个要素:指令格式(时基、编号等)预置值——PT使能——IN 复位——3种定时器不同当前值——Txxx 定时器状态(位)——可由触点显示定时值=时基×预置值PT。
由于定时器的计时间隔与程序的扫描周期并不同步,定时器可能在其时基(1ms、10ms、100ms)内任何时间启动,所以,未避免计时时间丢失,一般要求设置PT预置值必须大于最小需要的时间间隔。
轻松记住西门子PLC指令,简单明了!指令(英文全称意思 ) :指令含义1、LD ( Load 装载 ) :动合触点2、LDN ( Load Not 不装载 ) : 动断触点3、A ( And 与动合) : 用于动合触点串联4、AN ( And Not 与动断 ) :用于动断触点串联5、O ( Or 或动合 ) :用于动合触点并联6、ON ( Or Not 或动断 ) : 用于动断触点并联7、= ( Out 输出 ) :用于线圈输出8、OLD ( Or Lode): 块或9、ALD ( And Lode): 块与10、LPS ( Logic Push ) :逻辑入栈11、LRD ( Logic Read ) :逻辑读栈12、LPP ( Logic Pop ) :逻辑出栈13、NOT ( not 并非 ) :非14、NOP ( No Operation Performed ) : 无操作15、AENO ( And ENO ) :指令盒输出端ENO相与16、S ( Set 放置 ) : 置117、R ( Reset 重置,清零 ) :清零18、P ( Positive) :上升沿19、N ( Negative) :下降沿20、TON ( On_Delay Timer ) :接通延时定时器21、TONR ( Retentive On_Delay Timer ) : 有记忆接通延时定时器22、TOF ( Off_ Delay Timer ) :断开延时定时器23、CTU ( Count Up ) : 增计数器24、CTD ( Count Down ) : 减计数器25、CTDU ( Count Up/ Count Down ) :增减计数器26、ADD ( add 加 ) : 加注意//ADD_I (_ I 表示整数)ADD_DI( DI表示双字节整数)ADD-R (R 表示实数)它们都是加运算只是数的大小不同。
西门子PLC编程中留意事项 - 西门子plc 西门子plc编程的工作原理:当PLC投入运行后,其工作过程一般分为三个阶段,即输入采样、用户程序执行和输出刷新三个阶段。
完成上述三个阶段称作一个扫描周期。
在整个运行期间,PLC的CPU以肯定的扫描速度重复执行上述三个阶段。
输入采样在输入采样阶段,PLC以扫描方式依次地读入全部输入状态和数据,并将它们存入I/O映象区中的相应得单元内。
输入采样结束后,转入用户程序执行和输出刷新阶段。
在这两个阶段中,即使输入状态和数据发生变化,I/O映象区中的相应单元的状态和数据也不会转变。
因此,假如输入是脉冲信号,则该脉冲信号的宽度必需大于一个扫描周期,才能保证在任何状况下,该输入均能被读入。
用户程序执行在用户程序执行阶段,PLC总是按由上而下的挨次依次地扫描用户程序(梯形图)。
在扫描每一条梯形图时,又总是先扫描梯形图左边的由各触点构成的把握线路,并按先左后右、先上后下的挨次对由触点构成的把握线路进行规律运算,然后依据规律运算的结果,刷新该规律线圈在系统RAM存储区中对应位的状态;或者刷新该输出线圈在I/O映象区中对应位的状态;或者确定是否要执行该梯形图所规定的特殊功能指令。
即,在用户程序执行过程中,只有输入点在I/O映象区内的状态和数据不会发生变化,而其他输出点和软设备在I/O映象区或系统RAM存储区内的状态和数据都有可能发生变化,而且排在上面的梯形图,其程序执行结果会对排在下面的凡是用到这些线圈或数据的梯形图起作用;相反,排在下面的梯形图,其被刷新的规律线圈的状态或数据只能到下一个扫描周期才能对排在其上面的程序起作用。
输出刷新当扫描用户程序结束后,PLC就进入输出刷新阶段。
在此期间,CPU 依据I/O映象区内对应的状态和数据刷新全部的输出锁存电路,再经输出电路驱动相应的外设。
这时,才是PLC的真正输出。
同样的若干条梯形图,其排列次序不同,执行的结果也不同。
另外,接受扫描用户程序的运行结果与继电器把握装置的硬规律并行运行的结果有所区分。
PLC编程注意事项PLC运行一般是为了满足自动化要求,所以安全是其首要任务。
所以PLC程序中正常的动作流程是比较简单的。
关键是在程序动作编写时的一些安全细节是必须要注意的。
这些附加的安全动作条件是至关重要的。
即每一步动作执行的条件要加满加全。
1.对于二者只存其一的条件要互锁,即启动与停止要互锁、运行与调试要互锁。
启动时停止要复位,运行时调试要复位。
此二者不能共存。
2.启动时设备的状态是很重要的。
即启动时要确保各气缸的位置是在应在的位置。
这样才可以启动设备,设备才可以运行。
如若不满足这些条件,那么设备是应该没有任何动作的,或只给出一些提示。
3.在动作顺序执行时,不仅要把前一个动作的结果作为下一个动作的条件,还要把本条语句是否执行作为下一个动作执行的条件,正常运行时有前一个条件的保障即可,后一个条件是为了避免非正常情况的。
采取双重保障措施可避免硬件上的错误。
4.要判断一个气缸是否在指定位置,不仅采取其位置磁开是否亮,还可以使用时这个气缸在这个位置的输出是否有输出来判断,这样双重保证比单一的要安全。
当然这样编程麻烦一些。
5.如传送带上的传感器检测到电池,那么上料气缸在什么条件下来取电池呢?条件至少有二,甚至为三:上料手位置是否回到电池上方;上料手是否吸有电池;(待放位置的电池是否已被取走)。
6.在一行语句中,执行的动作往往只有一个,但为了执行这个动作而必须满足的条件往往有多个。
这样做是为了确保机器和人的安全。
7.PLC程序开篇往往是启保停程序。
启动和停止串联输出一个保持的线圈。
这个保持要受到停止的控制。
因为启动与停止往往只是一个触发信号,并不是一直存在的。
所以这个看似简单的程序为了承上启下也包涵有好多玄妙的地方。
8.从一个动作信号输出到下一个动作信号的输出之间往往会有一个延迟时间。
这个延迟时间往往是为了保证前一个动作的稳步执行。
确保不会与下一个动作冲突。
用定时器延时要记得用完之后及时消除此定时器的输入信号。
B、程序块注释:此程序块的主要⽤途和作者C、段注释:此段代码的⽤途D、变量注释:重要性⽆需多⾔,包含I/O注释、中间变量注释⽽⾄于保密性的考虑,我觉得应该在程序的加密算法或者块的加密上考虑,⽽不应该⽤减少注释这种⼩聪明来实现。
3.正确性PLC的程序⼀定要正确,并要经过实际⼯作验证,证明其能够正确⼯作。
这是对PLC程序的最根本的要求,若这⼀点做不到,其它的再好也没有⽤。
要使程序正确,⼀定要准确的使⽤指令,正确的使⽤内部器件。
准确的使⽤指令与准确理解指令相联系,为此对指令含义和使⽤条件⼀定要弄清楚。
必要时,可编些⼩程序对⼀些不清楚的指令作些测试。
同⼀指令,由于PLC的出⼚批次不同或是PLC的系列型号的不同,⼀些指令细节有可能不⼀样,应仔细查阅编程⼿册。
内部器件正确使⽤也是重要的。
如有的PLC有掉电保护,有的PLC没有。
⼀定要做到该掉电保护的⼀定要⽤掉电保护的器件,反之则不能⽤。
总之,要准确的使⽤指令,正确使⽤内部器件,使所编的程序能正确要作,这是对PLC程序最根本的要求。
举个简单的例⼦,西门⼦的上升沿和下降沿需要使⽤带存储功能的变量作为中间变量,⽐如M点或者DB点,如果使⽤FC的temp变量就会出问题的。
4.可靠性程序不仅要正确,还要可靠。
可靠反映着PLC程序的稳定性,这也是对PLC程序的基本要求。
有的PLC程序,在正常的⼯作条件下或合法操作时能正确⼯作,⽽出现⾮正常⼯作条件(如临时停电,⼜很快再通电)或进⾏⾮法操作(如⼀些按钮不按顺序按,或同时按若⼲按钮)后,程序就不能正常⼯作了。
这种程序,就不⼤可靠,或说不稳定,就是不好的程序。
好的PLC程序对⾮正常⼯作条件出现,能予以识别,并能使其与正常条件衔接,可使程序适应于多种情况。
好的PLC程序对⾮法操作能予以拒绝,且不留下“痕迹”。
只接受合法操作。
联锁是拒绝⾮法操作常⽤的⼿段,继电电路常⽤这个⽅法,PLC也可继承这个⽅法。
5.易改性要使程序易改,也就是要便于修改。
在西门子PLC中使用SCL语言编程的技巧1、在FB块中使用结构编写FB块的准则,就是其使用的内部变量尽量与外部隔离,除了像PLC的新启动/重启动标志,以及一些方波/脉冲波等全局变量可以在FB块中使用外,其他的任何全局变量都不应该在FB内部使用,即使是自定义结构也应该在FB中单独定义,在FB块中使用结构应该在静态类型变量中定义,如下: VAR // Static Variables IM:STRUCT //Data structure of Internal Flags H1_AFCountImp:BOOL:=False; // Aux Flag Counter ImpulseH1_CountImp:BOOL:=False; // Counter Impulse H1_ELCountMV:BOOL:=False; // Endless Counter Maximum Value END_STRUCT; //other data structure … END_VAR 在使用这些结构时,可以按照如下方式: IM. H1_CountImp:=Imp;2、在SCL中替代Set/Reset指令的方法SCL中不存在Set/Reset指令,或者说也没有必要使用。
在SCL中,不使用排他条件Else的条件语句就是一个Set/Reset指令。
如下编程: IF THEN Variable name:=1; END_IF; 其等同于: (S)若加上Else条件,如下: IF THEN Variable name:=1; ELSE Variable name:=0; END_IF;则等同于: ( )一条完整的包含置位和复位的语句可以使用如下方式编程:IF THEN Variable name:=1; END_IF; IF THEN Variable name:=0; END_IF;其等效于SR指令,若将上面的两个条件语句的先后次序颠倒一下,则等效于RS指令。
“与”(A)、“与非”(AN)A:“与”指令适用于单个常开触点串联,完成逻辑“与”运算。
AN:“与非”指令适用于单个常闭触点串联,完成逻辑“与非”运算。
“与”(A)、“与非”(AN)指令由图可知,触点串联指令也用于串联逻辑行的开始。
CPU对逻辑行开始第1条语句如I1. 0的扫描称为首次扫描。
首次扫描的结果(I1.0的状态)被直接保存在RLO(逻辑操作结果位)中;在下一条语句,扫描触点Q5.3的状态,并将这次扫描的结果和RLO中保存的上一次结果相“与”产生的结果,再存入RLO中,如此依次进行。
在逻辑串结束处的RLO 可作进一步处理。
如赋值给Q4.2(=Q4.2)。
“或”(O)、“或非”(ON)O:“或”指令适用于单个常开触点并联,完成逻辑“或”的运算。
ON:“或非”指令适用于单个常闭触点并联,完成逻辑“或非”运算。
由图可知,触点并联指令也用于一个并联逻辑行的开始。
CPU对逻辑行开始第1条语句如I4.0的扫描称为首次扫描。
首次扫描的结果(I4.0的状态)被直接保存在RLO(逻辑操作结果位)中,并和下一条语句的扫描结果相“或”,产生新的结果再存入RLO中,如此一次进行。
在逻辑串结束处的RLO可用作进一步处理,如赋值给Q8.0(=Q8.0)。
此外,还有“异或”(X)、“异或非”(XN)、嵌套指令等等。
输出线圈输出线圈指令即逻辑串输出指令,又称赋值指令,该指令把RLO中的置赋给指定的位地址,当RLO变化时,相应位地址信号状态也变化 ,在LAD中,只能将输出指令放在触点电路的最右端,不能将输出指令单独放在一个空网络中。
下图是两个应用举例。
中间输出如图所示,中间输出指令被安置在逻辑串中间,用于将其前面的位逻辑操作结果(即本位置的RLO值)保存到指定地址,所以有时也称为“连接器”或“中间赋值元件”。
它和其他元件串联时,“连接器”指令和触点一样插入。
连接器不能直接连接母线,也不能放在逻辑串的结尾或分支结尾处。
置位指令、复位指令置位/复位指令也是一种输出指令。
PLC程序详解(图文并貌)
一、时间继电器:
TON 使能=1计数,计数到设定值时(一直计数到32767),定时器位=1。
使能=0复位(定时器位=0)。
TOF 使能=1,定时器位=1,计数器复位(清零)。
使能由1到0负跳变,计数器开始计数,到设定值时(停止计数),定时器位=0。
如下图:
图1:使能=1时,TOF(T38)的触点动作图
图2:使能断开后,计数到设定值后,TOF(T38)的触点动作图(其中T38常开触点是在使能由1到0负跳变后计数器计时到设定值后变为0的)
TONR 使能=1,计数器开始计数,计数到设定值时,计数器位=1。
使能断开,计数器停止计数,计数器位仍为1,使能位再为1时,计数器在原来的计数基础上计数。
以上三种计数器可以通过复位指令复位。
正交计数器 A相超前B相90度,增计数
B相超前A相90度,减计数
当要改变计数方向时(增计数或减计数),只要A相和B相的接线交换一下就可以了。
二、译码指令和编码指令:
译码指令和编码指令执行结果如图所示:
DECO是将VW2000的第十位置零(为十进制的1024),ENCO输入IN最低位为1的是第3位,把3写入VB10(二进制11)。
三、填表指令(ATT)
S7-200填表指令(ATT)的使能端(EN)必须使用一个上升沿或下降沿指令(即在下图的I0.1后加一个上升沿或下降沿),若单纯使用一个常开触点,就会出现以下错误:
这一点在编程手册中也没有说明,需要注意。
其他的表格指令也同样。
四、数据转换指令
使用数据转换指令时,一定要注意数据的范围,数据范围大的转换为数据范围小的发注意不要超过范围。
如下图所示为数据的大小及其范围。
(1)BCD码转化为整数(BCD_I)
关于什么是BCD码,请参看《关于BCD码》。
BCD码转化为整数,我是这样理解的:把BCD码的数值看成为十进制数,然后把BCD到整数的转化看成是十进制数到十六进制数的转化。
如下图所示,BCD码为54,转化为整数后为36。
整数转化为BCD码(I_BCD)则正好相反,看成是十六进制到十进制的转化。
(2)整数转化为双整数(I_DI)
此问题需要注意的是:整数转化为双整数后,符号位被扩展,因为整数的精度小于双整数的精度,转化后,双整数除了表示整数的数值所占的位外,其余空位用符号位填充。
如整数45转化为双整数后,基二进制表示为:
2#0000_0000_0000_0000_0000_0000_0010_1101,而整数-45转化为双整数后则为:
2#1111_1111_1111_1111_1111_1111_1101_0011。
五、不要重复使用PLC输出线圈
基本逻辑指令中常开接点和常闭接点,作为使能的条件,在语法上和实际编程中都可以无限次的重复使用。
PLC输出线圈,作为驱动元件,在语法上是可以无限次的使用。
但在实际编程中是不应该的,应该避免使用的。
因为,在重复使用的输出线圈中只有程序中最后一个是有效的,其它都是无效的。
输出线圈具有最后优先权。
如图1和2所示。
图1:输出线路未重复使用 图2:输出线路未重复使用
图1所示,输出线圈Q0.0是单一使用,表示I0.0和I0.1两个常开接点中任何一个闭合,输出线圈都得电输出。
图2所示,输出线圈Q0.0是重复使用,在网络1和网络2中重复使用两次,目的和图1所示一样,要求I0.0
和I0.1两个常开接点中任何一个闭合,输出线圈得电输出。
首先需要肯定是图2所示的程序在语法上是完全正确的。
但是,Q0.0重复使用的输出线圈中,真正有效的是网络2,网络1是多余的、无效的。
也就是说,I0.0无论是闭合还是断开,都对Q0.0不起作用,Q0.0是否得电是由I0.1决定的。
这是因为PLC在一个扫描周期中,PLC输出点的刷新是在程序执行完毕后执行的,在一个扫描周期中,即使I0.0闭合,I0.1断开,在PLC程序执行网络1时,输出点Q0.0映像存储器为1,在执行网络2时,输出点Q0.0映像存储器又变为0。
程序执行完毕,PLC输出点才执行刷新,最终输出点Q0.0失电不输出。
同理,在一个扫描周期中,I0.0断开,I0.1闭合,输出点Q0.0映像存储器最终为1,在PLC输出点执行刷新时,输出点得电输出。
因此,图2所示的程序中,对Q0.0起作用的只是I0.1。
因此,在PLC编程时,重复使用数出线圈。
尽管在语法上是正确的,但是应该避免使用的。
几种置位、复位的方法和比较
位置位、复位操作方法上,有好几种方法,可以直接采用置位、复位指令,也可以采用数据传送指令、表格填充指令,甚至可以采用移位循环指令。
这几种方法在具体运用时,也要根据情况而定。
下面用一个范例来讲解他们的不同之处。
要求对Q0.0~0.7、Q1.0~1.7十六位输出进行置位、复位。
图 几种置位、复位的方法
在以上几种方法中,除移位循环指令外,其他指令比较好理解。
移位循环指令的方法,置位是对16#FFFF十六位常数左循环16位,送入输出字QW0(由Q0.0~0.7、Q1.0~1.7组成),无论16#FFFF如何循环,还是16#FFFF,16位输出。
复位采用对QW0一次扫描周期一次执行16位左移位指令,将QW0中的数据全部移出(如果是带符号位的字,连符号位也移出),输出复位。
在上面的方法中,直接采用置位、复位的方法不仅可以对字节、字、双字中的位进行置位、复位操作,也可以对不成字节、字、双字的位进行操作。
而数据传送指令、移位循环指令、填充指令只能对字节、字、双字中的位进行置位、复位操作,其中填充指令还只能对字操作。
比如单单对Q0.0~0.6七个位输出进行置位、复位,采用数据传送指令、移位循环指令、填充指令是很难实现的,此时只有采用直接置位、复位指令的方法。