如何扩展PLC控制系统中I/O点数的方法

1  引言
    可编程序控制器(Programmable Logic Controller)简称为,它具有可靠性高、抗干扰能力强等突出优点,因而广泛应用于工业控制领域,已经成为现代工业自动化的主要支柱之一。在PLC控制系统的设计中,经常会遇到I/O点资源紧张以及性价比矛盾的问题。有些被控设备需要具有手动、自动的工作方式,且手动部分控制按钮较多;有些自动生产线中,进行位置检测的行程开关或者用于系统工作状态指示的输出比较多,都会使占用的I/O点大为增加。一般通过增加扩展模块来解决,但PLC的I/O点价格昂贵,且还有扩展模块数目和I/O点数目的限制,如SIEMENS的CPU 226最大扩展模块数目为7,最大扩展168路数字量I/O点或35路模拟量I/O点。若此时再增加CPU,势必使得系统性价比大为降低,在这种情况下,扩展I/O点数具有较大的实际意义。本文以SIEMENS的S7-200 PLC为例,探讨如何扩展PLC控制系统中I/O点数的方法。

2  硬件电路I/O点扩展方法
2.1  分时分组输入

    对于既有手动方式又有自动方式,而二者不可能同时执行的PLC工作方式,不同工作方式的输入可以共用一个PLC的输入点。分时分组输入扩展I/O点数接线图如图l所示。I1.0用来输入自动/手动命令信号,供自动和手动程序切换用;用来切断寄生电路,避免错误信号的产生;SA用来切换自动和手动操作方式。

图1     分时分组输入接线图

2.2  共用输出触点
    对于通断状态完全相同的负载,在输出点功率允许的情况下,可以并联于同一输出点上,即用一个输出点带动多个负载,需特别注意的是不能超出每个输出点的允许负载能力。接线方式如图2所示。

图2     共用输出点接线图

2.3  合并输入触点
    对于一个由如图3所示的按钮和实现的多点起动、停止的控制要求,例如可在三处实现启动和停止,其中,SB1、SB2、SB3为起动按钮,SB11、SB12、SB13为停止按钮。可以将每个按钮接PLC的一个输入点,很容易便可实现。若PLC的输入点较为紧张,则可以用图4所示的方式接线,与每个按钮占用一个输入点的方式相比,该方法的软件编程更为简单。

图3     电动机控制原理图

图4     电动机PLC控制接线图 

3  软件编程I/O点扩展方法
    软件扩展的基本思想是一点两用或轮序复用。即当按钮初次按下时,输出要求为高;当按钮再次按下时,输出要求为低;再按下时又为高,依此类推。这样就可以节省一个输入点,当系统有较多开关量控制时可节省较多输入点,如主机ON和主机OFF,纸料座上和纸料座下,都可以只用一个输入点来控制。实现“一点两用”的编程方法较多,如利用内部辅助、定时器、计数器、移位指令等,本文仅介绍几种简便方法。
3.1  利用边沿检测、输出指令
    若按钮SB连到I0.0上,输出控制Q0.0,利用边沿检测和输出指令实现“一点两用”,用STEP7 V5.3编制的STL程序如下。
    A     I0.0
    FP    M0.0
    =     M0.1
    A     M0.1
    A     Q0.0
    =     M0.2
    A( 
    O     M0.1
    O     Q0.0
    ) 
    AN   M0.2
    =     Q0.0
    程序说明:当第1次按下按钮SB时,I0.0的常开触点闭合,在RLO边沿检测指令FP的作用下,辅助继电器M0.1接通一个扫描周期,从而输出继电器Q0.0的线圈得电,且Q0.0构成自锁(保持)电路,同时Q0.0另一对常开触点闭合,为M0.2接通做准备;当第2次按下按钮SB时,在FP指令的作用下,M0.1的常开触点接通M0.2的线圈回路,M0.2的常闭触点切断了PLC的输出,从而实现一点两用。
3.2  利用边沿检测、跳转指令
    若利用边沿检测和跳转指令,实现起来较为简便,其STL程序如下。
    A  I0.0
    FP M0.0
    JNB OUT
    AN Q0.0
    =  Q0.0
    OUT:  NOP0
    程序说明:第4、5个语句的功能是实现Q0.0的自取反,但若没有前面的跳转指令,则程序每个扫描周期都会将Q0.0的状态取反一次;第1、2句的作用是限定只有当I0.0的上升沿到时取反一次,否则跳出取反程序段,从而实现一点两用。
