找plc产品、学plc技术、看plc新闻-尽在PLC行业网!

我的网站

当前位置: 主页 > plc学习 > plc编程 >

对“如何学习PLC及PLC的编程构思、技巧和心得”谈谈自己的体会

时间:2011-09-02 13:28来源:未知 作者:admin 点击:

       有一网友给我发个邮件,他说:“…… 我的问题是:我学了PLC很多的指令,指令也稍好理解。但我们不懂得PLC编程语法,不懂如何把指令组合起来用到实际中去。写一句话必须要懂语法,但我现在不懂得PLC编程语法,不会把指令用到实际当中去,您说我如何解决这个问题?”
      像这位网友给我发邮件的还有几位,都是刚刚毕业参加工作不久的的初学者,都提出类似的问题:问我怎样才能学好编好PLC程序?
      PLC编程如同人写文章一样,同样的文字不同的组合,写出的效果不一样,有的语言精练,条理清晰,几句话说明问题,有的却相反,啰里啰唆,越讲越让人糊涂。如何才能写出好文章呢?只有深入学习,提高文学素质,多写多练,不断积累,不断总结经验,肯定会成功的。对PLC编程也是一样,也要深入学习,提高编程素质,也要多编多练,不断积累,不断总结经验。提高编程素质,不仅仅要深入理解每条指令内涵及用法,还要扩大知识面,使你扩大视野,增强思维和分析问题的能力。
      现举一例:从网上看到一网友求助:其内容为: 有个PT100的温度传感器 通过500欧姆的电阻将4~20MA的电流转换成2-10的电压信号送到PLC模拟量端! h对应的温度范围是0~100度!转换公式为 :

        我给他的回帖是: 4-20ma电流通过500欧姆电阻将产生2-10V 电压,送入PLC的模块,从转换公式可知:式中的6400这个数是由2V转换来的数字量(因为输入2V 时 要使T=0,必需公式的分子项的转换值AIWO-6400=0才行),从中又可知:1V对应的数字量=3200,式中的“AIWO-6400”值即为2-10V输入时模拟块转换的数字量减去2V对应的数字量的值,当输入=10V时,其值=3200*8=25600,要使此时温度显示值为100,就得将此值除以256,但式中后面又乘100,故公式的分母项上 为25600,即=32000-6400。
       可见:这个问题就不是简单用指令编程的问题,它涉及到电学及数学知识,如果没有这方面知识,该公式是很难理解的。
       再举一例:有一在线探伤生产线,在辊道上安放一光电开关,当钢管通过它时,其触点闭合,开始探伤与测长,钢管离开光电开关后,立即将测长值和探伤数据上传给计算机进行处理。由于钢管是旋转前进,如钢管不直,会摆动前进,往往会使光电开关瞬间闪动,使至PLC误判:以为探伤结束给上位机上传错误数据,怎样解决这个问题 ?如你有深厚的电路基础知识,就会想到可以用通电延时与断电延时两个定时器来解决:将二个定时器的时间设定为大于光电开关瞬间闪动的时间,利用断电延时定时器在断电后需延时一段时间方可断电的特性,就可解决光电开关瞬间闪动的问题,但由于它延长一段时间才断开,使对钢管的测长不准,为此,又增加通电延时定时器,用通电延时定时器开关动作的前沿,触发一内部的位开关(比如:M1.0)使其置“1”,用断电延时定时器的开关后沿触发M1.0使其置“0”,这样,用M1.0 做测长计数控制门,就可解决测长不准的问题。
       再如:探伤完了的钢管走出探伤区后,需对它进行分选,将不合格的拨到废品筐。如探伤完后,立即分选,这样情况编程好实现,但现场废品筐的位置离很远的地方,当钢管走到废品筐时,探伤机已探完3或4根钢管,即辊道上已存在3-4根已探完伤的钢管在运行,如何准确无误的将不合格的钢管拨到废品筐里,这对编程也是件辣手的问题。如果你有电子线路设计基础,就会想到,用移位存储器来实现对多根钢管的质量状态进行实时跟踪,你可以这样编程:用一个字节存储器,如:MB100,用它做移位存储器(他可记忆八根钢管质量状态),启动时,先将它清零,探伤时,如发现有伤,立刻将MB100 的最低位置“1”(即:使M100.0=1),当钢管探伤完毕走出探伤区时,用左移指令使MB100左移一位。如果现场是探伤后的第四根到废品筐位进行分选,编程时应将M100.3与废品筐到位的分选开关的常开触点串联,再去驱动拨料装置。这样,当钢管走到废品筐使其到位的控制开关吸合,这时,如果M100.3=1,将驱动拨料装置动作,将钢管拨入废品筐,如果M100.3=0,说明此钢管是合格品,驱动拨料装置不动作,钢管继续在辊道上运行。
      通过上面几个举例,可以看出,扩大知识面,会使你的思路变宽,使你能合理巧妙的使用指令编程,不仅使语句精炼短小,而且控制动作合理可靠。要达到这样编程水平,就得多编多练,不断的总结经验,不断的积累,积累不仅仅是自己的经验,也要虚心向有经验的同行学习,多看看别人的程序,吸收好的编程方法和思路,来不断地提高自己的编程水平。
      下面举一个编程实例,讲讲对一个具体项目如何进行编程:
      这是网上擂台的题目:一台电动机要求在按下起动按钮后,电动机运行10秒,停5秒,重复3次后, 电动机自动停止。同时设置有手动停机按钮和过载保护。编写梯形图控制程序。PLC可以随便选用,要有相关说明。 注意:要有PLC控制电路和I/O分配表。
      1、硬件选择:一台PLC(S7-200)、一个交流接触器Z0(控制电机运行)、2个按钮开关(SB1、SB2)及1个过流继电器(FR),电路图如下:(不包括粉色虚线框部分)
 


      2、 编程:用不同思路,可编出几种不同的控制方案,都可实现该项目要求。 
      (1)、最简单的编程方案,就是选用5个通电延时定时器:其3个定时10秒,用于电机启动运行,另2个定时5秒,使电机停。具体编   程也有二种方式,见下图:
 


           上图中的方案一与方案二,同用5个定时器,完成同样的功能。
       方案一是这样编程:按下启动按钮(I0.0),使 断开。在此过程中,M0.0、MO.2、M0.4都是10秒的导通时间,用它们去控制Q0.7,其彼此间隔时间为5秒(即M0.1、M0.3的通导时间)。延时M0.0=1,T101得电开始延时,延时10秒,T101吸合使M0.1=1、M0.0=0,使T101断电,而T102得电开始延时,5秒后T102得电吸合,使M0.2=1,M0.1=0。。。直到T105得电
       方案二是这样编程:按下启动按钮(I0.0),使 M0.0=1,T101得电开始延时,延时10秒,T101吸合,使T102得电开始延时,延时5秒,T102吸合,使T103得电开始延时。。。直至T105得电延时,延时10秒后动作,使M0.0=0,M0.0=0使T101—T105皆断开,程序结束。用M0.0的常开触点与T101的常闭触点串联,用T102的常开触点与T103的常闭触点串联,用T104的常开触点与T105的常闭触点串联,三者再并联后去驱动Q0.7,可达到同样的控制作用,
        由上图可见,由于编程方法不同,其方案二用的指令比方案一少,显然:方案二优于方案一。
      (2)、用二个定时器(T101、T102)和一个字节存储器(MB1)编程也可实现同样功能:
       按下启动按钮,使MB1=0、M0.0=1,M0.0=1使T101得电开始延时,10秒T101吸合使T102得电吸和,延时5秒,T102吸合,其常闭点断开,使T101、T102失电断开,T101又得电延时。。。形成振荡器,T102每吸合一次,使MB1加1,吸合3次,MB3=3,比较器输出1使M0.0=0,程序结束。用M0.0的常开点与T101与T102的常闭点串连,去驱动电机输出口Q0.7,可实现电机转10秒停5秒,循环3次控制结束。
        该方案所用指令比方案二还少(见上图方案三),可见扩大思路与视野,可编辑出多种不同的可执行方案,从中选出最佳方案,会使你编出的程序,短小精悍。
       此外还有二种编程方案,也可实现这同一课题的控制要求:即是用PLC的秒脉冲(SM0.5)触发存储器使之进行移位或加计数的控制方式实现的控制方案:

       上图的方案四:是选用二个字节存储器(MB2、MB3),按下按钮,其抬起的后沿,使MB2=0、MB3=3,且使M0.1=1。M0.1=1使PLC的秒脉冲SM0.5触发有效:SM0.5的前沿,对MB2进行加1运算,当MB2值<10时,使输出Q0.7始终=1(即电机运转),MB2>=10时,使Q0.7=0(电机停),MB2=15时,使MB2=0,同时MB3减1,再判断MB3=0?,如不=0,由于MB2=0,且<10,使Q0.7=1(电机又转)。。。当MB3=0时(即循环3次),使M0.1=0,程序结束。此程序所用指令少,也是最佳方案。
      上图的方案五:它是采用秒脉冲SM0.5的前沿触发字存储器MW4,使其以次右移一位的方式,对电机进行实时控制:按下启动开关(I0.0),其抬起时,将MW4=16#3F(即MB5的8位皆=1,MB4的低二位值也=1,共10位值都=1),再将MB6=0、MB7=3,同时使M0.2=1。M0.2=1 使SM0.5的前沿触发有效,每触发一次,MW4右移一位,MB6加1,当计满15次时,使MB6=0,且MB7减1,再判断MB7=0?,循环计数3次,其MB7=0,比较器输出信号使M0.2=0,程序结束。每次计数为15,前10个计数,M5.0输出都=1,故输出口Q0.7皆=1,电机运行,后5个计数,其M5.0输出皆 =0,故电机停转。
        这5种编程方案,出于5种不同的构思,望初学者能仔细分析各个程序,如能很好的理解,对你今后的编程是会大有帮助的。
      再介绍几个编程的小实例,都是在网上回答网友求助编写的,程序很短,针对性强,对初学者学习PLC编程会有帮助的:
      一、网友求助:“电机启动后5秒内无反馈则停止电机的程序怎么写哦,请大侠指教 ”
