当前位置:
(已结束)工控PLC擂台第8期--状态轮换程序。
回复 | 人气 | 打印
云锋 个人主页 给TA发消息 加TA为好友 发表于:2010-10-22 12:12:30 楼主

6台电机,按运行次数轮换。1#电机运行,满足停机条件后,自动停止,下次启动时,启动2#电机,若2#电机故障,则启动3#电机,依次类推。写出轮换程序,并对程序作相关说明,PLC品牌不限。

工控PLC擂台每周一期,本期下周末结贴。奖项设置:一等奖1名:50MP,二等奖5名:10MP,三等奖10名:30积分。

MP介绍:gongkongMP即工控币,是中国工控网的用户积分与回馈系统的一个网络虚拟计价单位,类似于大家熟悉的QB,1个MP=1元人民币。

MP有什么用?兑换服务:以1个MP=1元来置换中国工控网的相关服务。 兑换现金:非积分获得的MP可兑换等值现金(满100MP后、用户可通过用户管理后台申请兑换)。

分享到: 关注收藏 邀请回答 回复 举报
ye_w 个人主页 给TA发消息 加TA为好友 发表于:2010-10-22 12:28:29 1楼
 

PLC品牌: ABB AC500系列        

使用语言: ST

其实可以使用子程序的方式来编程,有点懒了,有些调用需要细考虑,所以直接copy方式来调用不同电机啦

 

1、CPU  PM581-ETH

2、程序调用使用任务的方式,任务为1s
3、变量申明
4、主程序
  回复 引用 举报
莫子辰 个人主页 给TA发消息 加TA为好友 发表于:2010-10-22 13:21:15 2楼
 

占楼 占楼。。。。。。。。。。

  回复 引用 举报
奥特曼带我走 个人主页 给TA发消息 加TA为好友 发表于:2010-10-22 13:25:06 3楼
 

和备用电源有点像!  

  回复 引用 举报
二手烟头 个人主页 给TA发消息 加TA为好友 发表于:2010-10-22 13:54:20 4楼
  板凳的板凳…………
  回复 引用 举报
LIUXD6909 个人主页 给TA发消息 加TA为好友 发表于:2010-10-22 16:59:04 5楼
 

6台电机,按运行次数轮换。1#电机运行,满足停机条件后,自动停止,下次启动时,启动2#电机,若2#电机故障,则启动3#电机,依次类推。

  回复 引用 举报
LIUXD6909 个人主页 给TA发消息 加TA为好友 发表于:2010-10-22 17:03:01 6楼
  呵呵,不知符不符合题意,望指正,谢谢!
  回复 引用 举报
ANDYLIU008 个人主页 给TA发消息 加TA为好友 发表于:2010-10-23 09:21:26 7楼
  LZ给的条件好像不完整吧?那如果当二次启动的电机运转结束后,第三次按下启动按钮,该哪个电机运转呢?
  回复 引用 举报
老菜鸟 个人主页 给TA发消息 加TA为好友 发表于:2010-10-23 10:54:58 8楼
 

        我来占楼。。。。。。这个贴要出手。。。。。。

        下面贴图,用小日本的三菱写的————真抱歉,在这反日高峰,还用小日本的三菱,我是这样考虑的,既然可以用小日本的钢枪和小钢炮打小日本,那么在无可奈何的情况下也可以用小日本的PLC做设备来反攻小日本。。。。。。

        注:该程序模拟运行成功!

        由于最小累计秒判断程序段把3#电机写在最后,所以该程序首次运行是按3#电机、2#电机、1#电机的顺序启动;如果希望按1#电机、2#电机、3#电机的顺序启动,应当把3#电机的最小累计秒判断程序段放在最前,2#电机最小累计秒判断程序段放在中间,1#电机最小累计秒判断程序段放在最后即可。

        由于采用了D368这个最小累计秒的电机代号存放存储器,因此上面168-207程序段中,M11常闭触点、M12常闭触点、M13常闭触点是多余的,完全可以删除(并且已经模拟测试成功),对于有很多电机的场合,这有效的减化了程序。
  回复 引用 举报
ghlyx_ok 个人主页 给TA发消息 加TA为好友 发表于:2010-10-23 13:50:57 9楼
  hao,我一直想照这样的资料,很难得啊
  回复 引用 举报
