一道西门子plc编程题 点击:1228 | 回复:16



阿呆的中国梦

    
  • 精华:0帖
  • 求助:4帖
  • 帖子:12帖 | 220回
  • 年度积分:0
  • 历史总积分:162
  • 注册:2016年9月16日
发表于:2016-09-25 12:17:45
楼主

如下图所示前面一个称重装置,后面的输送带匀速运行,包装的重量不一样分别驱动气缸推到不同的盒子里面。求编程的思路,用什么指令,称重可以先不管,电眼(接近开关)可以自由添加。

小于等于100g,放第一盒子,大于100小于等于200放第二盒子,大于200小于等于300放第三盒子,大于300自由落到第四个盒子。

编程思路如下:

...............................................................................................................................................................................................................

    ■----O----O----A(3)----O----O----B(6)----O----O----C(9)----O----O----▲ 

...............................................................................................................................................................................................................

    第一步:如上所示共12格,代表放12只盒子,传送带每秒右移一格,一个循环12秒移完。第0格称重,称重台检测到盒子让c0自加1记录盒子数量,每只称重重量与A B C处标准比较,符合C标准,让计数器c1= 9(假如第二只符合B标准,C2=6,第三只符合A标准 c3=3)。  次处用指针变量lw0的自增作为计数器的下标:  L  1 / L lw0/+i /T lw0 / ....  L  c#6 (3,6,9根据称重结果).......S  c[lw0].....(这样就可以得到诸如c1=9,c2=6,c3=3的结果)。       

     第二步:上边图像,黑方块代表称重台,想办法让盒子从称重台上到皮带第一格的时刻比盒子从别处上到称重台的时刻稍晚一点,即是,盒子从称重台算起移动一格到位时,已经又加上了一个盒子到称重台,此时c0=2(此时移动了一格);.............第一次假设前三只盒子的应到位置是3,6,9位置....当盒子移动到第3格A处时,c0=4;  (当移动到B处时c0=7... ...); 看出来了吗,当到A处时,c0=4,用此时c0的值减去本地格数3,即4-3=1,表示第一只经过盒子......推出去了后此时第二只盒子经过B时c0=8(A处推出后的空位先过);8-6=2即是第二只盒子,B处是第二只盒子的假设位置,推出...... 到C处时,c0=12(c处过2个空位),12-9=3,正好是第三只盒子。

    第三: 假如第1,2,3, 4,5,6盒子位置分别是A,B,C,C, A, A...   第一只到达A推出,第二只到达B推出,此时c0=8,  注意此时B左边数起的第3只(B处推出的是第二只,即第5只已经在A位置且符合推出条件),A处此时c0=8,  8-3=5表明是第5只。下一步,c0=9时,第6只盒子到A处,9-3=6表示到A处的此时是第6只盒子。 (此时只剩第3,第4只盒子了,正是图中当第二只在B处c0=8时的前面两只),此时,第3,4只右边只有第2只推出后的一个空位,第3只到达C处时c0=12,第4只到达C处c0=13;  12-9=3;13-9=4,正好是第3只和第4只。

    第四:通过以上推论看出,每只盒子经过A,B,C时,用此时c0的值减去本处的固定值,即是第几只盒子经过本处。  

   第五: 注意计数器计数最大值,清零。

       这是网上一位朋友的求助帖,以上是我的解题思路,没验证不知道对不对。有朋友认为可以用移位指令,我觉得不可行。如果您有其他方法,希望帖上来,稍微具体一点为好。(以上所诉只是理论上的阐述,可能实际控制过程人家是另外的办法,这种生产线肯定早都有了,只是我不知道别人是如何编程的。)





jacktank

  • 精华:0帖
  • 求助:3帖
  • 帖子:17帖 | 317回
  • 年度积分:78
  • 历史总积分:2298
  • 注册:2014年4月10日
发表于:2016-09-26 10:34:05
1楼

http://bbs.gongkong.com/d/201607/681561_1.shtml

