From 038634540d95d4a5787b80a1fbab131df4d99823 Mon Sep 17 00:00:00 2001
From: zhang <zc857179121@qq.com>
Date: 星期一, 13 四月 2026 17:11:09 +0800
Subject: [PATCH] 1
---
zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/constant/RedisConveyorConstant.java | 4
zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/properties/DevpSlave.java | 4
zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/model/StaProtocol.java | 53 +++
zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/service/Snap7Service.java | 72 +++++
zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/operation/handler/SendTaskOperationHandler.java | 52 ++-
zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/properties/CtuOperationConfig.java | 2
zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/enums/ConveyorStateType.java | 4
zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/thread/SiemensDevpThread.java | 64 ++++
zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/model/SafeSignal.java | 18 +
/dev/null | 86 ------
zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/controller/CtuController.java | 4
zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/constant/TaskField.java | 10
zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/operation/handler/ClearSingleOperationHandler.java | 35 +
zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/operation/handler/OutOperationHandler.java | 60 ++--
zy-asc-conveyor/src/main/resources/application.yml | 28 +
zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/operation/handler/AppleLocOperationHandler.java | 61 ++-
zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/constant/SafeSignalField.java | 46 +++
zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/operation/handler/StartUpOperationHandler.java | 107 +++++++
zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/scheduler/JobLogScheduler.java | 20 -
zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/listen/DevpSafeDataSubscriber.java | 56 ++++
20 files changed, 568 insertions(+), 218 deletions(-)
diff --git a/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/controller/CtuController.java b/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/controller/CtuController.java
index 9f98232..4727f24 100644
--- a/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/controller/CtuController.java
+++ b/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/controller/CtuController.java
@@ -56,8 +56,8 @@
stationResponseParam = new StationResponseParam();
stationResponseParam.setStaNo(staNo);
stationResponseParam.setOccupied(staProtocol.isLoading());
- stationResponseParam.setInEnable((staProtocol.isInEnable() && staProtocol.getWorkNo() == 0 ? true : false));
- stationResponseParam.setOutEnable((staProtocol.isOutEnable() ? true : false));
+ stationResponseParam.setInEnable((staProtocol.getAllowPut()));
+ stationResponseParam.setOutEnable((staProtocol.getAllowTake()));
stationResponseParam.setOnline(staProtocol.isAutoing());
list.add(stationResponseParam);
}
diff --git a/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/constant/RedisConveyorConstant.java b/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/constant/RedisConveyorConstant.java
index 0340f0a..9bdc336 100644
--- a/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/constant/RedisConveyorConstant.java
+++ b/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/constant/RedisConveyorConstant.java
@@ -1,6 +1,8 @@
package com.zy.acs.conveyor.core.constant;
public class RedisConveyorConstant {
-
+ //杈撻�佺嚎浠诲姟鏍囪瘑
public static final String CONVEYOR_TASK_FLAG = "CONVEYOR_TASK_FLAG";
+ //杈撻�佺嚎瀹夊叏浜や簰鏍囪瘑
+ public static final String CONVEYOR_SAFE_FLAG = "CONVEYOR_SAFE_FLAG";
}
diff --git a/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/constant/SafeSignalField.java b/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/constant/SafeSignalField.java
new file mode 100644
index 0000000..b8c5c9e
--- /dev/null
+++ b/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/constant/SafeSignalField.java
@@ -0,0 +1,46 @@
+package com.zy.acs.conveyor.core.constant;
+
+public enum SafeSignalField {
+
+ SAFE_SIGNAL_TO_CONVEYOR("DB7", 4, 4, 8),
+ SAFE_SIGNAL_FROM_CONVEYOR("DB7", 40, 4, 8),
+
+ ;
+
+ private final String addressPattern;
+ private final int offset;
+ private final int byteLength;
+ private final int arrLength;
+
+ SafeSignalField(String addressPattern, int offset, int byteLength, int arrLength) {
+ this.addressPattern = addressPattern;
+ this.offset = offset;
+ this.byteLength = byteLength;
+ this.arrLength = arrLength;
+ }
+
+ public String getAddressPattern() {
+ return addressPattern;
+ }
+
+ public int getOffset() {
+ return offset;
+ }
+
+ public int getByteLength() {
+ return byteLength;
+ }
+
+ public int getArrLength() {
+ return arrLength;
+ }
+
+ /**
+ * 鏍规嵁 DB 鍧楃紪鍙峰拰绔欑偣鍋忕Щ鐢熸垚鍏蜂綋鍦板潃
+ *
+ * @return PLC4X 鍦板潃瀛楃涓诧紝濡� "DB100.DBD0"
+ */
+ public String buildAddress() {
+ return addressPattern + PlcConstant.ADDRESS_CONCATENATION + offset;
+ }
+}
diff --git a/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/constant/TaskField.java b/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/constant/TaskField.java
index 44f104f..bf5a8b9 100644
--- a/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/constant/TaskField.java
+++ b/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/constant/TaskField.java
@@ -6,11 +6,11 @@
*/
public enum TaskField {
ALL("DB13", 48, 48),
- TASK_NUMBER("DB13", 0, 4),
- START_STATION("DB13", 4, 2),
- DEST_STATION("DB13", 6, 2),
- DIRECTION("DB13", 8, 2),
- ROUTE_NUMBER("DB13", 10, 2);
+ TASK_NUMBER("DB13", 12, 4),
+ START_STATION("DB13", 16, 2),
+ DEST_STATION("DB13", 18, 2),
+ DIRECTION("DB13", 20, 2),
+ ROUTE_NUMBER("DB13", 22, 2);
private final String addressPattern;
private final int offset;
diff --git a/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/enums/ConveyorStateType.java b/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/enums/ConveyorStateType.java
index dd4d68b..af80bc7 100644
--- a/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/enums/ConveyorStateType.java
+++ b/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/enums/ConveyorStateType.java
@@ -3,8 +3,8 @@
public enum ConveyorStateType {
//鍑哄簱璁惧涓婅蛋
OUTBOUND(2),
- //妯℃嫙鐢ㄦ埛
- FAKEUSER(3),
+ //鍚姩鍏ュ簱
+ STARTUP(3),
//鍏ュ簱鐢宠
APPLYLOC(4),
//鍏ュ簱璁惧涓婅蛋
diff --git a/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/listen/DevpSafeDataSubscriber.java b/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/listen/DevpSafeDataSubscriber.java
new file mode 100644
index 0000000..d5733a4
--- /dev/null
+++ b/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/listen/DevpSafeDataSubscriber.java
@@ -0,0 +1,56 @@
+package com.zy.acs.conveyor.core.listen;
+
+import com.zy.acs.common.utils.RedisSupport;
+import com.zy.acs.conveyor.core.constant.RedisConveyorConstant;
+import com.zy.acs.conveyor.core.model.StaProtocol;
+import com.zy.acs.conveyor.core.service.Snap7Service;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.context.event.ApplicationReadyEvent;
+import org.springframework.context.event.EventListener;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PreDestroy;
+
+/**
+ * 璇诲彇redis鍐欏叆plc
+ */
+@Slf4j
+@Component
+public class DevpSafeDataSubscriber {
+
+ private Thread thread;
+
+ private final RedisSupport redis = RedisSupport.defaultRedisSupport;
+
+ @Autowired
+ private Snap7Service snap7Service;
+
+ @EventListener(ApplicationReadyEvent.class)
+ private void start() {
+ thread = new Thread(() -> {
+ while (!Thread.currentThread().isInterrupted()) {
+ try {
+ // 闂撮殧
+ Thread.sleep(20);
+
+ StaProtocol protocol = redis.pop(RedisConveyorConstant.CONVEYOR_SAFE_FLAG);
+ if (null != protocol) {
+
+ snap7Service.writeSafe(protocol);
+ }
+
+ } catch (Exception ignore) {
+ }
+ }
+ });
+ thread.start();
+ }
+
+ @PreDestroy
+ public void shutDown() {
+ if (thread != null) thread.interrupt();
+ }
+
+
+}
diff --git a/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/model/SafeSignal.java b/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/model/SafeSignal.java
new file mode 100644
index 0000000..db95fcf
--- /dev/null
+++ b/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/model/SafeSignal.java
@@ -0,0 +1,18 @@
+package com.zy.acs.conveyor.core.model;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class SafeSignal implements Serializable {
+
+ private Integer index;
+
+ private Boolean flag;
+
+ public SafeSignal(Integer index, Boolean flag) {
+ this.index = index;
+ this.flag = flag;
+ }
+}
diff --git a/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/model/StaProtocol.java b/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/model/StaProtocol.java
index 8a0ead1..666098b 100644
--- a/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/model/StaProtocol.java
+++ b/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/model/StaProtocol.java
@@ -32,10 +32,10 @@
// 鏈夌墿
private boolean loading;
- // 鍙叆
+ // 闇�姹傚叆
private boolean inEnable;
- // 鍙嚭
+ // 闇�姹傚嚭
private boolean outEnable;
// 绌烘澘淇″彿
@@ -49,6 +49,18 @@
// 浣�
private boolean low;
+
+ // 涓�
+ private boolean mid;
+
+ // 鍚姩鍏ュ簱
+ private boolean startup;
+
+ // 涓�斾换鍔$敵璇�
+ private boolean segApply;
+
+ // 鍏ュ簱寮傚父
+ private boolean applyErr;
//鏉$爜
private String barcode;
@@ -100,6 +112,43 @@
private Boolean upcontactErr = false; //椤跺崌鐢垫満鎺ヨЕ鍣ㄦ晠闅�
+ // 瀹夊叏浜や簰 ------------------------------------------------------------------------
+ // ctu鎴朼gv鍐欑粰杈撻�佺嚎鐨�
+ // ctu鐢宠鏀�
+ private Boolean applyPut = false;
+
+ // ctu鐢宠鍙�
+ private Boolean applyTake = false;
+
+ // ctu鍙栧畬鎴�
+ private Boolean putComplete = false;
+
+ // ctu鏀惧畬鎴�
+ private Boolean takeComplete = false;
+
+ // 绂佹杩愯
+ private Boolean stop = false;
+
+
+ // 杈撻�佺嚎鍐欑粰ctu鎴朼gv
+ // 蹇冭烦
+ private Boolean heartbeat = false;
+
+ // 鍏佽鍙�
+ private Boolean allowTake = false;
+
+ // 鍏佽鏀�
+ private Boolean allowPut = false;
+
+ // 鎺ヨ揣瀹屾垚
+ private Boolean inComplete = false;
+
+ // 鍑鸿揣瀹屾垚
+ private Boolean outComplete = false;
+
+ private SafeSignal safeSignal;
+
+
public Boolean isErr() {
if (frontErr || backErr || highErr || leftErr || rightErr || weightErr || barcodeErr) {
return true;
diff --git a/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/operation/handler/AppleLocOperationHandler.java b/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/operation/handler/AppleLocOperationHandler.java
index cbaa48a..6fafd4f 100644
--- a/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/operation/handler/AppleLocOperationHandler.java
+++ b/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/operation/handler/AppleLocOperationHandler.java
@@ -1,5 +1,6 @@
package com.zy.acs.conveyor.core.operation.handler;
+import com.alibaba.fastjson.JSON;
import com.zy.acs.common.utils.News;
import com.zy.acs.common.utils.RedisSupport;
import com.zy.acs.conveyor.controller.vo.ApplyInDto;
@@ -77,34 +78,46 @@
staProtocol = staProtocol.clone();
}
// 鍒ゆ柇鏄惁婊¤冻鏉′欢
- if (!staProtocol.isLoading()) {
+ if (staProtocol.isInEnable()) {
continue;
}
- if (staProtocol.getWorkNo() > 0 && staProtocol.isAutoing()) {
- String barcode = staProtocol.getBarcode();
- if (Cools.isEmpty(barcode)) {
- News.error("绔欑偣锛歿}锛屾湭鎵埌鐮佸�硷細{}", staProtocol.getSiteId(), barcode);
- return;
+ if (!staProtocol.isLoading()) {
+ News.error("{}锛氱珯鐐癸細{}锛屾棤鐗�", config.getMark(), staProtocol.getSiteId());
+ continue;
+ }
+ if (!staProtocol.isAutoing()) {
+ News.error("{}锛氱珯鐐癸細{}锛岄潪鑷姩", config.getMark(), staProtocol.getSiteId());
+ continue;
+ }
+ String barcode = staProtocol.getBarcode();
+ if (Cools.isEmpty(barcode)) {
+ News.error("绔欑偣锛歿}锛屾湭鎵埌鐮佸�硷細{}", staProtocol.getSiteId(), barcode);
+ continue;
+ }
+ Job job = jobService.getJobByBarcode(barcode);
+ if (job == null) {
+ News.error("{}锛氱珯鐐癸細{}锛屾壘涓嶅埌浠诲姟", config.getMark(), staProtocol.getSiteId());
+ continue;
+ }
+ if (job.getJobSts() != ConveyorStateType.STARTUP.getStatus()) {
+ if (job.getJobSts() == ConveyorStateType.INBOUND.getStatus()){
+ continue;
}
- // 9991鏄┖鏉匡紝9992鏄弧鏉�
- if (staProtocol.getWorkNo() >= 9991 && staProtocol.getWorkNo() <= 9992) {
- Job job = jobService.getJobByBarcode(barcode);
- // 鐢宠鍏ュ簱
- if (job == null || (job != null && job.getJobSts() == ConveyorStateType.CLEARSIGNAL.getStatus())) {
- ApplyInRepsonseDto locOfWms = wmsMainService.getLocOfWms(applyIn(barcode, inSta.getStaNo() + "", staProtocol));
- if (locOfWms != null) {
- Integer workNo = getWorkNo();
- staProtocol.setWorkNo(workNo);
- staProtocol.setStaNo(inSta.getTargetSta());
- redis.push(RedisConveyorConstant.CONVEYOR_TASK_FLAG, staProtocol);
- if (jobService.insert(initJob(locOfWms, barcode, workNo, inSta.getTargetSta() + ""))) {
- News.info("鐢宠鍏ュ簱鎴愬姛锛屾潯鐮侊細{},绔欑偣锛歿}", barcode, inSta.getStaNo());
- }
- } else {
- News.error("WMS鏈繑鍥炲簱浣嶄俊鎭紝鏉$爜锛歿},绔欑偣锛歿}", barcode, inSta.getStaNo());
- }
- }
+ News.error("{}锛氱珯鐐癸細{}锛屼换鍔$姸鎬佷笉瀵癸紝{}", config.getMark(), staProtocol.getSiteId(), JSON.toJSON(job));
+ continue;
+ }
+
+ ApplyInRepsonseDto locOfWms = wmsMainService.getLocOfWms(applyIn(barcode, inSta.getStaNo() + "", staProtocol));
+ if (locOfWms != null) {
+ Integer workNo = getWorkNo();
+ staProtocol.setWorkNo(workNo);
+ staProtocol.setStaNo(inSta.getTargetSta());
+ redis.push(RedisConveyorConstant.CONVEYOR_TASK_FLAG, staProtocol);
+ if (jobService.insert(initJob(locOfWms, barcode, workNo, inSta.getTargetSta() + ""))) {
+ News.info("鐢宠鍏ュ簱鎴愬姛锛屾潯鐮侊細{},绔欑偣锛歿}", barcode, inSta.getStaNo());
}
+ } else {
+ News.error("WMS鏈繑鍥炲簱浣嶄俊鎭紝鏉$爜锛歿},绔欑偣锛歿}", barcode, inSta.getStaNo());
}
}
}
diff --git a/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/operation/handler/ClearSingleOperationHandler.java b/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/operation/handler/ClearSingleOperationHandler.java
index a03a113..960e0af 100644
--- a/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/operation/handler/ClearSingleOperationHandler.java
+++ b/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/operation/handler/ClearSingleOperationHandler.java
@@ -1,5 +1,6 @@
package com.zy.acs.conveyor.core.operation.handler;
+import com.alibaba.fastjson.JSON;
import com.zy.acs.common.utils.News;
import com.zy.acs.common.utils.RedisSupport;
import com.zy.acs.conveyor.core.constant.RedisConveyorConstant;
@@ -63,19 +64,35 @@
}
// 鍒ゆ柇鏄惁婊¤冻鏉′欢
if (staProtocol.isLoading()) {
+ //News.error("{}锛氱珯鐐癸細{}锛屾湁鐗�", config.getMark(), staProtocol.getSiteId());
continue;
}
- if (staProtocol.getWorkNo() > 0 && staProtocol.isAutoing()) {
+ if (!staProtocol.isAutoing()) {
+ News.error("{}锛氱珯鐐癸細{}锛岄潪鑷姩", config.getMark(), staProtocol.getSiteId());
+ continue;
+ }
+ if (staProtocol.getWorkNo() > 0) {
Job job = jobService.getJobByJobNo(staProtocol.getWorkNo());
- if (job != null && job.getJobSts() == ConveyorStateType.SENDTASK.getStatus()) {
- //String s = ctuMainService.checkStationStatus(takeSta.getStaNo());
- staProtocol.setWorkNo(0);
- staProtocol.setStaNo(0);
- redis.push(RedisConveyorConstant.CONVEYOR_TASK_FLAG, staProtocol);
+ if (job == null) {
+ News.error("{}锛氱珯鐐癸細{}锛屾壘涓嶅埌浠诲姟", config.getMark(), staProtocol.getSiteId());
+ continue;
+ }
+ if (job.getJobSts() != ConveyorStateType.SENDTASK.getStatus()) {
+ if (job.getJobSts() == ConveyorStateType.CLEARSIGNAL.getStatus()){
+ continue;
+ }
+ News.error("{}锛氱珯鐐癸細{}锛屼换鍔$姸鎬佷笉瀵癸紝{}", config.getMark(), staProtocol.getSiteId(), JSON.toJSON(job));
+ continue;
+ }
+ //String s = ctuMainService.checkStationStatus(takeSta.getStaNo());
+ staProtocol.setWorkNo(0);
+ staProtocol.setStaNo(0);
+ redis.push(RedisConveyorConstant.CONVEYOR_TASK_FLAG, staProtocol);
- job.setJobSts(ConveyorStateType.CLEARSIGNAL.getStatus());
- jobService.updateById(job);
- //log.info("" + config.getMark() + "绔欑偣娓呯┖锛歿},{}", takeSta.getStaNo(), staProtocol.getWorkNo());
+ job.setJobSts(ConveyorStateType.CLEARSIGNAL.getStatus());
+ if (!jobService.updateById(job)){
+ log.info("" + config.getMark() + "绔欑偣娓呯┖澶辫触锛歿},{}", takeSta.getStaNo(), staProtocol.getWorkNo());
+ }else {
News.info("" + config.getMark() + "绔欑偣娓呯┖锛歿},{}", takeSta.getStaNo(), staProtocol.getWorkNo());
}
}
diff --git a/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/operation/handler/FakeUserOperationHandler.java b/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/operation/handler/FakeUserOperationHandler.java
deleted file mode 100644
index e6f65b4..0000000
--- a/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/operation/handler/FakeUserOperationHandler.java
+++ /dev/null
@@ -1,86 +0,0 @@
-package com.zy.acs.conveyor.core.operation.handler;
-
-import com.zy.acs.common.utils.RedisSupport;
-import com.zy.acs.conveyor.core.constant.RedisConveyorConstant;
-import com.zy.acs.conveyor.core.enums.ConveyorStateType;
-import com.zy.acs.conveyor.core.model.StaProtocol;
-import com.zy.acs.conveyor.core.operation.OperationHandler;
-import com.zy.acs.conveyor.core.properties.CtuOperationConfig;
-import com.zy.acs.conveyor.core.properties.SlaveProperties;
-import com.zy.acs.conveyor.core.service.StationService;
-import com.zy.acs.conveyor.entity.Job;
-import com.zy.acs.conveyor.service.JobService;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-import org.springframework.transaction.interceptor.TransactionAspectSupport;
-
-import java.util.Map;
-
-/**
- * 妯℃嫙鐢ㄦ埛鎸夋寜閽�
- */
-@Slf4j
-@Component
-public class FakeUserOperationHandler implements OperationHandler {
-
- @Autowired
- private SlaveProperties slaveProperties;
-
-
- @Autowired
- private JobService jobService;
-
-
- @Autowired
- private StationService stationService;
-
- private final RedisSupport redis = RedisSupport.defaultRedisSupport;
-
-
- @Override
- public ConveyorStateType getType() {
- return ConveyorStateType.FAKEUSER;
- }
-
- @Override
- public synchronized void execute(CtuOperationConfig config) {
-
- try {
- // 鏍规嵁杈撻�佺嚎plc閬嶅巻
- Map<Integer, StaProtocol> stationMap = stationService.getStationMap(1);
- StaProtocol staProtocol = stationMap.get(1004);
- if (staProtocol == null) {
- return;
- } else {
- staProtocol = staProtocol.clone();
- }
- // 鍒ゆ柇鏄惁婊¤冻鏉′欢
- if (!staProtocol.isLoading()) {
- return;
- }
- StaProtocol staProtocol5 = stationMap.get(1005);
- if (staProtocol5.isLoading()) {
- log.info("1005鏈夌墿锛岀瓑鏃犵墿涔嬪悗鎵嶅叆搴�");
- return;
- }
- if (staProtocol.getWorkNo() > 0 && staProtocol.isAutoing()) {
- Job jobByWorkNo = jobService.getJobByJobNoAndJobSts(staProtocol.getWorkNo(), ConveyorStateType.OUTBOUND.getStatus());
- if (jobByWorkNo != null && jobByWorkNo.getJobSts() == ConveyorStateType.OUTBOUND.getStatus()) {
- staProtocol.setWorkNo(9992);
- staProtocol.setStaNo(1005);
- redis.push(RedisConveyorConstant.CONVEYOR_TASK_FLAG, staProtocol);
-
- jobByWorkNo.setJobSts(3);
- jobByWorkNo.setMemo("妯℃嫙鎸夋寜閽�");
- jobService.updateById(jobByWorkNo);
- log.info("鍏ュ簱杈撻�佺嚎涓嬪彂锛歿},{}", staProtocol.getWorkNo(), 1006);
-
- }
- }
- } catch (Exception e) {
- e.printStackTrace();
- TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
- }
- }
-}
diff --git a/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/operation/handler/OutOperationHandler.java b/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/operation/handler/OutOperationHandler.java
index aad1ac7..58cffdc 100644
--- a/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/operation/handler/OutOperationHandler.java
+++ b/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/operation/handler/OutOperationHandler.java
@@ -1,9 +1,11 @@
package com.zy.acs.conveyor.core.operation.handler;
+import com.alibaba.fastjson.JSON;
import com.zy.acs.common.utils.News;
import com.zy.acs.common.utils.RedisSupport;
import com.zy.acs.conveyor.core.constant.RedisConveyorConstant;
import com.zy.acs.conveyor.core.enums.ConveyorStateType;
+import com.zy.acs.conveyor.core.model.SafeSignal;
import com.zy.acs.conveyor.core.model.StaProtocol;
import com.zy.acs.conveyor.core.operation.OperationHandler;
import com.zy.acs.conveyor.core.properties.CtuOperationConfig;
@@ -59,51 +61,49 @@
// 鏍规嵁杈撻�佺嚎plc閬嶅巻
for (DevpSlave devp : slaveProperties.getDevp()) {
// 閬嶅巻鍑哄簱鍙�
- for (DevpSlave.Sta releaseSta : devp.getReleaseSta()) {
+ for (DevpSlave.Sta putSta : devp.getPutSta()) {
// 鑾峰彇鍏ュ簱绔欎俊鎭�
Map<Integer, StaProtocol> stationMap = stationService.getStationMap(devp.getId());
- StaProtocol staProtocol = stationMap.get(releaseSta.getStaNo());
+ StaProtocol staProtocol = stationMap.get(putSta.getStaNo());
if (staProtocol == null) {
continue;
} else {
staProtocol = staProtocol.clone();
}
// 鍒ゆ柇鏄惁婊¤冻鏉′欢
- if (!staProtocol.isLoading()) {
- if (staProtocol.getWorkNo() > 0) {
- News.error("杈撻�佺嚎涓婃湁浠诲姟鍙锋棤璐э紝闇�瑕佷汉宸ュ鐞嗭細{}", staProtocol.getSiteId());
- //log.error("杈撻�佺嚎涓婃湁浠诲姟鍙锋棤璐э紝闇�瑕佷汉宸ュ鐞嗭細{}", staProtocol.getSiteId());
- }
+ if (!staProtocol.isAutoing()) {
+ News.error("{},杈撻�佺嚎鏈嚜鍔紝闇�瑕佸紑鍚細{}", config.getMark(), staProtocol.getSiteId());
continue;
}
- if (staProtocol.isAutoing() && staProtocol.getWorkNo() == 0) {
- if (staProtocol.isInEnable()) {
- News.error("娌℃湁鍙叆淇″彿锛歿}", staProtocol.getSiteId());
- //log.error("娌℃湁鍙叆淇″彿锛歿}", staProtocol.getSiteId());
- continue;
- }
- String seqNum = ctuMainService.checkStationStatus(releaseSta.getStaNo());
+ if (staProtocol.getWorkNo() == 0 && staProtocol.isLoading()) {
+ String seqNum = ctuMainService.checkStationStatus(putSta.getStaNo());
if (seqNum != null) {
- if (jobService.getJobByTaskNo(seqNum) == null) {
- int workNo = wrkLastnoService.nextWorkNo(WorkNoTypeType.WORK_NO_TYPE.type);
- // 涓嬪彂绉诲姩 涓� 涓嬪彂plc鍛戒护
- staProtocol.setWorkNo(workNo);
- staProtocol.setStaNo(releaseSta.getTargetSta());
- Job job = new Job();
- job.setTaskNo(seqNum);
- job.setJobNo(workNo);
- job.setJobSts(ConveyorStateType.OUTBOUND.getStatus());
- if (!jobService.insert(job)) {
- throw new CoolException("鎻掑叆杈撻�佺嚎浠诲姟澶辫触," + seqNum + " - " + workNo);
- }
- redis.push(RedisConveyorConstant.CONVEYOR_TASK_FLAG, staProtocol);
- log.info("杈撻�佺嚎涓嬪彂锛歿},{}", staProtocol.getWorkNo(), releaseSta.getTargetSta());
+ staProtocol.setSafeSignal(new SafeSignal( devp.getPutSta().indexOf(putSta) ,true));
+ redis.push(RedisConveyorConstant.CONVEYOR_SAFE_FLAG,staProtocol );
+
+ Job job = jobService.getJobByTaskNo(seqNum);
+ if (job != null) {
+ News.error("{}锛氱珯鐐癸細{}锛屽瓨鍦ㄤ换鍔�,{}", config.getMark(), staProtocol.getSiteId(), JSON.toJSON(job));
+ continue;
}
+ int workNo = wrkLastnoService.nextWorkNo(WorkNoTypeType.WORK_NO_TYPE.type);
+ staProtocol.setWorkNo(workNo);
+ staProtocol.setStaNo(putSta.getTargetSta());
+ job = new Job();
+ job.setTaskNo(seqNum);
+ job.setJobNo(workNo);
+ job.setJobSts(ConveyorStateType.OUTBOUND.getStatus());
+ if (!jobService.insert(job)) {
+ throw new CoolException("鎻掑叆杈撻�佺嚎浠诲姟澶辫触," + seqNum + " - " + workNo);
+ }
+ redis.push(RedisConveyorConstant.CONVEYOR_TASK_FLAG, staProtocol);
+ News.info("{},杈撻�佺嚎涓嬪彂锛歿},{}", config.getMark(), staProtocol.getWorkNo(), putSta.getTargetSta());
} else {
- News.error("绔欑偣淇℃伅涓嶇鍚堝叆搴撴潯浠讹紒锛侊紒" + " 璋冪敤RCS妫�楠屾湭閫氳繃,绔欑偣锛歿}", staProtocol.getSiteId());
- //log.info("绔欑偣淇℃伅涓嶇鍚堝叆搴撴潯浠讹紒锛侊紒" + " 璋冪敤RCS妫�楠屾湭閫氳繃,绔欑偣锛歿}", staProtocol.getSiteId());
+ News.error("{},绔欑偣淇℃伅涓嶇鍚堝叆搴撴潯浠讹紒锛侊紒" + " 璋冪敤RCS妫�楠屾湭閫氳繃,绔欑偣锛歿}", config.getMark(), staProtocol.getSiteId());
}
+ } else {
+ News.error("{},绔欑偣锛歿},寮傚父鐘舵�侊紝璇疯ˉ鍏�", config.getMark(), staProtocol.getSiteId());
}
}
}
diff --git a/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/operation/handler/SendTaskOperationHandler.java b/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/operation/handler/SendTaskOperationHandler.java
index 1f487d9..7a2e31d 100644
--- a/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/operation/handler/SendTaskOperationHandler.java
+++ b/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/operation/handler/SendTaskOperationHandler.java
@@ -1,6 +1,7 @@
package com.zy.acs.conveyor.core.operation.handler;
+import com.alibaba.fastjson.JSON;
import com.zy.acs.common.utils.News;
import com.zy.acs.common.utils.RedisSupport;
import com.zy.acs.conveyor.controller.vo.OpenBusSubmitParam;
@@ -72,33 +73,44 @@
staProtocol = staProtocol.clone();
}
// 鍒ゆ柇鏄惁婊¤冻鏉′欢
- if (!staProtocol.isLoading()) {
- if (staProtocol.getWorkNo() > 0) {
- News.error("杈撻�佺嚎涓婃湁璐ф棤浠诲姟鍙凤紝闇�瑕佷汉宸ュ鐞嗭細{}", staProtocol.getSiteId());
- //log.error("杈撻�佺嚎涓婃湁浠诲姟鍙锋棤璐э紝闇�瑕佷汉宸ュ鐞嗭細{}", staProtocol.getSiteId());
- }
+ if (staProtocol.getWorkNo() == 0 && staProtocol.isLoading()) {
+ News.error("{},杈撻�佺嚎涓婃湁璐ф棤浠诲姟鍙凤紝闇�瑕佷汉宸ュ鐞嗙珯鐐癸細{}", config.getMark(), staProtocol.getSiteId());
continue;
}
- if (staProtocol.getWorkNo() == 0) {
- News.error("杈撻�佺嚎涓婃湁璐ф棤浠诲姟鍙凤紝闇�瑕佷汉宸ュ鐞嗭細{}", staProtocol.getSiteId());
- //log.error("杈撻�佺嚎涓婃湁璐ф棤浠诲姟鍙凤紝闇�瑕佷汉宸ュ鐞嗭細{}", staProtocol.getSiteId());
+ if (staProtocol.getWorkNo() > 0 && !staProtocol.isLoading()) {
+ News.error("{},杈撻�佺嚎涓婃棤璐ф湁浠诲姟鍙凤紝闇�瑕佷汉宸ュ鐞嗙珯鐐癸細{}", config.getMark(), staProtocol.getSiteId());
continue;
}
- if (staProtocol.isAutoing()) {
- Job job = jobService.getJobByJobNoAndJobSts(staProtocol.getWorkNo(), ConveyorStateType.INBOUND.getStatus());
- if (job != null) {
- if (ctuMainService.sendTask(process(job))) {
- job.setJobSts(ConveyorStateType.SENDTASK.getStatus());
- job.setRcsTime(new Date());
- jobService.updateById(job);
- log.info("浠诲姟鍙戦�佺粰RCS鎴愬姛,WMS浠诲姟鍙凤細{},杈撻�佺嚎宸ヤ綔鍙凤細{}", job.getTaskNo(), job.getJobNo());
- } else {
- log.info("浠诲姟鍙戦�佺粰RCS澶辫触,WMS浠诲姟鍙凤細{},杈撻�佺嚎宸ヤ綔鍙凤細{}", job.getTaskNo(), job.getJobNo());
- }
+ if (!staProtocol.isAutoing()) {
+ News.error("{}锛氱珯鐐癸細{}锛岄潪鑷姩", config.getMark(), staProtocol.getSiteId());
+ continue;
+ }
+ if (staProtocol.isInEnable()) {
+ News.error("{},绔欑偣锛歿},娌℃湁鍙叆淇″彿", config.getMark(), staProtocol.getSiteId());
+ continue;
+ }
+ Job jobByJobNo = jobService.getJobByJobNo(staProtocol.getWorkNo());
+ if (jobByJobNo == null) {
+ News.error("{}锛氱珯鐐癸細{}锛屾壘涓嶅埌浠诲姟", config.getMark(), staProtocol.getSiteId());
+ continue;
+ }
+ if (jobByJobNo.getJobSts() != ConveyorStateType.INBOUND.getStatus()) {
+ if (jobByJobNo.getJobSts() == ConveyorStateType.SENDTASK.getStatus()){
+ continue;
}
+ News.error("{}锛氱珯鐐癸細{}锛屼换鍔$姸鎬佷笉瀵癸紝{}", config.getMark(), staProtocol.getSiteId(), JSON.toJSON(jobByJobNo));
+ continue;
+ }
+
+ if (ctuMainService.sendTask(process(jobByJobNo))) {
+ jobByJobNo.setJobSts(ConveyorStateType.SENDTASK.getStatus());
+ jobByJobNo.setRcsTime(new Date());
+ jobService.updateById(jobByJobNo);
+ News.error("{},浠诲姟鍙戦�佺粰RCS鎴愬姛,WMS浠诲姟鍙凤細{},杈撻�佺嚎宸ヤ綔鍙凤細{}", config.getMark(), jobByJobNo.getTaskNo(), jobByJobNo.getJobNo());
} else {
- log.error("杈撻�佺嚎鏈嚜鍔紝闇�瑕佸紑鍚細{}", staProtocol.getSiteId());
+ News.error("{},浠诲姟鍙戦�佺粰RCS澶辫触,WMS浠诲姟鍙凤細{},杈撻�佺嚎宸ヤ綔鍙凤細{}", config.getMark(), jobByJobNo.getTaskNo(), jobByJobNo.getJobNo());
}
+
}
}
} catch (Exception e) {
diff --git a/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/operation/handler/StartUpOperationHandler.java b/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/operation/handler/StartUpOperationHandler.java
new file mode 100644
index 0000000..e4ff50b
--- /dev/null
+++ b/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/operation/handler/StartUpOperationHandler.java
@@ -0,0 +1,107 @@
+package com.zy.acs.conveyor.core.operation.handler;
+
+import com.alibaba.fastjson.JSON;
+import com.zy.acs.common.utils.News;
+import com.zy.acs.common.utils.RedisSupport;
+import com.zy.acs.conveyor.core.constant.RedisConveyorConstant;
+import com.zy.acs.conveyor.core.enums.ConveyorStateType;
+import com.zy.acs.conveyor.core.model.StaProtocol;
+import com.zy.acs.conveyor.core.operation.OperationHandler;
+import com.zy.acs.conveyor.core.properties.CtuOperationConfig;
+import com.zy.acs.conveyor.core.properties.DevpSlave;
+import com.zy.acs.conveyor.core.properties.SlaveProperties;
+import com.zy.acs.conveyor.core.service.StationService;
+import com.zy.acs.conveyor.entity.Job;
+import com.zy.acs.conveyor.service.JobService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.transaction.interceptor.TransactionAspectSupport;
+
+import java.util.Map;
+
+/**
+ * 妯℃嫙鐢ㄦ埛鎸夋寜閽�
+ */
+@Slf4j
+@Component
+public class StartUpOperationHandler implements OperationHandler {
+
+ @Autowired
+ private SlaveProperties slaveProperties;
+
+
+ @Autowired
+ private JobService jobService;
+
+
+ @Autowired
+ private StationService stationService;
+
+ private final RedisSupport redis = RedisSupport.defaultRedisSupport;
+
+
+ @Override
+ public ConveyorStateType getType() {
+ return ConveyorStateType.STARTUP;
+ }
+
+ @Override
+ public synchronized void execute(CtuOperationConfig config) {
+
+ try {
+ // 鏍规嵁杈撻�佺嚎plc閬嶅巻
+ for (DevpSlave devp : slaveProperties.getDevp()) {
+ // 閬嶅巻鍏ュ簱鍙�
+ for (DevpSlave.Sta inSta : devp.getInSta()) {
+ // 鏍规嵁杈撻�佺嚎plc閬嶅巻
+ Map<Integer, StaProtocol> stationMap = stationService.getStationMap(devp.getId());
+ StaProtocol staProtocol = stationMap.get(inSta.getSourceStaNo());
+ if (staProtocol == null) {
+ continue;
+ } else {
+ staProtocol = staProtocol.clone();
+ }
+ // 鍒ゆ柇鏄惁婊¤冻鏉′欢
+ if (!staProtocol.isStartup() || !staProtocol.isAutoing() || !staProtocol.isLoading()) {
+ if (!staProtocol.isStartup()) {
+ News.error("{}锛氱珯鐐癸細{}锛屾湭鍚姩鍏ュ簱", config.getMark(), staProtocol.getSiteId());
+ continue;
+ }
+ if (!staProtocol.isAutoing()) {
+ News.error("{}锛氱珯鐐癸細{}锛岄潪鑷姩", config.getMark(), staProtocol.getSiteId());
+ continue;
+ }
+ if (!staProtocol.isLoading()) {
+ News.error("{}锛氱珯鐐癸細{}锛屾棤鐗�", config.getMark(), staProtocol.getSiteId());
+ continue;
+ }
+
+ }
+ Job jobByJobNo = jobService.getJobByJobNo(staProtocol.getWorkNo());
+ if (jobByJobNo == null) {
+ News.error("{}锛氱珯鐐癸細{}锛屾壘涓嶅埌浠诲姟", config.getMark(), staProtocol.getSiteId());
+ continue;
+ }
+ if (jobByJobNo.getJobSts() != ConveyorStateType.OUTBOUND.getStatus()) {
+ if (jobByJobNo.getJobSts() == ConveyorStateType.STARTUP.getStatus()){
+ continue;
+ }
+ News.error("{}锛氱珯鐐癸細{}锛屼换鍔$姸鎬佷笉瀵癸紝{}", config.getMark(), staProtocol.getSiteId(), JSON.toJSON(jobByJobNo));
+ continue;
+ }
+ staProtocol.setStaNo(inSta.getStaNo());
+ redis.push(RedisConveyorConstant.CONVEYOR_TASK_FLAG, staProtocol);
+
+ jobByJobNo.setJobSts(ConveyorStateType.STARTUP.getStatus());
+ if (!jobService.updateById(jobByJobNo)) {
+ News.info("{},鍚姩鍏ュ簱锛歿},{}", config.getMark(), staProtocol.getWorkNo(), staProtocol.getStaNo());
+ }
+ }
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+ }
+ }
+}
diff --git a/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/properties/CtuOperationConfig.java b/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/properties/CtuOperationConfig.java
index 3f88a5d..67b866f 100644
--- a/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/properties/CtuOperationConfig.java
+++ b/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/properties/CtuOperationConfig.java
@@ -9,7 +9,7 @@
@Data
public class CtuOperationConfig {
private ConveyorStateType type;
- private int mark;
+ private String mark;
private int maxRetries = 3;
private long retryDelay = 500;
private Map<String, Object> params = new HashMap<>();
diff --git a/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/properties/DevpSlave.java b/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/properties/DevpSlave.java
index 8e14c64..35b604a 100644
--- a/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/properties/DevpSlave.java
+++ b/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/properties/DevpSlave.java
@@ -24,7 +24,7 @@
private Boolean staNosError;
- private List<Sta> releaseSta = new ArrayList<>();
+ private List<Sta> putSta = new ArrayList<>();
private List<Sta> takeSta = new ArrayList<>();
@@ -36,6 +36,8 @@
@Data
public static class Sta {
+ private Integer sourceStaNo;
+
private Integer staNo;
diff --git a/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/service/Snap7Service.java b/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/service/Snap7Service.java
index a677866..1db417c 100644
--- a/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/service/Snap7Service.java
+++ b/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/service/Snap7Service.java
@@ -5,7 +5,9 @@
import com.alibaba.fastjson.JSON;
import com.zy.acs.common.utils.News;
import com.zy.acs.conveyor.core.constant.PlcConstant;
+import com.zy.acs.conveyor.core.constant.SafeSignalField;
import com.zy.acs.conveyor.core.constant.TaskField;
+import com.zy.acs.conveyor.core.model.SafeSignal;
import com.zy.acs.conveyor.core.model.StaProtocol;
import com.zy.acs.conveyor.core.properties.DevpSlave;
import com.zy.acs.conveyor.core.properties.OutputQueue;
@@ -36,7 +38,77 @@
public void read(StaProtocol staProtocol, SiemensS7Net siemensS7Net) {
}
+ public void writeSafe(StaProtocol staProtocol) throws InterruptedException {
+ if (staProtocol == null) {
+ log.warn("鍐欏叆鏁版嵁涓虹┖锛岃烦杩� [id:{}]", JSON.toJSONString(staProtocol));
+ return;
+ }
+ SiemensS7Net siemensS7Net = devpS7Service.get(staProtocol.getPlcId());
+ if (siemensS7Net == null) {
+ log.error("PLC鏈繛鎺ワ紝鏃犳硶鍐欏叆 [id:{}]", JSON.toJSONString(staProtocol));
+ return;
+ }
+
+ List<DevpSlave> devp = slaveProperties.getDevp();
+ DevpSlave devpSlave = devp.stream().filter(slave -> slave.getId().equals(staProtocol.getPlcId())).findFirst().orElse(null);
+ if (devpSlave == null) {
+ log.error("PLC鏈厤缃紝鏃犳硶鍐欏叆 [id:{}]", JSON.toJSONString(staProtocol));
+ return;
+ }
+ int index = devpSlave.getStaNos().indexOf(staProtocol.getSiteId());
+ if (index < 0) {
+ log.error("绔欑偣缂栧彿涓嶅瓨鍦ㄤ簬閰嶇疆涓� [id:{}] [siteId:{}]", staProtocol.getPlcId(), staProtocol.getSiteId());
+ return;
+ }
+ SafeSignal safeSignal = staProtocol.getSafeSignal();
+
+ int baseOffset = SafeSignalField.SAFE_SIGNAL_FROM_CONVEYOR.getOffset() + safeSignal.getIndex() * SafeSignalField.SAFE_SIGNAL_FROM_CONVEYOR.getByteLength();
+ String workNoAddr = TaskField.TASK_NUMBER.getAddressPattern() + PlcConstant.ADDRESS_CONCATENATION
+ + (baseOffset + TaskField.TASK_NUMBER.getOffset());
+ String destStaAddr = TaskField.DEST_STATION.getAddressPattern() + PlcConstant.ADDRESS_CONCATENATION
+ + (baseOffset + TaskField.DEST_STATION.getOffset());
+
+ // 浠诲姟涓嬪彂閲嶈瘯鏈哄埗
+ int writeCount = 0;
+ boolean success = false;
+
+ while (writeCount < WRITE_RETRY_MAX) {
+ OperateResult writeResult = siemensS7Net.Write(workNoAddr, staProtocol.getWorkNo());
+ Thread.sleep(WRITE_RETRY_INTERVAL_MS);
+
+ OperateResult writeResult1 = siemensS7Net.Write(destStaAddr, staProtocol.getStaNo().shortValue());
+
+ if (writeResult.IsSuccess && writeResult1.IsSuccess) {
+ log.info("鍐欏叆杈撻�佺嚎鍛戒护鎴愬姛 [id:{}] [siteId:{}] [workNo:{}] [destSta:{}] [retry:{}]",
+ staProtocol.getPlcId(), staProtocol.getSiteId(), staProtocol.getWorkNo(),
+ staProtocol.getStaNo(), writeCount);
+ OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎鍛戒护鎴愬姛銆傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2}",
+ staProtocol.getPlcId(), JSON.toJSON(staProtocol)));
+ success = true;
+ break;
+ }
+
+ writeCount++;
+ log.error("鍐欏叆杈撻�佺嚎鍛戒护澶辫触 [id:{}] [siteId:{}] [retry:{}] [workErr:{}] [destErr:{}]",
+ staProtocol.getPlcId(), staProtocol.getSiteId(), writeCount,
+ writeResult.Message, writeResult1.Message);
+
+ if (writeCount < WRITE_RETRY_MAX) {
+ Thread.sleep(WRITE_RETRY_INTERVAL_MS);
+ }
+ }
+
+ if (!success) {
+ String errorMsg = MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎绔欑偣鏁版嵁澶辫触銆傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2}",
+ staProtocol.getPlcId(), JSON.toJSON(staProtocol));
+ OutputQueue.DEVP.offer(errorMsg);
+ News.error("SiemensDevp - 4 - 鍐欏叆杈撻�佺嚎绔欑偣鏁版嵁澶辫触銆傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={}",
+ staProtocol.getPlcId(), JSON.toJSON(staProtocol));
+ log.error(errorMsg);
+ }
+
+ }
public void write(StaProtocol staProtocol) throws InterruptedException {
if (staProtocol == null) {
diff --git a/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/thread/SiemensDevpThread.java b/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/thread/SiemensDevpThread.java
index d4004da..14cba8a 100644
--- a/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/thread/SiemensDevpThread.java
+++ b/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/core/thread/SiemensDevpThread.java
@@ -5,6 +5,7 @@
import com.zy.acs.common.utils.News;
import com.zy.acs.conveyor.core.constant.DeviceField;
import com.zy.acs.conveyor.core.constant.PlcAlarmDefinition;
+import com.zy.acs.conveyor.core.constant.SafeSignalField;
import com.zy.acs.conveyor.core.constant.StationStatusField;
import com.zy.acs.conveyor.core.model.StaProtocol;
import com.zy.acs.conveyor.core.properties.DevpSlave;
@@ -125,6 +126,10 @@
// 璇诲彇PLC鏁呴殰
readPlcAlarms(staNos, staNoSize);
+ // 璇诲彇瀹夊叏浜や簰淇″彿
+ readSaleSingle(slave.getPutSta(), slave.getTakeSta());
+
+
// 瀹氭湡鏇存柊鏁版嵁搴擄紙闄嶄綆棰戠巼锛�
updateDatabaseIfNeeded();
}
@@ -138,9 +143,13 @@
staProtocol.setStaNo((int) siemensS7Net.getByteTransform().TransInt16(
content, offset + StationStatusField.FINAL_TARGET.getOffset()));
- boolean[] status = siemensS7Net.getByteTransform().TransBool(
+ boolean[] status0 = siemensS7Net.getByteTransform().TransBool(
content, offset + StationStatusField.STATUS_WORD.getOffset(),
StationStatusField.STATUS_WORD.getByteLength());
+
+ boolean[] status = siemensS7Net.getByteTransform().TransBool(
+ content, offset + StationStatusField.STATUS_WORD.getOffset(),
+ 1);
staProtocol.setAutoing(status[0]);
staProtocol.setLoading(status[1]);
@@ -150,7 +159,13 @@
staProtocol.setFullPlt(status[5]);
staProtocol.setHigh(status[6]);
staProtocol.setLow(status[7]);
-
+ boolean[] status2 = siemensS7Net.getByteTransform().TransBool(
+ content, offset + StationStatusField.STATUS_WORD.getOffset() + 1,
+ 1);
+ staProtocol.setMid(status2[0]);
+ staProtocol.setStartup(status2[1]);
+ staProtocol.setSegApply(status2[2]);
+ staProtocol.setApplyErr(status2[3]);
}
@@ -313,6 +328,51 @@
}
/**
+ * 璇诲彇瀹夊叏浜や簰淇″彿
+ */
+ private void readSaleSingle(List<DevpSlave.Sta> putSta, List<DevpSlave.Sta> takeSta) {
+ int staNoSize = putSta.size();
+ OperateResultExOne<byte[]> result = siemensS7Net.Read(
+ SafeSignalField.SAFE_SIGNAL_FROM_CONVEYOR.buildAddress(),
+ (short) (staNoSize * SafeSignalField.SAFE_SIGNAL_FROM_CONVEYOR.getByteLength()));
+
+ if (!result.IsSuccess) {
+ log.warn("璇诲彇PLC瀹夊叏浜や簰淇℃伅寮傚父 [id:{}]", slave.getId());
+ return;
+ }
+
+ byte[] content = result.Content;
+ for (int i = 0; i < staNoSize; i++) {
+ Integer put = putSta.get(i).getStaNo();
+ Integer take = takeSta.get(i).getStaNo();
+ StaProtocol staProtocolPut = station.get(put);
+ StaProtocol staProtocolTake = station.get(take);
+ if (staProtocolPut == null || staProtocolTake == null) {
+ log.warn("绔欑偣涓嶅瓨鍦� [id:{}] [staNo:{},{}]", slave.getId(), put, take);
+ continue;
+ }
+
+ boolean[] status = siemensS7Net.getByteTransform().TransBool(
+ content, i * SafeSignalField.SAFE_SIGNAL_FROM_CONVEYOR.getByteLength(), 1);
+
+ boolean[] status2 = siemensS7Net.getByteTransform().TransBool(
+ content, i * SafeSignalField.SAFE_SIGNAL_FROM_CONVEYOR.getByteLength() + 2, 1);
+
+ staProtocolPut.setHeartbeat(status[0]);
+ staProtocolPut.setAllowTake(status[1]);
+ staProtocolPut.setAllowPut(status[2]);
+ staProtocolPut.setInComplete(status[3]);
+ staProtocolPut.setOutComplete(status[4]);
+
+ staProtocolTake.setHeartbeat(status2[0]);
+ staProtocolTake.setAllowTake(status2[1]);
+ staProtocolTake.setAllowPut(status2[2]);
+ staProtocolTake.setInComplete(status2[3]);
+ staProtocolTake.setOutComplete(status2[4]);
+ }
+ }
+
+ /**
* 鎸夐渶鏇存柊鏁版嵁搴擄紙闄嶄綆鏇存柊棰戠巼锛�
*/
private void updateDatabaseIfNeeded() {
diff --git a/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/scheduler/JobLogScheduler.java b/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/scheduler/JobLogScheduler.java
index 1616d31..1f37aa8 100644
--- a/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/scheduler/JobLogScheduler.java
+++ b/zy-asc-conveyor/src/main/java/com/zy/acs/conveyor/scheduler/JobLogScheduler.java
@@ -1,7 +1,6 @@
package com.zy.acs.conveyor.scheduler;
import com.zy.acs.conveyor.core.enums.ConveyorStateType;
-import com.zy.acs.conveyor.core.properties.CtuOperationConfig;
import com.zy.acs.conveyor.core.properties.CtuServiceProperties;
import com.zy.acs.conveyor.entity.Job;
import com.zy.acs.conveyor.mapper.JobMapper;
@@ -37,25 +36,6 @@
for (Job job : jobs) {
jobService.saveJobLog(job);
}
- Boolean flag = true;
- List<CtuOperationConfig> operations = properties.getOperations();
- for (CtuOperationConfig config : operations) {
- if (config.getType().equals(ConveyorStateType.FAKEUSER)) {
- flag = false;
- }
- }
- if (flag) {
- jobs = jobMapper.listJobToLog(ConveyorStateType.OUTBOUND.getStatus(), 1);
- for (Job job : jobs) {
- jobService.saveJobLog(job);
- }
- } else {
- jobs = jobMapper.listJobToLog(ConveyorStateType.FAKEUSER.getStatus(), 1);
- for (Job job : jobs) {
- jobService.saveJobLog(job);
- }
- }
}
-
}
diff --git a/zy-asc-conveyor/src/main/resources/application.yml b/zy-asc-conveyor/src/main/resources/application.yml
index adcbd4c..d8a9f0e 100644
--- a/zy-asc-conveyor/src/main/resources/application.yml
+++ b/zy-asc-conveyor/src/main/resources/application.yml
@@ -41,27 +41,23 @@
interval: 1000
operations:
- type: OUTBOUND
- mark: 10
+ mark: 鍑哄簱娴佺▼
max-retries: 3
retry-delay: 800
- # - type: FAKEUSER
- # mark: 20
- # max-retries: 2
- # retry-delay: 800
+ - type: STARTUP
+ mark: 鍚姩鍏ュ簱娴佺▼
+ max-retries: 2
+ retry-delay: 800
- type: APPLYLOC
- mark: 30
+ mark: 鐢宠鍏ュ簱娴佺▼
max-retries: 2
retry-delay: 2000
- # - type: INBOUND
- # mark: 40
- # max-retries: 3
- # retry-delay: 500
- type: CLEARSIGNAL
- mark: 50
+ mark: 娓呯悊淇″彿娴佺▼
max-retries: 2
retry-delay: 800
- type: SENDTASK
- mark: 60
+ mark: 鍙戦�佷换鍔CS娴佺▼
max-retries: 2
retry-delay: 800
@@ -102,17 +98,23 @@
- 1011
- 1012
- 1013
+ # 绔欑偣寮傚父妯″潡鏄惁寮�鍚�
staNosError: true
+ # 鎵爜妯″潡鏄惁寮�鍚�
barcode: true
+ # 绉伴噸妯″潡鏄惁寮�鍚�
weight: true
+ # 鍙栫珯鐐逛氦浜掍俊鍙�
# ctu鏀捐揣绔欑偣
- releaseSta[0]:
+ putSta[0]:
# 鏈珯鐐�
staNo: 1001
# 鐩爣绔欑偣
targetSta: 1007
# ctu鍏ュ簱绔欑偣
inSta[0]:
+ # 婧愮珯鐐�
+ sourceStaNo: 1007
# 鏈珯鐐�
staNo: 1010
# 鐩爣绔欑偣
--
Gitblit v1.9.1