ANDYLIU008 个人主页 给TA发消息 加TA为好友 发表于:2010-10-23 14:46:13 10楼
  三菱plc,看看是否符合LZ的要求
  回复 引用 举报
ANDYLIU008 个人主页 给TA发消息 加TA为好友 发表于:2010-10-23 14:47:36 11楼
 
写的比较傻瓜式,见笑了
  回复 引用 举报
彩虹 个人主页 给TA发消息 加TA为好友 发表于:2010-10-23 21:31:00 12楼
 

下面是我做此题的规划:

1:用西门子300PLC做硬件来控制电机的轮换运行

2:在功能上用计时器设定每台电机的运行时间,并显示当前电机已经运行的时间

3:每台电机都可以手动启动与自动启动,出现故障时自动切换到下一台电机去运行,并输出故障警告。

4:在程序上采用西门子典型的编程手法,展现用FB做多重背景块的编程手法,使更多的同行从中能学到东西!

5:程序大体分两部分用FB做多重背景块,1):电机的运行(运行状态/输出显示/切换) 2):时间的控制/显示/设定

6:程序全部采用模块化编程 在电机的切换上采用JL JU指令来控制

7:等有时间在传上来。

 

 下面是FB20里定义的输入/输出/等的变量表

  回复 引用 举报
老菜鸟 个人主页 给TA发消息 加TA为好友 发表于:2010-10-23 23:56:36 13楼
 

        上面的程序是我今天为了这个擂台亲自写的,不是摘抄以前的工程。

        记得在2001年的时候,经常用到这样的程序,主要控制暖通设备上的补水泵的一用一备和循环泵的两用一备,具备定时切换、故障切换、手动切换等功能。

        定时切换主要考虑到一台设备连续工作时间不要太长,一般我们设置为3~7天。

        故障切换主要考虑到设备为无人值守,而且必须保证设备正常运行。值班人员每天开车到设备处巡视一次到两次。

        手动切换主要考虑到现场巡视的情况下发现设备存在问题或隐患,但电气还没报故障。同时,手动切换也可以测试每台设备的好坏。

        其实,在实际工程中光有以上功能还是不够的,还会用到很多其它功能,例如设备无法正常切换,无法保证一用一备或两用一备状态时,让相应的控制器自动发送短信到巡检员的手机上。。。。。。

  回复 引用 举报
老菜鸟 个人主页 给TA发消息 加TA为好友 发表于:2010-10-23 23:57:57 14楼
  引用彩虹 的回复内容:

没有多高手???

不行我还是来占个位吧。


你还是出手吧,你出手才知有没有。。。。。。

高手都在被窝里陪MM睡觉觉。。。。。。

  回复 引用 举报
ANDYLIU008 个人主页 给TA发消息 加TA为好友 发表于:2010-10-24 08:28:28 15楼
  回复内容:
对:老菜鸟 关于

      

内容的回复:

老菜鸟程序不错啊学习一下,顺便问下三菱软件里面怎么添加批量的程序注释啊????还有,请问怎么为什么三菱A系列和Q系列的编辑不了ALT指令呢,后来改为FX才可以写ALT,但是我记得以前用A和Q是可以用ALT的啊???
  回复 引用 举报
云锋 个人主页 给TA发消息 加TA为好友 发表于:2010-10-25 09:21:30 16楼
 

回复内容:
对:ANDYLIU008 关于LZ给的条件好像不完整吧?那如果当二次启动的电机运转结束后,第三次按下启动按钮,该哪个电机运转呢? 内容的回复:


不需要按启动按钮。

自动启停的。

  回复 引用 举报
ANDYLIU008 个人主页 给TA发消息 加TA为好友 发表于:2010-10-25 10:13:25 17楼
  同样道理啊,启动按钮和系统的启动条件原理一样啊,是不是就是随着启动条件的一次又一次的ON.一号电机和其他几个电机的是论次切换的意思呢???
  回复 引用 举报
wings 个人主页 给TA发消息 加TA为好友 发表于:2010-10-25 19:47:55 18楼
 

貌似是以运行次数为依据切换吧。。。

  回复 引用 举报
qchunfeng 个人主页 给TA发消息 加TA为好友 发表于:2010-10-25 20:38:17 19楼
 

