package com.zy.asrs.wcs.rcs.thread.impl; import HslCommunication.Core.Types.OperateResult; import HslCommunication.Core.Types.OperateResultExOne; import HslCommunication.Profinet.Siemens.SiemensPLCS; import HslCommunication.Profinet.Siemens.SiemensS7Net; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.zy.asrs.framework.common.Cools; import com.zy.asrs.framework.common.DateUtils; import com.zy.asrs.framework.common.SpringUtils; import com.zy.asrs.wcs.core.entity.DeviceBarcode; import com.zy.asrs.wcs.core.service.DeviceBarcodeService; import com.zy.asrs.wcs.core.utils.RedisUtil; 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.thread.BarcodeThread; import java.text.MessageFormat; import java.util.Date; public class SiemensBarcodeThread implements BarcodeThread { private Device device; private RedisUtil redisUtil; private SiemensS7Net siemensS7Net; private StringBuffer barcode = new StringBuffer(); private String lastBarcode = ""; public SiemensBarcodeThread(Device device, RedisUtil redisUtil) { this.device = device; this.redisUtil = redisUtil; } @Override public String getBarcode() { return String.valueOf(barcode); } @Override public boolean setBarcode(String barcode) { this.barcode.delete(0, this.barcode.length()); this.barcode.append(barcode); if(!Cools.isEmpty(barcode) && !this.lastBarcode.equals(barcode)) { this.lastBarcode = String.valueOf(this.barcode); News.info("{}号条码器,检索数据:{}", device.getId(), this.barcode); JSONObject jsonObject = new JSONObject(); jsonObject.put("time", DateUtils.convert(new Date(), DateUtils.yyyyMMddHHmmss_F)); jsonObject.put("barcode", barcode); if (OutputQueue.BARCODE.size() >= 32) { OutputQueue.BARCODE.poll(); } OutputQueue.BARCODE.offer(jsonObject); return true; } return false; } @Override public boolean connect() { boolean result = false; siemensS7Net = new SiemensS7Net(SiemensPLCS.S1200, device.getIp()); siemensS7Net.setRack(device.getRack().byteValue()); siemensS7Net.setSlot(device.getSlot().byteValue()); OperateResult connect = siemensS7Net.ConnectServer(); if(connect.IsSuccess){ result = true; OutputQueue.DEVP.offer(MessageFormat.format( "【{0}】条码器plc连接成功 ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), device.getId(), device.getIp(), device.getPort(), device.getRack(), device.getSlot())); News.info("条码器plc连接成功 ===>> [id:{}] [ip:{}] [port:{}]", device.getId(), device.getIp(), device.getPort()); } else { OutputQueue.DEVP.offer(MessageFormat.format( "【{0}】条码器plc连接失败!!! ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), device.getId(), device.getIp(), device.getPort(), device.getRack(), device.getSlot())); News.error("条码器plc连接失败!!! ===>> [id:{}] [ip:{}] [port:{}]", device.getId(), device.getIp(), device.getPort()); } // siemensS7Net.ConnectClose(); return result; } @Override public void close() { } @Override public void run() { // this.connect(); // while (true) { // try { // DeviceBarcodeService deviceBarcodeService = SpringUtils.getBean(DeviceBarcodeService.class); // if (deviceBarcodeService == null) { // continue; // } // // DeviceBarcode deviceBarcode = deviceBarcodeService.getOne(new LambdaQueryWrapper() // .eq(DeviceBarcode::getDeviceId, device.getId()) // .eq(DeviceBarcode::getHostId, device.getHostId()) // .eq(DeviceBarcode::getStatus, 1)); // if (deviceBarcode == null) { // continue; // } // // JSONObject connect = JSON.parseObject(deviceBarcode.getConnect()); // String address = connect.getString("address"); // Short length = connect.getShort("length"); // // // 条码扫描器 // OperateResultExOne result = null; // result = siemensS7Net.Read(address, length); // if (result.IsSuccess) { // String barcode = siemensS7Net.getByteTransform().TransString(result.Content, 0, length, "UTF-8"); // setBarcode(barcode); // } // } catch (Exception e) { //// e.printStackTrace(); // } // } } }