0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

电机运行时间进行排列 是分为两个部分来完成这个程序的设计的

aYPB_plc 来源:陈年丽 2019-07-19 08:57 次阅读

前几天有个学员咨询一个程序设计的问题,程序的控制要求如下:需要控制5台电机的运行,每台电机运行时需要记录运行时间,电机启动运行时,根据记录的运行时间,从小到大,每个2s依次启动电机的运行。

我想对于这个程序的控制要求来讲,他的难点在于如何对这些电机运行时间进行排列,排列好了后,如何根据排列的顺序去起动电机的运行,从这个控制要求中我们可以看出,这主要是分为两个部分来完成这个程序的设计的:

第一部分、用于对电机的运行时间进行从小到大顺序的排列

第二部分、根据排列好的数据,如何判断需要起动那一台电机

前几天有个学员咨询一个程序设计的问题,程序的控制要求如下:需要控制5台电机的运行,每台电机运行时需要记录运行时间,电机启动运行时,根据记录的运行时间,从小到大,每个2s依次启动电机的运行。

我想对于这个程序的控制要求来讲,他的难点在于如何对这些电机运行时间进行排列,排列好了后,如何根据排列的顺序去起动电机的运行,从这个控制要求中我们可以看出,这主要是分为两个部分来完成这个程序的设计的:

第一部分、用于对电机的运行时间进行从小到大顺序的排列

第二部分、根据排列好的数据,如何判断需要起动那一台电机

这里我们以西门子S7-200SMART系列PLC为例,先说说,如何编写一个数据排列的带参数的子程序。

数据排列带参数子程序设计思路:

西门子S7-200系列的PLC中不像三菱的FX系列PLC具有数据排列的指令,因此我们要实现这个数据的排列功能,必须自己去搭建一个这样的功能块,在搭建这个功能块的时候,会使用到间接寻址和循环指令,同时还需要应用到带参数的子程序。那么如何编写一个数据排列的子程序呢?

假设有5个数据需要把他们的数据的大小按照顺序从小到大排列,那么我们可以先在这五个数中找到最大的数放在最后面。然后在剩下的四个数中找到最大的数放到倒数第二个的位置,接着在剩下的三个数中找到最大的值放到倒数第三的位置,依次下去,这样当全部比较完后,我们的数据就按照从小到大的顺序排列好了。那么很明显,我们需要用两个循环指令进行嵌套。外层的循环指令需要循环4次,而内层的循环指令的循环次数是会变化的,因为第一次从5个数据中找出最大值,循环4次,第二次的时候从4个数据中找出最大值,循环3次,依次下去,每次需要改变循环的次数。

如何找出最大值呢?我们可以进行比较,首先用第二个数跟第一个数比较,如果第二个数比第一个数大,那么指针往下移动变成第二个数跟第三个数比较,如果第二个数比第三个数大,那么对第二个数和第三个数进行交换,依次下去,当比较完成后,最大的数就放到最后的地址里面去了。

程序设计:

(1)建立变量表

(2)根据变量表,编写数据排列子程序

第二部分的内容:根据排列好的数据,如何判断需要起动那一台电机。

在启动电机时,我们需要把每一台电机运行的时间拿过来与排列好的数据进行比较,看看他是位于我们这个排列好的数据中的的什么位置。然后根据这个位置来判断启动的时候。

设计思路:

在这里面我们会用到两个功能,第一个功能时把我们电机运行的时间,按照编号顺序放到表格中,例如VW20到VW28分别表示电机1到电机5的运行时间,把它放到表格中,而后把我们排列好的数据,拿过来与表格中的数据进行比较(可以使用查表指令),看看最小的值时位于表格中的哪个位置,根据查表指令所查找的位置来启动那条电机,比如查找出来的值时3则表示的就是第三台电机的运行时间最少,可以启动这第三台电机,这里我们需要用到表格指令及间接寻址。

程序:

总结

本程序作为一个框架程序,主要应用到了以下几个内容,间接寻址的时候用,循环指令的应用,带参数子程序的应用,查表指令的使用,希望读者看完后,对自己以后设计程序时思路会有所启发,若有考虑不周之处或更好的方法,望指出,谢谢。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 西门子
    +关注

    关注

    91

    文章

    2824

    浏览量

    113601
  • 电机
    +关注

    关注

    139

    文章

    8244

    浏览量

    141772