条件不完整呀,电机什么时候停止?

  回复 引用 举报
wings 个人主页 给TA发消息 加TA为好友 发表于:2010-10-25 22:38:11 20楼
 

囧死了

写完程序想上传的时候发现没有申请VIP!!!

哪位大大能告诉我申请VIP大概需要多久?

  回复 引用 举报
newchp 个人主页 给TA发消息 加TA为好友 发表于:2010-10-25 23:21:58 21楼
 

我用S7-200来做一个,没有信真,也没有下载到PLC,呵呵,看似能通过验证。

 

第一条:上电时,恢复上次运行电机号;

第二第:时刻保存当前运行电机号

  回复 引用 举报
newchp 个人主页 给TA发消息 加TA为好友 发表于:2010-10-25 23:27:58 22楼
 

 

2小时定时到,AUTO_ROTATE自动增加电机号,当前电机出现故障时,当前电机号自动另一,启动下一台电机.//

//当前电机号>=7时,启动电机1,严格的讲,应该做成>6就启动下一台.

以上三条是2小时定时轮换
以上两条是电机输出
  回复 引用 举报
newchp 个人主页 给TA发消息 加TA为好友 发表于:2010-10-25 23:40:30 23楼
 

我发现我做的还是够简洁

  回复 引用 举报
彩虹 个人主页 给TA发消息 加TA为好友 发表于:2010-10-26 01:14:33 24楼
  引用newchp 的回复内容:

我发现我做的还是够简洁

你好好看以下你写的有没有问题???你没有考虑实际情况,没有显现西门子编程的技术,功能单一。



  回复 引用 举报
donglisheng1@163.com 个人主页 给TA发消息 加TA为好友 发表于:2010-10-26 10:03:29 25楼
 

X1至X6,6台电机各自故障,Y1至Y6,6台电机运行信号,X0启动,M1设备停机条件,三菱PLC

LDP X0         ANI M1         LD= Z0 K1         AND X1         ORB         LD= Z0 K2         AND X2         ORB          LD= Z0 K3          AND X3          ORB          LD= Z0 K4          AND X4         ORB         LD= Z0 K5         AND X5         ORB          ADD Z0 K1 Z0   SET M0          LD  M8000     AND= Z0  K6         AND  X6         MOV  K1  Z0         LD M0         MPS         AND<= Z0 K3             CMP K2 Z0 Y1         MPP         AND> Z0 K3         CMP K4 Z0 Y4         LD M1         MOV K0 K2Y1         RST M0         AND>= Z0 K6         M0V K0 Z0         END

  回复 引用 举报
秒杀 个人主页 给TA发消息 加TA为好友 发表于:2010-10-26 14:16:31 26楼
  回复内容:
对:彩虹 关于

下面是我做此题的规划:

1:用西门子300PLC做硬件来控制电机的轮换运行

2:在功能上用计时器设定每台电机的运行时间,并显示当前电机已经运行的时间

3:每台电机都可以手动启动与自动启动,出现故障时自动切换到下一台电机去运行,并输出故障警告。

4:在程序上采用西门子典型的编程手法,展现用FB做多重背景块的编程手法,使更多的同行从中能学到东西!

5:程序大体分两部分用FB做多重背景块,1):电机的运行(运行状态/输出显示/切换) 2):时间的控制/显示/设定

6:程序全部采用模块化编程 在电机的切换上采用JL JU指令来控制

7:等有时间在传上来。

内容的回复:

期待彩虹大哥的帖…………
  回复 引用 举报
云锋 个人主页 给TA发消息 加TA为好友 发表于:2010-10-26 16:51:05 27楼
  回复内容:
对:donglisheng1@163.com 关于

X1至X6,6台电机各自故障,Y1至Y6,6台电机运行信号,X0启动,M1设备停机条件,三菱PLC

LDP X0         ANI M1         LD= Z0 K1         AND X1         ORB         LD= Z0 K2         AND X2         ORB          LD= Z0 K3          AND X3          ORB          LD= Z0 K4          AND X4         ORB         LD= Z0 K5         AND X5         ORB          ADD Z0 K1 Z0   SET M0          LD  M8000     AND= Z0  K6         AND  X6         MOV  K1  Z0         LD M0         MPS         AND<= Z0 K3             CMP K2 Z0 Y1         MPP         AND> Z0 K3         CMP K4 Z0 Y4         LD M1         MOV K0 K2Y1         RST M0         AND>= Z0 K6         M0V K0 Z0         END

