#
Junjie
2 天以前 3c45d4f9f3aba5bc85a9577e43c0dffc71b93a22
src/main/java/com/zy/core/thread/impl/LfdZyForkLiftMasterThread.java
@@ -1,145 +1,153 @@
package com.zy.core.thread.impl;
import HslCommunication.Core.Types.OperateResult;
import HslCommunication.Core.Types.OperateResultExOne;
import HslCommunication.Profinet.Siemens.SiemensPLCS;
import HslCommunication.Profinet.Siemens.SiemensS7Net;
import com.core.common.DateUtils;
import com.zy.common.utils.RedisUtil;
import com.zy.core.News;
import com.zy.core.ThreadHandler;
import com.zy.core.cache.OutputQueue;
import com.zy.core.model.ForkLiftSlave;
import com.zy.core.model.protocol.ForkLiftProtocol;
import lombok.extern.slf4j.Slf4j;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
@Slf4j
@SuppressWarnings("all")
public class LfdZyForkLiftMasterThread implements ThreadHandler {
    private ForkLiftSlave slave;
    private ForkLiftProtocol forkLiftProtocol;
    private RedisUtil redisUtil;
    private SiemensS7Net siemensS7Net;
    private List<HashMap<String,Object>> slaveAddressList = null;
    private boolean connect = false;
    public LfdZyForkLiftMasterThread(ForkLiftSlave slave, RedisUtil redisUtil) {
        this.slave = slave;
        this.redisUtil = redisUtil;
        ArrayList<HashMap<String, Object>> addressList = new ArrayList<>();
        HashMap<String, Object> lift1 = new HashMap<>();
        lift1.put("status", new DbData("DB101.0", (short) 16));//提升机数据
        lift1.put("staStatus", new DbData("DB102.0", (short) 8));//站点数据
        lift1.put("write", new DbData("DB103.0", null));//写入数据
        lift1.put("writeConfirm", new DbData("DB103.8", null));//写入确认数据
        lift1.put("confirm", new DbData("DB103.10", null));//确认命令
        HashMap<String, Object> lift2 = new HashMap<>();
        lift2.put("status", new DbData("DB104.0", (short) 16));//提升机数据
        lift2.put("staStatus", new DbData("DB105.0", (short) 8));//站点数据
        lift2.put("write", new DbData("DB106.0", null));//写入数据
        lift2.put("writeConfirm", new DbData("DB106.8", null));//写入确认数据
        lift2.put("confirm", new DbData("DB106.10", null));//确认命令
        addressList.add(lift1);
        addressList.add(lift2);
        this.slaveAddressList = addressList;
    }
    @Override
    public boolean connect() {
        boolean result = false;
        siemensS7Net = new SiemensS7Net(SiemensPLCS.S1200, slave.getIp());
        siemensS7Net.setRack(slave.getRack().byteValue());
        siemensS7Net.setSlot(slave.getSlot().byteValue());
        OperateResult connect = siemensS7Net.ConnectServer();
        if(connect.IsSuccess){
            result = true;
            OutputQueue.FORKLIFT.offer(MessageFormat.format( "【{0}】货叉提升机连接成功 ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()));
            News.info("货叉提升机连接成功 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
        } else {
            OutputQueue.FORKLIFT.offer(MessageFormat.format( "【{0}】货叉提升机连接失败!!! ===>> [id:{1}] [ip:{2}] [port:{3}]  [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()));
            News.error("货叉提升机连接失败!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
        }
        // siemensS7Net.ConnectClose();
        this.connect = result;
        return result;
    }
    @Override
    public void close() {
    }
    @Override
    public void run() {
        News.info("{}号货叉提升机Master线程启动", slave.getId());
        this.connect();
        while (true) {
            try {
                if (!this.connect) {
                    this.connect();
                }
                Thread.sleep(500);
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }
    public OperateResultExOne<byte[]> read(Integer slaveId, String dbTag) {
        try {
            HashMap<String, Object> map = this.slaveAddressList.get(slaveId - 1);
            DbData dbData = (DbData) map.get(dbTag);
            OperateResultExOne<byte[]> result = siemensS7Net.Read(dbData.dbAddress, dbData.dbAddressLength);
            return result;
        } catch (Exception e) {
            OutputQueue.FORKLIFT.offer(MessageFormat.format("【{0}】读取提升机状态信息失败 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
        }
        return null;
    }
    public OperateResult write(Integer slaveId, String dbTag, short[] array) {
        try {
            HashMap<String, Object> map = this.slaveAddressList.get(slaveId - 1);
            DbData dbData = (DbData) map.get(dbTag);
            OperateResult result = siemensS7Net.Write(dbData.dbAddress, array);
            return result;
        } catch (Exception e) {
            OutputQueue.FORKLIFT.offer(MessageFormat.format("【{0}】写入提升机状态信息失败 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
        }
        return null;
    }
    public OperateResult write(Integer slaveId, String dbTag, short val) {
        try {
            HashMap<String, Object> map = this.slaveAddressList.get(slaveId - 1);
            DbData dbData = (DbData) map.get(dbTag);
            OperateResult result = siemensS7Net.Write(dbData.dbAddress, val);
            return result;
        } catch (Exception e) {
            OutputQueue.FORKLIFT.offer(MessageFormat.format("【{0}】写入提升机状态信息失败 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
        }
        return null;
    }
    private class DbData {
        private String dbAddress;
        private Short dbAddressLength;
        public DbData(String dbAddress, Short dbAddressLength) {
            this.dbAddress = dbAddress;
            this.dbAddressLength = dbAddressLength;
        }
    }
}
//package com.zy.core.thread.impl;
//
//import HslCommunication.Core.Types.OperateResult;
//import HslCommunication.Core.Types.OperateResultExOne;
//import HslCommunication.Profinet.Siemens.SiemensPLCS;
//import HslCommunication.Profinet.Siemens.SiemensS7Net;
//import com.core.common.DateUtils;
//import com.zy.common.utils.RedisUtil;
//import com.zy.core.News;
//import com.zy.core.ThreadHandler;
//import com.zy.core.cache.OutputQueue;
//import com.zy.core.model.ForkLiftSlave;
//import com.zy.core.model.protocol.ForkLiftProtocol;
//import lombok.extern.slf4j.Slf4j;
//
//import java.text.MessageFormat;
//import java.util.ArrayList;
//import java.util.Date;
//import java.util.HashMap;
//import java.util.List;
//
//@Slf4j
//@SuppressWarnings("all")
//public class LfdZyForkLiftMasterThread implements ThreadHandler {
//
//    private ForkLiftSlave slave;
//    private ForkLiftProtocol forkLiftProtocol;
//    private RedisUtil redisUtil;
//    private SiemensS7Net siemensS7Net;
//    private List<HashMap<String,Object>> slaveAddressList = null;
//    private boolean connect = false;
//
//    public LfdZyForkLiftMasterThread(ForkLiftSlave slave, RedisUtil redisUtil) {
//        this.slave = slave;
//        this.redisUtil = redisUtil;
//        ArrayList<HashMap<String, Object>> addressList = new ArrayList<>();
//
//        HashMap<String, Object> lift1 = new HashMap<>();
//        lift1.put("status", new DbData("DB101.0", (short) 18));//提升机数据
//        lift1.put("staStatusTray", new DbData("DB102.0", (short) 14));//站点数据
//        lift1.put("staStatusCar", new DbData("DB102.50", (short) 14));//站点数据
//        lift1.put("write", new DbData("DB103.0", null));//写入数据
//        lift1.put("writeConfirm", new DbData("DB103.8", null));//写入确认数据
//        lift1.put("confirm", new DbData("DB103.10", null));//确认命令
//        lift1.put("switchIOMode", new DbData("DB103.12", null));//出入库模式
//
//        HashMap<String, Object> lift2 = new HashMap<>();
//        lift2.put("status", new DbData("DB104.0", (short) 18));//提升机数据
//        lift2.put("staStatusTray", new DbData("DB105.0", (short) 14));//站点数据
//        lift2.put("staStatusCar", new DbData("DB105.50", (short) 14));//站点数据
//        lift2.put("write", new DbData("DB106.0", null));//写入数据
//        lift2.put("writeConfirm", new DbData("DB106.8", null));//写入确认数据
//        lift2.put("confirm", new DbData("DB106.10", null));//确认命令
//        lift2.put("switchIOMode", new DbData("DB106.12", null));//出入库模式
//
//        addressList.add(lift1);
//        addressList.add(lift2);
//        this.slaveAddressList = addressList;
//    }
//
//    @Override
//    public boolean connect() {
//        boolean result = false;
//        siemensS7Net = new SiemensS7Net(SiemensPLCS.S1200, slave.getIp());
//        siemensS7Net.setRack(slave.getRack().byteValue());
//        siemensS7Net.setSlot(slave.getSlot().byteValue());
//        OperateResult connect = siemensS7Net.ConnectServer();
//        if(connect.IsSuccess){
//            result = true;
//            OutputQueue.FORKLIFT.offer(MessageFormat.format( "【{0}】货叉提升机连接成功 ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()));
//            News.info("货叉提升机连接成功 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
//        } else {
//            OutputQueue.FORKLIFT.offer(MessageFormat.format( "【{0}】货叉提升机连接失败!!! ===>> [id:{1}] [ip:{2}] [port:{3}]  [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()));
//            News.error("货叉提升机连接失败!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
//        }
//        // siemensS7Net.ConnectClose();
//        this.connect = result;
//        return result;
//    }
//
//    @Override
//    public void close() {
//
//    }
//
//    @Override
//    public void run() {
//        News.info("{}号货叉提升机Master线程启动", slave.getId());
//        this.connect();
//        while (true) {
//            try {
//                if (!this.connect) {
//                    this.connect();
//                }
//
//                Thread.sleep(500);
//            }catch (Exception e){
//                e.printStackTrace();
//            }
//        }
//    }
//
//    public SiemensS7Net getSiemensS7Net() {
//        return siemensS7Net;
//    }
//
//    public synchronized OperateResultExOne<byte[]> read(Integer slaveId, String dbTag) {
//        try {
//            HashMap<String, Object> map = this.slaveAddressList.get(slaveId - 1);
//            DbData dbData = (DbData) map.get(dbTag);
//            OperateResultExOne<byte[]> result = siemensS7Net.Read(dbData.dbAddress, dbData.dbAddressLength);
//            return result;
//        } catch (Exception e) {
//            OutputQueue.FORKLIFT.offer(MessageFormat.format("【{0}】读取提升机状态信息失败 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
//        }
//        return null;
//    }
//
//    public synchronized OperateResult write(Integer slaveId, String dbTag, short[] array) {
//        try {
//            HashMap<String, Object> map = this.slaveAddressList.get(slaveId - 1);
//            DbData dbData = (DbData) map.get(dbTag);
//            OperateResult result = siemensS7Net.Write(dbData.dbAddress, array);
//            return result;
//        } catch (Exception e) {
//            OutputQueue.FORKLIFT.offer(MessageFormat.format("【{0}】写入提升机状态信息失败 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
//        }
//        return null;
//    }
//
//    public synchronized OperateResult write(Integer slaveId, String dbTag, short val) {
//        try {
//            HashMap<String, Object> map = this.slaveAddressList.get(slaveId - 1);
//            DbData dbData = (DbData) map.get(dbTag);
//            OperateResult result = siemensS7Net.Write(dbData.dbAddress, val);
//            return result;
//        } catch (Exception e) {
//            OutputQueue.FORKLIFT.offer(MessageFormat.format("【{0}】写入提升机状态信息失败 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
//        }
//        return null;
//    }
//
//    private class DbData {
//        private String dbAddress;
//        private Short dbAddressLength;
//
//        public DbData(String dbAddress, Short dbAddressLength) {
//            this.dbAddress = dbAddress;
//            this.dbAddressLength = dbAddressLength;
//        }
//
//    }
//}