3.3  利用边沿检测、异或指令
    若利用边沿检测和异或指令实现起来更为简便,程序如下。
    A     I 0.0
    FP    M0.0
    X     Q0.0
    =     Q0.0
    程序说明:当第1次检测到I0.0的上升沿,此时Q0.0为0,所以异或后输出Q0.0为1,第2个扫描周期来时,已经不是I0.0的上升沿了,因此为0,然而此时Q0.0确为1,所以异或后保持结果仍为1;第2次检测到上升沿时,Q0.0为1,异或后输出Q0.0的结果为0,等到下一个扫描周期到时,已经不是上升沿了,而此时Q0.0还是为0,因此异或保持输出仍为0。

[NextPage]

4  硬件和软件结合I/O点扩展方法
4.1  硬件编码和软件译码,扩展输入点
    在控制系统输入信号较多的情况下,可以利用编码器对输入信号编码,然后引到PLC的输入端,再通过PLC内部程序配合进行译码,对各个输入信号加以识别,可以大大减少对输入点的占用。PLC的外部接线如图5所示。由于普通编码器在有多个信号同时输入时会出现乱码,故可采用8线-3线优先编码器74LS148,设定好信号的优先权,有时还要将编码器的选通输出端和扩展端也接入PLC中,配合程序减少误判断。另外,还要注意的是电平的匹配问题(信号电路的+5V和PLC的+24V之间)以及PLC的输入口对信号识别所要求的技术规范(驱动电流和电压能识别的范围),有时还需增加适当的信号放大和隔离电路。

图5     硬件编码接线图

    下面以按钮SB2按下为例,说明PLC内部软件译码的程序识别方法。由74LS148的功能表可知,该芯片低电平有效,因此图5中用3个非门将输出电平转换成正逻辑。若SB2按下,无论SB0和SB1是否按下,但SB3~SB7均未按下;此时,ABC的输出为101,经过非门后I0.0,I0.1,I0.2的状态分别为0,1,0;对应的STL译码程序如下。
    LDN I0.0
    A  I0.1
    AN I0.2
    =  M0.2
    这样,笔者在程序里用M0.2的常开触点代替了按钮SB2。即当按钮SB2按下,M0.2为1;SB2弹起,M0.2又为0,从而实现了软件译码的功能。另外需要指出,该方法在PLC的每一个扫描周期只能读入8个输入中的一个输入状态,若有2个以上开关闭合,PLC只能检测出优先权高的那个信号。
 4.2  软件编码和硬件译码,扩展输出点
    在控制系统输出信号较多的情况下,可以通过PLC的内部程序对输出信号进行编码,然后通过硬件译码器

[NextPage]

进行译码,驱动负载工作,这可以大大的减少对输出点的占用。PLC的外部接线如图6所示,采用3线-8线译码器74LS138。此时,同样存在电平匹配的问题,即PLC的直流模块典型输出为+24V,而信号电路的工作电压一般为+5V,因此,有时同样需要增加信号电路以及功率放大电路以驱动负载工作。

 图6     PLC接线图

    下面以如何让Q2为1为例,说明PLC内部软件的编码方法。由74LS138的功能表可知,若要使输出Q2为1,应该使Y2输出为0;即对应的ABC应该为010,从而得到只要让PLC的Q0.0,Q0.1,Q0.2分别为0,1,0即可;对应的STL编码程序如下,其中M1.2为置位输出Q2的条件。
    LD     M1.2
    S      Q0.0, 1
    R      Q0.1, 1
    S      Q0.2, 1
    这样,只需对Q0.0,Q0.1,Q0.2进行组合就可以实现对输出Q0~Q7分别置为1。本方法存在一个明显的缺点,即每一个扫描周期只能输出八种状态中的一种,若要同时置位输出Q0和Q1是不能实现的。
