package com.mes.downstorage.service; import com.mes.common.PLCAutoMes; import com.mes.common.S7control; import com.mes.device.PlcParameterObject; import com.mes.downglassinfo.entity.DownGlassTask; import com.mes.downglassinfo.service.DownGlassTaskService; import com.mes.downstorage.entity.DownStorageCageDetails; import com.mes.downstorage.mapper.DownStorageCageDetailsMapper; import com.mes.downworkstation.mapper.DownWorkstationMapper; import com.mes.tools.WebSocketServer; import com.mes.glassinfo.entity.GlassInfo; import com.mes.glassinfo.service.GlassInfoService; import lombok.Data; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; import static jdk.nashorn.internal.runtime.regexp.joni.Config.log; @Data @Service public class DownGlassCacheLogic { //下片前理片 public static final String RESULT_IN = "1"; public static final String RESULT_OUT = "2"; public static final String RESULT_IN_OUT = "3"; @Autowired private DownStorageCageDetailsMapper selectInfo; private GlassInfoService GlassInfoService; private DownStorageCageDetailsService downStorageCageDetailsService; private DownGlassTaskService downGlassTaskService; /** * @param Number //识别逻辑 不交互 */ // public void identify(String Number) { // //查询任务 // PlcParameterObject plcmes = PLCAutoMes.PlcMesObject; // S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToGaStatus").getAddress(), (short) 1); // String s = S7control.getinstance().ReadWord("DB14.26", 1).get(0) + ""; // boolean isexist = isExist(Number); // if (isexist) { // //存在逻辑 1.添加信息 2.回复PLC存在 // //S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToGaStatus").getAddress(),(short) 1); // } else { // //不存在逻辑 1.回复PLC不存在 // //S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToGaStatus").getAddress(),(short) 2); // } // } public void process() { String result = S7control.getinstance().ReadWord("DB14.0", 1).get(0) + ""; String number = S7control.getinstance().ReadWord("DB14.2", 1).get(0) + ""; // 进片请求 if (RESULT_IN.equals(result)) { processInto(number); } // 出片请求 else if (RESULT_OUT.equals(result)) { processOut(); } // 进出片请求 else if (RESULT_IN_OUT.equals(result)) { // 先出后进 if (!processOut()) { processInto(number); } } } /** * @param Number * @return //下片前理片 进 */ public boolean processInto(String Number) { GlassInfoService = WebSocketServer.applicationContext.getBean(GlassInfoService.class); //按id查询玻璃信息表里的玻璃 GlassInfo GlassInfo = GlassInfoService.selectGlassId(Number); PlcParameterObject plcmes = PLCAutoMes.PlcMesObject; //存在此玻璃编号 if (GlassInfo != null) { //同钢化版图内的栅格号 找到相同版图id并且大于前面的顺序的空格 List list = selectInfo.SelectIsExistIntoCache(GlassInfo.getTemperingLayoutId(), GlassInfo.getTemperingFeedSequence(), GlassInfo.getWidth()); //空栅格号 if (list.size() == 0) { //查询笼子内空闲 list = selectInfo.SelectCacheLeisure(); } //小于此玻璃钢化版图序号的栅格号 if (list.size() == 0) { list = selectInfo.SelectIsExistIntoCache(GlassInfo.getTemperingLayoutId(), GlassInfo.getWidth()); } if (list.size() > 0) { //存在空格 //1.生成任务: 起始位置0 结束位置this.slot 任务类型 1 (进片任务) //2.回复 1进片 DownStorageCageDetails item = list.get(0); selectInfo.insertCacheTask(GlassInfo.getId() + "", "0", item.getSlot() + "", "1", GlassInfo.getWidth(), GlassInfo.getHeight(), GlassInfo.getFilmsid(), GlassInfo.getThickness(), GlassInfo.getFlowcardId()); S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToGaStatus").getAddress(), (short) 1); //完成后插入小片数据到缓存表 return true; } } else { // ID编号不存在 不处理/回复PLC 进行报警提示 } //返回结果 return false; } //理片 出 public boolean processOut() { // 查询任务 String G06 = S7control.getinstance().ReadWord("DB14.56", 1).get(0) + ""; String G11 = S7control.getinstance().ReadWord("DB14.58", 1).get(0) + ""; String G13 = S7control.getinstance().ReadWord("DB14.58", 1).get(0) + ""; PlcParameterObject plcmes = PLCAutoMes.PlcMesObject; log.println("666"); ; List list = selectInfo.SelectCacheOut(1, 5); List list2 = selectInfo.SelectCacheOut(6, 10); List list3 = selectInfo.SelectCacheOut(1, 10); // 优先 超出尺寸优先人工出片 人工处理 if (!list3.isEmpty()) { DownStorageCageDetails item3 = list3.get(0); if (item3.getHeight() >= 1 && item3.getWidth() >= 1) { String endcell = "13"; String SendEndcell = "1"; selectInfo.insertCacheTask(item3.getGlassId() + "", "0", endcell, "2", item3.getWidth(), item3.getHeight(), item3.getFilmsid(), item3.getThickness(), item3.getFlowCardId()); S7control.getinstance().writeString(plcmes.getPlcParameter("DB14.28").getAddress(), SendEndcell); S7control.getinstance().writeString(plcmes.getPlcParameter("DB14.20").getAddress(), "1"); return true; } } //同时请求 优先后端出片 else if (!list3.isEmpty()) { DownStorageCageDetails item3 = list3.get(0); if (G06.equals("0") && G11.equals("0")) { String endcell = "11"; String SendEndcell = "1"; selectInfo.insertCacheTask(item3.getGlassId() + "", "0", endcell, "2", item3.getWidth(), item3.getHeight(), item3.getFilmsid(), item3.getThickness(), item3.getFlowCardId()); S7control.getinstance().writeString(plcmes.getPlcParameter("DB14.28").getAddress(), SendEndcell); S7control.getinstance().writeString(plcmes.getPlcParameter("DB14.20").getAddress(), "1"); return true; } } // 按照顺序符合前端出片 else if (!list.isEmpty()) { DownStorageCageDetails item = list.get(0); if (G06.equals("0") && G11.equals("1")) { // 出到 G06 selectInfo.insertCacheTask(item.getGlassId() + "", "0", "06", "2", item.getWidth(), item.getHeight(), item.getFilmsid(), item.getThickness(), item.getFlowCardId()); S7control.getinstance().writeString(plcmes.getPlcParameter("DB14.28").getAddress(), "1"); S7control.getinstance().writeString(plcmes.getPlcParameter("DB14.20").getAddress(), "1"); return true; } // 按照顺序符合后端出片 } else if (!list2.isEmpty()) { DownStorageCageDetails item2 = list2.get(0); if (G06.equals("1") && G11.equals("0")) { // 出到 G11 selectInfo.insertCacheTask(item2.getGlassId() + "", "0", "11", "2", item2.getWidth(), item2.getHeight(), item2.getFilmsid(), item2.getThickness(), item2.getFlowCardId()); S7control.getinstance().writeString(plcmes.getPlcParameter("DB14.28").getAddress(), "2"); S7control.getinstance().writeString(plcmes.getPlcParameter("DB14.20").getAddress(), "1"); return true; } } // 返回结果 return false; } //查询是否绑定架子 // public boolean selectFlowCardId(String FlowCardId){ // // } /** * @param Number * //磨边 不交互 理片和磨边机自己交互 */ /** * @param Number * @return 查询消息队列里此玻璃ID的数据 */ public boolean selectMessageId(String Number) { //查询是否存在 GlassInfo GlassInfo = GlassInfoService.selectGlassId(Number); if (GlassInfo == null) { //返回 不存在 return false; } //返回 存在 return true; } /** * @param Number * @return 删除消息队列里此玻璃ID的数据 */ public boolean deleteMessageId(String Number) { //查询是否存在 GlassInfo GlassInfo = GlassInfoService.selectGlassId(Number); if (GlassInfo == null) { //返回 不存在 return false; } //返回 存在 return true; } /** * @param Number * @return //是否存在此编号玻璃 */ public boolean isExist(String Number) { //查询是否存在 GlassInfo GlassInfo = GlassInfoService.selectGlassId(Number); if (GlassInfo == null) { //返回 不存在 return false; } //返回 存在 return true; } }