| | |
| | | |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; |
| | | import com.github.xingshuangs.iot.protocol.modbus.service.ModbusTcp; |
| | | import com.github.xingshuangs.iot.protocol.s7.serializer.S7Serializer; |
| | | import com.kangaroohy.milo.model.ReadWriteEntity; |
| | | import com.kangaroohy.milo.service.MiloService; |
| | | import com.mes.common.config.Const; |
| | |
| | | import com.mes.pp.entity.OptimizeHeatLayout; |
| | | import com.mes.pp.service.OptimizeHeatDetailService; |
| | | import com.mes.pp.service.OptimizeHeatLayoutService; |
| | | import com.mes.s7.entity.S7DataGHOne; |
| | | import com.mes.temperingglass.entity.TemperingGlassInfo; |
| | | import com.mes.temperingglass.service.TemperingGlassInfoService; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.commons.lang.StringUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.beans.factory.annotation.Qualifier; |
| | | import org.springframework.scheduling.annotation.Scheduled; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | |
| | | @Autowired |
| | | private OptimizeHeatDetailService optimizeHeatDetailService; |
| | | |
| | | @Autowired |
| | | @Qualifier("s7SerializerGHOne") |
| | | private S7Serializer s7SerializerGHOne; |
| | | |
| | | @Autowired |
| | | ModbusTcp tempModbusTcp; |
| | | |
| | | private Integer offset = 40001; |
| | | |
| | | /** |
| | | * 摆片台请求进片逻辑处理 |
| | | * fixedRate : 上一个调用开始后再次调用的延时(不用等待上一次调用完成) |
| | |
| | | */ |
| | | @Scheduled(fixedDelay = 1000) |
| | | public void requestTemperingTask() throws Exception { |
| | | ReadWriteEntity requestInTempering = miloService.readFromOpcUa("GH1S7.GH1S7.requestInTempering");//请求进片 |
| | | ReadWriteEntity requestTemperingId = miloService.readFromOpcUa("GH1S7.GH1S7.requestTemperingId");//请求进片 炉号ID |
| | | Integer request = Integer.parseInt(requestInTempering.getValue().toString()); |
| | | Integer id = Integer.parseInt(requestTemperingId.getValue().toString()); |
| | | S7DataGHOne s7DataGHOne = s7SerializerGHOne.read(S7DataGHOne.class); |
| | | log.info("读取到的GH1S7.GH1S7数据:{}", s7DataGHOne); |
| | | // ReadWriteEntity requestInTempering = miloService.readFromOpcUa("GH1S7.GH1S7.requestInTempering");//请求进片 |
| | | // ReadWriteEntity requestTemperingId = miloService.readFromOpcUa("GH1S7.GH1S7.requestTemperingId");//请求进片 炉号ID |
| | | // Integer request = Integer.parseInt(requestInTempering.getValue().toString()); |
| | | // Integer id = Integer.parseInt(requestTemperingId.getValue().toString()); |
| | | Integer request = (int) s7DataGHOne.getRequestInTempering(); |
| | | Integer id = (int) s7DataGHOne.getRequestTemperingId(); |
| | | if (request == 0) { |
| | | miloService.writeToOpcUa(generateReadWriteEntity("GH1S7.GH1S7.responseInTempering", 0));//允许送片清零 |
| | | // miloService.writeToOpcUa(generateReadWriteEntity("GH1S7.GH1S7.responseInTempering", 0));//允许送片清零 |
| | | s7SerializerGHOne.write( |
| | | S7DataGHOne.builder().responseInTempering(0).build() |
| | | ); |
| | | } else { |
| | | if (id == 0){ |
| | | if (id == 0) { |
| | | log.info("炉号不能为0"); |
| | | return; |
| | | } |
| | | ReadWriteEntity placedNumber = miloService.readFromOpcUa("GH1S7.GH1S7.placedNumber");//已摆片数量 |
| | | // ReadWriteEntity placedNumber = miloService.readFromOpcUa("GH1S7.GH1S7.placedNumber");//已摆片数量 |
| | | String placedNumber = s7DataGHOne.getPlacedNumber().toString();//已摆片数量 |
| | | List<TemperingGlassInfo> glassList = temperingAgoService.selectGlassInfoById(id); |
| | | if (Integer.parseInt(placedNumber.getValue().toString()) == glassList.size()) { |
| | | miloService.writeToOpcUa(generateReadWriteEntity("GH1S7.GH1S7.responseInTempering", 1));//写入允许送片 |
| | | // if (Integer.parseInt(placedNumber.getValue().toString()) == glassList.size()) { |
| | | if (Integer.parseInt(placedNumber) == glassList.size()) { |
| | | // miloService.writeToOpcUa(generateReadWriteEntity("GH1S7.GH1S7.responseInTempering", 1));//写入允许送片 |
| | | s7SerializerGHOne.write( |
| | | S7DataGHOne.builder().responseInTempering(1).build() |
| | | ); |
| | | } else { |
| | | miloService.writeToOpcUa(generateReadWriteEntity("GH1S7.GH1S7.responseInTempering", 2));//不满足进炉条件 |
| | | // miloService.writeToOpcUa(generateReadWriteEntity("GH1S7.GH1S7.responseInTempering", 2));//不满足进炉条件 |
| | | s7SerializerGHOne.write( |
| | | S7DataGHOne.builder().responseInTempering(2).build() |
| | | ); |
| | | } |
| | | } |
| | | } |
| | |
| | | */ |
| | | @Scheduled(fixedDelay = 1000) |
| | | public void loadTemperingTask() throws Exception { |
| | | ReadWriteEntity loadTemperingId = miloService.readFromOpcUa("GH1S7.GH1S7.loadTemperingId");//进片完成 炉号ID |
| | | getNewTemperingID(Integer.parseInt(loadTemperingId.getValue().toString()));//进片完成 下发参数 |
| | | S7DataGHOne s7DataGHOne = s7SerializerGHOne.read(S7DataGHOne.class); |
| | | log.info("读取到的GH1S7.GH1S7数据:{}", s7DataGHOne); |
| | | Integer loadTemperingId = s7DataGHOne.getLoadTemperingId();//进片完成 炉号ID |
| | | getNewTemperingID(loadTemperingId);//进片完成 下发参数 |
| | | // ReadWriteEntity loadTemperingId = miloService.readFromOpcUa("GH1S7.GH1S7.loadTemperingId");//进片完成 炉号ID |
| | | // getNewTemperingID(Integer.parseInt(loadTemperingId.getValue().toString()));//进片完成 下发参数 |
| | | // getNewTemperingID(19); |
| | | } |
| | | |
| | | /** |
| | | * 更新钢化小片表内的玻璃状态 |
| | | * fixedRate : 上一个调用开始后再次调用的延时(不用等待上一次调用完成) |
| | |
| | | */ |
| | | @Scheduled(fixedDelay = 5000) |
| | | public void updateTemperingTask() throws Exception { |
| | | ReadWriteEntity furanchiIdEntity = miloService.readFromOpcUa("GH1.GH1.Furanch1Id");//进片完成 炉号ID |
| | | if (StringUtils.isNotBlank(furanchiIdEntity.getValue()+"")){ |
| | | int temperingid = Integer.parseInt(furanchiIdEntity.getValue().toString()); |
| | | int furanchiIdEntity = tempModbusTcp.readUInt16(40461 - offset); |
| | | if (StringUtils.isNotBlank(furanchiIdEntity + "")) { |
| | | int temperingid = furanchiIdEntity; |
| | | // ReadWriteEntity furanchiIdEntity = miloService.readFromOpcUa("GH1.GH1.Furanch1Id");//进片完成 炉号ID |
| | | // if (StringUtils.isNotBlank(furanchiIdEntity.getValue()+"")){ |
| | | // int temperingid = Integer.parseInt(furanchiIdEntity.getValue().toString()); |
| | | temperingAgoService.update(new LambdaUpdateWrapper<TemperingGlassInfo>().set(TemperingGlassInfo::getState, Const.TEMPERING_START) |
| | | .in(TemperingGlassInfo::getState, Const.TEMPERING_OUT, Const.TEMPERING_DROP).eq(TemperingGlassInfo::getTemperingLayoutId,temperingid)); |
| | | .in(TemperingGlassInfo::getState, Const.TEMPERING_OUT, Const.TEMPERING_DROP).eq(TemperingGlassInfo::getTemperingLayoutId, temperingid)); |
| | | } |
| | | |
| | | |
| | |
| | | |
| | | //获取到炉号id执行参数下发任务 |
| | | private void getNewTemperingID(Integer temperingid) throws Exception { |
| | | ReadWriteEntity autoStatus = miloService.readFromOpcUa("GH1.GH1.AutoStatus"); |
| | | if (1 != Integer.parseInt(autoStatus.getValue().toString())) { |
| | | int autoStatus = tempModbusTcp.readUInt16(40451 - offset); |
| | | if (1 != autoStatus) { |
| | | // ReadWriteEntity autoStatus = miloService.readFromOpcUa("GH1.GH1.AutoStatus"); |
| | | // if (1 != Integer.parseInt(autoStatus.getValue().toString())) { |
| | | log.info("当前为非联机状态,结束钢化下发参数任务"); |
| | | return; |
| | | } |
| | | ReadWriteEntity QandA = miloService.readFromOpcUa("GH1.GH1.QandA"); |
| | | ReadWriteEntity RecipeStatus = miloService.readFromOpcUa("GH1.GH1.RecipeStatus"); |
| | | if (1 == Integer.parseInt(QandA.getValue().toString()) && 2 == Integer.parseInt(RecipeStatus.getValue().toString())) { |
| | | int QandA = tempModbusTcp.readUInt16(40422 - offset); |
| | | int RecipeStatus = tempModbusTcp.readUInt16(40456 - offset); |
| | | if (1 == QandA && 2 == RecipeStatus) { |
| | | // ReadWriteEntity QandA = miloService.readFromOpcUa("GH1.GH1.QandA"); |
| | | // ReadWriteEntity RecipeStatus = miloService.readFromOpcUa("GH1.GH1.RecipeStatus"); |
| | | // if (1 == Integer.parseInt(QandA.getValue().toString()) && 2 == Integer.parseInt(RecipeStatus.getValue().toString())) { |
| | | log.info("版面信息已经下发,并且已经匹配参数,结束钢化下发参数任务"); |
| | | return; |
| | | } |
| | |
| | | shape = shape > 10000 ? 10000 : shape; |
| | | int workmode = 0; //工位数 |
| | | int furmode = 0; //双室/联室 |
| | | tempModbusTcp.writeUInt16(40408 - offset, temperingid); |
| | | tempModbusTcp.writeUInt16(40409 - offset, glasstype); |
| | | tempModbusTcp.writeUInt16(40411 - offset, process); |
| | | tempModbusTcp.writeUInt16(40412 - offset, thiness); |
| | | tempModbusTcp.writeUInt16(40413 - offset, loadingRate); |
| | | tempModbusTcp.writeUInt16(40414 - offset, shape); |
| | | tempModbusTcp.writeUInt16(40415 - offset, workmode); |
| | | tempModbusTcp.writeUInt16(40416 - offset, furmode); |
| | | |
| | | miloService.writeToOpcUa(generateReadWriteEntity("GH1.GH1.TemperingId", temperingid));//写入炉号 |
| | | miloService.writeToOpcUa(generateReadWriteEntity("GH1.GH1.GlassType", glasstype));//写入玻璃类型 |
| | | miloService.writeToOpcUa(generateReadWriteEntity("GH1.GH1.Process", process));//写入钢化类型 全钢 半钢 防火 |
| | | miloService.writeToOpcUa(generateReadWriteEntity("GH1.GH1.Thickness", thiness));//写入厚度 |
| | | miloService.writeToOpcUa(generateReadWriteEntity("GH1.GH1.LoadingRate", loadingRate));//写入装载率 |
| | | miloService.writeToOpcUa(generateReadWriteEntity("GH1.GH1.Shape", shape));//写入大片比例 |
| | | miloService.writeToOpcUa(generateReadWriteEntity("GH1.GH1.WorkMode", workmode));//写入工位数 |
| | | miloService.writeToOpcUa(generateReadWriteEntity("GH1.GH1.FurnaceMode", furmode));//写入炉体工作方式 |
| | | // miloService.writeToOpcUa(generateReadWriteEntity("GH1.GH1.TemperingId", temperingid));//写入炉号 |
| | | // miloService.writeToOpcUa(generateReadWriteEntity("GH1.GH1.GlassType", glasstype));//写入玻璃类型 |
| | | // miloService.writeToOpcUa(generateReadWriteEntity("GH1.GH1.Process", process));//写入钢化类型 全钢 半钢 防火 |
| | | // miloService.writeToOpcUa(generateReadWriteEntity("GH1.GH1.Thickness", thiness));//写入厚度 |
| | | // miloService.writeToOpcUa(generateReadWriteEntity("GH1.GH1.LoadingRate", loadingRate));//写入装载率 |
| | | // miloService.writeToOpcUa(generateReadWriteEntity("GH1.GH1.Shape", shape));//写入大片比例 |
| | | // miloService.writeToOpcUa(generateReadWriteEntity("GH1.GH1.WorkMode", workmode));//写入工位数 |
| | | // miloService.writeToOpcUa(generateReadWriteEntity("GH1.GH1.FurnaceMode", furmode));//写入炉体工作方式 |
| | | log.info("炉号" + temperingid + "版面信息尝试下发"); |
| | | } |
| | | } |
| | | } |
| | | |
| | | |