4.3  用N个输入点识别N×(N+1)/2个输入信号
    若我们将输入信号接成图7的形式,再配合以软件编程便可以实现用3个输入点识别3×(3+1)/2=6个输入信号。其基本思想是:当SB1按下时,PLC只检测到了I0.0为“1”,此时I0.1和I0.2的状态均为“0”,那么在程序里就将I0.0的常开触点和I0.1、I0.2的常闭触点相与来识别SB1的状态;若SB2按下时,I0.0和I0.1均为“1”,I0.2为“0”,此时识别程序应该为I0.0和I0.1的常开触点与上I0.2的常闭触点;其它点的情况类似,输入信号SB1和SB2的STL识别程序如下,其中,M2.1、M2.2的状态就代表了信号SB1、SB2的状态。
    LD     I0.0
    AN     I0.1
    AN     I0.2
    =      M2.1
    //信号SB1的识别
    LDN    I0.0
    A      I0.1
    A      I0.2
    =      M2.2
    //信号SB2的识别
    需要指出:这种方法不能识别2个及2个以上的信号同时为1的情况,如SB1和SB3同时接通,程序会把它当成SB2接通的情况识别。图7中二极管的作用是为了隔断寄生电流形成通路。其实,用3个输入点最多可以7个信号的识别,如果在图7中再加一个SB7,用3个二极管连到I0.0、I0.1、I0.2上,则可以通过将3个点的常开触点相与来识别SB7,但这样过于繁琐,因此一般不采用。 

图7     硬件接线图 

4.4  用输入/输出口组成矩阵式键盘
    若控制系统需要设计键盘,常规的思路是每个按键接一个输入口。然而,当键数增加时,极为浪费输入点,因此仿照微机系统中制作矩阵式键盘的思路,在PLC系统中利用I/O点组成矩阵式键盘,如图8所示为3×3键盘结构图。编程思路:首先,判断整个键盘上有无键按下,方法是将行全输出为1,然后读入列的状态,如果列读入的状态全为0,则无键按下,不全为0则有键按下;其次,逐列扫描,方法是依次将行线送1,检查对应列线的状态,若列线全为0,则按键不在此行;若不全为0,则按键必在此行,且是与1电平列线相交的那个键。由此可见,对应的软件编程比较复杂,但是在有些小型的控制系统中可以避免增加操作屏或,从而提高系统性价比。若需要详细的硬件设计图和软件程序可与作者联系。

图8     3×3键盘结构图

 

5  结束语
本文从硬件设计、软件编程以及硬件软件结合三个方面探讨了扩展PLC I/O点的方法。在具体应用时,还需考虑每种扩展方法的一些优缺点以及抗干扰能力等问题。若能合理的利用这些方法,必能有效的节省PLC的I/O点数,降低系统成本,提供性价比,更为充分的发挥PLC的优势。

,

1  引言
    可编程序控制器(Programmable Logic Controller)简称为,它具有可靠性高、抗干扰能力强等突出优点,因而广泛应用于工业控制领域,已经成为现代工业自动化的主要支柱之一。在PLC控制系统的设计中,经常会遇到I/O点资源紧张以及性价比矛盾的问题。有些被控设备需要具有手动、自动的工作方式,且手动部分控制按钮较多;有些自动生产线中,进行位置检测的行程开关或者用于系统工作状态指示的输出比较多,都会使占用的I/O点大为增加。一般通过增加扩展模块来解决,但PLC的I/O点价格昂贵,且还有扩展模块数目和I/O点数目的限制,如SIEMENS的CPU 226最大扩展模块数目为7,最大扩展168路数字量I/O点或35路模拟量I/O点。若此时再增加CPU,势必使得系统性价比大为降低,在这种情况下,扩展I/O点数具有较大的实际意义。本文以SIEMENS的S7-200 PLC为例,探讨如何扩展PLC控制系统中I/O点数的方法。

2  硬件电路I/O点扩展方法
2.1  分时分组输入

    对于既有手动方式又有自动方式,而二者不可能同时执行的PLC工作方式,不同工作方式的输入可以共用一个PLC的输入点。分时分组输入扩展I/O点数接线图如图l所示。I1.0用来输入自动/手动命令信号,供自动和手动程序切换用;用来切断寄生电路,避免错误信号的产生;SA用来切换自动和手动操作方式。

图1     分时分组输入接线图

2.2  共用输出触点
    对于通断状态完全相同的负载,在输出点功率允许的情况下,可以并联于同一输出点上,即用一个输出点带动多个负载,需特别注意的是不能超出每个输出点的允许负载能力。接线方式如图2所示。

图2     共用输出点接线图

2.3  合并输入触点
    对于一个由如图3所示的按钮和实现的多点起动、停止的控制要求,例如可在三处实现启动和停止,其中,SB1、SB2、SB3为起动按钮,SB11、SB12、SB13为停止按钮。可以将每个按钮接PLC的一个输入点,很容易便可实现。若PLC的输入点较为紧张,则可以用图4所示的方式接线,与每个按钮占用一个输入点的方式相比,该方法的软件编程更为简单。

