| | |
| | | import com.dy.common.mw.protocol.Driver; |
| | | import com.dy.common.mw.protocol.OnLine; |
| | | import com.dy.common.mw.protocol.OnLineHandle; |
| | | import com.dy.common.mw.protocol.ProtocolCach; |
| | | import com.dy.common.mw.protocol.ProtocolCache; |
| | | import com.dy.aceMw.server.ServerProperties; |
| | | import com.dy.aceMw.server.forTcp.RtuLogDealer; |
| | | import com.dy.aceMw.server.forTcp.RtuStatusDealer; |
| | | import com.dy.aceMw.server.forTcp.TcpSessionCach; |
| | | import com.dy.aceMw.server.forTcp.TcpSessionCache; |
| | | import com.dy.common.util.ByteUtil; |
| | | |
| | | public class RtuUpTask extends CoreTask { |
| | |
| | | private static final Logger log = LogManager.getLogger(RtuUpTask.class.getName()); |
| | | |
| | | @Override |
| | | public Integer excute() { |
| | | public Integer execute() { |
| | | Object[] os = (Object[])this.data ; |
| | | IoSession session = (IoSession)os[0] ; |
| | | byte[] upBuf = (byte[])os[1] ; |
| | |
| | | //设置session的属性ID |
| | | TcpUnit.getInstance().setIoSessionArrId(session, rtuAddr); |
| | | //缓存session |
| | | TcpSessionCach.putNewTcpSession(rtuAddr, protocolName, session); |
| | | TcpSessionCache.putNewTcpSession(rtuAddr, protocolName, session); |
| | | |
| | | log.info("RTU(地址:" + rtuAddr + ")上线了。") ; |
| | | log.info("RTU(地址:" + rtuAddr + ",协议:" + protocolName + ")上线了。") ; |
| | | } |
| | | } |
| | | } |
| | | |
| | | if(rtuAddr != null){ |
| | | if(protocolName == null){ |
| | | protocolName = TcpSessionCach.getTcpProtocolName(rtuAddr) ; |
| | | protocolName = TcpSessionCache.getTcpProtocolName(rtuAddr) ; |
| | | } |
| | | |
| | | //设置收到数据时刻 |
| | | TcpSessionCach.cachUpDataTime(rtuAddr); |
| | | TcpSessionCache.cacheUpDataTime(rtuAddr); |
| | | |
| | | if(protocolName != null){ |
| | | //对上行数据进行处理 |
| | |
| | | * @throws Exception 异常 |
| | | */ |
| | | private void dealUpData(IoSession session, String rtuAddrAtHead, String protocolName, boolean isOnLine, byte[] upBuf, String upHex) throws Exception{ |
| | | Driver dri = ProtocolCach.getDriver(protocolName) ; |
| | | Driver dri = ProtocolCache.getDriver(protocolName) ; |
| | | if(dri == null){ |
| | | log.error("严重错误,未能得到协议" + protocolName + "驱动类实例!"); |
| | | }else{ |
| | | MidResult[] midRs = dri.parseData(ServerProperties.isLowPower, rtuAddrAtHead, upBuf, upHex, new DriverParserDataCallback(){ |
| | | @Override |
| | | public void callback(String rtuAddrAtHead, String meterNoAtHead, String code, String upHex, Boolean reportOrResponse_trueOrFalse, boolean parseFail, String rtuAddrInData, String meterNoInData) { |
| | | public void callback(String rtuAddrAtHead, String code, String upHex, Boolean reportOrResponse_trueOrFalse, boolean parseFail, String rtuAddrInData) { |
| | | //更新终端状态 |
| | | if(rtuAddrInData != null && !rtuAddrInData.equals(rtuAddrAtHead)){ |
| | | //数据头中的RTU地址与数据中的RTU地址不一致,更换成数据中的RTU地址 |
| | | TcpSessionCach.changeRtuAddr(rtuAddrAtHead, rtuAddrInData, protocolName, session); |
| | | TcpSessionCache.changeRtuAddr(rtuAddrAtHead, rtuAddrInData, protocolName, session); |
| | | session.setAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrIdKey, rtuAddrInData) ; |
| | | } |
| | | |