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