首页 上一页 1 2 下一页 尾页

用实例讲解编程构思与技巧编程 点击:1849 | 回复:27



wyb2866255---王者之师

    
  • 精华:57帖
  • 求助:0帖
  • 帖子:148帖 | 2872回
  • 年度积分:1
  • 历史总积分:31450
  • 注册:2010年7月01日
发表于:2012-09-10 17:19:36
楼主

              用实例讲解编程构思与技巧编程

         

    对于PLC编程的初学者首先要结合实例深入理解与熟练掌握程序指令的内含与用法,还要多做编程练习,才能不断的提高编程水平与能力。网上好多求助帖都有探讨价值,初学者可把它视为一个编程命题去编程与探讨。编程时要多方位思考,多思路编程,对比分析,从中找出最佳方案。本文先列举3例都是回答网上的求助帖而编写的程序,程序较短,并对程序构思、编程技巧作以说明,望对初学者学习能有所帮助。

    例一求助帖:运行台数作为启动信号

现有5台普通制冷机定为M1M2M3M4M52台高级制冷机定为L1L2,当普通制冷机工作台数小于等于3台时只启动一台高级制冷机,当普通制冷机工作台数大于3台时启动两台高级制冷机。(需要用300200编程要梯形图)(自己编的时候存在一定问题,使用计数器和整数加1都不是很好用)求大神们帮忙。谢谢。

编程说明:本命题用二种思路编程,

第一种思路就是利用数学的数字组合来考虑:53的组合有10种,52的组合也有10种,51的组合有5种,即普通制冷机工作台数小于等于3台共有25种组合,而54的组合有4种,55的组合只有1种,故选用判断普通制冷机工作台数大于或等于4台共有5种组合。显然用判断普通制冷机工作台数小于等于3台编写的程序太长,而判断普通制冷机工作台数大于或等于4台的编写程序可使程序大大缩短。

编程的构思是这样:高级制冷机始终有一台处于工作(即Q0.6=1),如5台普通制冷机只有3台或3台以下处于工作,第二台高级制冷机停机,只有4台或4台以上工作时,第二台高级制冷机(即Q0.7=1)立即投入工作,详见梯形图

第二种思路:

5台普通制冷机输出口设置为Q0.0~Q0.42台高级制冷机输出口设为Q0.6Q0.7

编程思路:将QB0送入MB0,再将MB0进行左移:每移一位MB0,就检查一次MB0的第6位,即M0.5的状态,如M0.5=1,将MB11,共左移5次,此时MB1的数值即为普通制冷机工作的台数。再用MB13进行比较,如MB3 > 3,使Q0.7=1,否则 Q0.7=0,而Q0.6始终为1,从而确保当普通制冷机有3台以上处于运行时2台高级制冷机皆工作,当普通制冷机只有3台或3台以下处于运行时1台高级制冷机工作的控制目的。详见下梯形图:

    二种方案比较,显然第一种编程简短精练,除了用PLC内部的SM0.0一个点外,只用了Q0.0~Q0.4、及Q0.6Q0.7七个输出点,相比之下,第二种编程,动用了M4.0MB0MB1MB3三个字节存储器,而且程序也长一点。但第二种的编程思路还是具有技巧性,仍不失好的编程。特别在命题加深难度时,第二种编程思维就会显示出它的优越性,请见下一命题:

例二、求助帖:编程目的:7个开关量变成3个输出量。

 

7个开关量任意相加组合,任意组合后有1个开关量闭合时,继电器Q0.5输出。任意组合后有2个开关量闭合后,继电器Q0.4输出任意组合后有3个开关量闭合后,继电器Q0.5 Q0.4同时输出。任意组合后有4个开关量闭合后,继电器Q0.3输出。任意组合后有5个开关量闭合后,继电器Q0.3 Q0.5同时输出。任意组合后有6个开关量闭合后,继电器Q0.3 Q0.4同时输出。任意组合后有7个开关量闭合后,Q0.3 Q0.4 Q0.5同时输出。

这个命题如采用第一种思路编程,其程序将编写的十分麻烦而且颁出的程序是非常长的,但用第二种编程思路编程,就可以编出简短的程序,请见下梯形图:

例三、程序内容是这样的:
 
.I0.0为自复位按钮输入变量,按一下I0.0,q0.0输出为1,再按一下I0.0q0.0输出0
 
.I0.1为自复位按钮输入变量,按一下I0.1,q0.1输出为1,再按一下I0.1q0.1输出0
 3
