| | |
| | | import com.zy.asrs.wcs.rcs.News; |
| | | import com.zy.asrs.wcs.rcs.cache.OutputQueue; |
| | | import com.zy.asrs.wcs.rcs.entity.Device; |
| | | import com.zy.asrs.wcs.rcs.model.dto.WorkModeTypeDto; |
| | | import com.zy.asrs.wcs.rcs.model.enums.WorkModeType; |
| | | import com.zy.asrs.wcs.rcs.model.protocol.StaProtocol; |
| | | import com.zy.asrs.wcs.rcs.thread.DevpThread; |
| | | import lombok.extern.slf4j.Slf4j; |
| | |
| | | */ |
| | | private int barcodeSize = 2; |
| | | |
| | | /** |
| | | * 入出库模式 |
| | | * 0:未知 |
| | | * 1:入库启动中 |
| | | * 2.入库模式 |
| | | * 3.出库启动中 (不能生成入库工作档) |
| | | * 4.出库模式 |
| | | */ |
| | | private Map<Integer, WorkModeTypeDto> workModeTypes = new ConcurrentHashMap<>(); |
| | | |
| | | public SuopaiSiemensDevpThread(Device device, RedisUtil redisUtil) { |
| | | this.device = device; |
| | | this.redisUtil = redisUtil; |
| | | |
| | | workModeTypes.put(101, new WorkModeTypeDto(101, WorkModeType.NONE, "DB1001.120")); |
| | | } |
| | | |
| | | private ArrayList<BasConveyorSta> getStaNo() { |
| | |
| | | } |
| | | |
| | | private void read() throws InterruptedException { |
| | | updateWorkMode(); |
| | | ArrayList<BasConveyorSta> staNos = getStaNo(); |
| | | int staNoSize = staNos.size(); |
| | | OperateResultExOne<byte[]> result = siemensS7Net.Read("DB1000.100", (short) (staNoSize * 40)); |
| | |
| | | staProtocol.setSiteId(siteId); |
| | | station.put(siteId, staProtocol); |
| | | } |
| | | staProtocol.setWorkNo((short) siemensS7Net.getByteTransform().TransInt32(result.Content, i * 40 + 2)); // 工作号 |
| | | staProtocol.setWorkNo((short) siemensS7Net.getByteTransform().TransInt16(result.Content, i * 40 + 2)); // 工作号 |
| | | staProtocol.setStaNo(siemensS7Net.getByteTransform().TransInt16(result.Content, i * 40 + 4)); // 目标站 |
| | | staProtocol.setAutoing(siemensS7Net.getByteTransform().TransInt32(result.Content, i * 40 + 6) == 2); // 自动 |
| | | // staProtocol.setLoading(status[1]); // 有物 |
| | | // staProtocol.setInEnable(status[2]); // 可入 |
| | | // staProtocol.setOutEnable(status[3]);// 可出 |
| | | staProtocol.setAutoing(siemensS7Net.getByteTransform().TransInt16(result.Content, i * 40 + 6) == 2); // 自动 |
| | | staProtocol.setLoading(siemensS7Net.getByteTransform().TransInt16(result.Content, i * 40 + 32) == 1); // 有物 |
| | | staProtocol.setInEnable(siemensS7Net.getByteTransform().TransInt16(result.Content, i * 40 + 14) == 1); // 可入 |
| | | staProtocol.setOutEnable(siemensS7Net.getByteTransform().TransInt16(result.Content, i * 40 + 14) == 2);// 可出 |
| | | staProtocol.setWorkMode((int) siemensS7Net.getByteTransform().TransInt16(result.Content, i * 40 + 8));// 工作模式 |
| | | // staProtocol.setEmptyMk(status[4]); // 空板信号 |
| | | // staProtocol.setFullPlt(status[5]); // 满托盘 |
| | | // staProtocol.setHigh(status[6]); // 高库位 |
| | |
| | | public boolean writeWorkNo(int siteId, short workNo) { |
| | | int index = findStaNosIndex(siteId); |
| | | |
| | | OperateResult write = siemensS7Net.Write("DB100." + index*6, workNo); // 工作号 |
| | | OperateResult write = siemensS7Net.Write("DB1001." + (index * 20 + 100 + 2), workNo); // 工作号 |
| | | |
| | | if (!write.IsSuccess) { |
| | | StaProtocol staProtocol = station.get(siteId); |
| | |
| | | public boolean writeStaNo(int siteId,short staNo) { |
| | | int index = findStaNosIndex(siteId); |
| | | |
| | | OperateResult write = siemensS7Net.Write("DB100." + (index*6+4), staNo); // 目标站 |
| | | OperateResult write = siemensS7Net.Write("DB1001." + (index * 20 + 100 + 4), staNo); // 目标站 |
| | | |
| | | if (!write.IsSuccess) { |
| | | StaProtocol staProtocol = station.get(siteId); |
| | |
| | | } |
| | | |
| | | @Override |
| | | public boolean writeWorkSta(int siteId, short staNo, short workNo) { |
| | | public boolean writeWorkSta(int siteId, short workNo, short staNo) { |
| | | int index = findStaNosIndex(siteId); |
| | | |
| | | OperateResult write1 = siemensS7Net.Write("DB100." + index*6, workNo); // 工作号 |
| | | OperateResult write2 = siemensS7Net.Write("DB100." + (index*6+4), staNo); // 目标站 |
| | | String workNoAddress = "DB1001." + (index * 20 + 100 + 2); |
| | | String staNoAddress = "DB1001." + (index * 20 + 100 + 4); |
| | | OperateResult write1 = siemensS7Net.Write(workNoAddress, workNo); // 工作号 |
| | | OperateResult write2 = siemensS7Net.Write(staNoAddress, staNo); // 目标站 |
| | | |
| | | if (!(write1.IsSuccess && write2.IsSuccess)) { |
| | | StaProtocol staProtocol = station.get(siteId); |
| | |
| | | OutputQueue.DEVP.offer(MessageFormat.format("【{0}】写入输送线站点数据失败。输送线plc编号={1},站点数据={2}", device.getId(), JSON.toJSON(staProtocol))); |
| | | log.error("写入输送线站点数据失败。输送线plc编号={},站点数据={}", device.getId(), JSON.toJSON(staProtocol)); |
| | | } else { |
| | | OutputQueue.DEVP.offer(MessageFormat.format("【{0}】 输送线命令下发 [id:{1}] >>>>> {2}", DateUtils.convert(new Date()), device.getId(), JSON.toJSON(staNo))); |
| | | log.info("输送线命令下发 [id:{}] >>>>> 命令下发: {}", device.getId(), JSON.toJSON(staNo)); |
| | | OutputQueue.DEVP.offer(MessageFormat.format("【{0}】 输送线命令下发 [id:{1}] >>>>> {2},{3}", DateUtils.convert(new Date()), device.getId(), JSON.toJSON(workNo), JSON.toJSON(staNo))); |
| | | log.info("输送线命令下发 [id:{}] >>>>> 命令下发: {},{}", device.getId(), JSON.toJSON(workNo),JSON.toJSON(staNo)); |
| | | return true; |
| | | } |
| | | return false; |
| | |
| | | staProtocol.setPakMk(pakMk); |
| | | } |
| | | } |
| | | |
| | | private void updateWorkMode() { |
| | | for (Map.Entry<Integer, WorkModeTypeDto> entry : workModeTypes.entrySet()) { |
| | | WorkModeTypeDto workModeTypeDto = entry.getValue(); |
| | | WorkModeType workModeType = workModeTypeDto.getWorkModeType(); |
| | | if (workModeType != WorkModeType.NONE) { |
| | | if (!siemensS7Net.Write(workModeTypeDto.getAddress(), workModeType.id).IsSuccess) { |
| | | OutputQueue.DEVP.offer(MessageFormat.format("写入输送线{}入出库模式失败。输送线编号={}", workModeTypeDto.getSiteId(), device.getId())); |
| | | log.error("写入输送线{}入出库模式失败。输送线编号={}", workModeTypeDto.getSiteId(), device.getId()); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public boolean switchWorkMode(int siteId, int workMode) { |
| | | WorkModeTypeDto workModeTypeDto = workModeTypes.get(siteId); |
| | | if(workModeTypeDto == null) { |
| | | return false; |
| | | } |
| | | |
| | | workModeTypeDto.setWorkModeType(WorkModeType.get((short) workMode)); |
| | | workModeTypes.put(siteId, workModeTypeDto); |
| | | return true; |
| | | } |
| | | } |