From 40d95599c1ac6ef89d465e031132d9c627a7f0bc Mon Sep 17 00:00:00 2001
From: Junjie <540245094@qq.com>
Date: 星期三, 19 十一月 2025 13:38:54 +0800
Subject: [PATCH] #增加出入库模式
---
src/main/java/com/zy/core/thread/SiemensDevpThread.java | 261 ++++++++++++++++++++++-----------------------------
1 files changed, 113 insertions(+), 148 deletions(-)
diff --git a/src/main/java/com/zy/core/thread/SiemensDevpThread.java b/src/main/java/com/zy/core/thread/SiemensDevpThread.java
index 7c3d608..ee70d68 100644
--- a/src/main/java/com/zy/core/thread/SiemensDevpThread.java
+++ b/src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -9,9 +9,7 @@
import com.core.common.DateUtils;
import com.core.common.SpringUtils;
import com.core.exception.CoolException;
-import com.zy.asrs.entity.BasDevp;
import com.zy.asrs.entity.DeviceDataLog;
-import com.zy.asrs.service.BasDevpService;
import com.zy.asrs.service.DeviceDataLogService;
import com.zy.common.utils.News;
import com.zy.core.DevpThread;
@@ -22,7 +20,10 @@
import com.zy.core.enums.SlaveType;
import com.zy.core.model.DevpSlave;
import com.zy.core.model.Task;
+import com.zy.core.model.command.LiftCommand;
+import com.zy.core.model.protocol.LiftProtocol;
import com.zy.core.model.protocol.StaProtocol;
+import com.zy.core.model.protocol.TemperatureProtocol;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
@@ -32,7 +33,6 @@
/**
* 杈撻�佺嚎绾跨▼
- * Created by vincent on 2020/8/4
*/
@Data
@Slf4j
@@ -41,7 +41,8 @@
private DevpSlave slave;
private SiemensS7Net siemensS7Net;
private Map<Integer, StaProtocol> station = new ConcurrentHashMap<>();
- private short heartBeatVal = 1;
+ private LiftProtocol liftProtocol = new LiftProtocol();
+ private Map<Integer, TemperatureProtocol> temperatureMap = new ConcurrentHashMap<>();
/**
* 鏃ュ織閲囬泦鏃堕棿
@@ -51,24 +52,16 @@
public static final ArrayList<Integer> staNos1 = new ArrayList<Integer>() {{
add(100);add(101);add(102);add(103);add(104);
add(105);add(106);add(107);add(108);add(109);
- add(110);
+ add(110);add(111);add(112);add(113);add(114);
+ add(115);add(116);add(117);add(118);add(119);add(120);
}};
-
- public static final ArrayList<Integer> staNos2 = new ArrayList<Integer>() {{
- add(2000);add(2001);add(2002);add(1001);add(1002);add(1003);add(1004);add(1005);add(1006);add(1007);
- }};
-
-
- private Integer count = 0;
public static final ArrayList<Integer> barcode1 = new ArrayList<Integer>() {{
add(1);
- add(2);
}};
- public static final ArrayList<Integer> barcode2 = new ArrayList<Integer>() {{
- add(3);
- add(4);
+ public static final ArrayList<Integer> temperature1 = new ArrayList<Integer>() {{
+ add(1);add(2);add(3);add(4);add(5);add(6);add(7);add(8);add(9);
}};
/**
@@ -108,6 +101,15 @@
}
}
+ private ArrayList<Integer> getTemperature() {
+ switch (slave.getId()) {
+ case 1:
+ return temperature1;
+ default:
+ throw new CoolException("鏈嶅姟鍣ㄥ紓甯�");
+ }
+ }
+
@Override
@SuppressWarnings("InfiniteLoopStatement")
public void run() {
@@ -126,8 +128,10 @@
break;
// 鍐欐暟鎹� ID+鐩爣绔�
case 2:
- write((StaProtocol)task.getData());
+ write((LiftCommand) task.getData());
break;
+ case 3:
+ writeIoMode((Integer) task.getData());
default:
break;
}
@@ -142,30 +146,26 @@
* 鍒濆鍖栫珯鐐圭姸鎬�
*/
private void initSite() {
- count ++;
ArrayList<Integer> staNos = getStaNo();
- if(count > 77) {
- // 绔欑偣缂栧彿
- for (Integer siteId : staNos) {
- StaProtocol staProtocol = station.get(siteId);
- if (null == staProtocol) {
- staProtocol = new StaProtocol();
- staProtocol.setSiteId(siteId);
- station.put(siteId, staProtocol);
- }
- staProtocol.setWorkNo((short) 0); // ID
- staProtocol.setAutoing(false); // 鑷姩
- staProtocol.setLoading(false); // 鏈夌墿
- staProtocol.setInEnable(false); // 鍙叆
- staProtocol.setOutEnable(false); // 鍙嚭
- staProtocol.setEmptyMk(false); // 绌烘澘淇″彿
- staProtocol.setStaNo((short) 0); // 鐩爣绔�
-
- if (!staProtocol.isPakMk() && !staProtocol.isLoading()) {
- staProtocol.setPakMk(true);
- }
+ // 绔欑偣缂栧彿
+ for (Integer siteId : staNos) {
+ StaProtocol staProtocol = station.get(siteId);
+ if (null == staProtocol) {
+ staProtocol = new StaProtocol();
+ staProtocol.setSiteId(siteId);
+ station.put(siteId, staProtocol);
}
- count = 0;
+ staProtocol.setWorkNo((short) 0); // ID
+ staProtocol.setAutoing(false); // 鑷姩
+ staProtocol.setLoading(false); // 鏈夌墿
+ staProtocol.setInEnable(false); // 鍙叆
+ staProtocol.setOutEnable(false); // 鍙嚭
+ staProtocol.setEmptyMk(false); // 绌烘澘淇″彿
+ staProtocol.setStaNo((short) 0); // 鐩爣绔�
+
+ if (!staProtocol.isPakMk() && !staProtocol.isLoading()) {
+ staProtocol.setPakMk(true);
+ }
}
}
@@ -195,7 +195,7 @@
private void read() throws InterruptedException {
ArrayList<Integer> staNos = getStaNo();
int staNoSize = staNos.size();
- OperateResultExOne<byte[]> result = siemensS7Net.Read("DB101.0", (short) (staNoSize * 18));
+ OperateResultExOne<byte[]> result = siemensS7Net.Read("DB101.0", (short) (staNoSize * 13));
if (result.IsSuccess) {
for (int i = 0; i < staNoSize; i++) {
Integer siteId = staNos.get(i); // 绔欑偣缂栧彿
@@ -206,21 +206,12 @@
station.put(siteId, staProtocol);
}
staProtocol.setSiteId(siteId);
- staProtocol.setWorkNo((short) siemensS7Net.getByteTransform().TransInt32(result.Content, (i * 18))); // 宸ヤ綔鍙�
- staProtocol.setStaNo((short) siemensS7Net.getByteTransform().TransInt32(result.Content, (i * 18) + 4)); // 鐩爣绔�
+ staProtocol.setWorkNo((short) siemensS7Net.getByteTransform().TransInt32(result.Content, (i * 13))); // 宸ヤ綔鍙�
+ staProtocol.setStaNo((short) siemensS7Net.getByteTransform().TransInt32(result.Content, (i * 13) + 4)); // 鐩爣绔�
+ staProtocol.setLocHeight(siemensS7Net.getByteTransform().TransInt16(result.Content, (i * 13) + 8));//搴撲綅楂樺害
+ staProtocol.setError(siemensS7Net.getByteTransform().TransInt16(result.Content, (i * 13) + 10)); // 鎶ヨ
- short locHeight = siemensS7Net.getByteTransform().TransInt16(result.Content, (i * 18) + 8);//搴撲綅楂樺害
- if (locHeight == 2) {//high
- staProtocol.setHigh(true);
- staProtocol.setLow(false);
- }else {//low
- staProtocol.setHigh(false);
- staProtocol.setLow(true);
- }
-
- staProtocol.setError(siemensS7Net.getByteTransform().TransInt16(result.Content, (i * 18) + 10)); // 鎶ヨ
-
- boolean[] status = siemensS7Net.getByteTransform().TransBool(result.Content, (i * 18) + 12, 1);
+ boolean[] status = siemensS7Net.getByteTransform().TransBool(result.Content, (i * 13) + 12, 1);
staProtocol.setAutoing(status[0]); // 鑷姩
staProtocol.setLoading(status[1]); // 鏈夌墿
staProtocol.setInEnable(status[2]); // 鍙叆
@@ -228,21 +219,38 @@
staProtocol.setEmptyMk(status[4]); // 绌烘澘淇″彿
staProtocol.setFullPlt(status[5]); // 婊℃墭鐩�
- boolean[] statusError = siemensS7Net.getByteTransform().TransBool(result.Content, (i * 18) + 13, 1);
- staProtocol.setFrontError(statusError[0]); // 鍓嶈秴鎶ヨ
- staProtocol.setBackError(statusError[1]); // 鍚庤秴鎶ヨ
- staProtocol.setHighError(statusError[2]); // 瓒呴珮鎶ヨ
- staProtocol.setLeftError(statusError[3]);// 宸﹂珮鎶ヨ
- staProtocol.setRightError(statusError[4]); // 鍙抽珮鎶ヨ
- staProtocol.setWeightError(statusError[5]); // 瓒呴噸鎶ヨ
- staProtocol.setBarcodeError(statusError[6]); // 鎵爜鎶ヨ
-
- short emptyInType = siemensS7Net.getByteTransform().TransInt16(result.Content, (i * 18) + 14);//棰勭暀1-绌烘墭鍏ュ簱绫诲瀷锛�1:绔嬪簱鏂瑰悜 2:浜х嚎鏂瑰悜
- staProtocol.setEmptyInType(emptyInType);
-
if (!staProtocol.isPakMk() && !staProtocol.isLoading()) {
staProtocol.setPakMk(true);
}
+ }
+ }
+
+ //浠诲姟淇℃伅鍙嶉
+ Thread.sleep(200);
+ OperateResultExOne<byte[]> result3 = siemensS7Net.Read("DB101.400", (short) 10);
+ if (result3.IsSuccess) {
+ liftProtocol.setMode(siemensS7Net.getByteTransform().TransInt16(result3.Content, 0)); // 妯″紡
+ liftProtocol.setDeviceStatus(siemensS7Net.getByteTransform().TransInt16(result3.Content, 2)); // 璁惧鐘舵��
+ liftProtocol.setTaskStatus(siemensS7Net.getByteTransform().TransInt16(result3.Content, 4)); // 瀹屾垚淇″彿
+ liftProtocol.setWorkNo((short) siemensS7Net.getByteTransform().TransInt32(result3.Content, 6)); // 宸ヤ綔鍙�
+ liftProtocol.setIoMode(siemensS7Net.getByteTransform().TransInt16(result3.Content, 10)); // 鍑哄叆搴撴ā寮�
+ }
+
+ //娓╂箍搴︿俊鎭弽棣�
+ Thread.sleep(200);
+ ArrayList<Integer> temperatureList = getTemperature();
+ OperateResultExOne<byte[]> result4 = siemensS7Net.Read("DB101.300", (short) (temperatureList.size() * 4));
+ if (result4.IsSuccess) {
+ for (int i = 0; i < temperatureList.size(); i++) {
+ Integer deviceId = temperatureList.get(i); // 缂栧彿
+ TemperatureProtocol temperatureProtocol = temperatureMap.get(deviceId);
+ if (null == temperatureProtocol) {
+ temperatureProtocol = new TemperatureProtocol();
+ temperatureProtocol.setDeviceId(deviceId);
+ temperatureMap.put(deviceId, temperatureProtocol);
+ }
+ temperatureProtocol.setTemperature(siemensS7Net.getByteTransform().TransInt16(result4.Content, (i * 4))); // 娓╁害
+ temperatureProtocol.setHumidity(siemensS7Net.getByteTransform().TransInt16(result4.Content, (i * 4) + 2)); // 婀垮害
}
}
@@ -280,91 +288,52 @@
if (result.IsSuccess && result2.IsSuccess) {
OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛",DateUtils.convert(new Date()), slave.getId()));
-
- // 鏍规嵁瀹炴椂淇℃伅鏇存柊鏁版嵁搴�
- try {
- List<BasDevp> basDevps = new ArrayList<>();
- for (Integer siteId : staNos) {
- StaProtocol staProtocol = station.get(siteId);
- basDevps.add(staProtocol.toSqlModel());
- }
-
- BasDevpService basDevpService = SpringUtils.getBean(BasDevpService.class);
- if (null != basDevpService && !basDevpService.updateBatchById(basDevps)) {
- throw new Exception("鏇存柊鏁版嵁搴撴暟鎹け璐�");
- }
- } catch (Exception e) {
- initSite();
- e.printStackTrace();
- OutputQueue.DEVP.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("SiemensDevp"+" - 3"+" - 鏇存柊鏁版嵁搴撴暟鎹け璐� ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot());
- }
-
} 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()));
}
}
/**
- * 鍐欏叆 ID+鐩爣绔� =====> 鍗曠珯鐐瑰啓鍏�
+ * 鍐欏叆鍛戒护
*/
- private void write(StaProtocol staProtocol) throws InterruptedException {
- if (null == staProtocol) {
+ private void write(LiftCommand liftCommand) {
+ if (null == liftCommand) {
return;
}
- ArrayList<Integer> staNos = getStaNo();
- int index = staNos.indexOf(staProtocol.getSiteId());
int[] array = new int[3];
- array[0] = staProtocol.getWorkNo().intValue();
- array[1] = staProtocol.getStaNo().intValue();
- array[2] = staProtocol.getPalletSize().intValue();
+ array[0] = liftCommand.getWorkNo();
+ array[1] = liftCommand.getSourceStaNo();
+ array[2] = liftCommand.getTargetStaNo();
- OperateResult write = siemensS7Net.Write("DB102." + index * 16, array);
-
-// OperateResult write = null;
-// OperateResult write1 = null;
-// //浠诲姟涓嬪彂娆℃暟
-// int writeCount = 0;
-// do {
-// write = siemensS7Net.Write("DB100." + index*2, staProtocol.getWorkNo()); // 宸ヤ綔鍙�
-// Thread.sleep(500);
-// write1 = siemensS7Net.Write("DB101." + index*2, staProtocol.getStaNo()); // 鐩爣绔�
-// if(write.IsSuccess || write1.IsSuccess){
-// Thread.sleep(200);
-// OperateResultExOne<byte[]> readResult = siemensS7Net.Read("DB100." + index*2, (short) 2);
-// OperateResultExOne<byte[]> readResult1 = siemensS7Net.Read("DB101." + index*2, (short) 2);
-// if(readResult.IsSuccess && readResult1.IsSuccess){
-// short workNo = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 0);
-// short staNo = siemensS7Net.getByteTransform().TransInt16(readResult1.Content, 0);
-// if(staProtocol.getWorkNo().equals(workNo) && staProtocol.getStaNo().equals(staNo)){
-// //浠诲姟鍛戒护鍐欏叆鎴愬姛
-// log.info("鍐欏叆杈撻�佺嚎鍛戒护鍚庤繑鍥炴垚鍔燂紝骞朵笖鍥炶鎴愬姛銆傝緭閫佺嚎plc缂栧彿={}锛寋}锛屽啓鍏ユ鏁�={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
-// break;
-// } else {//杩斿洖缁撴灉鏄垚鍔熶簡锛屼絾鏄湡瀹炲�间笉鐩稿悓
-// writeCount++;
-// log.error("鍐欏叆杈撻�佺嚎鍛戒护鍚庤繑鍥炴垚鍔燂紝浣嗘槸璇诲彇浠诲姟鍊间笉涓�鑷淬�傝緭閫佺嚎plc缂栧彿={}锛寋}锛屽啓鍏ユ鏁�={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
-// }
-// } else {
-// writeCount++;
-// log.error("鍐欏叆杈撻�佺嚎鍛戒护鍚庤鍙栧け璐ャ�傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={},鍐欏叆娆℃暟={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
-// }
-// }
-// else {
-// writeCount++;
-// log.error("鍐欏叆杈撻�佺嚎鍛戒护鍚庤鍙栧け璐ャ�傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={},鍐欏叆娆℃暟={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
-// }
-// }while (writeCount<5);
+ OperateResult write = siemensS7Net.Write("DB100.0", array);
if (!write.IsSuccess) {
- staProtocol = station.get(staProtocol.getSiteId());
- if (staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() ==0) {
- staProtocol.setPakMk(true);
- }
- OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎绔欑偣鏁版嵁澶辫触銆傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(staProtocol)));
- News.error("SiemensDevp"+" - 4"+" - 鍐欏叆杈撻�佺嚎绔欑偣鏁版嵁澶辫触銆傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={}", slave.getId(), JSON.toJSON(staProtocol));
+ OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎绔欑偣鏁版嵁澶辫触銆傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(liftCommand)));
+ News.error("SiemensDevp"+" - 4"+" - 鍐欏叆杈撻�佺嚎绔欑偣鏁版嵁澶辫触銆傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={}", slave.getId(), JSON.toJSON(liftCommand));
} else {
- OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆� 杈撻�佺嚎鍛戒护涓嬪彂 [id:{1}] >>>>> {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(staProtocol)));
- News.info("SiemensDevp"+" - 5"+" - 杈撻�佺嚎鍛戒护涓嬪彂 [id:{}] >>>>> 鍛戒护涓嬪彂锛� {}", slave.getId(), JSON.toJSON(staProtocol));
+ OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆� 杈撻�佺嚎鍛戒护涓嬪彂 [id:{1}] >>>>> {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(liftCommand)));
+ News.info("SiemensDevp"+" - 5"+" - 杈撻�佺嚎鍛戒护涓嬪彂 [id:{}] >>>>> 鍛戒护涓嬪彂锛� {}", slave.getId(), JSON.toJSON(liftCommand));
+ }
+ }
+
+ /**
+ * 鍐欏叆鍛戒护
+ */
+ private void writeIoMode(Integer ioMode) {
+ if (null == ioMode) {
+ return;
+ }
+ short[] array = new short[1];
+ array[0] = ioMode.shortValue();
+
+ OperateResult write = siemensS7Net.Write("DB100.12", array);
+
+ if (!write.IsSuccess) {
+ OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ュ嚭鍏ュ簱妯″紡鏁版嵁澶辫触銆傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2}", DateUtils.convert(new Date()), slave.getId(), ioMode));
+ News.error("SiemensDevp"+" - 4"+" - 鍐欏叆鍑哄叆搴撴ā寮忔暟鎹け璐ャ�傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={}", slave.getId(), ioMode);
+ } else {
+ OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆� 鍑哄叆搴撴ā寮忓懡浠や笅鍙� [id:{1}] >>>>> {2}", DateUtils.convert(new Date()), slave.getId(), ioMode));
+ News.info("SiemensDevp"+" - 5"+" - 鍑哄叆搴撴ā寮忓懡浠や笅鍙� [id:{}] >>>>> 鍛戒护涓嬪彂锛� {}", slave.getId(), ioMode);
}
}
@@ -384,17 +353,13 @@
siemensS7Net.ConnectClose();
}
- public static void main(String[] args) {
- System.out.println(staNos1.indexOf(129));
- System.out.println(staNos1.size());
- for (int i = 0; i<staNos1.size(); i++) {
-// System.out.println(i*2);
-// System.out.println(i*2 + 200);
-// System.out.println(i);
- }
- int index = staNos1.indexOf(128);
- System.out.println(index*2);
- System.out.println(index*2 + 200);
+ @Override
+ public Map<Integer, TemperatureProtocol> getTemperatureList() {
+ return this.temperatureMap;
}
+ @Override
+ public LiftProtocol getLiftStatus() {
+ return this.liftProtocol;
+ }
}
--
Gitblit v1.9.1