图3     电动机控制原理图

图4     电动机PLC控制接线图 

3  软件编程I/O点扩展方法
    软件扩展的基本思想是一点两用或轮序复用。即当按钮初次按下时,输出要求为高;当按钮再次按下时,输出要求为低;再按下时又为高,依此类推。这样就可以节省一个输入点,当系统有较多开关量控制时可节省较多输入点,如主机ON和主机OFF,纸料座上和纸料座下,都可以只用一个输入点来控制。实现“一点两用”的编程方法较多,如利用内部辅助、定时器、计数器、移位指令等,本文仅介绍几种简便方法。
3.1  利用边沿检测、输出指令
    若按钮SB连到I0.0上,输出控制Q0.0,利用边沿检测和输出指令实现“一点两用”,用STEP7 V5.3编制的STL程序如下。
    A     I0.0
    FP    M0.0
    =     M0.1
    A     M0.1
    A     Q0.0
    =     M0.2
    A( 
    O     M0.1
    O     Q0.0
    ) 
    AN   M0.2
    =     Q0.0
    程序说明:当第1次按下按钮SB时,I0.0的常开触点闭合,在RLO边沿检测指令FP的作用下,辅助继电器M0.1接通一个扫描周期,从而输出继电器Q0.0的线圈得电,且Q0.0构成自锁(保持)电路,同时Q0.0另一对常开触点闭合,为M0.2接通做准备;当第2次按下按钮SB时,在FP指令的作用下,M0.1的常开触点接通M0.2的线圈回路,M0.2的常闭触点切断了PLC的输出,从而实现一点两用。
3.2  利用边沿检测、跳转指令
    若利用边沿检测和跳转指令,实现起来较为简便,其STL程序如下。
    A  I0.0
    FP M0.0
    JNB OUT
    AN Q0.0
    =  Q0.0
    OUT:  NOP0
    程序说明:第4、5个语句的功能是实现Q0.0的自取反,但若没有前面的跳转指令,则程序每个扫描周期都会将Q0.0的状态取反一次;第1、2句的作用是限定只有当I0.0的上升沿到时取反一次,否则跳出取反程序段,从而实现一点两用。
3.3  利用边沿检测、异或指令
    若利用边沿检测和异或指令实现起来更为简便,程序如下。
    A     I 0.0
    FP    M0.0
    X     Q0.0
    =     Q0.0
    程序说明:当第1次检测到I0.0的上升沿,此时Q0.0为0,所以异或后输出Q0.0为1,第2个扫描周期来时,已经不是I0.0的上升沿了,因此为0,然而此时Q0.0确为1,所以异或后保持结果仍为1;第2次检测到上升沿时,Q0.0为1,异或后输出Q0.0的结果为0,等到下一个扫描周期到时,已经不是上升沿了,而此时Q0.0还是为0,因此异或保持输出仍为0。

[NextPage]

4  硬件和软件结合I/O点扩展方法
4.1  硬件编码和软件译码,扩展输入点
    在控制系统输入信号较多的情况下,可以利用编码器对输入信号编码,然后引到PLC的输入端,再通过PLC内部程序配合进行译码,对各个输入信号加以识别,可以大大减少对输入点的占用。PLC的外部接线如图5所示。由于普通编码器在有多个信号同时输入时会出现乱码,故可采用8线-3线优先编码器74LS148,设定好信号的优先权,有时还要将编码器的选通输出端和扩展端也接入PLC中,配合程序减少误判断。另外,还要注意的是电平的匹配问题(信号电路的+5V和PLC的+24V之间)以及PLC的输入口对信号识别所要求的技术规范(驱动电流和电压能识别的范围),有时还需增加适当的信号放大和隔离电路。

图5     硬件编码接线图

    下面以按钮SB2按下为例,说明PLC内部软件译码的程序识别方法。由74LS148的功能表可知,该芯片低电平有效,因此图5中用3个非门将输出电平转换成正逻辑。若SB2按下,无论SB0和SB1是否按下,但SB3~SB7均未按下;此时,ABC的输出为101,经过非门后I0.0,I0.1,I0.2的状态分别为0,1,0;对应的STL译码程序如下。
    LDN I0.0
    A  I0.1
    AN I0.2
    =  M0.2
    这样,笔者在程序里用M0.2的常开触点代替了按钮SB2。即当按钮SB2按下,M0.2为1;SB2弹起,M0.2又为0,从而实现了软件译码的功能。另外需要指出,该方法在PLC的每一个扫描周期只能读入8个输入中的一个输入状态,若有2个以上开关闭合,PLC只能检测出优先权高的那个信号。
 4.2  软件编码和硬件译码,扩展输出点
    在控制系统输出信号较多的情况下,可以通过PLC的内部程序对输出信号进行编码,然后通过硬件译码器

