wu
2024-03-26 c1d88895501846c4ad1ba2b16f4a8ae10ca2b061
springboot-vue3/src/main/java/com/example/springboot/service/SpianServiceNew.java
@@ -7,6 +7,7 @@
import com.example.springboot.component.PLCAutoMes;
import com.example.springboot.component.S7control;
import com.example.springboot.entity.GlassInfo;
import com.example.springboot.entity.StorageCage;
import com.example.springboot.entity.device.PlcParameterObject;
import com.example.springboot.mapper.AlbaniaMapper;
import com.google.common.primitives.Bytes;
@@ -19,24 +20,30 @@
     //读取DB105区文件
    private PlcParameterObject plcmes=PLCAutoMes.PlcMesObject;
public Short selectAll(GlassInfo glassInfo) {
    if(glassInfo==null){
        //有进片请求但是测量台没有玻璃
        return 400;
    }
    //定义初始字段
    int cageid;
    String glassid=glassInfo.getGlassid();
    Double width=glassInfo.getWidth();
    Double height=glassInfo.getHeight();
    //int mateid=glassInfo.getMateid();
    String flowcard=glassInfo.getFlowcard();
    int glasstype=glassInfo.getGlasstype();
    
    
    //判断是否有同类型的
     cageid=albaniaMapper.SelectCage(glassInfo.getGlasstype(), glassInfo.getWidth(), 50);
     cageid=albaniaMapper.SelectCage(glasstype,width, 50);
    //如果有同类型时直接增加
    if(cageid!=Integer.MIN_VALUE){
        //发送plc任务
        Mestast(glassid, 1001, cageid, 1,"MESID1");
        //任务发送字
        //Mestast(glassid,1001,cageid,1);
        
        //任务完成后增加数量
        albaniaMapper.UpdateCageNumberAdd(cageid);
    }else{
    }else{
         //判断玻璃是否进入大片笼
        if(glassInfo.getThickness()>=15){
            cageid=albaniaMapper.SelectNewCell(3,5);
@@ -45,24 +52,57 @@
            //发送plc任务
        }
        //当返回的格子号为空时,返回400笼子已满
        if(cageid==Integer.MIN_VALUE){
            return(400);
        if(cageid!=Integer.MIN_VALUE){
            Mestast(glassid,1001,cageid,1,"MESID1");
            //发送plc任务
        }else{
            //判断完成任务后增加数量
            albaniaMapper.AddCage(cageid, glassid, width, height, width, height, 0, glasstype, 1);
            return(400);
        }
    }
    //增加任务记录
    albaniaMapper.Inserttask(0, 0, 0, cageid, glassInfo.getGlassid(), 0, 0);
    albaniaMapper.Inserttask(0, 0, 1001, cageid, glassid,glasstype, flowcard,0,0);
    return(200);
}
    public Short selectout(String glasstype) {
        //判断笼子最先出哪片
    //出片
    public Short selectout(int line) {
        int mateid;
        int glasstype;
        int tier;
        int sumid;
        String flowcard;
        GlassInfo glassmate=new GlassInfo();
            for(int i=1;i<=7;i++){
                glassmate= albaniaMapper.SelectOutGlass(line);
                if(glassmate==null){
                    //未领取任务
                    return (400);
                }else{
                mateid=glassmate.getMateid();
                glasstype=glassmate.getGlasstype();
                tier=glassmate.getTier();
                sumid=glassmate.getId();
                flowcard=glassmate.getFlowcard();
                    StorageCage glass= albaniaMapper.SelectCageGlass(glasstype);
                  if(glass!=null){
                    //发送配片数据
                    Mestast(glassmate.getGlasstype()+"i", glass.getId(),2002, 0,"MESID"+i);
                    albaniaMapper.AddFinishNumber(flowcard, mateid, tier);
                    albaniaMapper.Inserttask(1, 0, glass.getId(), 2002, glassmate.getGlassid()+i, glasstype,glass.getFlowcard(),mateid,tier);
                      if(tier==sumid){//当配片数量等于成品小片总片数时
                        //本次配片完成发送启动命令
                        S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToPLC").getAddress(), (short)2);//出片任务启动
                        return (200);//结束
                         }
                    }
                }
            }
        return(200);// 结束
    }
@@ -77,8 +117,12 @@
            glassidlist.add((byte) iditem);
        }
        byte[] bytes = Bytes.toArray(glassidlist);
        //writeString
        System.out.println("outmesidbytes:" + bytes.length);
        S7control.getinstance().WriteByte(plcmes.getPlcParameter(address).getAddress(plcmes.getPlcParameter(address).getAddressIndex()),bytes);
        System.out.println(plcmes.getPlcParameter(address).getAddress());
        System.out.println();
        //S7control.getinstance().WriteByte(plcmes.getPlcParameter(address).getAddress(),bytes);
        //S7control.getinstance().WriteByte(address, bytes);// 派发出片id
    }
@@ -93,7 +137,7 @@
                writedstrIdOut.append((char) iditem);
            }
        }
        return writedstrIdOut;
        return writedstrIdOut;
    }
    // char数组转化成bit数组
@@ -115,15 +159,15 @@
        return listbool;
    }
    // 根据玻璃id完成在进行中的任务
    public void overtask(String glassid) {
        // spianMapper.UpdatetaskOut(glassid.toString());// 完成上一次 出片或者进片任务
        // spianMapper.OverOutSlice(glassid.toString(), 2, 1);// 完成出片队列任务
        // spianMapper.UpdataGlassCage(glassid.toString(), 0);// 清除出片格子玻璃信息
        // spianMapper.UpdateCageOver(glassid.toString(), 0);// 更改笼子表出片状态
        // spianMapper.UpdateCageadd(glassid.toString(), 1);// 更改笼子表进片状态
        // spianMapper.UpdateAddQueue(glassid.toString());// 把进片的玻璃更新到出片队列中
    //下发理片任务
    public void Mestast(String glassid,int MESToPLCStart1,int MESToPLCTarget1,int MESToPLC,String address) {
        S7control.getinstance().writeString(plcmes.getPlcParameter(address).getAddress(),glassid);//玻璃id
        S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToPLCStart1").getAddress(), (short) MESToPLCStart1);//起始位置
        S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToPLCTarget1").getAddress(), (short) MESToPLCTarget1);//目标位置
        if(MESToPLC!=0){
            S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToPLC").getAddress(), (short)MESToPLC);//mes理片任务类型
        }
    }
}