本博客最初发布于cimetrix.com。
你是否曾遇到过这样的情况:正在使用的应用程序突然退出,重启后发现所有工作都丢失了?(如果没有,那总有一天会遇到!)本文将探讨CimetrixCimControlFramework™如何处理这种情况。
什么是持久化,以及为什么应该使用它?
问题:
在执行任何应用程序时,始终存在执行终止的风险:应用程序被提前关闭、计算机断电或程序故障。通常程序在内存中存储的数据代表着该应用程序截至当前时刻的核心数据和运行状态。 当执行意外中断时,所有累积至该时刻的信息都面临丢失且无法恢复的风险——因为内存中的数据本质上不具备持久性。程序终止后,内存中存储的任何数据都将消失。
解决方案:
典型的解决方案是在重要数据创建或修改时立即将其写入磁盘。通常将此类数据保存到一个或多个文件中,以实现完整的持久化存储机制。这能有效使每个数据项保持"持久化"状态,确保关键信息永不丢失——即使程序终止亦然。当应用程序重新启动时,可通过读取持久化文件恢复意外终止状态,并将每个数据项还原至其最后保存的值。
CCF中的坚持:
以下章节将阐述CCF中坚持不懈的两个实例。
NVS(非易失性存储器)
当工具监督程序或GEM主机修改持久变量的值时,新值会被存储在CCF的NVS设施中对应的文件中。工具监督程序重启时,设备应用程序初始化过程中会读取NVS文件中的值,并将其应用于相关变量。
物料追踪
CCF产品包含材料(基板)的数据持久化功能,因此当设备应用程序终止时,系统将加载并通过图形用户界面可视化显示关于材料及其最后已知移动轨迹的持久化信息。
物料追踪套件提供一项特定服务,用于存储设备内物料的当前状态。启用后,每次物料移动都会被记录到磁盘上的“物料地图”文件中。
还提供了一个维护图形用户界面(GUI)屏幕,以便用户能够识别已不存在的物料,或与上次保存位置不同的物料。系统提供将物料移出设备的操作功能,以促进物料回收过程。


工作数据持久化
现在让我们讨论如何实现作业数据持久化功能。作业数据是一组值,用于告知设备如何移动和处理每个物料项。作业分为两类:控制作业和工艺作业。
- 处理作业:将物料清单与配方关联。
- 控制作业:包含工艺作业的集合。同时包含物料目的地信息。
在CCF中实现作业数据持久化:
1. 坚持什么
Cimetrix CIM300产品(随CCF安装)负责管理ProcessJobs和ControlJobs的SEMI E39对象生命周期。CCF在运行时创建与作业相关的数据,并将这些数据存储在ControlJobData和ProcessJobData类中。此外,对象属性与状态也需进行持久化处理,以便后续恢复。 CCF与CIM300均会保存已实例化的ControlJob和ProcessJob列表。
CCF 反对序列化/反序列化

CIM300 序列化/反序列化对象与 API

2. 创建持久化包
CCF包含一个材料追踪包,该包旨在为材料和位置提供持久化支持。现在我们定义一个类似的代码包,其中包含一个名为AllJobs的类,该类将存储序列化字符串以便写入磁盘。
2.a 何时将ALLJobs数据写入磁盘:
- 在 SerializedJobsChanged 事件上(若未处理则添加)
- 在启动时立即尝试加载,以强制首次写入持久化文件。
- 在任何来自CIM300的CIM40回调中
- 在任何来自CIM300的CIM94回调中
- 在SchProcessJob实例化时
下图说明了持久化数据的写入方式。
2.b 何时从磁盘读取ALLJobs数据:
- 在工具监督程序启动时,于调用StartFactoryAutomation()之后,但在启动EquipmentControlSystem()之前。
下图说明了持久化数据如何被读取并应用。

结论
数据持久化是任何应用程序的关键特性,旨在防止意外终止时重要信息丢失。通过将数据即时写入持久化文件的磁盘,应用程序能够从这些场景中恢复,并将数据还原至最后保存的值。以Cimetrix CCF软件为例,其持久化功能通过NVS(非易失性存储器)和材料追踪实现,确保变量与材料运动数据被完整存储,即使设备应用程序终止后仍可进行可视化呈现。