12 changed files with 0 additions and 2449 deletions
@ -1,111 +0,0 @@ |
|||
package org.nl.acs.device_driver.tianneng.guhuashi; |
|||
|
|||
import lombok.Data; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.nl.acs.device.device_driver.standard_inspect.ItemDto; |
|||
|
|||
import java.util.ArrayList; |
|||
import java.util.List; |
|||
|
|||
@Slf4j |
|||
@Data |
|||
public class ItemProtocol { |
|||
|
|||
public static String item_heartbeat = "heartbeat"; |
|||
public static String item_mode = "mode"; |
|||
public static String item_move = "move"; |
|||
public static String item_action = "action"; |
|||
public static String item_error = "error"; |
|||
public static String item_to_command = "to_command"; |
|||
public static String item_to_target = "to_target"; |
|||
public static String item_to_task = "to_task"; |
|||
public static String item_weight = "weight"; |
|||
public static String item_material_type = "material_type"; |
|||
public static String item_barcode = "barcode"; |
|||
|
|||
private StandardInspectSiteDeviceDriver driver; |
|||
|
|||
public ItemProtocol(StandardInspectSiteDeviceDriver driver) { |
|||
this.driver = driver; |
|||
} |
|||
|
|||
public int getHeartbeat() { |
|||
return this.getOpcIntegerValue(item_heartbeat); |
|||
} |
|||
|
|||
public int getMode() { |
|||
return this.getOpcIntegerValue(item_mode); |
|||
} |
|||
|
|||
public int getMove() { |
|||
return this.getOpcIntegerValue(item_move); |
|||
} |
|||
|
|||
public int getAction() { |
|||
return this.getOpcIntegerValue(item_action); |
|||
} |
|||
|
|||
public int getError() { |
|||
return this.getOpcIntegerValue(item_error); |
|||
} |
|||
|
|||
|
|||
public int getMaterialType() { |
|||
return this.getOpcIntegerValue(item_material_type); |
|||
} |
|||
public int getBarcode() { |
|||
return this.getOpcIntegerValue(item_barcode); |
|||
} |
|||
|
|||
public int getToCommand() { |
|||
return this.getOpcIntegerValue(item_to_command); |
|||
} |
|||
|
|||
public int getToTarget() { |
|||
return this.getOpcIntegerValue(item_to_target); |
|||
} |
|||
|
|||
public int getToTask() { |
|||
return this.getOpcIntegerValue(item_to_task); |
|||
} |
|||
|
|||
//是否有货
|
|||
public int hasGoods(int move) { |
|||
return move; |
|||
} |
|||
|
|||
Boolean isonline; |
|||
|
|||
public int getOpcIntegerValue(String protocol) { |
|||
Integer value = this.driver.getIntegeregerValue(protocol); |
|||
if (value == null) { |
|||
// log.error(this.getDriver().getDeviceCode() + ":protocol " + protocol + " 信号同步异常!");
|
|||
setIsonline(false); |
|||
} else { |
|||
setIsonline(true); |
|||
return value; |
|||
} |
|||
return 0; |
|||
|
|||
} |
|||
|
|||
public static List<ItemDto> getReadableItemDtos() { |
|||
ArrayList list = new ArrayList(); |
|||
list.add(new ItemDto(item_heartbeat, "心跳", "DB600.B0")); |
|||
list.add(new ItemDto(item_mode, "工作状态", "DB600.B2", Boolean.valueOf(true))); |
|||
list.add(new ItemDto(item_move, "光电开关信号", "DB600.B3")); |
|||
list.add(new ItemDto(item_action, "取放信号", "DB600.B4")); |
|||
list.add(new ItemDto(item_material_type, "物料类型", "DB600.D6")); |
|||
list.add(new ItemDto(item_error, "报警信号", "DB600.B7")); |
|||
list.add(new ItemDto(item_barcode, "条码", "DB600.D8")); |
|||
return list; |
|||
} |
|||
|
|||
public static List<ItemDto> getWriteableItemDtos() { |
|||
ArrayList list = new ArrayList(); |
|||
list.add(new ItemDto(item_to_command, "作业命令", "DB601.W2", Boolean.valueOf(true))); |
|||
return list; |
|||
} |
|||
|
|||
} |
|||
|
@ -1,62 +0,0 @@ |
|||
package org.nl.acs.device_driver.tianneng.guhuashi; |
|||
|
|||
import org.nl.acs.device.device_driver.standard_inspect.ItemDto; |
|||
import org.nl.acs.device.domain.Device; |
|||
import org.nl.acs.device.enums.DeviceType; |
|||
import org.nl.acs.device_driver.DeviceDriver; |
|||
import org.nl.acs.device_driver.defination.OpcDeviceDriverDefination; |
|||
import org.springframework.stereotype.Service; |
|||
|
|||
import java.util.LinkedList; |
|||
import java.util.List; |
|||
|
|||
/** |
|||
* 检测站点驱动定义 |
|||
* 说明:该站点为普通带光电检测站点 |
|||
*/ |
|||
@Service |
|||
public class StandardInspectSiteDefination implements OpcDeviceDriverDefination { |
|||
@Override |
|||
public String getDriverCode() { |
|||
return "standard_inspect_site"; |
|||
} |
|||
|
|||
@Override |
|||
public String getDriverName() { |
|||
return "标准版-检测站点"; |
|||
} |
|||
|
|||
@Override |
|||
public String getDriverDescription() { |
|||
return "标准版-检测站点"; |
|||
} |
|||
|
|||
@Override |
|||
public DeviceDriver getDriverInstance(Device device) { |
|||
return (new StandardInspectSiteDeviceDriver()).setDevice(device).setDriverDefination(this); |
|||
|
|||
} |
|||
|
|||
@Override |
|||
public Class<? extends DeviceDriver> getDeviceDriverType() { |
|||
return StandardInspectSiteDeviceDriver.class; |
|||
} |
|||
|
|||
@Override |
|||
public List<DeviceType> getFitDeviceTypes() { |
|||
List<DeviceType> types = new LinkedList(); |
|||
types.add(DeviceType.conveyor); |
|||
return types; |
|||
} |
|||
|
|||
@Override |
|||
public List<ItemDto> getReadableItemDtos() { |
|||
return ItemProtocol.getReadableItemDtos(); |
|||
} |
|||
|
|||
@Override |
|||
public List<ItemDto> getWriteableItemDtos() { |
|||
return ItemProtocol.getWriteableItemDtos(); |
|||
} |
|||
|
|||
} |
@ -1,476 +0,0 @@ |
|||
package org.nl.acs.device_driver.tianneng.guhuashi; |
|||
|
|||
import cn.hutool.core.date.DateUtil; |
|||
import cn.hutool.core.util.IdUtil; |
|||
import cn.hutool.core.util.StrUtil; |
|||
import com.alibaba.fastjson.JSONObject; |
|||
import lombok.Data; |
|||
import lombok.RequiredArgsConstructor; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.nl.acs.device.domain.Device; |
|||
import org.nl.acs.device.service.DeviceService; |
|||
import org.nl.acs.device_driver.DeviceDriver; |
|||
import org.nl.acs.device_driver.RequestMethodEnum; |
|||
import org.nl.acs.device_driver.RouteableDeviceDriver; |
|||
import org.nl.acs.device_driver.driver.AbstractOpcDeviceDriver; |
|||
import org.nl.acs.device_driver.driver.ExecutableDeviceDriver; |
|||
import org.nl.acs.ext.wms.data.feedBackTaskStatus.FeedBackTaskStatusRequest; |
|||
import org.nl.acs.ext.wms.service.AcsToWmsService; |
|||
import org.nl.acs.instruction.domain.Instruction; |
|||
import org.nl.acs.instruction.service.InstructionService; |
|||
import org.nl.acs.monitor.DeviceStageMonitor; |
|||
import org.nl.acs.opc.WcsConfig; |
|||
import org.nl.acs.route.service.RouteLineService; |
|||
import org.nl.acs.route.service.dto.RouteLineDto; |
|||
import org.nl.acs.task.domain.Task; |
|||
import org.nl.acs.task.service.TaskService; |
|||
import org.nl.acs.task.service.dto.TaskDto; |
|||
import org.nl.acs.task.service.mapper.TaskMapper; |
|||
import org.nl.acs.utils.ConvertUtil; |
|||
import org.nl.common.utils.CodeUtil; |
|||
import org.nl.config.SpringContextHolder; |
|||
import org.openscada.opc.lib.da.Server; |
|||
|
|||
import java.util.Date; |
|||
import java.util.HashMap; |
|||
import java.util.List; |
|||
import java.util.Map; |
|||
|
|||
/** |
|||
* 检测站点驱动 |
|||
*/ |
|||
@Slf4j |
|||
@Data |
|||
@RequiredArgsConstructor |
|||
public class StandardInspectSiteDeviceDriver extends AbstractOpcDeviceDriver implements DeviceDriver, ExecutableDeviceDriver, RouteableDeviceDriver , DeviceStageMonitor { |
|||
protected ItemProtocol itemProtocol = new ItemProtocol(this); |
|||
|
|||
InstructionService instructionService = SpringContextHolder.getBean("instructionServiceImpl"); |
|||
|
|||
DeviceService deviceservice = SpringContextHolder.getBean("deviceServiceImpl"); |
|||
|
|||
RouteLineService routelineserver = SpringContextHolder.getBean("routeLineServiceImpl"); |
|||
|
|||
TaskService taskserver = SpringContextHolder.getBean("taskServiceImpl"); |
|||
|
|||
TaskMapper taskMapper; |
|||
|
|||
AcsToWmsService acsToWmsService=SpringContextHolder.getBean("acsToWmsServiceImpl"); |
|||
|
|||
String container; |
|||
String container_type_desc; |
|||
String last_container_type_desc; |
|||
String last_container; |
|||
//放货准备锁
|
|||
String putReadyLock = null; |
|||
//有货标记
|
|||
protected boolean has_goods_tag = false; |
|||
|
|||
private Date time = new Date(); |
|||
|
|||
int mode = 0; |
|||
int error = 0; |
|||
int move = 0; |
|||
int task = 0; |
|||
int action = 0; |
|||
int last_mode = 0; |
|||
int last_error = 0; |
|||
int last_move = 0; |
|||
int last_task = 0; |
|||
Boolean isonline = true; |
|||
int hasGoods = 0; |
|||
String message = null; |
|||
Boolean iserror = false; |
|||
|
|||
int io_action = 0; |
|||
int last_io_action = 0; |
|||
int material_type = 0; |
|||
int last_material_type = 0; |
|||
int barcode = 0; |
|||
int last_barcode =0; |
|||
|
|||
|
|||
boolean hasVehicle = false; |
|||
boolean isReady = false; |
|||
protected int instruction_num = 0; |
|||
protected int instruction_num_truth = 0; |
|||
boolean isFold = false; |
|||
private String assemble_check_tag; |
|||
|
|||
protected String current_stage_instruction_message; |
|||
protected String last_stage_instruction_message; |
|||
Integer heartbeat_tag; |
|||
private Date instruction_require_time = new Date(); |
|||
private Date instruction_finished_time = new Date(); |
|||
|
|||
private int instruction_require_time_out; |
|||
boolean requireSucess = false; |
|||
|
|||
private int instruction_finished_time_out; |
|||
|
|||
int branchProtocol = 0; |
|||
//备注
|
|||
String remark; |
|||
//数量
|
|||
String qty; |
|||
//物料
|
|||
String material; |
|||
//批次
|
|||
String batch; |
|||
//当前指令
|
|||
Instruction inst = null; |
|||
//上次指令
|
|||
Instruction last_inst = null; |
|||
|
|||
//触摸屏手动触发任务
|
|||
private Boolean is_has_task = false; |
|||
|
|||
//满盅入库请求标记
|
|||
boolean Sucess = false; |
|||
|
|||
//暂定 0就绪 1请求取货 2取货完成 3请求放货 4放货完成 5取货完成离开 6放货完成离开 7请求进入区域 8请求离开区域
|
|||
int flag; |
|||
|
|||
String devicecode; |
|||
|
|||
@Override |
|||
public Device getDevice() { |
|||
return this.device; |
|||
} |
|||
|
|||
|
|||
@Override |
|||
public void execute() { |
|||
String message = null; |
|||
try { |
|||
devicecode = this.getDeviceCode(); |
|||
mode = this.itemProtocol.getMode(); |
|||
error = this.itemProtocol.getError(); |
|||
move = this.itemProtocol.getMove(); |
|||
hasGoods = this.itemProtocol.getMove(); |
|||
action = this.itemProtocol.getAction(); |
|||
material_type = this.itemProtocol.getMaterialType(); |
|||
barcode=this.itemProtocol.getBarcode(); |
|||
if (mode != last_mode) { |
|||
this.setRequireSucess(false); |
|||
if(mode==2){ |
|||
this.writing(0); |
|||
} |
|||
} |
|||
if (move != last_move) { |
|||
} |
|||
if (error != last_error) { |
|||
} |
|||
|
|||
|
|||
} catch (Exception var17) { |
|||
return; |
|||
} |
|||
|
|||
if (!this.itemProtocol.getIsonline()) { |
|||
this.setIsonline(false); |
|||
this.setIserror(true); |
|||
message = "信号量同步异常"; |
|||
//未联机
|
|||
} else if (mode == 0) { |
|||
this.setIsonline(false); |
|||
this.setIserror(true); |
|||
message = "未联机"; |
|||
//有报警
|
|||
} else if (error != 0) { |
|||
this.setIsonline(false); |
|||
this.setIserror(true); |
|||
message = "有报警"; |
|||
//无报警
|
|||
} else { |
|||
this.setIsonline(true); |
|||
this.setIserror(false); |
|||
message = ""; |
|||
Instruction instruction = null; |
|||
List toInstructions; |
|||
switch (mode) { |
|||
case 1: |
|||
log.debug("设备运转模式:等待工作"); |
|||
return; |
|||
case 2: |
|||
break; |
|||
case 4: |
|||
//叫料
|
|||
if (move==0 && !requireSucess){ |
|||
apply(4); |
|||
} |
|||
break; |
|||
case 5: |
|||
//满料出库
|
|||
if(move==1 && !requireSucess){ |
|||
apply(5); |
|||
} |
|||
break; |
|||
case 6: |
|||
//申请空盘
|
|||
if (move==0 && !requireSucess){ |
|||
apply(6); |
|||
} |
|||
break; |
|||
case 7: |
|||
//空托盘出库
|
|||
if(move==1 && !requireSucess){ |
|||
apply(7); |
|||
} |
|||
break; |
|||
} |
|||
|
|||
switch (flag) { |
|||
//取货完成
|
|||
case 1: |
|||
writing(2); |
|||
return; |
|||
//放货完成
|
|||
case 2: |
|||
writing(3); |
|||
return; |
|||
|
|||
} |
|||
|
|||
} |
|||
last_mode = mode; |
|||
last_error = error; |
|||
last_move = move; |
|||
last_task = task; |
|||
last_material_type = material_type; |
|||
last_barcode=barcode; |
|||
|
|||
} |
|||
|
|||
|
|||
public boolean exe_error() { |
|||
if (this.error == 0) { |
|||
return true; |
|||
} else { |
|||
log.debug("设备报警"); |
|||
return false; |
|||
} |
|||
} |
|||
|
|||
protected void thingToNothing() { |
|||
log.debug("从有货到无货 清理数据"); |
|||
this.set_last_container(container, container_type_desc); |
|||
} |
|||
|
|||
public void set_last_container(String barcode, String type_desc) { |
|||
this.set_last_container(barcode); |
|||
this.set_last_container_type_desc(type_desc); |
|||
} |
|||
|
|||
public void set_last_container(String barcode) { |
|||
} |
|||
|
|||
public void set_last_container_type_desc(String type) { |
|||
} |
|||
|
|||
public boolean exe_business() { |
|||
return true; |
|||
} |
|||
|
|||
protected void executing(Instruction instruction) { |
|||
this.executing(1, instruction, ""); |
|||
} |
|||
|
|||
public void executing(int command, Instruction instruction, String appendMessage) { |
|||
String to_command = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() |
|||
+ "." + ItemProtocol.item_to_command; |
|||
String to_target = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() |
|||
+ "." + ItemProtocol.item_to_target; |
|||
String to_task = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() |
|||
+ "." + ItemProtocol.item_to_task; |
|||
if (appendMessage == null) { |
|||
appendMessage = ""; |
|||
} |
|||
if (instruction != null) { |
|||
instruction_num = Integer.parseInt(instruction.getInstruction_code()); |
|||
} |
|||
//String opcservcerid = this.getDevice().getOpc_server_id();
|
|||
//Server server = ReadUtil.getServer(opcservcerid);
|
|||
Map<String, Object> itemMap = new HashMap<String, Object>(); |
|||
itemMap.put(to_command, 1); |
|||
itemMap.put(to_task, instruction_num); |
|||
this.control(itemMap); |
|||
|
|||
} |
|||
|
|||
public void executing(Server server, Map<String, Object> itemMap) { |
|||
this.control(itemMap); |
|||
} |
|||
|
|||
public void writing(int command) { |
|||
String to_command = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() |
|||
+ "." + ItemProtocol.item_to_command; |
|||
|
|||
//String opcservcerid = this.getDevice().getOpc_server_id();
|
|||
//Server server = ReadUtil.getServer(opcservcerid);
|
|||
Map<String, Object> itemMap = new HashMap<String, Object>(); |
|||
itemMap.put(to_command, command); |
|||
this.control(itemMap); |
|||
|
|||
} |
|||
|
|||
public void writing(int type, int command) { |
|||
String to_command = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() |
|||
+ "." + ItemProtocol.item_to_command; |
|||
String to_target = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() |
|||
+ "." + ItemProtocol.item_to_target; |
|||
String to_task = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() |
|||
+ "." + ItemProtocol.item_to_task; |
|||
//String opcservcerid = this.getDevice().getOpc_server_id();
|
|||
//Server server = ReadUtil.getServer(opcservcerid);
|
|||
Map<String, Object> itemMap = new HashMap<String, Object>(); |
|||
if (type == 1) { |
|||
itemMap.put(to_command, command); |
|||
} else if (type == 2) { |
|||
itemMap.put(to_target, command); |
|||
|
|||
} else if (type == 3) { |
|||
itemMap.put(to_task, command); |
|||
} |
|||
this.control(itemMap); |
|||
|
|||
} |
|||
|
|||
public boolean instruction_require(String container_code) { |
|||
return instruction_require(container_code, WcsConfig.task_container_type_default_desc); |
|||
} |
|||
|
|||
/** |
|||
* 请求指令 |
|||
* |
|||
* @param container_code |
|||
* @param container_type |
|||
*/ |
|||
public synchronized boolean instruction_require(String container_code, String container_type) { |
|||
Date date = new Date(); |
|||
if (date.getTime() - this.instruction_require_time.getTime() < (long) this.instruction_require_time_out) { |
|||
log.trace("触发时间因为小于{}毫秒,而被无视", this.instruction_require_time_out); |
|||
return false; |
|||
} else { |
|||
this.instruction_require_time = date; |
|||
TaskDto dto = new TaskDto(); |
|||
String now = DateUtil.now(); |
|||
dto.setTask_id(IdUtil.simpleUUID()); |
|||
dto.setCreate_by(this.getDevice().getDevice_code()); |
|||
dto.setUpdate_by(this.getDevice().getDevice_code()); |
|||
dto.setStart_point_code(this.getDevice().getDevice_code()); |
|||
dto.setVehicle_code(container_code); |
|||
dto.setVehicle_type(container_type); |
|||
|
|||
String taskcode = CodeUtil.getNewCode("TASK_NO"); |
|||
dto.setTask_code("-" + taskcode); |
|||
dto.setTask_status("0"); |
|||
dto.setPriority("101"); |
|||
RouteLineDto jo = routelineserver.findByCode(this.getDevice().getDevice_code()); |
|||
String next_device_codecode = jo.getNext_device_code(); |
|||
if (StrUtil.isEmpty(next_device_codecode)) { |
|||
throw new RuntimeException("该设备未找到对应路由"); |
|||
} |
|||
dto.setNext_point_code(next_device_codecode); |
|||
dto.setUpdate_time(now); |
|||
dto.setCreate_time(now); |
|||
|
|||
// WQLObject wo = WQLObject.getWQLObject("acs_task");
|
|||
// JSONObject json = (JSONObject) JSONObject.toJSON(dto);
|
|||
//
|
|||
// wo.insert(json);
|
|||
|
|||
Task entity = ConvertUtil.convert(dto, Task.class); |
|||
taskMapper.insert(entity); |
|||
requireSucess = false; |
|||
return true; |
|||
} |
|||
} |
|||
|
|||
@Override |
|||
public JSONObject getDeviceStatusName() { |
|||
JSONObject jo = new JSONObject(); |
|||
String mode = ""; |
|||
String action = ""; |
|||
String move = ""; |
|||
if (this.getMode() == 0) { |
|||
mode = "未联机"; |
|||
} else if (this.getMode() == 1) { |
|||
mode = "单机"; |
|||
} else if (this.getMode() == 2) { |
|||
mode = "联机"; |
|||
} else if (this.getMode() == 3) { |
|||
mode = "运行中"; |
|||
} |
|||
|
|||
if (this.getMove() == 0) { |
|||
move = "无货"; |
|||
jo.put("hasGoods", false); |
|||
} else if (this.getMove() == 1) { |
|||
move = "有货"; |
|||
jo.put("hasGoods", true); |
|||
} else if (this.getMove() == 2) { |
|||
move = "有托盘有货"; |
|||
jo.put("hasGoods", true); |
|||
} |
|||
jo.put("device_name", this.getDevice().getDevice_name()); |
|||
jo.put("mode", mode); |
|||
jo.put("move", move); |
|||
jo.put("action", action); |
|||
jo.put("isOnline", this.getIsonline()); |
|||
jo.put("error", this.getError()); |
|||
jo.put("isError", this.getIserror()); |
|||
jo.put("task", this.getTask()); |
|||
return jo; |
|||
} |
|||
|
|||
@Override |
|||
public void setDeviceStatus(JSONObject data) { |
|||
|
|||
} |
|||
|
|||
/** |
|||
* lms申请任务 |
|||
* |
|||
* @param |
|||
*/ |
|||
public synchronized boolean apply(Integer type) { |
|||
Date date = new Date(); |
|||
if (date.getTime() - this.time.getTime() < (long) this.instruction_require_time_out) { |
|||
log.trace("触发时间因为小于{}毫秒,而被无视", this.time); |
|||
return false; |
|||
} else { |
|||
this.time = date; |
|||
FeedBackTaskStatusRequest request = new FeedBackTaskStatusRequest(); |
|||
request.setDevice_code(devicecode); |
|||
request.setMaterial_type(String.valueOf(material_type)); |
|||
request.setVehicle_code(String.valueOf(barcode)); |
|||
if (devicecode.startsWith("TBX")&&type==5&&barcode>0) { |
|||
//满架下料
|
|||
request.setRequest_medthod_code(RequestMethodEnum.apply_mjxl.getCode()); |
|||
request.setRequest_medthod_name(RequestMethodEnum.apply_mjxl.getName()); |
|||
}else if (devicecode.startsWith("TBX")&&type==6) { |
|||
//补空架
|
|||
request.setRequest_medthod_code(RequestMethodEnum.apply_tbxbkj.getCode()); |
|||
request.setRequest_medthod_name(RequestMethodEnum.apply_tbxbkj.getName()); |
|||
}else if (type==7) { |
|||
//空托盘出库,包片机和销售出库空位都可以
|
|||
request.setRequest_medthod_code(RequestMethodEnum.apply_kghjrk.getCode()); |
|||
request.setRequest_medthod_name(RequestMethodEnum.apply_kghjrk.getName()); |
|||
}else if(devicecode.startsWith("BP")&&material_type>0){ |
|||
request.setRequest_medthod_code(RequestMethodEnum.apply_bpsl.getCode()); |
|||
request.setRequest_medthod_name(RequestMethodEnum.apply_bpsl.getName()); |
|||
} |
|||
String resp = acsToWmsService.applyTask(request); |
|||
JSONObject res_jo = JSONObject.parseObject(resp); |
|||
if (StrUtil.equals(res_jo.getString("code"), "200")) { |
|||
this.writing(type); |
|||
this.setRequireSucess(true); |
|||
log.info("acs申请任务", this.devicecode, "满盅入库任务申请成功!"); |
|||
}else{ |
|||
this.writing(99); |
|||
} |
|||
return true; |
|||
} |
|||
} |
|||
} |
@ -1,111 +0,0 @@ |
|||
package org.nl.acs.device_driver.tianneng.site; |
|||
|
|||
import lombok.Data; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.nl.acs.device.device_driver.standard_inspect.ItemDto; |
|||
|
|||
import java.util.ArrayList; |
|||
import java.util.List; |
|||
|
|||
@Slf4j |
|||
@Data |
|||
public class ItemProtocol { |
|||
|
|||
public static String item_heartbeat = "heartbeat"; |
|||
public static String item_mode = "mode"; |
|||
public static String item_move = "move"; |
|||
public static String item_action = "action"; |
|||
public static String item_error = "error"; |
|||
public static String item_to_command = "to_command"; |
|||
public static String item_to_target = "to_target"; |
|||
public static String item_to_task = "to_task"; |
|||
public static String item_weight = "weight"; |
|||
public static String item_material_type = "material_type"; |
|||
public static String item_barcode = "barcode"; |
|||
|
|||
private StandardInspectSiteDeviceDriver driver; |
|||
|
|||
public ItemProtocol(StandardInspectSiteDeviceDriver driver) { |
|||
this.driver = driver; |
|||
} |
|||
|
|||
public int getHeartbeat() { |
|||
return this.getOpcIntegerValue(item_heartbeat); |
|||
} |
|||
|
|||
public int getMode() { |
|||
return this.getOpcIntegerValue(item_mode); |
|||
} |
|||
|
|||
public int getMove() { |
|||
return this.getOpcIntegerValue(item_move); |
|||
} |
|||
|
|||
public int getAction() { |
|||
return this.getOpcIntegerValue(item_action); |
|||
} |
|||
|
|||
public int getError() { |
|||
return this.getOpcIntegerValue(item_error); |
|||
} |
|||
|
|||
|
|||
public int getMaterialType() { |
|||
return this.getOpcIntegerValue(item_material_type); |
|||
} |
|||
public int getBarcode() { |
|||
return this.getOpcIntegerValue(item_barcode); |
|||
} |
|||
|
|||
public int getToCommand() { |
|||
return this.getOpcIntegerValue(item_to_command); |
|||
} |
|||
|
|||
public int getToTarget() { |
|||
return this.getOpcIntegerValue(item_to_target); |
|||
} |
|||
|
|||
public int getToTask() { |
|||
return this.getOpcIntegerValue(item_to_task); |
|||
} |
|||
|
|||
//是否有货
|
|||
public int hasGoods(int move) { |
|||
return move; |
|||
} |
|||
|
|||
Boolean isonline; |
|||
|
|||
public int getOpcIntegerValue(String protocol) { |
|||
Integer value = this.driver.getIntegeregerValue(protocol); |
|||
if (value == null) { |
|||
// log.error(this.getDriver().getDeviceCode() + ":protocol " + protocol + " 信号同步异常!");
|
|||
setIsonline(false); |
|||
} else { |
|||
setIsonline(true); |
|||
return value; |
|||
} |
|||
return 0; |
|||
|
|||
} |
|||
|
|||
public static List<ItemDto> getReadableItemDtos() { |
|||
ArrayList list = new ArrayList(); |
|||
list.add(new ItemDto(item_heartbeat, "心跳", "DB600.B0")); |
|||
list.add(new ItemDto(item_mode, "工作状态", "DB600.B2", Boolean.valueOf(true))); |
|||
list.add(new ItemDto(item_move, "光电开关信号", "DB600.B3")); |
|||
list.add(new ItemDto(item_action, "取放信号", "DB600.B4")); |
|||
list.add(new ItemDto(item_material_type, "物料类型", "DB600.D6")); |
|||
list.add(new ItemDto(item_error, "报警信号", "DB600.B7")); |
|||
list.add(new ItemDto(item_barcode, "条码", "DB600.D8")); |
|||
return list; |
|||
} |
|||
|
|||
public static List<ItemDto> getWriteableItemDtos() { |
|||
ArrayList list = new ArrayList(); |
|||
list.add(new ItemDto(item_to_command, "作业命令", "DB601.W2", Boolean.valueOf(true))); |
|||
return list; |
|||
} |
|||
|
|||
} |
|||
|
@ -1,62 +0,0 @@ |
|||
package org.nl.acs.device_driver.tianneng.site; |
|||
|
|||
import org.nl.acs.device.device_driver.standard_inspect.ItemDto; |
|||
import org.nl.acs.device.domain.Device; |
|||
import org.nl.acs.device.enums.DeviceType; |
|||
import org.nl.acs.device_driver.DeviceDriver; |
|||
import org.nl.acs.device_driver.defination.OpcDeviceDriverDefination; |
|||
import org.springframework.stereotype.Service; |
|||
|
|||
import java.util.LinkedList; |
|||
import java.util.List; |
|||
|
|||
/** |
|||
* 检测站点驱动定义 |
|||
* 说明:该站点为普通带光电检测站点 |
|||
*/ |
|||
@Service |
|||
public class StandardInspectSiteDefination implements OpcDeviceDriverDefination { |
|||
@Override |
|||
public String getDriverCode() { |
|||
return "standard_inspect_site"; |
|||
} |
|||
|
|||
@Override |
|||
public String getDriverName() { |
|||
return "标准版-检测站点"; |
|||
} |
|||
|
|||
@Override |
|||
public String getDriverDescription() { |
|||
return "标准版-检测站点"; |
|||
} |
|||
|
|||
@Override |
|||
public DeviceDriver getDriverInstance(Device device) { |
|||
return (new StandardInspectSiteDeviceDriver()).setDevice(device).setDriverDefination(this); |
|||
|
|||
} |
|||
|
|||
@Override |
|||
public Class<? extends DeviceDriver> getDeviceDriverType() { |
|||
return StandardInspectSiteDeviceDriver.class; |
|||
} |
|||
|
|||
@Override |
|||
public List<DeviceType> getFitDeviceTypes() { |
|||
List<DeviceType> types = new LinkedList(); |
|||
types.add(DeviceType.conveyor); |
|||
return types; |
|||
} |
|||
|
|||
@Override |
|||
public List<ItemDto> getReadableItemDtos() { |
|||
return ItemProtocol.getReadableItemDtos(); |
|||
} |
|||
|
|||
@Override |
|||
public List<ItemDto> getWriteableItemDtos() { |
|||
return ItemProtocol.getWriteableItemDtos(); |
|||
} |
|||
|
|||
} |
@ -1,476 +0,0 @@ |
|||
package org.nl.acs.device_driver.tianneng.site; |
|||
|
|||
import cn.hutool.core.date.DateUtil; |
|||
import cn.hutool.core.util.IdUtil; |
|||
import cn.hutool.core.util.StrUtil; |
|||
import com.alibaba.fastjson.JSONObject; |
|||
import lombok.Data; |
|||
import lombok.RequiredArgsConstructor; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.nl.acs.device.domain.Device; |
|||
import org.nl.acs.device.service.DeviceService; |
|||
import org.nl.acs.device_driver.DeviceDriver; |
|||
import org.nl.acs.device_driver.RequestMethodEnum; |
|||
import org.nl.acs.device_driver.RouteableDeviceDriver; |
|||
import org.nl.acs.device_driver.driver.AbstractOpcDeviceDriver; |
|||
import org.nl.acs.device_driver.driver.ExecutableDeviceDriver; |
|||
import org.nl.acs.ext.wms.data.feedBackTaskStatus.FeedBackTaskStatusRequest; |
|||
import org.nl.acs.ext.wms.service.AcsToWmsService; |
|||
import org.nl.acs.instruction.domain.Instruction; |
|||
import org.nl.acs.instruction.service.InstructionService; |
|||
import org.nl.acs.monitor.DeviceStageMonitor; |
|||
import org.nl.acs.opc.WcsConfig; |
|||
import org.nl.acs.route.service.RouteLineService; |
|||
import org.nl.acs.route.service.dto.RouteLineDto; |
|||
import org.nl.acs.task.domain.Task; |
|||
import org.nl.acs.task.service.TaskService; |
|||
import org.nl.acs.task.service.dto.TaskDto; |
|||
import org.nl.acs.task.service.mapper.TaskMapper; |
|||
import org.nl.acs.utils.ConvertUtil; |
|||
import org.nl.common.utils.CodeUtil; |
|||
import org.nl.config.SpringContextHolder; |
|||
import org.openscada.opc.lib.da.Server; |
|||
|
|||
import java.util.Date; |
|||
import java.util.HashMap; |
|||
import java.util.List; |
|||
import java.util.Map; |
|||
|
|||
/** |
|||
* 检测站点驱动 |
|||
*/ |
|||
@Slf4j |
|||
@Data |
|||
@RequiredArgsConstructor |
|||
public class StandardInspectSiteDeviceDriver extends AbstractOpcDeviceDriver implements DeviceDriver, ExecutableDeviceDriver, RouteableDeviceDriver , DeviceStageMonitor { |
|||
protected ItemProtocol itemProtocol = new ItemProtocol(this); |
|||
|
|||
InstructionService instructionService = SpringContextHolder.getBean("instructionServiceImpl"); |
|||
|
|||
DeviceService deviceservice = SpringContextHolder.getBean("deviceServiceImpl"); |
|||
|
|||
RouteLineService routelineserver = SpringContextHolder.getBean("routeLineServiceImpl"); |
|||
|
|||
TaskService taskserver = SpringContextHolder.getBean("taskServiceImpl"); |
|||
|
|||
TaskMapper taskMapper; |
|||
|
|||
AcsToWmsService acsToWmsService=SpringContextHolder.getBean("acsToWmsServiceImpl"); |
|||
|
|||
String container; |
|||
String container_type_desc; |
|||
String last_container_type_desc; |
|||
String last_container; |
|||
//放货准备锁
|
|||
String putReadyLock = null; |
|||
//有货标记
|
|||
protected boolean has_goods_tag = false; |
|||
|
|||
private Date time = new Date(); |
|||
|
|||
int mode = 0; |
|||
int error = 0; |
|||
int move = 0; |
|||
int task = 0; |
|||
int action = 0; |
|||
int last_mode = 0; |
|||
int last_error = 0; |
|||
int last_move = 0; |
|||
int last_task = 0; |
|||
Boolean isonline = true; |
|||
int hasGoods = 0; |
|||
String message = null; |
|||
Boolean iserror = false; |
|||
|
|||
int io_action = 0; |
|||
int last_io_action = 0; |
|||
int material_type = 0; |
|||
int last_material_type = 0; |
|||
int barcode = 0; |
|||
int last_barcode =0; |
|||
|
|||
|
|||
boolean hasVehicle = false; |
|||
boolean isReady = false; |
|||
protected int instruction_num = 0; |
|||
protected int instruction_num_truth = 0; |
|||
boolean isFold = false; |
|||
private String assemble_check_tag; |
|||
|
|||
protected String current_stage_instruction_message; |
|||
protected String last_stage_instruction_message; |
|||
Integer heartbeat_tag; |
|||
private Date instruction_require_time = new Date(); |
|||
private Date instruction_finished_time = new Date(); |
|||
|
|||
private int instruction_require_time_out; |
|||
boolean requireSucess = false; |
|||
|
|||
private int instruction_finished_time_out; |
|||
|
|||
int branchProtocol = 0; |
|||
//备注
|
|||
String remark; |
|||
//数量
|
|||
String qty; |
|||
//物料
|
|||
String material; |
|||
//批次
|
|||
String batch; |
|||
//当前指令
|
|||
Instruction inst = null; |
|||
//上次指令
|
|||
Instruction last_inst = null; |
|||
|
|||
//触摸屏手动触发任务
|
|||
private Boolean is_has_task = false; |
|||
|
|||
//满盅入库请求标记
|
|||
boolean Sucess = false; |
|||
|
|||
//暂定 0就绪 1请求取货 2取货完成 3请求放货 4放货完成 5取货完成离开 6放货完成离开 7请求进入区域 8请求离开区域
|
|||
int flag; |
|||
|
|||
String devicecode; |
|||
|
|||
@Override |
|||
public Device getDevice() { |
|||
return this.device; |
|||
} |
|||
|
|||
|
|||
@Override |
|||
public void execute() { |
|||
String message = null; |
|||
try { |
|||
devicecode = this.getDeviceCode(); |
|||
mode = this.itemProtocol.getMode(); |
|||
error = this.itemProtocol.getError(); |
|||
move = this.itemProtocol.getMove(); |
|||
hasGoods = this.itemProtocol.getMove(); |
|||
action = this.itemProtocol.getAction(); |
|||
material_type = this.itemProtocol.getMaterialType(); |
|||
barcode=this.itemProtocol.getBarcode(); |
|||
if (mode != last_mode) { |
|||
this.setRequireSucess(false); |
|||
if(mode==2){ |
|||
this.writing(0); |
|||
} |
|||
} |
|||
if (move != last_move) { |
|||
} |
|||
if (error != last_error) { |
|||
} |
|||
|
|||
|
|||
} catch (Exception var17) { |
|||
return; |
|||
} |
|||
|
|||
if (!this.itemProtocol.getIsonline()) { |
|||
this.setIsonline(false); |
|||
this.setIserror(true); |
|||
message = "信号量同步异常"; |
|||
//未联机
|
|||
} else if (mode == 0) { |
|||
this.setIsonline(false); |
|||
this.setIserror(true); |
|||
message = "未联机"; |
|||
//有报警
|
|||
} else if (error != 0) { |
|||
this.setIsonline(false); |
|||
this.setIserror(true); |
|||
message = "有报警"; |
|||
//无报警
|
|||
} else { |
|||
this.setIsonline(true); |
|||
this.setIserror(false); |
|||
message = ""; |
|||
Instruction instruction = null; |
|||
List toInstructions; |
|||
switch (mode) { |
|||
case 1: |
|||
log.debug("设备运转模式:等待工作"); |
|||
return; |
|||
case 2: |
|||
break; |
|||
case 4: |
|||
//叫料
|
|||
if (move==0 && !requireSucess){ |
|||
apply(4); |
|||
} |
|||
break; |
|||
case 5: |
|||
//满料出库
|
|||
if(move==1 && !requireSucess){ |
|||
apply(5); |
|||
} |
|||
break; |
|||
case 6: |
|||
//申请空盘
|
|||
if (move==0 && !requireSucess){ |
|||
apply(6); |
|||
} |
|||
break; |
|||
case 7: |
|||
//空托盘出库
|
|||
if(move==1 && !requireSucess){ |
|||
apply(7); |
|||
} |
|||
break; |
|||
} |
|||
|
|||
switch (flag) { |
|||
//取货完成
|
|||
case 1: |
|||
writing(2); |
|||
return; |
|||
//放货完成
|
|||
case 2: |
|||
writing(3); |
|||
return; |
|||
|
|||
} |
|||
|
|||
} |
|||
last_mode = mode; |
|||
last_error = error; |
|||
last_move = move; |
|||
last_task = task; |
|||
last_material_type = material_type; |
|||
last_barcode=barcode; |
|||
|
|||
} |
|||
|
|||
|
|||
public boolean exe_error() { |
|||
if (this.error == 0) { |
|||
return true; |
|||
} else { |
|||
log.debug("设备报警"); |
|||
return false; |
|||
} |
|||
} |
|||
|
|||
protected void thingToNothing() { |
|||
log.debug("从有货到无货 清理数据"); |
|||
this.set_last_container(container, container_type_desc); |
|||
} |
|||
|
|||
public void set_last_container(String barcode, String type_desc) { |
|||
this.set_last_container(barcode); |
|||
this.set_last_container_type_desc(type_desc); |
|||
} |
|||
|
|||
public void set_last_container(String barcode) { |
|||
} |
|||
|
|||
public void set_last_container_type_desc(String type) { |
|||
} |
|||
|
|||
public boolean exe_business() { |
|||
return true; |
|||
} |
|||
|
|||
protected void executing(Instruction instruction) { |
|||
this.executing(1, instruction, ""); |
|||
} |
|||
|
|||
public void executing(int command, Instruction instruction, String appendMessage) { |
|||
String to_command = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() |
|||
+ "." + ItemProtocol.item_to_command; |
|||
String to_target = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() |
|||
+ "." + ItemProtocol.item_to_target; |
|||
String to_task = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() |
|||
+ "." + ItemProtocol.item_to_task; |
|||
if (appendMessage == null) { |
|||
appendMessage = ""; |
|||
} |
|||
if (instruction != null) { |
|||
instruction_num = Integer.parseInt(instruction.getInstruction_code()); |
|||
} |
|||
//String opcservcerid = this.getDevice().getOpc_server_id();
|
|||
//Server server = ReadUtil.getServer(opcservcerid);
|
|||
Map<String, Object> itemMap = new HashMap<String, Object>(); |
|||
itemMap.put(to_command, 1); |
|||
itemMap.put(to_task, instruction_num); |
|||
this.control(itemMap); |
|||
|
|||
} |
|||
|
|||
public void executing(Server server, Map<String, Object> itemMap) { |
|||
this.control(itemMap); |
|||
} |
|||
|
|||
public void writing(int command) { |
|||
String to_command = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() |
|||
+ "." + ItemProtocol.item_to_command; |
|||
|
|||
//String opcservcerid = this.getDevice().getOpc_server_id();
|
|||
//Server server = ReadUtil.getServer(opcservcerid);
|
|||
Map<String, Object> itemMap = new HashMap<String, Object>(); |
|||
itemMap.put(to_command, command); |
|||
this.control(itemMap); |
|||
|
|||
} |
|||
|
|||
public void writing(int type, int command) { |
|||
String to_command = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() |
|||
+ "." + ItemProtocol.item_to_command; |
|||
String to_target = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() |
|||
+ "." + ItemProtocol.item_to_target; |
|||
String to_task = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() |
|||
+ "." + ItemProtocol.item_to_task; |
|||
//String opcservcerid = this.getDevice().getOpc_server_id();
|
|||
//Server server = ReadUtil.getServer(opcservcerid);
|
|||
Map<String, Object> itemMap = new HashMap<String, Object>(); |
|||
if (type == 1) { |
|||
itemMap.put(to_command, command); |
|||
} else if (type == 2) { |
|||
itemMap.put(to_target, command); |
|||
|
|||
} else if (type == 3) { |
|||
itemMap.put(to_task, command); |
|||
} |
|||
this.control(itemMap); |
|||
|
|||
} |
|||
|
|||
public boolean instruction_require(String container_code) { |
|||
return instruction_require(container_code, WcsConfig.task_container_type_default_desc); |
|||
} |
|||
|
|||
/** |
|||
* 请求指令 |
|||
* |
|||
* @param container_code |
|||
* @param container_type |
|||
*/ |
|||
public synchronized boolean instruction_require(String container_code, String container_type) { |
|||
Date date = new Date(); |
|||
if (date.getTime() - this.instruction_require_time.getTime() < (long) this.instruction_require_time_out) { |
|||
log.trace("触发时间因为小于{}毫秒,而被无视", this.instruction_require_time_out); |
|||
return false; |
|||
} else { |
|||
this.instruction_require_time = date; |
|||
TaskDto dto = new TaskDto(); |
|||
String now = DateUtil.now(); |
|||
dto.setTask_id(IdUtil.simpleUUID()); |
|||
dto.setCreate_by(this.getDevice().getDevice_code()); |
|||
dto.setUpdate_by(this.getDevice().getDevice_code()); |
|||
dto.setStart_point_code(this.getDevice().getDevice_code()); |
|||
dto.setVehicle_code(container_code); |
|||
dto.setVehicle_type(container_type); |
|||
|
|||
String taskcode = CodeUtil.getNewCode("TASK_NO"); |
|||
dto.setTask_code("-" + taskcode); |
|||
dto.setTask_status("0"); |
|||
dto.setPriority("101"); |
|||
RouteLineDto jo = routelineserver.findByCode(this.getDevice().getDevice_code()); |
|||
String next_device_codecode = jo.getNext_device_code(); |
|||
if (StrUtil.isEmpty(next_device_codecode)) { |
|||
throw new RuntimeException("该设备未找到对应路由"); |
|||
} |
|||
dto.setNext_point_code(next_device_codecode); |
|||
dto.setUpdate_time(now); |
|||
dto.setCreate_time(now); |
|||
|
|||
// WQLObject wo = WQLObject.getWQLObject("acs_task");
|
|||
// JSONObject json = (JSONObject) JSONObject.toJSON(dto);
|
|||
//
|
|||
// wo.insert(json);
|
|||
|
|||
Task entity = ConvertUtil.convert(dto, Task.class); |
|||
taskMapper.insert(entity); |
|||
requireSucess = false; |
|||
return true; |
|||
} |
|||
} |
|||
|
|||
@Override |
|||
public JSONObject getDeviceStatusName() { |
|||
JSONObject jo = new JSONObject(); |
|||
String mode = ""; |
|||
String action = ""; |
|||
String move = ""; |
|||
if (this.getMode() == 0) { |
|||
mode = "未联机"; |
|||
} else if (this.getMode() == 1) { |
|||
mode = "单机"; |
|||
} else if (this.getMode() == 2) { |
|||
mode = "联机"; |
|||
} else if (this.getMode() == 3) { |
|||
mode = "运行中"; |
|||
} |
|||
|
|||
if (this.getMove() == 0) { |
|||
move = "无货"; |
|||
jo.put("hasGoods", false); |
|||
} else if (this.getMove() == 1) { |
|||
move = "有货"; |
|||
jo.put("hasGoods", true); |
|||
} else if (this.getMove() == 2) { |
|||
move = "有托盘有货"; |
|||
jo.put("hasGoods", true); |
|||
} |
|||
jo.put("device_name", this.getDevice().getDevice_name()); |
|||
jo.put("mode", mode); |
|||
jo.put("move", move); |
|||
jo.put("action", action); |
|||
jo.put("isOnline", this.getIsonline()); |
|||
jo.put("error", this.getError()); |
|||
jo.put("isError", this.getIserror()); |
|||
jo.put("task", this.getTask()); |
|||
return jo; |
|||
} |
|||
|
|||
@Override |
|||
public void setDeviceStatus(JSONObject data) { |
|||
|
|||
} |
|||
|
|||
/** |
|||
* lms申请任务 |
|||
* |
|||
* @param |
|||
*/ |
|||
public synchronized boolean apply(Integer type) { |
|||
Date date = new Date(); |
|||
if (date.getTime() - this.time.getTime() < (long) this.instruction_require_time_out) { |
|||
log.trace("触发时间因为小于{}毫秒,而被无视", this.time); |
|||
return false; |
|||
} else { |
|||
this.time = date; |
|||
FeedBackTaskStatusRequest request = new FeedBackTaskStatusRequest(); |
|||
request.setDevice_code(devicecode); |
|||
request.setMaterial_type(String.valueOf(material_type)); |
|||
request.setVehicle_code(String.valueOf(barcode)); |
|||
if (devicecode.startsWith("TBX")&&type==5&&barcode>0) { |
|||
//满架下料
|
|||
request.setRequest_medthod_code(RequestMethodEnum.apply_mjxl.getCode()); |
|||
request.setRequest_medthod_name(RequestMethodEnum.apply_mjxl.getName()); |
|||
}else if (devicecode.startsWith("TBX")&&type==6) { |
|||
//补空架
|
|||
request.setRequest_medthod_code(RequestMethodEnum.apply_tbxbkj.getCode()); |
|||
request.setRequest_medthod_name(RequestMethodEnum.apply_tbxbkj.getName()); |
|||
}else if (type==7) { |
|||
//空托盘出库,包片机和销售出库空位都可以
|
|||
request.setRequest_medthod_code(RequestMethodEnum.apply_kghjrk.getCode()); |
|||
request.setRequest_medthod_name(RequestMethodEnum.apply_kghjrk.getName()); |
|||
}else if(devicecode.startsWith("BP")&&material_type>0){ |
|||
request.setRequest_medthod_code(RequestMethodEnum.apply_bpsl.getCode()); |
|||
request.setRequest_medthod_name(RequestMethodEnum.apply_bpsl.getName()); |
|||
} |
|||
String resp = acsToWmsService.applyTask(request); |
|||
JSONObject res_jo = JSONObject.parseObject(resp); |
|||
if (StrUtil.equals(res_jo.getString("code"), "200")) { |
|||
this.writing(type); |
|||
this.setRequireSucess(true); |
|||
log.info("acs申请任务", this.devicecode, "满盅入库任务申请成功!"); |
|||
}else{ |
|||
this.writing(99); |
|||
} |
|||
return true; |
|||
} |
|||
} |
|||
} |
@ -1,111 +0,0 @@ |
|||
package org.nl.acs.device_driver.tianneng.site_status; |
|||
|
|||
import lombok.Data; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.nl.acs.device.device_driver.standard_inspect.ItemDto; |
|||
|
|||
import java.util.ArrayList; |
|||
import java.util.List; |
|||
|
|||
@Slf4j |
|||
@Data |
|||
public class ItemProtocol { |
|||
|
|||
public static String item_heartbeat = "heartbeat"; |
|||
public static String item_mode = "mode"; |
|||
public static String item_move = "move"; |
|||
public static String item_action = "action"; |
|||
public static String item_error = "error"; |
|||
public static String item_to_command = "to_command"; |
|||
public static String item_to_target = "to_target"; |
|||
public static String item_to_task = "to_task"; |
|||
public static String item_weight = "weight"; |
|||
public static String item_material_type = "material_type"; |
|||
public static String item_barcode = "barcode"; |
|||
|
|||
private StandardInspectSiteDeviceDriver driver; |
|||
|
|||
public ItemProtocol(StandardInspectSiteDeviceDriver driver) { |
|||
this.driver = driver; |
|||
} |
|||
|
|||
public int getHeartbeat() { |
|||
return this.getOpcIntegerValue(item_heartbeat); |
|||
} |
|||
|
|||
public int getMode() { |
|||
return this.getOpcIntegerValue(item_mode); |
|||
} |
|||
|
|||
public int getMove() { |
|||
return this.getOpcIntegerValue(item_move); |
|||
} |
|||
|
|||
public int getAction() { |
|||
return this.getOpcIntegerValue(item_action); |
|||
} |
|||
|
|||
public int getError() { |
|||
return this.getOpcIntegerValue(item_error); |
|||
} |
|||
|
|||
|
|||
public int getMaterialType() { |
|||
return this.getOpcIntegerValue(item_material_type); |
|||
} |
|||
public int getBarcode() { |
|||
return this.getOpcIntegerValue(item_barcode); |
|||
} |
|||
|
|||
public int getToCommand() { |
|||
return this.getOpcIntegerValue(item_to_command); |
|||
} |
|||
|
|||
public int getToTarget() { |
|||
return this.getOpcIntegerValue(item_to_target); |
|||
} |
|||
|
|||
public int getToTask() { |
|||
return this.getOpcIntegerValue(item_to_task); |
|||
} |
|||
|
|||
//是否有货
|
|||
public int hasGoods(int move) { |
|||
return move; |
|||
} |
|||
|
|||
Boolean isonline; |
|||
|
|||
public int getOpcIntegerValue(String protocol) { |
|||
Integer value = this.driver.getIntegeregerValue(protocol); |
|||
if (value == null) { |
|||
// log.error(this.getDriver().getDeviceCode() + ":protocol " + protocol + " 信号同步异常!");
|
|||
setIsonline(false); |
|||
} else { |
|||
setIsonline(true); |
|||
return value; |
|||
} |
|||
return 0; |
|||
|
|||
} |
|||
|
|||
public static List<ItemDto> getReadableItemDtos() { |
|||
ArrayList list = new ArrayList(); |
|||
list.add(new ItemDto(item_heartbeat, "心跳", "DB600.B0")); |
|||
list.add(new ItemDto(item_mode, "工作状态", "DB600.B2", Boolean.valueOf(true))); |
|||
list.add(new ItemDto(item_move, "光电开关信号", "DB600.B3")); |
|||
list.add(new ItemDto(item_action, "取放信号", "DB600.B4")); |
|||
list.add(new ItemDto(item_material_type, "物料类型", "DB600.D6")); |
|||
list.add(new ItemDto(item_error, "报警信号", "DB600.B7")); |
|||
list.add(new ItemDto(item_barcode, "条码", "DB600.D8")); |
|||
return list; |
|||
} |
|||
|
|||
public static List<ItemDto> getWriteableItemDtos() { |
|||
ArrayList list = new ArrayList(); |
|||
list.add(new ItemDto(item_to_command, "作业命令", "DB601.W2", Boolean.valueOf(true))); |
|||
return list; |
|||
} |
|||
|
|||
} |
|||
|
@ -1,62 +0,0 @@ |
|||
package org.nl.acs.device_driver.tianneng.site_status; |
|||
|
|||
import org.nl.acs.device.device_driver.standard_inspect.ItemDto; |
|||
import org.nl.acs.device.domain.Device; |
|||
import org.nl.acs.device.enums.DeviceType; |
|||
import org.nl.acs.device_driver.DeviceDriver; |
|||
import org.nl.acs.device_driver.defination.OpcDeviceDriverDefination; |
|||
import org.springframework.stereotype.Service; |
|||
|
|||
import java.util.LinkedList; |
|||
import java.util.List; |
|||
|
|||
/** |
|||
* 检测站点驱动定义 |
|||
* 说明:该站点为普通带光电检测站点 |
|||
*/ |
|||
@Service |
|||
public class StandardInspectSiteDefination implements OpcDeviceDriverDefination { |
|||
@Override |
|||
public String getDriverCode() { |
|||
return "standard_inspect_site"; |
|||
} |
|||
|
|||
@Override |
|||
public String getDriverName() { |
|||
return "标准版-检测站点"; |
|||
} |
|||
|
|||
@Override |
|||
public String getDriverDescription() { |
|||
return "标准版-检测站点"; |
|||
} |
|||
|
|||
@Override |
|||
public DeviceDriver getDriverInstance(Device device) { |
|||
return (new StandardInspectSiteDeviceDriver()).setDevice(device).setDriverDefination(this); |
|||
|
|||
} |
|||
|
|||
@Override |
|||
public Class<? extends DeviceDriver> getDeviceDriverType() { |
|||
return StandardInspectSiteDeviceDriver.class; |
|||
} |
|||
|
|||
@Override |
|||
public List<DeviceType> getFitDeviceTypes() { |
|||
List<DeviceType> types = new LinkedList(); |
|||
types.add(DeviceType.conveyor); |
|||
return types; |
|||
} |
|||
|
|||
@Override |
|||
public List<ItemDto> getReadableItemDtos() { |
|||
return ItemProtocol.getReadableItemDtos(); |
|||
} |
|||
|
|||
@Override |
|||
public List<ItemDto> getWriteableItemDtos() { |
|||
return ItemProtocol.getWriteableItemDtos(); |
|||
} |
|||
|
|||
} |
@ -1,476 +0,0 @@ |
|||
package org.nl.acs.device_driver.tianneng.site_status; |
|||
|
|||
import cn.hutool.core.date.DateUtil; |
|||
import cn.hutool.core.util.IdUtil; |
|||
import cn.hutool.core.util.StrUtil; |
|||
import com.alibaba.fastjson.JSONObject; |
|||
import lombok.Data; |
|||
import lombok.RequiredArgsConstructor; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.nl.acs.device.domain.Device; |
|||
import org.nl.acs.device.service.DeviceService; |
|||
import org.nl.acs.device_driver.DeviceDriver; |
|||
import org.nl.acs.device_driver.RequestMethodEnum; |
|||
import org.nl.acs.device_driver.RouteableDeviceDriver; |
|||
import org.nl.acs.device_driver.driver.AbstractOpcDeviceDriver; |
|||
import org.nl.acs.device_driver.driver.ExecutableDeviceDriver; |
|||
import org.nl.acs.ext.wms.data.feedBackTaskStatus.FeedBackTaskStatusRequest; |
|||
import org.nl.acs.ext.wms.service.AcsToWmsService; |
|||
import org.nl.acs.instruction.domain.Instruction; |
|||
import org.nl.acs.instruction.service.InstructionService; |
|||
import org.nl.acs.monitor.DeviceStageMonitor; |
|||
import org.nl.acs.opc.WcsConfig; |
|||
import org.nl.acs.route.service.RouteLineService; |
|||
import org.nl.acs.route.service.dto.RouteLineDto; |
|||
import org.nl.acs.task.domain.Task; |
|||
import org.nl.acs.task.service.TaskService; |
|||
import org.nl.acs.task.service.dto.TaskDto; |
|||
import org.nl.acs.task.service.mapper.TaskMapper; |
|||
import org.nl.acs.utils.ConvertUtil; |
|||
import org.nl.common.utils.CodeUtil; |
|||
import org.nl.config.SpringContextHolder; |
|||
import org.openscada.opc.lib.da.Server; |
|||
|
|||
import java.util.Date; |
|||
import java.util.HashMap; |
|||
import java.util.List; |
|||
import java.util.Map; |
|||
|
|||
/** |
|||
* 检测站点驱动 |
|||
*/ |
|||
@Slf4j |
|||
@Data |
|||
@RequiredArgsConstructor |
|||
public class StandardInspectSiteDeviceDriver extends AbstractOpcDeviceDriver implements DeviceDriver, ExecutableDeviceDriver, RouteableDeviceDriver , DeviceStageMonitor { |
|||
protected ItemProtocol itemProtocol = new ItemProtocol(this); |
|||
|
|||
InstructionService instructionService = SpringContextHolder.getBean("instructionServiceImpl"); |
|||
|
|||
DeviceService deviceservice = SpringContextHolder.getBean("deviceServiceImpl"); |
|||
|
|||
RouteLineService routelineserver = SpringContextHolder.getBean("routeLineServiceImpl"); |
|||
|
|||
TaskService taskserver = SpringContextHolder.getBean("taskServiceImpl"); |
|||
|
|||
TaskMapper taskMapper; |
|||
|
|||
AcsToWmsService acsToWmsService=SpringContextHolder.getBean("acsToWmsServiceImpl"); |
|||
|
|||
String container; |
|||
String container_type_desc; |
|||
String last_container_type_desc; |
|||
String last_container; |
|||
//放货准备锁
|
|||
String putReadyLock = null; |
|||
//有货标记
|
|||
protected boolean has_goods_tag = false; |
|||
|
|||
private Date time = new Date(); |
|||
|
|||
int mode = 0; |
|||
int error = 0; |
|||
int move = 0; |
|||
int task = 0; |
|||
int action = 0; |
|||
int last_mode = 0; |
|||
int last_error = 0; |
|||
int last_move = 0; |
|||
int last_task = 0; |
|||
Boolean isonline = true; |
|||
int hasGoods = 0; |
|||
String message = null; |
|||
Boolean iserror = false; |
|||
|
|||
int io_action = 0; |
|||
int last_io_action = 0; |
|||
int material_type = 0; |
|||
int last_material_type = 0; |
|||
int barcode = 0; |
|||
int last_barcode =0; |
|||
|
|||
|
|||
boolean hasVehicle = false; |
|||
boolean isReady = false; |
|||
protected int instruction_num = 0; |
|||
protected int instruction_num_truth = 0; |
|||
boolean isFold = false; |
|||
private String assemble_check_tag; |
|||
|
|||
protected String current_stage_instruction_message; |
|||
protected String last_stage_instruction_message; |
|||
Integer heartbeat_tag; |
|||
private Date instruction_require_time = new Date(); |
|||
private Date instruction_finished_time = new Date(); |
|||
|
|||
private int instruction_require_time_out; |
|||
boolean requireSucess = false; |
|||
|
|||
private int instruction_finished_time_out; |
|||
|
|||
int branchProtocol = 0; |
|||
//备注
|
|||
String remark; |
|||
//数量
|
|||
String qty; |
|||
//物料
|
|||
String material; |
|||
//批次
|
|||
String batch; |
|||
//当前指令
|
|||
Instruction inst = null; |
|||
//上次指令
|
|||
Instruction last_inst = null; |
|||
|
|||
//触摸屏手动触发任务
|
|||
private Boolean is_has_task = false; |
|||
|
|||
//满盅入库请求标记
|
|||
boolean Sucess = false; |
|||
|
|||
//暂定 0就绪 1请求取货 2取货完成 3请求放货 4放货完成 5取货完成离开 6放货完成离开 7请求进入区域 8请求离开区域
|
|||
int flag; |
|||
|
|||
String devicecode; |
|||
|
|||
@Override |
|||
public Device getDevice() { |
|||
return this.device; |
|||
} |
|||
|
|||
|
|||
@Override |
|||
public void execute() { |
|||
String message = null; |
|||
try { |
|||
devicecode = this.getDeviceCode(); |
|||
mode = this.itemProtocol.getMode(); |
|||
error = this.itemProtocol.getError(); |
|||
move = this.itemProtocol.getMove(); |
|||
hasGoods = this.itemProtocol.getMove(); |
|||
action = this.itemProtocol.getAction(); |
|||
material_type = this.itemProtocol.getMaterialType(); |
|||
barcode=this.itemProtocol.getBarcode(); |
|||
if (mode != last_mode) { |
|||
this.setRequireSucess(false); |
|||
if(mode==2){ |
|||
this.writing(0); |
|||
} |
|||
} |
|||
if (move != last_move) { |
|||
} |
|||
if (error != last_error) { |
|||
} |
|||
|
|||
|
|||
} catch (Exception var17) { |
|||
return; |
|||
} |
|||
|
|||
if (!this.itemProtocol.getIsonline()) { |
|||
this.setIsonline(false); |
|||
this.setIserror(true); |
|||
message = "信号量同步异常"; |
|||
//未联机
|
|||
} else if (mode == 0) { |
|||
this.setIsonline(false); |
|||
this.setIserror(true); |
|||
message = "未联机"; |
|||
//有报警
|
|||
} else if (error != 0) { |
|||
this.setIsonline(false); |
|||
this.setIserror(true); |
|||
message = "有报警"; |
|||
//无报警
|
|||
} else { |
|||
this.setIsonline(true); |
|||
this.setIserror(false); |
|||
message = ""; |
|||
Instruction instruction = null; |
|||
List toInstructions; |
|||
switch (mode) { |
|||
case 1: |
|||
log.debug("设备运转模式:等待工作"); |
|||
return; |
|||
case 2: |
|||
break; |
|||
case 4: |
|||
//叫料
|
|||
if (move==0 && !requireSucess){ |
|||
apply(4); |
|||
} |
|||
break; |
|||
case 5: |
|||
//满料出库
|
|||
if(move==1 && !requireSucess){ |
|||
apply(5); |
|||
} |
|||
break; |
|||
case 6: |
|||
//申请空盘
|
|||
if (move==0 && !requireSucess){ |
|||
apply(6); |
|||
} |
|||
break; |
|||
case 7: |
|||
//空托盘出库
|
|||
if(move==1 && !requireSucess){ |
|||
apply(7); |
|||
} |
|||
break; |
|||
} |
|||
|
|||
switch (flag) { |
|||
//取货完成
|
|||
case 1: |
|||
writing(2); |
|||
return; |
|||
//放货完成
|
|||
case 2: |
|||
writing(3); |
|||
return; |
|||
|
|||
} |
|||
|
|||
} |
|||
last_mode = mode; |
|||
last_error = error; |
|||
last_move = move; |
|||
last_task = task; |
|||
last_material_type = material_type; |
|||
last_barcode=barcode; |
|||
|
|||
} |
|||
|
|||
|
|||
public boolean exe_error() { |
|||
if (this.error == 0) { |
|||
return true; |
|||
} else { |
|||
log.debug("设备报警"); |
|||
return false; |
|||
} |
|||
} |
|||
|
|||
protected void thingToNothing() { |
|||
log.debug("从有货到无货 清理数据"); |
|||
this.set_last_container(container, container_type_desc); |
|||
} |
|||
|
|||
public void set_last_container(String barcode, String type_desc) { |
|||
this.set_last_container(barcode); |
|||
this.set_last_container_type_desc(type_desc); |
|||
} |
|||
|
|||
public void set_last_container(String barcode) { |
|||
} |
|||
|
|||
public void set_last_container_type_desc(String type) { |
|||
} |
|||
|
|||
public boolean exe_business() { |
|||
return true; |
|||
} |
|||
|
|||
protected void executing(Instruction instruction) { |
|||
this.executing(1, instruction, ""); |
|||
} |
|||
|
|||
public void executing(int command, Instruction instruction, String appendMessage) { |
|||
String to_command = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() |
|||
+ "." + ItemProtocol.item_to_command; |
|||
String to_target = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() |
|||
+ "." + ItemProtocol.item_to_target; |
|||
String to_task = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() |
|||
+ "." + ItemProtocol.item_to_task; |
|||
if (appendMessage == null) { |
|||
appendMessage = ""; |
|||
} |
|||
if (instruction != null) { |
|||
instruction_num = Integer.parseInt(instruction.getInstruction_code()); |
|||
} |
|||
//String opcservcerid = this.getDevice().getOpc_server_id();
|
|||
//Server server = ReadUtil.getServer(opcservcerid);
|
|||
Map<String, Object> itemMap = new HashMap<String, Object>(); |
|||
itemMap.put(to_command, 1); |
|||
itemMap.put(to_task, instruction_num); |
|||
this.control(itemMap); |
|||
|
|||
} |
|||
|
|||
public void executing(Server server, Map<String, Object> itemMap) { |
|||
this.control(itemMap); |
|||
} |
|||
|
|||
public void writing(int command) { |
|||
String to_command = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() |
|||
+ "." + ItemProtocol.item_to_command; |
|||
|
|||
//String opcservcerid = this.getDevice().getOpc_server_id();
|
|||
//Server server = ReadUtil.getServer(opcservcerid);
|
|||
Map<String, Object> itemMap = new HashMap<String, Object>(); |
|||
itemMap.put(to_command, command); |
|||
this.control(itemMap); |
|||
|
|||
} |
|||
|
|||
public void writing(int type, int command) { |
|||
String to_command = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() |
|||
+ "." + ItemProtocol.item_to_command; |
|||
String to_target = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() |
|||
+ "." + ItemProtocol.item_to_target; |
|||
String to_task = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() |
|||
+ "." + ItemProtocol.item_to_task; |
|||
//String opcservcerid = this.getDevice().getOpc_server_id();
|
|||
//Server server = ReadUtil.getServer(opcservcerid);
|
|||
Map<String, Object> itemMap = new HashMap<String, Object>(); |
|||
if (type == 1) { |
|||
itemMap.put(to_command, command); |
|||
} else if (type == 2) { |
|||
itemMap.put(to_target, command); |
|||
|
|||
} else if (type == 3) { |
|||
itemMap.put(to_task, command); |
|||
} |
|||
this.control(itemMap); |
|||
|
|||
} |
|||
|
|||
public boolean instruction_require(String container_code) { |
|||
return instruction_require(container_code, WcsConfig.task_container_type_default_desc); |
|||
} |
|||
|
|||
/** |
|||
* 请求指令 |
|||
* |
|||
* @param container_code |
|||
* @param container_type |
|||
*/ |
|||
public synchronized boolean instruction_require(String container_code, String container_type) { |
|||
Date date = new Date(); |
|||
if (date.getTime() - this.instruction_require_time.getTime() < (long) this.instruction_require_time_out) { |
|||
log.trace("触发时间因为小于{}毫秒,而被无视", this.instruction_require_time_out); |
|||
return false; |
|||
} else { |
|||
this.instruction_require_time = date; |
|||
TaskDto dto = new TaskDto(); |
|||
String now = DateUtil.now(); |
|||
dto.setTask_id(IdUtil.simpleUUID()); |
|||
dto.setCreate_by(this.getDevice().getDevice_code()); |
|||
dto.setUpdate_by(this.getDevice().getDevice_code()); |
|||
dto.setStart_point_code(this.getDevice().getDevice_code()); |
|||
dto.setVehicle_code(container_code); |
|||
dto.setVehicle_type(container_type); |
|||
|
|||
String taskcode = CodeUtil.getNewCode("TASK_NO"); |
|||
dto.setTask_code("-" + taskcode); |
|||
dto.setTask_status("0"); |
|||
dto.setPriority("101"); |
|||
RouteLineDto jo = routelineserver.findByCode(this.getDevice().getDevice_code()); |
|||
String next_device_codecode = jo.getNext_device_code(); |
|||
if (StrUtil.isEmpty(next_device_codecode)) { |
|||
throw new RuntimeException("该设备未找到对应路由"); |
|||
} |
|||
dto.setNext_point_code(next_device_codecode); |
|||
dto.setUpdate_time(now); |
|||
dto.setCreate_time(now); |
|||
|
|||
// WQLObject wo = WQLObject.getWQLObject("acs_task");
|
|||
// JSONObject json = (JSONObject) JSONObject.toJSON(dto);
|
|||
//
|
|||
// wo.insert(json);
|
|||
|
|||
Task entity = ConvertUtil.convert(dto, Task.class); |
|||
taskMapper.insert(entity); |
|||
requireSucess = false; |
|||
return true; |
|||
} |
|||
} |
|||
|
|||
@Override |
|||
public JSONObject getDeviceStatusName() { |
|||
JSONObject jo = new JSONObject(); |
|||
String mode = ""; |
|||
String action = ""; |
|||
String move = ""; |
|||
if (this.getMode() == 0) { |
|||
mode = "未联机"; |
|||
} else if (this.getMode() == 1) { |
|||
mode = "单机"; |
|||
} else if (this.getMode() == 2) { |
|||
mode = "联机"; |
|||
} else if (this.getMode() == 3) { |
|||
mode = "运行中"; |
|||
} |
|||
|
|||
if (this.getMove() == 0) { |
|||
move = "无货"; |
|||
jo.put("hasGoods", false); |
|||
} else if (this.getMove() == 1) { |
|||
move = "有货"; |
|||
jo.put("hasGoods", true); |
|||
} else if (this.getMove() == 2) { |
|||
move = "有托盘有货"; |
|||
jo.put("hasGoods", true); |
|||
} |
|||
jo.put("device_name", this.getDevice().getDevice_name()); |
|||
jo.put("mode", mode); |
|||
jo.put("move", move); |
|||
jo.put("action", action); |
|||
jo.put("isOnline", this.getIsonline()); |
|||
jo.put("error", this.getError()); |
|||
jo.put("isError", this.getIserror()); |
|||
jo.put("task", this.getTask()); |
|||
return jo; |
|||
} |
|||
|
|||
@Override |
|||
public void setDeviceStatus(JSONObject data) { |
|||
|
|||
} |
|||
|
|||
/** |
|||
* lms申请任务 |
|||
* |
|||
* @param |
|||
*/ |
|||
public synchronized boolean apply(Integer type) { |
|||
Date date = new Date(); |
|||
if (date.getTime() - this.time.getTime() < (long) this.instruction_require_time_out) { |
|||
log.trace("触发时间因为小于{}毫秒,而被无视", this.time); |
|||
return false; |
|||
} else { |
|||
this.time = date; |
|||
FeedBackTaskStatusRequest request = new FeedBackTaskStatusRequest(); |
|||
request.setDevice_code(devicecode); |
|||
request.setMaterial_type(String.valueOf(material_type)); |
|||
request.setVehicle_code(String.valueOf(barcode)); |
|||
if (devicecode.startsWith("TBX")&&type==5&&barcode>0) { |
|||
//满架下料
|
|||
request.setRequest_medthod_code(RequestMethodEnum.apply_mjxl.getCode()); |
|||
request.setRequest_medthod_name(RequestMethodEnum.apply_mjxl.getName()); |
|||
}else if (devicecode.startsWith("TBX")&&type==6) { |
|||
//补空架
|
|||
request.setRequest_medthod_code(RequestMethodEnum.apply_tbxbkj.getCode()); |
|||
request.setRequest_medthod_name(RequestMethodEnum.apply_tbxbkj.getName()); |
|||
}else if (type==7) { |
|||
//空托盘出库,包片机和销售出库空位都可以
|
|||
request.setRequest_medthod_code(RequestMethodEnum.apply_kghjrk.getCode()); |
|||
request.setRequest_medthod_name(RequestMethodEnum.apply_kghjrk.getName()); |
|||
}else if(devicecode.startsWith("BP")&&material_type>0){ |
|||
request.setRequest_medthod_code(RequestMethodEnum.apply_bpsl.getCode()); |
|||
request.setRequest_medthod_name(RequestMethodEnum.apply_bpsl.getName()); |
|||
} |
|||
String resp = acsToWmsService.applyTask(request); |
|||
JSONObject res_jo = JSONObject.parseObject(resp); |
|||
if (StrUtil.equals(res_jo.getString("code"), "200")) { |
|||
this.writing(type); |
|||
this.setRequireSucess(true); |
|||
log.info("acs申请任务", this.devicecode, "满盅入库任务申请成功!"); |
|||
}else{ |
|||
this.writing(99); |
|||
} |
|||
return true; |
|||
} |
|||
} |
|||
} |
@ -1,149 +0,0 @@ |
|||
package org.nl.acs.device_driver.tianneng.tubanxian; |
|||
|
|||
import lombok.Data; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.nl.acs.device.device_driver.standard_inspect.ItemDto; |
|||
|
|||
import java.util.ArrayList; |
|||
import java.util.List; |
|||
|
|||
@Slf4j |
|||
@Data |
|||
public class ItemProtocol { |
|||
|
|||
public static String item_heartbeat = "heartbeat"; |
|||
public static String item_mode = "mode"; |
|||
public static String item_status = "status"; |
|||
public static String item_error = "error"; |
|||
public static String item_open_time = "open_time"; |
|||
public static String item_standby_time = "standby_time"; |
|||
public static String item_production_time = "production_time"; |
|||
public static String item_error_time = "error_time"; |
|||
public static String item_end_time = "end_time"; |
|||
public static String item_weight = "weight"; |
|||
public static String item_order_No = "order_No"; |
|||
public static String item_material = "material"; |
|||
public static String item_number = "number"; |
|||
public static String item_to_command = "to_command"; |
|||
public static String item_to_order_No = "to_order_No"; |
|||
public static String item_to_material_code = "to_material_code"; |
|||
public static String item_to_number = "to_number"; |
|||
|
|||
private TubanxianSiteDeviceDriver driver; |
|||
|
|||
public ItemProtocol(TubanxianSiteDeviceDriver driver) { |
|||
this.driver = driver; |
|||
} |
|||
|
|||
public int getHeartbeat() { |
|||
return this.getOpcIntegerValue(item_heartbeat); |
|||
} |
|||
|
|||
public int getMode() { |
|||
return this.getOpcIntegerValue(item_mode); |
|||
} |
|||
|
|||
public int getItem_status() { |
|||
return this.getOpcIntegerValue(item_status); |
|||
} |
|||
|
|||
public int getItem_error() { |
|||
return this.getOpcIntegerValue(item_error); |
|||
} |
|||
|
|||
public int getItem_open_time() { |
|||
return this.getOpcIntegerValue(item_open_time); |
|||
} |
|||
|
|||
public int getItem_standby_time() { |
|||
return this.getOpcIntegerValue(item_standby_time); |
|||
} |
|||
|
|||
public int getItem_production_time() { |
|||
return this.getOpcIntegerValue(item_production_time); |
|||
} |
|||
|
|||
public int getItem_error_time() { |
|||
return this.getOpcIntegerValue(item_error_time); |
|||
} |
|||
|
|||
public int getItem_end_time() { |
|||
return this.getOpcIntegerValue(item_end_time); |
|||
} |
|||
|
|||
public int getItem_weight() { |
|||
return this.getOpcIntegerValue(item_weight); |
|||
} |
|||
|
|||
public int getItem_order_No() { |
|||
return this.getOpcIntegerValue(item_order_No); |
|||
} |
|||
|
|||
public int getItem_material() { |
|||
return this.getOpcIntegerValue(item_material); |
|||
} |
|||
|
|||
public int getItem_number() { |
|||
return this.getOpcIntegerValue(item_number); |
|||
} |
|||
|
|||
public int getItem_to_command() { |
|||
return this.getOpcIntegerValue(item_to_command); |
|||
} |
|||
|
|||
public int getItem_to_order_No() { |
|||
return this.getOpcIntegerValue(item_to_order_No); |
|||
} |
|||
|
|||
public int getItem_to_material_code() { |
|||
return this.getOpcIntegerValue(item_to_material_code); |
|||
} |
|||
|
|||
public int getItem_to_number() { |
|||
return this.getOpcIntegerValue(item_to_number); |
|||
} |
|||
|
|||
Boolean isonline; |
|||
|
|||
public int getOpcIntegerValue(String protocol) { |
|||
Integer value = this.driver.getIntegeregerValue(protocol); |
|||
if (value == null) { |
|||
// log.error(this.getDriver().getDeviceCode() + ":protocol " + protocol + " 信号同步异常!");
|
|||
setIsonline(false); |
|||
} else { |
|||
setIsonline(true); |
|||
return value; |
|||
} |
|||
return 0; |
|||
|
|||
} |
|||
|
|||
public static List<ItemDto> getReadableItemDtos() { |
|||
ArrayList list = new ArrayList(); |
|||
list.add(new ItemDto(item_heartbeat, "心跳", "DB600.B0")); |
|||
list.add(new ItemDto(item_mode, "工作状态", "DB600.B2")); |
|||
list.add(new ItemDto(item_status, "设备状态", "DB600.B3")); |
|||
list.add(new ItemDto(item_error, "error", "DB600.B4")); |
|||
list.add(new ItemDto(item_open_time, "当前开机时间", "DB600.D6")); |
|||
list.add(new ItemDto(item_standby_time, "当前待机时间", "DB600.B7")); |
|||
list.add(new ItemDto(item_error_time, "当前生产时间", "DB600.D8")); |
|||
list.add(new ItemDto(item_end_time, "当前故障时间", "DB600.B3")); |
|||
list.add(new ItemDto(item_weight, "当前关机时间", "DB600.B4")); |
|||
list.add(new ItemDto(item_order_No, "本次称重重量", "DB600.D6")); |
|||
list.add(new ItemDto(item_error, "工单号", "DB600.B7")); |
|||
list.add(new ItemDto(item_material, "当前生产物料", "DB600.D8")); |
|||
list.add(new ItemDto(item_number, "当前生产数量", "DB600.D8")); |
|||
return list; |
|||
} |
|||
|
|||
public static List<ItemDto> getWriteableItemDtos() { |
|||
ArrayList list = new ArrayList(); |
|||
list.add(new ItemDto(item_to_command, "作业命令", "DB601.W2", Boolean.valueOf(true))); |
|||
list.add(new ItemDto(item_to_order_No, "工单号", "DB601.W2")); |
|||
list.add(new ItemDto(item_to_material_code, "下发物料编号", "DB601.W2")); |
|||
list.add(new ItemDto(item_to_number, "下发生产数量", "DB601.W2")); |
|||
return list; |
|||
} |
|||
|
|||
} |
|||
|
@ -1,62 +0,0 @@ |
|||
package org.nl.acs.device_driver.tianneng.tubanxian; |
|||
|
|||
import org.nl.acs.device.device_driver.standard_inspect.ItemDto; |
|||
import org.nl.acs.device.domain.Device; |
|||
import org.nl.acs.device.enums.DeviceType; |
|||
import org.nl.acs.device_driver.DeviceDriver; |
|||
import org.nl.acs.device_driver.defination.OpcDeviceDriverDefination; |
|||
import org.springframework.stereotype.Service; |
|||
|
|||
import java.util.LinkedList; |
|||
import java.util.List; |
|||
|
|||
/** |
|||
* 涂板线驱动定义 |
|||
* 说明:该站点为涂板线 |
|||
*/ |
|||
@Service |
|||
public class TubanxianSiteDefination implements OpcDeviceDriverDefination { |
|||
@Override |
|||
public String getDriverCode() { |
|||
return "tubanxian_site"; |
|||
} |
|||
|
|||
@Override |
|||
public String getDriverName() { |
|||
return "涂板线"; |
|||
} |
|||
|
|||
@Override |
|||
public String getDriverDescription() { |
|||
return "涂板线"; |
|||
} |
|||
|
|||
@Override |
|||
public DeviceDriver getDriverInstance(Device device) { |
|||
return (new TubanxianSiteDeviceDriver()).setDevice(device).setDriverDefination(this); |
|||
|
|||
} |
|||
|
|||
@Override |
|||
public Class<? extends DeviceDriver> getDeviceDriverType() { |
|||
return TubanxianSiteDeviceDriver.class; |
|||
} |
|||
|
|||
@Override |
|||
public List<DeviceType> getFitDeviceTypes() { |
|||
List<DeviceType> types = new LinkedList(); |
|||
types.add(DeviceType.conveyor); |
|||
return types; |
|||
} |
|||
|
|||
@Override |
|||
public List<ItemDto> getReadableItemDtos() { |
|||
return ItemProtocol.getReadableItemDtos(); |
|||
} |
|||
|
|||
@Override |
|||
public List<ItemDto> getWriteableItemDtos() { |
|||
return ItemProtocol.getWriteableItemDtos(); |
|||
} |
|||
|
|||
} |
@ -1,291 +0,0 @@ |
|||
package org.nl.acs.device_driver.tianneng.tubanxian; |
|||
|
|||
import cn.hutool.core.date.DateUtil; |
|||
import cn.hutool.core.util.IdUtil; |
|||
import cn.hutool.core.util.StrUtil; |
|||
import com.alibaba.fastjson.JSONObject; |
|||
import lombok.Data; |
|||
import lombok.RequiredArgsConstructor; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.nl.acs.device.domain.Device; |
|||
import org.nl.acs.device.service.DeviceService; |
|||
import org.nl.acs.device_driver.DeviceDriver; |
|||
import org.nl.acs.device_driver.RequestMethodEnum; |
|||
import org.nl.acs.device_driver.RouteableDeviceDriver; |
|||
import org.nl.acs.device_driver.driver.AbstractOpcDeviceDriver; |
|||
import org.nl.acs.device_driver.driver.ExecutableDeviceDriver; |
|||
import org.nl.acs.ext.wms.data.feedBackTaskStatus.FeedBackTaskStatusRequest; |
|||
import org.nl.acs.ext.wms.service.AcsToWmsService; |
|||
import org.nl.acs.instruction.domain.Instruction; |
|||
import org.nl.acs.instruction.service.InstructionService; |
|||
import org.nl.acs.monitor.DeviceStageMonitor; |
|||
import org.nl.acs.opc.WcsConfig; |
|||
import org.nl.acs.route.service.RouteLineService; |
|||
import org.nl.acs.route.service.dto.RouteLineDto; |
|||
import org.nl.acs.task.domain.Task; |
|||
import org.nl.acs.task.service.TaskService; |
|||
import org.nl.acs.task.service.dto.TaskDto; |
|||
import org.nl.acs.task.service.mapper.TaskMapper; |
|||
import org.nl.acs.utils.ConvertUtil; |
|||
import org.nl.common.utils.CodeUtil; |
|||
import org.nl.config.SpringContextHolder; |
|||
import org.openscada.opc.lib.da.Server; |
|||
|
|||
import java.util.Date; |
|||
import java.util.HashMap; |
|||
import java.util.List; |
|||
import java.util.Map; |
|||
|
|||
/** |
|||
* 涂板线驱动 |
|||
*/ |
|||
@Slf4j |
|||
@Data |
|||
@RequiredArgsConstructor |
|||
public class TubanxianSiteDeviceDriver extends AbstractOpcDeviceDriver implements DeviceDriver, ExecutableDeviceDriver, RouteableDeviceDriver , DeviceStageMonitor { |
|||
protected ItemProtocol itemProtocol = new ItemProtocol(this); |
|||
|
|||
InstructionService instructionService = SpringContextHolder.getBean("instructionServiceImpl"); |
|||
|
|||
DeviceService deviceservice = SpringContextHolder.getBean("deviceServiceImpl"); |
|||
|
|||
RouteLineService routelineserver = SpringContextHolder.getBean("routeLineServiceImpl"); |
|||
|
|||
TaskService taskserver = SpringContextHolder.getBean("taskServiceImpl"); |
|||
|
|||
TaskMapper taskMapper; |
|||
|
|||
AcsToWmsService acsToWmsService=SpringContextHolder.getBean("acsToWmsServiceImpl"); |
|||
|
|||
String container; |
|||
String container_type_desc; |
|||
String last_container_type_desc; |
|||
String last_container; |
|||
//放货准备锁
|
|||
String putReadyLock = null; |
|||
//有货标记
|
|||
protected boolean has_goods_tag = false; |
|||
|
|||
private Date time = new Date(); |
|||
|
|||
int mode = 0; |
|||
int error = 0; |
|||
int move = 0; |
|||
int task = 0; |
|||
int action = 0; |
|||
int last_mode = 0; |
|||
int last_error = 0; |
|||
int last_move = 0; |
|||
int last_task = 0; |
|||
Boolean isonline = true; |
|||
int hasGoods = 0; |
|||
String message = null; |
|||
Boolean iserror = false; |
|||
|
|||
int io_action = 0; |
|||
int last_io_action = 0; |
|||
int material_type = 0; |
|||
int last_material_type = 0; |
|||
int barcode = 0; |
|||
int last_barcode =0; |
|||
|
|||
|
|||
boolean hasVehicle = false; |
|||
boolean isReady = false; |
|||
protected int instruction_num = 0; |
|||
protected int instruction_num_truth = 0; |
|||
boolean isFold = false; |
|||
private String assemble_check_tag; |
|||
|
|||
protected String current_stage_instruction_message; |
|||
protected String last_stage_instruction_message; |
|||
Integer heartbeat_tag; |
|||
private Date instruction_require_time = new Date(); |
|||
private Date instruction_finished_time = new Date(); |
|||
|
|||
private int instruction_require_time_out; |
|||
boolean requireSucess = false; |
|||
|
|||
private int instruction_finished_time_out; |
|||
|
|||
int branchProtocol = 0; |
|||
//备注
|
|||
String remark; |
|||
//数量
|
|||
String qty; |
|||
//物料
|
|||
String material; |
|||
//批次
|
|||
String batch; |
|||
//当前指令
|
|||
Instruction inst = null; |
|||
//上次指令
|
|||
Instruction last_inst = null; |
|||
|
|||
//触摸屏手动触发任务
|
|||
private Boolean is_has_task = false; |
|||
|
|||
//满盅入库请求标记
|
|||
boolean Sucess = false; |
|||
|
|||
//暂定 0就绪 1请求取货 2取货完成 3请求放货 4放货完成 5取货完成离开 6放货完成离开 7请求进入区域 8请求离开区域
|
|||
int flag; |
|||
|
|||
String devicecode; |
|||
|
|||
@Override |
|||
public Device getDevice() { |
|||
return this.device; |
|||
} |
|||
|
|||
|
|||
@Override |
|||
public void execute() { |
|||
String message = null; |
|||
try { |
|||
devicecode = this.getDeviceCode(); |
|||
mode = this.itemProtocol.getMode(); |
|||
if (mode != last_mode) { |
|||
this.setRequireSucess(false); |
|||
if(mode==2){ |
|||
this.writing(0); |
|||
} |
|||
} |
|||
if (move != last_move) { |
|||
} |
|||
if (error != last_error) { |
|||
} |
|||
|
|||
|
|||
} catch (Exception var17) { |
|||
return; |
|||
} |
|||
|
|||
if (!this.itemProtocol.getIsonline()) { |
|||
this.setIsonline(false); |
|||
this.setIserror(true); |
|||
message = "信号量同步异常"; |
|||
//未联机
|
|||
} else if (mode == 0) { |
|||
this.setIsonline(false); |
|||
this.setIserror(true); |
|||
message = "未联机"; |
|||
//有报警
|
|||
} else if (error != 0) { |
|||
this.setIsonline(false); |
|||
this.setIserror(true); |
|||
message = "有报警"; |
|||
//无报警
|
|||
} else { |
|||
this.setIsonline(true); |
|||
this.setIserror(false); |
|||
message = ""; |
|||
Instruction instruction = null; |
|||
List toInstructions; |
|||
switch (mode) { |
|||
case 1: |
|||
log.debug("设备运转模式:等待工作"); |
|||
return; |
|||
case 2: |
|||
break; |
|||
case 3: |
|||
//称重
|
|||
if (!requireSucess){ |
|||
//todo 请求wms获取称重结果
|
|||
} |
|||
break; |
|||
case 4: |
|||
//工单开工
|
|||
if (!requireSucess){ |
|||
//todo 工单开工
|
|||
} |
|||
break; |
|||
case 5: |
|||
//工单完成
|
|||
if (!requireSucess){ |
|||
//todo 工单完成
|
|||
} |
|||
break; |
|||
} |
|||
|
|||
switch (flag) { |
|||
//取货完成
|
|||
case 1: |
|||
writing(2); |
|||
return; |
|||
//放货完成
|
|||
case 2: |
|||
writing(3); |
|||
return; |
|||
|
|||
} |
|||
|
|||
} |
|||
last_mode = mode; |
|||
last_error = error; |
|||
last_move = move; |
|||
last_task = task; |
|||
last_material_type = material_type; |
|||
last_barcode=barcode; |
|||
|
|||
} |
|||
|
|||
|
|||
|
|||
public void writing(int command) { |
|||
String to_command = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() |
|||
+ "." + ItemProtocol.item_to_command; |
|||
|
|||
//String opcservcerid = this.getDevice().getOpc_server_id();
|
|||
//Server server = ReadUtil.getServer(opcservcerid);
|
|||
Map<String, Object> itemMap = new HashMap<String, Object>(); |
|||
itemMap.put(to_command, command); |
|||
this.control(itemMap); |
|||
|
|||
} |
|||
|
|||
|
|||
|
|||
@Override |
|||
public JSONObject getDeviceStatusName() { |
|||
JSONObject jo = new JSONObject(); |
|||
String mode = ""; |
|||
String action = ""; |
|||
String move = ""; |
|||
if (this.getMode() == 0) { |
|||
mode = "未联机"; |
|||
} else if (this.getMode() == 1) { |
|||
mode = "单机"; |
|||
} else if (this.getMode() == 2) { |
|||
mode = "联机"; |
|||
} else if (this.getMode() == 3) { |
|||
mode = "运行中"; |
|||
} |
|||
|
|||
if (this.getMove() == 0) { |
|||
move = "无货"; |
|||
jo.put("hasGoods", false); |
|||
} else if (this.getMove() == 1) { |
|||
move = "有货"; |
|||
jo.put("hasGoods", true); |
|||
} else if (this.getMove() == 2) { |
|||
move = "有托盘有货"; |
|||
jo.put("hasGoods", true); |
|||
} |
|||
jo.put("device_name", this.getDevice().getDevice_name()); |
|||
jo.put("mode", mode); |
|||
jo.put("move", move); |
|||
jo.put("action", action); |
|||
jo.put("isOnline", this.getIsonline()); |
|||
jo.put("error", this.getError()); |
|||
jo.put("isError", this.getIserror()); |
|||
jo.put("task", this.getTask()); |
|||
return jo; |
|||
} |
|||
|
|||
@Override |
|||
public void setDeviceStatus(JSONObject data) { |
|||
|
|||
} |
|||
|
|||
} |
Loading…
Reference in new issue