| New file | 
|  |  |  | 
|---|
|  |  |  | 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未曾上线 | 
|---|
|  |  |  | 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, com.protocolVersion) ; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if(dri == null){ | 
|---|
|  |  |  | log.error("严重错误,未能得到RTU(" + rtuAddr + ")驱动类实例!"); | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | MidResult[] actions = dri.createCommand(ServerProperties.isLowPower, com)  ; | 
|---|
|  |  |  | log.info("下发远程命令" + com.getCode() + "由协议驱动构造完成"); | 
|---|
|  |  |  | if(actions != null){ | 
|---|
|  |  |  | for(MidResult act : actions){ | 
|---|
|  |  |  | act.action(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|