Compare commits

...

81 Commits

Author SHA1 Message Date
HCL 4e4d4b6f73 更新Common库[6acfc37]
1.TMRobot从Unload Pick时根据Claw状态判断Wafer和Tray信息传递
2024-10-14 14:12:55 +08:00
HCL 0a5acbe2c4 1.PM开腔时关闭V75后延时2s再打开V76阀 2024-10-08 16:58:39 +08:00
HCL 57266bd409 1.修正Tray使用次数可能变为负数的问题 2024-09-27 14:04:43 +08:00
Liang Su e5588223c3 build: 版本更新至v1.1.10.33 2024-09-26 10:03:17 +08:00
Liang Su 01203dddd8 fix: 修正点击BuzzerOFF后,蜂鸣器会被频繁设置STAction的问题。
公共库更新至提交6acfc37。
2024-09-26 09:24:43 +08:00
HCL b7a61b94f2 1.修正AutoRunning过程中再CreateJob JobName不会改变的问题 2024-09-14 15:41:41 +08:00
Liang Su e84db74cfa build: 版本更新至v1.1.9.31 2024-09-11 16:27:50 +08:00
Liang Su 93b4629c1b refactor: 更新库文件至提交da81054。
修正HwAligner的Reset()方法中,命令列队被清空可能导致UI上Wafer消失的问题。(未验证)
2024-09-11 16:24:33 +08:00
Liang Su df602907ae fix: 修正JobDone事件发生时,无法静音Buzzer的问题。
更新库文件至提交02df336。
System.AckAllAlarms操作更名为System.BuzzerOff。
System.BuzzerOff操作注册到EquipmentManager中,从EventManager中移除此操作,以解决EventManager中无法获得SignalTower实例而无法调用SwitchBuzzerOff()方法的问题。
修正当Buzzer静音后,再次产生Warning事件后,蜂鸣器不响的问题;原因是EquipmentManager中,EventManager的OnAlarmEvent()事件里,Level == EventLevel.Warning时,没有取消Buzzer静音状态。
JobDone默认循环次数改为300次,约30s。
2024-09-11 14:58:24 +08:00
HCL 0a93ce2716 1.解决PSU和SCR触发状态反的问题 2024-09-06 14:38:54 +08:00
Liang Su c6185ffaa6 build: 版本更新至v1.1.8.30 2024-08-22 14:32:04 +08:00
Liang Su 75445e26f6 fix: 修正当有多个CJ运行时,必须等所有CJ结束才能停止PJ的问题。
修正AutoTransfer对象的UpdateProcessJobStatus()方法中,检测PJ是否结束的逻辑,仅检查Cass中的Wafer状态,不再检查其它Module的信息。
2024-08-22 14:25:01 +08:00
Liang Su dcc31b0e54 fix: 修正CommandLine,dll文件丢失的问题。 2024-08-22 09:59:02 +08:00
Liang Su bdb4863c3d build: 版本更新至v1.1.7.29 2024-08-12 09:39:42 +08:00
Liang Su 1ccd65d52b rafactor: 更新库文件至提交eb014c7。
修正系统配置列表太宽,看不全的问题。
2024-08-12 09:34:59 +08:00
Liang Su 5d7a3d0359 refactor: 重新同步库文件至提交43153c4。
上次同步前编译的dll有问题。
2024-08-12 00:15:43 +08:00
Liang Su 125e61e9e6 refactor: 完善工艺过程中温度变化率过快监测逻辑。
从PMModule对象中移除温度变化率监测方法。
系统配置中将AETempRasingFastIsAlarm配置项设置为显示,并将其默认值设置为false。
2024-08-12 00:12:42 +08:00
Liang Su 36746aa3dc refactor: 更新库文件至提交43153c4。
IoTC中增加工艺过程中温度变化率过快的监测逻辑。
2024-08-12 00:06:56 +08:00
Liang Su 4e18bde2c6 build: 版本更新至v1.1.6.28 2024-07-29 11:20:02 +08:00
Liang Su d45edf919a refactor(commlib): 同步库至提交53f7381。 2024-07-29 11:17:05 +08:00
Liang Su 1f1488ac69 fix(setup): 修正打包时SicRT中文件没有清理干净的问题。 2024-07-29 10:26:27 +08:00
Liang Su 46dddb83d0 build: 版本号更新至v1.1.5.27 2024-07-23 10:48:44 +08:00
Liang Su 4ea326c7ec fix: 修正多个CJ同时运行时,单个Job结束后,蜂鸣器不提示JobDone的问题。
系统配置System.ProcessDoneAlertMode增加AllJob选项,可配置为所有CJ结束再响蜂鸣器。
2024-07-23 10:48:26 +08:00
HCL fd41cbfd52 1.修正PM PostProcess关闭DO-PostProcessRunning导致Warning的问题 2024-07-04 13:31:37 +08:00
HCL e058e5e87e 1.修正PM PostProcess结束后未关闭DO-PostProcessRunning的问题 2024-07-01 09:17:48 +08:00
HCL fcccf77bdd 1.修正AutoTransfer中Buffer有对应的空盘,TMRobot将Unload出来的盘送到Load中导致流程被宕的问题 2024-06-24 14:23:04 +08:00
HCL a12a2e81d9 1.安装包名称增加百识 2024-05-07 14:29:22 +08:00
HCL d084010a80 1.修正Interlock有时不起作用的BUG
2.在PreProcess、Procss、PostProcess过程中检查对应的DO-PreProcessRunning、DO-ProcessRunning、DO-PostProcessRunning信号,
 - 若为false则PM宕机
2024-05-07 14:17:26 +08:00
Han Qiang Qiang c0e56cc247 Process;历史记录功能
1更新dll   [bb872e2],修改表头错位问题
2添加数据单位
2024-04-22 13:43:19 +08:00
Han Qiang Qiang 55152da6ca 版本号更新至 ## Version 1.1.4.2104 2024-04-22 10:49:51 +08:00
Han Qiang Qiang ea6568cc64 更新dll [1923bd8],添加Process历史数据导出功能 2024-04-22 10:47:48 +08:00
HCL b7e1f8fe57 1.增加日志 2024-04-19 15:45:06 +08:00
HCL 840b581c5d 1.修正上银Robot Pick和Place过程中可能出现动作未执行完流程已走完的问题 2024-04-19 15:44:39 +08:00
Liang Su 531e19846c 解决方案名称恢复为SicAutoGE.sln
因为直接切换分支时VS中的解决名称不会自动切换。
2024-03-28 16:15:20 +08:00
Liang Su 7a0bcc0955 Revert "版本号更新至v1.1.5.2103"
This reverts commit a2ef3c4465.
2024-03-28 16:11:31 +08:00
Liang Su 3fa1aa40e2 解决方案更名为Sic06_南京百识.sln。
安装包更名为Sic06_Setup_v。
2024-03-28 15:50:25 +08:00
Liang Su a2ef3c4465 版本号更新至v1.1.5.2103 2024-03-26 09:10:35 +08:00
Liang Su 9c8ab26d21 更新库文件c12b726,同步最新版。 2024-03-26 09:03:59 +08:00
Liang Su 74cecdc092 修正主窗体LOG栏布局问题。 2024-03-25 17:42:52 +08:00
Liang Su 77e0290104 移除系统配置中重复的项目。 2024-03-25 17:18:39 +08:00
Liang Su ba4e03a60f 更新库文件c12b726,移除ModuleStatusIndicator控件多语言相关内容。
移除SicUI中多语言相关dll引用。
2024-03-25 17:17:25 +08:00
SIC1016\caipeilun 09e9de6186 修正依赖属性RotateAngle单词拼写错误
(cherry picked from commit f5e8296e4e)
2024-03-25 17:06:29 +08:00
SIC1016\caipeilun 0fe67d539e 用BindingProxy类修正TranslateX和RotateAngle绑定失败
(cherry picked from commit 6a0f73610e)
2024-03-25 17:06:22 +08:00
Liang Su def2528f2b 修正TM等机械手控件创建Menu到时Binding错误的问题。 2024-03-25 17:06:14 +08:00
Liang Su 10183122fd 修正PJ_DONE事件等级,由Warning变更为Information。 2024-03-25 16:59:57 +08:00
Liang Su 3ff6140f82 修正Interlock在PLC同步数据之前可能意外错误触发的问题
- 更新库文件fff08d3
- 调整ToolLoader中初始化各个管理器的顺序,以确保InterlockManager运行前PLC至少同步一次数据。
- ToolLoader中增加IoProvider数据同步是否完成的检查。
- 修正和优化InterlockManager相关对象。
- 修正Module状态指示器的一些显示问题。
2024-03-25 16:59:01 +08:00
HCL 8286cfc30e 1.解决Robot 手动Pick和Place时偶尔出现多次进入Pick和Place问题 2024-03-20 14:54:38 +08:00
Liang Su 95ed6aebe6 版本更新至v1.1.4.2101 2024-03-07 23:08:21 +08:00
Liang Su d2eb98f92b 更新库文件bc1a945,修正PM、TM IO列表打开过慢的问题。 2024-03-07 23:07:52 +08:00
Liang Su 034e86ff77 Merge branch '南京百识/not-only-return-to-cass-but-also-job-done-buzz' into 南京百识/develop 2024-03-07 22:27:32 +08:00
Liang Su 2c2f36a0be 系统配置增加ProcessDoneAlertMode项,可指定Job结束后蜂鸣器提示还是Wafer回到Cassette后蜂鸣器提示。 2024-03-07 22:26:41 +08:00
Liang Su c5e398e48e 修正RT数据库脚本丢失recipe_cell_access_permission_whitelist创建语句的问题。 2024-03-07 20:17:05 +08:00
HCL d10b806d6d 1.增加版本号 2024-03-07 15:51:20 +08:00
Han Qiang Qiang 0bb75a8497 更新dll [5004d18],库中更新问题
1Recipe对比界面添加刷按钮
2昂坤测温配置节点读取错误修改
3Process单步历史记录,非数据类型配置项不获取值

4Process单步历史记录,添加配置项新增查询内容
2024-03-07 14:45:51 +08:00
HCL 2f70f6e1b5 1.Unload先Cooling再Purge 2024-03-06 15:14:31 +08:00
HCL c110aa0778 1.隔热罩升起时检测TMRobot Extend Enable信号 2024-02-02 14:07:30 +08:00
HCL 4a4148254e 1.ProcessIdle前增加闸板阀关闭检查 2024-02-02 13:28:04 +08:00
HCL 492828e470 1.Process前增加闸板阀关闭检查 2024-02-02 11:10:57 +08:00
HCL 00d6356c1b 1.do改为di 2024-02-01 14:20:00 +08:00
HCL 2c60ed107f 1.添加TM DO09、DO11、DO13、DO15与DI-31的互锁 2024-02-01 14:13:40 +08:00
HCL 8f22a8a0bf 1.Unload冷却时间较小则赋值300s 2024-02-01 13:36:32 +08:00
HCL c0e4cadc94 1.添加版本号 2024-01-25 08:49:16 +08:00
HCL c9a0b06a00 1.更新Common库 2024-01-25 08:47:15 +08:00
Han Qiang Qiang 8c523e3856 修改测温配置提示内容 2024-01-23 17:11:21 +08:00
SIC1016\caipeilun 04703f24ab 更新版本V1.1.4.18 2024-01-23 16:49:26 +08:00
SIC1016\caipeilun d1fd9d3d9b Merge branch 'develop' of http://118.31.5.210:65000/Sic-Software/Sic08 into develop 2024-01-23 16:47:27 +08:00
Han Qiang Qiang 6698acaa24 PC报警无输出内容,添加配置项 2024-01-23 15:43:08 +08:00
SIC1016\caipeilun c556b86df0 更新测试版24.1.23.1,更新库文件
修改EFEM界面Aligner功能按钮,并能显示相关数据
2024-01-23 13:33:09 +08:00
SIC1016\caipeilun 3b0cd8e2f1 更新EFEM界面,使hw寻边器功能按钮生效 2024-01-22 17:41:30 +08:00
Han Qiang Qiang 0c6a9f13ba 1控件模块是否在线禁用右击菜单和拖拽,修改模块PM1,PM1,Load,UnLoad,添加或逻辑,条件为Rt.Status == "Idle"
2EFEM界面追加此功能
2024-01-19 08:57:24 +08:00
Han Qiang Qiang e14f17139c 版本号更新至## Version 1.1.4.17 2024-01-18 09:21:21 +08:00
Liang Su 288dabb462 修正安装文件中错误包含_AccountEx.xml的问题。
(cherry picked from commit 9166ec65e8)
2024-01-18 09:06:07 +08:00
Han Qiang Qiang 2bf1c99fa3 更新dll [3998a66],测试Process历史记录查询 2024-01-16 17:07:33 +08:00
Han Qiang Qiang 7995f7b764 控件模块是否在线禁用右击菜单和拖拽,修改模块PM1,PM1,Load,UnLoad 2024-01-15 17:23:32 +08:00
Han Qiang Qiang 9597d1ca77 版本号更新至## Version 1.1.4.16 2024-01-15 11:42:06 +08:00
HCL 5ea1d7cef1 1.解决一些问题 2024-01-15 08:48:28 +08:00
HCL 5fa163ee6a 1.启用取Wafer时判断Buffer和Cassette里是否有对应的Tray 2024-01-12 17:01:53 +08:00
HCL b724377249 1.取Wafer时判断Buffer和Cassette里是否有对应的Tray 2024-01-12 10:35:25 +08:00
HCL 9b0bd30ceb 1.Cassette不存在由Warning改为Alarm 2024-01-11 14:55:22 +08:00
Han Qiang Qiang 643cd1c09b PM CoolingWater U4配置项修改 2024-01-10 14:25:21 +08:00
Liang Su 3087988223 Merge tag 'fix-ui-lag-issue' into develop
v1.1.4.15
2024-01-09 10:39:37 +08:00
71 changed files with 1066 additions and 506 deletions

1
.gitignore vendored
View File