这个可以用先入先出的指令来做,而且很简洁,楼主的编程思路太复杂

jacktank

  • 精华:0帖
  • 求助:3帖
  • 帖子:17帖 | 317回
  • 年度积分:78
  • 历史总积分:2298
  • 注册:2014年4月10日
发表于:2016-09-26 11:28:26
2楼

程序跟你的编程要求有点不同(主要是分类的时候用的开关,而楼主是用电子秤,其实一样道理),思路是刚进入的时候就分类(1/2/3/4)总列,到1#检测总列出列,出列值比较,相等则动作,不相等则进新列(1列),到2#检测1列出列,出列值比较,相等则动作,不相等则进新列(2列),到3#检测2列出列,出列值比较,相等则动作,不相等则进新列(3列),到4#检测3列出列,出列值比较,相等则动作,不相等则等则进新列(4列)。。。可用于多个检测。

阿呆的中国梦

  • 精华:0帖
  • 求助:4帖
  • 帖子:12帖 | 220回
  • 年度积分:0
  • 历史总积分:162
  • 注册:2016年9月16日
发表于:2016-09-26 12:52:56
3楼

感谢楼上Jacktank的关注,您的程序待我有时间会细看,谢谢!

阿呆的中国梦

  • 精华:0帖
  • 求助:4帖
  • 帖子:12帖 | 220回
  • 年度积分:0
  • 历史总积分:162
  • 注册:2016年9月16日
发表于:2016-09-28 17:29:10
4楼


回复内容:

对您提供程序的补充: 

        1. 假如放进来10块砖,各自按分类标准去到的位置是1#检查站2块;2#检查站2块;3#检查站2块;4#检查站4块。假如1#或2#或3#站检测开关有坏了的,只要4#检测开关是好的,最终每一块砖都会经过检测,对程序不会有影响。假如前面3个开关都是好的,第四只检测开关坏了,则本应4#站检测的4块砖都不会检测了,直接通过,Y4不会得电。 4#检查站处的出栈程序 SFRDP D1300 D14 不会执行;指针不会回移;时间长了,前面砖进口处程序 SFWR D1 D1000 k99; 这里的指针有可能超过99(如果4#站检测开关是好的,指针则不会超;因此,可以在程序里加一句,如果指针超99,对应的 M8022=1,则可以判断出是4#检测开关坏了。)

       2.程序中用到:在各站检测有误砖通过,无砖通过,将0赋值给D11(D12...);前面一句是有砖通过则按先进先出原则取出堆栈值放D11(或D12...);我以为这两句程序秩序兑换一下逻辑更好。(更不更换应该对程序执行无影响)。

        3.西门子里面的移位指令只能移位一个字或双字中的某些位,而不能像三菱可以移位写入n个字或移位读出n个字(或双字)。但用指针应该可以做到,有空再试一下。

        对上述1,2点有异议可以讨论。谢谢


对: jacktank 程序跟你的编程要求有点不同(主要是分类的时候用的开关,... 内容的回复!


Mr袁--王者之师

  • 精华:0帖
  • 求助:3帖
  • 帖子:32帖 | 1147回
  • 年度积分:0
  • 历史总积分:3881
  • 注册:2011年10月26日
发表于:2016-10-08 09:01:10
5楼

1)传送带可以一直转

2)传送带的速度要小于2倍推杆气缸的伸出和缩回时间 物料的间隔要大一点即可

3)3路压力传感器(模拟量)或者3个电子秤(总线或者BCD码或者串口等通讯),三个光电开关

4)当光电开关检测到 零件后延时一段时间,因为传送带的速度是一定的  所以检测到有零件后延时一段时间确保零件在电子秤的正上方, 

5)比较当前的数值<=100 第一个气缸推 <=200 ,>100第二个气缸推 >200,<=300第三个气缸推

推出到位快速缩回即可。

程序就完事了啊  


