351 lines
14 KiB
Java
351 lines
14 KiB
Java
|
package com.cnbm.packing.dispatch;
|
|||
|
|
|||
|
import cn.hutool.core.util.RandomUtil;
|
|||
|
import com.cnbm.packing.dispatch.enums.kuka.step1.Step1Mes2PlcVar;
|
|||
|
import com.cnbm.packing.dispatch.enums.kuka.step1.Step1Plc2MesVar;
|
|||
|
import com.cnbm.packing.dispatch.enums.kuka.step2.Step2Mes2PlcVar;
|
|||
|
import com.cnbm.packing.dispatch.enums.kuka.step2.Step2Plc2MesVar;
|
|||
|
import com.cnbm.packing.dispatch.enums.kuka.step3.Step3Mes2PlcVar;
|
|||
|
import com.cnbm.packing.dispatch.enums.kuka.step3.Step3Plc2MesVar;
|
|||
|
import com.cnbm.packing.dto.WoPowerLevelDTO;
|
|||
|
import com.cnbm.packing.entity.WoPackagingBoxSubstrate;
|
|||
|
import com.cnbm.packing.entity.WoPowerLevel;
|
|||
|
import com.cnbm.packing.service.DynamicDataSourceService;
|
|||
|
import com.cnbm.packing.service.WoCompensationPowerServiceBiz;
|
|||
|
import com.cnbm.packing.service.WoPackagingBoxSubstrateServiceBiz;
|
|||
|
import com.cnbm.packing.service.WoPowerLevelServiceBiz;
|
|||
|
import com.cnbm.s7.s7connector.enmuc.S7Client;
|
|||
|
import com.cnbm.s7.s7connector.type.PlcVar;
|
|||
|
import org.slf4j.Logger;
|
|||
|
import org.slf4j.LoggerFactory;
|
|||
|
import org.springframework.beans.factory.annotation.Autowired;
|
|||
|
import org.springframework.boot.ApplicationArguments;
|
|||
|
import org.springframework.boot.ApplicationRunner;
|
|||
|
import org.springframework.core.annotation.Order;
|
|||
|
import org.springframework.stereotype.Component;
|
|||
|
|
|||
|
import java.time.LocalDateTime;
|
|||
|
import java.util.concurrent.Executors;
|
|||
|
import java.util.concurrent.ScheduledExecutorService;
|
|||
|
import java.util.concurrent.TimeUnit;
|
|||
|
|
|||
|
/**
|
|||
|
* @Desc: ""
|
|||
|
* @Author: caixiang
|
|||
|
* @DATE: 2022/12/23 12:33
|
|||
|
*/
|
|||
|
@Component
|
|||
|
@Order(value = 1)
|
|||
|
public class KukaJoinThread implements ApplicationRunner {
|
|||
|
private static final Logger logger = LoggerFactory.getLogger(KukaJoinThread.class);
|
|||
|
|
|||
|
@Autowired
|
|||
|
DynamicDataSourceService service;
|
|||
|
@Autowired
|
|||
|
WoPowerLevelServiceBiz levelServiceBiz;
|
|||
|
|
|||
|
@Autowired
|
|||
|
WoCompensationPowerServiceBiz compensationPowerServiceBiz;
|
|||
|
|
|||
|
@Autowired
|
|||
|
WoPackagingBoxSubstrateServiceBiz substrateServiceBiz;
|
|||
|
|
|||
|
public KukaJoinThread(){
|
|||
|
this.kukaStep1 = Executors.newScheduledThreadPool(1);
|
|||
|
this.kukaStep2 = Executors.newScheduledThreadPool(1);
|
|||
|
this.kukaStep3 = Executors.newScheduledThreadPool(1);
|
|||
|
}
|
|||
|
|
|||
|
private ScheduledExecutorService kukaStep1;
|
|||
|
private ScheduledExecutorService kukaStep2;
|
|||
|
private ScheduledExecutorService kukaStep3;
|
|||
|
|
|||
|
/**
|
|||
|
* return
|
|||
|
* 成功: 返回相应的object对象
|
|||
|
* 失败: 返回null
|
|||
|
* */
|
|||
|
private Object read(S7Client s7Client,Step1Plc2MesVar var) {
|
|||
|
try {
|
|||
|
return s7Client.read(var.getArea(), var.getAreaNumber(), var.getByteOffset(), var.getBitOffset(), var.getLength(), var.getStrSize(), var.getType());
|
|||
|
}catch (Exception e){
|
|||
|
logger.error("host:"+s7Client.getHost()+" ; read 操作出现问题: "+e.getMessage());
|
|||
|
e.printStackTrace();
|
|||
|
return null;
|
|||
|
}
|
|||
|
}
|
|||
|
private void write(S7Client s7Client, Step1Mes2PlcVar var, Object newValue) {
|
|||
|
if(var.getType().equals(PlcVar.STRING_Array)){
|
|||
|
String[] s = (String[])newValue;
|
|||
|
String[] ss = (String[])newValue;
|
|||
|
if(s.length > var.getLength() ){
|
|||
|
ss = new String[var.getLength()];
|
|||
|
for(int i=0;i< var.getLength();i++){
|
|||
|
ss[i] = s[i];
|
|||
|
}
|
|||
|
}
|
|||
|
s7Client.write(var.getArea(), var.getAreaNumber(), var.getByteOffset(), var.getBitOffset(), var.getStrSize(), var.getType(),ss);
|
|||
|
}else {
|
|||
|
s7Client.write(var.getArea(), var.getAreaNumber(), var.getByteOffset(), var.getBitOffset(), var.getStrSize(), var.getType(),newValue);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private Object read(S7Client s7Client, Step2Plc2MesVar var) {
|
|||
|
try {
|
|||
|
return s7Client.read(var.getArea(), var.getAreaNumber(), var.getByteOffset(), var.getBitOffset(), var.getLength(), var.getStrSize(), var.getType());
|
|||
|
}catch (Exception e){
|
|||
|
logger.error("host:"+s7Client.getHost()+" ; read 操作出现问题: "+e.getMessage());
|
|||
|
e.printStackTrace();
|
|||
|
return null;
|
|||
|
}
|
|||
|
}
|
|||
|
private void write(S7Client s7Client, Step2Mes2PlcVar var, Object newValue) {
|
|||
|
if(var.getType().equals(PlcVar.STRING_Array)){
|
|||
|
String[] s = (String[])newValue;
|
|||
|
String[] ss = (String[])newValue;
|
|||
|
if(s.length > var.getLength() ){
|
|||
|
ss = new String[var.getLength()];
|
|||
|
for(int i=0;i< var.getLength();i++){
|
|||
|
ss[i] = s[i];
|
|||
|
}
|
|||
|
}
|
|||
|
s7Client.write(var.getArea(), var.getAreaNumber(), var.getByteOffset(), var.getBitOffset(), var.getStrSize(), var.getType(),ss);
|
|||
|
}else {
|
|||
|
s7Client.write(var.getArea(), var.getAreaNumber(), var.getByteOffset(), var.getBitOffset(), var.getStrSize(), var.getType(),newValue);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private Object read(S7Client s7Client, Step3Plc2MesVar var) {
|
|||
|
try {
|
|||
|
return s7Client.read(var.getArea(), var.getAreaNumber(), var.getByteOffset(), var.getBitOffset(), var.getLength(), var.getStrSize(), var.getType());
|
|||
|
}catch (Exception e){
|
|||
|
logger.error("host:"+s7Client.getHost()+" ; read 操作出现问题: "+e.getMessage());
|
|||
|
e.printStackTrace();
|
|||
|
return null;
|
|||
|
}
|
|||
|
}
|
|||
|
private void write(S7Client s7Client, Step3Mes2PlcVar var, Object newValue) {
|
|||
|
if(var.getType().equals(PlcVar.STRING_Array)){
|
|||
|
String[] s = (String[])newValue;
|
|||
|
String[] ss = (String[])newValue;
|
|||
|
if(s.length > var.getLength() ){
|
|||
|
ss = new String[var.getLength()];
|
|||
|
for(int i=0;i< var.getLength();i++){
|
|||
|
ss[i] = s[i];
|
|||
|
}
|
|||
|
}
|
|||
|
s7Client.write(var.getArea(), var.getAreaNumber(), var.getByteOffset(), var.getBitOffset(), var.getStrSize(), var.getType(),ss);
|
|||
|
}else {
|
|||
|
s7Client.write(var.getArea(), var.getAreaNumber(), var.getByteOffset(), var.getBitOffset(), var.getStrSize(), var.getType(),newValue);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
@Override
|
|||
|
public void run(ApplicationArguments args) throws Exception {
|
|||
|
kukaStep1.execute(new Runnable() {
|
|||
|
@Override
|
|||
|
public void run() {
|
|||
|
while (true){
|
|||
|
//read one
|
|||
|
// logger.info("过程一 : "+ Arrays.toString((String[])read(S7Client.S7_1500,PlcVarActual.SubIdArrays)));
|
|||
|
// try {
|
|||
|
// Thread.sleep(300);
|
|||
|
// } catch (InterruptedException e) {
|
|||
|
// throw new S7ParseDataException(e);
|
|||
|
// }
|
|||
|
// //write one
|
|||
|
// String[] toWrite = new String[60];
|
|||
|
// for(int i=0;i<60;i++){
|
|||
|
// toWrite[i] = RandomStringUtils.randomAlphanumeric(18);
|
|||
|
// }
|
|||
|
// try {
|
|||
|
// write(S7Client.S7_1500,PlcVarActual.SubIdArrays,toWrite);
|
|||
|
// } catch (Exception e) {
|
|||
|
// throw new S7ParseDataException(e);
|
|||
|
// }
|
|||
|
|
|||
|
|
|||
|
}
|
|||
|
}
|
|||
|
});
|
|||
|
|
|||
|
kukaStep1.scheduleAtFixedRate(new Runnable() {
|
|||
|
@Override
|
|||
|
public void run() {
|
|||
|
//调度开始
|
|||
|
logger.info("");
|
|||
|
logger.info("================= 现在开始执行 过程一 任务 ==================");
|
|||
|
Integer subArrived = waitingForTarget(Step1Plc2MesVar.SubArrivedToMes, true);
|
|||
|
if(subArrived != 1){
|
|||
|
logger.info("失败"+" --- "+"步骤1. MES监听 Step1Plc2MesVar.SubArrivedToMes 是否 等于 1 失败");
|
|||
|
}
|
|||
|
|
|||
|
//1. 从plc 中获取 subId 和 lineNum
|
|||
|
String subId = (String) read(S7Client.S7_KUKA,Step1Plc2MesVar.SubIdToMes);
|
|||
|
Integer lineNum = (Integer) read(S7Client.S7_KUKA,Step1Plc2MesVar.LineNum);
|
|||
|
//2. 从comline数据库中获取 实际pmpp
|
|||
|
float pmppBySubId = service.getPMPPBySubId(subId);
|
|||
|
//3. 匹配和计算补偿功率
|
|||
|
float actualPMPP = compensationPowerServiceBiz.calculCompensationPMPP(pmppBySubId,lineNum);
|
|||
|
//4. 依据补偿功率,获取工艺参数,并且把这些工艺参数传给kuka
|
|||
|
WoPowerLevel argByPMPP = levelServiceBiz.getArgByPMPP(actualPMPP, lineNum);
|
|||
|
write(S7Client.S7_KUKA,Step1Mes2PlcVar.dLable_Pnom,argByPMPP.getPowerClass());
|
|||
|
write(S7Client.S7_KUKA,Step1Mes2PlcVar.dLable_Voc,argByPMPP.getLableVoc());
|
|||
|
write(S7Client.S7_KUKA,Step1Mes2PlcVar.dLable_Isc,argByPMPP.getLableIsc());
|
|||
|
write(S7Client.S7_KUKA,Step1Mes2PlcVar.dLable_Vmpp,argByPMPP.getLableVmpp());
|
|||
|
write(S7Client.S7_KUKA,Step1Mes2PlcVar.dLable_Impp,argByPMPP.getLableImpp());
|
|||
|
|
|||
|
|
|||
|
//5. 把基板录到数据库
|
|||
|
WoPackagingBoxSubstrate woPackagingBoxSubstrate = new WoPackagingBoxSubstrate();
|
|||
|
woPackagingBoxSubstrate.setLineBody(1);
|
|||
|
woPackagingBoxSubstrate.setPowerLevel(argByPMPP.getPowerClass().toString());
|
|||
|
woPackagingBoxSubstrate.setSapMaterial(argByPMPP.getSapMaterialNum());
|
|||
|
woPackagingBoxSubstrate.setWoSubstrateId("sub123");
|
|||
|
|
|||
|
substrateServiceBiz.insert(woPackagingBoxSubstrate);
|
|||
|
|
|||
|
|
|||
|
|
|||
|
}
|
|||
|
},1,1, TimeUnit.SECONDS);
|
|||
|
|
|||
|
kukaStep2.scheduleAtFixedRate(new Runnable() {
|
|||
|
@Override
|
|||
|
public void run() {
|
|||
|
try {
|
|||
|
String s = RandomUtil.randomString(5);
|
|||
|
System.out.println("start + "+s+" : "+LocalDateTime.now());
|
|||
|
Thread.sleep(3000);
|
|||
|
|
|||
|
|
|||
|
//写业务代码
|
|||
|
WoPowerLevel argByPMPP = levelServiceBiz.getArgByPMPP(2.1111f, 1);
|
|||
|
|
|||
|
|
|||
|
WoPackagingBoxSubstrate woPackagingBoxSubstrate = new WoPackagingBoxSubstrate();
|
|||
|
woPackagingBoxSubstrate.setLineBody(1);
|
|||
|
woPackagingBoxSubstrate.setPowerLevel(argByPMPP.getPowerClass().toString());
|
|||
|
woPackagingBoxSubstrate.setSapMaterial(argByPMPP.getSapMaterialNum());
|
|||
|
woPackagingBoxSubstrate.setWoSubstrateId("sub123");
|
|||
|
|
|||
|
substrateServiceBiz.insert(woPackagingBoxSubstrate);
|
|||
|
|
|||
|
System.err.println(argByPMPP.toString());
|
|||
|
// service.salve3Get();
|
|||
|
System.out.println("end "+ s +" : "+ LocalDateTime.now());
|
|||
|
}catch (Throwable e){
|
|||
|
//Error 和 Exception 都继承于Throwable ,所以当业务代码出现Error/Exception 都不会导致程序down掉
|
|||
|
e.printStackTrace();
|
|||
|
}
|
|||
|
}
|
|||
|
},1,1, TimeUnit.SECONDS);
|
|||
|
|
|||
|
|
|||
|
kukaStep3.scheduleAtFixedRate(new Runnable() {
|
|||
|
@Override
|
|||
|
public void run() {
|
|||
|
try {
|
|||
|
String s = RandomUtil.randomString(5);
|
|||
|
System.out.println("start + "+s+" : "+LocalDateTime.now());
|
|||
|
Thread.sleep(3000);
|
|||
|
|
|||
|
|
|||
|
//写业务代码
|
|||
|
service.salve1Get();
|
|||
|
// service.salve3Get();
|
|||
|
System.out.println("end "+ s +" : "+ LocalDateTime.now());
|
|||
|
}catch (Throwable e){
|
|||
|
//Error 和 Exception 都继承于Throwable ,所以当业务代码出现Error/Exception 都不会导致程序down掉
|
|||
|
e.printStackTrace();
|
|||
|
}
|
|||
|
}
|
|||
|
},1,1, TimeUnit.SECONDS);
|
|||
|
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
*
|
|||
|
* arg:
|
|||
|
* Step1Plc2MesVar 参数类型
|
|||
|
* targetValue 目的值
|
|||
|
* return:
|
|||
|
* 2 s7 访问异常;
|
|||
|
* 1 成功;
|
|||
|
* */
|
|||
|
private Integer waitingForTarget(Step1Plc2MesVar var, Boolean targetValue) {
|
|||
|
Integer res = 0;
|
|||
|
while (true){
|
|||
|
try {
|
|||
|
Boolean now = (Boolean) read(S7Client.S7_KUKA,var);
|
|||
|
if(targetValue.equals(now)){
|
|||
|
res = 1;
|
|||
|
break;
|
|||
|
}
|
|||
|
Thread.sleep(200);
|
|||
|
}catch (Exception e){
|
|||
|
logger.info("S7 数据采集 异常。");
|
|||
|
res = 2;
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
return res;
|
|||
|
}
|
|||
|
/**
|
|||
|
*
|
|||
|
* arg:
|
|||
|
* Step2Plc2MesVar 参数类型
|
|||
|
* targetValue 目的值
|
|||
|
* return:
|
|||
|
* 2 s7 访问异常;
|
|||
|
* 1 成功;
|
|||
|
* */
|
|||
|
private Integer waitingForTarget(Step2Plc2MesVar var, Boolean targetValue) {
|
|||
|
Integer res = 0;
|
|||
|
while (true){
|
|||
|
try {
|
|||
|
Boolean now = (Boolean) read(S7Client.S7_KUKA,var);
|
|||
|
if(targetValue.equals(now)){
|
|||
|
res = 1;
|
|||
|
break;
|
|||
|
}
|
|||
|
Thread.sleep(200);
|
|||
|
}catch (Exception e){
|
|||
|
logger.info("S7 数据采集 异常。");
|
|||
|
res = 2;
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
return res;
|
|||
|
}
|
|||
|
/**
|
|||
|
*
|
|||
|
* arg:
|
|||
|
* Step3Plc2MesVar 参数类型
|
|||
|
* targetValue 目的值
|
|||
|
* return:
|
|||
|
* 2 s7 访问异常;
|
|||
|
* 1 成功;
|
|||
|
* */
|
|||
|
private Integer waitingForTarget(Step3Plc2MesVar var, Boolean targetValue) {
|
|||
|
Integer res = 0;
|
|||
|
while (true){
|
|||
|
try {
|
|||
|
Boolean now = (Boolean) read(S7Client.S7_KUKA,var);
|
|||
|
if(targetValue.equals(now)){
|
|||
|
res = 1;
|
|||
|
break;
|
|||
|
}
|
|||
|
Thread.sleep(200);
|
|||
|
}catch (Exception e){
|
|||
|
logger.info("S7 数据采集 异常。");
|
|||
|
res = 2;
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
return res;
|
|||
|
}
|
|||
|
}
|