我的回复:可以这样编程:

         程序解析:按下启动按钮(I0.0),其前沿使Q0.0置1(Q0.0=1)电机启动运行,在没有反馈信号时M0.0=0,故定时器T101得电且开始延时,如延时5秒始终没出现反馈信号,T101吸合,使Q0.0=0,电机停转。如延时5秒内出现反馈信号(I0.1=1),使M0.0=1,M0.0的常闭点断开,使T101断电,定时器停止工作,电机保持长时间运行。按定制按钮(I0.1),使Q0.0=0、M0.0=1,电机停,程序结束。
        二、网友求助:“s7-300里的定时器t1,怎么循环启动? 现在是,使用完一次,t1就停止了!而我想用T1实现每隔2秒重复一个动作!请大家帮忙,谢谢!” 又提出:“其实,我就是想用定时器来实现每隔3秒,QB0循环右移一位。 我现在比较菜鸟哈,希望高手们能指点详细点,最好能有梯形图! 嘿嘿,感谢!!”
       回复:“ 楼主:根据你的要求“其实,我就是想用定时器来实现每隔3秒,QB0循环右移一位。”我给你编出用S7-200和用S7-300编出的功能一样的梯形图。从图中可以看出,S7-200由于采用字节循环右移指令,所以编出程序简短易懂。S7-300由于没有字节循环右移指令,就得通过编程来达到同样的功能作用,编出的程序相对长了一些,看懂梯形图也相对难了一点。”


