ZengTao
2024-01-23 3d1b968fdd97ac107d98404ec37d693b964cda07
交互协议测试后更新
8个文件已修改
220 ■■■■ 已修改文件
CanadaMes-ui/src/lang/locales/zh-CN.json 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/layout/index.vue 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/component/PlcHold.java 73 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/component/Plcalarm.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/component/Plchome.java 62 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/config/AppRunnerConfig.java 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/mapper/SpianMapper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/service/SpianService.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/lang/locales/zh-CN.json
@@ -173,7 +173,7 @@
  "Parameter": "参数设置",
  "Action": "开关控制",
  "Sign": "IO状态",
  "State": "设备状态",
  "State": "状态",
  "Alarm": "报警信息",
  "Distribute": "下发",
  "Search": "搜索",
CanadaMes-ui/src/layout/index.vue
@@ -130,7 +130,7 @@
// import Tag from '../layout/tag.vue';
// import store from '../store';
let socket;
let timer;
export default {
  name: "Layout",
  // store,
@@ -312,8 +312,9 @@
    },
    //45秒复位倒数计时
    CountDown() {
      clearInterval(timer);
      let count = 45;
      let timer = setInterval(
      timer = setInterval(
        () => {
          if (this.EmergencyStop == true) {
            this.dialogFormCountDown = false;
springboot-vue3/src/main/java/com/example/springboot/component/PlcHold.java
@@ -43,27 +43,38 @@
      // // TODO Auto-generated catch block
      // e.printStackTrace();
      // }
      // spianService.selectAll("X21942610402GV");
      // 出片任务////////////////////////////////
      List<Short> outlist = S7control.getinstance().ReadWord("DB106.20", 1); // 出片车状态
      List<Short> outlist1 = S7control.getinstance().ReadWord("DB105.18", 1); // 出片任务是否启动
      boolean Plcout = spianService.listbool("DB106.64"); // 出片请求字
      boolean Plcout2 = spianService.listbool("DB105.18"); // 出片启动
      if (Plcout == false&&Plcout2==true) {
        S7control.getinstance().WriteWord("DB105.18", (short) 0);// 出片任务启动改为0
        System.out.println("关闭出片启动" + LocalDateTime.now());// 出片任务发送字改为0
      }
      boolean Plcadd = spianService.listbool("DB106.24"); // 进片请求字
      boolean Plcadd2 = spianService.listbool("DB105.16"); // 进片启动
      if (Plcadd == false&&Plcadd2==true) {
        S7control.getinstance().WriteWord("DB105.16", (short) 0);//进片任务启动改为0
        System.out.println("关闭进片启动" + LocalDateTime.now());// 进片任务发送字改为0
      }
      // StringBuilder writedstrIdOut = new StringBuilder();
      // 获取已下发的出片id
      byte[] writedglassidbytesOut = S7control.getinstance().ReadByte("DB105.30", 14);
      String writedstrIdOut = new String(writedglassidbytesOut);
      boolean outstate = false;// 出片车空闲判断
      boolean outstate1 = false;// 出片车任务是否启动
      if (outlist != null && outlist1 != null) {
        outstate = outlist.contains((short) 0);// 出片车空闲判断 当出片车空闲时为true
        outstate1 = outlist1.contains((short) 1);// 出片车任务是否启动 当出片车任务启动时为true
      if (Plcout == true) {
        // 判断当前是否有未执行的任务
        int outnum = spianMapper.SelectOutSliceshu();
        int cageoutsum = spianMapper.Selectcageout(3);
        int outnum = spianMapper.SelectOutSliceshu();//是否有正在出片的任务
        int cageoutsum = spianMapper.Selectcageout(3);//笼子内是否还有在出片的玻璃
        // 当没有任务执行并且出片车空闲时
        if (outnum == 0 && outstate == true && Plchome.isAllowQueue == true && cageoutsum == 0) {
        if (outnum == 0 &&  Plchome.isAllowQueue == true && cageoutsum == 0) {
          // 判断铝框出片队列表是否有待出片的玻璃
          String outglassid = spianMapper.SelectOutSlice();
          // 当有待出片的玻璃时
@@ -74,20 +85,13 @@
            if (glassdisabled == 0) {
              spianService.selectout2(outglassid);
              Plchome.isQueueWarning = false;
              outstate = false;
            } else { // 禁用更改状态弹出提示
              Plchome.isQueueWarning = true;
            }
          }
        }
        if (outstate == true) {// 当出片车空闲时,且出片启动为1时,任务启动改为0
          if (outstate1 == true) {
            S7control.getinstance().WriteWord("DB105.18", (short) 0);// 出片任务启动改为0
            System.out.println("关闭启动" + LocalDateTime.now());
          }
        }
      }
      ///////////// 进片任务
@@ -96,7 +100,6 @@
      List<Short> datas1ListState2 = S7control.getinstance().ReadWord("DB105.16", 1);// 获取进片车任务是否启动
      boolean B01backs = spianService.listbool("DB106.60");// b01汇报
      boolean B02backs = spianService.listbool("DB106.62");// b02汇报
      StringBuilder B01glassid = spianService.queGlassid("DB103.184", 14);// BO1的玻璃id
      StringBuilder B02glassid = spianService.queGlassid("DB103.212", 14);// B02的玻璃id
@@ -107,33 +110,39 @@
        int HB = spianMapper.SelectHB(B01glassid.toString());
        if (HB > 0) {
          // 当B01小车汇报完成时更改玻璃状态 为1
          S7control.getinstance().WriteWord("DB106.60", (short) 0);// 恢复B01小车应答改为0
          boolean yingda = spianService.listbool("DB106.60");// b01汇报
          if(yingda==false){
          S7control.getinstance().WriteWord("DB105.48", (short) 1);// 恢复B01小车应答改为1
          boolean yingda = spianService.listbool("DB105.48");// b01汇报
          if (yingda == true) {
            spianService.overtask(B01glassid.toString());// 完成任务
          }
          System.out.println("汇报时B01|第" + aaa + "次" + B01glassid + "应答" + yingda);
          aaa += 1;
        }
      }else{
        S7control.getinstance().WriteWord("DB105.48", (short) 0);// 恢复B01小车应答改为1
      }
      // 当出片小车完成任务时
      if (B02backs == true) {
        // 判断是否汇报正确的id
        int HB = spianMapper.SelectHB(B02glassid.toString());
        System.out.println("汇报时B02|" + B02glassid);
        if (HB > 0) {
          // 当B02小车汇报完成时更改玻璃状态为0
          S7control.getinstance().WriteWord("DB106.62", (short) 0);// 恢复B02小车应答改为0
          System.out.println("汇报时B02|" + B02glassid);
          boolean yingda = spianService.listbool("DB106.62");// b02汇报
          if (yingda == false) {
          S7control.getinstance().WriteWord("DB105.50", (short) 1);// 恢复B02小车应答改为1
          System.out.println("汇报时B02ID|" + B02glassid);
          boolean yingda = spianService.listbool("DB105.50");// b02汇报
          if (yingda == true) {
            spianService.overtask(B02glassid.toString());// 完成任务
          }
          System.out.println("汇报时B02|第" + aaa + "次" + B02glassid + "应答" + yingda);
        }
      }else{
         S7control.getinstance().WriteWord("DB105.50", (short) 0);// 恢复B02小车应答改为0
      }
      // 获取DO1数据
      StringBuilder queueid1 = spianService.queGlassid("DB106.26", 14);// 获取请求的id跟DO1同时清
@@ -157,6 +166,7 @@
        }
      }
      if (queueid2 != null) {
        // 写入D02的数据到上片队列表
        if (glass2 == null) {
@@ -170,15 +180,6 @@
        }
      }
      // if (outstate == true) { // 出片车状态空闲时
      // Integer state = spianMapper.Selectoutstate();
      // String orderid = spianMapper.SelectOrderout();
      // if (orderid != null && state == 0) {
      // spianService.selectout(orderid);
      // }
      // }
      // 查询数据库
      // 推送到前端
springboot-vue3/src/main/java/com/example/springboot/component/Plcalarm.java
@@ -28,7 +28,7 @@
    FileInputStream fileInputStream;
    try {
      // 从文件中读取字节数据存入 fileInputStream
      fileInputStream = new FileInputStream("D:/code/canadames/Alarm.json");
      fileInputStream = new FileInputStream("D:/canadames/Alarm.json");
      // 读取 fileInputStream 中字节并将其解码为字符
      InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, "utf-8");
      // 提高读取效率,在 BufferedReader 内包装 InputStreamReader
springboot-vue3/src/main/java/com/example/springboot/component/Plchome.java
@@ -122,36 +122,38 @@
            // List<Short> listd17 = S7control.getinstance().ReadWord("DB17.0",10);
            // String id=spianService.queGlassid("DB17.10", 14).toString();
            //
            // // 铝框线交互
            // try {
            // if (CurrentFrame != null) {
            // spianService.outmesid(CurrentFrame.getBarCode(), "DB17.0");
            // }
            // List<Short> framerequests = S7control.getinstance().ReadWord("铝框id请求字地址", 1);
            // for (Short framerequest : framerequests) {
            // if (framerequest == 1) {
            // // 铝框id
            // String franmeno = spianService.queGlassid("DB17.10", 14).toString();
            // String position;
            // try {
            // position = dbserve.SelectPositionByFrameBarcode(franmeno);
            // } catch (SQLException e) {
            // // TODO Auto-generated catch block
            // position = "0";
            // e.printStackTrace();
            // }
            // Short send;
            // if (position == "0") {
            // send = 0;
            // } else {
            // send = 1;
            // }
            // S7control.getinstance().WriteWord("铝框翻转发送地址", (short) send);
            // }
            // }
            // } catch (Exception e) {
            // // TODO: handle exception
            // }
            // 铝框线交互
            try {
                if (CurrentFrame != null) {
                    spianService.outmesid(CurrentFrame.getBarCode(), "DB17.0");
                }
                List<Short> framerequests = S7control.getinstance().ReadWord("铝框id请求字地址", 1);
                for (Short framerequest : framerequests) {
                    if (framerequest == 1) {
                        // 铝框id
                        String franmeno = spianService.queGlassid("DB17.10", 14).toString();
                        String position;
                        try {
                            position = dbserve.SelectPositionByFrameBarcode(franmeno);
                        } catch (SQLException e) {
                            // TODO Auto-generated catch block
                            position = "0";
                            e.printStackTrace();
                        }
                        Short send;
                        if (position == "0") {
                            send = 0;
                        } else {
                            send = 1;
                        }
                        S7control.getinstance().WriteWord("铝框翻转发送地址", (short) send);
                    }
                }
            } catch (Exception e) {
                // TODO: handle exception
            }
            if (S7control.getinstance().CheckConnected() == true) {
                // 获取当前扫码方式
springboot-vue3/src/main/java/com/example/springboot/config/AppRunnerConfig.java
@@ -17,28 +17,28 @@
        //
        System.out.println("启动完成");
        //  new PlcHold().start();
         new PlcHold().start();
        new Plchome().start();
        // new PlcLayout().start();
        // new Plcalarm().start();
        new PlcLayout().start();
        new Plcalarm().start();
        // new Plcsign().start();
        new Plcsign().start();
        // new Plcstate().start();
        // new PlcPositioning1().start();
        new Plcstate().start();
        new PlcPositioning1().start();
        // new PlcParameter2().start();
        new PlcParameter2().start();
        // new PLCAutomaticParameterSetting().start();
        new PLCAutomaticParameterSetting().start();
        // new PlcManualonePosition().start();
        // new PlcManualonePosition2().start();
        // new PlcServoManualone().start();
        // new PLCManualJog().start();
        // new Plclog().start();
        new PlcManualonePosition().start();
        new PlcManualonePosition2().start();
        new PlcServoManualone().start();
        new PLCManualJog().start();
        new Plclog().start();
        // new PlcInteractionState().start();
        new PlcInteractionState().start();
        //new PlcParameter1Review().start();
       // new PLCAutomaticParameterSettingReview().start();
    }
springboot-vue3/src/main/java/com/example/springboot/mapper/SpianMapper.java
@@ -15,7 +15,7 @@
    @Select("select COUNT(if(a.state1=0,cell,0))as cell,ROUND(id/2)as id from (select *,max(state)as state1 from storage_cage a  GROUP BY cage,cell)as a where (a.cage=#{cage1}-1 or a.cage=#{cage1}+1)and if(a.cage<6,a.cage>0 and a.cage<6,a.cage>5) and disabled=0 GROUP BY cage ORDER BY cell desc LIMIT 1")
    int selectCage(int cage1);
    // 获取笼子号订单号排序的空订单笼子
    @Select("select a.cage,FrameBarcode,COUNT(if(a.order_id=#{orderids},a.order_id,null))as orderid,b.shu,c.shu2,a.cell,min(a.state)as state1,max(a.state)as state2,disabled,FrameBarcode from storage_cage a left join (select COUNT(*)shu,cage from storage_cage  where order_id=#{orderids} GROUP BY cage)as b on a.cage=b.cage left join(select cage ,COUNT(glass_id)as shu2 from storage_cage GROUP BY cage)c  on a.cage=c.cage where (order_id=#{orderids} or ''='') GROUP BY cage,cell HAVING state1=0 ORDER BY (FrameBarcode=#{Fbarcode} or ''='') desc,shu desc,shu2,state2 asc,cage asc;")
    @Select("select a.cage,FrameBarcode,COUNT(if(a.order_id=#{orderids},a.order_id,null))as orderid,b.shu,c.shu2,a.cell,min(a.state)as state1,max(a.state)as state2,disabled,FrameBarcode from storage_cage a left join (select COUNT(*)shu,cage from storage_cage  where order_id=#{orderids} GROUP BY cage)as b on a.cage=b.cage left join(select cage ,COUNT(glass_id)as shu2 from storage_cage GROUP BY cage)c  on a.cage=c.cage where (order_id=#{orderids} or ''='') GROUP BY cage,cell HAVING state1=0 ORDER BY shu desc,shu2,state2 asc,cage asc;")
    List<StorageCage> selectAll(String orderids,String Fbarcode);
    //优先判断一次是否有同铝框的空位
    @Select("select *,min(state) state1 from storage_cage where width>=(#{width}+#{width2})  GROUP BY cage,cell HAVING state1=0 and  FrameBarcode=#{Fbarcode} ORDER BY width desc LIMIT 1;")
@@ -233,6 +233,6 @@
    @Select(" select disabled from storage_cage where glass_id=#{glassid} limit 1;")
    int SelectCageGlassState(String glassid);
    //判断汇报的id是否正确
    @Select("SELECT count(*) FROM `storage_cage` where state!=0 and state!=1 and glass_id=#{glassid}")
    @Select("SELECT count(*) FROM `storage_cage` where state!=0 and glass_id=#{glassid}")
    int SelectHB(String glassid);
}
springboot-vue3/src/main/java/com/example/springboot/service/SpianService.java
@@ -1,5 +1,11 @@
package com.example.springboot.service;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
@@ -11,6 +17,9 @@
import com.example.springboot.mapper.SpianMapper;
import com.google.common.primitives.Bytes;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
@Service
public class SpianService {
    @Autowired
@@ -19,7 +28,7 @@
    // @GetMapping("/all")
    public Short selectAll(String glassid) {
        int cage1=0;
        int cage1 = 0;
        int cells;
        int ids;
        int prcid;
@@ -29,11 +38,11 @@
        double minwidth = 0;
        north_glass_buffer1 glasslist = spianMapper.selectGlass(glassid); // 获取玻璃参数
        //如果没有此id时
        // 如果没有此id时
        if (glasslist == null) {
            return (300);
        }
        double widths = glasslist.getglasslengthmm();
        String orderids = glasslist.getordernumber();
        String FrameBarcode = glasslist.getFrameBarcode();
@@ -48,11 +57,10 @@
        List<Short> datas = new ArrayList<>();
        // String orderid="A001";
        // 获取订单相关度最高的笼子排序
        List<StorageCage> storageCage = spianMapper.selectAllFbarcode(FrameBarcode,widths,400);
        //判断铝框指定空格是否需要间隔空间
        // 获取铝框相关度最高的笼子排序
        List<StorageCage> storageCage = spianMapper.selectAllFbarcode(FrameBarcode, widths, 400);
        // 判断铝框指定空格是否需要间隔空间
        if (storageCage.size() == 0) {
            storageCage = spianMapper.selectAll(orderids, FrameBarcode);
        }
@@ -100,23 +108,24 @@
                    // 将外片玻璃的数据更新到内片
                    spianMapper.UpdateDBCage(ids, cage1, cells, 1);
                    // 将新入的玻璃存入外片
                    // spianMapper.UpdataAddCage(orderids, glassid, widths, cage1, cells, ids-1, 2);
                    spianMapper.UpdataAddCage2(orderids, glassid, glasslist, cage1, cells, ids - 1, 2);
                    spianMapper.UpdataAddCage1(widths, cage1, cells);// 减少格子宽度
                    spianMapper.Inserttask(0, 0, 1000, ids, glassid.toString(), prctier);// 新增任务
                    S7control.getinstance().WriteWord(adddresslist, datas);
                    System.out.println("进片任务|" + datas);
                } else {
                    // 数据库修改笼子表新增一条玻璃
                    // spianMapper.UpdataAddCage(orderids, glassid, widths, cage1, cells, ids, 2);
                    spianMapper.UpdataAddCage2(orderids, glassid, glasslist, cage1, cells, ids, 2);
                    spianMapper.UpdataAddCage1(widths, cage1, cells);// 减少格子宽度
                    spianMapper.Inserttask(0, 0, 1000, ids, glassid.toString(), prctier);// 新增任务
                    S7control.getinstance().WriteWord(adddresslist, datas);
                    System.out.println("进片任务|" + datas);
                    // S7control.getinstance().WriteByte("DB105.16",glassid);
                }
                outmesid(glassid, "DB105.20");
                return (200);
@@ -170,11 +179,12 @@
            spianMapper.Inserttask(1, 0, cageout.getId(), 1000, glassid, state);// 新增任务
            // int state = spianMapper.selectGlassState(cage, cell);//获取格子数量
            // if (state == 2) {
            //     spianMapper.UpdateDBCage1(cage, cell);// 将内片数据更新到外片里
            //     spianMapper.UpdateDBCage2(cage, cell);// 清除内片数据
            // spianMapper.UpdateDBCage1(cage, cell);// 将内片数据更新到外片里
            // spianMapper.UpdateDBCage2(cage, cell);// 清除内片数据
            // }
            System.out.println("出片任务|" + datas);
            S7control.getinstance().WriteWord(adddresslist, datas);// 派发出片车任务
            S7control.getinstance().WriteWord("DB105.18", (short) 1);// 出片任务发送字改为1
            outmesid(glassid, "DB105.34");// 派发出片ID
            return (200);// 结束
@@ -196,6 +206,7 @@
                System.out.println("出片任务|" + datas);
                outmesid(glassid, "DB105.34");// 派发出片ID
                S7control.getinstance().WriteWord(adddresslist, datas);// 派发出片车任务
                S7control.getinstance().WriteWord("DB105.18", (short) 1);// 出片任务发送字改为1
                return (200);// 结束
@@ -227,7 +238,7 @@
                    // 传输mes数据,坐标,数据
                    System.out.println("出片任务|" + datas);
                    S7control.getinstance().WriteWord(adddresslist, datas);// 派发出片车任务
                    S7control.getinstance().WriteWord("DB105.18", (short) 1);// 出片任务发送字改为1
                    outmesid(glassids, "DB105.34");// 派发调拨玻璃ID
                    return (200); // 结束
@@ -256,7 +267,7 @@
                    // 传输mes数据,坐标,数据
                    System.out.println("出片任务|" + datas);
                    S7control.getinstance().WriteWord(adddresslist, datas);// 派发出片车任务
                    S7control.getinstance().WriteWord("DB105.18", (short) 1);// 出片任务发送字改为1
                    outmesid(glassids, "DB105.34");// 派发调拨玻璃ID
                    return (200);// 结束
@@ -277,6 +288,7 @@
        byte[] bytes = Bytes.toArray(glassidlist);
        System.out.println("outmesidbytes:" + bytes.length);
        S7control.getinstance().WriteByte(address, bytes);// 派发出片id
    }
    // 获取地址内的玻璃id转字符串
@@ -329,4 +341,6 @@
        // }
    }
}