.当双击(1S以内连续按两下按钮算双击)I0.0I0.1任何一个按钮时,Q0.0Q0.1都为0,当再次单击I0.0或者I0.1时,Q0.0或者Q0.1仍会延续的逻辑。

解析:这个命题看似简单,编程时会发现还是有点难度,对“按一下I0.0,q0.0输出为1,再按一下I0.0q0.0输出0”及“按一下I0.1,q0.1输出为1,再按一下I0.1q0.1输出0”这个控制要求并不难,用二个SR触发器即可组成此控制程序。难在:当双击(1S以内连续按两下按钮算双击)I0.0I0.1任何一个按钮时,Q0.0Q0.1都为0的程序控制。具体讲解如下:

本命题也采用二种不同思路编写二个程序,下面分别解析这二个程序构思与编程技巧。

一、第一种程序的编程构思与程序处理

   (一)、编程构思:开机初始化:使MB1=0  MB2=0  MB3=2,其MB1MB2分别为按钮I0.0I0.11计数器,MB3I0.0I0.1的减1计数器,

1、按下I0.0,其前沿将M0.0=1M0.0接延时1秒的通电延时定时器T101,延时1

秒,T101吸合。使M0.0=0。在M0.0=1的时间里,每按一下I0.0,使MB11,同时使使MB31MB1最大计数值=22以上不再加计数。

    M0.0=1的时间里,如只按一下按钮I0.0,其MB1=1(即M1.0=1  M1.1=0)而MB3=1,此状态将使Q0.0=1。按钮抬起时,MB1保持=1,而MB3恢复=2。如再按一下I0.0,会使MB1=2(即M1.0=0  M1.1=1)而MB3=1,此状态将使Q0.0=0,且使MB1=0

2同样按下I0.1,其前沿将M0.0=1M0.0接延时1秒的通电延时定时器T101,延时1秒,T101吸合,使M0.0=0。在M0.0=1的时间里,每按一下I0.1,使MB21,使MB31MB2最大计数值=22以上不再加计数。

二)、程序处理:由(一)构思中知,M0.0=1的间隔=1秒,是按钮第一次按下按钮为始点延时的1秒。开机初始化:MB1=0MB2=0MB3=2。以I0.0为例:在M0.0=1的时间内,如I0.0只按一下,MB101=1MB3由减1=1。当按钮抬起时(M0.0的后沿),会使Q0.0=1,因MB30,故不会使Q0.0Q0.1同时复位,最后再将MB3=2。在此状态下,如再按一下I0.0MB111=2,而MB321=1,此时只会使Q0.0=0,同样不会使Q0.1复位(Q0.1保持原状态)。如不是按一下,而是连按二下I0.0,使MB322 =0,此时不管Q0.0Q0.1的状态如何,因MB3=0将强迫使Q0.0Q0.1=0,从而实现了当双击(1S以内连续按两下按钮算双击)I0.0I0.1任何一个按钮时,Q0.0Q0.1都为0的程序控制作用,

 详见下程序:

 

      该程序经上机运行,动作正确符合题目要求。

 

二、第二种程序的编程构思与程序处理

    (一)、编程构思:

本程序是用SR触发器指令来实现命题的控制要求的,用SR触发器指令会很容易编出“按一下I0.0,q0.0输出为1,再按一下I0.0q0.0输出0的(见网络5或网络6),难在“当双击(1S以内连续按两下按钮算双击)I0.0I0.1任何一个按钮时,Q0.0Q0.1都为0的控制编程。本程序对此是采用这样的编程思路:

见网络4及网络7~9:网络4中的MB1是加1计数器,它的计数脉冲是I0.0I0.1的后沿,即每按一下按钮I0.0I0.1,当按钮抬起瞬间,会使MB11,由于比较指令“MB1<=1”的限制,使MB1的值只能有3个:012,即实现MB1值由01计数只确保连续按钮2下以内有效,超过2MB1不计数,始终保持MB1=2

网络9M0.7=1的后沿使MB10,其作用确保每次按钮MB1都是由0开始计数的,故确保在1秒内如只按1次按钮,MB1始终=1,不可能=2,即M1.11。只有在在1秒内连续按2次按钮,MB1=2,即M1.1=1。而M1.1=1将使2SR触发器复位,即同时使M0.1M0.30

