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); } public void setBarcode(String barcode) { this.lastBarcode = String.valueOf(this.barcode); this.barcode.delete(0, this.barcode.length()); this.barcode.append(barcode); if(!Cools.isEmpty(barcode) && !this.lastBarcode.equals(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); } } @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(); } } } }