@ -371,3 +371,4 @@ ThirdParty/MECF.Framework/*.xml
ThirdParty/MECF.Framework/_gsdata_/
Sic08.sln
.idea/
BuildTools/

View File

@ -190,7 +190,7 @@
<IoSensorWaterFlowTemp id="FlowTemp4" module="" display="MiddleFlow2(U4)" schematicId="ChamMiddleFlow2Temp" unit="℃"
ai="AI_ChamMiddleFlow2Temp"
diFlowSW="DI_ChamMiddleFlow2SW"
doAlarmHigh="DI_ChamMiddleFlow2SW"
doAlarmHigh="DO_ChamMiddleFlow2Temp"
doActiveLevel="false"
scBasePath="PM.{module}.CoolingWater"
scAlarmHigh="ChamMiddleFlow2Temp"
@ -523,12 +523,12 @@
<IoSensor id="SensorSCRLowerTempLAlarm" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="true" di="DI_SCRLowerTempLAlarm" infoText="Information37 SCR.Lower.Temp Low[DI-316]" warningText="" alarmText="" />
<IoSensor id="SensorConfinementRingServoON" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="true" di="DI_ConfinementRingServoON" infoText="Information38 ConfinementRingServoON [DI-337]" warningText="" alarmText="" />
<IoSensor id="SensorServoReady" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="true" di="DI_ServoReady" infoText="Information39 Servo Not Ready [DI-288]" warningText="" alarmText="" />
<IoSensor id="SensorPSU1Status" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="true" di="DI_PSU1Status" infoText="Information40 PSU1 Status Is Off[DI-296]" warningText="" alarmText="" />
<IoSensor id="SensorPSU2Status" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="true" di="DI_PSU2Status" infoText="Information41 PSU2 Status Is Off[DI-297]" warningText="" alarmText="" />
<IoSensor id="SensorPSU3Status" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="true" di="DI_PSU3Status" infoText="Information42 PSU3 Status Is Off[DI-298]" warningText="" alarmText="" />
<IoSensor id="SensorSCR1Status" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="true" di="DI_SCR1Status" infoText="Information43 SCR1 Status Is Off[DI-302]" warningText="" alarmText="" />
<IoSensor id="SensorSCR2Status" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="true" di="DI_SCR2Status" infoText="Information44 SCR2 Status Is Off[DI-303]" warningText="" alarmText="" />
<IoSensor id="SensorSCR3Status" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="true" di="DI_SCR3Status" infoText="Information45 SCR3 Status Is Off[DI-304]" warningText="" alarmText="" />
<IoSensor id="SensorPSU1Status" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="false" di="DI_PSU1Status" infoText="Information40 PSU1 Status Is Off[DI-296]" warningText="" alarmText="" />
<IoSensor id="SensorPSU2Status" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="false" di="DI_PSU2Status" infoText="Information41 PSU2 Status Is Off[DI-297]" warningText="" alarmText="" />
<IoSensor id="SensorPSU3Status" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="false" di="DI_PSU3Status" infoText="Information42 PSU3 Status Is Off[DI-298]" warningText="" alarmText="" />
<IoSensor id="SensorSCR1Status" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="false" di="DI_SCR1Status" infoText="Information43 SCR1 Status Is Off[DI-302]" warningText="" alarmText="" />
<IoSensor id="SensorSCR2Status" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="false" di="DI_SCR2Status" infoText="Information44 SCR2 Status Is Off[DI-303]" warningText="" alarmText="" />
<IoSensor id="SensorSCR3Status" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="false" di="DI_SCR3Status" infoText="Information45 SCR3 Status Is Off[DI-304]" warningText="" alarmText="" />
<IoSensor id="SensorPumpCabDoorClosed" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="false" di="DI_PumpCabDoorClosed" infoText="Information46 PumpCabDoor Not Closed [DI-71]" warningText="" alarmText="" />
</IoSensors>
<SicServos classType="Aitex.Core.RT.Device.Devices.SicServo" assembly="MECF.Framework.RT.EquipmentLibrary">

View File

@ -8,7 +8,7 @@
<ProcessDeviceItem Display="Inner temp" Unit="℃" Property="AETemp.Inner" />
<ProcessDeviceItem Display="Middle temp" Unit="℃" Property="AETemp.Middle" />
<ProcessDeviceItem Display="Outer temp" Unit="℃" Property="AETemp.Outer" />
<ProcessDeviceItem Display="PT1" Unit="KPa" Property="PT1.FeedBack" />
<ProcessDeviceItem Display="PT2" Unit="KPa" Property="PT2.FeedBack" />
@ -27,10 +27,15 @@
<ProcessDeviceItem Display="SCR3 Resistance" Unit="R" Property="SCR3.ResistanceFeedBack" />
<ProcessDeviceItem Display="SCR3 Voltage" Unit="V" Property="SCR3.VoltageFeedBack" />
<ProcessDeviceItem Display="TV Arms" Unit="A" Property="TV.PositionFeedBack" />
<ProcessDeviceItem Display="TV Power" Unit="KW" Property="TV.PositionSetPoint" />
<ProcessDeviceItem Display="TV Resistance" Unit="R" Property="TV.PressureFeedBack" />
<ProcessDeviceItem Display="TV Voltage" Unit="V" Property="TV.TVValueEnable" />
<ProcessDeviceItem Display="TV FB" Unit="%" Property="TV.PositionFeedback" />
<ProcessDeviceItem Display="TV Pre FB" Unit="mbar" Property="TV.PressureFeedback" />
<ProcessDeviceItem Display="PUS1" Unit="%" Property="TC1.L1RatioSetPoint" />
<ProcessDeviceItem Display="PUS2" Unit="%" Property="TC1.L2RatioSetPoint" />
<ProcessDeviceItem Display="PUS3" Unit="%" Property="TC1.L3RatioSetPoint" />
<ProcessDeviceItem Display="SCR1" Unit="%" Property="TC2.L1RatioSetPoint" />
<ProcessDeviceItem Display="SCR2" Unit="%" Property="TC2.L2RatioSetPoint" />
<ProcessDeviceItem Display="SCR3" Unit="%" Property="TC2.L3RatioSetPoint" />
<ProcessDeviceItem Display="PSU1 Output Arms" Unit="A" Property="PSU1.OutputArmsFeedBack" />
<ProcessDeviceItem Display="PSU1 Output Power" Unit="KW" Property="PSU1.OutputPowerFeedBack" />
@ -44,7 +49,7 @@
<ProcessDeviceItem Display="PSU3 Output Power" Unit="KW" Property="PSU3.OutputPowerFeedBack" />
<ProcessDeviceItem Display="PSU3 Output Voltage" Unit="V" Property="PSU3.OutputVoltageFeedBack" />
<ProcessDeviceItem Display="PSU3 Resistance" Unit="R" Property="PSU3.Resistance" />
<ProcessDeviceItem Display="MFC1" Unit="SCCM" Property="Mfc1.FeedBack" />
<ProcessDeviceItem Display="MFC2" Unit="SCCM" Property="Mfc2.FeedBack" />
<ProcessDeviceItem Display="MFC3" Unit="SCCM" Property="Mfc3.FeedBack" />
@ -54,14 +59,14 @@
<ProcessDeviceItem Display="MFC7" Unit="SCCM" Property="Mfc7.FeedBack" />
<ProcessDeviceItem Display="MFC8" Unit="SCCM" Property="Mfc8.FeedBack" />
<ProcessDeviceItem Display="MFC9" Unit="SCCM" Property="Mfc9.FeedBack" />
<ProcessDeviceItem Display="MFC10" Unit="SCCM" Property="Mfc10.FeedBack" />
<ProcessDeviceItem Display="MFC10" Unit="SCCM" Property="Mfc10.FeedBack" />
<ProcessDeviceItem Display="MFC11" Unit="SCCM" Property="Mfc11.FeedBack" />
<ProcessDeviceItem Display="MFC12" Unit="SCCM" Property="Mfc12.FeedBack" />
<ProcessDeviceItem Display="MFC13" Unit="SCCM" Property="Mfc13.FeedBack" />
<ProcessDeviceItem Display="MFC14" Unit="SCCM" Property="Mfc14.FeedBack" />
<ProcessDeviceItem Display="MFC15" Unit="SCCM" Property="Mfc15.FeedBack" />
<ProcessDeviceItem Display="MFC16" Unit="SCCM" Property="Mfc16.FeedBack" />
<ProcessDeviceItem Display="MFC19" Unit="SCCM" Property="Mfc19.FeedBack" />
<ProcessDeviceItem Display="MFC19" Unit="SCCM" Property="Mfc19.FeedBack" />
<ProcessDeviceItem Display="MFC20" Unit="SCCM" Property="Mfc20.FeedBack" />
<ProcessDeviceItem Display="MFC22" Unit="SCCM" Property="Mfc22.FeedBack" />
<ProcessDeviceItem Display="MFC23" Unit="SCCM" Property="Mfc23.FeedBack" />
@ -101,14 +106,14 @@
<ProcessDeviceItem Display="ATC-4" Unit="℃" Property="LineHeater.OutsidePanelTemp(ATC-4)" />
<ProcessDeviceItem Display="ATC-5" Unit="℃" Property="LineHeater.OutsideSHTemp(ATC-5)" />
<ProcessDeviceItem Display="ATC-6" Unit="℃" Property="LineHeater.LeakBypassTemp(ATC-6)" />
<ProcessDeviceItem Display="AccSpeed" Unit="" Property="PMServo.AccSpeedFeedback" />
<ProcessDeviceItem Display="AccSpeed" Unit="rpm/min" Property="PMServo.AccSpeedFeedback" />
<ProcessDeviceItem Display="ActualCurrent" Unit="A" Property="PMServo.ActualCurrentFeedback" />
<ProcessDeviceItem Display="ActualSpeed" Unit="rpm/min" Property="PMServo.ActualSpeedFeedback" />
<ProcessDeviceItem Display="DecSpeed" Unit="" Property="PMServo.DecSpeedFeedback" />
<ProcessDeviceItem Display="DecSpeed" Unit="rpm/min" Property="PMServo.DecSpeedFeedback" />
<ProcessDeviceItem Display="Pressure1" Unit="mbar" Property="Pressure1.FeedBack" />
<ProcessDeviceItem Display="Pressure2" Unit="mbar" Property="Pressure2.FeedBack" />
@ -118,8 +123,8 @@
<ProcessDeviceItem Display="Pressure6" Unit="mbar" Property="Pressure6.FeedBack" />
<ProcessDeviceItem Display="Pressure7" Unit="mbar" Property="Pressure7.FeedBack" />
</ProcessDeviceItems>

View File

@ -185,7 +185,7 @@
<IoSensorWaterFlowTemp id="FlowTemp4" module="" display="MiddleFlow2(U4)" schematicId="ChamMiddleFlow2Temp" unit="℃"
ai="AI_ChamMiddleFlow2Temp"
diFlowSW="DI_ChamMiddleFlow2SW"
doAlarmHigh="DI_ChamMiddleFlow2SW"
doAlarmHigh="DO_ChamMiddleFlow2Temp"
doActiveLevel="false"
scBasePath="PM.{module}.CoolingWater"
scAlarmHigh="ChamMiddleFlow2Temp"
@ -516,12 +516,12 @@
<IoSensor id="SensorSCRLowerTempLAlarm" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="true" di="DI_SCRLowerTempLAlarm" infoText="Information37 SCR.Lower.Temp Low[DI-316]" warningText="" alarmText="" />
<IoSensor id="SensorConfinementRingServoON" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="true" di="DI_ConfinementRingServoON" infoText="Information38 ConfinementRingServoON [DI-337]" warningText="" alarmText="" />
<IoSensor id="SensorServoReady" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="true" di="DI_ServoReady" infoText="Information39 Servo Not Ready [DI-288]" warningText="" alarmText="" />
<IoSensor id="SensorPSU1Status" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="true" di="DI_PSU1Status" infoText="Information40 PSU1 Status Is Off[DI-296]" warningText="" alarmText="" />
<IoSensor id="SensorPSU2Status" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="true" di="DI_PSU2Status" infoText="Information41 PSU2 Status Is Off[DI-297]" warningText="" alarmText="" />
<IoSensor id="SensorPSU3Status" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="true" di="DI_PSU3Status" infoText="Information42 PSU3 Status Is Off[DI-298]" warningText="" alarmText="" />
<IoSensor id="SensorSCR1Status" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="true" di="DI_SCR1Status" infoText="Information43 SCR1 Status Is Off[DI-302]" warningText="" alarmText="" />
<IoSensor id="SensorSCR2Status" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="true" di="DI_SCR2Status" infoText="Information44 SCR2 Status Is Off[DI-303]" warningText="" alarmText="" />
<IoSensor id="SensorSCR3Status" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="true" di="DI_SCR3Status" infoText="Information45 SCR3 Status Is Off[DI-304]" warningText="" alarmText="" />
<IoSensor id="SensorPSU1Status" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="false" di="DI_PSU1Status" infoText="Information40 PSU1 Status Is Off[DI-296]" warningText="" alarmText="" />
<IoSensor id="SensorPSU2Status" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="false" di="DI_PSU2Status" infoText="Information41 PSU2 Status Is Off[DI-297]" warningText="" alarmText="" />
<IoSensor id="SensorPSU3Status" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="false" di="DI_PSU3Status" infoText="Information42 PSU3 Status Is Off[DI-298]" warningText="" alarmText="" />
<IoSensor id="SensorSCR1Status" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="false" di="DI_SCR1Status" infoText="Information43 SCR1 Status Is Off[DI-302]" warningText="" alarmText="" />
<IoSensor id="SensorSCR2Status" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="false" di="DI_SCR2Status" infoText="Information44 SCR2 Status Is Off[DI-303]" warningText="" alarmText="" />
<IoSensor id="SensorSCR3Status" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="false" di="DI_SCR3Status" infoText="Information45 SCR3 Status Is Off[DI-304]" warningText="" alarmText="" />
<IoSensor id="SensorPumpCabDoorClosed" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="false" di="DI_PumpCabDoorClosed" infoText="Information46 PumpCabDoor Not Closed [DI-71]" warningText="" alarmText="" />
</IoSensors>
<SicServos classType="Aitex.Core.RT.Device.Devices.SicServo" assembly="MECF.Framework.RT.EquipmentLibrary">

View File

@ -8,7 +8,7 @@
<ProcessDeviceItem Display="Inner temp" Unit="℃" Property="AETemp.Inner" />
<ProcessDeviceItem Display="Middle temp" Unit="℃" Property="AETemp.Middle" />
<ProcessDeviceItem Display="Outer temp" Unit="℃" Property="AETemp.Outer" />
<ProcessDeviceItem Display="PT1" Unit="KPa" Property="PT1.FeedBack" />
<ProcessDeviceItem Display="PT2" Unit="KPa" Property="PT2.FeedBack" />
@ -27,10 +27,15 @@
<ProcessDeviceItem Display="SCR3 Resistance" Unit="R" Property="SCR3.ResistanceFeedBack" />
<ProcessDeviceItem Display="SCR3 Voltage" Unit="V" Property="SCR3.VoltageFeedBack" />
<ProcessDeviceItem Display="TV Arms" Unit="A" Property="TV.PositionFeedBack" />
<ProcessDeviceItem Display="TV Power" Unit="KW" Property="TV.PositionSetPoint" />
<ProcessDeviceItem Display="TV Resistance" Unit="R" Property="TV.PressureFeedBack" />
<ProcessDeviceItem Display="TV Voltage" Unit="V" Property="TV.TVValueEnable" />
<ProcessDeviceItem Display="TV FB" Unit="%" Property="TV.PositionFeedback" />
<ProcessDeviceItem Display="TV Pre FB" Unit="mbar" Property="TV.PressureFeedback" />
<ProcessDeviceItem Display="PUS1" Unit="%" Property="TC1.L1RatioSetPoint" />
<ProcessDeviceItem Display="PUS2" Unit="%" Property="TC1.L2RatioSetPoint" />
<ProcessDeviceItem Display="PUS3" Unit="%" Property="TC1.L3RatioSetPoint" />
<ProcessDeviceItem Display="SCR1" Unit="%" Property="TC2.L1RatioSetPoint" />
<ProcessDeviceItem Display="SCR2" Unit="%" Property="TC2.L2RatioSetPoint" />
<ProcessDeviceItem Display="SCR3" Unit="%" Property="TC2.L3RatioSetPoint" />
<ProcessDeviceItem Display="PSU1 Output Arms" Unit="A" Property="PSU1.OutputArmsFeedBack" />
<ProcessDeviceItem Display="PSU1 Output Power" Unit="KW" Property="PSU1.OutputPowerFeedBack" />
@ -44,7 +49,7 @@
<ProcessDeviceItem Display="PSU3 Output Power" Unit="KW" Property="PSU3.OutputPowerFeedBack" />
<ProcessDeviceItem Display="PSU3 Output Voltage" Unit="V" Property="PSU3.OutputVoltageFeedBack" />
<ProcessDeviceItem Display="PSU3 Resistance" Unit="R" Property="PSU3.Resistance" />
<ProcessDeviceItem Display="MFC1" Unit="SCCM" Property="Mfc1.FeedBack" />
<ProcessDeviceItem Display="MFC2" Unit="SCCM" Property="Mfc2.FeedBack" />
<ProcessDeviceItem Display="MFC3" Unit="SCCM" Property="Mfc3.FeedBack" />
@ -54,14 +59,14 @@
<ProcessDeviceItem Display="MFC7" Unit="SCCM" Property="Mfc7.FeedBack" />
<ProcessDeviceItem Display="MFC8" Unit="SCCM" Property="Mfc8.FeedBack" />
<ProcessDeviceItem Display="MFC9" Unit="SCCM" Property="Mfc9.FeedBack" />
<ProcessDeviceItem Display="MFC10" Unit="SCCM" Property="Mfc10.FeedBack" />
<ProcessDeviceItem Display="MFC10" Unit="SCCM" Property="Mfc10.FeedBack" />
<ProcessDeviceItem Display="MFC11" Unit="SCCM" Property="Mfc11.FeedBack" />
<ProcessDeviceItem Display="MFC12" Unit="SCCM" Property="Mfc12.FeedBack" />
<ProcessDeviceItem Display="MFC13" Unit="SCCM" Property="Mfc13.FeedBack" />
<ProcessDeviceItem Display="MFC14" Unit="SCCM" Property="Mfc14.FeedBack" />
<ProcessDeviceItem Display="MFC15" Unit="SCCM" Property="Mfc15.FeedBack" />
<ProcessDeviceItem Display="MFC16" Unit="SCCM" Property="Mfc16.FeedBack" />
<ProcessDeviceItem Display="MFC19" Unit="SCCM" Property="Mfc19.FeedBack" />
<ProcessDeviceItem Display="MFC19" Unit="SCCM" Property="Mfc19.FeedBack" />
<ProcessDeviceItem Display="MFC20" Unit="SCCM" Property="Mfc20.FeedBack" />
<ProcessDeviceItem Display="MFC22" Unit="SCCM" Property="Mfc22.FeedBack" />
<ProcessDeviceItem Display="MFC23" Unit="SCCM" Property="Mfc23.FeedBack" />
@ -100,11 +105,11 @@
<ProcessDeviceItem Display="ATC-4" Unit="℃" Property="LineHeater.OutsidePanelTemp(ATC-4)" />
<ProcessDeviceItem Display="ATC-5" Unit="℃" Property="LineHeater.OutsideSHTemp(ATC-5)" />
<ProcessDeviceItem Display="ATC-6" Unit="℃" Property="LineHeater.LeakBypassTemp(ATC-6)" />
<ProcessDeviceItem Display="AccSpeed" Unit="" Property="PMServo.AccSpeedFeedback" />
<ProcessDeviceItem Display="AccSpeed" Unit="rpm/min" Property="PMServo.AccSpeedFeedback" />
<ProcessDeviceItem Display="ActualCurrent" Unit="A" Property="PMServo.ActualCurrentFeedback" />
<ProcessDeviceItem Display="ActualSpeed" Unit="rpm/min" Property="PMServo.ActualSpeedFeedback" />
<ProcessDeviceItem Display="DecSpeed" Unit="" Property="PMServo.DecSpeedFeedback" />
<ProcessDeviceItem Display="DecSpeed" Unit="rpm/min" Property="PMServo.DecSpeedFeedback" />
<ProcessDeviceItem Display="Pressure1" Unit="mbar" Property="Pressure1.FeedBack" />
<ProcessDeviceItem Display="Pressure2" Unit="mbar" Property="Pressure2.FeedBack" />
@ -114,8 +119,8 @@
<ProcessDeviceItem Display="Pressure6" Unit="mbar" Property="Pressure6.FeedBack" />
<ProcessDeviceItem Display="Pressure7" Unit="mbar" Property="Pressure7.FeedBack" />
</ProcessDeviceItems>

View File

@ -78,8 +78,8 @@
<IoSensor id="UnloadStationDoorOpened" module="TM" display="" schematicId="" unit="" di="DI_UnloadStationDoorOpened" textOutTrigValue="true" infoText="Information4 UnloadStationDoor.Opened [TDI-3]" warningText="" alarmText="" />
<IoSensor id="ReactorADoorClosed" module="TM" display="" schematicId="" unit="" di="DI_ReactorADoorClosed" textOutTrigValue="true" infoText="Information5 ReactorA.Door.Closed [TDI-4]" warningText="" alarmText="" />
<IoSensor id="ReactorADoorOpened" module="TM" display="" schematicId="" unit="" di="DI_ReactorADoorOpened" textOutTrigValue="true" infoText="Information6 ReactorA.Door.Opened [TDI-5]" warningText="" alarmText="" />
<IoSensor id="ReactorBDoorClosed" module="TM" display="" schematicId="" unit="" di="DI_ReactorBDoorClosed" textOutTrigValue="true" infoText="Information7 ReactorA.Door.Closed [TDI-6]" warningText="" alarmText="" />
<IoSensor id="ReactorBDoorOpened" module="TM" display="" schematicId="" unit="" di="DI_ReactorBDoorOpened" textOutTrigValue="true" infoText="Information8 ReactorA.Door.Opened [TDI-7]" warningText="" alarmText="" />
<IoSensor id="ReactorBDoorClosed" module="TM" display="" schematicId="" unit="" di="DI_ReactorBDoorClosed" textOutTrigValue="true" infoText="Information7 ReactorB.Door.Closed [TDI-6]" warningText="" alarmText="" />
<IoSensor id="ReactorBDoorOpened" module="TM" display="" schematicId="" unit="" di="DI_ReactorBDoorOpened" textOutTrigValue="true" infoText="Information8 ReactorB.Door.Opened [TDI-7]" warningText="" alarmText="" />
<IoSensor id="BufferStationDoorClosed" module="Buffer" display="" schematicId="" unit="" di="DI_BufferStationDoorClosed" textOutTrigValue="true" infoText="Information9 BufferStationDoor.Closed [TDI-10]" warningText="" alarmText="" />
<IoSensor id="BufferStationDoorOpened" module="Buffer" display="" schematicId="" unit="" di="DI_BufferStationDoorOpened" textOutTrigValue="true" infoText="Information10 BufferStationDoor.Closed [TDI-11]" warningText="" alarmText="" />
<IoSensor id="LoadLockGateClosed" module="TM" display="" schematicId="" unit="" di="DI_LoadLockGateClosed" textOutTrigValue="true" infoText="Information11 LoadLockGate.Closed [TDI-22]" warningText="" alarmText="" />

View File

@ -243,20 +243,28 @@
<Limit di="TM.DI_TMLidClosed" value="true" tip="" tip.zh-CN="" tip.en-US="DI-12"/>
<Limit di="TM.DI_LoadLidClosed" value="true" tip="" tip.zh-CN="" tip.en-US="DI-13"/>
<Limit do="TM.DO_VacRobotExtenLoadEnable" value="false" tip="" tip.zh-CN="" tip.en-US="DO-19"/>
<Limit di="TM.DI_RobotOnBackPos" value="true" tip="" tip.zh-CN="" tip.en-US="DI-31"/>
</Action>
<Action do="TM.DO_UnloadStationDoorClose" value="true" tip="" tip.zh-CN="" tip.en-US="DO-11">
<Limit di="TM.DI_TMLidClosed" value="true" tip="" tip.zh-CN="" tip.en-US="DI-12"/>
<Limit di="TM.DI_UnloadStationLidClosed" value="true" tip="" tip.zh-CN="" tip.en-US="DI-14"/>
<Limit do="TM.DO_VacRobotExtendUnloadEnable" value="false" tip="" tip.zh-CN="" tip.en-US="DO-20"/>
<Limit di="TM.DI_RobotOnBackPos" value="true" tip="" tip.zh-CN="" tip.en-US="DI-31"/>
</Action>
<Action do="TM.DO_RectorADoorClose" value="true" tip="" tip.zh-CN="" tip.en-US="DO-13">
<Limit di="TM.DI_TMLidClosed" value="true" tip="" tip.zh-CN="" tip.en-US="DI-12"/>
<Limit do="TM.DO_VacRobotExtendPMAEnable" value="false" tip="" tip.zh-CN="" tip.en-US="DO-21"/>
<Limit di="TM.DI_RobotOnBackPos" value="true" tip="" tip.zh-CN="" tip.en-US="DI-31"/>
</Action>
<Action do="TM.DO_RectorBDoorClose" value="true" tip="" tip.zh-CN="" tip.en-US="DO-15">
<Limit di="TM.DI_TMLidClosed" value="true" tip="" tip.zh-CN="" tip.en-US="DI-12"/>
<Limit do="TM.DO_VacRobotExtendPMBEnable" value="false" tip="" tip.zh-CN="" tip.en-US="DO-22"/>
<Limit di="TM.DI_RobotOnBackPos" value="true" tip="" tip.zh-CN="" tip.en-US="DI-31"/>
</Action>
<Action do="TM.DO_BufferStationDoorClose" value="true" tip="" tip.zh-CN="" tip.en-US="DO-33">
<Limit di="TM.DI_TMLidClosed" value="true" tip="" tip.zh-CN="" tip.en-US="DI-12"/>
<Limit di="TM.DI_BufferStationLidClosed" value="true" tip="" tip.zh-CN="" tip.en-US="DI-15"/>

View File

@ -1,4 +1,5 @@
using System;
using System.Threading.Tasks;
using Aitex.Core.RT.Device;
using Aitex.Core.RT.Device.Devices;
using Aitex.Core.RT.Device.Unit;
@ -156,6 +157,8 @@ namespace SicModules.EFEMs.Routines.Base
return false;
}
Task.Delay(1000).Wait();
return true;
}, () =>
@ -320,6 +323,8 @@ namespace SicModules.EFEMs.Routines.Base
return false;
}
Task.Delay(1000).Wait();
return true;
}, () =>

View File

@ -47,7 +47,7 @@ namespace SicModules.EFEMs.Routines
}
if (!_cassBLInch.Value)
{
EV.PostWarningLog(Module, $"Can not map,{_source} sensor check no cassette");
EV.PostAlarmLog(Module, $"Can not map,{_source} sensor check no cassette");
return Result.FAIL;
}
}

View File

@ -90,7 +90,7 @@ namespace SicModules.EFEMs.Routines
}
if (!_cassBLInch.Value)
{
EV.PostWarningLog(Module, $"Can not pick,{_source} sensor check no cassette");
EV.PostAlarmLog(Module, $"Can not pick,{_source} sensor check no cassette");
return Result.FAIL;
}
}

View File

@ -128,7 +128,7 @@ namespace SicModules.EFEMs.Routines
}
if (!_cassBLInch.Value)
{
EV.PostWarningLog(Module, $"Can not place,{_source} sensor check no cassette");
EV.PostAlarmLog(Module, $"Can not place,{_source} sensor check no cassette");
return Result.FAIL;
}
}

View File

@ -69,7 +69,7 @@ namespace SicModules.EFEMs.Routines
}
if (!_cassALInch.Value)
{
EV.PostWarningLog(Module, $"Can not map,{_source} sensor check no cassette");
EV.PostAlarmLog(Module, $"Can not map,{_source} sensor check no cassette");
return Result.FAIL;
}
@ -84,7 +84,7 @@ namespace SicModules.EFEMs.Routines
}
if (!_cassARInch.Value)
{
EV.PostWarningLog(Module, $"Can not map,{_source} sensor check no cassette");
EV.PostAlarmLog(Module, $"Can not map,{_source} sensor check no cassette");
return Result.FAIL;
}

View File

@ -107,7 +107,7 @@ namespace SicModules.EFEMs.Routines
}
if (!_cassALInch.Value)
{
EV.PostWarningLog(Module, $"Can not pick,{_source} sensor check no cassette");
EV.PostAlarmLog(Module, $"Can not pick,{_source} sensor check no cassette");
return Result.FAIL;
}
if (WaferManager.Instance.GetWafer(_source, _sourceSlot).WaferStatus != WaferStatus.Normal)
@ -126,7 +126,7 @@ namespace SicModules.EFEMs.Routines
}
if (!_cassARInch.Value)
{
EV.PostWarningLog(Module, $"Can not pick,{_source} sensor check no cassette");
EV.PostAlarmLog(Module, $"Can not pick,{_source} sensor check no cassette");
return Result.FAIL;
}
if (WaferManager.Instance.GetWafer(_source, _sourceSlot).WaferStatus != WaferStatus.Normal)

View File

@ -118,7 +118,7 @@ namespace SicModules.EFEMs.Routines
{
if (!_cassALInch.Value)
{
EV.PostWarningLog(Module, $"Can not place,{_target} sensor check no cassette");
EV.PostAlarmLog(Module, $"Can not place,{_target} sensor check no cassette");
return Result.FAIL;
}
}
@ -126,7 +126,7 @@ namespace SicModules.EFEMs.Routines
{
if (!_cassARInch.Value)
{
EV.PostWarningLog(Module, $"Can not place,{_target} sensor check no cassette");
EV.PostAlarmLog(Module, $"Can not place,{_target} sensor check no cassette");
return Result.FAIL;
}
}

View File

@ -1490,89 +1490,8 @@ namespace SicModules.PMs
return false;
}
private FixSizeQueue<double> InnerTempRecordQueue = new FixSizeQueue<double>(16);
private FixSizeQueue<double> MiddleTempRecordQueue = new FixSizeQueue<double>(16);
private FixSizeQueue<double> OuterTempRecordQueue = new FixSizeQueue<double>(16);
private void MonitorAETempRasingFastAlarm()
{
var AETempInnerRasingRate = SC.GetValue<double>($"PM.{Module}.Heater.SCRTempRasingRate");
var AETempMiddleRasingRate = SC.GetValue<double>($"PM.{Module}.Heater.AETempMiddleRasingRate");
var AETempOuterRasingRate = SC.GetValue<double>($"PM.{Module}.Heater.AETempOuterRasingRate");
var AETempRasingFastIsAlarm = SC.GetValue<bool>($"PM.{Module}.Heater.AETempRasingFastIsAlarm");
if (FsmState == (int)STATE.Process)
{
//if (InnerTempRecordQueue.Count == 16)
//{
// var InnerHalfBeforeAverage = InnerTempRecordQueue.ToList().Take(8).ToList().Average();
// var InnerHalfAfterAverage = InnerTempRecordQueue.ToList().Skip(8).ToList().Average();
// if (Math.Abs(InnerHalfAfterAverage - InnerHalfBeforeAverage) > AETempInnerRasingRate)
// {
// if (AETempRasingFastIsAlarm)
// {
// EV.PostAlarmLog(Module, $"AETemp Inner rasing fast");
// }
// else
// {
// EV.PostWarningLog(Module, $"AETemp Inner rasing fast");
// }
// }
//}
if (MiddleTempRecordQueue.Count == 16)
{
var MiddleHalfBeforeAverage = MiddleTempRecordQueue.ToList().Take(8).ToList().Average();
var MiddleHalfAfterAverage = MiddleTempRecordQueue.ToList().Skip(8).ToList().Average();
if (Math.Abs(MiddleHalfAfterAverage - MiddleHalfBeforeAverage) > AETempMiddleRasingRate)
{
if (AETempRasingFastIsAlarm)
{
EV.PostAlarmLog(Module, $"AETemp Middle rasing fast");
}
else
{
EV.PostWarningLog(Module, $"AETemp Middle rasing fast");
}
}
}
if (OuterTempRecordQueue.Count == 16)
{
var OuterHalfBeforeAverage = MiddleTempRecordQueue.ToList().Take(8).ToList().Average();
var OuterHalfAfterAverage = MiddleTempRecordQueue.ToList().Skip(8).ToList().Average();
if (Math.Abs(OuterHalfAfterAverage - OuterHalfBeforeAverage) > AETempOuterRasingRate)
{
if (AETempRasingFastIsAlarm)
{
EV.PostAlarmLog(Module, $"AETemp Outer rasing fast");
}
else
{
EV.PostWarningLog(Module, $"AETemp Outer rasing fast");
}
}
}
}
InnerTempRecordQueue.Enqueue(TC1.InnerTemp);
MiddleTempRecordQueue.Enqueue(TC1.MiddleTemp);
OuterTempRecordQueue.Enqueue(TC1.OuterTemp);
//tempMonitorDT.Start(0);
}
private bool FsmMonitorTask(object[] param)
{
MonitorAETempRasingFastAlarm();
Result ret = MonitorRoutine();
if (ret == Result.FAIL)
{
@ -1580,6 +1499,36 @@ namespace SicModules.PMs
return false;
}
if (ret == Result.RUN && FsmState == (int)STATE.PreProcess)
{
if (!_pmInterLock.DoPreprocessRunning)
{
PostMsg(MSG.Abort);
EV.PostWarningLog(Module, "For abnormal PreProcess exit, please check the interlocking conditions.工艺异常退出,请检查互锁条件");
return false;
}
}
if (ret == Result.RUN && FsmState == (int)STATE.Process)
{
if (!_pmInterLock.DoProcessRunning)
{
PostMsg(MSG.Abort);
EV.PostWarningLog(Module, "For abnormal Process exit, please check the interlocking conditions.工艺异常退出,请检查互锁条件");
return false;
}
}
if (ret == Result.RUN && FsmState == (int)STATE.PostProcess)
{
if (!_pmInterLock.DoPostProcessRunning)
{
PostMsg(MSG.Abort);
EV.PostWarningLog(Module, "For abnormal PostProcess exit, please check the interlocking conditions.工艺异常退出,请检查互锁条件");
return false;
}
}
if (ret == Result.DONE && FsmState == (int)STATE.PreProcess)
{
PostMsg(MSG.Process);

View File

@ -929,7 +929,14 @@ namespace SicModules.PMs
public override bool CheckSlitValveClose()
{
return false; //ChamberDoor.IsClose;
if(Module == ModuleName.PM1.ToString())
{
return DEVICE.GetDevice<IoSensor>("TM.ReactorADoorClosed").Value;
}
else
{
return DEVICE.GetDevice<IoSensor>("TM.ReactorBDoorClosed").Value;
}
}
/// <summary>

View File

@ -88,10 +88,14 @@ namespace SicModules.PMs.RecipeExecutions
private float _scrL2Ratio = 0;
private float _scrL3Ratio = 0;
private IoInterLock _pmInterLock;
public PostProcess(ModuleName module, PMModule pm1) : base(module, pm1)
{
Module = module.ToString();
Name = "PostProcess";
_pmInterLock = DEVICE.GetDevice<IoInterLock>($"{Module}.PMInterLock");
}
protected override Result StartBody(params object[] args)
@ -123,7 +127,13 @@ namespace SicModules.PMs.RecipeExecutions
_scrL1Ratio = (float)SC.GetValue<double>($"PM.{Module}.ProcessIdle.SCRUpperRatio");
_scrL2Ratio = (float)SC.GetValue<double>($"PM.{Module}.ProcessIdle.SCRMiddleRatio");
_scrL3Ratio = (float)SC.GetValue<double>($"PM.{Module}.ProcessIdle.SCRLowerRatio");
if (!_pmInterLock.SetPMPostProcessRunning(true, out string reason))
{
EV.PostAlarmLog(Module, $"can not run PostProcess, {reason}");
return Result.FAIL;
}
Notify("Start");
return Result.RUN;
}
@ -228,6 +238,8 @@ namespace SicModules.PMs.RecipeExecutions
WaitRotationValve((int)RoutineStep.WaitRotation1, _rotationSpeed, true, _rotationSpeed / 2);
Cleanup((int)RoutineStep.Cleanup);
SetRoutinePostRuningDo();
}
private void Cleanup(int stepId)
@ -252,7 +264,12 @@ namespace SicModules.PMs.RecipeExecutions
}
}
}
private void SetRoutinePostRuningDo()
{
_pmInterLock.SetPMPostProcessRunning(false, out _);
}
private void CheckRoutineTimeOut()
{
if (_routineTimeOut > 10)

View File

@ -123,6 +123,12 @@ namespace SicModules.PMs.RecipeExecutions
{
Reset();
if(!PmDevice.CheckSlitValveClose())
{
EV.PostAlarmLog(Module, $"can not run process, {Module} SlitValve Opened");
return Result.FAIL;
}
if (!RecipeParser.Parse(_recipeName, Module, out var recipeHead, out var recipeSteps, out string reason))
{
Stop($"Load recipe {_recipeName} failed, {reason}");

View File

@ -222,7 +222,11 @@ namespace SicModules.PMs.RecipeExecutions
_dbCallback.RecipeUpdateStatus(PmDevice.RecipeRunningInfo.InnerId.ToString(), "InProcess");
WaferManager.Instance.UpdateWaferProcessStatus(ModuleHelper.Converter(Module), 0, WaferProcessStatus.InProcess);
WaferManager.Instance.GetWafer(ModuleHelper.Converter(Module), 0).TrayProcessCount--;
if(WaferManager.Instance.GetWafer(ModuleHelper.Converter(Module), 0).TrayProcessCount >0)
{
WaferManager.Instance.GetWafer(ModuleHelper.Converter(Module), 0).TrayProcessCount--;
}
_fdc.Reset();

View File

@ -69,7 +69,8 @@ namespace SicModules.PMs.Routines
TimeDelay1,
TimeDelay2,
TimeDelay3,
TimeDelay4
TimeDelay4,
TimeDelay5
}
public PMChamberMoveBodyRoutine(ModuleName module, PMModule pm1) : base(module, pm1)
@ -160,6 +161,7 @@ namespace SicModules.PMs.Routines
{
//开启V76
SetIoValueByName((int)RoutineStep.CloseTv75, "V75", false, 2);
TimeDelay((int)RoutineStep.TimeDelay5, 2);
SetIoValueByName((int)RoutineStep.StepSetTv76, "V76", true, 2);
TimeDelay((int)RoutineStep.TimeDelay0, 2);

View File

@ -124,8 +124,11 @@ namespace SicModules.PMs.Routines
ModuleName mod = ModuleHelper.Converter(module);
WaferManager.Instance.UpdateWaferProcessStatus(mod, slot, WaferProcessStatus.InProcess);
WaferManager.Instance.GetWafer(mod, slot).TrayProcessCount--;
if(WaferManager.Instance.GetWafer(mod, slot).TrayProcessCount > 0)
{
WaferManager.Instance.GetWafer(mod, slot).TrayProcessCount--;
}
// _pm.OnProcessStart(_guidProcess.ToString(), _paramRecipeName);
return true;

View File

@ -204,6 +204,12 @@ namespace SicModules.PMs.Routines
_IoThrottle = DEVICE.GetDevice<IoThrottleValve2>($"{Module}.TV");
_pmInterLock = DEVICE.GetDevice<IoInterLock>($"{Module}.PMInterLock");
if (!PmDevice.CheckSlitValveClose())
{
EV.PostAlarmLog(Module, $"can not run ProcessIdle, {Module} SlitValve Opened");
return Result.FAIL;
}
if (!_pmInterLock.SetPMProcessIdleRunning(true, out string reason))
{
EV.PostAlarmLog(Module, $"can not run ProcessIdle, {reason}");

View File

@ -59,6 +59,10 @@
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\ThirdParty\MECF.Framework\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="Sicentury.Core, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\ThirdParty\MECF.Framework\Sicentury.Core.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Runtime.Serialization" />

View File

@ -518,20 +518,25 @@ namespace SicModules.TMs.Routines
return true;
}, () =>
{
double tmPressure = tm.ChamberPressure;
double targetPressure = 0.0;
if (ModuleHelper.IsPm(_paramTarget))
if(isOpen)
{
targetPressure = DEVICE.GetDevice<IoPressure>($"{module}.PT1").FeedBack;
double tmPressure = tm.ChamberPressure;
double targetPressure = 0.0;
if (ModuleHelper.IsPm(_paramTarget))
{
targetPressure = DEVICE.GetDevice<IoPressure>($"{module}.PT1").FeedBack;
}
else
{
Stop($"{module} not define pressure condition");
return false;
}
return Math.Abs(tmPressure - targetPressure) <= _maxPressureDiffOpenSlitValve;
}
else
{
Stop($"{module} not define pressure condition");
return false;
}
return Math.Abs(tmPressure - targetPressure) <= _maxPressureDiffOpenSlitValve;
return true;
},
timeDelay * 1000);

View File

@ -19,20 +19,20 @@
<add key="ClientSettingsProvider.ServiceUri" value=""/>
</appSettings>
<log4net>
<appender name="txtFileAppender" type="log4net.Appender.RollingFileAppender">
<param name="File" value="Logs\log" />
<param name="AppendToFile" value="true" />
<param name="RollingStyle" value="Date" />
<param name="StaticLogFileName" value="false" />
<datePattern value="yyyyMMdd'.log'" />
<encoding value="utf-8" />
<maxSizeRollBackups value="120" />
<layout type="log4net.Layout.PatternLayout,log4net">
<param name="ConversionPattern" value="%m%n" />
<param name="Header" value="&#13;&#10;&lt;=====Sic Begin=====&gt;&#13;&#10;" />
<param name="Footer" value="&#13;&#10;&lt;=====Sic End=====&gt;&#13;&#10;" />
</layout>
</appender>
<appender name="txtFileAppender" type="log4net.Appender.RollingFileAppender">
<param name="File" value="Logs\log" />
<param name="AppendToFile" value="true" />
<param name="RollingStyle" value="Date" />
<param name="StaticLogFileName" value="false" />
<datePattern value="yyyyMMdd'.log'" />
<encoding value="utf-8" />
<maxSizeRollBackups value="120" />
<layout type="log4net.Layout.PatternLayout,log4net">
<param name="ConversionPattern" value="%m%n" />
<param name="Header" value="&#13;&#10;&lt;=====Sic Begin=====&gt;&#13;&#10;" />
<param name="Footer" value="&#13;&#10;&lt;=====Sic End=====&gt;&#13;&#10;" />
</layout>
</appender>
<root>
<level value="ALL"/>
<appender-ref ref="txtFileAppender"/>

View File

@ -32,6 +32,31 @@ begin
GRANT SELECT ON TABLE credentials_history TO postgres;
end if;
------------------------------------------------------------------------------------------------
--
if not exists(select * from information_schema.tables
where
table_catalog = CURRENT_CATALOG and table_schema = CURRENT_SCHEMA
and table_name = 'recipe_cell_access_permission_whitelist') then
CREATE TABLE "recipe_cell_access_permission_whitelist"
(
"uid" text NOT NULL,
"recipeName" text NOT NULL,
"stepUid" text NOT NULL,
"columnName" text NOT NULL,
"whoSet" text,
"whenSet" timestamp without time zone,
CONSTRAINT "recipe_cell_access_permission_whitelist_pkey" PRIMARY KEY ("uid")
)
WITH (
OIDS=FALSE
);
ALTER TABLE "recipe_cell_access_permission_whitelist"
OWNER TO postgres;
GRANT SELECT ON TABLE "recipe_cell_access_permission_whitelist" TO postgres;
end if;
------------------------------------------------------------------------------------------------
--

View File

@ -195,7 +195,7 @@
<EventDefinition>
<Id>50</Id>
<Description>Process Job Done, Please check wafer at {0} slot {1}</Description>
<Level>Warning</Level>
<Level>Information</Level>
<EventEnum>PJ_DONE</EventEnum>
<DetailDesc>ProcessJob结束Wafer返回到Cassette有EFEM或Wafer返回LL无EFEM</DetailDesc>
<Solution />

View File

@ -11,7 +11,7 @@
-->
<!--注意:"JobDone"为系统保留模式,请支持更改"pattern",其余属性请勿修改 -->
<STPattern name="JobDone" pattern="--.........." cycles="3" priority="-1" part="Buzzer" />
<STPattern name="JobDone" pattern="--.........." cycles="300" priority="-1" part="Buzzer" />
<STPattern name="AlarmWithoutAck" pattern="-----....." cycles="-1" priority="0"/>
<STPattern name="AlarmAcked" pattern="----------" cycles="-1" priority="1"/>

View File

@ -24,6 +24,7 @@
<config default="true" name="RecipeCascadeLoading" visible="false" description="启用瀑布流方式加载Recipe" max="" min="" paramter="" tag="" unit="" type="Bool" />
<config default="false" name="RecipeSaveToDB" description="Recipe文件保存到数据库" max="" min="" paramter="" tag="" unit="" type="Bool" visible="false" />
<config default="true" name="IsPMHostSignalTower" description="是否使用PM PLC控制三色灯如果设定为False则使用TM PLC控制三色灯" max="" min="" paramter="" tag="" unit="" type="Bool" visible="false" />
<config default="PerJob" name="ProcessDoneAlertMode" description="工艺完成后的蜂鸣器提示模式" max="" min="" paramter="PerJob;AllJob;PerWafer" tag="ReadOnlySelection" unit="" type="String" />
<configs name="Scheduler">
<config default="15" name="WaitLoadTimeOut" description="Wait Load TimeOut" max="1000" min="1" paramter="" tag="" unit="s" type="Double" visible="false" />
<config default="2" name="WaferCountBelowWhichStartNewProcessJob" description="Wafer Count Below Which Start New Process Job" max="25" min="1" paramter="" tag="" unit="" type="Integer" visible="false" />
@ -539,7 +540,6 @@
<config default="C3H8" name="ChType" description="CH Type" max="" min="" paramter="C2H4;C3H8" tag="ReadOnlySelection" unit="" type="String"/>
<config default="10" name="MfcTestingDelayedTime" description="出厂测试MFC开启后延时时间" max="10000" min="1" paramter="" tag="" unit="秒" type="Integer" visible="false" />
<config default="5" name="MfcTestingPercentage" description="合格率上限" max="10000" min="0" paramter="" tag="" unit="%" type="Double" visible="false" />
<config default="" name="OpenLidCountDownTime" visible="false" description="临时保存开腔倒计时开始时间" max="" min="" paramter="" tag="" unit="" type="String" />
<configs name="Heater">
<config default="false" name="PSUOuterAutoEnable" visible="false" description="PSU Outer是否为Auto控制" max="" min="" paramter="" tag="" unit="" type="Bool" />
<config default="10" name="TempRampRate" visible="false" description="TC温度每秒调节速率(℃/每秒)" max="100" min="0" paramter="" tag="" unit="℃" type="Double" />
@ -565,7 +565,7 @@
<config default="Warning" name="InProcessResistanceFailAlarmLevel" description="工艺过程中检测到电阻超限时产生报警的等级" max="" min="" paramter="Alarm;Warning" tag="ReadOnlySelection" unit="" type="String" />
<config default="1" name="InProcessResistanceMonitorIgnoreDuration" description="工艺启动后和结束前的指定时间内忽略电阻超限检查" max="100" min="0" paramter="" tag="" unit="s" type="Double" />
<config default="true" name="AETempRasingFastIsAlarm" description="AETemp温度上升过快报警类型为Alarm" max="" min="" paramter="" tag="" unit="" type="Bool" visible="false" />
<config default="false" name="AETempRasingFastIsAlarm" description="AETemp温度上升过快报警类型为Alarm" max="" min="" paramter="" tag="" unit="" type="Bool" />
<config default="100" name="SCRTempRasingRate" description="SCRTemp每秒的上升速率,超过此范围报警" max="2000" min="0" paramter="" tag="" unit="℃" type="Double" visible="false" />
<config default="20" name="AETempMiddleRasingRate" description="AETemp Middle每秒的上升速率,超过此范围报警" max="2000" min="0" paramter="" tag="" unit="℃" type="Double" />
<config default="20" name="AETempOuterRasingRate" description="AETemp Outer每秒的上升速率,超过此范围报警" max="2000" min="0" paramter="" tag="" unit="℃" type="Double" />
@ -887,36 +887,43 @@
<config default="5000" name="Scale" description="Scale" max="10000" min="0" paramter="" tag="" unit="mbar" type="Double" />
<config default="1500" name="DefaultSetPoint" description="DefaultSetPoint" max="3000" min="0" paramter="" tag="" unit="mbar" type="Double" />
<config default="0" name="Offset" description="PC Offset" max="1000" min="-1000" paramter="" tag="" unit="mbar" type="Double" />
<config default="false" name="EnableAlarm" description="Enable Alarm" max="" min="" paramter="" tag="" unit="" type="Bool" visible="true" />
</configs>
<configs name="PC2">
<config default="5000" name="Scale" description="Scale" max="10000" min="0" paramter="" tag="" unit="mbar" type="Double" />
<config default="1500" name="DefaultSetPoint" description="DefaultSetPoint" max="3000" min="0" paramter="" tag="" unit="mbar" type="Double" />
<config default="0" name="Offset" description="PC Offset" max="1000" min="-1000" paramter="" tag="" unit="mbar" type="Double" />
<config default="false" name="EnableAlarm" description="Enable Alarm" max="" min="" paramter="" tag="" unit="" type="Bool" visible="true" />
</configs>
<configs name="PC3">
<config default="5000" name="Scale" description="Scale" max="10000" min="0" paramter="" tag="" unit="mbar" type="Double" />
<config default="1900" name="DefaultSetPoint" description="DefaultSetPoint" max="3000" min="0" paramter="" tag="" unit="mbar" type="Double" />
<config default="0" name="Offset" description="PC Offset" max="1000" min="-1000" paramter="" tag="" unit="mbar" type="Double" />
<config default="false" name="EnableAlarm" description="Enable Alarm" max="" min="" paramter="" tag="" unit="" type="Bool" visible="true" />
</configs>
<configs name="PC4">
<config default="10000" name="Scale" description="Scale" max="10000" min="0" paramter="" tag="" unit="mbar" type="Double" />
<config default="1200" name="DefaultSetPoint" description="DefaultSetPoint" max="3000" min="0" paramter="" tag="" unit="mbar" type="Double" />
<config default="0" name="Offset" description="PC Offset" max="1000" min="-1000" paramter="" tag="" unit="mbar" type="Double" />
<config default="false" name="EnableAlarm" description="Enable Alarm" max="" min="" paramter="" tag="" unit="" type="Bool" visible="true" />
</configs>
<configs name="PC5">
<config default="10000" name="Scale" description="Scale" max="10000" min="0" paramter="" tag="" unit="mbar" type="Double" />
<config default="1260" name="DefaultSetPoint" description="DefaultSetPoint" max="3000" min="0" paramter="" tag="" unit="mbar" type="Double" />
<config default="0" name="Offset" description="PC Offset" max="1000" min="-1000" paramter="" tag="" unit="mbar" type="Double" />
<config default="false" name="EnableAlarm" description="Enable Alarm" max="" min="" paramter="" tag="" unit="" type="Bool" visible="true" />
</configs>
<configs name="PC6">
<config default="10000" name="Scale" description="Scale" max="10000" min="0" paramter="" tag="" unit="mbar" type="Double" />
<config default="1260" name="DefaultSetPoint" description="DefaultSetPoint" max="3000" min="0" paramter="" tag="" unit="mbar" type="Double" />
<config default="0" name="Offset" description="PC Offset" max="1000" min="-1000" paramter="" tag="" unit="mbar" type="Double" />
<config default="false" name="EnableAlarm" description="Enable Alarm" max="" min="" paramter="" tag="" unit="" type="Bool" visible="true" />
</configs>
<configs name="PC7">
<config default="10000" name="Scale" description="Scale" max="10000" min="0" paramter="" tag="" unit="mbar" type="Double" />
<config default="1260" name="DefaultSetPoint" description="DefaultSetPoint" max="3000" min="0" paramter="" tag="" unit="mbar" type="Double" />
<config default="0" name="Offset" description="PC Offset" max="1000" min="-1000" paramter="" tag="" unit="mbar" type="Double" />
<config default="false" name="EnableAlarm" description="Enable Alarm" max="" min="" paramter="" tag="" unit="" type="Bool" visible="true" />
</configs>
</configs>
<configs name="ConfinementRing">
@ -1077,7 +1084,6 @@
<config default="C3H8" name="ChType" description="CH Type" max="" min="" paramter="C2H4;C3H8" tag="ReadOnlySelection" unit="" type="String"/>
<config default="10" name="MfcTestingDelayedTime" description="出厂测试MFC开启后延时时间" max="10000" min="1" paramter="" tag="" unit="秒" type="Integer" visible="false" />
<config default="5" name="MfcTestingPercentage" description="合格率上限" max="10000" min="0" paramter="" tag="" unit="%" type="Double" visible="false" />
<config default="" name="OpenLidCountDownTime" visible="false" description="临时保存开腔倒计时开始时间" max="" min="" paramter="" tag="" unit="" type="String" />
<configs name="Heater">
<config default="false" name="PSUOuterAutoEnable" visible="false" description="PSU Outer是否为Auto控制" max="" min="" paramter="" tag="" unit="" type="Bool" />
<config default="10" name="TempRampRate" visible="false" description="TC温度每秒调节速率(℃/每秒)" max="100" min="0" paramter="" tag="" unit="℃" type="Double" />
@ -1103,7 +1109,7 @@
<config default="Warning" name="InProcessResistanceFailAlarmLevel" description="工艺过程中检测到电阻超限时产生报警的等级" max="" min="" paramter="Alarm;Warning" tag="ReadOnlySelection" unit="" type="String" />
<config default="1" name="InProcessResistanceMonitorIgnoreDuration" description="工艺启动后和结束前的指定时间内忽略电阻超限检查" max="100" min="0" paramter="" tag="" unit="s" type="Double" />
<config default="true" name="AETempRasingFastIsAlarm" description="AETemp温度上升过快报警类型为Alarm" max="" min="" paramter="" tag="" unit="" type="Bool" visible="false" />
<config default="false" name="AETempRasingFastIsAlarm" description="AETemp温度上升过快报警类型为Alarm" max="" min="" paramter="" tag="" unit="" type="Bool" />
<config default="100" name="SCRTempRasingRate" description="SCRTemp每秒的上升速率,超过此范围报警" max="2000" min="0" paramter="" tag="" unit="℃" type="Double" visible="false" />
<config default="20" name="AETempMiddleRasingRate" description="AETemp Middle每秒的上升速率,超过此范围报警" max="2000" min="0" paramter="" tag="" unit="℃" type="Double" />
<config default="20" name="AETempOuterRasingRate" description="AETemp Outer每秒的上升速率,超过此范围报警" max="2000" min="0" paramter="" tag="" unit="℃" type="Double" />
@ -1426,36 +1432,43 @@
<config default="5000" name="Scale" description="Scale" max="10000" min="0" paramter="" tag="" unit="mbar" type="Double" />
<config default="1500" name="DefaultSetPoint" description="DefaultSetPoint" max="3000" min="0" paramter="" tag="" unit="mbar" type="Double" />
<config default="0" name="Offset" description="PC Offset" max="1000" min="-1000" paramter="" tag="" unit="mbar" type="Double" />
<config default="false" name="EnableAlarm" description="Enable Alarm" max="" min="" paramter="" tag="" unit="" type="Bool" visible="true" />
</configs>
<configs name="PC2">
<config default="5000" name="Scale" description="Scale" max="10000" min="0" paramter="" tag="" unit="mbar" type="Double" />
<config default="1500" name="DefaultSetPoint" description="DefaultSetPoint" max="3000" min="0" paramter="" tag="" unit="mbar" type="Double" />
<config default="0" name="Offset" description="PC Offset" max="1000" min="-1000" paramter="" tag="" unit="mbar" type="Double" />
<config default="false" name="EnableAlarm" description="Enable Alarm" max="" min="" paramter="" tag="" unit="" type="Bool" visible="true" />
</configs>
<configs name="PC3">
<config default="5000" name="Scale" description="Scale" max="10000" min="0" paramter="" tag="" unit="mbar" type="Double" />
<config default="1900" name="DefaultSetPoint" description="DefaultSetPoint" max="3000" min="0" paramter="" tag="" unit="mbar" type="Double" />
<config default="0" name="Offset" description="PC Offset" max="1000" min="-1000" paramter="" tag="" unit="mbar" type="Double" />
<config default="false" name="EnableAlarm" description="Enable Alarm" max="" min="" paramter="" tag="" unit="" type="Bool" visible="true" />
</configs>
<configs name="PC4">
<config default="10000" name="Scale" description="Scale" max="10000" min="0" paramter="" tag="" unit="mbar" type="Double" />
<config default="1200" name="DefaultSetPoint" description="DefaultSetPoint" max="3000" min="0" paramter="" tag="" unit="mbar" type="Double" />
<config default="0" name="Offset" description="PC Offset" max="1000" min="-1000" paramter="" tag="" unit="mbar" type="Double" />
<config default="false" name="EnableAlarm" description="Enable Alarm" max="" min="" paramter="" tag="" unit="" type="Bool" visible="true" />
</configs>
<configs name="PC5">
<config default="10000" name="Scale" description="Scale" max="10000" min="0" paramter="" tag="" unit="mbar" type="Double" />
<config default="1260" name="DefaultSetPoint" description="DefaultSetPoint" max="3000" min="0" paramter="" tag="" unit="mbar" type="Double" />
<config default="0" name="Offset" description="PC Offset" max="1000" min="-1000" paramter="" tag="" unit="mbar" type="Double" />
<config default="false" name="EnableAlarm" description="Enable Alarm" max="" min="" paramter="" tag="" unit="" type="Bool" visible="true" />
</configs>
<configs name="PC6">
<config default="10000" name="Scale" description="Scale" max="10000" min="0" paramter="" tag="" unit="mbar" type="Double" />
<config default="1260" name="DefaultSetPoint" description="DefaultSetPoint" max="3000" min="0" paramter="" tag="" unit="mbar" type="Double" />
<config default="0" name="Offset" description="PC Offset" max="1000" min="-1000" paramter="" tag="" unit="mbar" type="Double" />
<config default="false" name="EnableAlarm" description="Enable Alarm" max="" min="" paramter="" tag="" unit="" type="Bool" visible="true" />
</configs>
<configs name="PC7">
<config default="10000" name="Scale" description="Scale" max="10000" min="0" paramter="" tag="" unit="mbar" type="Double" />
<config default="1260" name="DefaultSetPoint" description="DefaultSetPoint" max="3000" min="0" paramter="" tag="" unit="mbar" type="Double" />
<config default="0" name="Offset" description="PC Offset" max="1000" min="-1000" paramter="" tag="" unit="mbar" type="Double" />
<config default="false" name="EnableAlarm" description="Enable Alarm" max="" min="" paramter="" tag="" unit="" type="Bool" visible="true" />
</configs>
</configs>
<configs name="ConfinementRing">
@ -1666,11 +1679,11 @@
<config default="300" name="WaitPressureAboveSetPointTimeout" description="Wait Pressure AboveSetPointTimeout" max="3000" min="0" paramter="" tag="" unit="s" type="Integer" />
</configs>
<configs name="MFC">
<config default="1.5" name="MinScale" description="MFC Min Scale" max="100" min="0" paramter="" tag="" unit="%" type="Double" />
<config default="10" name="WarningTime" description="设置值和反馈值之差超限后,引发警告的延迟时间" max="300" min="0" paramter="" tag="" unit="s" type="Integer" visible="true" />
<config default="5" name="WarningRange" description="(反馈值-设置值)/设置值 * 100% 超过该百分比后,引发警告" max="100" min="0" paramter="" tag="" unit="%" type="Double" visible="true" />
<config default="10" name="AlarmTime" description="设置值和反馈值之差超限后,引发报警的延迟时间" max="300" min="0" paramter="" tag="" unit="s" type="Integer" visible="true" />
<config default="10" name="AlarmRange" description="(反馈值-设置值)/设置值 * 100% 超过该百分比后,引发报警" max="100" min="0" paramter="" tag="" unit="%" type="Double" visible="true" />
<config default="1.5" name="MinScale" description="MFC Min Scale" max="100" min="0" paramter="" tag="" unit="%" type="Double" />
<config default="10" name="WarningTime" description="设置值和反馈值之差超限后,引发警告的延迟时间" max="300" min="0" paramter="" tag="" unit="s" type="Integer" visible="true" />
<config default="5" name="WarningRange" description="(反馈值-设置值)/设置值 * 100% 超过该百分比后,引发警告" max="100" min="0" paramter="" tag="" unit="%" type="Double" visible="true" />
<config default="10" name="AlarmTime" description="设置值和反馈值之差超限后,引发报警的延迟时间" max="300" min="0" paramter="" tag="" unit="s" type="Integer" visible="true" />
<config default="10" name="AlarmRange" description="(反馈值-设置值)/设置值 * 100% 超过该百分比后,引发报警" max="100" min="0" paramter="" tag="" unit="%" type="Double" visible="true" />
<configs name="Mfc60">
<config default="30000" name="N2Scale" description="Scale" max="30000" min="0" paramter="" tag="" unit="sccm" type="Double" />
<config default="10000" name="DefaultSetPoint" description="DefaultSetPoint" max="30000" min="0" paramter="" tag="" unit="" type="Double" />
@ -1919,10 +1932,10 @@
<configs name="AETemp">
<config default="false" name="EnableDevice" description="AE启用设置后重启生效" max="" min="" paramter="" tag="" unit="" type="Bool" />
<config default="192.168.1.104:1001" name="Address" description="AE IP addressDefault IP: 192.168.1.104:1001" max="" min="" paramter="" tag="" unit="" type="String" />
<config default="true" name="Channel1" description="AE通道1用,重启生效" max="" min="" paramter="" tag="" unit="" type="Bool" />
<config default="true" name="Channel2" description="AE通道2用,重启生效" max="" min="" paramter="" tag="" unit="" type="Bool" />
<config default="true" name="Channel3" description="AE通道3用,重启生效" max="" min="" paramter="" tag="" unit="" type="Bool" />
<config default="true" name="Channel4" description="AE通道4用,重启生效" max="" min="" paramter="" tag="" unit="" type="Bool" />
<config default="true" name="Channel1" description="AE通道1用,重启生效" max="" min="" paramter="" tag="" unit="" type="Bool" />
<config default="true" name="Channel2" description="AE通道2用,重启生效" max="" min="" paramter="" tag="" unit="" type="Bool" />
<config default="true" name="Channel3" description="AE通道3用,重启生效" max="" min="" paramter="" tag="" unit="" type="Bool" />
<config default="true" name="Channel4" description="AE通道4用,重启生效" max="" min="" paramter="" tag="" unit="" type="Bool" />
</configs>
<configs name="AKunTemp">

View File

@ -90,7 +90,7 @@ namespace SicRT.Modules
DATA.Subscribe("CassAL.LocalJobName", () =>
{
var jb = _lstControlJobs.FirstOrDefault(x => x.Module == "CassAL");
var jb = _lstControlJobs.LastOrDefault(x => x.Module == "CassAL");
if (jb != null)
return jb.Name;
return "";
@ -106,7 +106,7 @@ namespace SicRT.Modules
DATA.Subscribe("CassAR.LocalJobName", () =>
{
var jb = _lstControlJobs.FirstOrDefault(x => x.Module == "CassAR");
var jb = _lstControlJobs.LastOrDefault(x => x.Module == "CassAR");
if (jb != null)
return jb.Name;
return "";
@ -1172,10 +1172,29 @@ namespace SicRT.Modules
{
if (CheckAllWaferReturned(pj, true) && CheckAllPmCleaned(pj) && CheckAllDummyWaferReturned())
{
if (_unload.IsAvailable && _buffer.IsAvailable && _tmRobot.IsAvailable && _load.IsAvailable
&& _waferRobot.IsAvailable && _unload.NoTray(0)
&& _trayRobot.IsAvailable && _tmRobot.NoTray(0)
&& _load.NoTray(0) && _waferRobot.NoWafer(0) && _trayRobot.NoTray(0))
var isPjDone = true;
// 检查当前PJ中的所有Wafer是否都回到Cass中并状态为完成工艺
foreach (var wafer in pj.SlotWafers)
{
// 未找到晶圆信息,可能晶圆已被取走,正在做工艺
var waferInfo = GetModule(GetWaferReturnedCassette(wafer.Item1)).GetWaferInfo(wafer.Item2);
if (waferInfo == null)
{
isPjDone = false;
break;
}
// wafer回到cass但晶圆工艺状态不是“完成”或“失败”表示当前晶圆可能还未做工艺
if (waferInfo.ProcessState != WaferProcessStatus.Completed
&& waferInfo.ProcessState != WaferProcessStatus.Failed)
{
isPjDone = false;
break;
}
}
if (isPjDone)
{
pj.SetState(EnumProcessJobState.ProcessingComplete);
JobDataRecorder.EndPJ(pj.InnerId.ToString(), 0, 0);
@ -1254,6 +1273,14 @@ namespace SicRT.Modules
}
JobDataRecorder.EndCJ(cj.InnerId.ToString(), aborted_cj, unprocessed_cj);
// 如果系统配置的提示条件为PerJob当CJ结束时提示。
var scJobDoneAlert = SC.SafeGetStringValue("System.ProcessDoneAlertMode", "");
if(string.IsNullOrEmpty(scJobDoneAlert))
LOG.Error("Unable to find System.ProcessDoneAlertMode in system config, JobDone Alert is ignored.");
else if (scJobDoneAlert == "PerJob")
OP.DoOperation("System.AlertJobDone", ModuleName.System, 0);
_dbCallback.LotFinished(cj);
}
}
@ -1373,7 +1400,16 @@ namespace SicRT.Modules
}
if (_lstControlJobs.Count == 0)
{
// 如果系统配置的提示条件为AllJob当CJ结束时提示。
var scJobDoneAlert = SC.SafeGetStringValue("System.ProcessDoneAlertMode", "");
if (string.IsNullOrEmpty(scJobDoneAlert))
LOG.Error("Unable to find System.ProcessDoneAlertMode in system config, JobDone Alert is ignored.");
else if (scJobDoneAlert == "AllJob")
OP.DoOperation("System.AlertJobDone", ModuleName.System, 0);
return true;
}
return false;
}
@ -1728,6 +1764,20 @@ namespace SicRT.Modules
// TM把Wafer和Tray放如UnLoad后先冷却再分离然后取Tray前Purge
if (_unload.HasWafer(0) && _unload.HasTray(0))
{
// Cooling
if (!_unload.CheckCoolingCompleted())
{
GetWaferSequenceCoolingTime(_unload.Module, 0, out int coolingTime);
if (coolingTime < 1)
{
coolingTime = 300;
}
_unload.Cooling(true, coolingTime);
return;
}
// 取Tray前Purge
if (!_unload.CheckPurgedBeforeTrayPicking())
{
@ -1743,14 +1793,6 @@ namespace SicRT.Modules
return;
}
// Cooling
if (!_unload.CheckCoolingCompleted())
{
GetWaferSequenceCoolingTime(_unload.Module, 0, out var coolingTime);
_unload.Cooling(true, coolingTime);
return;
}
// 如果没分离,先分离
if (!_unload.CheckWaferTraySeparated())
{
@ -2046,14 +2088,30 @@ namespace SicRT.Modules
&& _load.CheckWaferNeedProcess(0);
if (canPlace)
{
if (_load.CheckWaferNeedProcess(0, _pm1.Module) && _tmRobot.GetWaferInfo(0).TrayOriginSlot % 2 == 1)
if (_load.CheckWaferNeedProcess(0, _pm1.Module))
{
return;
if(_tmRobot.GetWaferInfo(0).TrayOriginSlot % 2 == 1)
{
return;
}
if(_buffer.HasTray(0) && _buffer.NoWafer(0))
{
return;
}
}
if (_load.CheckWaferNeedProcess(0, _pm2.Module) && _tmRobot.GetWaferInfo(0).TrayOriginSlot % 2 == 0)
if (_load.CheckWaferNeedProcess(0, _pm2.Module))
{
return;
if (_tmRobot.GetWaferInfo(0).TrayOriginSlot % 2 == 0)
{
return;
}
if (_buffer.HasTray(1) && _buffer.NoWafer(1))
{
return;
}
}
if (_load.IsReadyForPlace(ModuleName.TMRobot, 0))
@ -2929,6 +2987,15 @@ namespace SicRT.Modules
{
return;
}
if (!(_buffer.HasTrayAndNotExceedProcessCount(0) && _buffer.NoWafer(0)) &&
!_cassetteBL.HasTrayAndNotExceedProcessCount(0) &&
!_cassetteBL.HasTrayAndNotExceedProcessCount(2) &&
!_cassetteBL.HasTrayAndNotExceedProcessCount(4) &&
!_cassetteBL.HasTrayAndNotExceedProcessCount(6))
{
return;
}
}
if (CheckWaferNeedProcess(position.Module, position.Slot, ModuleName.PM2))
@ -2937,6 +3004,15 @@ namespace SicRT.Modules
{
return;
}
if (!(_buffer.HasTrayAndNotExceedProcessCount(1) && _buffer.NoWafer(1)) &&
!_cassetteBL.HasTrayAndNotExceedProcessCount(1) &&
!_cassetteBL.HasTrayAndNotExceedProcessCount(3) &&
!_cassetteBL.HasTrayAndNotExceedProcessCount(5) &&
!_cassetteBL.HasTrayAndNotExceedProcessCount(7))
{
return;
}
}

View File

@ -272,6 +272,9 @@ namespace SicRT.Equipments
return Result.RUN;
}
if (!_tmRobot.IsAvailable)
return Result.RUN;
if (!_source.IsReadyForPick(ModuleName.TMRobot, _moveTask.SourceSlot))
{
if (!_source.PrepareTransfer(ModuleName.TMRobot, EnumTransferType.Pick, _moveTask.SourceSlot))
@ -292,9 +295,6 @@ namespace SicRT.Equipments
_source.WaitTransfer(ModuleName.TMRobot);
}
if (!_tmRobot.IsAvailable)
return Result.RUN;
}
else
{
@ -312,6 +312,9 @@ namespace SicRT.Equipments
if (!_destination.IsAvailable)
return Result.RUN;
if (!_tmRobot.IsAvailable)
return Result.RUN;
if (_destination.NoTray(_moveTask.DestinationSlot))
{
if (!_destination.IsReadyForPlace(ModuleName.TMRobot, _moveTask.DestinationSlot))
@ -331,9 +334,6 @@ namespace SicRT.Equipments
_destination.WaitTransfer(ModuleName.TMRobot);
}
if (!_tmRobot.IsAvailable)
return Result.RUN;
}
else
{
@ -447,6 +447,11 @@ namespace SicRT.Equipments
return Result.RUN;
}
if (!_waferRobot.IsAvailable)
{
return Result.RUN;
}
if (!_source.IsReadyForPick(ModuleName.WaferRobot, _moveTask.SourceSlot))
{
if (!_source.PrepareTransfer(ModuleName.WaferRobot, EnumTransferType.Pick, _moveTask.SourceSlot))
@ -475,9 +480,6 @@ namespace SicRT.Equipments
else
_source.WaitTransfer(ModuleName.WaferRobot);
}
if (!_waferRobot.IsAvailable)
return Result.RUN;
}
else
{
@ -495,6 +497,11 @@ namespace SicRT.Equipments
if (!_destination.IsAvailable)
return Result.RUN;
if (!_waferRobot.IsAvailable)
{
return Result.RUN;
}
if (_destination.NoWafer(_moveTask.DestinationSlot))
{
if (!_destination.IsReadyForPlace(ModuleName.WaferRobot, _moveTask.DestinationSlot))
@ -522,9 +529,6 @@ namespace SicRT.Equipments
else
_destination.WaitTransfer(ModuleName.WaferRobot);
}
if (!_waferRobot.IsAvailable)
return Result.RUN;
}
else
{
@ -637,6 +641,11 @@ namespace SicRT.Equipments
return Result.RUN;
}
if (!_trayRobot.IsAvailable)
{
return Result.RUN;
}
if (!_source.IsReadyForPick(ModuleName.TrayRobot, _moveTask.SourceSlot))
{
if (!_source.PrepareTransfer(ModuleName.TrayRobot, EnumTransferType.Pick, _moveTask.SourceSlot))
@ -662,9 +671,6 @@ namespace SicRT.Equipments
_source.WaitTransfer(ModuleName.TrayRobot);
}
if (!_trayRobot.IsAvailable)
return Result.RUN;
}
else
{
@ -682,6 +688,9 @@ namespace SicRT.Equipments
if (!_destination.IsAvailable)
return Result.RUN;
if (!_trayRobot.IsAvailable)
return Result.RUN;
if (_destination.NoTray(_moveTask.DestinationSlot))
{
if (!_destination.IsReadyForPlace(ModuleName.TrayRobot, _moveTask.DestinationSlot))
@ -706,9 +715,6 @@ namespace SicRT.Equipments
_destination.WaitTransfer(ModuleName.TrayRobot);
}
if (!_trayRobot.IsAvailable)
return Result.RUN;
}
else
{

View File

@ -1,5 +1,5 @@
using System;
using System.Diagnostics;
using Aitex.Core.RT.SCCore;
using SicModules.Cassettes;
using SicModules.PMs;
using SicRT.Equipments.Systems;
@ -108,8 +108,11 @@ namespace SicRT.Modules.Schedulers
&& _lastTransferAction == TaskType.Place
&& WaferManager.Instance.CheckHasWafer(_module, _lastTransferSlot))
{
//EV.PostMessage(Module.ToString(), EventEnum.PJ_DONE, _module, (_lastTransferSlot + 1).ToString());
OP.DoOperation("System.AlertJobDone", _module, _lastTransferSlot + 1);
var scJobDoneAlert = SC.SafeGetStringValue("System.ProcessDoneAlertMode", "");
if (string.IsNullOrEmpty(scJobDoneAlert))
LOG.Error("Unable to find System.ProcessDoneAlertMode in system config, JobDone Alert is ignored.");
else if (scJobDoneAlert == "PerWafer")
OP.DoOperation("System.AlertJobDone", _module, _lastTransferSlot + 1);
}
}

View File

@ -627,6 +627,12 @@ namespace SicRT.Equipments.Systems
return true;
});
OP.Subscribe("System.BuzzerOff", (s, objects) =>
{
EV.AckAlarmEvents();
_mainSignalTower.SwitchOffBuzzer(true);
return true;
});
#region Recipe Editor Lock Password Management
@ -671,26 +677,23 @@ namespace SicRT.Equipments.Systems
private void Instance_OnAlarmEvent(EventItem obj)
{
FSM_MSG msg;
if (obj.Level == EventLevel.Warning)
msg = FSM_MSG.WARNING;
else if (obj.Level == EventLevel.Alarm)
if (obj.Level is EventLevel.Alarm or EventLevel.Warning)
{
msg = FSM_MSG.ALARM;
// 产生新的警告或报警时取消Buzzer静音
_mainSignalTower?.SwitchOffBuzzer(false);
if(obj.Source == null)
{
// 如果是Warning
if (obj.Level == EventLevel.Warning)
return;
}
// 如果设备产生报警则向设备所在的Module发送状态机信号切换到Error状态。
if (obj.Source == null)
return;
// 产生报警后立即将报警设备所在的Module强制切换到Error状态。
if (Modules.ContainsKey(ModuleHelper.Converter(obj.Source)))
{
Modules[ModuleHelper.Converter(obj.Source)]?.PostMsg(msg, obj.Id, obj.Description);
Modules[ModuleHelper.Converter(obj.Source)]?.PostMsg(FSM_MSG.ALARM, obj.Id, obj.Description);
}
// 产生新的报警时重新启用Buzzer
_mainSignalTower?.SwitchOffBuzzer(false);
}
}

View File

@ -1,6 +1,8 @@
using SicRT.Equipments.Systems;
using Aitex.Core.RT.IOCore.Interlock;
using SicRT.Equipments.Systems;
using MECF.Framework.UI.Client.TrayThickness.HistoryData;
using MECF.Framework.Common.Aitex.Core.Common.DeviceData;
using Aitex.Core.Util;
namespace SicRT.Instances
{
@ -65,21 +67,28 @@ namespace SicRT.Instances
// 若过早的使能DeviceManager被卸载的Module可能产生误报警。
Singleton<DeviceEntity>.Instance.Initialize();
// make sure the PLC data has been synced at least once to avoid erroneous warnings or alarms.
IoProviderManager.Instance.WaitFirstSync(5000);
HistoryCoatingManager.Instance.Initialize();
if (Singleton<EquipmentManager>.Instance.Modules[ModuleName.TM].IsInstalled)
IoManager.Instance.Initialize(PathManager.GetCfgDir() + "tm\\interlock.xml");
Singleton<InterlockManager>.Instance.Initialize(PathManager.GetCfgDir() + "tm\\interlock.xml", IoManager.Instance);
if (Singleton<EquipmentManager>.Instance.Modules[ModuleName.PM1].IsInstalled)
IoManager.Instance.Initialize($"{PathManager.GetCfgDir()}pm\\pm1\\interlockPM1.xml");
Singleton<InterlockManager>.Instance.Initialize($"{PathManager.GetCfgDir()}pm\\pm1\\interlockPM1.xml", IoManager.Instance);
if (Singleton<EquipmentManager>.Instance.Modules[ModuleName.PM2].IsInstalled)
IoManager.Instance.Initialize($"{PathManager.GetCfgDir()}pm\\pm2\\interlockPM2.xml");
Singleton<InterlockManager>.Instance.Initialize($"{PathManager.GetCfgDir()}pm\\pm2\\interlockPM2.xml", IoManager.Instance);
Singleton<ProcessHistoryItemsDefault>.Instance.Initialize();
//! DataCollectionManager必须在最后初始化否则在其之后注册的DATA数据均会被忽略
Singleton<DataCollectionManager>.Instance.Initialize();
Singleton<ProcessHistoryItemsDefault>.Instance.Initialize();
}

View File

@ -51,5 +51,5 @@ using System.Windows;
// 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号
// 方法是按如下所示使用“*”: :
[assembly: AssemblyVersion("1.1.4.15")]
[assembly: AssemblyInformationalVersion("自动通用版有EFEM")]
[assembly: AssemblyVersion("1.1.10.34")]
[assembly: AssemblyInformationalVersion("南京百识专用")]

View File

@ -3,81 +3,276 @@
Auto-GE 自动通用版适用有EFEM设备
----
## Version 1.1.10.34
**2024-10-08**
- Bug修复
-
- 新特性
- 1.PM开腔时关闭V75后延时2s再打开V76阀
## Version 1.1.10.33
**2024-09-26**
- Bug修复
- 修正Buzzer静音后日志文件尺寸会快速增长的问题
- 新特性
- 无
## Version 1.1.9.32
**2024-09-14**
- Bug修复
- 修正AutoRunning过程中再CreateJob JobName不会改变的问题
- 新特性
- 无
## Version 1.1.9.31
**2024-09-11**
- Bug修复
- 修正Job结束后蜂鸣器无法被禁用的问题
- 修正WaferRobot从Aligner取片时连续按ResetAligner上的Wafer信息可能丢失的问题
- 新特性
- 无
## Version 1.1.8.30
**2024-08-22**
- Bug修复
- 修正当多个CJ执行时单个PJ无法正确结束的问题
- 新特性
- 无
## Version 1.1.7.29
**2024-08-12**
- Bug修复
- 修正工艺中温度变化速率过快时,报警不准确的问题
- 修正系统配置列表太宽Set按钮被遮挡的问题
- 新特性
- 无
## Version 1.1.6.28
**2024-07-29**
- Bug修复
- 修正安装后配置文件被覆盖的问题
- 新特性
- 无
## Version 1.1.5.27
**2024-07-23**
- Bug修复
- 修正多个CJ运行时单个Job结束后无法响蜂鸣器提示的问题
- 新特性
- 无
## Version 1.1.4.26
**2024-07-04**
- Bug修复
- 1.修正PM PostProcess关闭DO-PostProcessRunning导致Warning的问题
## Version 1.1.4.25
**2024-07-01**
- Bug修复
- 1.修正PM PostProcess结束后未关闭DO-PostProcessRunning的问题
-
- 新特性
-
-
## Version 1.1.4.24
**2024-06-24**
- Bug修复
- 1.修正AutoTransfer中Buffer有对应的空盘,TMRobot将Unload出来的盘送到Load中导致流程被宕的问题
-
- 新特性
-
## Version 1.1.4.23
**2024-05-07**
- Bug修复
- 1.修正Interlock有时不起作用的BUG
-
- 新特性
- 1.在PreProcess、Procss、PostProcess过程中检查对应的DO-PreProcessRunning、DO-ProcessRunning、DO-PostProcessRunning信号
- 若为false则PM宕机
-
## Version 1.1.4.2104
**2024-04-22**
- Bug修复
-
- 新特性
- 添加Process历史数据导出功能
-
## Version 1.1.4.2103
**2024-04-19**
- Bug修复
- 1.修正上银Robot Pick和Place过程中可能出现动作未执行完流程已走完的问题
- 新特性
-
-
## Version 1.1.4.2102
**2024-03-20**
- Bug修复
- 1.解决Robot 手动Pick和Place时偶尔出现多次进入Pick和Place问题
- 新特性
-
## Version 1.1.4.2101
**2024-03-07**
- Bug修复
- 修正IO列表打开过慢的问题
- 新特性
- Unload先Cooling再Purge
- Recipe对比界面添加刷按钮
- 昂坤测温配置节点读取错误修改
- Process单步历史记录非数据类型配置项不获取值
- Process单步历史记录添加配置项新增查询内容
- Unload先Cooling再Purge
- 工艺结束蜂鸣器提示时机可配置为Job结束或Wafer结束
## Version 1.1.4.21
**2024-02-02**
- Bug修复
-
- 新特性
-1.ProcessIdle前增加闸板阀关闭检查
-2.Process前增加闸板阀关闭检查
-3.隔热罩升起时检测TMRobot Extend Enable信号
## Version 1.1.4.20
**2024-02-01**
- Bug修复
- 1.添加TM DO09、DO11、DO13、DO15与DI-31的互锁
- 新特性
-
## Version 1.1.4.19
**2024-01-25**
- Bug修复
- 1.Robot的状态提示Warning改为Info
- 新特性
-
## Version 1.1.4.18
**2024-01-23**
- Bug修复
- 修正EFEM Aligner 功能按钮不生效的问题
- 新特性
- EFEM界面Aligner 功能可以显示参数Simulator对新的Aligner指令进行响应
- PC报警无输出内容添加配置项
## Version 1.1.4.17
**2024-01-18**
- Bug修复
- 修正安装文件中错误包含_AccountEx.xml的问题
- 新特性
- 优化Process历史记录查询
- 控件模块是否在线禁用右击菜单和拖拽修改模块PM1,PM1,Load,UnLoad
## Version 1.1.4.16
**2024-01-15**
- Bug修复
- 修改PM和TM闸板阀打开和关闭时的检测逻辑
- 取Wafer时判断Buffer和Cassette里是否有对应的Tray
- Cassette不存在由Warning改为Alarm
- PM CoolingWater U4 D0-195配置项修改
- 新特性
- 无
## Version 1.1.4.15
**2024-01-09**
- Bug修复
- 修正多次Logout、Login操作后UI会变卡顿的问题
- 修正多次Logout、Login操作后UI会变卡顿的问题
- 新特性
- 无
- 无
## Version 1.1.4.14
**2024-01-05**
- Bug修复
- 修改TMRobot Pick Buffer1层条件判断的BUG
- 修改TMRobot Pick Buffer1层条件判断的BUG
- 新特性
- ReturnAll里Unload冷却时间定为300s
- ReturnAll里Unload冷却时间定为300s
## Version 1.1.4.13
**2023-12-28**
- Bug修复
- 修正工艺结束后,蜂鸣器提示无法自动关闭的问题
- 修正加载Interlock配置文件时引发集合枚举时发生变化的异常的问题
- 修正工艺结束后,蜂鸣器提示无法自动关闭的问题
- 修正加载Interlock配置文件时引发集合枚举时发生变化的异常的问题
- 新特性
- VT阀添加Reset功能
- VT阀添加Reset功能
## Version 1.1.4.12
**2023-12-28**
- Bug修复
- 无
- 无
- 新特性
- VT阀添加Reset功能
- VT阀添加Reset功能
## Version 1.1.4.11
**2023-12-22**
- Bug修复
- 蝶阀StopRame改成将计时器停止
- 蝶阀StopRame改成将计时器停止
- 新特性
-
-
## Version 1.1.4.10
**2023-12-15**
- Bug修复
- InterlockManager中Monitor扫描忽略翻转时键值对集合中不包含对象时continue当前循环
- InterlockManager中Monitor扫描忽略翻转时键值对集合中不包含对象时continue当前循环
- 新特性
- 添加ProcessHistory历史记录查询
- 重新整理测温部分
- 添加ProcessHistory历史记录查询
- 重新整理测温部分
## Version 1.1.4.9
**2023-12-11**
- Bug修复
-
-
- 新特性
- TM和仿真添加DI-45点位,TM添加DI-45对应的Seneor
- 在UnLoadSeparateRoutine中添加DI-45检测逻辑
- 在SC UnLoad中配置SeparationLog报警等级
- TM和仿真添加DI-45点位,TM添加DI-45对应的Seneor
- 在UnLoadSeparateRoutine中添加DI-45检测逻辑
- 在SC UnLoad中配置SeparationLog报警等级
## Version 1.1.4.8
**2023-12-08**
- Bug修复
- 修正删除和另存为Recipe时弹出空对话框的问题
- 修正新建Recipe时默认保存上个打开的Recipe的内容的问题
- 修正Sequence编辑器中的Recipe文件名中没有显示其所在文件夹名称的问题
- 修正删除和另存为Recipe时弹出空对话框的问题
- 修正新建Recipe时默认保存上个打开的Recipe的内容的问题
- 修正Sequence编辑器中的Recipe文件名中没有显示其所在文件夹名称的问题
- 新特性
- 无
- 无
## Version 1.1.4.7
@ -162,7 +357,7 @@ Auto-GE 自动通用版适用有EFEM设备
**2023-11-14**
- Bug修复
-
-
- 新特性
- 气柜加热带温度监控使用单通道参数设置在SC配置中PM.PM1.GasBoxTemp PM.PM2.GasBoxTemp
@ -170,48 +365,48 @@ Auto-GE 自动通用版适用有EFEM设备
**2023-11-02**
- Bug修复
-
-
- 新特性
- 气柜加热带温度监控使用单通道参数设置在SC配置中PM.PM1.GasBoxTemp PM.PM2.GasBoxTemp
## Version 1.1.32.52
**2023-10-26**
- Bug修复
- 修正当Recipe参数无法从格式模板中找到时没有详细错误提示的问题
- 根据PM1的IO报警信息配置PM2配置修改PM2水温报警
- PM offline 前加入install判断未加载的PM腔不进行offline提示
- 删除PM的DI-29点位及报警信息
- 删除AE多余检测
- 修正当Recipe参数无法从格式模板中找到时没有详细错误提示的问题
- 根据PM1的IO报警信息配置PM2配置修改PM2水温报警
- PM offline 前加入install判断未加载的PM腔不进行offline提示
- 删除PM的DI-29点位及报警信息
- 删除AE多余检测
- 新特性
- PM offline 前加入install判断未加载的PM腔不进行offline提示
- 自动设备增加inch类型参数选项
- Recipe对比功能
- PM offline 前加入install判断未加载的PM腔不进行offline提示
- 自动设备增加inch类型参数选项
- Recipe对比功能
## Version 1.1.31.51
**2023-10-20**
- Bug修复
- 修改部分data绑定不保存数据库
- 修复Interlock项: do-100 和 do-49触发前 di-9 必须为0
- 修复 EFEM SlitValueRoutine 触发时提示文本缺失名称
- 修改部分data绑定不保存数据库
- 修复Interlock项: do-100 和 do-49触发前 di-9 必须为0
- 修复 EFEM SlitValueRoutine 触发时提示文本缺失名称
- 新特性
- 新增配置对比功能每次开RT时提示配置修改项并在配置界面显示修改过的内容并可以回退配置
- 每次配置文件变更都有备份,也可从本地进行修复
- interlock表更新 不同腔体开门时需要判断两个腔体压差在范围内
- 每次配置文件变更都有备份,也可从本地进行修复
- interlock表更新 不同腔体开门时需要判断两个腔体压差在范围内
## Version 1.1.31.50
**2023-10-20**
- Bug修复
- 新特性
- 新增伊顿eaton UPS配置及监控可在DEVICE界面查看
## Version 1.1.31.49
**2023-10-19**
- Bug修复
- 新特性
- 添加昂坤双通道获取温度
- 昂坤添加测温参数可配置
@ -220,7 +415,7 @@ Auto-GE 自动通用版适用有EFEM设备
**2023-10-18**
- Bug修复
- 新特性
- 删除PM Interlock配置的DI-29
- PM K阀组增加V111控制
@ -229,13 +424,13 @@ Auto-GE 自动通用版适用有EFEM设备
**2023-09-15**
- Bug修复
- 新特性
- interlock_bypass分腔体单独控制
- interlock表更新
- 不同recipe的data曲线数据对比功能
-
-
------
## Version 1.1.30.46
**2023-09-15**
@ -339,9 +534,9 @@ Auto-GE 自动通用版适用有EFEM设备
- 修正ProcessMonitor窗口打开时Logout时没有自动关闭该窗口的问题
- 新特性
- 优化旁路互锁打开时的执行逻辑
- 禁止手动启动工艺
- 禁止PM从Offline切换至Online
- 禁止PM退出Service模式
- 禁止手动启动工艺
- 禁止PM从Offline切换至Online
- 禁止PM退出Service模式
- LL Lid打开时输出信息等级由Warning更改为Info
- PM Process结束磁流体转速将为0后的输出信息等级由Warning更改为Info
- 软件信息增加“Auto-GE”字串指示当前版本为自动通用版

View File

@ -105,6 +105,9 @@
<Reference Include="MECF.Framework.UI.Core">
<HintPath>..\ThirdParty\MECF.Framework\MECF.Framework.UI.Core.dll</HintPath>
</Reference>
<Reference Include="Sicentury.Core">
<HintPath>..\ThirdParty\MECF.Framework\Sicentury.Core.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Configuration" />
<Reference Include="System.Data" />

View File

@ -14,7 +14,7 @@
;Name and file
Name "Sic ${ver1}.${ver2}.${ver3}.${ver4}"
OutFile "Sic_自动通用有EFEM_Setup_v${ver1}.${ver2}.${ver3}.${ver4}.exe"
OutFile "Sic百识_Setup_v${ver1}.${ver2}.${ver3}.${ver4}.exe"
;Default installation folder
;InstallDir "$LOCALAPPDATA\Modern UI Test"

View File

@ -579,11 +579,18 @@ xcopy /e "$(ProjectDir)..\..\SicRT\bin\Debug\*.*" "$(ProjectDir)..\Packages\SicR
echo 清理SicRT文件夹
del "$(ProjectDir)..\Packages\SicRT\*.pdb"
del "$(ProjectDir)..\Packages\SicRT\config\_sc.*"
del "$(ProjectDir)..\Packages\SicRT\config\_scdatachangedlog.txt"
if exist "$(ProjectDir)..\Packages\SicRT\Config\Account\_Account.xml" del "$(ProjectDir)..\Packages\SicRT\Config\Account\_Account.xml"
if exist "$(ProjectDir)..\Packages\SicRT\Objects" del "$(ProjectDir)..\Packages\SicRT\Objects\*.obj"
if exist "$(ProjectDir)..\Packages\SicRT\Config\Account\_AccountEx.xml" del "$(ProjectDir)..\Packages\SicRT\Config\Account\_AccountEx.xml"
if exist "$(ProjectDir)..\Packages\SicRT\Config\ConfigBackup" rd "$(ProjectDir)..\Packages\SicRT\Config\ConfigBackup" /s /q
if exist "$(ProjectDir)..\Packages\SicRT\Objects" rd "$(ProjectDir)..\Packages\SicRT\Objects" /s /q
if exist "$(ProjectDir)..\Packages\SicRT\Maintain" rd "$(ProjectDir)..\Packages\SicRT\Maintain" /s /q
if exist "$(ProjectDir)..\Packages\SicRT\Logs" rd "$(ProjectDir)..\Packages\SicRT\Logs" /s /q
if exist "$(ProjectDir)..\Packages\SicRT\Recipes" rd "$(ProjectDir)..\Packages\SicRT\Recipes" /s /q</PreBuildEvent>
if exist "$(ProjectDir)..\Packages\SicRT\Recipes" rd "$(ProjectDir)..\Packages\SicRT\Recipes" /s /q
</PreBuildEvent>
</PropertyGroup>
<PropertyGroup>
<PostBuildEvent>echo 清理旧的打包文件。。。

View File

@ -5,11 +5,17 @@
xmlns:Common="clr-namespace:SicUI.Controls.Common"
xmlns:controls="clr-namespace:SicUI.Controls"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:diag="clr-namespace:System.Diagnostics;assembly=WindowsBase"
xmlns:local="clr-namespace:SicUI.Controls.M2C4Parts"
xmlns:extendedControls="clr-namespace:MECF.Framework.UI.Core.ExtendedControls;assembly=MECF.Framework.UI.Core"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
d:DesignHeight="38"
d:DesignWidth="416"
mc:Ignorable="d">
mc:Ignorable="d"
x:Name="mainw">
<UserControl.Resources>
<extendedControls:BindingProxy x:Key="proxy" Data="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=UserControl}}"/>
</UserControl.Resources>
<Viewbox Stretch="Uniform">
<Canvas
x:Name="root"
@ -66,10 +72,16 @@
</Common:AxisCanvas>
<Canvas.RenderTransform>
<TransformGroup>
<RotateTransform Angle="{Binding RotateAngle}" CenterY="30" />
<TranslateTransform x:Name="translate" X="{Binding TranslateX}" />
<RotateTransform Angle="{Binding Source={StaticResource proxy},Path=Data.RotateAngle,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}" CenterY="30" />
<TranslateTransform x:Name="translate" X="{Binding Source={StaticResource proxy},Path=Data.TranslateX,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}" />
</TransformGroup>
</Canvas.RenderTransform>
<!--<Canvas.RenderTransform>
<TransformGroup>
<RotateTransform Angle="{Binding Source={StaticResource proxy},Path=Data.RotateAngle}" CenterY="30" />
<TranslateTransform x:Name="translate" X="{Binding Source={StaticResource proxy},Path=Data.TranslateX}" />
</TransformGroup>
</Canvas.RenderTransform>-->
</Canvas>
</Viewbox>
</UserControl>

View File

@ -49,19 +49,25 @@ namespace SicUI.Controls.M2C4Parts
public static readonly DependencyProperty ShowDockProperty =
DependencyProperty.Register("ShowDock", typeof(bool), typeof(AtmRobotMultiLP), new PropertyMetadata(false));
// Using a DependencyProperty as the backing store for RotateAngel. This enables animation, styling, binding, etc...
public static readonly DependencyProperty RotateAngleProperty =
DependencyProperty.Register("RotateAngel", typeof(int), typeof(AtmRobotMultiLP), new PropertyMetadata(0));
public int TranslateX
public double RotateAngle
{
get { return (int)GetValue(TranslateXProperty); }
get { return (double)GetValue(RotateAngleProperty); }
set { SetValue(RotateAngleProperty, value); }
}
// Using a DependencyProperty as the backing store for RotateAngle. This enables animation, styling, binding, etc...
public static readonly DependencyProperty RotateAngleProperty =
DependencyProperty.Register("RotateAngle", typeof(double), typeof(AtmRobotMultiLP), new PropertyMetadata(0.0));
public double TranslateX
{
get { return (double)GetValue(TranslateXProperty); }
set { SetValue(TranslateXProperty, value); }
}
// Using a DependencyProperty as the backing store for TranslateX. This enables animation, styling, binding, etc...
public static readonly DependencyProperty TranslateXProperty =
DependencyProperty.Register("TranslateX", typeof(int), typeof(AtmRobotMultiLP), new PropertyMetadata(0));
DependencyProperty.Register("TranslateX", typeof(double), typeof(AtmRobotMultiLP), new PropertyMetadata(0.0));
public MECF.Framework.UI.Client.ClientBase.WaferInfo Wafer1
{
@ -336,7 +342,7 @@ namespace SicUI.Controls.M2C4Parts
m.Items.Add(new MenuItem() { Header = "Move", Command = self.MoveCommand, CommandParameter = new RobotMoveInfo() { BladeTarget = position.Key, Action = RobotAction.Moving, ArmTarget = arm } });
menus.Add(m);
}
self.Menu = menus;
//self.Menu = menus;
self.MoveTo(new RobotMoveInfo() { BladeTarget = positions.First().Key, Action = RobotAction.None });
}
@ -527,5 +533,4 @@ namespace SicUI.Controls.M2C4Parts
}
}
}

View File

@ -370,7 +370,7 @@
Canvas.Top="183"
Width="60"
Height="60"
IsEnabled="{Binding EnableWaferClick}"
IsEnabled="{Binding PM1EnableWaferClick}"
IsRotary="{Binding IsPm1WaferRotary}"
ToolTipService.ShowOnDisabled="True"
WaferData="{Binding PM1Wafer}" />
@ -387,7 +387,7 @@
Canvas.Top="184"
Width="60"
Height="60"
IsEnabled="{Binding EnableWaferClick}"
IsEnabled="{Binding PM2EnableWaferClick}"
IsRotary="{Binding IsPm2WaferRotary}"
ToolTipService.ShowOnDisabled="True"
WaferData="{Binding PM2Wafer}" />
@ -404,7 +404,7 @@
Canvas.Top="358"
Width="60"
Height="60"
IsEnabled="{Binding EnableWaferClick}"
IsEnabled="{Binding UnLoadEnableWaferClick}"
ToolTipService.ShowOnDisabled="True"
WaferData="{Binding UnLoadWafer}" />
</Canvas>
@ -415,7 +415,7 @@
Canvas.Top="476"
Width="60"
Height="60"
IsEnabled="{Binding EnableWaferClick}"
IsEnabled="{Binding LoadLockEnableWaferClick}"
ToolTipService.ShowOnDisabled="True"
WaferData="{Binding LoadLockWafer}" />
</Canvas>

View File

@ -192,7 +192,7 @@
Canvas.Top="183"
Width="60"
Height="60"
IsEnabled="{Binding EnableWaferClick}"
IsEnabled="{Binding PM1EnableWaferClick}"
IsRotary="{Binding IsPm1WaferRotary}"
WaferData="{Binding PM1Wafer}" />
</Canvas>
@ -208,7 +208,7 @@
Canvas.Top="184"
Width="60"
Height="60"
IsEnabled="{Binding EnableWaferClick}"
IsEnabled="{Binding PM2EnableWaferClick}"
IsRotary="{Binding IsPm2WaferRotary}"
WaferData="{Binding PM2Wafer}" />
</Canvas>
@ -224,7 +224,7 @@
Canvas.Top="358"
Width="66"
Height="60"
IsEnabled="{Binding EnableWaferClick}"
IsEnabled="{Binding UnLoadEnableWaferClick}"
WaferData="{Binding UnLoadWafer}" />
</Canvas>
<Canvas Visibility="{Binding IsLLInstalled, Converter={StaticResource BoolVisibilityConverter}}">
@ -239,7 +239,7 @@
Canvas.Top="477"
Width="60"
Height="60"
IsEnabled="{Binding EnableWaferClick}"
IsEnabled="{Binding LoadLockEnableWaferClick}"
WaferData="{Binding LoadLockWafer}" />
</Canvas>
</Canvas>

View File

@ -6,10 +6,14 @@
xmlns:controls="clr-namespace:SicUI.Controls"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:SicUI.Controls.M2C4Parts"
xmlns:extendedControls="clr-namespace:MECF.Framework.UI.Core.ExtendedControls;assembly=MECF.Framework.UI.Core"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
d:DesignHeight="38"
d:DesignWidth="416"
mc:Ignorable="d">
<UserControl.Resources>
<extendedControls:BindingProxy x:Key="proxy" Data="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=UserControl}}"/>
</UserControl.Resources>
<Viewbox Stretch="Uniform">
<Canvas
x:Name="root"
@ -60,8 +64,8 @@
</Common:AxisCanvas>
<Canvas.RenderTransform>
<TransformGroup>
<RotateTransform Angle="{Binding RotateAngle}" CenterY="30" />
<TranslateTransform x:Name="translate" X="{Binding TranslateX}" />
<RotateTransform Angle="{Binding Source={StaticResource proxy},Path=Data.RotateAngle}" CenterY="30" />
<TranslateTransform x:Name="translate" X="{Binding Source={StaticResource proxy},Path=Data.TranslateX}" />
</TransformGroup>
</Canvas.RenderTransform>
</Canvas>

View File

@ -49,19 +49,25 @@ namespace SicUI.Controls.M2C4Parts
public static readonly DependencyProperty ShowDockProperty =
DependencyProperty.Register("ShowDock", typeof(bool), typeof(RobotEfemTray), new PropertyMetadata(false));
// Using a DependencyProperty as the backing store for RotateAngel. This enables animation, styling, binding, etc...
public static readonly DependencyProperty RotateAngleProperty =
DependencyProperty.Register("RotateAngel", typeof(int), typeof(RobotEfemTray), new PropertyMetadata(0));
public int TranslateX
public double RotateAngle
{
get { return (int)GetValue(TranslateXProperty); }
get { return (double)GetValue(RotateAngleProperty); }
set { SetValue(RotateAngleProperty, value); }
}
// Using a DependencyProperty as the backing store for RotateAngle. This enables animation, styling, binding, etc...
public static readonly DependencyProperty RotateAngleProperty =
DependencyProperty.Register("RotateAngle", typeof(double), typeof(RobotEfemTray), new PropertyMetadata(0.0));
public double TranslateX
{
get { return (double)GetValue(TranslateXProperty); }
set { SetValue(TranslateXProperty, value); }
}
// Using a DependencyProperty as the backing store for TranslateX. This enables animation, styling, binding, etc...
public static readonly DependencyProperty TranslateXProperty =
DependencyProperty.Register("TranslateX", typeof(int), typeof(RobotEfemTray), new PropertyMetadata(0));
DependencyProperty.Register("TranslateX", typeof(double), typeof(RobotEfemTray), new PropertyMetadata(0.0));
public MECF.Framework.UI.Client.ClientBase.WaferInfo Wafer1
{
@ -335,7 +341,7 @@ namespace SicUI.Controls.M2C4Parts
m.Items.Add(new MenuItem() { Header = "Move", Command = self.MoveCommand, CommandParameter = new RobotMoveInfo() { BladeTarget = position.Key, Action = RobotAction.Moving, ArmTarget = arm } });
menus.Add(m);
}
self.Menu = menus;
// self.Menu = menus;
self.MoveTo(new RobotMoveInfo() { BladeTarget = positions.First().Key, Action = RobotAction.None });
}

View File

@ -6,10 +6,14 @@
xmlns:controls="clr-namespace:SicUI.Controls"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:SicUI.Controls.M2C4Parts"
xmlns:extendedControls="clr-namespace:MECF.Framework.UI.Core.ExtendedControls;assembly=MECF.Framework.UI.Core"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
d:DesignHeight="38"
d:DesignWidth="416"
mc:Ignorable="d">
<UserControl.Resources>
<extendedControls:BindingProxy x:Key="proxy" Data="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=UserControl}}"/>
</UserControl.Resources>
<Viewbox Stretch="Uniform">
<Canvas
x:Name="root"
@ -61,8 +65,8 @@
</Common:AxisCanvas>
<Canvas.RenderTransform>
<TransformGroup>
<RotateTransform Angle="{Binding RotateAngle}" CenterY="30" />
<TranslateTransform x:Name="translate" X="{Binding TranslateX}" />
<RotateTransform Angle="{Binding Source={StaticResource proxy},Path=Data.RotateAngle}" CenterY="30" />
<TranslateTransform x:Name="translate" X="{Binding Source={StaticResource proxy},Path=Data.TranslateX}" />
</TransformGroup>
</Canvas.RenderTransform>
</Canvas>

View File

@ -48,20 +48,25 @@ namespace SicUI.Controls.M2C4Parts
// Using a DependencyProperty as the backing store for ShowDock. This enables animation, styling, binding, etc...
public static readonly DependencyProperty ShowDockProperty =
DependencyProperty.Register("ShowDock", typeof(bool), typeof(RobotEfemWafer), new PropertyMetadata(false));
// Using a DependencyProperty as the backing store for RotateAngel. This enables animation, styling, binding, etc...
public static readonly DependencyProperty RotateAngleProperty =
DependencyProperty.Register("RotateAngel", typeof(int), typeof(RobotEfemWafer), new PropertyMetadata(0));
public int TranslateX
public double RotateAngle
{
get { return (int)GetValue(TranslateXProperty); }
get { return (double)GetValue(RotateAngleProperty); }
set { SetValue(RotateAngleProperty, value); }
}
// Using a DependencyProperty as the backing store for RotateAngle. This enables animation, styling, binding, etc...
public static readonly DependencyProperty RotateAngleProperty =
DependencyProperty.Register("RotateAngle", typeof(double), typeof(RobotEfemWafer), new PropertyMetadata(0.0));
public double TranslateX
{
get { return (double)GetValue(TranslateXProperty); }
set { SetValue(TranslateXProperty, value); }
}
// Using a DependencyProperty as the backing store for TranslateX. This enables animation, styling, binding, etc...
public static readonly DependencyProperty TranslateXProperty =
DependencyProperty.Register("TranslateX", typeof(int), typeof(RobotEfemWafer), new PropertyMetadata(0));
DependencyProperty.Register("TranslateX", typeof(double), typeof(RobotEfemWafer), new PropertyMetadata(0.0));
public MECF.Framework.UI.Client.ClientBase.WaferInfo Wafer1
{
@ -429,7 +434,7 @@ namespace SicUI.Controls.M2C4Parts
m.Items.Add(new MenuItem() { Header = "Move", Command = self.MoveCommand, CommandParameter = new RobotMoveInfo() { BladeTarget = position.Key, Action = RobotAction.Moving, ArmTarget = arm } });
menus.Add(m);
}
self.Menu = menus;
// self.Menu = menus;
self.MoveTo(new RobotMoveInfo() { BladeTarget = positions.First().Key, Action = RobotAction.None });
}

View File

@ -449,6 +449,11 @@
<ColumnDefinition Width="1*" />
<ColumnDefinition Width="1*" />
</Grid.ColumnDefinitions>
<Grid.Resources>
<Style TargetType="controls:ModuleStatusIndicator">
<Setter Property="Margin" Value="0,2,4,2"/>
</Style>
</Grid.Resources>
<controls:ModuleStatusIndicator
Grid.Row="0"
Grid.Column="0"
@ -588,11 +593,13 @@
VerticalContentAlignment="Center"
BorderBrush="Gray"
Content="Log"
Margin="0 1"
Style="{DynamicResource TopLable_LeftBottom}" />
<Grid
Grid.Row="2"
Grid.Column="1"
Grid.ColumnSpan="13">
Grid.ColumnSpan="6"
Margin="0 2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="90" />

View File

@ -39,6 +39,7 @@ using MECF.Framework.UI.Client.Core;
using MECF.Framework.UI.Client.ClientBase.Dialog;
using MECF.Framework.Common.Account.Permissions;
using MECF.Framework.Common.MECF.Framework.Common.SCCore;
using System.Text.RegularExpressions;
namespace SicUI.Client
{
@ -524,7 +525,7 @@ namespace SicUI.Client
public void BuzzerOff()
{
InvokeClient.Instance.Service.DoOperation($"System.AckAllAlarms");
InvokeClient.Instance.Service.DoOperation($"System.BuzzerOff");
}
#region Login/Logout Operations

View File

@ -1842,51 +1842,46 @@
</Grid>
</StackPanel>
<StackPanel
Grid.Row="1"
Grid.Column="2"
Grid.ColumnSpan="1"
Margin="0,-30,0,0"
HorizontalAlignment="Left"
Orientation="Horizontal">
<Grid Width="420" Margin="0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="80" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="100" />
<ColumnDefinition Width="100" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="24" />
<RowDefinition Height="32" />
<RowDefinition Height="32" />
<RowDefinition Height="32" />
<RowDefinition Height="32" />
</Grid.RowDefinitions>
<!-- Row 1 -->
<Label
<Grid Width="400" Margin="0,0" Grid.Row="1" Grid.Column="2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="80" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="100" />
<ColumnDefinition Width="100" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="24" />
<RowDefinition Height="32" />
<RowDefinition Height="32" />
<RowDefinition Height="32" />
<RowDefinition Height="32" />
<RowDefinition Height="32" />
<RowDefinition Height="32" />
</Grid.RowDefinitions>
<!-- Row 1 -->
<Label
Grid.Row="0"
Grid.ColumnSpan="4"
HorizontalContentAlignment="Center"
VerticalContentAlignment="Center"
Content="Aligner"
Style="{DynamicResource Table_TitleStyle}" />
<Border
<Border
Grid.Row="1"
Grid.RowSpan="2"
Padding="5,1"
Background="{DynamicResource Table_BG_Title}"
BorderBrush="{DynamicResource Table_BD}"
BorderThickness="1,0,0,1">
<TextBlock
<TextBlock
VerticalAlignment="Center"
FontFamily="Arial"
FontSize="12"
Foreground="{DynamicResource FG_Black}"
Text="Status"
TextWrapping="Wrap" />
</Border>
<Border
</Border>
<Border
Grid.Row="1"
Grid.RowSpan="2"
Grid.Column="1"
@ -1894,7 +1889,7 @@
Background="{DynamicResource Table_BG_Content}"
BorderBrush="{DynamicResource Table_BD}"
BorderThickness="1,0,0,1">
<TextBlock
<TextBlock
HorizontalAlignment="Center"
VerticalAlignment="Center"
FontFamily="Arial"
@ -1902,88 +1897,88 @@
Foreground="{DynamicResource FG_Black}"
Text="{Binding AlignerStatus}"
TextWrapping="Wrap" />
</Border>
<Border
</Border>
<Border
Grid.Row="1"
Grid.Column="2"
Padding="0,1,0,1"
Background="{DynamicResource Table_BG_Content}"
BorderBrush="{DynamicResource Table_BD}"
BorderThickness="1,0,1,1">
<StackPanel Orientation="Horizontal">
<Button
<StackPanel Orientation="Horizontal">
<Button
Width="80"
Height="25"
Margin="10,0"
Content="Home"
IsEnabled="{Binding IsEnableAligner}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="AlignerHome" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
</StackPanel>
</Border>
<Border
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="AlignerHome" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
</StackPanel>
</Border>
<Border
Grid.Row="1"
Grid.Column="3"
Padding="0,1,0,1"
Background="{DynamicResource Table_BG_Content}"
BorderBrush="{DynamicResource Table_BD}"
BorderThickness="0,0,1,1">
<StackPanel Orientation="Horizontal">
<Button
<StackPanel Orientation="Horizontal">
<Button
Width="80"
Height="25"
Margin="10,0"
Content="Abort"
ToolTip="Abort the motions in queue.">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="Abort">
<cal:Parameter Value="Aligner" />
</cal:ActionMessage>
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
</StackPanel>
</Border>
<!-- Row 2 -->
<Border
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="Abort">
<cal:Parameter Value="Aligner" />
</cal:ActionMessage>
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
</StackPanel>
</Border>
<!-- Row 2 -->
<Border
Grid.Row="2"
Grid.Column="2"
Padding="0,1,0,1"
Background="{DynamicResource Table_BG_Content}"
BorderBrush="{DynamicResource Table_BD}"
BorderThickness="1,0,1,1">
<StackPanel Orientation="Horizontal">
<Button
<StackPanel Orientation="Horizontal">
<Button
Width="80"
Height="25"
Margin="10,0"
Content="Align"
IsEnabled="{Binding IsEnableAligner}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="AlignerAlignerRoutine" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
</StackPanel>
</Border>
<Border
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="AlignerAlignerRoutine" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
</StackPanel>
</Border>
<Border
Grid.Row="2"
Grid.Column="3"
Padding="0,1,0,1"
Background="{DynamicResource Table_BG_Content}"
BorderBrush="{DynamicResource Table_BD}"
BorderThickness="0,0,1,1">
<StackPanel Orientation="Horizontal" />
</Border>
<StackPanel Orientation="Horizontal" />
</Border>
<!-- Row 3 -->
<Border
<!-- Row 3 -->
<Border
Grid.Row="3"
Grid.Column="0"
Grid.ColumnSpan="4"
@ -1991,111 +1986,217 @@
Background="{DynamicResource Table_BG_Content}"
BorderBrush="{DynamicResource Table_BD}"
BorderThickness="1,0,1,1">
<StackPanel Orientation="Horizontal">
<Button
<StackPanel Orientation="Horizontal">
<Button
Width="80"
Height="25"
Margin="10,0"
Content="开真空"
IsEnabled="{Binding IsEnableAligner}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="Aligner_CVN" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
<Button
Width="80"
Height="25"
Margin="10,0"
Content="寻边"
IsEnabled="{Binding IsEnableAligner}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="Aligner_BAL" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
<Button
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="Aligner_CVN" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
<Button
Width="80"
Height="25"
Margin="10,0"
Content="关真空"
IsEnabled="{Binding IsEnableAligner}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="Aligner_CVF" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
<Button
Width="80"
Height="25"
Margin="10,0"
Content="读取真空"
IsEnabled="{Binding IsEnableAligner}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="Aligner_CVD" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
</StackPanel>
</Border>
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="Aligner_CVF" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
<Button
Width="80"
Height="25"
Margin="10,0"
Content="量测中心"
IsEnabled="{Binding IsEnableAligner}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="Aligner_MTM" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
<Button
Width="80"
Height="25"
Margin="10,0"
Content="寻边"
IsEnabled="{Binding IsEnableAligner}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="Aligner_BAL" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
</StackPanel>
</Border>
<!-- Row 4 -->
<Border
<!-- Row 4 -->
<Border
Grid.Row="4"
Grid.Column="0"
Padding="5,1"
Background="{DynamicResource Table_BG_Title}"
BorderBrush="{DynamicResource Table_BD}"
BorderThickness="1,0,0,1">
<TextBlock
VerticalAlignment="Center"
FontFamily="Arial"
FontSize="12"
Foreground="{DynamicResource FG_Black}"
Text="Vacuum"
TextWrapping="Wrap" />
</Border>
<Border
Grid.Row="4"
Grid.Column="1"
Padding="5,1"
Background="{DynamicResource Table_BG_Content}"
BorderBrush="{DynamicResource Table_BD}"
BorderThickness="1,0,0,1">
<TextBlock
HorizontalAlignment="Center"
VerticalAlignment="Center"
FontFamily="Arial"
FontSize="12"
Foreground="{DynamicResource FG_Black}"
Text="{Binding AlignerVacuum}"
TextWrapping="Wrap" />
</Border>
<Border
Grid.Row="4"
Grid.Column="0"
Grid.ColumnSpan="4"
Grid.Column="2"
Grid.ColumnSpan="2"
Padding="0,1,0,1"
Background="{DynamicResource Table_BG_Content}"
BorderBrush="{DynamicResource Table_BD}"
BorderThickness="1,0,1,1">
<StackPanel Orientation="Horizontal">
<Button
Width="80"
Height="25"
Margin="10,0"
Content="量测中心"
IsEnabled="{Binding IsEnableAligner}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="Aligner_MTM" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
<StackPanel Orientation="Horizontal">
<Button
Width="80"
Height="25"
Margin="10,0"
Content="读取真空"
IsEnabled="{Binding IsEnableAligner}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="Aligner_CVD" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
</StackPanel>
</Border>
<!-- Row 5 -->
<Border
Grid.Row="5"
Grid.Column="0"
Padding="5,1"
Background="{DynamicResource Table_BG_Title}"
BorderBrush="{DynamicResource Table_BD}"
BorderThickness="1,0,0,1">
<TextBlock
VerticalAlignment="Center"
FontFamily="Arial"
FontSize="12"
Foreground="{DynamicResource FG_Black}"
Text="Pre-Error"
TextWrapping="Wrap" />
</Border>
<Border
Grid.Row="5"
Grid.Column="1"
Padding="5,1"
Background="{DynamicResource Table_BG_Content}"
BorderBrush="{DynamicResource Table_BD}"
BorderThickness="1,0,0,1">
<TextBlock
HorizontalAlignment="Center"
VerticalAlignment="Center"
FontFamily="Arial"
FontSize="12"
Foreground="{DynamicResource FG_Black}"
Text="{Binding AlignerPError}"
TextWrapping="Wrap" />
</Border>
<Border
Grid.Row="5"
Grid.Column="2"
Grid.ColumnSpan="2"
Padding="0,1,0,1"
Background="{DynamicResource Table_BG_Content}"
BorderBrush="{DynamicResource Table_BD}"
BorderThickness="1,0,1,1">
<StackPanel Orientation="Horizontal">
<Button
Width="80"
Height="25"
Margin="10,0"
Content="错误信息"
IsEnabled="{Binding IsEnableAligner}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="Aligner_PER" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
<Button
Width="80"
Height="25"
Margin="10,0"
Content="错误信息"
IsEnabled="{Binding IsEnableAligner}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="Aligner_PER" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
<Button
Width="80"
Height="25"
Margin="10,0"
Content="清除报警"
IsEnabled="{Binding IsEnableAligner}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="Aligner_ERS" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
</StackPanel>
</Border>
</Grid>
</StackPanel>
<Button
Width="80"
Height="25"
Margin="10,0"
Content="清除报警"
IsEnabled="{Binding IsEnableAligner}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="Aligner_ERS" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
</StackPanel>
</Border>
<!-- Row 6 -->
<Border
Grid.Row="6"
Grid.Column="0"
Padding="5,1"
Background="{DynamicResource Table_BG_Title}"
BorderBrush="{DynamicResource Table_BD}"
BorderThickness="1,0,0,1">
<TextBlock
VerticalAlignment="Center"
FontFamily="Arial"
FontSize="12"
Foreground="{DynamicResource FG_Black}"
Text="Response"
TextWrapping="Wrap" />
</Border>
<Border
Grid.Row="6"
Grid.ColumnSpan="3"
Grid.Column="1"
Padding="5,1"
Background="{DynamicResource Table_BG_Content}"
BorderBrush="{DynamicResource Table_BD}"
BorderThickness="1,0,0,1">
<TextBlock
HorizontalAlignment="Left"
VerticalAlignment="Center"
FontFamily="Arial"
FontSize="12"
Foreground="{DynamicResource FG_Black}"
Text="{Binding AlignerResponse}"
TextWrapping="Wrap" />
</Border>
</Grid>
</Grid>
</ScrollViewer>
</UserControl>

View File

@ -103,6 +103,16 @@ namespace SicUI.Models.Maintenances.TM
}
#endregion
#region
[Subscription("Rt.Status")]
public string RtStatus { get; set; }
public bool UnLoadEnableWaferClick => !UnLoadIsOnline || RtStatus == "Idle";
public bool LoadLockEnableWaferClick => !LLIsOnline || RtStatus == "Idle";
#endregion
#region EFEM,Aligner
[Subscription("EFEM.Status")]
@ -111,6 +121,15 @@ namespace SicUI.Models.Maintenances.TM
[Subscription("EFEM.IsOnline")]
public bool EFEMIsOnline { get; set; }
[Subscription("Aligner.HiWinAligner.Vacuum")]
public string AlignerVacuum { get; set; }
[Subscription("Aligner.HiWinAligner.PError")]
public string AlignerPError { get; set; }
[Subscription("Aligner.HiWinAligner.Response")]
public string AlignerResponse { get; set; }
public bool IsEFEMEnableManualOperation => !EFEMIsOnline && EFEMStatus == "Idle";
public bool IsWaferRobotEnableManualOperation => !WaferRobotIsOnline && WaferRobotState == "Idle";
@ -121,34 +140,34 @@ namespace SicUI.Models.Maintenances.TM
InvokeClient.Instance.Service.DoOperation($"Aligner.Home");
}
//开启真空
//开启真空1
public void Aligner_CVN()
{
InvokeClient.Instance.Service.DoOperation($"Aligner.HiWinAligner.HwVacuumOn");
InvokeClient.Instance.Service.DoOperation($"Aligner.HiWinAligner.HwCVN");
}
//晶圆寻边与辅正
//晶圆寻边与辅正1
public void Aligner_BAL()
{
InvokeClient.Instance.Service.DoOperation($"Aligner.HiWinAligner.HwAlign");
InvokeClient.Instance.Service.DoOperation($"Aligner.HiWinAligner.HwBAL");
}
//关闭真空
//关闭真空1
public void Aligner_CVF()
{
InvokeClient.Instance.Service.DoOperation($"Aligner.HiWinAligner.HwVacuumOff");
InvokeClient.Instance.Service.DoOperation($"Aligner.HiWinAligner.HwCVF");
}
//读取真空值
//读取真空值1
public void Aligner_CVD()
{
InvokeClient.Instance.Service.DoOperation($"Aligner.HiWinAligner.HwCVD");
}
//移至测量中心点
//移至测量中心点1
public void Aligner_MTM()
{
InvokeClient.Instance.Service.DoOperation($"Aligner.HiWinAligner.HwMoveToMeasurement");
InvokeClient.Instance.Service.DoOperation($"Aligner.HiWinAligner.HwMTM");
}
//读取最后的错误信息
@ -160,7 +179,7 @@ namespace SicUI.Models.Maintenances.TM
//清除报警
public void Aligner_ERS()
{
InvokeClient.Instance.Service.DoOperation($"Aligner.HiWinAligner.HwClearError");
InvokeClient.Instance.Service.DoOperation($"Aligner.HiWinAligner.HwERS");
}
public void Aligner_Abort()

View File

@ -27,6 +27,18 @@ namespace SicUI.Client.Models.Platform.TM
public string RtStatus { get; set; }
public bool EnableWaferClick => RtStatus == "Idle";
//控件右击菜单
public bool PM1EnableWaferClick => !PM1IsOnline || RtStatus == "Idle";
public bool PM2EnableWaferClick => !PM2IsOnline || RtStatus == "Idle";
public bool UnLoadEnableWaferClick => !UnLoadIsOnline || RtStatus == "Idle";
public bool LoadLockEnableWaferClick => !LLIsOnline || RtStatus == "Idle";
//控件右击菜单
public bool LLEnableWaferClick => true;
public bool LoadValveIsEnable => !LLIsOnline;

View File

@ -690,9 +690,25 @@ namespace SicUI.Models.Operations.Overviews
#endregion
[Subscription("UnLoad.IsOnline")]
public bool IsOnlineUnLoad { get; set; }
[Subscription("LoadLock.IsOnline")]
public bool IsOnlineLL { get; set; }
#region Button Logic
//控件右击菜单
public bool EnableWaferClick => RtStatus == "Idle";
public bool PM1EnableWaferClick => !PM1IsOnline || RtStatus == "Idle";
public bool PM2EnableWaferClick => !PM2IsOnline || RtStatus == "Idle";
public bool UnLoadEnableWaferClick => !IsOnlineUnLoad || RtStatus == "Idle";
public bool LoadLockEnableWaferClick => !IsOnlineLL || RtStatus == "Idle";
//控件右击菜单
public bool LLEnableWaferClick => true;
public bool IsEnableAbort

View File

@ -54,5 +54,5 @@ using System.Windows;
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
[assembly: AssemblyVersion("1.1.4.15")]
[assembly: AssemblyInformationalVersion("自动通用版有EFEM")]
[assembly: AssemblyVersion("1.1.10.34")]
[assembly: AssemblyInformationalVersion("南京百识专用")]

View File

@ -75,8 +75,7 @@ if exist "$(ProjectDir)..\SicSetup\Packages\SicUI\PresetGroups" rd "$(ProjectDir
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
<ItemGroup>
<Reference Include="CommandLine, Version=2.9.1.0, Culture=neutral, PublicKeyToken=5a870481e358d379, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<Reference Include="CommandLine">
<HintPath>..\ThirdParty\MECF.Framework\CommandLine.dll</HintPath>
</Reference>
<Reference Include="log4net, Version=2.0.8.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">

View File

@ -1,4 +1,6 @@
using CommandLine;

using CommandLine;
namespace SicUI
{

Binary file not shown.

BIN
ThirdParty/MECF.Framework/EPPlus.dll vendored Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.