M0.1即为输出Q0.0M0.3即为输出Q0.1,本程序为什么在网络5、网络6中的M0.1M0.3不直接用Q0.0Q0.1代替?网络7与网络8的作用本是将M0.1输送给Q0.0,将M0.3输送给Q0.1。为什么编程不用LD M0.1  = Q0.0却要这样编写输出?这2个问题暂不解释,留给大家分析,过几天再做解释。请见梯形图:

 

 




xianban70

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 95回
  • 年度积分:0
  • 历史总积分:176
  • 注册:2009年7月04日
发表于:2012-09-11 00:56:15
1楼

顶顶。感谢前辈指导                       

通讯网-原创军团

  • 精华:11帖
  • 求助:1帖
  • 帖子:432帖 | 10265回
  • 年度积分:0
  • 历史总积分:24711
  • 注册:2004年7月09日
发表于:2012-09-11 06:59:14
2楼

多余。。。。。。。。。。。。。。。

HOTEAM

  • 精华:3帖
  • 求助:0帖
  • 帖子:337帖 | 23748回
  • 年度积分:0
  • 历史总积分:70347
  • 注册:2007年4月05日
发表于:2012-11-27 16:49:35
3楼
感谢王工到本区赐贴,已经给此贴授精。

江湖混混-余 辉

  • [版主]
  • 精华:53帖
  • 求助:44帖
  • 帖子:3350帖 | 28451回
  • 年度积分:603
  • 历史总积分:131640
  • 注册:2006年4月25日
发表于:2012-11-27 16:56:57
4楼
回复内容:
对:HOTEAM关于感谢王工到本区赐贴,已经给此贴授精。 内容的回复:


叉哥太不给力了 这么久才授精

simonwu675

  • 精华:0帖
  • 求助:3帖
  • 帖子:11帖 | 794回
  • 年度积分:0
  • 历史总积分:2856
  • 注册:2009年11月23日
发表于:2012-11-27 17:03:11
5楼
把每台制冷机当做一个1,5个相加的和<=3时,和>3时选择就可以了。

时空——王者之师

  • 精华:2帖
  • 求助:234帖
  • 帖子:480帖 | 4472回
  • 年度积分:66
  • 历史总积分:31282
  • 注册:2008年6月06日
发表于:2012-11-28 12:35:34
6楼
确实是个精华贴,谢谢楼主分享

duoshaogushi

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 22回
  • 年度积分:0
  • 历史总积分:82
  • 注册:2011年3月22日
发表于:2012-12-22 21:29:02
7楼
为什么在网络5、网络6中的M0.1M0.3不直接用Q0.0Q0.1代替?在一秒的时间内,连续按两次I0.0或I0.1则Q0.0或Q0.1先置1再复位,不是要求的按两次按钮,Q0.0和Q0.1都为0,不知道这样分析对不对,请大师指导

wyb2866255---王者之师

  • 精华:57帖
  • 求助:0帖
  • 帖子:148帖 | 2872回
  • 年度积分:1
  • 历史总积分:31450
  • 注册:2010年7月01日
发表于:2012-12-22 22:01:59
8楼
7楼:你分析的很对,就是为了避免Q0.0或Q0.1先置1再复位的现象出现。欢迎你再看看“请大家一起分析这个程序的编程构思及动作原理”与请大家一起分析这个程序的编程构思及动作原理之二”这二个帖子,这2个帖子的程序编写都有一定的技巧性,程序未加注解,让大家解读程序,你可以参与解析程序

求学者_2322

  • 精华:0帖
  • 求助:2帖
  • 帖子:4帖 | 37回
  • 年度积分:0
  • 历史总积分:286
  • 注册:2011年3月14日
发表于:2012-12-23 11:48:17
9楼

能解释下  例1 中 第二种思路  把QB0 和16#1F 做与  运算有什么用啊

彩云之滇东北

  • 精华:21帖
  • 求助:5帖
  • 帖子:108帖 | 2725回
  • 年度积分:0
  • 历史总积分:21121
  • 注册:2005年6月14日
发表于:2012-12-23 11:48:57
10楼
学习学习                                            

wyb2866255---王者之师

  • 精华:57帖
  • 求助:0帖
  • 帖子:148帖 | 2872回
  • 年度积分:1
  • 历史总积分:31450
  • 注册:2010年7月01日
发表于:2012-12-23 13:33:25
11楼