[NextPage]

进行译码,驱动负载工作,这可以大大的减少对输出点的占用。PLC的外部接线如图6所示,采用3线-8线译码器74LS138。此时,同样存在电平匹配的问题,即PLC的直流模块典型输出为+24V,而信号电路的工作电压一般为+5V,因此,有时同样需要增加信号电路以及功率放大电路以驱动负载工作。

 图6     PLC接线图

    下面以如何让Q2为1为例,说明PLC内部软件的编码方法。由74LS138的功能表可知,若要使输出Q2为1,应该使Y2输出为0;即对应的ABC应该为010,从而得到只要让PLC的Q0.0,Q0.1,Q0.2分别为0,1,0即可;对应的STL编码程序如下,其中M1.2为置位输出Q2的条件。
    LD     M1.2
    S      Q0.0, 1
    R      Q0.1, 1
    S      Q0.2, 1
    这样,只需对Q0.0,Q0.1,Q0.2进行组合就可以实现对输出Q0~Q7分别置为1。本方法存在一个明显的缺点,即每一个扫描周期只能输出八种状态中的一种,若要同时置位输出Q0和Q1是不能实现的。
4.3  用N个输入点识别N×(N+1)/2个输入信号
    若我们将输入信号接成图7的形式,再配合以软件编程便可以实现用3个输入点识别3×(3+1)/2=6个输入信号。其基本思想是:当SB1按下时,PLC只检测到了I0.0为“1”,此时I0.1和I0.2的状态均为“0”,那么在程序里就将I0.0的常开触点和I0.1、I0.2的常闭触点相与来识别SB1的状态;若SB2按下时,I0.0和I0.1均为“1”,I0.2为“0”,此时识别程序应该为I0.0和I0.1的常开触点与上I0.2的常闭触点;其它点的情况类似,输入信号SB1和SB2的STL识别程序如下,其中,M2.1、M2.2的状态就代表了信号SB1、SB2的状态。
    LD     I0.0
    AN     I0.1
    AN     I0.2
    =      M2.1
    //信号SB1的识别
    LDN    I0.0
    A      I0.1
    A      I0.2
    =      M2.2
    //信号SB2的识别
    需要指出:这种方法不能识别2个及2个以上的信号同时为1的情况,如SB1和SB3同时接通,程序会把它当成SB2接通的情况识别。图7中二极管的作用是为了隔断寄生电流形成通路。其实,用3个输入点最多可以7个信号的识别,如果在图7中再加一个SB7,用3个二极管连到I0.0、I0.1、I0.2上,则可以通过将3个点的常开触点相与来识别SB7,但这样过于繁琐,因此一般不采用。 

图7     硬件接线图 

4.4  用输入/输出口组成矩阵式键盘
    若控制系统需要设计键盘,常规的思路是每个按键接一个输入口。然而,当键数增加时,极为浪费输入点,因此仿照微机系统中制作矩阵式键盘的思路,在PLC系统中利用I/O点组成矩阵式键盘,如图8所示为3×3键盘结构图。编程思路:首先,判断整个键盘上有无键按下,方法是将行全输出为1,然后读入列的状态,如果列读入的状态全为0,则无键按下,不全为0则有键按下;其次,逐列扫描,方法是依次将行线送1,检查对应列线的状态,若列线全为0,则按键不在此行;若不全为0,则按键必在此行,且是与1电平列线相交的那个键。由此可见,对应的软件编程比较复杂,但是在有些小型的控制系统中可以避免增加操作屏或,从而提高系统性价比。若需要详细的硬件设计图和软件程序可与作者联系。

图8     3×3键盘结构图

 

5  结束语
本文从硬件设计、软件编程以及硬件软件结合三个方面探讨了扩展PLC I/O点的方法。在具体应用时,还需考虑每种扩展方法的一些优缺点以及抗干扰能力等问题。若能合理的利用这些方法,必能有效的节省PLC的I/O点数,降低系统成本,提供性价比,更为充分的发挥PLC的优势。

如何扩展PLC控制系统中I/O点数的方法

相关文章:

你感兴趣的文章:

标签云: