@@ -14,11 +14,8 @@ 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.instruction.service.InstructionService ;
import org.nl.acs.instruction.service.dto.Instruction ;
import org.nl.acs.log.service.DeviceExecuteLogService ;
import org.nl.acs.opc.Device ;
import org.nl.acs.opc.DeviceAppService ;
import org.nl.acs.opc.DeviceAppServiceImpl ;
import org.nl.acs.opc.WcsConfig ;
import org.nl.acs.route.service.RouteLineService ;
import org.nl.acs.route.service.dto.RouteLineDto ;
@@ -28,11 +25,9 @@ import org.nl.modules.system.util.CodeUtil;
import org.nl.utils.SpringContextHolder ;
import org.nl.wql.core.bean.WQLObject ;
import org.openscada.opc.lib.da.Server ;
import org.springframework.beans.factory.annotation.Autowired ;
import java.util.Date ;
import java.util.HashMap ;
import java.util.List ;
import java.util.Map ;
/**
@@ -43,80 +38,23 @@ import java.util.Map;
@RequiredArgsConstructor
public class ModbusInspectSiteDeviceDriver extends AbstractOpcDeviceDriver implements DeviceDriver , ExecutableDeviceDriver , RouteableDeviceDriver {
protected ItemProtocol itemProtocol = new ItemProtocol ( this ) ;
@Autowired
InstructionService instructionService = SpringContextHolder . getBean ( " instructionServiceImpl " ) ;
@Autowired
DeviceService deviceservice = SpringContextHolder . getBean ( " deviceServiceImpl " ) ;
@Autowired
RouteLineService routelineserver = SpringContextHolder . getBean ( " routeLineServiceImpl " ) ;
@Autowired
TaskService taskserver = SpringContextHolder . getBean ( " taskServiceImpl " ) ;
@Autowired
DeviceExecuteLogService logServer = SpringContextHolder . getBean ( " deviceExecuteLogServiceImpl " ) ;
String container ;
String container_type_desc ;
String last_container_type_desc ;
String last_container ;
//放货准备锁
String putReadyLock = null ;
//有货标记
protected boolean has_goods_tag = false ;
int mode = 0 ;
int error = 0 ;
int move = 0 ;
int task = 0 ;
int last_mode = 0 ;
int last_error = 0 ;
int last_move = 0 ;
int last_task = 0 ;
int heartbeat = 0 ;
int last_heartbeat = 0 ;
int action = 0 ;
int last_action = 0 ;
Boolean isonline = true ;
int hasGoods = 0 ;
String message = null ;
Boolean iserror = false ;
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 ;
//申请搬运任务
private Boolean apply_handling = false ;
//申请物料
private Boolean apply_material = false ;
//暂定 0就绪 1请求取货 2取货完成 3请求放货 4放货完成 5取货完成离开 6放货完成离开 7请求进入区域 8请求离开区域
int flag ;
@@ -130,79 +68,24 @@ public class ModbusInspectSiteDeviceDriver extends AbstractOpcDeviceDriver imple
@Override
public void execute ( ) {
String message = null ;
try {
device_code = this . getDeviceCode ( ) ;
mode = this . itemProtocol . getMode ( ) ;
error = this . itemProtocol . getError ( ) ;
move = this . itemProtocol . getMove ( ) ;
task = this . itemProtocol . getTask ( ) ;
hasGoods = this . itemProtocol . getMove ( ) ;
if ( mode ! = last_mode ) {
this . setRequireSucess ( false ) ;
logServer . deviceItemValue ( this . device_code , " mode " , String . valueOf ( mode ) ) ;
logServer . deviceExecuteLog ( this . device_code , " " , " " , " 信号mode: " + last_mode + " -> " + mode ) ;
heartbeat = this . itemProtocol . getHeartbeat ( ) ;
move = this . itemProtocol . getMove ( ) ;
action = this . itemProtocol . getAction ( ) ;
if ( heartbeat ! = last_heartbeat ) {
logServer . deviceItemValue ( this . device_code , " move " , String . valueOf ( heartbeat ) ) ;
logServer . deviceExecuteLog ( this . device_code , " " , " " , " 信号move: " + last_heartbeat + " -> " + heartbeat ) ;
}
if ( move ! = last_move ) {
logServer . deviceItemValue ( this . device_code , " move " , String . valueOf ( move ) ) ;
logServer . deviceExecuteLog ( this . device_code , " " , " " , " 信号move: " + last_move + " -> " + move ) ;
logServer . deviceItemValue ( this . device_code , " move " , String . valueOf ( move ) ) ;
logServer . deviceExecuteLog ( this . device_code , " " , " " , " 信号move: " + last_move + " -> " + move ) ;
}
if ( error ! = last_error ) {
logServer . deviceItemValue ( this . device_code , " error " , String . valueOf ( error ) ) ;
logServer . deviceExecuteLog ( this . device_code , " " , " " , " 信号error : " + last_error + " -> " + error ) ;
}
if ( task ! = last_task ) {
logServer . deviceItemValue ( this . device_code , " task " , String . valueOf ( task ) ) ;
logServer . deviceExecuteLog ( this . device_code , " " , " " , " 信号task: " + last_task + " -> " + task ) ;
}
if ( this . getApply_handling ( ) ) {
String link_device_code = this . getDevice ( ) . getExtraValue ( ) . get ( " link_device_code " ) . toString ( ) ;
DeviceAppService appService = SpringContextHolder . getBean ( DeviceAppServiceImpl . class ) ;
Device link_device = appService . findDeviceByCode ( link_device_code ) ;
ModbusInspectSiteDeviceDriver standardInspectSiteDevicedriver ;
if ( link_device . getDeviceDriver ( ) instanceof ModbusInspectSiteDeviceDriver ) {
standardInspectSiteDevicedriver = ( ModbusInspectSiteDeviceDriver ) link_device . getDeviceDriver ( ) ;
// if(standardInspectSiteDevicedriver.getMode() != 2){
// log.debug("设备未待机");
// return;
// }
// if(standardInspectSiteDevicedriver.getMove() != 0){
// log.debug("设备不满足放货条件");
// return;
// }
//如果目标设备申请叫料 则允许生成任务
if ( standardInspectSiteDevicedriver . getApply_material ( ) ) {
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 ( ) ) ;
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 ( this . getDeviceCode ( ) ) ;
dto . setUpdate_time ( now ) ;
dto . setCreate_time ( now ) ;
WQLObject wo = WQLObject . getWQLObject ( " acs_task " ) ;
JSONObject json = ( JSONObject ) JSONObject . toJSON ( dto ) ;
wo . insert ( json ) ;
standardInspectSiteDevicedriver . setApply_material ( false ) ;
}
}
this . setApply_handling ( false ) ;
if ( action ! = last_action ) {
logServer . deviceItemValue ( this . device_code , " move " , String . valueOf ( action ) ) ;
logServer . deviceExecuteLog ( this . device_code , " " , " " , " 信号move : " + last_action + " -> " + action ) ;
}
} catch ( Exception var17 ) {
@@ -212,161 +95,14 @@ public class ModbusInspectSiteDeviceDriver extends AbstractOpcDeviceDriver imple
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 :
//申请任务
// if (this.getApply_handling()) {
// String link_device_code = this.getDevice().getExtraValue().get("link_device_code").toString();
// DeviceAppService appService = SpringContextHolder.getBean(DeviceAppServiceImpl.class);
// Device link_device = appService.findDeviceByCode(link_device_code);
// StandardInspectSiteDeviceDriver standardInspectSiteDevicedriver;
// if(link_device.getDeviceDriver() instanceof StandardInspectSiteDeviceDriver) {
// standardInspectSiteDevicedriver = (StandardInspectSiteDeviceDriver) link_device.getDeviceDriver();
// if(standardInspectSiteDevicedriver.getMode() != 2){
// log.debug("设备未待机");
// return;
// }
// if(standardInspectSiteDevicedriver.getMove() != 0){
// log.debug("设备不满足放货条件");
// return;
// }
//
// //如果目标设备申请叫料 则允许生成任务
// if(standardInspectSiteDevicedriver.getApply_material()){
// 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());
//
// String taskcode = CodeGenerateUtil.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);
// standardInspectSiteDevicedriver.setApply_material(false);
// }
// }
// this.setApply_handling(false);
// }
if ( material . length ( ) > 0 & & qty . length ( ) > 0 & & ! requireSucess ) {
this . instruction_require ( container ) ;
}
}
switch ( flag ) {
//取货完成
case 1 :
writing ( 2 ) ;
return ;
//放货完成
case 2 :
writing ( 3 ) ;
return ;
}
}
last_mode = mode ;
last_error = error ;
last_heartbeat = heartbeat ;
last_move = move ;
last_task = task ;
}
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 ) ;
ReadUtil . write ( itemMap , server ) ;
}
public void executing ( Server server , Map < String , Object > itemMap ) {
ReadUtil . write ( itemMap , server ) ;
last_action = action ;
}
public void writing ( int command ) {
@@ -375,81 +111,9 @@ public class ModbusInspectSiteDeviceDriver extends AbstractOpcDeviceDriver imple
String opcservcerid = this . getDevice ( ) . getOpc_server_id ( ) ;
Server server = ReadUtil . getServer ( opcservcerid ) ;
Map < String , Object > itemMap = new HashMap < String , Object > ( ) ;
Map < String , Object > itemMap = new HashMap < > ( ) ;
itemMap . put ( to_command , command ) ;
ReadUtil . write ( itemMap , server ) ;
}
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 ) ;
}
ReadUtil . write ( itemMap , server ) ;
}
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 ) ;
requireSucess = false ;
return true ;
}
}
}