基于三菱PLC间接寻址的循环结构与排序算法实现

2019-02-07 05:37刘思远
无线互联科技 2019年22期

刘思远

摘   要:三菱PLC中利用变址寄存器与其他的软元件编号组合在一起可以方便地实现对多个数据的寻址操作,也称间接寻址。在三菱PLC中结合间接寻址和其他指令可以实现类似C语言中的循环结构和排序算法,这种编程方式更为简便和灵活,通用性强,能帮助PLC编程人员掌握一些高级语言的基础知识。文章基于三菱PLC间接寻址,对实现循环结构与排序算法进行了分析。

关键词:间接寻址;循环结构;排序算法

在实际的项目应用当中,在对多个数据进行操作时,经常需要间接指定地址。所谓间接指定地址,就是区别于D0,D100等直接指定地址,而利用一个基准地址和间接指定数来指向一个新的地址的操作。间接指定地址相比直接指定地址来说,指定的地址是可以变的,所以间接指定地址的操作又称作变址操作[1]。变址寄存器结合其他的软元件可以很方便地对一串数据进行操作,类似于高级语言中的指针。

在高级语言中循环结构是结构化程序设计的基本结构之一,主要用到GOTO,DO while,FOR 3种语句[2]。在工控行业的可编程逻辑控制器(Programmable Logic Controller,PLC)控制中,很多问题都要用到循环语句,比如物流系统在一套产品入库时,需要产品按照指定要求实现自动、循环入库。三菱PLC中有FOR NEXT指令,但是在一些执行机构动作的顺序控制时,FOR NEXT指令不能很好地实现,此条指令更适合做简单的算法。利用判断指令和变址寄存器可以很方便地嵌套到顺序控制中去,实现对执行机构一些循环动作的控制,这种编程思路借鉴了高级语言中的FOR语句。

排序也是PLC控制中经常遇到的难题,比如智能制造生产管理系统下单后,设备按照订单的编号大小进行生产,或者按照随机的要求生产,都要用到排序算法。三菱PLC中SORT指令是专门解决排序问题的,但是也有局限性,只能在程序中使用一次,不可重复使用。

本文以某智能制造生产系统中两种典型的控制要求为模型,结合高级语言的知识,以MES下单、订单生产为例子,利用三菱PLC中的变址寄存器和其他指令实现循环和排序算法。

1    MES系统介绍

图1为某智能制造生产系统的结构。MES系统分配了固定地址的数据寄存器给PLC,用以存放订单和产品的相关信息。图2中给出了用户下载订单后,3个订单的信息存入到PLC中的数据寄存器,上层为订单的基本信息,下层为该订单的产品信息,每个订单的产品信息存入的是不同的数据寄存器,例如订单10000的产品1编号存入D406,订单10001的产品1编号存入的是D436,以此类推,下层界面会随订单的变化而变化。

2    循环结构的实现

2.1  循环语句

C语言中有4种循环语句:goto,while,do while,for语句。

For语句最简单的理解形式如下:for(循环变量赋初值,循环条件,循环变量增值),例如:FOR(i=1, i<100, i++)[3]。

利用三菱PLC中的条件判断指令和变址寄存器再结合顺控指令的跳转即可以实现类似C语言中的for循环。所用到的指令为[Ld< z0 k100], incp z0,类似于C语言中的循环条件和循环变量增值。

2.2  按照订单编号循环生产的实现

订单由MES系统下单到用户的客户端,用户下载订单后根据订单编号依次进行生产,但由于产品种类及数量过多,在编写系统的PLC程序时,编程人员要反复大量地使用不同数据寄存器,十分繁琐而导致容易出错。三菱PLC在处理此类问题时用顺控指令结合变址寄存器能很快地实现条件的判断和循环。

3    排序的实现

3.1  排序算法

C语言中排序算法大致分为比较算法和非比较算法。比较算法使用较多,基本上都是通过比较两个数的大小来实现,比如冒泡排序、快速排序和插入排序。冒泡排序是最经典的排序算法,很适合初学者。

在MES下单系统中,订单除了按照顺序循环生产外,还存在优先级的概念,即先生产哪一个订单。在编写此类问题的PLC程序时,就要对多个数据进行优先级别的排序,可采用类似于高级语言的冒泡排序。用变址寄存器结合查询指令SER排序可以很灵活地解决该问题。

3.2  按照订单优先级进行排序的实现

将3个订单的优先级存入D200~D203中。利用SER指令查找出3个数据中最小值的位置,以Z1分辨3个订单的状态(在MES系统中,订单状态寄存器为1时代表订单等待生产,2为正在生产,3为取消订单,4为生产完成);以Z2分辨当前最小的是哪个数据并将其存入D211~D213中。

单个数据存入完毕后,将其值改变为K101(MES系统中优先级的最大值默认为K100)并利用MES留有空余的D404,D434,D464判别该数据是否已经被排序,当所有数据被排序完成后停止程序的运作。

该程序只是范例,在完整的程序中,还有更多的条件需要考虑,仅提供了大概的框架。

4    结语

本文详细地介绍了利用三菱PLC的变址寄存器实现某智能制造生产系统中对多个订单的处理方法,包括订单的自动循环生产以及有订单优先级时该如何处理。

本文所提供的梯形圖参考程序借鉴了高级语言的循环结构和排序算法,而目前工控行业对PLC编程人员掌握高级语言知识的能力要求越来越高,西门子TIA PROTAL中的SCL编程语言是根据C语言封装的,在数据处理算法方面有很大优势。将三菱PLC间接寻址的编程思路灵活运用,可以优化程序,解决数据处理逻辑和算法时的一些难点。

[参考文献]

[1]霍海波,范江波.基于三菱FX2N系列PLC软元件数据实时改变与显示设计[J].烟台师范学院学报(自然科学版),2006(1):31-36.

[2]马学敏.计算机C语言循环语句的应用研究[J].中国新通信,2016(17):87-88.

[3]王韬睿.三种简单排序算法及实现[J].通讯世界,2019(1):284-285.