有一网友给我发个邮件,他说:“…… 我的问题是:我学了PLC很多的指令,指令也稍好理解。但我们不懂得PLC编程语法,不懂如何把指令组合起来用到实际中去。写一句话必须要懂语法,但我现在不懂得PLC编程语法,不会把指令用到实际当中去,您说我如何解决这个问题?”
我给他的回帖是: 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。
上图中的方案一与方案二,同用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的输入点对其内部参数(如定时器时间设定等)进行设置。 为了帮助大家学会使用按钮设置参数(特别对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动作.到此整个动作结束。 |