UnLoadGlassModule/mockPLCData.properties
@@ -1,5 +1,5 @@ #Mock S7 PLC Data #Thu Mar 21 15:03:15 CST 2024 #Wed Mar 27 10:21:54 CST 2024 DB4.0.0=false DB4.1.1=false DB4.1.0=false UnLoadGlassModule/src/main/java/com/mes/config/AppRunnerConfig.java
@@ -1,6 +1,7 @@ package com.mes.config; import com.mes.service.PLCAutoMes; import com.mes.service.Plchome; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.core.annotation.Order; @@ -23,7 +24,7 @@ // new PlcHold().start(); new PLCAutoMes().start(); // new Plchome().start(); new Plchome().start(); // new PlcLayout().start(); // new Plcalarm().start(); UnLoadGlassModule/src/main/java/com/mes/controller/DownGlassInfoController.java
@@ -21,6 +21,8 @@ return downGlassInfoService.getDownGlassInfoById(id); } // @GetMapping("/messages") // public String getMessages() throws IOException, TimeoutException { // List<String> messages = new ArrayList<>(); @@ -33,4 +35,6 @@ // } } UnLoadGlassModule/src/main/java/com/mes/entity/DownGlassInfo.java
@@ -15,5 +15,7 @@ private Double width; // 宽 private Double height; // 高 private Double thickness; // 厚度 private String filmsid;//膜系 } UnLoadGlassModule/src/main/java/com/mes/entity/DownWorkstation.java
@@ -14,4 +14,7 @@ private Integer deviceId; // 设备id private Integer enableState; // 启用状态 private Integer workState; // 工作状态 private Integer racks_number; // 已落架数量 private Integer total_quantity; // 总数量 } UnLoadGlassModule/src/main/java/com/mes/mapper/DownGlassInfoMapper.java
@@ -4,12 +4,27 @@ import com.baomidou.mybatisplus.annotation.InterceptorIgnore; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.mes.entity.DownGlassInfo; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.*; import org.springframework.stereotype.Repository; import java.util.List; @Mapper @Repository @InterceptorIgnore(tenantLine = "true") @DS("hangzhoumes") // 指定使用 hangzhoumes 数据源 public interface DownGlassInfoMapper extends BaseMapper<DownGlassInfo> { // 查询下片任务表中状态为1的下片信息 @Select("SELECT flow_card_id,filmsid,width,height,thickness FROM down_glass_task WHERE state = 1;") List<DownGlassInfo> selectunloadingtaskstate(); @Update("UPDATE down_glass_task SET state = 0 WHERE flow_card_id = #{flowCardId}") void updateTaskStateToZero(@Param("flowCardId") String flowCardId); @Select("SELECT MAX(sequence) FROM down_glass_info WHERE flow_card_id = #{flowCardId} LIMIT 1") Integer getMaxSequenceByFlowCardId(@Param("flowCardId") String flowCardId); @Delete("delete from down_glass_task where flow_card_id = #{flowCardId}") void deletetask(@Param("flowCardId") String flowCardId); } UnLoadGlassModule/src/main/java/com/mes/mapper/DownWorkstationMapper.java
@@ -3,6 +3,7 @@ import com.baomidou.dynamic.datasource.annotation.DS; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.mes.entity.DownGlassInfo; import com.mes.entity.DownWorkstation; import org.apache.ibatis.annotations.*; import org.springframework.stereotype.Component; @@ -34,8 +35,22 @@ //根据设备ID查询工位信息 @Select("SELECT * FROM down_workstation WHERE device_id = #{deviceId}") List<DownWorkstation> selectByDeviceId(@Param("deviceId") Integer deviceId); //从机械手任务表查询状态为1的流程卡号 // @Select("SELECT * FROM down_workstation_task WHERE state = 1") // List<DownWorkstation> selectdownWorkstationstate(); @Select("SELECT dw.flow_card_id,dw.racks_number FROM down_workstation_task dwt JOIN down_workstation dw ON dwt.flow_card_id = dw.flow_card_id WHERE dwt.state = 1 LIMIT 1") List<DownWorkstation> selectdownWorkstationstate(); @Update("UPDATE down_workstation SET racks_number = #{racksNumber} " + "WHERE flow_card_id = #{flowCardId}") void update_racks_number(@Param("flowCardId") String flowCardId, @Param("racksNumber") Integer racksNumber); @Insert("INSERT INTO down_workstation_task (flow_card_id, width, height, thickness, filmsid,state) " + "VALUES (#{flowCardId}, #{width}, #{height}, #{thickness}, #{filmsid},1)") void insertdownWorkstationtask(DownGlassInfo downGlassInfo); UnLoadGlassModule/src/main/java/com/mes/service/DownGlassInfoService.java
@@ -17,4 +17,6 @@ public DownGlassInfo getDownGlassInfoById(Integer id) { return downGlassInfoMapper.selectById(id); } } UnLoadGlassModule/src/main/java/com/mes/service/PlcService.java
@@ -1,24 +1,30 @@ package com.mes.service; import com.mes.common.PlcTools.MockS7PLCtwo; import com.mes.entity.DownGlassInfo; import com.mes.entity.DownStorageCageDetails; import com.mes.entity.DownWorkstation; import com.mes.entity.device.PlcParameterObject; import com.mes.mapper.DownGlassInfoMapper; import com.mes.mapper.DownWorkstationMapper; import com.mes.tools.WebSocketServer; import lombok.Data; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @Data @Service public class PlcService { @Autowired private DownWorkstationMapper downWorkstationMapper; private DownGlassInfo downGlassInfo; private DownWorkstation downWorkstation; private DownGlassInfoMapper downGlassInfoMapper; private DownGlassInfoService downGlassInfoService; @@ -34,29 +40,99 @@ String PLCwancheng = plcread.getPlcParameter("A01Position").getValue();// plc完成字 public void performPlcActions() { //当下片任务表状态为1时候将数据插入到下片玻璃信息表 public void insertdownglassinfo() { downWorkstationMapper = WebSocketServer.applicationContext.getBean(DownWorkstationMapper.class); downGlassInfoService = WebSocketServer.applicationContext.getBean(DownGlassInfoService.class); PlcParameterObject plcmes=PLCAutoMes.PlcMesObject; int workstationId = 1; int deviceId = 2; int newWorkState = 9; downWorkstationMapper.updateWorkStateByWorkstationIdAndDeviceId(workstationId, deviceId, newWorkState); downGlassInfoMapper = WebSocketServer.applicationContext.getBean(DownGlassInfoMapper.class); List<DownGlassInfo> taskdownGlassInf = downGlassInfoMapper.selectunloadingtaskstate(); // if (taskdownGlassInf != null && !taskdownGlassInf.isEmpty()) { DownGlassInfo downGlassInfo = downGlassInfoService.getDownGlassInfoById(1); Boolean[] value4 = { false, true, true, true, true, true, false, false, false, false}; List<Boolean> booldata2 = new ArrayList<>(Arrays.asList(value4)); MockS7PLCtwo.getInstance().writebits("DB4.0.0", booldata2); List<Boolean> data4= MockS7PLCtwo.getInstance().readbits("DB4.0.0",10); System.out.println("读取的word值: " + data4); String OutActivate=plcmes.getPlcParameter("OutActivate").getValue(); byte[] getplcvalues = MockS7PLCtwo.getInstance().readByte("DB101.0", 2); System.out.println(Arrays.toString(getplcvalues)); //System.out.println("读取的通讯word值: " + OutActivate); // 其他与 PLC 相关的操作... for (DownGlassInfo downGlassInfo : taskdownGlassInf) { // 创建新的 DownGlassInfo 对象并设置相关属性 DownGlassInfo newdownGlassInfo = new DownGlassInfo(); newdownGlassInfo.setFlowCardId(downGlassInfo.getFlowCardId()); Integer maxSequence = downGlassInfoMapper.getMaxSequenceByFlowCardId(downGlassInfo.getFlowCardId()); int sequence = maxSequence != null ? maxSequence + 1 : 1; // 初始化顺序字段值 newdownGlassInfo.setWidth(downGlassInfo.getWidth()); newdownGlassInfo.setHeight(downGlassInfo.getHeight()); newdownGlassInfo.setThickness(downGlassInfo.getThickness()); newdownGlassInfo.setFilmsid(downGlassInfo.getFilmsid()); newdownGlassInfo.setSequence(sequence); // 设置顺序字段值 // 插入数据到下片玻璃信息表 downGlassInfoMapper.insert(newdownGlassInfo); //插入数据到机械手任务表 downWorkstationMapper.insertdownWorkstationtask(newdownGlassInfo); //更新任务表状态为0 downGlassInfoMapper.updateTaskStateToZero(downGlassInfo.getFlowCardId()); sequence++; // 递增顺序字段值 } } } //当机械手任务表中状态为1,工位表流程卡绑定了架子 更新已经落架数量,并且把下片任务表的对应记录删掉 public void down_workstation(){ //downWorkstationMapper = WebSocketServer.applicationContext.getBean(DownWorkstationMapper.class); //downGlassInfoMapper = WebSocketServer.applicationContext.getBean(DownGlassInfoMapper.class); try { List<DownWorkstation> taskdownWorkstation = downWorkstationMapper.selectdownWorkstationstate(); if (taskdownWorkstation != null && !taskdownWorkstation.isEmpty()) { //查询下片工位表中是否绑定了架子是否绑定了流程卡号,如果已经绑定则更新已落架数量,并且删除下片任务表中的记录 for (DownWorkstation downWorkstation : taskdownWorkstation) { downWorkstationMapper.update_racks_number(downWorkstation.getFlowCardId(),6 ); downGlassInfoMapper.deletetask(downWorkstation.getFlowCardId()); } } } catch (Exception e) { // 打印异常信息 e.printStackTrace(); // 或者可以进行其他异常处理,比如记录日志或者返回特定的错误信息 } } //绑定流程卡号架子 public void bindingshelf(DownWorkstation downWorkstation){ String FlowCardId=downWorkstation.getFlowCardId(); int WorkstationId=downWorkstation.getWorkstationId(); } UnLoadGlassModule/src/main/java/com/mes/service/Plchome.java
@@ -14,6 +14,8 @@ this.plcServiceSupplier = () -> WebSocketServer.applicationContext.getBean(PlcService.class); } @Override public void run() { while (!Thread.currentThread().isInterrupted()) { @@ -21,7 +23,18 @@ i++; Thread.sleep(100); PlcService plcService = plcServiceSupplier.get(); plcService.performPlcActions(); // plcService.performPlcActions(); //plcService.unloadpush(); //当下片任务表状态为1时候将数据插入到下片玻璃信息表 plcService.insertdownglassinfo(); //当机械手任务表中状态为1 更新已经落架数量,并且把下片任务表的那条记录删掉 工位表流程卡绑定了架子 plcService.down_workstation(); } catch (InterruptedException e) { Thread.currentThread().interrupt(); e.printStackTrace();