1、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
2、时,计数器在原来的计数基础上计数。以上三种计数器可以通过复位指令复位。正交计数器 A 相超前 B相 90度,增计数B 相超前 A相 90度,减计数当要改变计数方向时(增计数或减计数),只要 A相和 B相的接线交换一下就可以了。二、译码指令和编码指令:译码指令和编码指令执行结果如图所示:DECO 是将 VW2000 的第十位置零(为十进制的 1024),ENCO 输入 IN 最低位为 1 的是第 3 位,把 3 写入VB10(二进制 11)。三、填表指令(ATT)S7200 填表指令(ATT)的使能端(EN)必须使用一个上升沿或下降沿指令(即在下图的 I0.1 后加一个上升沿或下降沿),若单纯使
3、用一个常开触点,就会出现以下错误:这一点在编程手册中也没有说明,需要注意。其他的表格指令也同样。四、数据转换指令使用数据转换指令时,一定要注意数据的范围,数据范围大的转换为数据范围小的发注意不要超过范围。如下图所示为数据的大小及其范围。(1)BCD 码转化为整数(BCDI)关于什么是 BCD 码,请参看 关于 BCD 码。BCD 码转化为整数,我是这样理解的:把 BCD 码的数值看成为十进制数,然后把 BCD 到整数的转化看成是十进制数到十六进制数的转化。如下图所示,BCD 码为 54,转化为整数后为 36。整数转化为 BCD 码(IBCD)则正好相反,看成是十六进制到十进制的转化。(2)整数
4、转化为双整数(IDI) 此问题需要注意的是:整数转化为双整数后,符号位被扩展,因为整数的精度小于双整数的精度,转化后,双整数除了表示整数的数值所占的位外,其余空位用符号位填充。如整数 45 转化为双整数后,基二进制表示为:2#0000_0000_0000_0000_0000_0000_0010_1101,而整数45 转化为双整数后则为:2#1111_1111_1111_1111_1111_1111_1101_0011。五、不要重复使用 PLC 输出线圈基本逻辑指令中常开接点和常闭接点,作为使能的条件,在语法上和实际编程中都可以无限次的重复使用。PLC 输出线圈,作为驱动元件,在语法上是可以无限
5、次的使用。但在实际编程中是不应该的,应该避免使用的。因为,在重复使用的输出线圈中只有程序中最后一个是有效的,其它都是无效的。输出线圈具有最后优先权。如图 1 和 2 所示。图 1:输出线路未重复使用 图 2:输出线路未重复使用图 1 所示,输出线圈 Q0.0 是单一使用,表示 I0.0 和 I0.1 两个常开接点中任何一个闭合,输出线圈都得电输出。图 2 所示,输出线圈 Q0.0 是重复使用,在网络 1 和网络 2 中重复使用两次,目的和图 1 所示一样,要求I0.0 和 I0.1 两个常开接点中任何一个闭合,输出线圈得电输出。首先需要肯定是图 2 所示的程序在语法上是完全正确的。但是,Q0.
6、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 映
7、像存储器最终为 1,在 PLC 输出点执行刷新时,输出点得电输出。因此,图 2 所示的程序中,对 Q0.0 起作用的只是 I0.1。因此,在 PLC 编程时,重复使用数出线圈。尽管在语法上是正确的,但是应该避免使用的。几种置位、复位的方法和比较位置位、复位操作方法上,有好几种方法,可以直接采用置位、复位指令,也可以采用数据传送指令、表格填充指令,甚至可以采用移位循环指令。这几种方法在具体运用时,也要根据情况而定。下面用一个范例来讲解他们的不同之处。要求对 Q0.00.7、Q1.01.7 十六位输出进行置位、复位。图 几种置位、复位的方法在以上几种方法中,除移位循环指令外,其他指令比较好理解。移
8、位循环指令的方法,置位是对 16#FFFF 十六位常数左循环 16 位,送入输出字QW0(由 Q0.00.7、Q1.01.7 组成),无论 16#FFFF 如何循环,还是16#FFFF,16 位输出。复位采用对 QW0 一次扫描周期一次执行 16 位左移位指令,将 QW0 中的数据全部移出(如果是带符号位的字,连符号位也移出),输出复位。在上面的方法中,直接采用置位、复位的方法不仅可以对字节、字、双字中的位进行置位、复位操作,也可以对不成字节、字、双字的位进行操作。而数据传送指令、移位循环指令、填充指令只能对字节、字、双字中的位进行置位、复位操作,其中填充指令还只能对字操作。比如单单对 Q0.00.6 七个位输出进行置位、复位,采用数据传送指令、移位循环指令、填充指令是很难实现的,此时只有采用直接置位、复位指令的方法。