基于有限状态机的数字化加工单元管控系统研究与应用
2024-05-07陈加才张虎文绍华刘永坡陈勇
陈加才,张虎,文绍华,刘永坡,陈勇
(四川航天长征装备制造有限公司,四川成都 610100)
0 前言
加工单元是一种能独立完成特定生产任务的制造系统[1]。随着物联网、信息物理系统等技术的发展,单元的生产效率不断提高[2]。然而,一方面,现有单元数字化程度仍不高;另一方面,企业生产模式正由单品种大批量向多品种变批量过渡。为提升产能,企业必须提升对生产过程信息的掌控能力。加工单元作为企业实现智能制造、数字化决策等目标的数据源,其数字化程度直接影响生产效率。因此为解决上述问题,有必要针对加工单元的管控系统进行研究,实现单元全流程数字化管控与面向多品类产品的柔性制造[3]。
加工单元的控制核心在于PLC,而RFID是实现数字化追踪的关键[4]。根据PLC控制策略,王元生等[5-7]实现了单元自动装卸、机床控制。通过对加工流程进行分析,何佩云等[8-9]利用RFID研究了单元柔性控制系统。孔志学等[10-11]利用基于PLC的过程控制算法,开发了设备通信上位机程序。上述研究内容一定程度上实现了单元数字化控制,但仍存在如下不足:(1)设备覆盖管控与采集难。基于PLC的设计控制策略解决了机床、机器人的管控问题,NC程序传输,RFID读写等均无法通过PLC完成,且缺少可视化界面。(2)系统维护扩展难。一些研究实现了单元可视化管控,但生产业务与程序代码高度耦合,难以应对业务变动造成的控制逻辑变化。(3)系统响应慢。现有管控软件采用面向生产过程的流程化设计,无法做到对设备/设施的状态实时响应。
基于上述问题,本文作者以某车削单元为研究对象,分析单元生产流程,研究单元信息架构、异构数据采集以及基于有限状态机的生产调度策略等内容,利用面向对象语言C#开发响应式管控系统,以实现单元数字化柔性生产、可视化/自动化监控。
1 加工单元总体设计
整个单元由4台数控机床、1台工业机器人、装卸台、暂存工件/托盘的线边仓、1台采集数据的总控PLC、管控系统及相应配套设备组成。为减少占地面积,保证作业安全的同时便于观测生产,单元采用封闭式、单侧布局的方式,将机床与线边仓布置在两侧。为了减少重复搬运、提升运行效率,将工件进出单元的操作布置在同一装卸台上,实现装置复用。单元的整体布局如图1所示。
单元生产流程的物料流如图2所示。生产流程分为入库(工件从装卸台运至线边仓)、上料(工件从线边仓运至机床)、加工、下料(工件从机床运至线边仓)、出库(工件从线边仓运至装卸台)。机器人负责机床加工外的全部流程。为提升柔性生产能力,由托盘装载工件进行加工,托盘采用RFID作为唯一标识。入库后,工件会绑定托盘,因此追踪托盘RFID即可实时监控工件。为保证数据安全,入库与上料时会校验RFID,校验失败会执行回滚。根据业务需求,在进行生产调度时,出入库优先级高于上下料。
图2 加工单元物料流
2 多源异构实时数据流构建
2.1 多源异构数据的实时采集
管控系统控制下的生产调度是一个数据密集型过程,系统需通过不同通信协议和数据结构与各设备实时进行数据流、控制流交互,同时系统内还存在大量维护业务运行的基础数据。图3所示为单元信息互通架构,考虑到动态业务数据与静态基础信息“动静分离”管理及后续扩展,根据业务特点与用户权限分割需求,将管控系统分为基于B/S架构的Web端单元管理平台和基于C/S架构的调度服务程序。前者部署于Web服务器,负责基础数据/生产任务管理、看板展示;后者部署于调度服务器,负责读取任务并执行生产调度、设备通信。为提升系统性能与数据安全性,在二者间部署数据库/ FTP服务器,存储运行数据与机床NC程序。
图3 加工单元信息互通架构
管控系统采用“设备-以太网-client”的三层结构与设备进行通信,将采集数据封装处理后存储到数据库中,以实现单元生产调度与信息展示。为降低数据复杂度,提升通信效率,采用PLC作为数据主源,将单元大部分数据集中采集后过滤、验证、打包,并利用TCP/IP协议传输给系统,其他不能集成通信的数据则以各设备协议进行传递,如RFID数据(TCP/IP、串口)、NC程序等(FOCAS协议)。
2.2 异构数据的封装与处理
硬件设备运行数据是管控系统进行生产调度的逻辑依据[12]。为屏蔽异构数据的多样性,在管控系统内构建了针对底层硬件的通信模块。模块数据流如图4所示。
模块介于上层业务代码与底层设备间,包括API、异常处理、数据处理、缓冲区、硬件通信等子模块。在系统进行硬件通信时,考虑到可能存在因车间生产现场业务需求的变化而造成的硬件设备变更,管控系统应尽量减少与硬件设备的耦合程度,并具备可扩展的通信能力。根据上述需求,将通信配置信息(报文结构、通信地址、通信协议等)以JSON字串的形式在数据库/配置文件中持久化存储,由该模块利用数据读取技术加载到内存后,生成数据映射字典。模块在与设备数据进行交互时,利用数据映射字典,根据通信数据字节索引、比特索引、对象类名、属性名、对象编号等配置内容进行数据映射,实现非结构化字节数据和系统使用的结构化对象数据双向映射。
为提升系统的响应能力,减少无效请求,模块在进行数据映射后,采用事件响应完成数据传递,上层则通过调用API将控制数据注入模块,实现系统与底层硬件双向通信。
3 基于有限状态机的生产调度设计
有限状态机(Finite State Machine,FSM)也称有限状态自动机,是一种面向事件驱动型系统的建模工具[13]。对于适用FSM建模的系统,其只有有限状态,且始终处于某行为确定状态。系统下个状态是当前状态和输入内容的函数。系统会响应外部/内部事件,并进行状态跳转或维持当前状态。
由于设备/设施行为可预测,因此可利用FSM对单元关键调度对象进行建模,控制其状态转移,并基于异步编程与事件驱动设计构建响应式系统,从而避免无效等待,实现有序调度,增强可重构能力。
3.1 生产调度过程建模
为优化建模过程,提出以下对象选择原则:(1)应满足FSM特征;(2)生命周期应尽量覆盖单元生产流程;(3)状态转换应尽量多地调动设备运转,从而提高效率。基于上述原则,由于搬运任务均由机器人完成,而工件生命周期内系统对各设备均有调用,但对二者单独建模均无法覆盖整个生产流程,因此文中分别对机器人及工件进行FSM建模。
3.1.1 机器人调度对象运行建模
机器人调度对象由机器人设备及其任务信息组成。任务类型包括入库、出库、上料、下料、回滚。单个任务包含一或多条原子级机器人指令,并可能涉及其他设备的调用、数据库的读写等操作。根据任务类型和优先级,对象状态如表1所示。
机器人调度对象由用户/硬件触发的外部事件驱动。为体现出入库优先级高于上下料的业务需求,依据任务区分了驱动事件,包括:锁定机器人C0、添加入库C1、添加出库C2、装卸台/线边仓未就绪C3、校验失败C4、检验成功C5、上料请求C6、下料请求C7、任务完成C8、硬件故障C9、硬件恢复C10、窗口关闭C11、运行调试C12。
用户点击出入库或调试机器人时,若机器人空闲,系统会将它锁定,并仅响应出入库/机器人调试而忽略上下料,否则系统会待其执行完当前任务再锁定。当未添加任务并关闭窗口时,机器人回到空闲状态,可响应上下料。校验RFID时,若校验失败,会执行回滚(将工件退回装卸台/线边仓)。考虑到系统的安全性,机器人硬件故障时,无论当前处于何种状态,系统将跳转到故障并报警。检测到机器人正常后,系统跳转到之前状态并继续执行。基于上述流程,调度对象状态转移过程如图5所示。
图5 机器人调度对象状态迁移过程
3.1.2 工件调度对象运行建模
工件调度对象面向单元内工件建模,其运行状态由工件位置、托盘绑定、机床状态等信息决定。根据工件生命周期中加工、流转过程,可得其状态如表2所示。
表2 工件调度对象状态
工件调度对象由机器人/机床触发的外部事件驱动。通过分析加工流程,总结出如下事件:运至装卸台C0、运至线边仓C1、运至机床C2、机床确定C3、NC程序传输完成C4、机床加工完成C5、读取到RFID C6、取消绑定C7。
用户将工件安装在托盘并固定于装卸台后,点击入库,指定加工任务。入库流程中,系统读取RFID,使工件绑定托盘。监测到有机床空闲时,系统在仓内找到匹配工件,传输/校验NC程序并启动机床。机床请求上下料时,系统自动响应请求。工件在线边仓时(处于S2、S3、S4或S7),用户点击出库,系统调度机器人搬运,同时解绑托盘,并终结该对象。据此可得工件状态迁移过程如图6所示。
图6 工件状态迁移过程
3.2 基于事件驱动的FSM程序设计
FSM的实现模式有过程模式、状态模式等[14]。过程模式利用嵌套条件语句实现事件触发/状态跳转。状态模式将控制逻辑基于状态拆分,能避免过程模式维护困难的问题,但状态间切换无明确表达,没有体现事件的驱动特性,不利于扩展。
由于上述问题的存在,文中基于状态模式改进了面向生产调度过程的状态机结构。考虑到同时调度多个对象的需求,简化了调度对象的数据结构,将状态/行为分离,由调度对象动态保存状态,由状态处理程序静态保存对象跳转策略。图7所示为状态机结构及该结构下实现机器人/工件调度的程序类图,展示了以下关键类部分属性、函数和关系。
图7 状态机的类
IStateMachineContext接口:状态机调度对象,保存了状态变量与运行信息。
泛型T:调度对象类型约束,约束为实现IStateMachineContext接口的类。
IStateHandler
IDriveData接口:驱动数据,由外部系统注入,包含了外部系统触发的事件及调度对象标识,如工件/机器人编号等。该数据是状态转移驱动源。
StateMachine
WorkpieceContext类:实现IStateMachineContext接口的工件调度对象。
RobotContext类:实现IStateMachineContext接口的机器人调度对象。
其余为机器人运行状态(S0-S12)与工件运行状态(S0-S9)对IStateHandler
当系统需调度新工件/机器人时(如新工件入库),调用状态机RegContext即注册调度对象。这使系统分别对WorkpieceContext类与RobotContext类创建一个状态机实例,并以较小的数据结构便可生产调度。当业务变动导致对象调度逻辑新增/变更时,仅需创建IStateHandler
图8所示为状态机的程序流程。当事件触发时,系统执行InsertDrive注入数据。状态机内由单独线程执行DriveMachine。
图8 事件驱动流程
该函数从DriveQueue获取驱动,依据标识找到调度对象后,由其状态获取对应IStateHandler实例并执行DoStateAction完成状态输出,随后执行GetEvent判断跳转事件是否触发,若触发,则根据事件id执行GetNext,更新调度对象状态,实现状态跳转。
4 实现与验证
4.1 系统技术实现
考虑到编码时调用多方dll的需求,文中采用面向对象语言C#编程,以SqlServer2018为系统数据库,利用FTP进行文件传输,并用IIS管理器完成服务(Web/FTP服务)部署。
图9所示为管控系统软件架构。单元管理平台为B/S架构。为降低耦合度,基于.NET Core技术,采用Vue +WebAPI前后端分离方案。单元管理平台处于系统上层,还负责与外部MES数据通信,该方案保证在已有代码基础上,对MES开放指定接口即可通信,提升了系统动态集成能力。
图9 管控系统软件架构
调度服务程序采用C/S架构,由于它直接与硬件设备通信,因此技术方案应具备快速开发调试、易于部署的能力。据此,采用了Winform+MVC的方案,利用Winform控件库进行程序界面的迅捷设计,通过MVC模式实现了UI与数据的解耦。
4.2 运行验证
文中将开发的管控系统部署在四川航天长征装备制造有限公司某车间车削单元,图10所示为管控系统程序界面与单元运行展示。该系统实现了基于生产现场运行事件的自动响应与调度控制,能根据生产任务自动控制相关设备实现物料转运、仓储管理、生产加工、日志记录。使用该管控系统后,加工单元对工件实现了100%的状态追踪,形成了面向单元生产现场的实时可视化/自动化化监控、异常处理、设备保护、数据统计与分析一体化系统。
图10 单元运行展示
5 结语
文中针对加工单元数字化管控所需解决的设备管控与采集难、数字化程度低、系统响应慢等问题,利用.NET技术,设计并开发了基于FSM的数字化管控系统。该管控系统的特点如下:(1)通过B/S与C/S架构的组合设计,将基础数据与生产数据动静分离,与硬件设备组成了单元信息互联互通架构。(2)构建了可配置通信格式的设备通信模块,实现多源异构设备实时数据采集与封装处理。(3)基于响应式系统设计,利用FSM对生产调度进行行为建模,能够依据生产事件驱动单元自动化生产调度与设备管控。
此管控系统已在公司某车削单元完成了测试与部署。经测试,在系统控制下,此单元实现了全流程数字化自动生产调度,为后续数字孪生车间、数字工厂的建设提供了数据基础。