解析梯形图:
    1、图一是用S7200编写的图形图,其编程技巧有二:
   (1)用通电延时定时器T101的常闭点连接T101的线圈构成振荡器,其脉冲的低电平为3秒宽度,高电平为连续二个扫描周期的间隔时间,即只出现一次,故可直接用T101的常开触点去触发QB0的循环右移,而不需选用其前沿触发,就可确保QB0只右移一次。
  (2)、选用字节循环右移指令,在T101=1的这一扫描周期里将此时刻的QB0内容右移一位,同时又自动的将移出的QB0的最高位(Q0.7)送回QB0的最低位(Q0.0)(如不需循环右移,可改用字节右移一位的指令),使编程简短易懂。
    2、图二是用S7300编写的图形图,其编程技巧也是使用T101构成的振荡器,利用该振荡脉冲的正方波在程序扫描中只出现一次的特点,完成将QB0右移一位。由于S7-300没有字节移位指令,编程是这样处理:将QBO送入MW7的低字节MB8中,右移一位MW7,MB8也随之右移一位, M8.0”这条语句去掉就可以了。MB8的最高位移到MB7的最低位(即M8.0),再把M8.0送入M7.0中,再把MB8送回QB0,从而实现了将QB0内容的循环右移一位的功能,如程序不需要循环右移,可将“M7.0
       三、网友求助:“如何把一个字节的全部位,高位低位反向重排。
                                        01234567
                                       76543210 ”
      回复:现用S7-200编出一个字节内容反排列的程序梯形图,供你参考
        程序解析:该程序编程的技巧就是巧妙地运用字节的循环左移与字节右移:MB10为原数据,MB12为转换后的反排列数据,启动此程序,先将MB0=7,再使M1.0、M1.1置1。M1.0=1,先将M10,7-->M12.7,再将MB10循环左移一次,这样原MB10的内容左移一位,原M10.6-->M10.7,而MB12右移一位,将M12.7-->M12.6, 而0-->M12.7’,接着MB0减1,再判断MB0等不等0,不等0,下一周期再进行上述移位运算及判断,当MB0=0时,MB10循环左移7次,同时使M1.0=0,停止此段程序再运行,M1.0=0、M1.1=1,使MB10又右移一位,使MB10正好恢复原数值,而MB12的内容变为MB10的内容的反排列数值。
        由于PLC指令没有位信号交换指令,对于字或双字的内容反排列用此思路编程最好,对单字节也可这样编程:将M10.7-->M12.0 M10.6-->M12.1 M10.5>M12.2 M10.4-->M12.3 .....M10.0-->M12.7即可。再将MB12-->MB10,就可实现将一个字节的内容反排列仍放在原字节中。 

       四、 用S7-200编程,实现用一个按钮可控制电机的正传、反转、停车的梯形图

        该梯形图编程技巧是:用按钮的输入点(I1.0)连接断电延时定时器(T101),及通电延时定时器(T102),T101延时为0.2 S,T102延时为1 S,T101作用是防按钮颤动而形成连发现象,确保按一下按钮只产生一个脉冲(即T101)从而确保对MB5加1运算的正确性,二次连续按钮的时间间隔控制在0.5S以下,T102 延时为 1S,故在连续按钮时,由于间隔时间小于1S,它不断的被切断。只有按下按钮不抬起(保持I1.0=1),当延时大于1S时,T102动作,其前沿将MB5的内容传入MB6,再将MB5清0。
         工作原理及操作说明:
   1) 开机SM0.1将MB5=1、MB6清0,由于M6.0、M6.1皆为0,使Q0.0与Q0.1都=0,故电机停止不动。
   2)电机正传运行:点击一下按钮(I1.0),产生一个(T101=1)的正脉冲,其后沿触发MB5计数器,使其+1,再按下按钮不抬起,此时MB5=0000_0010。经1秒延时,T102闭合,其前沿将MB5的内容送入MB6,随之将MB5清0。此时M6.0=0、M6.1=1,故使Q0.0=1,电机正传运行。随后将按钮抬起,T101的后沿使MB5+1,此时MB5=0000_0001。
   3) 电机停转:按下按钮不抬起,此时MB5=0000_0001。延时1秒后T102动作,T102=1的前沿,将MB5送入MB6,之后MB5清0,此时M6.0=1、M6.1=0,故Q0.0、Q0,1皆为0,电机停止转动。当按钮抬起时,T101的后沿触发MB0,使MB5=1。
   4) 电机反转运行:点击二下按钮(I1.0),产生二个(T101=1)的正脉冲,其后沿触发MB5计数器,使其+2,再按下按钮不抬起,此时MB5=0000_0011。经1秒延时,T102闭合,其前沿将MB5的内容送入MB6,随之将MB5清0。此时M6.0=1、M6.1=1,故使Q0.1=1,电机反传运行。随后将按钮抬起,T101的后沿使MB5+1,此时MB5=0000_0001。
