回复:SCL 语言编程排序求助

宁超

  • 帖子

    1009
  • 精华

    39
  • 被关注

    370

论坛等级:至圣

注册时间:2012-12-11

普通 普通 如何晋级?

发布于 2015-10-20 07:53:45

1楼

电机运行时间冒泡排序,需要将运行时间和电机编号绑定在一起,运行时间排序的时候带着电机编号一起走。可以建立一个STRUCT,里面 含有Runtime ,和Number两个或者更多的电机信息,如电机允许启动(如在远程模式,没有故障,已经启动的电机已到达上限等),电机允许停止等信息

           Struct:
              Number:INT;  //程序分配1~4
              Runtime:DINT;//数值来自RunTimeMeter功能块
              StartEn:BOOL;//启动允许
              StopEn:BOOL;//停止允许
            End_Struct;

  //外循环次数ExtCyc,Num = 参与排序电机的个数,如Num=4,

  //内循环次数IntCyc

  //嵌套循环后会把电机运行时间从小到大全部排出来

  //冒泡排序,相邻的运行时间进行比较,大于则交换位置,DataCopy存的就是你的电机信息

  //比较时只需要比较运行时间,但是交换时交换总个STRUCT

  //DataSwip缓冲交换的Struct信息

  //排序的是总个Struct的电机信息。绑定了电机编号后,下次要启动哪个电机还不明了么?

 FOR ExtCyc:=1 TO (Num - 1) BY 1 DO  
         FOR IntCyc:=1 TO (Num - ExtCyc) BY 1 DO 

             IF DataCopy[IntCyc].Runtime > DataCopy[IntCyc + 1].Runtime THEN 
                DataSwip:=DataCopy[IntCyc];
                DataCopy[IntCyc]:=DataCopy[IntCyc + 1];
                DataCopy[IntCyc + 1]:=DataSwip; 
             END_IF;
         END_FOR;       
  END_FOR;

//程序往下要处理排出的电机是否已经启动,有没有故障,是否是PLC控制,是否已经达到电机个数上限

//要根据判定的情况依次找合适的启动电机编号

             图 1  电机允许启动允许停止

      图2 电机已经运行的数量 


  图3 启动泵和停止泵的功能 


评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54618条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。