回9楼:QB0通道共有8个位变量:Q0.0、Q0.1.....Q0.7,本程序电机输出只占前5位,后3位程序有可能作它用,16#1F=0001_1111,用它与QB0相与,其结果将后3位置0,再将它送入MB0,此时的MB0前5位为5台电机的运行状态,后3位皆为0,故用MB0作左移,就会正确判断各电机的状态。

求学者_2322

  • 精华:0帖
  • 求助:2帖
  • 帖子:4帖 | 37回
  • 年度积分:0
  • 历史总积分:286
  • 注册:2011年3月14日
发表于:2012-12-23 14:07:35
12楼

回复内容:
对:wyb2866255---王者之师关于回9楼:QB0通道共有8个位变量:Q0.0、Q0.1.....Q0.7,本程序电机输出只占前5位,后3位程序有可能作它用,16#1F=0001_1111,用它与QB0相与,其结果将后3位置0,再将它送入MB0,此时的MB0前5位为5台电机的运行状态,后3位皆为0,故用MB0作左移,就会正确判断各电机的状态。内容的回复:



恩   谢谢楼主  这个明白了

 还是这个例子  网络3里 MB1大于3时  Q0.7 输出不能保持 

zhengchangchun

  • 精华:0帖
  • 求助:1帖
  • 帖子:2帖 | 388回
  • 年度积分:0
  • 历史总积分:1919
  • 注册:2010年1月20日
发表于:2012-12-23 15:28:49
13楼

说实话,第一题的两种解决问题的方法都有够笨的,以欧姆龙的某指令为例子,

直接将5台普通的输入到一个通道,用该指令抓出 位 中置1的个数,与3比较就能分离出控制,不用上面那么复杂吧?

求学者_2322

  • 精华:0帖
  • 求助:2帖
  • 帖子:4帖 | 37回
  • 年度积分:0
  • 历史总积分:286
  • 注册:2011年3月14日
发表于:2012-12-23 15:45:46
14楼

13楼 西门子的似乎没有 抓出位中置1个数   的指令吧 

求学者_2322

  • 精华:0帖
  • 求助:2帖
  • 帖子:4帖 | 37回
  • 年度积分:0
  • 历史总积分:286
  • 注册:2011年3月14日
发表于:2012-12-23 15:51:18
15楼

怎么粘贴程序   啊 

 

wyb2866255---王者之师

  • 精华:57帖
  • 求助:0帖
  • 帖子:148帖 | 2872回
  • 年度积分:1
  • 历史总积分:31450
  • 注册:2010年7月01日
发表于:2012-12-23 16:41:35
16楼
13楼:请你用欧姆龙编程的程序贴出来,供大家学学好吗?

王者-曹建军

  • 精华:2帖
  • 求助:0帖
  • 帖子:812帖 | 2407回
  • 年度积分:0
  • 历史总积分:16025
  • 注册:2011年12月25日
发表于:2012-12-24 08:46:51
17楼

学习了!我还没有这样做过呢!   

zhengchangchun

  • 精华:0帖
  • 求助:1帖
  • 帖子:2帖 | 388回
  • 年度积分:0
  • 历史总积分:1919
  • 注册:2010年1月20日
发表于:2012-12-25 08:35:29
18楼

引用 wyb2866255---王者之师 的回复内容:回9楼:QB0通道共有8个位变量:Q0.0、Q0.1.....Q0.7,本程序电机输出只占前5位,后3位程序有可能作它用,16#1F=0001_1111,用它与QB0相与,其结果将后3位置0,再将它送入MB0,此时的MB0前5位为5台电机的运行状态,后3位皆为0,故用MB0作左移,就会正确判断各电机的状态。


后3位有他用的话,对通道数据位进行一次 与 屏蔽。

zhengchangchun

  • 精华:0帖
  • 求助:1帖
  • 帖子:2帖 | 388回
  • 年度积分:0
  • 历史总积分:1919
  • 注册:2010年1月20日
发表于:2012-12-25 08:59:29
19楼

引用 wyb2866255---王者之师 的回复内容:13楼:请你用欧姆龙编程的程序贴出来,供大家学学好吗?


‘  0.00,0.01,0.02,0.03,0.04分别为5台输入,理论上可以扩展到N

岳轻航

  • 精华:0帖
  • 求助:3帖
  • 帖子:20帖 | 1090回
  • 年度积分:5
  • 历史总积分:3153
  • 注册:2010年8月04日
发表于:2012-12-25 10:16:46
20楼
路过,学习,对我很有帮助

热门招聘
相关主题

官方公众号

智造工程师
    首页 上一页 1 2 下一页 尾页