From dd7c162741e0bd7d559432bd385eaf1fa85892c1 Mon Sep 17 00:00:00 2001
From: zjj <3272660260@qq.com>
Date: 星期六, 12 十月 2024 09:34:04 +0800
Subject: [PATCH] #
---
src/main/java/com/zy/core/thread/SiemensDevpThread.java | 299 ++++++++++++++++++-----------------------------------------
1 files changed, 92 insertions(+), 207 deletions(-)
diff --git a/src/main/java/com/zy/core/thread/SiemensDevpThread.java b/src/main/java/com/zy/core/thread/SiemensDevpThread.java
index eb078f2..f107d92 100644
--- a/src/main/java/com/zy/core/thread/SiemensDevpThread.java
+++ b/src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -18,6 +18,7 @@
import com.zy.core.cache.MessageQueue;
import com.zy.core.cache.OutputQueue;
import com.zy.core.cache.SlaveConnection;
+import com.zy.core.enums.DevpType.DevpWorkType;
import com.zy.core.enums.IoModeType;
import com.zy.core.enums.SlaveType;
import com.zy.core.model.DevpSlave;
@@ -28,10 +29,7 @@
import lombok.extern.slf4j.Slf4j;
import java.text.MessageFormat;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
/**
@@ -51,23 +49,7 @@
//
// }};
public static final ArrayList<Integer> staNos1 = new ArrayList<Integer>() {{
- add(100);add(101);add(102);add(103);
- add(104);add(105);add(106);add(107);
- add(108);add(109);add(110);add(111);
- add(112);add(113);add(114);add(115);
- add(116);add(117);add(118);add(119);
- add(120);add(121);add(122);add(123);
- add(124);add(125);add(126);add(127);
- add(128);add(129);add(130);add(131);
- add(132);add(133);add(134);add(135);
- add(136);add(137);add(138);add(139);
- add(140);add(141);add(142);add(143);
- add(144);add(145);add(146);add(147);
- add(148);add(149);add(150);add(151);
- add(152);add(153);add(154);add(155);
- add(156);add(157);add(158);add(159);
- add(160);add(161);
- add(1);
+ add(140);add(141);
// add(200);add(201);add(202);
}};
@@ -132,7 +114,7 @@
break;
// 鍐欐暟鎹� ID+鐩爣绔�
case 2:
- write((StaProtocol)task.getData());
+ writeD((StaProtocol)task.getData(),1);
log.error("杈撻�佺嚎涓嬪彂鍛戒护锛�"+((StaProtocol) task.getData()).getWorkNo()+","+((StaProtocol) task.getData()).getStaNo());
break;
default:
@@ -153,29 +135,32 @@
private void initSite() {
count ++;
ArrayList<Integer> staNos = getStaNo();
- if(count > 77) {
- // 绔欑偣缂栧彿
- for (Integer siteId : staNos) {
- StaProtocol staProtocol = station.get(siteId);
- if (null == staProtocol) {
- staProtocol = new StaProtocol();
- staProtocol.setSiteId(siteId);
- station.put(siteId, staProtocol);
- }
- staProtocol.setWorkNo(0); // ID
- staProtocol.setAutoing(false); // 鑷姩
- staProtocol.setLoading(false); // 鏈夌墿
- staProtocol.setInEnable(false); // 鍙叆
- staProtocol.setOutEnable(false); // 鍙嚭
- staProtocol.setEmptyMk(false); // 绌烘澘淇″彿
- staProtocol.setStaNo((short) 0); // 鐩爣绔�
- if (!staProtocol.isPakMk() && !staProtocol.isLoading()) {
- staProtocol.setPakMk(true);
- }
+ // 绔欑偣缂栧彿
+ for (Integer siteId : staNos) {
+ StaProtocol staProtocol = station.get(siteId);
+ if (null == staProtocol) {
+ staProtocol = new StaProtocol();
+ staProtocol.setSiteId(siteId);
+ station.put(siteId, staProtocol);
}
- count = 0;
+ staProtocol.setWorkNo(0); // 宸ヤ綔鍙�
+ staProtocol.setStaNo((short) 0); // 鐩爣绔�
+ staProtocol.setState((short) 0); // 妯″紡鐘舵�� 0鍋滄満锛�=1鎵嬪姩锛�=2鑷姩锛�=3鏁呴殰
+ staProtocol.setWorkIo((short) 0);
+ staProtocol.setRequestIo((short) 0);
+ staProtocol.setTrayIo((short) 0);
+ staProtocol.setLocIo((short) 0);
+ staProtocol.setBarcode("-");
+ staProtocol.setWeightIo(0.0);
+ staProtocol.setMode((short) 0);
+
+ if (!staProtocol.isPakMk() && staProtocol.workType == DevpWorkType.IDLE) {
+ staProtocol.setPakMk(true);
+ }
}
+ count = 0;
+
}
@Override
@@ -206,7 +191,7 @@
// updateIoMode();
ArrayList<Integer> staNos = getStaNo();
int staNoSize = staNos.size();
- OperateResultExOne<byte[]> result = siemensS7Net.Read("DB101.0", (short) (staNoSize*8));
+ OperateResultExOne<byte[]> result = siemensS7Net.Read("DB100.0", (short) (staNoSize*66));
if (result.IsSuccess) {
for (int i = 0; i < staNoSize; i++) {
Integer siteId = staNos.get(i); // 绔欑偣缂栧彿
@@ -216,174 +201,25 @@
staProtocol.setSiteId(siteId);
station.put(siteId, staProtocol);
}
- staProtocol.setWorkNo(siemensS7Net.getByteTransform().TransInt32(result.Content, i*8)); // 宸ヤ綔鍙�
+ staProtocol.setWorkNo(siemensS7Net.getByteTransform().TransInt32(result.Content, i*66 + 8)); // 宸ヤ綔鍙�
+ staProtocol.setStaNo(siemensS7Net.getByteTransform().TransInt16(result.Content, i*66 + 12)); // 鐩爣绔�
+ staProtocol.setState(siemensS7Net.getByteTransform().TransInt16(result.Content, i*66 + 14)); // 妯″紡鐘舵�� 0鍋滄満锛�=1鎵嬪姩锛�=2鑷姩锛�=3鏁呴殰
+ staProtocol.setWorkIo(siemensS7Net.getByteTransform().TransInt16(result.Content, i*66 + 16));
+ staProtocol.setRequestIo(siemensS7Net.getByteTransform().TransInt16(result.Content, i*66 + 18));
+ staProtocol.setTrayIo(siemensS7Net.getByteTransform().TransInt16(result.Content, i*66 + 20));
+ staProtocol.setLocIo(siemensS7Net.getByteTransform().TransInt16(result.Content, i*66 + 22));
+ staProtocol.setBarcode(siemensS7Net.getByteTransform().TransString(result.Content,i*66 + 24,16, "UTF-8"));
+// staProtocol.setWeightIo(siemensS7Net.getByteTransform().TransDouble(result.Content,i*66 + 40));
+ staProtocol.setMode(siemensS7Net.getByteTransform().TransInt16(result.Content, i*66 + 44));
- staProtocol.setStaNo(siemensS7Net.getByteTransform().TransInt16(result.Content, i*8 + 4)); // 鐩爣绔�
-
- boolean[] status = siemensS7Net.getByteTransform().TransBool(result.Content, i*8 + 6, 2);
- staProtocol.setAutoing(status[0]); // 鑷姩
- staProtocol.setLoading(status[1]); // 鏈夌墿
- staProtocol.setInEnable(status[2]); // 鍙叆
- staProtocol.setOutEnable(status[3]);// 鍙嚭
- staProtocol.setEmptyMk(status[4]); // 绌烘澘淇″彿
- staProtocol.setFullPlt(status[5]); // 婊℃墭鐩�
- staProtocol.setHigh(status[6]); // 楂樺簱浣�
- staProtocol.setLow(status[7]); // 浣庡簱浣�
-
- if (!staProtocol.isPakMk() && !staProtocol.isLoading()) {
+ if (!staProtocol.isPakMk() && staProtocol.workType == DevpWorkType.IDLE) {
staProtocol.setPakMk(true);
}
}
}
- BasRgvMapService basRgvMapService = SpringUtils.getBean(BasRgvMapService.class);
- //RGV灏忚溅1
-// Thread.sleep(100);
- OperateResultExOne<byte[]> result3 = siemensS7Net.Read("DB50.200",(short)10);
- if (result3.IsSuccess) {
- BasRgvMap basRgvMap = basRgvMapService.selectByRgvNo((int) siemensS7Net.getByteTransform().TransInt16(result3.Content, 0));
- if (!Cools.isEmpty(basRgvMap)){
- Integer siteId = 1;
- StaProtocol staProtocol = station.get(siteId);
- if (null == staProtocol) {
- staProtocol = new StaProtocol();
- staProtocol.setSiteId(siteId);
- station.put(siteId, staProtocol);
- }
- staProtocol.setAutoing(true);
- staProtocol.setNearbySta(String.valueOf(siemensS7Net.getByteTransform().TransInt16(result3.Content, 8)));
- }
- }
- //RGV灏忚溅2
-// Thread.sleep(100);
- OperateResultExOne<byte[]> result4 = siemensS7Net.Read("DB50.212",(short)10);
- if (result4.IsSuccess) {
- BasRgvMap basRgvMap = basRgvMapService.selectByRgvNo((int) siemensS7Net.getByteTransform().TransInt16(result4.Content, 0));
- if (!Cools.isEmpty(basRgvMap)){
- Integer siteId = 2;
- StaProtocol staProtocol = station.get(siteId);
- if (null == staProtocol) {
- staProtocol = new StaProtocol();
- staProtocol.setSiteId(siteId);
- station.put(siteId, staProtocol);
- }
- staProtocol.setAutoing(true);
- staProtocol.setNearbySta(String.valueOf(siemensS7Net.getByteTransform().TransInt16(result4.Content, 8)));
- }
- }
-
- //RGV灏忚溅3
-// Thread.sleep(100);
- OperateResultExOne<byte[]> result5 = siemensS7Net.Read("DB50.224",(short)10);
- if (result5.IsSuccess) {
- BasRgvMap basRgvMap = basRgvMapService.selectByRgvNo((int) siemensS7Net.getByteTransform().TransInt16(result5.Content, 0));
- if (!Cools.isEmpty(basRgvMap)){
- Integer siteId = 3;
- StaProtocol staProtocol = station.get(siteId);
- if (null == staProtocol) {
- staProtocol = new StaProtocol();
- staProtocol.setSiteId(siteId);
- station.put(siteId, staProtocol);
- }
- staProtocol.setAutoing(true);
- staProtocol.setNearbySta(String.valueOf(siemensS7Net.getByteTransform().TransInt16(result5.Content, 8)));
- }
- }
-
- //鏉$爜鎵弿鍣�
- ArrayList<Integer> barcodeList = BarcodeList;
- OperateResultExOne<byte[]> result2 = siemensS7Net.Read("DB101.840", (short) (barcodeList.size() * 8));
- if (result2.IsSuccess) {
- for (int i = 0; i < barcodeList.size(); i++) {
- Integer barcodeId = barcodeList.get(i);
- String barcode = siemensS7Net.getByteTransform().TransString(result2.Content,i*8,8, "UTF-8");
- BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, barcodeId + 1);
- if(!Cools.isEmpty(barcodeThread) && !barcodeThread.getBarcode().equals(barcode)) {
- barcodeThread.setBarcode(barcode);
- }
- }
- }
- //鏉$爜鎵弿鍣�
- ArrayList<Integer> barcodeListMat = BarcodeListMat;
- OperateResultExOne<byte[]> result2Mat = siemensS7Net.Read("DB103.0", (short) (barcodeListMat.size() * 30));
- if (result2Mat.IsSuccess) {
- for (int i = 0; i < barcodeListMat.size(); i++) {
- Integer barcodeId = barcodeListMat.get(i);
- String barcode = siemensS7Net.getByteTransform().TransString(result2Mat.Content,i*30,30, "UTF-8");
- BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, barcodeId + 1);
- if(!Cools.isEmpty(barcodeThread) && !barcodeThread.getBarcode().equals(barcode)) {
- barcodeThread.setBarcode(barcode);
- }
- }
- }
- //澶栧舰妫�娴�
- ArrayList<Integer> staNoErrs = staNosErrList;
- int staNoErrsSize = staNoErrs.size();
- OperateResultExOne<byte[]> resultErr = siemensS7Net.Read("DB101.800", (short) (staNoErrsSize*8));
- if (resultErr.IsSuccess){
- for (int i = 0;i<3;i++){
- Integer siteId = staNoErrs.get(i); // 绔欑偣缂栧彿
- boolean[] status = siemensS7Net.getByteTransform().TransBool(resultErr.Content, i*4+2, 1);
- StaProtocol staProtocol = station.get(siteId);
- staProtocol.setFrontErr(status[0]);
- staProtocol.setBackErr(status[1]);
- staProtocol.setHighErr(status[2]);
- staProtocol.setLeftErr(status[3]);
- staProtocol.setRightErr(status[4]);
- staProtocol.setWeightErr(status[5]);
- staProtocol.setBarcodeErr(status[6]);
- }
- }
-
- OperateResultExOne<byte[]> resultErr2 = siemensS7Net.Read("DB13.2", (short) (staNoSize*4));
- if (resultErr2.IsSuccess) {
- for (int i = 0; i < staNoSize; i++) {
- Integer siteId = staNos.get(i); // 绔欑偣缂栧彿
- boolean[] status = siemensS7Net.getByteTransform().TransBool(resultErr2.Content, i*4, 1);
- StaProtocol staProtocol = station.get(siteId);
- staProtocol.setBreakerErr(status[0]);
- staProtocol.setInfraredErr(status[1]);
- staProtocol.setOutTimeErr(status[2]);
- staProtocol.setSeizeSeatErr(status[3]);
- staProtocol.setWrkYgoodsN(status[4]);
- staProtocol.setInverterErr(status[5]);
- staProtocol.setContactErr(status[6]);
- staProtocol.setUpcontactErr(status[7]);
-
- }
- }
- OperateResultExOne<byte[]> resultErr3 = siemensS7Net.Read("DB13.400", (short) 3);
- if (resultErr3.IsSuccess) {
- if (staError1 == null){
- staError1 = new StaError1();
- }
- boolean[] status = siemensS7Net.getByteTransform().TransBool(resultErr3.Content, 0, 3);
- staError1.setEMERGENCY_Stop_Core(status[0]);
- staError1.setEMERGENCY_STOP1(status[1]);
- staError1.setEMERGENCY_STOP2(status[2]);
- staError1.setEMERGENCY_STOP3(status[3]);
- staError1.setEMERGENCY_STOP4(status[4]);
-
- staError1.setDoor_EMERGENCY_STOP1(status[5]);
- staError1.setDoor_EMERGENCY_STOP2(status[6]);
- staError1.setDoor_EMERGENCY_STOP3(status[7]);
- staError1.setDoor_EMERGENCY_STOP4(status[8]);
- staError1.setDoor_EMERGENCY_STOP5(status[9]);
- staError1.setDoor_EMERGENCY_STOP6(status[10]);
-
- staError1.setDoor_Open_Err1(status[11]);
- staError1.setDoor_Open_Err1(status[12]);
- staError1.setDoor_Open_Err1(status[13]);
- staError1.setDoor_Open_Err1(status[14]);
- staError1.setDoor_Open_Err1(status[15]);
- staError1.setDoor_Open_Err1(status[16]);
-
- }
-
if (result.IsSuccess) {
-
OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛",DateUtils.convert(new Date()), slave.getId()));
-
// 鏍规嵁瀹炴椂淇℃伅鏇存柊鏁版嵁搴�
try {
List<BasDevp> basDevps = new ArrayList<>();
@@ -391,7 +227,6 @@
StaProtocol staProtocol = station.get(siteId);
basDevps.add(staProtocol.toSqlModel());
}
-
BasDevpService basDevpService = SpringUtils.getBean(BasDevpService.class);
if (null != basDevpService && !basDevpService.updateBatchById(basDevps)) {
throw new Exception("鏇存柊鏁版嵁搴撴暟鎹け璐�");
@@ -420,14 +255,14 @@
int index = staNos.indexOf(staProtocol.getSiteId());
OperateResult write = null;
OperateResult write1 = null;
+ OperateResult write2 = null;
//浠诲姟涓嬪彂娆℃暟
int writeCount = 0;
do {
- write = siemensS7Net.Write("DB100." + index*6, staProtocol.getWorkNo()); // 宸ヤ綔鍙�
+ write = siemensS7Net.Write("DB100." + index*66, staProtocol.getWorkNo()); // 宸ヤ綔鍙�
Thread.sleep(200);
- write1 = siemensS7Net.Write("DB100." + (index*6+4), staProtocol.getStaNo().shortValue()); // 鐩爣绔�
+ write1 = siemensS7Net.Write("DB100." + (index*66+4), staProtocol.getStaNo()); // 鐩爣绔�
if(write.IsSuccess && write1.IsSuccess){
- log.error("鍐欏叆杈撻�佺嚎鍛戒护鎴愬姛銆傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={},鍐欏叆娆℃暟={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
break;
}
else {
@@ -449,6 +284,56 @@
}
}
+ private void writeD(StaProtocol staProtocol,Integer count)throws InterruptedException{
+ if (null == staProtocol) {
+ return;
+ }
+ Integer oriWrkNo = staProtocol.getWorkNo();
+ short oriStaNo = staProtocol.getStaNo();
+
+ ArrayList<Integer> staNos = getStaNo();
+ int index = staNos.indexOf(staProtocol.getSiteId());
+
+ OperateResult write1 = siemensS7Net.Write("DB100." + index*66, staProtocol.getWorkNo()); // 宸ヤ綔鍙�
+ Thread.sleep(200);
+ OperateResult write2 = siemensS7Net.Write("DB100." + (index*66+4), staProtocol.getStaNo()); // 鐩爣绔�
+ if(write1.IsSuccess && write2.IsSuccess){
+ OperateResultExOne<byte[]> result = siemensS7Net.Read("DB100."+(index*66), (short) 6);
+ Integer wrkNo = siemensS7Net.getByteTransform().TransInt32(result.Content, 0);
+ short staNo = siemensS7Net.getByteTransform().TransInt16(result.Content, 4);
+ if (!oriWrkNo.equals(wrkNo) || oriStaNo != staNo){
+ if (count >= 5){
+ log.error("鍐欏叆杈撻�佺嚎鍛戒护澶辫触銆傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={},鍐欏叆娆℃暟={}", slave.getId(), JSON.toJSON(staProtocol), count);
+ return;
+ }
+ count++;
+ writeD(staProtocol,count);
+ }
+ int whileCount = 0;
+ OperateResult write3 = siemensS7Net.Write("DB100." + (index*66+6), (short) 1);
+ if (write3.IsSuccess){
+ Thread.sleep(200);
+ do {
+ OperateResultExOne<byte[]> result2 = siemensS7Net.Read("DB100."+(index*66 +6), (short) 2);
+ short mk = siemensS7Net.getByteTransform().TransInt16(result2.Content, 0);
+ if (mk == 2){
+ OperateResult write4 = siemensS7Net.Write("DB100." + (index*66+6), 0);
+ if (write4.IsSuccess){
+ OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆� 杈撻�佺嚎鍛戒护涓嬪彂 [id:{1}] >>>>> {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(staProtocol)));
+ News.info("SiemensDevp"+" - 5"+" - 杈撻�佺嚎鍛戒护涓嬪彂 [id:{}] >>>>> 鍛戒护涓嬪彂锛� {}", slave.getId(), JSON.toJSON(staProtocol));
+ break;
+ }
+ }else {
+ whileCount++;
+ }
+ }while (whileCount <5);
+ }
+ }
+
+
+
+ }
+
// 鏇存柊鍏ュ嚭搴撴ā寮�
private void updateIoMode() throws InterruptedException {
if (this.ioModeOf2F != IoModeType.NONE) {
--
Gitblit v1.9.1