内容的回复:


请转成梯形图。
  回复 引用 举报
玫瑰骑士 个人主页 给TA发消息 加TA为好友 发表于:2010-10-26 21:41:09 28楼
 

不错,各种形式的都有

  回复 引用 举报
西门吹灯 个人主页 给TA发消息 加TA为好友 发表于:2010-10-26 22:14:49 29楼
  高手真多啊?仰望中~~~~~~~~~~
  回复 引用 举报
panning1528 个人主页 给TA发消息 加TA为好友 发表于:2010-10-26 22:52:43 30楼
 

彩虹的程序我比较感兴趣,我也是用西门子的,的确,用FB多重背景在这里展示了很大的优势。废话不说,下面说说我的思路,其实在西门子提供的库里有这样现成的程序——堆栈,这里就不多说了,下面是我刚写的程序

           R             Q  0.1                         //程序开始先将所有输出复位,满足后面条件,将其置1,下面类似
           R             Q  0.2
           R             Q  0.3
           R             Q  0.4
           R             Q  0.5
           R             Q  0.6
           SET

           A              M  128.1                    //当按下停止按钮时,程度跳转到N0处,结束
           SET
           JC           N0


            A             M  128.0                    //启动按钮
            O            Q   0.6                        //或者接收到M6下降沿 
            FN          M  130.1                    //M6下降沿
            S             Q  0.1                        //将M1置1

                                                              //以下程序同上 
             A             Q  0.1
             FN          M  130.2
             S             Q  0.2


             A              Q  0.2
             FN           M  130.3
             S              Q  0.3 


              A              Q  0.3
              FN           M  130.4
              S              Q  0.4


              A               Q  0.4
              FN            M  130.5
              S               Q  0.5


               A               Q  0.5
               FN            M  130.6
               S               Q 0.6 

N0:         JU             END                                                //程序结束
               BE

    

  回复 引用 举报
wings 个人主页 给TA发消息 加TA为好友 发表于:2010-10-27 00:39:37 31楼
  引用西门吹灯 的回复内容:高手真多啊?仰望中~~~~~~~~~~



同感,学习学习
  回复 引用 举报
彩虹 个人主页 给TA发消息 加TA为好友 发表于:2010-10-27 08:28:00 32楼
 

我后面的程序怎么看不到了,好在只有一张吧。是DB1数据块。

此程序用仿真软件仿真不了不知为什么???,一开始用仿真软件就是不行,跳步时本来设置10分钟,而结果好想只有0.5s就跳步了,只看到飞快地切换,检查程序没有发现不对的地方,一致性检查编辑也没有一个错误一个报警,后把它下载到PLC里运行一切正常,按设计运行效果很好!

  回复 引用 举报
donglisheng1@163.com 个人主页 给TA发消息 加TA为好友 发表于:2010-10-27 09:51:52 33楼
 

我试了一下,没法上传梯形图形式的,有谁知道怎样将梯形图上传的请指教,我不是VIP用户。

  回复 引用 举报
彩虹 个人主页 给TA发消息 加TA为好友 发表于:2010-10-27 23:37:35 34楼
 

在网上下载一个抓图软件就可以。

  回复 引用 举报
彩虹 个人主页 给TA发消息 加TA为好友 发表于:2010-10-28 00:03:29 35楼
 

补上DB1数据块

在上面程序后传了DB1数据块多次后,都不能正常显示只有在这里传上。

  回复 引用 举报
donglisheng1@163.com 个人主页 给TA发消息 加TA为好友 发表于:2010-10-28 08:37:21 36楼
 
转换后的梯形图,谢谢彩虹的指导
  回复 引用 举报
云锋 个人主页 给TA发消息 加TA为好友 发表于:2010-10-29 13:38:44 37楼
 

感觉大家陷入了一个怪圈,基本上大多采用运行时间来做为自动停机条件,其实可以用外部某一模拟量来做为停机条件。(比如,水位,压力等)。还有,程序类命题的出发点是在满足功能的前提下,尽量使程序最简化。

本期评奖结果:

一等奖1名:50MP获得者:ye_w   ye_w