阿呆的中国梦

  • 精华:0帖
  • 求助:4帖
  • 帖子:12帖 | 220回
  • 年度积分:0
  • 历史总积分:162
  • 注册:2016年9月16日
发表于:2016-10-08 15:50:46
6楼


回复内容:

对: Mr袁--王者之师 1)传送带可以一直转2)传送带的速度要小于2倍推杆气缸... 内容的回复!


这道题2楼是正解(两道题类似);我对三菱指令不是很熟悉,但参照帮助读懂了。感觉三菱的指令很丰富,这道题基本上三菱就用两条指令,入栈出栈(先入先出)就搞定了。西门子s7300指令中没有可以整字(或双字)移动的指令,移动指令只有16位或32位,只有其中的位移动,只能另想办法。翻了下书发现S7200有类似指令:填表指令ATT和先入先出FIFO。有兴趣的朋友可以试一下

我要绝地反击

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 10回
  • 年度积分:91
  • 历史总积分:95
  • 注册:2016年10月08日
发表于:2016-10-08 16:19:39
7楼

高手如云啊,天外有天。

三枝乱步

  • 精华:0帖
  • 求助:0帖
  • 帖子:3帖 | 42回
  • 年度积分:0
  • 历史总积分:58
  • 注册:2016年10月07日
发表于:2016-10-08 16:30:59
8楼

我个人觉的如果用欧姆龙的可以用SHT指令,用三菱的话可以用比较指令,西门子没有过,我只是随便发表意见

Mr袁--王者之师

  • 精华:0帖
  • 求助:3帖
  • 帖子:32帖 | 1147回
  • 年度积分:0
  • 历史总积分:3881
  • 注册:2011年10月26日
发表于:2016-10-08 16:58:33
9楼

没仔细看 原来是一个称重装置 

Mr袁--王者之师

  • 精华:0帖
  • 求助:3帖
  • 帖子:32帖 | 1147回
  • 年度积分:0
  • 历史总积分:3881
  • 注册:2011年10月26日
发表于:2016-10-08 17:06:35
10楼


回复内容:

对: 阿呆的中国梦 回复内容:对: Mr袁--王者之师  1)传送带可以一... 内容的回复!

西门子300有左移 右移的指令啊 

矛头小子

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 180回
  • 年度积分:0
  • 历史总积分:554
  • 注册:2009年6月16日
发表于:2016-10-08 17:11:42
11楼

交作业了!!!!!!!!!

阿呆的中国梦

  • 精华:0帖
  • 求助:4帖
  • 帖子:12帖 | 220回
  • 年度积分:0
  • 历史总积分:162
  • 注册:2016年9月16日
发表于:2016-10-08 18:06:24
12楼

感谢楼上各位关注,1楼正解并且有程序下载感兴趣的可以去看看!  10楼:西门子300有左右移指令,但都是位移动(16位或32位);先入先出可以N个字(或双字)被压入被弹出。  11楼:"交作业了”是啥意思,感谢你指出”不验证不行!!!!!!“这句话让我不敢偷懒,哈哈

抵制转基因

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 98回
  • 年度积分:0
  • 历史总积分:107
  • 注册:2016年4月25日
发表于:2017-12-18 16:18:51
13楼

好好好,分析的很好,这个很好

super18man

  • 精华:0帖
  • 求助:0帖
  • 帖子:7帖 | 89回
  • 年度积分:35
  • 历史总积分:812
  • 注册:2017年5月25日
发表于:2017-12-18 21:06:39
14楼

希望多有这样的好事情

抵制转基因

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 98回
  • 年度积分:0
  • 历史总积分:107
  • 注册:2016年4月25日
发表于:2017-12-19 08:08:41
15楼

好好好,氛围很好!

nihao12315

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 1067回
  • 年度积分:7
  • 历史总积分:628
  • 注册:2016年8月30日
发表于:2017-12-20 15:08:20
16楼

没仔细看 原来是一个称重装置 


热门招聘
相关主题

官方公众号

智造工程师