FA系列-ProcessJob与Control Job的理解

        在开发FA的工作中,需要用到ProcessJob和Control Job的概念,通过查阅SEMI标准,并参考SEMI E40-0703和SEMI E94-0702 ,对两者有了初步认识。

ProcessJob(简称PJ)

Process Job The process job is a dynamic object specified by the process supervisor (service-user) to effect material processing by the processing resource. The high-level job contains all the information required by the processing resource to achieve processing of the  material, once it arrives, without further intervention by the supervisor.

        从Process Job的定义来看,Process job可以理解为指定Wafer在机台上进行需要做的任务。需要强调的是一个PJ是可以包含若干个Wafer的Job的,这些Wafer既可以在同一Carrier中,又可以在不同的Carrier中,换句话说PJ是针对所有具有相同工艺流程的Wafer的job。

 Control Job (简称CJ)

control job — defines a unit of work on  equipment for one or more carriers. The work is described by a set of one or more process jobs to be applied to the material contained in the carriers.

         从CJ的定义中可以看到,它是不负责去协调Wafer和工艺模块的流转流程的,只是描述了一组包含一个或多个的PJ的任务,这样可以减少Host与设备之间的交互。为满足制造过程中的复杂需求,CJ扮演着Host与设备之间协调员的角色。但具体业务还是通过PJ来控制的。需要注意的是PJ的POOLED并不是有CJ来控制的,而是通过外部输入的,例如EAP系统,CJ是可以指定PJ运行的顺序的。

 总结:PJ是按外部(如EAP)的设定,协调Wafer在工艺模块间流转,是设备具体业务的体现。而CJ扮演的角色是协调Host与设备端的,它聚焦于总生产计划的控制,并不关注具体业务。非常重要的一点,一个PJ中关联的Wafer可以在同一个Carrier内,也可以在不同的Carrier内,同样的一个Carrier中可以包含一个或多个PJ。同样的一个CJ中关联的PJ可以在同一个Carrier内,也可以在不同的Carrier内,而且一个Carrier可以包含一个或多个CJ。下图较好的表达了两者之间的关系,但是谁能告诉那个三叉戟表示啥关系?

 

<think>好的,我现在需要处理用户关于EAP协议中使用S16F15消息下发Process Job的示例代码或实现方法的请求。首先,我应该回顾一下用户提供的引用内容,其中提到了手动跑片过程中使用了S16F15来创建多个PRJOB。用户需要具体的代码示例或实现方式,可能是在EAP主机端或测试工具软件中如何发送这个命令。 首先,我需要确认S16F15的具体定义和结构。根据SEMI E5标准,S16F15是Process Job Send(PRJOB Send)消息,用于向设备下发加工作业。这个消息通常包含Process Job ID、参数列表、配方名称等信息。接下来,用户可能需要知道如何构造这样的消息,并发送到设备。 然后,考虑示例代码的结构。通常,EAP通信使用SECS-II消息格式,基于TCP/IP协议。可能需要用到socket编程来发送消息。代码示例应包括建立连接、构造消息体、发送消息并处理响应。需要注意的是,消息的格式通常是二进制或HSMS格式,所以可能需要相应的编码和解码库。 另外,用户可能没有现成的代码库,所以需要提供一个基本的框架,比如使用Python的socket库,或者引用某些现有的EAP/SECS库,如PySECS或SECS4J。但需要确认这些库是否支持S16F15的具体实现。 还要考虑错误处理和确认机制。例如,发送S16F15后,设备会回复S16F16作为确认,需要处理可能的错误码。用户可能需要了解如何处理这些响应,确保作业正确下发。 最后,需要检查引用内容中提到的步骤,确保示例代码符合实际流程,比如在创建PRJOB之前可能需要进行其他操作,如切换到Remote模式,验证Carrier ID等,这些步骤是否需要在代码中体现。 可能的挑战包括消息格式的具体细节,比如数据项的格式(如ASCII、二进制等),以及如何正确打包这些数据。此外,不同的设备厂商可能有不同的实现细节,所以示例代码可能需要一定的通用性或标注注意事项。 总结步骤: 1. 解释S16F15的结构和用途。 2. 提供代码示例框架,包括连接建立、消息构造、发送和处理响应。 3. 提到可能的库或工具,如PySECS。 4. 强调确认响应和错误处理的重要性。 5. 根据引用内容中的流程,确保代码步骤符合实际操作顺序。</think>### EAP S16F15 Process Job 实现方法 在EAP(Equipment Automation Programming)协议中,S16F15消息用于向设备下发加工作业(Process Job),其实现需遵循SECS-II消息格式和SEMI标准。以下是关键实现步骤及示例框架: --- #### **1. 消息结构格式** S16F15消息通常包含以下字段: - **Process Job ID**:唯一标识符(ASCII字符串) - **Parameter List**:作业参数(列表结构,可包含控制参数、配方路径等) - **Recipe Name**:配方名称(ASCII字符串) 示例消息格式(SECS-II): $$ S16F15 W <L [3] <A "PRJOB_001"> // Process Job ID <L [2] // 参数列表 <A "STEP1:PARAM1=100"> <A "STEP2:PARAM2=200"> > <A "RECIPE_A"> // Recipe Name > $$ 消息发送后,设备会回复S16F16确认消息[^1]。 --- #### **2. 代码实现框架(Python示例)** 以下为基于TCP/IP和SECS-II协议的简化示例: ```python import socket # 建立TCP连接 host = '192.168.1.100' port = 5000 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((host, port)) # 构造S16F15消息体(HSMS格式简化版) message = bytearray() message.extend(b'\x10\x00\x00\x00') # 消息头(Session ID=0x10, Stream=16, Function=15) message.extend(b'PRJOB_001|STEP1:PARAM1=100;STEP2:PARAM2=200|RECIPE_A') # 简化数据项 # 发送消息 sock.send(message) # 接收S16F16响应 response = sock.recv(1024) if response.startswith(b'\x10\x00\x00\x00'): ack_code = response[4] # 确认码(0=成功,非0=错误) if ack_code == 0: print("Process Job下发成功") else: print(f"错误码: {ack_code}") else: print("响应格式异常") sock.close() ``` --- #### **3. 关键注意事项** - **依赖库**:实际开发建议使用SECS库(如PySECS、SECS4J)处理消息编码/解码,避免手动拼接二进制数据。 - **状态切换**:需先通过S2F41切换设备到Remote模式[^1]。 - **异常处理**:需处理超时、连接中断及设备返回的错误码(如S16F16中的错误详情)。 --- #### **4. 扩展优化建议** - **动态参数**:通过配置文件或数据库加载参数,避免硬编码。 - **日志跟踪**:记录消息收发过程,便于调试。 - **多线程**:在高频次下发时,使用异步通信提升效率。 ---
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值