0.引言
随着我国经济的高速发展, 现代化企业生产规模的逐年扩大, 物资供应与存储已成为制约企业发展的一大因素。如何充分发挥潜力, 在有限的场地实现仓库存储规模的最大化, 是摆在每个企业管理人员面前的一大问题。而自动化立体仓库的出现, 不但有效地解决了存储空间紧张的问题, 同时实现了物流系统的合理化配置。
由于PLC操作简单, 性能可靠, 在立体仓库的控制系统中, 广泛使用了PLC作为启停、开关、互锁等功能。在以往的PLC程序设计和编程过程当中, 往往采用经验法进行设计。然而在立体仓库的控制过程当中, 特别是大型立体仓库, 逻辑关系复杂, 互锁条件较多, 在采用经验法设计过程中, 存在编写周期过长, 程序可读性差等问题。为了解决以上问题, 在程序设计时采用模块化设计取代传统的经验法设计, 使程序逻辑关系便于梳理, 增加了可读性, 特别是在后期维护和改变条件时, 显著减少了工作量。
立体仓库的库位示意图如图1所示。
在库位的分布上, 有一个缓冲区作为货物存放的初始位置。1~9号位仓库的存储位。整个立体仓库的工作过程可以描述为:
(1) 当货物需要入库进行存放时, 叉车从缓冲区取货, 然后把货物输送至相应的仓位放置货物, 完成后叉车回到初始位置等待下一步操作。
(2) 当货物需要出库拿取时, 叉车找到相应的仓位进行取货操作, 然后把货物送到缓冲区, 完成后回到初始位置等待下一步操作。
为了实现上述功能, 一般采用三维叉车作为执行元件。示意图如图2所示。
三维叉车由电机完成水平方向 (X轴) 拖动系统、垂直方向 (Y轴) 拖动系统、进出方向 (Z轴) 拖动系统的驱动。它可以完成从缓冲区到仓位的自动存货过程和从仓位到缓冲区的自动取货过程。
在使用该系统时, 我们可以通过操作手柄选择相应的仓位 (1~9号, 可根据实际现场条件进行增减) , 选择入库还是出库, 完成所需要的工作。
我们为了解决一个复杂的问题时, 往往采用模块化的方式进行, 即把一个复杂问题拆分成若干个便于理解和解决的模块, 每个模块能够实现特定的子功能, 把所有模块组合起来, 再根据系统的要求加上一定的运行条件和逻辑判断, 从而实现整个系统的功能。
一般情况下, 模块具有以下几个基本属性, 接口、功能、逻辑、状态, 功能、状态与接口反映模块的外部特性, 逻辑反映它的内部特性。
在计算机编程语言中, 特别是高级编程语言中, 大量使用模块化设计有助于解决复杂问题。而在PLC程序设计过程中, 同样可以借鉴这样的编程思想。如果分解出来的模块还是无法解决, 则继续分解形成新的模块, 直到解决问题为止。
另外需要注意的是, 为降低软件系统的复杂性, 提高可理解性和可维护性, 模块不能任意划分, 应在分解时尽量保持其独立性。模块的独立性可用两个定性标度衡量, 即耦合和内聚, 要获得较高的独立性, 就需要做到低耦合和高内聚。
整个立体化仓库的控制流程如图3所示。
通过该流程可知, 整个立体仓库的运行实际上分为每一个具体的步骤进行, 每一个步骤包含了若干动作, 实现所需要的功能。在控制流程中, 可以把一个步骤看成一个模块, 每个步骤内有其自身的逻辑和功能, 完成特定的动作。
在划分方式上, 可以把整个流程划分为两大模块, 即入库模块和出库模块。两大模块具有刚才列举的基本属性, 入库模块完成货物的入库功能, 出库模块完成货物的出库功能。当选择入库或者出库时, 可以看作接口的选择;当入库动作或者出库动作时, 就是系统运行的两种不同状态。而两个模块有其自身的逻辑控制功能, 完成特定的动作。
在该控制系统中, 按入库、出库的模块划分虽然能理清两个不同功能的逻辑关系, 但是并没有降低系统的复杂性。在仔细分析工作过程后, 我们可以继续把两大模块拆分成若干个子模块, 即:
入库功能分为缓冲区取货模块、送货至指定仓位模块、入库完成模块和复位模块;出库功能分为指定仓位取货模块、送货至缓冲区模块、出库完成模块和复位模块。经过模块的继续细分后, 整个工作过程条理清楚, 大大降低了程序编写的难度。
在子模块程序的编写上, 注意工作过程的逻辑关系, 前一模块是后一模块的启动条件, 在前一模块没有完成之前, 后一模块无法启动;而当所有子模块完成之后, 入库和出库模块才算完成。
模块化设计还有一个好处是, 相同功能模块可以直接调用, 比如入库和出库功能中, 都使用了复位功能, 我们在设计复位功能模块的时候只要注意逻辑关系、互锁和启动条件, 便可以在入库或者出库模块的最后调用写好的复位模块, 提高了效率。
最后需要说明的是, 在立体仓库的模块化设计过程当中, 在流程图上没有标注, 但是经常重复使用的功能模块不应该忘记编写, 比如频繁使用的限位开关脉冲信号, 驱动叉车在X、Y、Z轴方向上运动的信号等, 都可以作为独立模块进行设计和编写, 方便在每个不同的子模块中调用。
结语
采用模块化编程思想, 使PLC系统的编程变得简单、灵活。特别是对于控制系统比较复杂的场合中, 或者需要多次调用的情况下, 采用模块化编程后, 使调试时间大幅减少, 便于理清控制过程的逻辑关系, 也为系统增加了方便的扩展功能 (如增加仓位、增加缓冲区) 。在自动化的复杂程度越来越高的今天, 值得运用和推广。
【本文标签】
【责任编辑】平文云仓