//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.alibaba.fastjson.JSON;
|
//import com.core.common.Cools;
|
//import com.core.common.DateUtils;
|
//import com.core.common.SpringUtils;
|
//import com.zy.asrs.entity.BasDevp;
|
//import com.zy.asrs.service.BasDevpService;
|
//import com.zy.core.News;
|
//import com.zy.core.cache.MessageQueue;
|
//import com.zy.core.cache.OutputQueue;
|
//import com.zy.core.cache.SlaveConnection;
|
//import com.zy.core.enums.SlaveType;
|
//import com.zy.core.model.DevpSlave;
|
//import com.zy.core.model.Task;
|
//import com.zy.core.model.protocol.StaProtocol;
|
//import com.zy.core.thread.DevpThread;
|
//import lombok.Data;
|
//import lombok.extern.slf4j.Slf4j;
|
//
|
//import java.text.MessageFormat;
|
//import java.util.ArrayList;
|
//import java.util.Date;
|
//import java.util.List;
|
//import java.util.Map;
|
//import java.util.concurrent.ConcurrentHashMap;
|
//
|
///**
|
// * 输送线线程
|
// * Created by vincent on 2020/8/4
|
// */
|
//@Data
|
//@Slf4j
|
//public class SiemensDevpThread implements Runnable, DevpThread {
|
//
|
// private DevpSlave slave;
|
// private SiemensS7Net siemensS7Net;
|
// private Map<Integer, StaProtocol> station = new ConcurrentHashMap<>();
|
// private short heartBeatVal = 1;
|
// private int barcodeSize = 10;
|
// public static final ArrayList<Integer> staNos1 = new ArrayList<Integer>() {{
|
// add(1012);
|
// add(1014);
|
// add(1015);
|
// add(1022);
|
// add(1023);
|
// add(1025);
|
// add(1026);
|
// add(1031);
|
// add(1032);
|
// }};
|
//
|
// public static final ArrayList<Integer> staNos2 = new ArrayList<Integer>() {{
|
// add(1011);
|
// add(1012);
|
// add(1013);
|
// add(1014);
|
// add(1015);
|
// add(1021);
|
// add(1022);
|
// add(1023);
|
// add(1024);
|
// add(1025);
|
// add(1026);
|
// add(1031);
|
// add(1032);
|
// }};
|
//
|
// public SiemensDevpThread(DevpSlave slave) {
|
// this.slave = slave;
|
// }
|
//
|
// @Override
|
// @SuppressWarnings("InfiniteLoopStatement")
|
// public void run() {
|
// connect();
|
// while (true) {
|
// try {
|
// int step = 1;
|
// Task task = MessageQueue.poll(SlaveType.Devp, slave.getId());
|
// if (task != null) {
|
// step = task.getStep();
|
// }
|
// switch (step) {
|
// // 读数据
|
// case 1:
|
// read();
|
// break;
|
// // 写数据 ID+目标站
|
// case 2:
|
// write((StaProtocol) task.getData());
|
// read();
|
// break;
|
// default:
|
// break;
|
// }
|
// // 心跳
|
//// heartbeat();
|
// Thread.sleep(400);
|
// } catch (Exception e) {
|
// e.printStackTrace();
|
// }
|
//
|
// }
|
// }
|
//
|
// @Override
|
// public boolean connect() {
|
// boolean result = false;
|
// siemensS7Net = new SiemensS7Net(SiemensPLCS.S1500, slave.getIp());
|
// siemensS7Net.setRack(slave.getRack().byteValue());
|
// siemensS7Net.setSlot(slave.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()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()));
|
// News.info("输送线plc连接成功 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
|
// } else {
|
// OutputQueue.DEVP.offer(MessageFormat.format("【{0}】输送线plc连接失败!!! ===>> [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("输送线plc连接失败!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
|
// }
|
// // siemensS7Net.ConnectClose();
|
// return result;
|
// }
|
//
|
// /**
|
// * 读取状态 ====> 整块plc
|
// */
|
// private void read() throws InterruptedException {
|
// ArrayList<BasConveyorSta> staNos = getStaNo();
|
// int staNoSize = staNos.size();
|
// OperateResultExOne<byte[]> result = siemensS7Net.Read("DB82.14", (short) (staNoSize * 26));
|
// if (result.IsSuccess) {
|
// for (int i = 0; i < staNoSize; i++) {
|
// BasConveyorSta siteStation = staNos.get(i);
|
// int siteId = siteStation.getSiteNo();// 站点编号
|
// StaProtocol staProtocol = station.get(siteId);
|
// if (null == staProtocol) {
|
// staProtocol = new StaProtocol();
|
// staProtocol.setSiteId(siteId);
|
//
|
// if (siteId == 1015) {
|
// staProtocol.setLocNo("1200301");
|
// } else if (siteId == 1026) {
|
// staProtocol.setLocNo("1200305");
|
// }
|
//
|
// station.put(siteId, staProtocol);
|
// }
|
// Thread.sleep(300);
|
// boolean[] status = siemensS7Net.getByteTransform().TransBool(result.Content, i * 26, 2);
|
// staProtocol.setAutoing(status[0]); // 自动
|
// staProtocol.setIdle(status[1]); //空闲
|
// staProtocol.setLoading(status[2]); // 有物
|
//
|
// staProtocol.setBackErr(status[5]);
|
// staProtocol.setLeftErr(status[6]);
|
// staProtocol.setRightErr(status[7]);
|
// staProtocol.setHighErr(status[8]);
|
// staProtocol.setWeightErr(status[9]);
|
// staProtocol.setLow(status[10]);
|
// staProtocol.setHigh(status[11]);
|
// staProtocol.setInEnable(status[13]); // 可入
|
// staProtocol.setOutEnable(status[14]);// 可出
|
//
|
//
|
// staProtocol.setWorkNo(siemensS7Net.getByteTransform().TransInt16(result.Content, i * 26 + 2)); // 工作号
|
// staProtocol.setStaNo((short) siemensS7Net.getByteTransform().TransInt16(result.Content, i * 26 + 4)); // 目标站
|
// staProtocol.setFinishWorkNo(siemensS7Net.getByteTransform().TransInt16(result.Content, i * 26 + 6)); //已完成工作号
|
// staProtocol.setBarcode(siemensS7Net.getByteTransform().TransString(result.Content, i * 26 + 10, 12, "UTF-8").trim()); //条码
|
// staProtocol.setWeight(siemensS7Net.getByteTransform().TransInt32(result.Content, i * 26 + 22)); //重量
|
//
|
//
|
//// staProtocol.setWorkMode((int) siemensS7Net.getByteTransform().TransInt16(result.Content, i * 40 + 8));// 工作模式
|
// //staProtocol.setWorkNo((short) siemensS7Net.getByteTransform().TransInt16(result.Content, i * 18 + 10)); // 工作号
|
//
|
// if (!staProtocol.isPakMk() && !staProtocol.isLoading()) {
|
// staProtocol.setPakMk(true);
|
// }
|
// }
|
// }
|
//
|
// OperateResultExOne<byte[]> resultBarcode = siemensS7Net.Read("DB100.166", (short) 9);
|
// if (resultBarcode.IsSuccess) {
|
// //条码数据
|
// String barcode = siemensS7Net.getByteTransform().TransString(resultBarcode.Content, 0, 9, "UTF-8");// 条码
|
// BasConveyorStaService basConveyorStaService = SpringUtils.getBean(BasConveyorStaService.class);
|
// DeviceBarcodeService deviceBarcodeService = SpringUtils.getBean(DeviceBarcodeService.class);
|
// BasConveyorSta basConveyorSta = basConveyorStaService.getOne(new LambdaQueryWrapper<BasConveyorSta>().eq(BasConveyorSta::getSiteNo, 31002));
|
// if (basConveyorSta != null) {
|
// DeviceBarcode deviceBarcode = deviceBarcodeService.getById(basConveyorSta.getBarcodeId());
|
// if (deviceBarcode != null) {
|
// BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, Integer.parseInt(deviceBarcode.getDeviceId()));
|
// if (barcodeThread != null) {
|
// barcodeThread.setBarcode(barcode);
|
// }
|
// }
|
// }
|
// }
|
//
|
// if (!Cools.isEmpty(result) && result.IsSuccess) {
|
//
|
// OutputQueue.DEVP.offer(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功", DateUtils.convert(new Date()), device.getId()));
|
//
|
// // 根据实时信息更新数据库
|
// try {
|
// List<BasConveyorSta> stations = new ArrayList<>();
|
// for (BasConveyorSta sta : getStaNo()) {
|
// StaProtocol staProtocol = station.get(sta.getSiteNo());
|
// BasConveyorSta sqlModel = staProtocol.toSqlModel(sta);
|
// stations.add(sqlModel);
|
// }
|
//
|
// if (!stations.isEmpty()) {
|
// BasConveyorStaService basConveyorStaService = SpringUtils.getBean(BasConveyorStaService.class);
|
// if (null != basConveyorStaService && !basConveyorStaService.updateBatchById(stations)) {
|
// throw new Exception("更新数据库数据失败");
|
// }
|
// }
|
//
|
// } catch (Exception e) {
|
// e.printStackTrace();
|
// OutputQueue.DEVP.offer(MessageFormat.format("【{0}】更新数据库数据失败 ===>> [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("更新数据库数据失败 ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", device.getId(), device.getIp(), device.getPort(), device.getRack(), device.getSlot());
|
// }
|
//
|
// } 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()));
|
//// log.error("读取输送线plc状态信息失败 ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", device.getId(), device.getIp(), device.getPort(), device.getRack(), device.getSlot());
|
// }
|
// }
|
//
|
// /**
|
// * 写入 ID+目标站 =====> 单站点写入
|
// */
|
// private void write(StaProtocol staProtocol) throws InterruptedException {
|
// if (null == staProtocol) {
|
// return;
|
// }
|
// int index = staNos.indexOf(staProtocol.getSiteId());
|
// short[] array = new short[2];
|
// array[0] = staProtocol.getWorkNo();
|
// array[1] = staProtocol.getStaNo();
|
//// OperateResult write = siemensS7Net.Write("DB100." + index*4, staProtocol.getWorkNo()); // 工作号
|
//// Thread.sleep(500);
|
//// OperateResult write1 = siemensS7Net.Write("DB100." + (index*4+2), staProtocol.getStaNo()); // 目标站
|
//
|
// OperateResult writeResult;
|
// //任务下发次数
|
// int writeCount = 0;
|
// //任务下发成功标识
|
// boolean writeFlag = false;
|
// while(writeCount < 1){
|
// writeResult = siemensS7Net.Write("DB1000." + index*4, array); // 工作号、目标站
|
// if(writeResult.IsSuccess){
|
// Thread.sleep(500);
|
// OperateResultExOne<byte[]> readResult = siemensS7Net.Read("DB1000." + index*4, (short)4);
|
// if(readResult.IsSuccess){
|
// short workNo = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 0);
|
// short staNo = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 2);
|
// if(staProtocol.getWorkNo().equals(workNo) && staProtocol.getStaNo().equals(staNo)){
|
// //任务命令写入成功
|
// writeFlag = true;
|
// log.info("写入输送线命令后返回成功,并且回读成功。输送线plc编号={},{},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
|
// break;
|
// } else {//返回结果是成功了,但是真实值不相同
|
// writeCount++;
|
// OutputQueue.DEVP.offer(MessageFormat.format("【{0}】写入输送线命令后返回成功,但是读取任务值不一致。输送线plc编号={1},站点数据={2},写入次数={3}",
|
// slave.getId(), JSON.toJSON(staProtocol),writeCount));
|
// log.error("写入输送线命令后返回成功,但是读取任务值不一致。输送线plc编号={},{},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
|
// }
|
// } else {
|
// writeCount++;
|
// OutputQueue.DEVP.offer(MessageFormat.format("【{0}】写入输送线命令后读取失败。输送线plc编号={1},站点数据={2},写入次数={3}",
|
// slave.getId(), JSON.toJSON(staProtocol), writeCount));
|
// log.error("写入输送线命令后读取失败。输送线plc编号={},站点数据={},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
|
// }
|
// } else {
|
// writeCount++;
|
// OutputQueue.DEVP.offer(MessageFormat.format("【{0}】写入输送线命令失败。输送线plc编号={1},站点数据={2},写入次数={3}",
|
// slave.getId(), JSON.toJSON(staProtocol),writeCount));
|
// log.error("写入输送线命令失败。输送线plc编号={},站点数据={},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
|
// }
|
// Thread.sleep(200);
|
// }
|
//
|
// //写命令尝试了5次还是失败了
|
// if(!writeFlag){
|
// staProtocol = station.get(staProtocol.getSiteId());
|
// if (staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() ==0) {
|
// staProtocol.setPakMk(true);
|
// }
|
// OutputQueue.DEVP.offer(MessageFormat.format("【{0}】写入输送线命令尝试5次失败。输送线plc编号={1},站点数据={2}", slave.getId(), JSON.toJSON(staProtocol)));
|
// log.error("写入输送线命令尝试5次失败。输送线plc编号={},站点数据={}", slave.getId(), JSON.toJSON(staProtocol));
|
//
|
//// //重新添加数据到任务队列
|
//// boolean result = MessageQueue.offer(SlaveType.Devp, slave.getId(), new Task(2, staProtocol));
|
// read();//读取1次设备状态
|
// return;
|
// } else {
|
// OutputQueue.DEVP.offer(MessageFormat.format("【{0}】 输送线命令下发成功 [id:{1}] >>>>> {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(staProtocol)));
|
// log.info("输送线命令下发 [id:{}] >>>>> 命令下发成功: {}", slave.getId(), JSON.toJSON(staProtocol));
|
//
|
// Integer siteId = staProtocol.getSiteId();
|
// staProtocol = station.get(siteId);
|
// if ((siteId == 101 || siteId == 201)&&(staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() ==0)) {
|
// staProtocol.setPakMk(true);
|
// }
|
// }
|
// }
|
//
|
// /**
|
// * 心跳
|
// */
|
// private void heartbeat(){
|
// if (heartBeatVal == 1) {
|
// heartBeatVal = 2;
|
// } else {
|
// heartBeatVal = 1;
|
// }
|
// OperateResult write = siemensS7Net.Write("DB100.50", heartBeatVal);
|
// if (!write.IsSuccess) {
|
// News.error("输送线plc编号={} 心跳失败", slave.getId());
|
// }
|
// }
|
//
|
// /**
|
// * 设置入库标记
|
// */
|
// @Override
|
// public void setPakMk(Integer siteId, boolean pakMk) {
|
// StaProtocol staProtocol = station.get(siteId);
|
// if (null != staProtocol) {
|
// staProtocol.setPakMk(pakMk);
|
// }
|
// }
|
//
|
// public synchronized void setOutInModel(Short staNo, Short outInModel) {
|
// String dbAddress = "DB51.4";
|
// if (staNo == 105) {
|
// dbAddress = "DB51.4";
|
// }else if (staNo == 205) {
|
// dbAddress = "DB51.10";
|
// }else if (staNo == 346) {
|
// dbAddress = "DB51.12";
|
// }else {
|
// News.error("模式切换失败,地址错误={},model={}", staNo, outInModel);
|
// return;
|
// }
|
// OperateResult write = siemensS7Net.Write(dbAddress, outInModel);
|
// if (!write.IsSuccess) {
|
// News.error("模式切换失败={},model={}", staNo, outInModel);
|
// }
|
// }
|
//
|
// @Override
|
// public void close() {
|
// siemensS7Net.ConnectClose();
|
// }
|
//
|
// public static void main(String[] args) {
|
//// System.out.println(staNos.indexOf(129));
|
// System.out.println(staNos.size());
|
// for (int i = 0; i<staNos.size(); i++) {
|
//// System.out.println(i*2);
|
//// System.out.println(i*2 + 200);
|
//// System.out.println(i);
|
// }
|
//// int index = staNos.indexOf(128);
|
//// System.out.println(index*2);
|
//// System.out.println(index*2 + 200);
|
// }
|
//
|
//// public static void main(String[] args) throws Exception {
|
//// DevpSlave slave = new DevpSlave();
|
//// slave.setIp("192.168.2.125");
|
//// SiemensDevpThread devpThread = new SiemensDevpThread(slave);
|
//// devpThread.connect();
|
//// devpThread.read();
|
//// // 写
|
//// StaProtocol staProtocol = devpThread.getStation().get(1);
|
//// staProtocol.setWorkNo((short) 232);
|
//// staProtocol.setStaNo((short) 6);
|
//// staProtocol.setAutoing(true);
|
//// staProtocol.setEmptyMk(true);
|
//// staProtocol.setInEnable(true);
|
//// devpThread.write(staProtocol);
|
//// System.out.println("----------------------------------------");
|
//// // 读
|
//// devpThread.read();
|
//// System.out.println(JSON.toJSONString(devpThread.station));
|
////
|
//// }
|
//
|
//}
|