该程序经上机运行,程序正确,动作可靠。
       五、这是擂台项目:有5个执行动作其动作顺序可以任意改变,如何编程来实现这5个执行动作能准确无误的执行新的设定顺序?
这是一网友求助帖提出的,原文是:“ 有5个执行动作我转换为操作数,姑且定为D10、D20、D30、D40、D50,它们每一个都可能写入从0 到5的数值。最后执行是从1到5 依次执行输出,是0的不执行跳过,不知如何编,请高手指点,谢谢了!”又“……如这一次是按1/2/3/4/5依次动作,下一次也许设置为按5/3/2/动作,再下一次就1/5/2/3/。。。。。”“两次执行的间隔时间可设定,暂定3秒看设备运转情况而定”
回复:
                    一、 PLC的硬件设置及有关事项说明:选用S7-200PLC编程。
1、其输入口:
     I1.0 为启动按钮,
     I1.1 为停止动作按钮。
    *** 以下的I0.0 ~ I0.5 六个输入点是为手动设置参数的按钮地址。是为在没有上位机或触摸屏与PLC通讯的条件下,可用这6个按钮,对5路执行机构的动作顺序号及动作间隔时间进行手动设置。其各输入点定义如下:
    I0.0 为设置第1路执行机构执行动作的顺序号按钮
    I0.1 为设置第2 ~ 5路执行机构执行动作的顺序号按钮,设置值:0~5
    I0.2 为设置第2 ~ 5路执行机构执行动作的顺序号左移8位按钮
    I0.3 为复位按钮,即将第1~ 第5 路机构的顺序号清0,起作用是为更改5个机构动作的顺序号值做清0准备。
    I0.4 为相邻二个机构动作时间间隔值的个位数设置按钮,设置值:0~F(16进制数)
   I0.5 将时间设定值左移4位按钮

