From 7d2c445d4d27bf6a16eed7634e3b5eb1212620eb Mon Sep 17 00:00:00 2001
From: luxiaotao1123 <t1341870251@63.com>
Date: 星期四, 03 三月 2022 11:00:45 +0800
Subject: [PATCH] #
---
src/main/java/com/zy/core/properties/SlaveProperties.java | 3
src/main/java/com/zy/core/thread/SteThread.java | 408 +++++++++++++++++++++++++++++
src/main/java/com/zy/core/model/protocol/SteProtocol.java | 251 +++++++++++++++++
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/SteSlave.java | 49 +++
src/main/resources/application.yml | 100 +------
src/main/java/com/zy/core/ServerBootstrap.java | 12
8 files changed, 752 insertions(+), 86 deletions(-)
diff --git a/src/main/java/com/zy/core/ServerBootstrap.java b/src/main/java/com/zy/core/ServerBootstrap.java
index 8a4ec27..7ce7369 100644
--- a/src/main/java/com/zy/core/ServerBootstrap.java
+++ b/src/main/java/com/zy/core/ServerBootstrap.java
@@ -6,6 +6,7 @@
import com.zy.core.model.CrnSlave;
import com.zy.core.model.DevpSlave;
import com.zy.core.model.LedSlave;
+import com.zy.core.model.SteSlave;
import com.zy.core.properties.SlaveProperties;
import com.zy.core.thread.*;
import lombok.extern.slf4j.Slf4j;
@@ -68,6 +69,10 @@
for (Slave car : slaveProperties.getCar()) {
MessageQueue.init(SlaveType.Car, car);
}
+ // 鍒濆鍖栫┛姊溅mq
+ for (Slave ste : slaveProperties.getSte()) {
+ MessageQueue.init(SlaveType.Ste, ste);
+ }
}
private void initThread(){
@@ -78,6 +83,13 @@
new Thread((Runnable) crnThread).start();
SlaveConnection.put(SlaveType.Crn, crn.getId(), crnThread);
}
+ // 鍒濆鍖栫┛姊溅绾跨▼
+ log.info("鍒濆鍖栫┛姊溅绾跨▼...................................................");
+ for (SteSlave crn : slaveProperties.getSte()) {
+ SteThread steThread = new SteThread(crn);
+ new Thread((Runnable) steThread).start();
+ SlaveConnection.put(SlaveType.Ste, crn.getId(), steThread);
+ }
// 鍒濆鍖栬緭閫佺嚎绾跨▼
log.info("鍒濆鍖栬緭閫佺嚎绾跨▼...................................................");
for (DevpSlave devp : slaveProperties.getDevp()) {
diff --git a/src/main/java/com/zy/core/cache/MessageQueue.java b/src/main/java/com/zy/core/cache/MessageQueue.java
index 3537280..ed5b018 100644
--- a/src/main/java/com/zy/core/cache/MessageQueue.java
+++ b/src/main/java/com/zy/core/cache/MessageQueue.java
@@ -17,6 +17,8 @@
// 鍫嗗灈鏈簃q浜ゆ崲鏈�
private static final Map<Integer, LinkedBlockingQueue<Task>> CRN_EXCHANGE = new ConcurrentHashMap<>();
+ // 绌挎杞q浜ゆ崲鏈�
+ private static final Map<Integer, LinkedBlockingQueue<Task>> STE_EXCHANGE = new ConcurrentHashMap<>();
// 杈撻�佺嚎mq浜ゆ崲鏈�
private static final Map<Integer, ConcurrentLinkedQueue<Task>> DEVP_EXCHANGE = new ConcurrentHashMap<>();
// 鏉$爜鎵弿浠猰q浜ゆ崲鏈�
@@ -35,6 +37,9 @@
switch (type) {
case Crn:
CRN_EXCHANGE.put(slave.getId(), new LinkedBlockingQueue<>(1));
+ break;
+ case Ste:
+ STE_EXCHANGE.put(slave.getId(), new LinkedBlockingQueue<>(1));
break;
case Devp:
DEVP_EXCHANGE.put(slave.getId(), new ConcurrentLinkedQueue<>());
@@ -64,6 +69,8 @@
switch (type) {
case Crn:
return CRN_EXCHANGE.get(id).offer(task);
+ case Ste:
+ return STE_EXCHANGE.get(id).offer(task);
case Devp:
return DEVP_EXCHANGE.get(id).offer(task);
case Barcode:
@@ -87,6 +94,8 @@
switch (type) {
case Crn:
return CRN_EXCHANGE.get(id).poll();
+ case Ste:
+ return STE_EXCHANGE.get(id).poll();
case Devp:
return DEVP_EXCHANGE.get(id).poll();
case Barcode:
@@ -109,6 +118,8 @@
switch (type) {
case Crn:
return CRN_EXCHANGE.get(id).peek();
+ case Ste:
+ return STE_EXCHANGE.get(id).peek();
case Devp:
return DEVP_EXCHANGE.get(id).peek();
case Barcode:
@@ -129,6 +140,9 @@
case Crn:
CRN_EXCHANGE.get(id).clear();
break;
+ case Ste:
+ STE_EXCHANGE.get(id).clear();
+ break;
case Devp:
DEVP_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 56330fe..c6c2f6c 100644
--- a/src/main/java/com/zy/core/enums/SlaveType.java
+++ b/src/main/java/com/zy/core/enums/SlaveType.java
@@ -8,6 +8,7 @@
Led,
Scale,
Car,
+ Ste,
;
public static SlaveType findInstance(String s){
diff --git a/src/main/java/com/zy/core/model/SteSlave.java b/src/main/java/com/zy/core/model/SteSlave.java
new file mode 100644
index 0000000..f9edd36
--- /dev/null
+++ b/src/main/java/com/zy/core/model/SteSlave.java
@@ -0,0 +1,49 @@
+package com.zy.core.model;
+
+import com.zy.core.Slave;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Created by vincent on 2020/8/10
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class SteSlave extends Slave {
+
+ private Integer rack;
+
+ private Integer slot;
+
+ private Boolean demo;
+
+ // 绌挎杞﹀叆搴撶珯鐐�
+ private List<CrnStn> steInStn = new ArrayList<>();
+
+ // 绌挎杞﹀嚭搴撶珯鐐�
+ private List<CrnStn> steOutStn = new ArrayList<>();
+
+ @Data
+ public static class CrnStn {
+
+ // 杈撻�佺嚎plc缂栧彿
+ private Integer devpPlcId;
+
+ // 绌挎杞︾珯鐐圭紪鍙�
+ private Integer staNo;
+
+ // 鎺�
+ private Integer row;
+
+ // 鍒�
+ private Integer bay;
+
+ // 灞�
+ private Integer lev;
+
+ }
+
+}
diff --git a/src/main/java/com/zy/core/model/protocol/SteProtocol.java b/src/main/java/com/zy/core/model/protocol/SteProtocol.java
new file mode 100644
index 0000000..29180c0
--- /dev/null
+++ b/src/main/java/com/zy/core/model/protocol/SteProtocol.java
@@ -0,0 +1,251 @@
+package com.zy.core.model.protocol;
+
+import com.zy.asrs.entity.BasCrnp;
+import com.zy.core.enums.CrnForkPosType;
+import com.zy.core.enums.CrnLiftPosType;
+import com.zy.core.enums.CrnModeType;
+import com.zy.core.enums.CrnStatusType;
+import lombok.Data;
+
+/**
+ * Created by vincent on 2020/8/7
+ */
+@Data
+public class SteProtocol {
+
+ /**
+ * 1 = 鎵嬪姩妯″紡
+ * 2 = 鑷姩妯″紡
+ * 3 = 鐢佃剳妯″紡
+ */
+ public Short mode;
+
+ public CrnModeType modeType;
+
+ /**
+ * 1 = 鎬ュ仠
+ */
+ public Short eStop;
+
+ /**
+ * 寮傚父鐮�
+ */
+ public Short alarm;
+
+ /**
+ * 浠诲姟鍙�
+ */
+ public Short taskNo = 0;
+
+ /**
+ * 鍫嗗灈鏈哄綋鍓嶇姸鎬�
+ * 0锛氱┖闂诧紝鏃犱换鍔�
+ * 1锛氬彇璐у畾浣嶄腑
+ * 2锛氬彇璐т腑
+ * 3锛氬彇璐у畬鎴愶紝鏀捐揣瀹氫綅涓�
+ * 4锛氭斁璐т腑
+ * 5锛氬洖鍘熺偣涓�
+ * 6锛氬弽鍘熺偣
+ * 7锛氬簱浣嶇Щ浣�
+ * 90锛氫换鍔″畬鎴愮瓑寰匴CS纭
+ * 99锛氭姤璀�
+ */
+ public Short status;
+
+ /**
+ * 鐘舵�佹灇涓�
+ */
+ public CrnStatusType statusType;
+
+ /**
+ * 鍫嗗灈鏈哄綋鍓嶅垪鍙�
+ */
+ public Short bay;
+
+ /**
+ * 鍫嗗灈鏈哄綋鍓嶅眰鍙�
+ */
+ public Short level;
+
+ /**
+ * 褰撳墠璐у弶浣嶇疆
+ * 0 = 璐у弶鍘熶綅
+ * 1 = 璐у弶鍦ㄥ乏渚�
+ * 2 = 璐у弶鍦ㄥ彸渚�
+ */
+ public Short forkPos;
+
+ public CrnForkPosType forkPosType;
+
+ /**
+ * 褰撳墠杞借揣鍙颁綅缃�
+ * 0 = 涓嬪畾浣�
+ * 1 = 涓婂畾浣�
+ */
+ public Short liftPos;
+
+ public CrnLiftPosType liftPosType;
+
+ /**
+ * 璧拌鍦ㄥ畾浣�
+ * 0 = 鍦ㄥ畾浣�
+ * 1 = 涓嶅湪瀹氫綅
+ */
+ public Short walkPos;
+
+ /**
+ * 杞借揣鍙版湁鐗�
+ */
+ public Short loaded;
+
+ private Short temp1;
+
+ private CrnTemp1 crnTemp1;
+
+ private Short temp2;
+
+ private Short temp3;
+
+ private Short temp4;
+
+ /**
+ * 寮傚父1
+ */
+ private boolean[] error1;
+
+ private CrnError1 crnError1;
+
+ /**
+ * 寮傚父2
+ */
+ private boolean[] error2;
+
+ private CrnError2 crnError2;
+
+ /**
+ * 寮傚父3
+ */
+ private boolean[] error3;
+
+ private CrnError3 crnError3;
+
+ /**
+ * 寮傚父4
+ */
+ private boolean[] error4;
+
+ private CrnError4 crnError4;
+
+ /**
+ * 寮傚父5
+ */
+ private boolean[] error5;
+
+ private CrnError5 crnError5;
+
+ /**
+ * 寮傚父6
+ */
+ private boolean[] error6;
+
+ private CrnError6 crnError6;
+
+ /**
+ * X琛岃蛋绾块�熷害m/min
+ */
+ private Float xSpeed;
+
+ /**
+ * Y琛岃蛋绾块�熷害m/min
+ */
+ private Float ySpeed;
+
+ /**
+ * Z琛岃蛋绾块�熷害m/min
+ */
+ private Float zSpeed;
+
+ /**
+ * 鍫嗗灈鏈虹疮璁¤蛋琛岃窛绂籯m
+ */
+ public Float xDistance;
+
+ /**
+ * 鍫嗗灈鏈虹疮璁″崌闄嶈窛绂籯m
+ */
+ public Float yDistance;
+
+ /**
+ * 鍫嗗灈鏈虹疮璁¤蛋琛屾椂闀縣
+ */
+ public Float xDuration;
+
+ /**
+ * 鍫嗗灈鏈虹疮璁″崌闄嶆椂闀縣
+ */
+ public Float yDuration;
+
+ public void setMode(Short mode) {
+ this.mode = mode;
+ this.modeType = CrnModeType.get(mode);
+ }
+
+ public void setMode(CrnModeType type) {
+ this.modeType = type;
+ this.mode = CrnModeType.get(type).id.shortValue();
+ }
+
+ public void setForkPos(Short forkPos) {
+ this.forkPos = forkPos;
+ this.forkPosType = CrnForkPosType.get(forkPos);
+ }
+
+ public void setForkPos(CrnForkPosType type) {
+ this.forkPosType = type;
+ this.forkPos = CrnForkPosType.get(type).id.shortValue();
+ }
+
+ public void setLiftPos(Short liftPos) {
+ this.liftPos = liftPos;
+ this.liftPosType = CrnLiftPosType.get(liftPos);
+ }
+
+ public void setLiftPos(CrnLiftPosType type) {
+ this.liftPosType = type;
+ this.liftPos = CrnLiftPosType.get(type).id.shortValue();
+ }
+
+ public void setStatus(Short status){
+ this.status = status;
+ this.statusType = CrnStatusType.get(status);
+ }
+
+ public void setStatus(CrnStatusType type){
+ this.statusType = type;
+ this.status = CrnStatusType.get(type).id.shortValue();
+ }
+
+ public Short getTemp1() {
+ return temp1;
+ }
+
+ public void setTemp1(Short temp1) {
+ this.temp1 = temp1;
+ }
+
+ /**
+ * 鏈�杩戜竴娆″叆鍑哄簱绫诲瀷
+ * I:鍏ュ簱
+ * O:鍑哄簱
+ */
+ private String lastIo = "I";
+
+
+ public BasCrnp toSqlModel(BasCrnp basCrnp){
+ if (alarm!=null) {
+ basCrnp.setCrnErr(alarm.longValue());
+ }
+ basCrnp.setWrkNo(taskNo.intValue());
+ return basCrnp;
+ }
+}
diff --git a/src/main/java/com/zy/core/properties/SlaveProperties.java b/src/main/java/com/zy/core/properties/SlaveProperties.java
index 4a60418..d90276f 100644
--- a/src/main/java/com/zy/core/properties/SlaveProperties.java
+++ b/src/main/java/com/zy/core/properties/SlaveProperties.java
@@ -4,6 +4,7 @@
import com.zy.core.model.CrnSlave;
import com.zy.core.model.DevpSlave;
import com.zy.core.model.LedSlave;
+import com.zy.core.model.SteSlave;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
@@ -27,6 +28,8 @@
private List<CrnSlave> crn = new ArrayList<>();
+ private List<SteSlave> ste = new ArrayList<>();
+
private List<DevpSlave> devp = new ArrayList<>();
private List<Slave> barcode = new ArrayList<>();
diff --git a/src/main/java/com/zy/core/thread/SteThread.java b/src/main/java/com/zy/core/thread/SteThread.java
new file mode 100644
index 0000000..049a874
--- /dev/null
+++ b/src/main/java/com/zy/core/thread/SteThread.java
@@ -0,0 +1,408 @@
+package com.zy.core.thread;
+
+import HslCommunication.Core.Types.OperateResult;
+import HslCommunication.Core.Types.OperateResultExOne;
+import HslCommunication.Profinet.Melsec.MelsecMcNet;
+import com.alibaba.fastjson.JSON;
+import com.core.common.DateUtils;
+import com.core.common.SpringUtils;
+import com.core.exception.CoolException;
+import com.zy.asrs.entity.BasCrnOpt;
+import com.zy.asrs.entity.BasCrnp;
+import com.zy.asrs.service.BasCrnOptService;
+import com.zy.asrs.service.BasCrnpService;
+import com.zy.core.ThreadHandler;
+import com.zy.core.cache.MessageQueue;
+import com.zy.core.cache.OutputQueue;
+import com.zy.core.enums.CrnStatusType;
+import com.zy.core.enums.CrnTaskModeType;
+import com.zy.core.enums.SlaveType;
+import com.zy.core.model.CrnSlave;
+import com.zy.core.model.SteSlave;
+import com.zy.core.model.Task;
+import com.zy.core.model.command.CrnCommand;
+import com.zy.core.model.protocol.CrnProtocol;
+import com.zy.core.model.protocol.SteProtocol;
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+
+import java.text.MessageFormat;
+import java.util.Date;
+
+/**
+ * shuttle 绌挎杞︾嚎绋�
+ * Created by vincent on 2020/8/4
+ */
+@Data
+@Slf4j
+public class SteThread implements Runnable, ThreadHandler {
+
+ private MelsecMcNet melsecMcNet;
+ private SteSlave slave;
+ private SteProtocol steProtocol;
+ private short heartBeatVal = 1;
+ private boolean resetFlag = false;
+
+ public SteThread(SteSlave slave) {
+ this.slave = slave;
+ }
+
+ @Override
+ @SuppressWarnings("InfiniteLoopStatement")
+ public void run() {
+ this.connect();
+// try {
+// Thread.sleep(2000);
+// } catch (InterruptedException e) {
+// e.printStackTrace();
+// }
+ while (true) {
+ try {
+ int step = 1;
+ Task task = MessageQueue.poll(SlaveType.Ste, slave.getId());
+ if (task != null) {
+ step = task.getStep();
+ }
+ switch (step) {
+ // 璇绘暟鎹�
+ case 1:
+ readStatus();
+ break;
+ // 鍐欏叆鏁版嵁
+ case 2:
+ write((CrnCommand) task.getData());
+ break;
+ // 澶嶄綅
+ case 3:
+ CrnCommand command = (CrnCommand) task.getData();
+ if (null == command) {
+ command = new CrnCommand();
+ }
+ command.setCrnNo(slave.getId()); // 鍫嗗灈鏈虹紪鍙�
+ command.setTaskNo((short) 0); // 宸ヤ綔鍙�
+ command.setAckFinish((short) 1); // 浠诲姟瀹屾垚纭浣�
+ command.setTaskMode(CrnTaskModeType.NONE); // 浠诲姟妯″紡
+ command.setSourcePosX((short)0); // 婧愬簱浣嶆帓
+ command.setSourcePosY((short)0); // 婧愬簱浣嶅垪
+ command.setSourcePosZ((short)0); // 婧愬簱浣嶅眰
+ command.setDestinationPosX((short)0); // 鐩爣搴撲綅鎺�
+ command.setDestinationPosY((short)0); // 鐩爣搴撲綅鍒�
+ command.setDestinationPosZ((short)0); // 鐩爣搴撲綅灞�
+ write(command);
+ break;
+ default:
+ break;
+ }
+ // 蹇冭烦
+ heartbeat();
+ Thread.sleep(500);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ }
+ }
+
+ /**
+ * 鍒濆鍖栧爢鍨涙満鐘舵��
+ */
+ private void initSte() {
+ if (null == steProtocol) {
+ steProtocol = new SteProtocol();
+ }
+ steProtocol.setMode((short) -1);
+// crnProtocol.setTaskNo((short)0);
+ steProtocol.setStatus((short)-1);
+ steProtocol.setBay((short)0);
+ steProtocol.setLevel((short)0);
+ steProtocol.setForkPos((short) -1);
+ steProtocol.setLiftPos((short) -1);
+ steProtocol.setWalkPos((short)0);
+ steProtocol.setLoaded((short)0);
+ steProtocol.setAlarm((short)0);
+ steProtocol.setXSpeed(0F);
+ steProtocol.setYSpeed(0F);
+ steProtocol.setZSpeed(0F);
+ steProtocol.setXDistance(0F);
+ steProtocol.setYDistance(0F);
+ steProtocol.setXDuration(0F);
+ steProtocol.setYDuration(0F);
+ }
+
+ @Override
+ public boolean connect() {
+ boolean result = false;
+ melsecMcNet = new MelsecMcNet(slave.getIp(), slave.getPort());
+ OperateResult connect = melsecMcNet.ConnectServer();
+ if(connect.IsSuccess){
+ result = true;
+ OutputQueue.CRN.offer(MessageFormat.format( "銆恵0}銆戝爢鍨涙満plc杩炴帴鎴愬姛 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
+ log.info("鍫嗗灈鏈簆lc杩炴帴鎴愬姛 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
+ } else {
+ OutputQueue.CRN.offer(MessageFormat.format("銆恵0}銆戝爢鍨涙満plc杩炴帴澶辫触锛侊紒锛� ===>> [id:{1}] [ip:{2}] [port:{3}] ", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
+ log.error("鍫嗗灈鏈簆lc杩炴帴澶辫触锛侊紒锛� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
+ initSte();
+ }
+// melsecMcNet.ConnectClose();
+ return result;
+ }
+
+ /**
+ * 璇诲彇鐘舵��
+ */
+ private void readStatus(){
+ try {
+// if (this.slave.getId() == 1 && flag1.equals(0)) {
+// Thread.sleep(3000);
+// flag1=1;
+// System.out.println("===");
+// }
+ OperateResultExOne<byte[]> result = melsecMcNet.Read("D20", (short) 70);
+ if (result.IsSuccess) {
+ if (null == crnProtocol) {
+ crnProtocol = new CrnProtocol();
+ }
+ crnProtocol.setMode(melsecMcNet.getByteTransform().TransInt16(result.Content, 0));
+ crnProtocol.setTaskNo(melsecMcNet.getByteTransform().TransInt16(result.Content, 2));
+ crnProtocol.setStatus(melsecMcNet.getByteTransform().TransInt16(result.Content, 4));
+ crnProtocol.setBay(melsecMcNet.getByteTransform().TransInt16(result.Content, 6));
+ crnProtocol.setLevel(melsecMcNet.getByteTransform().TransInt16(result.Content, 8));
+ crnProtocol.setForkPos(melsecMcNet.getByteTransform().TransInt16(result.Content, 10));
+ crnProtocol.setLiftPos(melsecMcNet.getByteTransform().TransInt16(result.Content, 12));
+ crnProtocol.setWalkPos(melsecMcNet.getByteTransform().TransInt16(result.Content, 14));
+ crnProtocol.setLoaded(melsecMcNet.getByteTransform().TransInt16(result.Content, 16));
+ crnProtocol.setAlarm(melsecMcNet.getByteTransform().TransInt16(result.Content, 18));
+ crnProtocol.setTemp1(melsecMcNet.getByteTransform().TransInt16(result.Content, 20));
+ crnProtocol.setTemp2(melsecMcNet.getByteTransform().TransInt16(result.Content, 22));
+ crnProtocol.setTemp3(melsecMcNet.getByteTransform().TransInt16(result.Content, 24));
+ crnProtocol.setTemp4(melsecMcNet.getByteTransform().TransInt16(result.Content, 26));
+ crnProtocol.setXSpeed(melsecMcNet.getByteTransform().TransSingle(result.Content, 28));
+ crnProtocol.setYSpeed(melsecMcNet.getByteTransform().TransSingle(result.Content, 32));
+ crnProtocol.setZSpeed(melsecMcNet.getByteTransform().TransSingle(result.Content, 36));
+ crnProtocol.setXDistance(melsecMcNet.getByteTransform().TransSingle(result.Content, 40));
+ crnProtocol.setYDistance(melsecMcNet.getByteTransform().TransSingle(result.Content, 44));
+ crnProtocol.setXDuration(melsecMcNet.getByteTransform().TransSingle(result.Content, 48));
+ crnProtocol.setYDuration(melsecMcNet.getByteTransform().TransSingle(result.Content, 52));
+
+ OutputQueue.CRN.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛",DateUtils.convert(new Date()), slave.getId()));
+
+ // 澶嶄綅淇″彿
+ if (crnProtocol.getStatusType().equals(CrnStatusType.WAITING)) {
+ log.error("-------------------------------------------绗竴姝ャ�乕鍫嗗灈鏈哄彿锛歿}][宸ヤ綔鍙凤細{}]==>> 鐘舵�佷负90锛岀瓑寰呯‘璁わ紒锛�",slave.getId(),crnProtocol.getTaskNo());
+ if (resetFlag) {
+ CrnCommand crnCommand = new CrnCommand();
+ crnCommand.setAckFinish((short)1);
+ if (write(crnCommand)) {
+ resetFlag = false;
+ }
+ }
+ }
+
+
+ // 鏍规嵁瀹炴椂淇℃伅鏇存柊鏁版嵁搴�
+ BasCrnpService basCrnpService = SpringUtils.getBean(BasCrnpService.class);
+ BasCrnp basCrnp = new BasCrnp();
+ basCrnp.setCrnErr(crnProtocol.getAlarm()==null?0:crnProtocol.getAlarm().longValue());
+ basCrnp.setCrnNo(slave.getId());
+ if (!basCrnpService.updateById(crnProtocol.toSqlModel(basCrnp))){
+ log.error("鍫嗗灈鏈簆lc鏁版嵁搴撴洿鏂板け璐� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
+ }
+
+ } else {
+ OutputQueue.CRN.offer(MessageFormat.format("銆恵0}銆憑1}鍫嗗灈鏈簆lc鐘舵�佷俊鎭け璐�",DateUtils.convert(new Date()), slave.getId()));
+ throw new CoolException(MessageFormat.format( "鍫嗗灈鏈簆lc鐘舵�佷俊鎭け璐� ===>> [id:{0}] [ip:{1}] [port:{2}]", slave.getId(), slave.getIp(), slave.getPort()));
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ OutputQueue.CRN.offer(MessageFormat.format("銆恵0}銆戣鍙栧爢鍨涙満plc鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
+ log.error("璇诲彇鍫嗗灈鏈簆lc鐘舵�佷俊鎭け璐� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
+ initCrn();
+ }
+
+ }
+
+ /**
+ * 鍐欏叆鏁版嵁
+ */
+ private boolean write(CrnCommand command){
+ if (null == command) {
+ log.error("鍫嗗灈鏈哄啓鍏ュ懡浠や负绌�");
+ return false;
+ }
+ command.setCrnNo(slave.getId());
+ short[] array = new short[10];
+ array[0] = command.getAckFinish();
+ array[1] = command.getTaskNo();
+ array[2] = command.getTaskMode();
+ array[3] = command.getSourcePosX();
+ array[4] = command.getSourcePosY();
+ array[5] = command.getSourcePosZ();
+ array[6] = command.getDestinationPosX();
+ array[7] = command.getDestinationPosY();
+ array[8] = command.getDestinationPosZ();
+ array[9] = command.getCommand();
+ OperateResult result = melsecMcNet.Write("D0", array);
+
+ if (command.getAckFinish() == 0) {
+ short commandFinish = 1;
+ result = melsecMcNet.Write("D9", commandFinish);
+ }
+
+ try {
+ // 鏃ュ織璁板綍
+ BasCrnOptService bean = SpringUtils.getBean(BasCrnOptService.class);
+ BasCrnOpt basCrnOpt = new BasCrnOpt(
+ command.getTaskNo().intValue(), // 浠诲姟鍙�
+ command.getCrnNo(), // 鍫嗗灈鏈篬闈炵┖]
+ new Date(), // 涓嬪彂鏃堕棿
+ command.getTaskModeType().toString(), // 妯″紡
+ command.getSourcePosX().intValue(), // 婧愭帓
+ command.getSourcePosY().intValue(), // 婧愬垪
+ command.getSourcePosZ().intValue(), // 婧愬眰
+ null, // 婧愮珯
+ command.getDestinationPosX().intValue(), // 鐩爣鎺�
+ command.getDestinationPosY().intValue(), // 鐩爣鍒�
+ command.getDestinationPosZ().intValue(), // 鐩爣灞�
+ null, // 鐩爣绔�
+ null, // 鍝嶅簲缁撴灉
+ null, // 淇敼鏃堕棿
+ null // 淇敼浜哄憳
+ );
+ bean.insert(basCrnOpt);
+ } catch (Exception ignore) {}
+
+ if (result.IsSuccess) {
+ log.info("鍫嗗灈鏈哄懡浠や笅鍙慬id:{}] >>>>> {}", slave.getId(), JSON.toJSON(command));
+ OutputQueue.CRN.offer(MessageFormat.format("銆恵0}銆慬id:{1}] >>>>> 鍛戒护涓嬪彂锛� {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(command)));
+ return true;
+ } else {
+ OutputQueue.CRN.offer(MessageFormat.format("銆恵0}銆戝啓鍏ュ爢鍨涙満plc鏁版嵁澶辫触 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
+ log.error("鍐欏叆鍫嗗灈鏈簆lc鏁版嵁澶辫触 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
+ return false;
+ }
+ }
+
+ @Override
+ public void close() {
+ melsecMcNet.ConnectClose();
+ }
+
+ /**
+ * 蹇冭烦
+ */
+ private void heartbeat(){
+ if (heartBeatVal == 1) {
+ heartBeatVal = 2;
+ } else {
+ heartBeatVal = 1;
+ }
+ OperateResult write = melsecMcNet.Write("D10", heartBeatVal);
+ if (!write.IsSuccess) {
+ log.error("杈撻�佺嚎plc缂栧彿={} 蹇冭烦澶辫触", slave.getId());
+ }
+ }
+
+
+ /******************************************************************************************/
+ /**************************************** 娴嬭瘯涓撶敤 *****************************************/
+ /*****************************************************************************************/
+ public static void main(String[] args) throws InterruptedException {
+ CrnSlave slave = new CrnSlave();
+ slave.setId(1);
+ slave.setIp("192.168.3.39");
+ slave.setPort(5015);
+ slave.setRack(0);
+ slave.setSlot(0);
+ SteThread melsecCrnThread = new SteThread(slave);
+ melsecCrnThread.connect();
+ melsecCrnThread.readStatus();
+ System.out.println(JSON.toJSONString(melsecCrnThread.crnProtocol));
+
+ // 1.鍏ュ簱 婧愬拰鐩爣閮藉彂
+// CrnCommand command = new CrnCommand();
+// command.setCrnNo(1); // 鍫嗗灈鏈虹紪鍙�
+// command.setTaskNo((short) 0); // 宸ヤ綔鍙�
+// command.setAckFinish((short) 0); // 浠诲姟瀹屾垚纭浣�
+// command.setTaskMode(CrnTaskModeType.PAKIN); // 浠诲姟妯″紡
+// command.setSourcePosX((short) 1); // 婧愬簱浣嶆帓
+// command.setSourcePosY((short) 0); // 婧愬簱浣嶅垪
+// command.setSourcePosZ((short) 1); // 婧愬簱浣嶅眰
+// command.setDestinationPosX((short) 2); // 鐩爣搴撲綅鎺�
+// command.setDestinationPosY((short) 3); // 鐩爣搴撲綅鍒�
+// command.setDestinationPosZ((short) 1); // 鐩爣搴撲綅灞�
+// crnThread.write(command);
+
+ // 2.鍑哄簱 婧愬拰鐩爣閮藉彂
+// CrnCommand command = new CrnCommand();
+// command.setCrnNo(1); // 鍫嗗灈鏈虹紪鍙�
+// command.setTaskNo((short) 0); // 宸ヤ綔鍙�
+// command.setAckFinish((short) 0); // 浠诲姟瀹屾垚纭浣�
+// command.setTaskMode(CrnTaskModeType.PAKOUT); // 浠诲姟妯″紡
+// command.setSourcePosX((short) 2); // 婧愬簱浣嶆帓
+// command.setSourcePosY((short) 4); // 婧愬簱浣嶅垪
+// command.setSourcePosZ((short) 3); // 婧愬簱浣嶅眰
+// command.setDestinationPosX((short) 1); // 鐩爣搴撲綅鎺�
+// command.setDestinationPosY((short) 0); // 鐩爣搴撲綅鍒�
+// command.setDestinationPosZ((short) 1); // 鐩爣搴撲綅灞�
+// crnThread.write(command);
+
+
+// // 3.搴撲綅绉昏浆 婧愬拰鐩爣閮藉彂 pass
+// CrnCommand command = new CrnCommand();
+// command.setCrnNo(slave.getId()); // 鍫嗗灈鏈虹紪鍙�
+// command.setTaskNo((short) 0); // 宸ヤ綔鍙�
+// command.setAckFinish((short) 0); // 浠诲姟瀹屾垚纭浣�
+// command.setTaskMode(CrnTaskModeType.LOC_MOVE); // 浠诲姟妯″紡: 搴撲綅绉昏浆
+// command.setSourcePosX((short)2); // 婧愬簱浣嶆帓
+// command.setSourcePosY((short)2); // 婧愬簱浣嶅垪
+// command.setSourcePosZ((short)3); // 婧愬簱浣嶅眰
+// command.setDestinationPosX((short)2); // 鐩爣搴撲綅鎺�
+// command.setDestinationPosY((short)4); // 鐩爣搴撲綅鍒�
+// command.setDestinationPosZ((short)4); // 鐩爣搴撲綅灞�
+// crnThread.write(command);
+
+ // 4.绔欎綅绉昏浆 婧愬拰鐩爣閮藉彂
+// CrnCommand command = new CrnCommand();
+// command.setCrnNo(slave.getId()); // 鍫嗗灈鏈虹紪鍙�
+// command.setTaskNo((short) 0); // 宸ヤ綔鍙�
+// command.setAckFinish((short) 0); // 浠诲姟瀹屾垚纭浣�
+// command.setTaskMode(CrnTaskModeType.SITE_MOVE); // 浠诲姟妯″紡: 搴撲綅绉昏浆
+// command.setSourcePosX((short)1); // 婧愬簱浣嶆帓
+// command.setSourcePosY((short)0); // 婧愬簱浣嶅垪
+// command.setSourcePosZ((short)1); // 婧愬簱浣嶅眰
+// command.setDestinationPosX((short)2); // 鐩爣搴撲綅鎺�
+// command.setDestinationPosY((short)0); // 鐩爣搴撲綅鍒�
+// command.setDestinationPosZ((short)1); // 鐩爣搴撲綅灞�
+// crnThread.write(command);
+
+// // 5.鍥炲師鐐� 涓嶇敤鍙� pass
+// CrnCommand command = new CrnCommand();
+// command.setCrnNo(1); // 鍫嗗灈鏈虹紪鍙�
+// command.setTaskNo((short) 0); // 宸ヤ綔鍙�
+// command.setAckFinish((short) 0); // 浠诲姟瀹屾垚纭浣�
+// command.setTaskMode(CrnTaskModeType.GO_ORIGIN); // 浠诲姟妯″紡
+// command.setSourcePosX((short) 0); // 婧愬簱浣嶆帓
+// command.setSourcePosY((short) 0); // 婧愬簱浣嶅垪
+// command.setSourcePosZ((short) 0); // 婧愬簱浣嶅眰
+// command.setDestinationPosX((short) 0); // 鐩爣搴撲綅鎺�
+// command.setDestinationPosY((short) 0); // 鐩爣搴撲綅鍒�
+// command.setDestinationPosZ((short) 0); // 鐩爣搴撲綅灞�
+// crnThread.write(command);
+
+
+ // 鍙湁鍑虹幇鎸囧畾寮傚父鎵嶈繘琛屽浣�
+// if (crnThread.crnProtocol.getCrnError2().leftTakeNoneErr
+// || crnThread.crnProtocol.getCrnError2().rightTakeNoneErr
+// || crnThread.crnProtocol.getCrnError2().leftPutLoadErr
+// || crnThread.crnProtocol.getCrnError2().rightPutLoadErr) {
+// CrnCommand command = new CrnCommand();
+// command.setCrnNo(1); // 鍫嗗灈鏈虹紪鍙�
+// command.setAckFinish((short) 1); // 浠诲姟瀹屾垚纭浣�
+// command.setTaskMode(CrnTaskModeType.NONE); // 浠诲姟妯″紡
+// Thread.sleep(3000L);
+// crnThread.write(command);
+// }
+
+ }
+
+}
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 0c2a5b1..956a195 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -70,92 +70,27 @@
row: 3
bay: 1
lev: 1
- # 鍫嗗灈鏈�2
- crn[1]:
- id: 2
- ip: 10.10.10.13
+ # 绌挎杞�1
+ ste[0]:
+ id: 1
+ ip: 10.10.10.10
port: 8888
+ rack: 0
+ slot: 0
# 鍋忕Щ閲忥紝褰撳爢鍨涙満绔欑偣鍒楀彿=1鏃讹紝鍋忕Щ閲�=2
- offset: 2
demo: false
- # 鍫嗗灈鏈哄叆搴撶珯鐐�
- crnInStn[0]:
+ # 绌挎杞﹀叆搴撶珯鐐�
+ steInStn[0]:
devpPlcId: ${wcs-slave.devp[0].id}
- staNo: 102
- row: 6
+ staNo: 100
+ row: 2
bay: 1
lev: 1
- # 鍫嗗灈鏈哄嚭搴撶珯鐐�
- crnOutStn[0]:
+ # 绌挎杞﹀嚭搴撶珯鐐�
+ steOutStn[0]:
devpPlcId: ${wcs-slave.devp[0].id}
- staNo: 103
- row: 7
- bay: 1
- lev: 1
- # 鍫嗗灈鏈�3
- crn[2]:
- id: 3
- ip: 10.10.10.16
- port: 8888
- # 鍋忕Щ閲忥紝褰撳爢鍨涙満绔欑偣鍒楀彿=1鏃讹紝鍋忕Щ閲�=2
- offset: 2
- demo: false
- # 鍫嗗灈鏈哄叆搴撶珯鐐�
- crnInStn[0]:
- devpPlcId: ${wcs-slave.devp[0].id}
- staNo: 104
- row: 10
- bay: 1
- lev: 1
- # 鍫嗗灈鏈哄嚭搴撶珯鐐�
- crnOutStn[0]:
- devpPlcId: ${wcs-slave.devp[0].id}
- staNo: 105
- row: 11
- bay: 1
- lev: 1
- # 鍫嗗灈鏈�4
- crn[3]:
- id: 4
- ip: 10.10.10.19
- port: 8888
- # 鍋忕Щ閲忥紝褰撳爢鍨涙満绔欑偣鍒楀彿=1鏃讹紝鍋忕Щ閲�=2
- offset: 2
- demo: false
- # 鍫嗗灈鏈哄叆搴撶珯鐐�
- crnInStn[0]:
- devpPlcId: ${wcs-slave.devp[0].id}
- staNo: 106
- row: 14
- bay: 1
- lev: 1
- # 鍫嗗灈鏈哄嚭搴撶珯鐐�
- crnOutStn[0]:
- devpPlcId: ${wcs-slave.devp[0].id}
- staNo: 107
- row: 15
- bay: 1
- lev: 1
- # 鍫嗗灈鏈�5
- crn[4]:
- id: 5
- ip: 10.10.10.22
- port: 8888
- # 鍋忕Щ閲忥紝褰撳爢鍨涙満绔欑偣鍒楀彿=1鏃讹紝鍋忕Щ閲�=2
- offset: 2
- demo: false
- # 鍫嗗灈鏈哄叆搴撶珯鐐�
- crnInStn[0]:
- devpPlcId: ${wcs-slave.devp[0].id}
- staNo: 108
- row: 18
- bay: 1
- lev: 1
- # 鍫嗗灈鏈哄嚭搴撶珯鐐�
- crnOutStn[0]:
- devpPlcId: ${wcs-slave.devp[0].id}
- staNo: 109
- row: 19
+ staNo: 101
+ row: 3
bay: 1
lev: 1
# 杈撻�佺嚎
@@ -194,10 +129,3 @@
port: 5005
devpPlcId: ${wcs-slave.devp[0].id}
staArr: 173
- # LED2
- led[1]:
- id: 2
- ip: 10.10.10.61
- port: 5005
- devpPlcId: ${wcs-slave.devp[0].id}
- staArr: 182
--
Gitblit v1.9.1