From 0878726a63970fe2a9b11c867a7ac78cf161b445 Mon Sep 17 00:00:00 2001
From: zjj <3272660260@qq.com>
Date: 星期二, 27 二月 2024 16:13:50 +0800
Subject: [PATCH] #
---
src/main/java/com/zy/core/thread/SiemensCrnThread.java | 176 ++++++++++++++++++++++++++++++++++++++++++++++++++--------
1 files changed, 151 insertions(+), 25 deletions(-)
diff --git a/src/main/java/com/zy/core/thread/SiemensCrnThread.java b/src/main/java/com/zy/core/thread/SiemensCrnThread.java
index ac81663..9587987 100644
--- a/src/main/java/com/zy/core/thread/SiemensCrnThread.java
+++ b/src/main/java/com/zy/core/thread/SiemensCrnThread.java
@@ -40,6 +40,10 @@
private CrnProtocol crnProtocol;
private boolean resetFlag = false;
+ public boolean isRunning = true;
+
+ public Long sign = System.currentTimeMillis();
+
/**
* 鍫嗗灈鏈烘槸鍚﹀湪鍥炲師鐐硅繍鍔ㄤ腑鏍囪
*/
@@ -53,7 +57,7 @@
@SuppressWarnings("InfiniteLoopStatement")
public void run() {
this.connect();
- while (true) {
+ while (isRunning) {
try {
int step = 1;
Task task = MessageQueue.poll(SlaveType.Crn, slave.getId());
@@ -169,13 +173,13 @@
crnProtocol.setTemp2(siemensNet.getByteTransform().TransInt16(result.Content, 22));
crnProtocol.setTemp3(siemensNet.getByteTransform().TransInt16(result.Content, 24));
crnProtocol.setTemp4(siemensNet.getByteTransform().TransInt16(result.Content, 26));
- crnProtocol.setxSpeed(siemensNet.getByteTransform().TransInt16(result.Content, 28));
- crnProtocol.setySpeed(siemensNet.getByteTransform().TransInt16(result.Content, 32));
- crnProtocol.setzSpeed(siemensNet.getByteTransform().TransInt16(result.Content, 36));
- crnProtocol.setxDistance(siemensNet.getByteTransform().TransInt16(result.Content, 40));
- crnProtocol.setyDistance(siemensNet.getByteTransform().TransInt16(result.Content, 44));
- crnProtocol.setxDuration(siemensNet.getByteTransform().TransInt16(result.Content, 48));
- crnProtocol.setyDuration(siemensNet.getByteTransform().TransInt16(result.Content, 52));
+ crnProtocol.setxSpeed(siemensNet.getByteTransform().TransSingle(result.Content, 28));
+ crnProtocol.setySpeed(siemensNet.getByteTransform().TransSingle(result.Content, 32));
+ crnProtocol.setzSpeed(siemensNet.getByteTransform().TransSingle(result.Content, 36));
+ crnProtocol.setxDistance(siemensNet.getByteTransform().TransSingle(result.Content, 40));
+ crnProtocol.setyDistance(siemensNet.getByteTransform().TransSingle(result.Content, 44));
+ crnProtocol.setxDuration(siemensNet.getByteTransform().TransSingle(result.Content, 48));
+ crnProtocol.setyDuration(siemensNet.getByteTransform().TransSingle(result.Content, 52));
OutputQueue.CRN.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛",DateUtils.convert(new Date()), slave.getId()));
@@ -231,31 +235,149 @@
*/
private boolean write(CrnCommand command) throws InterruptedException {
if (null == command) {
- News.error("SiemensCrn"+" - 6"+" - 鍫嗗灈鏈哄啓鍏ュ懡浠や负绌�");
+ News.error("鍫嗗灈鏈哄啓鍏ュ懡浠や负绌�");
return false;
+ }
+ // 鍚戝爢鍨涙満鍙戜换鍔″墠鐨勫爢鍨涙満鐘舵��
+ try{
+ OperateResultExOne<byte[]> resultRead = siemensNet.Read("DB100.0", (short) 24);
+ if (resultRead.IsSuccess) {
+ CrnCommand one = new CrnCommand();
+ one.setTaskNo(siemensNet.getByteTransform().TransInt16(resultRead.Content, 2));
+ one.setTaskMode(siemensNet.getByteTransform().TransInt16(resultRead.Content, 4));
+ one.setSourcePosX(siemensNet.getByteTransform().TransInt16(resultRead.Content, 6));
+ one.setSourcePosY(siemensNet.getByteTransform().TransInt16(resultRead.Content, 8));
+ one.setSourcePosZ(siemensNet.getByteTransform().TransInt16(resultRead.Content, 10));
+ one.setDestinationPosX(siemensNet.getByteTransform().TransInt16(resultRead.Content, 12));
+ one.setDestinationPosY(siemensNet.getByteTransform().TransInt16(resultRead.Content, 14));
+ one.setDestinationPosZ(siemensNet.getByteTransform().TransInt16(resultRead.Content, 16));
+ if (!command.getTaskNo().equals(one.getTaskNo()) || !command.getTaskMode().equals(one.getTaskMode())
+ || !command.getSourcePosX().equals(one.getSourcePosX()) || !command.getSourcePosY().equals(one.getSourcePosY())
+ || !command.getSourcePosZ().equals(one.getSourcePosZ()) || !command.getDestinationPosX().equals(one.getDestinationPosX())
+ || !command.getDestinationPosY().equals(one.getDestinationPosY()) || !command.getDestinationPosZ().equals(one.getDestinationPosZ())
+ ){
+ News.error("涓嬪彂鍓嶏細[id:{}] >>>>> 鍐欏叆[{}],===>>鍥炶[{}]", slave.getId(), JSON.toJSON(command),JSON.toJSON(one));
+ } else {
+ News.info("涓嬪彂鍓嶏細[id:{}] >>>>> 鍐欏叆[{}],===>>鍥炶[{}]", slave.getId(), JSON.toJSON(command),JSON.toJSON(one));
+ }
+ }
+ }catch (Exception e){
+ News.error("鍫嗗灈鏈哄懡浠ゅ湴鍧�鍐欏叆鍚庡洖璇诲嚭閿�");
}
// convertRow(command);
command.setCrnNo(slave.getId());
+// short[] array = new short[10];
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.getSourceStaNo();
-// array[10] = command.getDestinationStaNo();
+ 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();
+// array[10] = 0; //澶囩敤1
+
+ boolean[] array2 = new boolean[1];
+ array2[0] = command.isTraySize();
OperateResult result = siemensNet.Write("DB100.0", array);
+ OperateResult result2 = siemensNet.Write("DB100.22", array2);
+ News.info("鍫嗗灈鏈哄懡浠や笅鍙慬id:{}] >>>>> {}", slave.getId(), array);
+
+ if(!result.IsSuccess || !result2.IsSuccess){
+ News.error("鍐欏叆鍫嗗灈鏈簆lc鏁版嵁澶辫触锛岄噸鏂版坊鍔犱换鍔″埌闃熷垪 ===>> [id:{}],{}", slave.getId(), JSON.toJSON(command));
+ MessageQueue.offer(SlaveType.Crn, slave.getId(), new Task(2, command));
+ Thread.sleep(100);
+ readStatus();
+ return false;
+ }
+
+ //鍫嗗灈鏈轰换鍔″啓鍏ュ悗锛屽洖璇讳竴娆★紝鐪嬫槸鍚︽垚鍔�
+ Thread.sleep(200);
+ try{
+ OperateResultExOne<byte[]> resultRead = siemensNet.Read("DB100.0", (short) 24);
+ if (resultRead.IsSuccess) {
+ CrnCommand one = new CrnCommand();
+ one.setTaskNo(siemensNet.getByteTransform().TransInt16(resultRead.Content, 2));
+ one.setTaskMode(siemensNet.getByteTransform().TransInt16(resultRead.Content, 4));
+ one.setSourcePosX(siemensNet.getByteTransform().TransInt16(resultRead.Content, 6));
+ one.setSourcePosY(siemensNet.getByteTransform().TransInt16(resultRead.Content, 8));
+ one.setSourcePosZ(siemensNet.getByteTransform().TransInt16(resultRead.Content, 10));
+ one.setDestinationPosX(siemensNet.getByteTransform().TransInt16(resultRead.Content, 12));
+ one.setDestinationPosY(siemensNet.getByteTransform().TransInt16(resultRead.Content, 14));
+ one.setDestinationPosZ(siemensNet.getByteTransform().TransInt16(resultRead.Content, 16));
+ one.setTraySize(siemensNet.getByteTransform().TransBool(resultRead.Content, 22));
+ if (!command.getTaskNo().equals(one.getTaskNo()) || !command.getTaskMode().equals(one.getTaskMode())
+ || !command.getSourcePosX().equals(one.getSourcePosX()) || !command.getSourcePosY().equals(one.getSourcePosY())
+ || !command.getSourcePosZ().equals(one.getSourcePosZ()) || !command.getDestinationPosX().equals(one.getDestinationPosX())
+ || !command.getDestinationPosY().equals(one.getDestinationPosY()) || !command.getDestinationPosZ().equals(one.getDestinationPosZ())
+ || !command.isTraySize() == one.isTraySize()
+ ){
+ try{
+ News.error("鍫嗗灈鏈哄懡浠ゅ湴鍧�鍐欏叆鍚庡洖璇诲け璐id:{}] >>>>> 鍐欏叆[{}],===>>鍥炶[{}]", slave.getId(), JSON.toJSON(command),JSON.toJSON(one));
+ }catch (Exception e){
+ try{
+ News.error("鏃ュ織鎵撳嵃澶辫触锛�===>>鍙傛暟one鎶ラ敊 [id:{}],{}", slave.getId(), JSON.toJSON(command),JSON.toJSON(resultRead));
+ }catch (Exception e1){
+ News.error("鏃ュ織鎵撳嵃澶辫触锛�===>> [id:{}],{}", slave.getId(), JSON.toJSON(command));
+ }
+ }
+ News.error("鍫嗗灈鏈哄懡浠ゅ洖璇诲け璐ュ悗锛岄噸鏂版坊鍔犱换鍔″埌闃熷垪 ===>> [id:{}],{}", slave.getId(), JSON.toJSON(command));
+ MessageQueue.offer(SlaveType.Crn, slave.getId(), new Task(2, command));
+ Thread.sleep(100);
+ readStatus();
+ return false;
+ } else {
+ News.info("鍫嗗灈鏈哄懡浠ゅ湴鍧�鍐欏叆鍚庡洖璇绘垚鍔焄id:{}] >>>>> 鍐欏叆[{}],===>>鍥炶[{}]", slave.getId(), JSON.toJSON(command),JSON.toJSON(one));
+ }
+ }
+ }catch (Exception e){
+ News.error("鍫嗗灈鏈哄懡浠ゅ湴鍧�鍐欏叆鍚庡洖璇诲嚭閿�");
+ }
+
if (command.getAckFinish() == 0) {
- short commandFinish = 1;
- Thread.sleep(100L);
- result = siemensNet.Write("DB100.18", commandFinish);
+ if (result.IsSuccess) {
+ Thread.sleep(300);
+ //浠诲姟涓嬪彂娆℃暟
+ int writeCount2 = 0;
+
+ do {
+ writeCount2++;
+ short commandFinish = (short) 1;
+ result = siemensNet.Write("DB100.18", commandFinish);
+ if(result.IsSuccess){
+ //鍫嗗灈鏈轰换鍔″啓鍏ュ悗锛屽洖璇讳竴娆★紝鐪嬫槸鍚︽垚鍔�
+ Thread.sleep(200);
+ OperateResultExOne<byte[]> resultRead = siemensNet.Read("DB100.18", (short) 2);
+ if (resultRead.IsSuccess) {
+ commandFinish=siemensNet.getByteTransform().TransInt16(resultRead.Content, 0);
+ if (commandFinish != 1){
+ News.error("鍫嗗灈鏈轰换鍔$‘璁や綅"+commandFinish+"鍐欏叆鏁版嵁涓庡洖璇绘暟鎹笉涓�鑷达紒"+"寰幆鎵ц娆℃暟:"+writeCount2+"娆�");
+ }else{
+ //浠诲姟鍛戒护鍐欏叆鎴愬姛
+ News.info("鍫嗗灈鏈轰换鍔$‘璁や綅"+commandFinish+"鍥炶鎴愬姛锛�"+"寰幆鎵ц娆℃暟:"+writeCount2+"娆�");
+ break;
+ }
+ }else {
+ News.error("鍫嗗灈鏈轰换鍔$‘璁や綅"+commandFinish+"鍥炶澶辫触锛�"+"寰幆鎵ц娆℃暟:"+writeCount2+"娆�");
+ }
+ } else {
+ News.error("鍫嗗灈鏈轰换鍔$‘璁や綅"+commandFinish+"鍐欏叆澶辫触锛�"+"寰幆鎵ц娆℃暟:"+writeCount2+"娆�");
+ }
+ }while (writeCount2<5);
+ }
}
+
+// if (command.getAckFinish() == 0) {
+// short commandFinish = 1;
+// Thread.sleep(200L);
+// result = siemensNet.Write("DB100.18", commandFinish);
+// log.info("鍫嗗灈鏈篶ommandFinish涓嬪彂[id:{}] >>>>> {}", slave.getId(), commandFinish);
+//// result = siemensNet.Write("DB100.22", commandFinish);
+// }
try {
// 鏃ュ織璁板綍
@@ -283,16 +405,20 @@
if (result != null && result.IsSuccess) {
Thread.sleep(200);
this.readStatus();
- News.info("SiemensCrn"+" - 7"+" - 鍫嗗灈鏈哄懡浠や笅鍙慬id:{}] >>>>> {}", slave.getId(), JSON.toJSON(command));
+ News.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()));
- News.error("SiemensCrn"+" - 8"+" - 鍐欏叆鍫嗗灈鏈簆lc鏁版嵁澶辫触 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
+ News.error("鍐欏叆鍫嗗灈鏈簆lc鏁版嵁澶辫触 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
return false;
}
}
+ public void requestStop() {
+ isRunning = false;
+ }
+
@Override
public void close() {
--
Gitblit v1.9.1