对PLC编程的一点体会.................................................................................................1关于“4-20ma”的讨论.......................................................................................................5用S7-200编程的三个实例的解析之一.........................................................................6用S7-200编程的“时序控制程序”的解析......................................................................9用S7-200编程的三个实例的解析之二.......................................................................15用S7-200编程的三个实例的解析之三.......................................................................27用S7-200/300编程的三个实例的解析之四................................................................34用S7-200编程的三个实例解析之五..........................................................................36对对对对PLC编程的一点体会编程的一点体会编程的一点体会编程的一点体会PLC编程如同人写文章一样,同样的文字不同的组合,写出的效果不一样,有的语言精练,条理清晰,几句话说明问题,有的却相反,啰里啰唆,越讲越让人糊涂。如何才能写出好文章呢?只有深入学习,提高文学素质,多写多练,不断积累,不断总结经验,肯定会成功的。对PLC编程也是一样,也要深入学习,提高编程素质,也要多编多练,不断积累,不断总结经验。提高编程素质,不仅仅要深入理解每条指令内涵及用法,还要扩大知识面,使你扩大视野,增强思维和分析问题的能力。现举一例:前两天,从网上看到一网友求助:其内容为:有个PT100的温度传感器通过500欧姆的电阻将4~20MA的电流转换成2-10的电压信号送到PLC模拟量端!h对应的温度范围是0~100度!则转换公式为AIW0-6400T=----------------X(100-0)+032000-6400这个公式怎么来的啊?“通过500欧姆的电阻将4~20MA的电流转换成2-10的电压信号送到PLC模拟量端!”这句话是不是这个意识啊?如果要用电流信号!就不用500欧姆的电阻!直接采取4~20MA的电流接到输入端!如果要用电压信号!就串联500欧姆的电阻!采取2~10V的电压信号!这个电压是指电阻分压得到电阻两端的电压吗?》我给他的回帖是:《w375823876:我给你说说这个问题,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-0)故公式的分母项上为32000-6400,及=25600.你用的是输入要求0-10V电压模拟信号的模拟量转换块,不能直接用4-20ma电流做输入信号。》这个问题就不是简单用指令编程的问题,它涉及到电学及数学知识,如果没有这方面知识,是很难理解的。再举一例,有的生产线,不仅要求对设备动作编程,还要能预置参数,对生产状况能进行实时显示,并能打印出来。考虑设备成本,现场条件及操作者素质,不要配备工控机及触摸屏,怎么办,外配仪表,找不到合适的,用单片机自行设计,可以。但抗干扰差,一旦数据丢失无法恢复,这是设备生产所不容许的。我就用硬件设计了一个电路并做出印刷板,采用串口输送数据的方式,仅占用PLC的几个I/O口,就实现了上述功能,用PLC的高数计数器进行数据采集,用PLC进行数据运算处理,PLC将结果输出给电路板,完成了参数设定、数据显示及打印功能,由于PLC抗干扰强,且具有断电对数据保护功能,不会出现数据丢失现象。了解掌握指令的特性,可以巧妙使用指令去完成一些控制动作。如有一网友求助:“求:将0-4mm数字量转换为0-10V模拟量后,利用西门子PLC如何解决将2mm以下数字量进行报警剔除请高手帮忙。”我的回帖:“WWPLC;可以这样做:0-4mm转换0-10V,去PLC,你一定选用电压转换为数字量的模块,你应从该模块的参数中,知道1V电压应转换的数字量值,2mm对应的电压应=5V,其对应的数字量,应等于5乘1V的数字量,这样你可在编程时,用一比较指令,用2mm对应的数字量值与0-4mm信号输入且转换为数字量的值进行比较,大于2mm,通过,小于2mm你做删除处理。”从中可见,用一个比较指令就可解决问题再如:在钢厂的一些生产线上,当料台前端有钢管,拨料装置就将其拨到辊道上,一般用接近开关放置在料台前端下方,上方有料时,接近开关吸合,使拨料装置动作,将钢管从料台拨到辊道上。在编程时,不能简单的用一个接近开关的常开触点直接驱动拨料装置,要考虑现场实际情况:当钢管从送料处,滚到料台前端时,其冲量很大,碰到挡板时,它不会立即停下,而是前后摆动几次方能停下来,而且会出现斜放状态,如直接用接近开关触点去触发拨料装置,就会出现空拨或把钢管拨翻的事故,怎样处理这个问题,我们可以用两个接近开关,放在料台前端两侧,用这两个开关的常开触点串联去接通定时为30秒的通电延时定时器,再用该定时器的常开触点去触发拨料装置,即可解决这个问题:1、两个开关必须都闭合,方可确认钢管不是斜放位置,2、如钢管前后摆动,接近开关的常开触点也会随之通断通断的变化,这使得定时器,也随之不断的刷新定时时间,重新从0开始计时,,直到钢管稳定时,定时器才可从0开始计时,计时30秒,定时器动作,触发拨料装置使其动作。这也是巧妙利用定时器的这个特性:它在得电延时中,如输入断开,停止延时计数,再接通时,它将重新从0延时计数。再如:有一在线探伤生产线,在辊道上安放一光电开关,当钢管通过它时,其触点闭合,开始探伤与测长,钢管离开光电开关后,立即将测长值和探伤数据上传给计算机进行处理。由于钢管是旋转前进,如钢管不直,会摆动前进,往往会使光电开关瞬间闪动,使至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,说明此钢管是合格品,驱动拨料装置不动作,钢管继续在辊道上运行。通过上面几个举例,可以看出,合理巧妙的使用指令编程,不仅使语句精炼短小,而且控制动作合理可靠。要达到这样编程水平,就得多编多练,不断的总结经验,不断的积累,积累不仅仅是自己的经验,也要虚心向有经验的同行学习,多看看别人的程序,吸收好的编程方法和思路,来不断地提高自己的编程水平。下面通过一个实例来讲讲如何进行PLC编程的:此例也是从网上看到的,由于忘记发帖人的用户名,没有找到原帖,这里将他的求助内容写出来,供大家分析:一条生产线,对其产品进行质量检查,如发现有堵塞,立刻发出报警信号,PLC接到此信号先延时一段时间(设它为T1)后,喷枪开始喷气,喷气一段时间(T2),喷枪停喷。要求喷枪能累计喷气,即要求不能丢掉任意一次报警的喷气时间。这个课题正像发帖人说的那样:“看似简单,可实施却不简单的”课题,我对课题的要求进行仔细研究,把可能出现的情形进行分析,画出动作时序图,自己认为正确无误后,编写出梯形图(用西门子编程语言)。请见下图。图中右侧为时序图,图中的各个位信号的定义为:I1.0为报警信号M5.0为第一个报警信号t1延时时间M5.1为第一个报警信号的喷气时间(当只有一个报警信号,其宽度为t2,在M5.0=1的延时时间里如出现一个或几个报警信号时,它的结束时间为最后一个报警信号起,延时t1+t2的时间间隔结束)。M5.2在只出现一个报警信号时,它=0,如在M5.0=1的延时时间里如出现又一个报警信号时,M5.2=1,它与I1.0常闭点串联去接通延时=t1+t2的定时器T3,用T3的触点触发使M5.1与M5.2置0,这里就利用通电延时定时器在它延时时间未结束时器输入端受到一个使它断开的脉冲影响,他会重新从0开始定时计数的特性来实现延长定时时间的。M5.3在喷气时间里出现报警信号使M5.3=1.它连接定时=t1的T4定时器,用它的触点触发,使M5.3=0,同时使M5.4=1,M5.4=1表示在喷气时间内出现的报警信号的喷气开始。M5.4为在喷气中出现的报警信号的喷气时间间隔,M5.4的常开,与M5.5的常闭及I1.0的常闭串联接通延时=t2的定时器T5,在M5.4=1起,延时t2时间,没出现I1.0,T5吸合触发M5.4,使其=0,即喷气结束。如出现I1.0,就会使M5.5=1,M5.5=1的常闭触点断开,使T5不起作用,但M5.5=1的常开触点与I1.0的常闭串联接通延时=t1+t2的定时器T6,如不再出现I1.0,T6延时到点,将触发M5.4,使其=0,即喷气结束。如又出现I1.0,将延长喷气结束时间。为喷枪输出端,它是由M5.1与M5.4并联后输出的。右图中的A1、A2、A3、A4为喷枪在四种不同条件下的输出波形图。《说点题外的话:本人在7月17日,为取朋友的邮件打开自己的电子邮箱,才发现,工控网于7月12日给我发来的邮件打开一看,才知道是工控网邀请我写篇关于PLC编程经验的文章,本人甚感惊讶与高兴,我是7月初,才注册入会的,只发表一篇文章,只写了几次对一些网友求助的回帖,真没想到工控网会给我发邮件,让我写