package com.dy.rtuMw.server.tasks;
|
|
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.Logger;
|
|
import com.dy.common.mw.core.CoreTask;
|
import com.dy.common.mw.protocol.MidResult;
|
import com.dy.common.mw.protocol.Command;
|
import com.dy.common.mw.protocol.Driver;
|
import com.dy.common.mw.protocol.ProtocolCache;
|
import com.dy.rtuMw.server.ServerProperties;
|
import com.dy.rtuMw.server.forTcp.TcpSessionCache;
|
|
/**
|
* 从web业务系统发向RTU的命令任务
|
* @author Administrator
|
*
|
*/
|
public class WebDownComTask extends CoreTask {
|
|
private static Logger log = LogManager.getLogger(WebDownComTask.class.getName());
|
|
@Override
|
public Integer execute() {
|
Command com = (Command)this.data ;
|
try {
|
log.info("下发远程命令" + com.getCode() + "的核心任务开始执行");
|
this.deal(com);
|
} catch (Exception e) {
|
log.error("处理下行命令出错" + (e.getMessage()==null?"!":("," + e.getMessage())) ,e);
|
}
|
return null ;
|
}
|
|
/**
|
* 处理命令
|
* @param com 命令
|
* @throws Exception
|
*/
|
private void deal(Command com) throws Exception{
|
String rtuAddr = com.getRtuAddr() ;
|
//前面已经判断rtuAddr为空情况,至此其不为空
|
Driver dri = null ;
|
Object[] objs = TcpSessionCache.getTcpProtocolNameVersion(rtuAddr) ;
|
if(objs == null || objs.length == 0 || objs[0] == null){
|
//RTU未曾上线
|
/* 2024-11-02 增加了协议版本号,且一个协议可以有多个版本号,所以下面得到唯一协议驱动实现方式不可用了,因为确定不了版本号
|
int count = ProtocolCache.driverCount() ;
|
if(count == 1){
|
//只有一个协议
|
dri = ProtocolCache.getFirstDriver() ;
|
}
|
*/
|
}else{
|
String protocolName = (String)objs[0];
|
com.protocolVersion = (Short)objs[1];
|
dri = ProtocolCache.getDriver(protocolName) ;
|
if(dri == null){
|
log.error("严重错误,未能得到协议" + protocolName + "驱动类实例!");
|
}else{
|
MidResult[] actions = dri.createCommand(ServerProperties.isLowPower, com) ;
|
log.info("下发远程命令" + com.getCode() + "由协议驱动构造完成");
|
if(actions != null){
|
for(MidResult act : actions){
|
act.action();
|
}
|
}
|
}
|
}
|
}
|
|
}
|