二等奖5名:10MP获得者:

老菜鸟   deshengwu

彩虹   纪强

newchp    newchp

ANDYLIU008    ANDYLIU008

LIUXD6909    LIUXD6909

三等奖2名:30积分获得者:

donglisheng1@163.com    donglisheng1@163.com


panning1528     panning1528

  回复 引用 举报
zyw3166 个人主页 给TA发消息 加TA为好友 发表于:2010-10-29 14:19:08 38楼
 

学习了,谢谢大家。一起学习。

  回复 引用 举报
ANDYLIU008 个人主页 给TA发消息 加TA为好友 发表于:2010-10-31 08:27:25 39楼
  呵呵,楼主我的10MP貌似没发给我嘛
  回复 引用 举报
彩云之滇东北 个人主页 给TA发消息 加TA为好友 发表于:2011-05-15 21:17:56 40楼
 

学习了,收藏了                            

  回复 引用 举报
gwer789 个人主页 给TA发消息 加TA为好友 发表于:2015-07-07 20:21:00 41楼
 

g下来学习,学习,谢谢楼主

  回复 引用 举报
gwer789 个人主页 给TA发消息 加TA为好友 发表于:2015-07-07 20:33:26 42楼
 

不能出全图为什么为什么

  回复 引用 举报
丁昆 个人主页 给TA发消息 加TA为好友 发表于:2018-08-28 13:08:26 43楼
 

      关于轮换,在实际工程中有很多应用,抛开此题的限制,给大家整理一下本人的思路和程序,和大家共勉。

     本人在工作中碰到的最多的单组设备为24台(设为M),也就是在M台中选取指定的台数n(设为n)开启,并且按照一定的优先级(本人碰到最多的就是按照实际运行时间长短,优先开启运行总时间最短的,优先关闭运行总时间最长的)开启或关闭设备。

     基本的思路已经出现,那就是优先级(这里是运行总时间,当然你可以设为其他)的比较决定了程序要去开启哪些或者关闭哪些,PLC程序运行的规律是从上而下,逐条运行的,碰到一下要开或者关几台怎么处理,我的思路是让程序一个周期只去处理一台,几个扫描周期一过总是可以达到要求(当然可以一起处理,无非程序多一个外置循环)。十几个毫秒的延时我认为在绝大多数系统中都是可以接受的,当然本人也没做过要求开启或者关闭绝对同步的系统。

      在实际工程中,一般电机\水泵\风机(本文以下就称电机了)没有运行总时间的点,反而有很多远程(REM)、运行(RUN)、故障(ERR)这种开关量状态点,这种是反映电机的基本状态,当然要考虑进去,当电机都不属于远程的控制位置,我们还能去控制它么?同样,当我们PLC驱动指令发送出去了,几十秒过去了运行信号还没出现(有的电机没有运行信号反馈,那是另外一回事),这个电机一定是不可靠的,不能再继续驱动下去了;故障更不用说了,那是一定要停止电机驱动的。

      从上面可以我们可以得到几个要素:这一组电机的状态点、每个电机的运行总时间、这一组电机的总数量M、需要驱动的数量n、这一组电机的驱动点.我们要得到的是一个类似于完成调度功能的一个程序,让它决定哪些电机驱动点为1,哪些为0就可以了。这个程序最好已经打包成一个子程序,接口应该已经标准化了,而且总数量最好可以变更(驱动数量一定是可以变的,不然就没有意义了),下面以SMART200为例,看一个简单点的调度子程序(电机总数量上限为3):

image.png

      可能有点懵,从最简单的说起,运行总时间怎么求,这个对有点工作经验的人来说很简单,电机的运行信号加上SM0.4/SM0.5啊,什么定时器啊都可以,只要求出来累计值即可。当然电机如果没有运行信号的话那就用驱动信号,反正系统设计就这鸟样也没办法。大家各显神通,本人就如下图处理的:

image.png

当然如果甲方需要把运行时间列到界面上去的话,就是处理一下得出天数、小时数、分数就可以了,这里就不啰嗦了。注意,每个设备运行总时间的求取和计算也放一个单独的子程序里面最好。

     驱动数量n是一定要写到子程序的引脚上的,毫无疑问,这个是核心。然后电机的驱动点也要连接,这里是分开连接的,用的是IN_OUT,而不是用OUT,什么原因说起来太长,这要另起一篇,就算了,有空再阐述一下。再看一下这个程序的引脚:

image.png

    我们知道SMART200里面子程序的引脚个数不能超过16个(我也是搞到一半才发现的),那么已经有了3个运行时间、3个驱动、1个数量,运行时间为REAL的,不能打包;3个驱动也不好打包(有的人为图省事直接要连Q点的话,打包会出问题),那么只能打包这一组电机的运行状态了,从引脚上看,我们给程序传送的是一个双字(dword)的SB_STATUS变量,那么其有32位,可以容纳32个开关量,于是在子程序中开头就有了如下声明:

image.png

对这个传送进程序的双字有了严格的格式规定:bit0为远程点,bit1为运行点,bit2为故障点,bit3为软件故障(可以理解为逻辑错误、软件内部错误什么的),bit4为禁用(实际运行中,甲方检修什么的可以使用),每个字节以此类推,这样子程序就能获取这一组电机中每个电机的当前运行状态。我们于是可以在子程序中计算出当前运行的电机数量和当前电机的可用数量。我们可以用一个临时变量#TE2代表当前运行的电机数量,注意在子程序中应该把已驱动的当成已运行的,此处不能使用运行信号,因为运行信号反馈有延时,等到它反馈到了PLC,黄花菜都凉了,所以我们不能等,驱动给出了就认为已经运行了,至于驱动给出几秒后运行信号没来就交给专门的错误判断程序去处理,到时候反馈个软件故障点位给这个子程序就好了(此时bit3就用上了)。如下图所示:

image.png

     有了已运行数量,我们看看可用数量的定义:在该组中处于远程控制状态并且没有故障并且没有软件故障并且没有禁用的电机数量。字面看上去复杂,用程序就简单多了:

image.png

     最终我们可以得到#TE1也就是可用数量和设备的可用标志位L23.1等等,当然在进入子程序时,要把#TE1和#TE2都置零,这个就不截图了。此时,子程序就可以看到所有设备的状态了,发现谁不可用了自然要关闭它的驱动了:

image.png

      到此为止,我们手上有了3个数量:已运行数量#TE2、可用数量#TE1、驱动数量n。此时如果发现驱动数量大于可用数量怎么办?比方说1#、2#、3#电机其中1#电机被禁用、2#电机出现故障,那只有3#电机可用了,此时如果驱动数量为2的话就尴尬了,子程序当然不会允许出现此类情况:

image.png

      我们引入一个DR_NUM_XZ的变量作为修正,让驱动数量不会超过可用数量(原谅我的英文太差,XZ用的是拼音),并且我们命名其为拟驱动数量。此时有了已运行数量和拟运行数量,相等就是最好了,皆大欢喜什么都不用动保持原状就可以了,如果不等,那么问题就来了,也就是核心问题,开始比较优先级了,先用文字说明:如果拟运行数量大于已运行数量,子程序应该从没有运行的可用电机中找出运行总时间最短的一台电机,置位对应的驱动;如果拟运行数量小于已运行数量,子程序应该从已运行的电机中找出运行总时间最长的一台电机,复位对应的驱动。程序了解一下:

image.png

       此时,我们用的是穷举(上限为3,就不用丧心病狂的循环和指针了)和冒泡比较法(基本的编程算法最好了解下吧,有用的),来找出该组电机中已运行并且运行总时间最长的那一个(CLOSEID)可用但是没有运行并且运行总时间最短的那一个(OPENID),如果没有找到那就是0。

      有了CLOSEID和OPENID就简单了,我们只需轻轻的复位和置位该输出就完成了:

image.png

image.png

      至此,该功能块已编程完成,我们可以得到一个最多3个设备一组的调度块(SBTHREE)并且可以利用它完成很多很多的功能。比如自动轮换、优先级设定、备用自投。我们在实际工程中,用SMART最多编制成4个设备一组(SBFOUR)。至于24个设备一组的,当然是300/400PLC的活了,可能下次有时间和兴趣再和大家一起拆解玩玩。

     胡说八道这么多,水平一般,大家见笑了,也希望大家能共同学习,共同进步!

  回复 引用 举报

周点击排行
周回复排行
最新求助
Advertisement