package com.zy.core.network.real; import HslCommunication.Core.Types.OperateResult; import HslCommunication.Core.Types.OperateResultExOne; import HslCommunication.Profinet.Siemens.SiemensPLCS; import HslCommunication.Profinet.Siemens.SiemensS7Net; import java.text.MessageFormat; import java.util.Date; import com.alibaba.fastjson.JSON; import com.core.common.DateUtils; import com.core.common.SpringUtils; import com.zy.asrs.entity.BasCrnpOpt; import com.zy.asrs.entity.BasRgv; import com.zy.asrs.entity.BasRgvOpt; import com.zy.asrs.entity.DeviceConfig; import com.zy.asrs.entity.DeviceDataLog; import com.zy.asrs.service.BasCrnpOptService; import com.zy.asrs.service.BasRgvOptService; import com.zy.asrs.service.BasRgvService; import com.zy.asrs.service.DeviceDataLogService; import com.zy.asrs.utils.Utils; import com.zy.core.News; import com.zy.core.cache.OutputQueue; import com.zy.core.enums.RgvStatusType; import com.zy.core.model.CommandResponse; import com.zy.core.model.command.RgvCommand; import com.zy.core.model.protocol.RgvProtocol; import com.zy.core.network.api.ZyRgvConnectApi; import com.zy.core.network.entity.ZyRgvStatusEntity; public class ZyRgvRealConnect implements ZyRgvConnectApi { private SiemensS7Net siemensNet; private DeviceConfig deviceConfig; public ZyRgvRealConnect(DeviceConfig deviceConfig) { this.deviceConfig = deviceConfig; } @Override public boolean connect() { boolean result = false; siemensNet = new SiemensS7Net(SiemensPLCS.S1200, deviceConfig.getIp()); OperateResult connect = siemensNet.ConnectServer(); if(connect.IsSuccess){ result = true; OutputQueue.RGV.offer(MessageFormat.format( "【{0}】RGV plc连接成功 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), deviceConfig.getId(), deviceConfig.getIp(), deviceConfig.getPort())); News.info("RGV plc连接成功 ===>> [id:{}] [ip:{}] [port:{}]", deviceConfig.getId(), deviceConfig.getIp(), deviceConfig.getPort()); } else { OutputQueue.RGV.offer(MessageFormat.format("【{0}】RGV plc连接失败!!! ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), deviceConfig.getId(), deviceConfig.getIp(), deviceConfig.getPort())); News.error("RGV plc连接失败!!! ===>> [id:{}] [ip:{}] [port:{}]", deviceConfig.getId(), deviceConfig.getIp(), deviceConfig.getPort()); } // siemensNet.ConnectClose(); return result; } @Override public boolean disconnect() { siemensNet.ConnectClose(); return true; } @Override public ZyRgvStatusEntity getStatus() { try { OperateResultExOne result = siemensNet.Read("DB101.0", (short) 30); if (result.IsSuccess) { ZyRgvStatusEntity zyRgvStatusEntity = new ZyRgvStatusEntity(); zyRgvStatusEntity.setRgvNo(deviceConfig.getDeviceNo()); zyRgvStatusEntity.setMode((int) siemensNet.getByteTransform().TransInt16(result.Content, 0)); zyRgvStatusEntity.setStatus((int) siemensNet.getByteTransform().TransInt16(result.Content, 2)); zyRgvStatusEntity.setTaskNo((int) siemensNet.getByteTransform().TransInt16(result.Content, 4)); // zyRgvStatusEntity.setStatus((int) siemensNet.getByteTransform().TransInt16(result.Content, 6)); zyRgvStatusEntity.setLoaded((int) siemensNet.getByteTransform().TransInt16(result.Content, 8)); zyRgvStatusEntity.setRgvPos((int) siemensNet.getByteTransform().TransInt16(result.Content, 10)); zyRgvStatusEntity.setWalkPos((int) siemensNet.getByteTransform().TransInt16(result.Content, 12)); zyRgvStatusEntity.setAlarm((int) siemensNet.getByteTransform().TransInt16(result.Content, 14)); OutputQueue.RGV.offer(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功", DateUtils.convert(new Date()), deviceConfig.getDeviceNo())); return zyRgvStatusEntity; } else { OutputQueue.RGV.offer(MessageFormat.format("【{0}】读取RGV plc状态信息失败 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), deviceConfig.getId(), deviceConfig.getIp(), deviceConfig.getPort())); } } catch (Exception e) { e.printStackTrace(); OutputQueue.RGV.offer(MessageFormat.format("【{0}】读取RGV plc状态信息失败 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), deviceConfig.getId(), deviceConfig.getIp(), deviceConfig.getPort())); } return null; } @Override public CommandResponse sendCommand(RgvCommand command) { CommandResponse response = new CommandResponse(false); try { if (null == command) { response.setMessage("RGV写入命令为空"); return response; } short[] array = new short[5]; array[0] = command.getAckFinish().shortValue(); array[1] = command.getTaskNo().shortValue(); array[2] = command.getTaskMode().shortValue(); array[3] = command.getSourcePos().shortValue(); array[4] = command.getTargetPos().shortValue(); OperateResult result = siemensNet.Write("DB100.0", array); if (result != null && result.IsSuccess) { News.info("RGV 命令下发[id:{}] >>>>> {}", deviceConfig.getDeviceNo(), JSON.toJSON(command)); OutputQueue.RGV.offer(MessageFormat.format("【{0}】[id:{1}] >>>>> 命令下发: {2}", DateUtils.convert(new Date()), deviceConfig.getDeviceNo(), JSON.toJSON(command))); response.setResult(true); return response; } else { OutputQueue.RGV.offer(MessageFormat.format("【{0}】写入RGV plc数据失败 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), deviceConfig.getId(), deviceConfig.getIp(), deviceConfig.getPort())); News.error("写入RGV plc数据失败 ===>> [id:{}] [ip:{}] [port:{}]", deviceConfig.getId(), deviceConfig.getIp(), deviceConfig.getPort()); response.setMessage("写入RGV plc数据失败"); return response; } } catch (Exception e) { e.printStackTrace(); } finally { // 日志记录 BasRgvOptService bean = SpringUtils.getBean(BasRgvOptService.class); BasRgvOpt basRgvOpt = new BasRgvOpt( command.getTaskNo(), // 任务号 command.getRgvNo(), // RGV[非空] new Date(), // 下发时间 String.valueOf(command.getTaskMode()), // 模式 String.valueOf(command.getSourcePos()), //源库位 String.valueOf(command.getTargetPos()), //目标库位 null, // 修改时间 null, // 修改人员 null, // 备注 JSON.toJSONString(command), // 指令 JSON.toJSONString(getStatus()), // 系统状态 1, // 下发状态{0:未下发,1:已下发} JSON.toJSONString(response) // 响应 ); bean.insert(basRgvOpt); } return response; } }