cl
2024-01-19 e0fac38b26845f25de479783e0c76cf12a5311e0
提交 | 用户 | 时间
71e81e 1 package cn.stylefeng.guns.plcserver.server.BOP040B.impl;
2
3
4 import cn.stylefeng.guns.modular.bs.collectionParamConf.model.params.CollectionParamConfParam;
5 import cn.stylefeng.guns.modular.bs.collectionParamConf.model.result.CollectionParamConfResult;
6 import cn.stylefeng.guns.modular.bs.collectionParamConf.service.CollectionParamConfService;
7 import cn.stylefeng.guns.modular.cm.paramCollection.model.params.ParamCollectionParam;
8 import cn.stylefeng.guns.modular.cm.paramCollection.service.ParamCollectionService;
9 import cn.stylefeng.guns.modular.cm.passingStationCollection.model.params.PassingStationCollectionParam;
10 import cn.stylefeng.guns.modular.cm.passingStationCollection.service.PassingStationCollectionService;
11 import cn.stylefeng.guns.plcserver.opc.GlobalVariable;
12 import cn.stylefeng.guns.plcserver.opc.OPCComm;
13 import cn.stylefeng.guns.plcserver.opc.unit.OPCUnit;
14 import cn.stylefeng.guns.plcserver.server.BOP040.BOP040ServerInterface;
15 import cn.stylefeng.guns.plcserver.server.BOP040B.BOP040BServerInterface;
16 import cn.stylefeng.guns.plcserver.tool.DateTool;
17 import cn.stylefeng.guns.plcserver.tool.LogUtil;
18 import org.apache.log4j.Logger;
19 import org.openscada.opc.lib.da.Group;
20 import org.openscada.opc.lib.da.Item;
21
22 import java.util.Date;
23 import java.util.List;
24
25
26 public class BOP040BServerInterfaceImpl implements BOP040BServerInterface {
27
28     private static Logger logger;
29     LogUtil logUtil = new LogUtil();
30     static {
31         logger = Logger.getLogger(BOP040BServerInterfaceImpl.class);
32     }
33
34     private OPCComm opc = OPCComm.getInstance();
35     private static Date IN_TIME = null;
36     private static String S_ORDER_CODE = "";//工单编号
37     private static String S_PRODUCT_CODE = "";//产品编号
38     private static String S_PRODUCT_TYPE= "";//产品类型
39     private static String S_PRODUCT_CODE_OLD = "";//产品编号
40     private static String S_SFC_CODE = "";//总成编码
41     private static String S_RIGHT_CODE  = "";//右壳体编码
42     private static String PRODUCTION_LINE  = "BOP";//产线号
43     private static String LOCATION_CODE  = "BOP040B";//工位号
44     private static String GROUP_NAME  = "BOP040B_P";//组名
45     private static List list = null;
46     private static Group group = null;
cf6bff 47
C 48     private int count = 0;
49
50     /**
51      * 设置心跳标志位,保存到全局变量
52      */
53     public void setHeartbeat(String value) {
54         if (value.equals("false")) {
55             OPCUnit.write(opc.getBOP040B_F_HEART_BEAT(), "true");
56             GlobalVariable.BOP040B_F_HEART_BEAT = true;
57             count = 0;
58         } else {
59             count++;
60         }
61         // 循环读取频率是:500ms一次,如果超过6次,也就是3s认定超时
62         if (count > GlobalVariable.HEART_MAX_COUNT) {
63             GlobalVariable.BOP040B_F_HEART_BEAT = false;
64         }
65     }
66
71e81e 67     @Override
68     public synchronized void monitor() {
69         String ecpStr = "";//异常记录标记
70         try{
cf6bff 71
e0fac3 72            /* String isHeartBeat = OPCUnit.read(opc.getBOP040B_F_HEART_BEAT());
cf6bff 73             assert isHeartBeat != null;
e0fac3 74             setHeartbeat(isHeartBeat);*/
cf6bff 75
71e81e 76             if(GlobalVariable.BOP040B_F_HEART_BEAT) {
77                 //PC读工单
78                 String isPLCStart = OPCUnit.read(opc.getBOP040B_J_PLC_START());//PLC开始
79                 if(isPLCStart.equals("true")){
80                     String isFinish = OPCUnit.read(opc.getBOP040B_J_PC_WRITE_ORDER());//PC下发工单完成
81                     if(isFinish.equals("false")){
82                         handleOrder();
83                     }
84                 }
85
86
87                 //PC完成
88                 String isPLCFinish = OPCUnit.read(opc.getBOP040B_J_PLC_FINISH());//PLC完成
89                 if(isPLCFinish.equals("true")){
90                     String isFinish = OPCUnit.read(opc.getBOP040B_J_PC_FINISH());//PC操作完成
91                     if(isFinish.equals("false")){
92                         handleFinsh();
e0fac3 93                         handleInfo();
71e81e 94                     }
95                 }
96
97             }else{
98                 logger.info("BOP040B工位与PLC断开,请检查PLC或网络是否异常!");
99             }
100
101         }catch (Exception e) {
102             ecpStr ="出现异常:" + logUtil.getTrace(e);
103         }finally {
104             if(!"".equals(ecpStr)){
105                 logger.info(ecpStr+"\r\n");
106             }
107         }
108     }
109
110     //PC读工单
111     public void handleOrder() {
112         IN_TIME = DateTool.getLocalTimeForDate();
113         S_ORDER_CODE = OPCUnit.read(opc.getBOP040B_S_ORDER_CODE());//工单编号
114         S_PRODUCT_TYPE = OPCUnit.read(opc.getBOP040B_S_PRODUCT_CODE());//产品编号
115         S_PRODUCT_CODE = GlobalVariable.PRODUCT_CODE_MAP.get(S_PRODUCT_TYPE);
116         S_SFC_CODE = OPCUnit.read(opc.getBOP040B_S_SFC_CODE());//总成编码
117         OPCUnit.write(opc.getBOP040B_J_PC_WRITE_ORDER(), "true"); //PC读工单完成
118         logger.info("BOP040B工位,handleOrder PC处理完成!");
119     }
120
121     //PC读参数信息
122     public void handleInfo() throws Exception {
123         logger.info("BOP040B工位,handleInfo START!");
124
125         if(null == list /*|| !S_PRODUCT_CODE_OLD.equals(S_PRODUCT_CODE)*/){
126             if(group != null){
127                 opc.getServer().removeGroup(group,true);
128             }
129             group = opc.getServer().addGroup(GROUP_NAME);
130
131             CollectionParamConfParam collectionParamConfParam = new CollectionParamConfParam();
132             //collectionParamConfParam.setProductCode(S_PRODUCT_CODE);
133             collectionParamConfParam.setLocationCode(LOCATION_CODE);
134             CollectionParamConfService collectionParamConfService = opc.collectionParamConfService;
135             list = collectionParamConfService.findListBySpec(collectionParamConfParam);
136
137
138             for(int i=0;i<list.size();i++){
139                 CollectionParamConfResult result = (CollectionParamConfResult) list.get(i);
140                 Item item = group.addItem(result.getGatherAddress());
141                 result.setItem(item);
142                 list.set(i,result);
143             }
144             //S_PRODUCT_CODE_OLD = S_PRODUCT_CODE;
145         }
146
147         if(null != list && list.size()>0) {
148             ParamCollectionService paramCollectionService = opc.paramCollectionService;
149             for (int i = 0; i < list.size(); i++) {
150                 CollectionParamConfResult result = (CollectionParamConfResult) list.get(i);
151                 Item item = result.getItem();
152                 String value = OPCUnit.read(item);//读参数值
153                 ParamCollectionParam paramCollectionParam = new ParamCollectionParam();
154                 paramCollectionParam.setParamCode(result.getParamCode());
155                 paramCollectionParam.setParamName(result.getParamName());
156                 paramCollectionParam.setWorkOrderNo(S_ORDER_CODE);
157                 paramCollectionParam.setSfcCode(S_SFC_CODE);
158                 paramCollectionParam.setProductCode(S_PRODUCT_CODE);
159                 paramCollectionParam.setProductionLine(result.getProductionLine());
160                 paramCollectionParam.setLocationCode(result.getLocationCode());
161                 paramCollectionParam.setParamValue(value);
162                 paramCollectionParam.setParamLower(result.getParamLower());
163                 paramCollectionParam.setParamUpper(result.getParamUpper());
164                 paramCollectionParam.setParamStandard(result.getParamCentral());
165                 paramCollectionParam.setCollectionTime(DateTool.getLocalTimeForDate());
166                 paramCollectionParam.setUnit(result.getUnit());
167                 paramCollectionService.add(paramCollectionParam);
168             }
169         }
170
171         logger.info("BOP040B工位,handleInfo END!");
172     }
173
174     //PC完成
175     public void handleFinsh() {
176         if("".equals(S_ORDER_CODE)){
177             IN_TIME = DateTool.getLocalTimeForDate();
178             S_ORDER_CODE = OPCUnit.read(opc.getBOP040B_S_ORDER_CODE());//工单编号
179             S_PRODUCT_TYPE = OPCUnit.read(opc.getBOP040B_S_PRODUCT_CODE());//产品编号
180             S_PRODUCT_CODE = GlobalVariable.PRODUCT_CODE_MAP.get(S_PRODUCT_TYPE);
181             S_SFC_CODE = OPCUnit.read(opc.getBOP040B_S_SFC_CODE());//总成编码
182         }
183         //处理过站信息
184         String S_PRODUCT_STATE_CODE = OPCUnit.read(opc.getBOP040B_S_PRODUCT_STATE_CODE());
185         PassingStationCollectionParam param = new PassingStationCollectionParam();
186         param.setWorkOrderNo(S_ORDER_CODE);
187         param.setProductCode(S_PRODUCT_CODE);
188         param.setSfcCode(S_SFC_CODE);
189         param.setProductionLine(PRODUCTION_LINE);
190         param.setLocationCode(LOCATION_CODE);
191         param.setInboundTime(IN_TIME);
192         param.setOutboundTime(DateTool.getLocalTimeForDate());
193         param.setOutRsSign(S_PRODUCT_STATE_CODE);//出站是否合格
194         PassingStationCollectionService passingStationCollectionService = opc.passingStationCollectionService;
195         passingStationCollectionService.add(param);
196
197         OPCUnit.write(opc.getBOP040B_J_PC_FINISH(), "true"); //PC完成
198
199         logger.info("BOP040B工位,handleFinsh PC处理完成!");
200     }
201
202 }