2、其输出口:
   Q0.0 为第1路执行机构输出
   Q0.1 为第2路执行机构输出
   Q0.2 为第3路执行机构输出
   Q0.3 为第4路执行机构输出
   Q0.4 为第5路执行机构输出
3、VB10、VB11、VB12、VB13、VB14分别为第1~第5执行机构动作顺序号设置区
      为节省设置按钮,将VB11、VB12、VB13、VB14合并为一个双字存储器VD11。
4、VW30 为相邻二个机构动作时间间隔设置区。
             二、S7-200编程的梯形图:

     注: 网络1~网络5为主程序,即实现楼主要求的梯形图,以下为用PLC自身设置参数的程序,如能用触摸屏等设置参数,可不用。
下面仍介绍一下“用PLC自身设置参数的程序”,目的是帮助初学者在没有上位机或触摸屏的条件下,如何实现用PLC的输入点对其内部参数(如定时器时间设定等)进行设置。
     从图中可以看到: 按钮I0.0~I0.5都加一个断电延时定时器,目的是防止按按钮时因颤抖引起打连发现象,确保置数准确。
     为了帮助大家学会使用按钮设置参数(特别对VD11的设置)现举二例:
第一例:
      一、要求:
1、5个执行机构在启动后的动作顺序为:
机构3动 -> 机构1动-> 机构4动-> 机构5动-> 机构2动。相邻二个机构动作的间隔时间为:20秒。
即:设置动作顺序号应为 VB12=1、VB10=2、VB13=3、VB14=4、VB11=5
整理:VB10=2 VD11=05010304

2、相邻机构动作间隔时间为:20(秒) 即: VW30 = 20 = $ 14 (16进制数)
     二、设置5个执行机构动作顺序号数:
(1)、设置VB10: 用手连按二下 I0.0 ,监视VB10,其VB10=2,即VB10顺序号=2。
(2) 设置VD11: 先按I0.1五下,此时VD11=5,再按一下I0.2,使VD11左移8位,此时VD11=1280 (即16进制数:$ 500).再按I0.1一下,VD11=1281(即16进制数:$ 501),再按I0.2一下,此时VD11左移8位 ,VD11=327936(即16进制数$ 50100).再连按I0.1三下,VD11=327939(16进制数:$ 50103),按一下I0.2,VD11=83952384(即16进制数:$5010300),最后再连按I0.1四下,其VD11=83952388(即16进制数:5010304),到此VD11设置完毕。
(3)、设置VW30:VW30的设置数应为16进制数,故20秒应转换为16进制数($14),设置:先按I0.4一下,即:VW30=1,再按I0.5 一下,VW30左移4位,此时VW30=16,再连按I0.4四下,此时 VW=20(即16进制数:$ 14)。VW30设置完毕。
       第二例:
设置要求:5个执行机构的动作顺序号为:VB10=3、VB11=2、VB12=0、VB13=3、VB14=5
整理得:VB10=3、VD11=02000305
对VD11参数的设置过程应为:
按I0.1二下 ―> 按I0.2二下 ―> 按I0.1三下 ―> 按I0.2一下 ->按I0.1五下,设置完毕。
其动作顺序是:启动后,5个机构皆不动作,延时VW30设定时间,VB11动作,再延时VW30设定时间,VB10与VB13同时动作,再延时VW30设定时间,无机构动作,再延时VW30设定时间,VB14动作.到此整个动作结束。
 
顶一下
(2)
40%
踩一下
(3)
60%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
栏目列表
推荐内容
  • PLC功能指令

    详细介绍 PLC 功能指令。 一、FX系列PLC可编程控制器功能指令概述 1 功能指令的通用表...

  • PLC步进指令的应用

    详细介绍 PLC 步进指令的应用。 一、小球分类传送系统 图 8.7 为小球分类传送系统示意...

  • PLC步进指令状态转移图的主要类型

    详细介绍 PLC 步进指令状态转移图的主要类型。 一、单流程 图 8.3 为单流程的应用示例...

  • PLC步进指令和步进梯形图

    一、步进指令 ( 1 ) STL :步进开始指令 ( 2 ) RET :步进返回指令 二、步进梯形...

  • plc步进指令状态转移图

    介绍plc步进指令的状态转移图。 状态转移图又叫功能图,它是用状态元件描述工步状态的...

  • PLC基本逻辑指令

    详细介绍PLC的基本逻辑指令, plc 逻辑指令。 一、 逻辑取及输出线圈(LD/LDI/...