From 5b440ab96a0c5194654107bc1e29245074bd015e Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期四, 13 三月 2025 15:56:03 +0800
Subject: [PATCH] #
---
src/main/java/com/zy/core/properties/SlaveProperties.java | 2
src/main/java/com/zy/core/cache/MessageQueue.java | 14 +
src/main/java/com/zy/core/enums/SlaveType.java | 1
src/main/java/com/zy/core/model/ForkLiftSlave.java | 3
src/main/java/com/zy/core/thread/impl/LfdZyForkLiftMasterThread.java | 145 +++++++++++++
src/main/java/com/zy/core/thread/impl/LfdZyForkLiftSlaveThread.java | 407 +++++++++++++++++++++++++++++++++++++
src/main/resources/application.yml | 11
src/main/java/com/zy/core/ServerBootstrap.java | 22 +
8 files changed, 602 insertions(+), 3 deletions(-)
diff --git a/src/main/java/com/zy/core/ServerBootstrap.java b/src/main/java/com/zy/core/ServerBootstrap.java
index 5420fbd..c5c91c0 100644
--- a/src/main/java/com/zy/core/ServerBootstrap.java
+++ b/src/main/java/com/zy/core/ServerBootstrap.java
@@ -8,6 +8,8 @@
import com.zy.core.model.*;
import com.zy.core.properties.SlaveProperties;
import com.zy.core.thread.*;
+import com.zy.core.thread.impl.LfdZyForkLiftMasterThread;
+import com.zy.core.thread.impl.LfdZyForkLiftSlaveThread;
import com.zy.core.thread.impl.NyShuttleThread;
import com.zy.core.thread.impl.ZyForkLiftThread;
import lombok.extern.slf4j.Slf4j;
@@ -60,11 +62,13 @@
private void initThread(){
// 鍒濆鍖栬揣鍙夋彁鍗囨満
- News.info("鍒濆鍖栬揣鍙夋彁鍗囨満........................................................");
for (ForkLiftSlave forkLiftSlave : slaveProperties.getForkLift()) {
+ News.info("鍒濆鍖栬揣鍙夋彁鍗囨満........................................................");
ThreadHandler thread = null;
if (forkLiftSlave.getThreadImpl().equals("ZyForkLiftThread")) {
thread = new ZyForkLiftThread(forkLiftSlave, redisUtil);
+ } else if (forkLiftSlave.getThreadImpl().equals("LfdZyForkLiftSlaveThread")) {
+ thread = new LfdZyForkLiftSlaveThread(forkLiftSlave, redisUtil, forkLiftSlave.getMasterId());
} else {
throw new CoolException("鏈煡鐨勭嚎绋嬪疄鐜�");
}
@@ -73,9 +77,23 @@
SlaveConnection.put(SlaveType.ForkLift, forkLiftSlave.getId(), thread);
}
+ // 鍒濆鍖栬揣鍙夋彁鍗囨満
+ for (ForkLiftSlave forkLiftSlave : slaveProperties.getForkLiftMaster()) {
+ News.info("鍒濆鍖栬揣鍙夋彁鍗囨満Master........................................................");
+ ThreadHandler thread = null;
+ if (forkLiftSlave.getThreadImpl().equals("LfdZyForkLiftMasterThread")) {
+ thread = new LfdZyForkLiftMasterThread(forkLiftSlave, redisUtil);
+ } else {
+ throw new CoolException("鏈煡鐨勭嚎绋嬪疄鐜�");
+ }
+
+ new Thread(thread).start();
+ SlaveConnection.put(SlaveType.ForkLiftMaster, forkLiftSlave.getId(), thread);
+ }
+
// 鍒濆鍖栧洓鍚戠┛姊溅
- News.info("鍒濆鍖栧洓鍚戠┛姊溅......................................................");
for (ShuttleSlave shuttleSlave : slaveProperties.getShuttle()) {
+ News.info("鍒濆鍖栧洓鍚戠┛姊溅......................................................");
ThreadHandler thread = null;
if (shuttleSlave.getThreadImpl().equals("NyShuttleThread")) {
thread = new NyShuttleThread(shuttleSlave, redisUtil);
diff --git a/src/main/java/com/zy/core/cache/MessageQueue.java b/src/main/java/com/zy/core/cache/MessageQueue.java
index 9d92365..a7a9efd 100644
--- a/src/main/java/com/zy/core/cache/MessageQueue.java
+++ b/src/main/java/com/zy/core/cache/MessageQueue.java
@@ -20,6 +20,8 @@
private static final Map<Integer, ConcurrentLinkedQueue<Task>> LIFT_EXCHANGE = new ConcurrentHashMap<>();
//璐у弶鎻愬崌鏈簃q浜ゆ崲鏈�
private static final Map<Integer, ConcurrentLinkedQueue<Task>> FORK_LIFT_EXCHANGE = new ConcurrentHashMap<>();
+ //璐у弶鎻愬崌鏈篗aster mq浜ゆ崲鏈�
+ private static final Map<Integer, ConcurrentLinkedQueue<Task>> FORK_LIFT_MASTER_EXCHANGE = new ConcurrentHashMap<>();
/**
* mq 浜ゆ崲鏈哄垵濮嬪寲
@@ -31,6 +33,9 @@
break;
case ForkLift:
FORK_LIFT_EXCHANGE.put(slave.getId(), new ConcurrentLinkedQueue<>());
+ break;
+ case ForkLiftMaster:
+ FORK_LIFT_MASTER_EXCHANGE.put(slave.getId(), new ConcurrentLinkedQueue<>());
break;
case Lift:
LIFT_EXCHANGE.put(slave.getId(), new ConcurrentLinkedQueue<>());
@@ -50,6 +55,8 @@
return SHUTTLE_EXCHANGE.get(id).offer(task);
case ForkLift:
return FORK_LIFT_EXCHANGE.get(id).offer(task);
+ case ForkLiftMaster:
+ return FORK_LIFT_MASTER_EXCHANGE.get(id).offer(task);
case Lift:
return LIFT_EXCHANGE.get(id).offer(task);
default:
@@ -67,6 +74,8 @@
return SHUTTLE_EXCHANGE.get(id).poll();
case ForkLift:
return FORK_LIFT_EXCHANGE.get(id).poll();
+ case ForkLiftMaster:
+ return FORK_LIFT_MASTER_EXCHANGE.get(id).poll();
case Lift:
return LIFT_EXCHANGE.get(id).poll();
default:
@@ -83,6 +92,8 @@
return SHUTTLE_EXCHANGE.get(id).peek();
case ForkLift:
return FORK_LIFT_EXCHANGE.get(id).peek();
+ case ForkLiftMaster:
+ return FORK_LIFT_MASTER_EXCHANGE.get(id).peek();
case Lift:
return LIFT_EXCHANGE.get(id).peek();
default:
@@ -98,6 +109,9 @@
case ForkLift:
FORK_LIFT_EXCHANGE.get(id).clear();
break;
+ case ForkLiftMaster:
+ FORK_LIFT_MASTER_EXCHANGE.get(id).clear();
+ break;
case Lift:
LIFT_EXCHANGE.get(id).clear();
break;
diff --git a/src/main/java/com/zy/core/enums/SlaveType.java b/src/main/java/com/zy/core/enums/SlaveType.java
index 95abbb3..4b65625 100644
--- a/src/main/java/com/zy/core/enums/SlaveType.java
+++ b/src/main/java/com/zy/core/enums/SlaveType.java
@@ -5,6 +5,7 @@
Shuttle,
Lift,
ForkLift,
+ ForkLiftMaster,
;
public static SlaveType findInstance(String s){
diff --git a/src/main/java/com/zy/core/model/ForkLiftSlave.java b/src/main/java/com/zy/core/model/ForkLiftSlave.java
index cc901ae..4e5e184 100644
--- a/src/main/java/com/zy/core/model/ForkLiftSlave.java
+++ b/src/main/java/com/zy/core/model/ForkLiftSlave.java
@@ -15,6 +15,9 @@
private Integer slot;
+ //涓荤嚎绋媔d(鐢ㄤ簬澶氳澶囧叡鐢ㄤ竴鍧梡lc鎯呭喌)
+ private Integer masterId;
+
//鎻愬崌鏈虹珯鐐�
private List<Sta> sta = new ArrayList<>();
diff --git a/src/main/java/com/zy/core/properties/SlaveProperties.java b/src/main/java/com/zy/core/properties/SlaveProperties.java
index 9de7962..74910e7 100644
--- a/src/main/java/com/zy/core/properties/SlaveProperties.java
+++ b/src/main/java/com/zy/core/properties/SlaveProperties.java
@@ -27,4 +27,6 @@
private List<ForkLiftSlave> forkLift = new ArrayList<>();
+ private List<ForkLiftSlave> forkLiftMaster = new ArrayList<>();
+
}
diff --git a/src/main/java/com/zy/core/thread/impl/LfdZyForkLiftMasterThread.java b/src/main/java/com/zy/core/thread/impl/LfdZyForkLiftMasterThread.java
new file mode 100644
index 0000000..445b4fd
--- /dev/null
+++ b/src/main/java/com/zy/core/thread/impl/LfdZyForkLiftMasterThread.java
@@ -0,0 +1,145 @@
+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.core.common.DateUtils;
+import com.zy.common.utils.RedisUtil;
+import com.zy.core.News;
+import com.zy.core.ThreadHandler;
+import com.zy.core.cache.OutputQueue;
+import com.zy.core.model.ForkLiftSlave;
+import com.zy.core.model.protocol.ForkLiftProtocol;
+import lombok.extern.slf4j.Slf4j;
+
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+
+@Slf4j
+@SuppressWarnings("all")
+public class LfdZyForkLiftMasterThread implements ThreadHandler {
+
+ private ForkLiftSlave slave;
+ private ForkLiftProtocol forkLiftProtocol;
+ private RedisUtil redisUtil;
+ private SiemensS7Net siemensS7Net;
+ private List<HashMap<String,Object>> slaveAddressList = null;
+ private boolean connect = false;
+
+ public LfdZyForkLiftMasterThread(ForkLiftSlave slave, RedisUtil redisUtil) {
+ this.slave = slave;
+ this.redisUtil = redisUtil;
+ ArrayList<HashMap<String, Object>> addressList = new ArrayList<>();
+
+ HashMap<String, Object> lift1 = new HashMap<>();
+ lift1.put("status", new DbData("DB101.0", (short) 16));//鎻愬崌鏈烘暟鎹�
+ lift1.put("staStatus", new DbData("DB102.0", (short) 8));//绔欑偣鏁版嵁
+ lift1.put("write", new DbData("DB103.0", null));//鍐欏叆鏁版嵁
+ lift1.put("writeConfirm", new DbData("DB103.8", null));//鍐欏叆纭鏁版嵁
+ lift1.put("confirm", new DbData("DB103.10", null));//纭鍛戒护
+
+ HashMap<String, Object> lift2 = new HashMap<>();
+ lift2.put("status", new DbData("DB104.0", (short) 16));//鎻愬崌鏈烘暟鎹�
+ lift2.put("staStatus", new DbData("DB105.0", (short) 8));//绔欑偣鏁版嵁
+ lift2.put("write", new DbData("DB106.0", null));//鍐欏叆鏁版嵁
+ lift2.put("writeConfirm", new DbData("DB106.8", null));//鍐欏叆纭鏁版嵁
+ lift2.put("confirm", new DbData("DB106.10", null));//纭鍛戒护
+
+ addressList.add(lift1);
+ addressList.add(lift2);
+ this.slaveAddressList = addressList;
+ }
+
+ @Override
+ public boolean connect() {
+ boolean result = false;
+ siemensS7Net = new SiemensS7Net(SiemensPLCS.S1200, slave.getIp());
+ siemensS7Net.setRack(slave.getRack().byteValue());
+ siemensS7Net.setSlot(slave.getSlot().byteValue());
+ OperateResult connect = siemensS7Net.ConnectServer();
+ if(connect.IsSuccess){
+ result = true;
+ OutputQueue.FORKLIFT.offer(MessageFormat.format( "銆恵0}銆戣揣鍙夋彁鍗囨満杩炴帴鎴愬姛 ===>> [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("璐у弶鎻愬崌鏈鸿繛鎺ユ垚鍔� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
+ } else {
+ OutputQueue.FORKLIFT.offer(MessageFormat.format( "銆恵0}銆戣揣鍙夋彁鍗囨満杩炴帴澶辫触锛侊紒锛� ===>> [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("璐у弶鎻愬崌鏈鸿繛鎺ュけ璐ワ紒锛侊紒 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
+ }
+ // siemensS7Net.ConnectClose();
+ this.connect = result;
+ return result;
+ }
+
+ @Override
+ public void close() {
+
+ }
+
+ @Override
+ public void run() {
+ News.info("{}鍙疯揣鍙夋彁鍗囨満Master绾跨▼鍚姩", slave.getId());
+ this.connect();
+ while (true) {
+ try {
+ if (!this.connect) {
+ this.connect();
+ }
+
+ Thread.sleep(500);
+ }catch (Exception e){
+ e.printStackTrace();
+ }
+ }
+ }
+
+ public OperateResultExOne<byte[]> read(Integer slaveId, String dbTag) {
+ try {
+ HashMap<String, Object> map = this.slaveAddressList.get(slaveId - 1);
+ DbData dbData = (DbData) map.get(dbTag);
+ OperateResultExOne<byte[]> result = siemensS7Net.Read(dbData.dbAddress, dbData.dbAddressLength);
+ return result;
+ } catch (Exception e) {
+ OutputQueue.FORKLIFT.offer(MessageFormat.format("銆恵0}銆戣鍙栨彁鍗囨満鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
+ }
+ return null;
+ }
+
+ public OperateResult write(Integer slaveId, String dbTag, short[] array) {
+ try {
+ HashMap<String, Object> map = this.slaveAddressList.get(slaveId - 1);
+ DbData dbData = (DbData) map.get(dbTag);
+ OperateResult result = siemensS7Net.Write(dbData.dbAddress, array);
+ return result;
+ } catch (Exception e) {
+ OutputQueue.FORKLIFT.offer(MessageFormat.format("銆恵0}銆戝啓鍏ユ彁鍗囨満鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
+ }
+ return null;
+ }
+
+ public OperateResult write(Integer slaveId, String dbTag, short val) {
+ try {
+ HashMap<String, Object> map = this.slaveAddressList.get(slaveId - 1);
+ DbData dbData = (DbData) map.get(dbTag);
+ OperateResult result = siemensS7Net.Write(dbData.dbAddress, val);
+ return result;
+ } catch (Exception e) {
+ OutputQueue.FORKLIFT.offer(MessageFormat.format("銆恵0}銆戝啓鍏ユ彁鍗囨満鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
+ }
+ return null;
+ }
+
+ private class DbData {
+ private String dbAddress;
+ private Short dbAddressLength;
+
+ public DbData(String dbAddress, Short dbAddressLength) {
+ this.dbAddress = dbAddress;
+ this.dbAddressLength = dbAddressLength;
+ }
+
+ }
+}
diff --git a/src/main/java/com/zy/core/thread/impl/LfdZyForkLiftSlaveThread.java b/src/main/java/com/zy/core/thread/impl/LfdZyForkLiftSlaveThread.java
new file mode 100644
index 0000000..ac62c22
--- /dev/null
+++ b/src/main/java/com/zy/core/thread/impl/LfdZyForkLiftSlaveThread.java
@@ -0,0 +1,407 @@
+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.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.core.common.DateUtils;
+import com.core.common.SpringUtils;
+import com.zy.asrs.entity.BasLift;
+import com.zy.asrs.entity.DeviceDataLog;
+import com.zy.asrs.service.BasLiftService;
+import com.zy.asrs.service.DeviceDataLogService;
+import com.zy.asrs.utils.Utils;
+import com.zy.common.ExecuteSupport;
+import com.zy.common.utils.RedisUtil;
+import com.zy.core.News;
+import com.zy.core.action.ForkLiftAction;
+import com.zy.core.cache.OutputQueue;
+import com.zy.core.cache.SlaveConnection;
+import com.zy.core.enums.*;
+import com.zy.core.model.CommandResponse;
+import com.zy.core.model.ForkLiftSlave;
+import com.zy.core.model.command.ForkLiftCommand;
+import com.zy.core.model.protocol.ForkLiftProtocol;
+import com.zy.core.model.protocol.ForkLiftStaProtocol;
+import com.zy.core.thread.ForkLiftThread;
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.Base64;
+import java.util.Date;
+import java.util.List;
+
+@Slf4j
+@SuppressWarnings("all")
+public class LfdZyForkLiftSlaveThread implements ForkLiftThread {
+
+ private Integer masterId;
+ private ForkLiftSlave slave;
+ private ForkLiftProtocol forkLiftProtocol;
+ private RedisUtil redisUtil;
+ private SiemensS7Net siemensS7Net;
+ private List<ForkLiftStaProtocol> forkLiftStaProtocols = new ArrayList<>();
+ private LfdZyForkLiftMasterThread masterThread;
+
+ public LfdZyForkLiftSlaveThread(ForkLiftSlave slave, RedisUtil redisUtil, Integer masterId) {
+ this.slave = slave;
+ this.redisUtil = redisUtil;
+ this.masterId = masterId;
+ //鍒濆鍖栫珯鐐�
+ for (ForkLiftSlave.Sta sta : this.slave.getSta()) {
+ ForkLiftStaProtocol forkLiftStaProtocol = new ForkLiftStaProtocol();
+ forkLiftStaProtocol.setStaNo(sta.getStaNo());//绔欑偣鍙�
+ forkLiftStaProtocol.setLev(sta.getLev());//绔欑偣妤煎眰
+ String locNo = Utils.getLocNo(this.slave.getStaRow(), this.slave.getStaBay(), sta.getLev());
+ forkLiftStaProtocol.setLocNo(locNo);//绔欑偣搴撲綅鍙�
+ forkLiftStaProtocol.setLiftNo(sta.getLiftNo());//鎻愬崌鏈哄彿
+ forkLiftStaProtocols.add(forkLiftStaProtocol);
+ }
+ }
+
+ @Override
+ public boolean connect() {
+ boolean result = false;
+ LfdZyForkLiftMasterThread masterThread = (LfdZyForkLiftMasterThread) SlaveConnection.get(SlaveType.ForkLiftMaster, masterId);
+ if(masterThread != null) {
+ result = true;
+ this.masterThread = masterThread;
+ }
+ return result;
+ }
+
+ @Override
+ public void close() {
+
+ }
+
+ @Override
+ public void run() {
+ News.info("{}鍙疯揣鍙夋彁鍗囨満绾跨▼鍚姩", slave.getId());
+ this.connect();
+ while (true) {
+ try {
+ if (this.masterThread == null) {
+ this.connect();
+ continue;
+ }
+
+ read();
+ Thread.sleep(200);
+ execute();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ private void execute() {
+ ForkLiftAction forkLiftAction = SpringUtils.getBean(ForkLiftAction.class);
+ if (forkLiftAction == null) {
+ return;
+ }
+
+ Object object = redisUtil.get(RedisKeyType.FORK_LIFT_FLAG.key + slave.getId());
+ if (object == null) {
+ return;
+ }
+
+ Integer taskNo = Integer.valueOf(String.valueOf(object));
+ if (taskNo != 0) {
+ //瀛樺湪浠诲姟闇�瑕佹墽琛�
+ boolean result = forkLiftAction.executeWork(slave.getId(), taskNo);
+ }
+ }
+
+ private void read() {
+ try {
+ readStatus();
+
+ //鎻愬崌鏈哄浜庤繍琛岀姸鎬侊紝灏嗘爣璁扮疆涓簍rue
+ if (forkLiftProtocol.getProtocolStatusType().equals(ForkLiftProtocolStatusType.PICK_UP)
+ || forkLiftProtocol.getProtocolStatusType().equals(ForkLiftProtocolStatusType.PUT_DOWN)
+ || forkLiftProtocol.getProtocolStatusType().equals(ForkLiftProtocolStatusType.WAITING)) {
+ forkLiftProtocol.setPakMk(true);
+ }
+ } catch (Exception e) {
+ OutputQueue.FORKLIFT.offer(MessageFormat.format("銆恵0}銆戣鍙栨彁鍗囨満鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
+ }
+ }
+
+ private void readStatus() {
+ try {
+ //鑾峰彇鎻愬崌鏈烘暟鎹�
+ OperateResultExOne<byte[]> result1 = this.masterThread.read(this.slave.getId(), "status");
+ if (result1 == null) {
+ OutputQueue.FORKLIFT.offer(MessageFormat.format("銆恵0}銆憑1}璇诲彇璐у弶鎻愬崌鏈虹姸鎬佷俊鎭け璐�", DateUtils.convert(new Date()), slave.getId()));
+ }
+
+ if (result1.IsSuccess) {
+ if (null == forkLiftProtocol) {
+ forkLiftProtocol = new ForkLiftProtocol();
+ forkLiftProtocol.setLiftNo(slave.getId());
+ forkLiftProtocol.setProtocolStatus(ForkLiftProtocolStatusType.NONE);
+
+ InnerForkLiftExtend innerForkLiftExtend = new InnerForkLiftExtend();
+ }
+
+ //----------璇诲彇鎻愬崌鏈虹姸鎬�-----------
+ //妯″紡
+ forkLiftProtocol.setModel((int) siemensS7Net.getByteTransform().TransInt16(result1.Content, 0));
+ //PLC浠诲姟鍙�
+ forkLiftProtocol.setWrkNo((int) siemensS7Net.getByteTransform().TransInt16(result1.Content, 2));
+ //浠诲姟鐘舵��
+ forkLiftProtocol.setProtocolStatus((int) siemensS7Net.getByteTransform().TransInt16(result1.Content, 4));
+ //浠诲姟妯″紡
+ forkLiftProtocol.setTaskMode((int) siemensS7Net.getByteTransform().TransInt16(result1.Content, 6));
+ //鍙栬揣鏁版嵁
+ forkLiftProtocol.setPick((int) siemensS7Net.getByteTransform().TransInt16(result1.Content, 8));
+ //鏀捐揣鏁版嵁
+ forkLiftProtocol.setPut((int) siemensS7Net.getByteTransform().TransInt16(result1.Content, 10));
+ //鍑哄叆搴撴ā寮�
+ forkLiftProtocol.setIOMode((int) siemensS7Net.getByteTransform().TransInt16(result1.Content, 12));
+ //鏁呴殰鐮�
+ forkLiftProtocol.setErrorCode((int) siemensS7Net.getByteTransform().TransInt16(result1.Content, 14));
+
+ //************琛ュ厖鎵╁睍瀛楁*************
+ InnerForkLiftExtend forkLiftExtend = (InnerForkLiftExtend) forkLiftProtocol.getExtend();
+ forkLiftProtocol.setExtend(forkLiftExtend);
+
+ }else {
+ OutputQueue.FORKLIFT.offer(MessageFormat.format("銆恵0}銆憑1}璇诲彇璐у弶鎻愬崌鏈虹姸鎬佷俊鎭け璐�", DateUtils.convert(new Date()), slave.getId()));
+ }
+
+ OperateResultExOne<byte[]> result2 = this.masterThread.read(this.slave.getId(), "staStatus");
+ if (result2.IsSuccess) {
+ for (int i = 0; i < this.slave.getSta().size(); i++) {
+ ForkLiftSlave.Sta sta = this.slave.getSta().get(i);
+ if (forkLiftStaProtocols.isEmpty()) {
+ continue;
+ }
+
+ ForkLiftStaProtocol forkLiftStaProtocol = forkLiftStaProtocols.get(i);
+ boolean[] status1 = siemensS7Net.getByteTransform().TransBool(result2.Content, i * 2, 2);
+ forkLiftStaProtocol.setHasTray(status1[0]);
+ forkLiftStaProtocol.setHasCar(status1[1]);
+ }
+ }
+
+ if (System.currentTimeMillis() - forkLiftProtocol.getDeviceDataLog() > 1000 * 5) {
+ //閲囬泦鏃堕棿瓒呰繃5s锛屼繚瀛樹竴娆℃暟鎹褰�
+ //淇濆瓨鏁版嵁璁板綍
+ DeviceDataLogService deviceDataLogService = SpringUtils.getBean(DeviceDataLogService.class);
+ DeviceDataLog deviceDataLog = new DeviceDataLog();
+ deviceDataLog.setOriginData(Base64.getEncoder().encodeToString(result1.Content));
+ deviceDataLog.setWcsData(JSON.toJSONString(forkLiftProtocol));
+ deviceDataLog.setType("forkLift");
+ deviceDataLog.setDeviceNo(forkLiftProtocol.getLiftNo());
+ deviceDataLog.setCreateTime(new Date());
+ deviceDataLogService.insert(deviceDataLog);
+
+ //鏇存柊閲囬泦鏃堕棿
+ forkLiftProtocol.setDeviceDataLog(System.currentTimeMillis());
+ }
+
+ //灏嗘彁鍗囨満鐘舵�佷繚瀛樿嚦鏁版嵁搴�
+ BasLiftService basLiftService = SpringUtils.getBean(BasLiftService.class);
+ BasLift basLift = basLiftService.selectOne(new EntityWrapper<BasLift>()
+ .eq("lift_no", slave.getId()));
+ if (basLift == null) {
+ basLift = new BasLift();
+ //鎻愬崌鏈哄彿
+ basLift.setLiftNo(forkLiftProtocol.getLiftNo());
+ basLift.setStatus(1);
+ basLiftService.insert(basLift);
+ }
+ //浠诲姟鍙�
+ basLift.setWrkNo(forkLiftProtocol.getTaskNo());
+ //淇敼鏃堕棿
+ basLift.setUpdateTime(new Date());
+ //璁惧鐘舵��
+ basLift.setDeviceStatus(JSON.toJSONString(forkLiftProtocol));
+ if (basLiftService.updateById(basLift)) {
+ OutputQueue.FORKLIFT.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛",DateUtils.convert(new Date()), forkLiftProtocol.getLiftNo()));
+ }
+
+ } catch (Exception e) {
+ OutputQueue.FORKLIFT.offer(MessageFormat.format("銆恵0}銆戣鍙栬揣鍙夋彁鍗囨満鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
+ }
+ }
+
+ @Override
+ public ForkLiftProtocol getStatus(boolean clone) {
+ if (this.forkLiftProtocol == null) {
+ return null;
+ }
+ return clone ? this.forkLiftProtocol.clone() : this.forkLiftProtocol;
+ }
+
+ @Override
+ public List<ForkLiftStaProtocol> getForkLiftStaProtocols() {
+ return this.forkLiftStaProtocols;
+ }
+
+ @Override
+ public ForkLiftProtocol getStatus() {
+ return getStatus(true);
+ }
+
+ @Override
+ public CommandResponse pickAndPut(ForkLiftCommand command) {
+ CommandResponse response = new CommandResponse(false);
+
+ short[] array = new short[4];
+ array[0] = command.getTaskNo();//浠诲姟鍙�
+ array[1] = command.getMode();//浠诲姟妯″紡
+ array[2] = command.getPick();//鍙栬揣鏁版嵁
+ array[3] = command.getPut();//鏀捐揣鏁版嵁
+ OperateResult result = this.masterThread.write(this.slave.getId(), "write", array);
+ if (result.IsSuccess) {
+ OperateResult result2 = this.masterThread.write(this.slave.getId(), "writeConfirm", command.getConfirm());
+ if (result2.IsSuccess) {
+ response.setResult(true);
+ }
+ }
+ return response;
+ }
+
+ @Override
+ public CommandResponse shuttleSwitch(ForkLiftCommand command) {
+ CommandResponse response = new CommandResponse(false);
+
+ short[] array = new short[4];
+ array[0] = command.getTaskNo();//浠诲姟鍙�
+ array[1] = command.getMode();//浠诲姟妯″紡
+ array[2] = command.getPick();//鍙栬揣鏁版嵁
+ array[3] = command.getPut();//鏀捐揣鏁版嵁
+ OperateResult result = this.masterThread.write(this.slave.getId(), "write", array);
+ if (result.IsSuccess) {
+ OperateResult result2 = this.masterThread.write(this.slave.getId(), "writeConfirm", command.getConfirm());
+ if (result2.IsSuccess) {
+ response.setResult(true);
+ }
+ }
+ return response;
+ }
+
+ @Override
+ public CommandResponse reset() {
+ CommandResponse response = new CommandResponse(false);
+ OperateResult result = this.masterThread.write(this.slave.getId(), "confirm", (short) 1);
+ if (result.IsSuccess) {
+ News.info("璐у弶鎻愬崌鏈虹‘璁ゅ懡浠や笅鍙戞垚鍔燂紝鎻愬崌鏈哄彿={}", forkLiftProtocol.getLiftNo());
+ response.setResult(true);
+ }
+ return response;
+ }
+
+ @Override
+ public boolean isIdle() {
+ if (this.forkLiftProtocol.getTaskNo() == null
+ || this.forkLiftProtocol.getProtocolStatus() == null
+ || this.forkLiftProtocol.getModel() == null
+ ) {
+ return false;
+ }
+
+ boolean res = this.forkLiftProtocol.getProtocolStatus() == ForkLiftProtocolStatusType.IDLE.id
+ && this.forkLiftProtocol.getWrkNo() == 0
+ && this.forkLiftProtocol.getTaskNo() == 0
+ && this.forkLiftProtocol.getModel() == 2;
+ return res;
+ }
+
+ @Override
+ public boolean isDeviceIdle() {
+ return isDeviceIdle(null);
+ }
+
+ @Override
+ public boolean isDeviceIdle(ExecuteSupport support) {
+ if (null != support) {
+ Boolean judgement = support.judgement();
+ if (judgement != null && !judgement) {
+ return true;
+ }
+ }
+
+ if (this.forkLiftProtocol.getTaskNo() == null
+ || this.forkLiftProtocol.getProtocolStatus() == null
+ || this.forkLiftProtocol.getModel() == null
+ ) {
+ return false;
+ }
+
+ boolean res = this.forkLiftProtocol.getProtocolStatus() == ForkLiftProtocolStatusType.IDLE.id
+ && this.forkLiftProtocol.getWrkNo() == 0
+ && this.forkLiftProtocol.getModel() == 2;
+ return res;
+ }
+
+ @Override
+ public boolean setProtocolStatus(ForkLiftProtocolStatusType status) {
+ return false;
+ }
+
+ @Override
+ public boolean setSyncTaskNo(Integer taskNo) {
+ this.forkLiftProtocol.setSyncTaskNo(taskNo);
+ return true;
+ }
+
+ @Override
+ public boolean switchIOMode(ForkLiftIoModeType type) {
+ OperateResult result = siemensS7Net.Write("DB103.12", type.id.shortValue());
+ if (result.IsSuccess) {
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public int generateDeviceTaskNo(int taskNo, ForkLiftTaskModeType type) {
+ return taskNo;
+ }
+
+ @Override
+ public List<ForkLiftCommand> getPickAndPutCommand(Integer taskNo, Integer pick, Integer put) {
+ List<ForkLiftCommand> commands = new ArrayList<>();
+ ForkLiftCommand command = new ForkLiftCommand();
+ command.setLiftNo(slave.getId());
+ command.setTaskNo(taskNo.shortValue());
+ command.setMode(ForkLiftTaskModeType.PICK_PUT.id.shortValue());
+ command.setPick(pick.shortValue());
+ command.setPut(put.shortValue());
+ command.setConfirm((short) 1);
+
+ commands.add(command);
+ return commands;
+ }
+
+ @Override
+ public List<ForkLiftCommand> getShuttleSwitchCommand(Integer taskNo, Integer originLev, Integer targetLev) {
+ List<ForkLiftCommand> commands = new ArrayList<>();
+ ForkLiftCommand command = new ForkLiftCommand();
+ command.setLiftNo(slave.getId());
+ command.setTaskNo(taskNo.shortValue());
+ command.setMode(ForkLiftTaskModeType.SHUTTLE_SWITCH.id.shortValue());
+ command.setPick(originLev.shortValue());
+ command.setPut(targetLev.shortValue());
+ command.setConfirm((short) 1);
+
+ commands.add(command);
+ return commands;
+ }
+
+ /**
+ * 鎵╁睍瀛楁
+ */
+ @Data
+ private class InnerForkLiftExtend {
+
+ }
+}
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 2374651..cc24188 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -60,6 +60,14 @@
rack: 0
slot: 0
threadImpl: NyShuttleThread
+ # 璐у弶鎻愬崌鏈轰富绾跨▼
+ forkLiftMaster[0]:
+ id: 99
+ ip: 10.10.20.20
+ port: 102
+ rack: 0
+ slot: 0
+ threadImpl: LfdZyForkLiftMasterThread
# 璐у弶鎻愬崌鏈�1
forkLift[0]:
id: 1
@@ -67,7 +75,8 @@
port: 102
rack: 0
slot: 0
- threadImpl: ZyForkLiftThread
+ threadImpl: LfdZyForkLiftSlaveThread
+ masterId: 99
staRow: 9
staBay: 6
sta[0]:
--
Gitblit v1.9.1