原文标题:资深工程师分享:PLC程序设计思路,初学者福利!

文章出处:【微信号:plcfans,微信公众号:PLC发烧友】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    如何缩短Vivado的运行时间

    在Vivado Implementation阶段,有时是有必要分析一下什么原因导致运行时间(runtime)过长,从而找到一些方法来缩短运行时间
    的头像 发表于 05-29 14:37 1.4w次阅读
    如何缩短Vivado的<b class='flag-5'>运行时间</b>

    获取单片机运行时间

    测试代码的运行时间的两种方法 使用单片机内部定时器,在待测程序段的开始启动定时器,在待测程序段的结尾关闭定时器。为了测量的准确性,要进行多次测量,并
    的头像 发表于 08-26 20:26 1535次阅读
    获取单片<b class='flag-5'>机运行时间</b>

    程序运行时间计时小程序

    本帖最后由 sushu 于 2013-3-9 22:40 编辑 看到一帖子[求助] 计算程序运行时间,想要计算指示灯点亮和熄灭的时间,想了想:使用事件结构就可以
    发表于 03-09 22:39

    labview中计算程序运行时间

    可能这个对大家来说不是什么大问题,也有很多人有很多方法来实现程序运行时间的计算,要么两个计时器,要么用到事件结构。我这里用移位寄存器实现。 希望大家不要吐槽,如果大家有更好的,希望共
    发表于 05-23 21:52

    LabVIEW程序运行时间与循环时间冲突

    的是:1,如何使循环读取的时间运行时间一致; 2,使用定时循环结构设定循环时间为什么不能达到循环时间运行时间一致。
    发表于 11-30 14:24

    电机参数检测程序运行时间有多长?

    、Flag_Run_Identify;这个使能位控制电机运转,我看是通过PWM的使能来控制,这样是不是立刻停止电机和启动电机,在系统内部有缓慢启动和停止机制吗?四、
    发表于 06-19 13:47

    freertos的任务运行时间怎么设置

    对于相同优先级的任务采用时间片轮询的方式运行,那比如说有两个优先级都为5的任务,那这两个任务的运行时间如何设置呢?在rt-thread中创建
    发表于 07-19 08:03

    电机运行时被编码器堵转检测强停问题怎么解决?

    电机运行时被编码器堵转检测强停问题怎么解决?
    发表于 10-11 08:03

    介绍几种测量单片机程序运行时间的方法

    断点,记录两个断点的t1时间两个时间差即为待测代码运行所需的时间。在IAR中,可以通过查看CY
    发表于 03-23 14:55

    电机运行时啸叫、噪音过大是为什么?

    电机运行时啸叫、噪音过大?
    发表于 11-08 08:18

    C语言教程之显示程序运行时间

    C语言教程之显示程序运行时间,很好的C语言资料,快来学习吧。
    发表于 04-25 16:09 0次下载

    浅析STM32代码运行时间的技巧

    前言     测试代码的运行时间的两种方法: 使用单片机内部定时器,在待测程序段的开始启动定时器,在待测程序段的结尾关闭定时器。为了测量的准确性,要进行多次测量,并
    的头像 发表于 11-09 09:52 3328次阅读
    浅析STM32代码<b class='flag-5'>运行时间</b>的技巧

    ch32v307记录程序运行时间

    ch32v307记录程序运行时间程序开发中,很重要的一项任务就是对程序运行时间进行评估。对
    的头像 发表于 08-22 15:53 425次阅读

    变频器带动电机运行时发抖是怎么回事?

    频率,则变频器不输出10-14Hz的频率,直接跳过。带动电机运行时产生抖动的处理方案以三菱变频器带动电机运行时产生抖动分析为例,如下:(一)、机械共振原因:机械共振
    的头像 发表于 10-31 08:07 588次阅读
    变频器带动<b class='flag-5'>电机运行时</b>发抖是怎么回事?

    西门子SCL编程50台电机运行时间累计方法

    当RUN信号为TRUE时,开始计时,为FALSE时停止计时,单次运行时间清零,长按RESET为5秒时,单次和总运行时间都清零。
    发表于 11-27 09:59 634次阅读
    西门子SCL编程50台<b class='flag-5'>电机运行时间</b>累计方法