From a1e94379b115721b2e604070dc48063b8016f72f Mon Sep 17 00:00:00 2001
From: pang.jiabao <pang_jiabao@163.com>
Date: 星期二, 21 十月 2025 19:32:59 +0800
Subject: [PATCH] 侧面输送线出库码盘信息对接
---
src/main/java/com/zy/core/thread/SiemensDevpThread.java | 900 ++++++++++++++++++++++++++++++++++++++++++++++++++---------
1 files changed, 756 insertions(+), 144 deletions(-)
diff --git a/src/main/java/com/zy/core/thread/SiemensDevpThread.java b/src/main/java/com/zy/core/thread/SiemensDevpThread.java
index f6387cb..baec76c 100644
--- a/src/main/java/com/zy/core/thread/SiemensDevpThread.java
+++ b/src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -8,13 +8,11 @@
import com.core.common.Cools;
import com.core.common.DateUtils;
import com.core.common.SpringUtils;
-import com.google.common.base.Utf8;
-import com.sun.xml.internal.bind.v2.runtime.output.Encoded;
+import com.core.exception.CoolException;
import com.zy.asrs.entity.BasDevp;
import com.zy.asrs.service.BasDevpService;
-import com.zy.asrs.service.WrkMastService;
+import com.zy.asrs.service.DeviceErrorService;
import com.zy.core.DevpThread;
-import com.zy.core.Slave;
import com.zy.core.cache.MessageQueue;
import com.zy.core.cache.OutputQueue;
import com.zy.core.cache.SlaveConnection;
@@ -23,16 +21,13 @@
import com.zy.core.model.DevpSlave;
import com.zy.core.model.Task;
import com.zy.core.model.protocol.StaProtocol;
-import com.zy.core.properties.SlaveProperties;
import lombok.Data;
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;
+import java.util.stream.Collectors;
/**
* 杈撻�佺嚎绾跨▼
@@ -42,26 +37,105 @@
@Slf4j
public class SiemensDevpThread implements Runnable, DevpThread {
+ public static final ArrayList<Integer> staNos1 = new ArrayList<Integer>() {{
+ 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); // 渚ч潰浠� index 16寮�濮� 闀垮害12
+ add(201);
+ add(202);
+ add(203);
+ add(204);
+ add(205);
+ add(206);
+ add(207);
+ add(208);
+ add(209);
+ add(210);
+ add(211);
+ add(212);
+ }};
+
+ public static final ArrayList<Integer> staNos2 = new ArrayList<Integer>() {{
+ add(301);
+ add(302);
+ add(303);
+ add(304);
+ add(305);
+ add(306);
+ add(307);
+ add(308);
+ }};
+
+ // 姝i潰5涓潯鐮佹壂鎻忕珯
+ public static final ArrayList<Integer> barcodeSite2 = new ArrayList<Integer>() {{
+ add(102);
+ add(105);
+ add(108);
+ add(111);
+ add(114);
+ }};
+
+ // 渚ч潰涓変釜鏉$爜鎵弿绔�
+ public static final ArrayList<Integer> barcodeSite = new ArrayList<Integer>() {{
+ add(202);
+ add(206);
+ add(211);
+ }};
+
+ /**
+ * 鍏ュ嚭搴撴ā寮�
+ * 0锛氭湭鐭�
+ * 1锛氬叆搴撳惎鍔ㄤ腑
+ * 2.鍏ュ簱妯″紡
+ * 3.鍑哄簱鍚姩涓� 锛堜笉鑳界敓鎴愬叆搴撳伐浣滄。锛�
+ * 4.鍑哄簱妯″紡
+ */
+ public IoModeType ioModeOf1F1 = IoModeType.NONE;
+ public IoModeType ioModeOf1F2 = IoModeType.NONE;
+ public IoModeType ioModeOf1F3 = IoModeType.NONE;
+ public IoModeType ioModeOf1F4 = IoModeType.NONE;
+ public IoModeType ioModeOf1F5 = IoModeType.NONE;
+
+ public IoModeType ioModeOf2F1 = IoModeType.NONE;
+ public IoModeType ioModeOf2F2 = IoModeType.NONE;
+ public IoModeType ioModeOf2F3 = IoModeType.NONE;
+
private DevpSlave slave;
private SiemensS7Net siemensS7Net;
private Map<Integer, StaProtocol> station = new ConcurrentHashMap<>();
- private short heartBeatVal = 1;
- public static final ArrayList<Integer> staNos = new ArrayList<Integer>() {{
- 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);
- }};
- public IoModeType ioMode = IoModeType.NONE;
/**
- * 182绔欏爢鍨涙満鎵ц涓嚭搴撴暟閲�
+ * 鏉$爜鏁伴噺
*/
- public int PRE_COUNT=0;
- private SlaveProperties slaveProperties;
+ private int barcodeSize = 8;
public SiemensDevpThread(DevpSlave slave) {
this.slave = slave;
+ }
+
+
+ private ArrayList<Integer> getStaNo() {
+ switch (slave.getId()) {
+ case 1:
+ return staNos1;
+ case 2:
+ return staNos2;
+ default:
+ throw new CoolException("鏈嶅姟鍣ㄥ紓甯�");
+ }
}
@Override
@@ -82,13 +156,17 @@
break;
// 鍐欐暟鎹� ID+鐩爣绔�
case 2:
- write((StaProtocol)task.getData());
+ write((StaProtocol) task.getData());
+ read();
+ break;
+ // 鍑哄叆搴撳啓鐮佺洏淇℃伅
+ case 3:
+ write3((StaProtocol) task.getData());
+ read();
break;
default:
break;
}
- // 蹇冭烦
-// heartbeat();
Thread.sleep(400);
} catch (Exception e) {
e.printStackTrace();
@@ -97,6 +175,34 @@
}
}
+ /**
+ * 鍒濆鍖栫珯鐐圭姸鎬�
+ */
+ private void initSite() {
+ ArrayList<Integer> staNos = getStaNo();
+ // 绔欑偣缂栧彿
+ for (Integer siteId : staNos) {
+ StaProtocol staProtocol = station.get(siteId);
+ if (null == staProtocol) {
+ staProtocol = new StaProtocol();
+ staProtocol.setSiteId(siteId);
+ station.put(siteId, staProtocol);
+ }
+ staProtocol.setWorkNo((short) 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);
+ }
+ }
+ }
+
+
@Override
public boolean connect() {
boolean result = false;
@@ -104,13 +210,16 @@
siemensS7Net.setRack(slave.getRack().byteValue());
siemensS7Net.setSlot(slave.getSlot().byteValue());
OperateResult connect = siemensS7Net.ConnectServer();
- if(connect.IsSuccess){
+ if (connect.IsSuccess) {
result = true;
- OutputQueue.DEVP.offer(MessageFormat.format( "銆恵0}銆戣緭閫佺嚎plc杩炴帴鎴愬姛 ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()));
+ OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戣緭閫佺嚎plc杩炴帴鎴愬姛 ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()));
log.info("杈撻�佺嚎plc杩炴帴鎴愬姛 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
} else {
- OutputQueue.DEVP.offer(MessageFormat.format( "銆恵0}銆戣緭閫佺嚎plc杩炴帴澶辫触锛侊紒锛� ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()));
+ OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戣緭閫佺嚎plc杩炴帴澶辫触锛侊紒锛� ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()));
log.error("杈撻�佺嚎plc杩炴帴澶辫触锛侊紒锛� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
+// DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
+// deviceErrorService.addDeviceError("devp", slave.getId(), "杈撻�佺嚎plc杩炴帴澶辫触");
+ initSite();
}
siemensS7Net.ConnectClose();
return result;
@@ -120,82 +229,273 @@
* 璇诲彇鐘舵�� ====> 鏁村潡plc
*/
private void read() throws InterruptedException {
-// // 鏇存柊鍏ュ嚭搴撴ā寮�
-// updateIoMode();
+ // 鏇存柊鍏ュ嚭搴撴ā寮�
+ updateIoMode();
+
+ ArrayList<Integer> staNos = getStaNo();
int staNoSize = staNos.size();
- OperateResultExOne<byte[]> result = siemensS7Net.Read("DB100.0", (short) (staNoSize*4));
- if (result.IsSuccess) {
- for (int i = 0; i < staNoSize; i++) {
- Integer siteId = staNos.get(i); // 绔欑偣缂栧彿
- StaProtocol staProtocol = station.get(siteId);
- if (null == staProtocol) {
- staProtocol = new StaProtocol();
- staProtocol.setSiteId(siteId);
- station.put(siteId, staProtocol);
- }
- staProtocol.setWorkNo(siemensS7Net.getByteTransform().TransInt16(result.Content, i*4)); // 宸ヤ綔鍙�
+ OperateResultExOne<byte[]> result;
+ if (slave.getId() == 1) {
+ // 璇绘闈㈣揣浣嶄俊鎭弽棣�
+ result = siemensS7Net.Read("DB101.0", (short) (16 * 8));
+ if (result.IsSuccess) {
+ for (int i = 0; i < 16; i++) {
+ Integer siteId = staNos.get(i); // 绔欑偣缂栧彿
+ StaProtocol staProtocol = station.get(siteId);
+ if (null == staProtocol) {
+ staProtocol = new StaProtocol();
+ staProtocol.setSiteId(siteId);
+ station.put(siteId, staProtocol);
+ }
+ staProtocol.setWorkNo((short) siemensS7Net.getByteTransform().TransInt32(result.Content, i * 8)); // 宸ヤ綔鍙�
- staProtocol.setStaNo(siemensS7Net.getByteTransform().TransInt16(result.Content, i*4 + 2)); // 鐩爣绔�
+ 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()) {
+ staProtocol.setPakMk(true);
+ }
+ }
}
- }
-// Thread.sleep(200);
-// OperateResultExOne<byte[]> result0 = siemensS7Net.Read("DB101.0", (short) 186);
-// if (result0.IsSuccess) {
-// for (int i = 0; i < 93; i++) {
-// Integer siteId = staNos.get(i); // 绔欑偣缂栧彿
-// StaProtocol staProtocol = station.get(siteId);
-// if (null == staProtocol) {
-// staProtocol = new StaProtocol();
-// staProtocol.setSiteId(siteId);
-// station.put(siteId, staProtocol);
+ // 璇讳晶闈㈣揣浣嶄俊鎭弽棣�
+ OperateResultExOne<byte[]> resultCm = siemensS7Net.Read("DB101.800", (short) (12 * 8));
+ if (resultCm.IsSuccess) {
+ for (int i = 16; i < staNoSize; i++) {
+ Integer siteId = staNos.get(i); // 绔欑偣缂栧彿
+ StaProtocol staProtocol = station.get(siteId);
+ if (null == staProtocol) {
+ staProtocol = new StaProtocol();
+ staProtocol.setSiteId(siteId);
+ station.put(siteId, staProtocol);
+ }
+ staProtocol.setWorkNo((short) siemensS7Net.getByteTransform().TransInt32(resultCm.Content, (i - 16) * 8)); // 宸ヤ綔鍙�
+
+ staProtocol.setStaNo(siemensS7Net.getByteTransform().TransInt16(resultCm.Content, (i - 16) * 8 + 4)); // 鐩爣绔�
+
+ boolean[] status = siemensS7Net.getByteTransform().TransBool(resultCm.Content, (i - 16) * 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()) {
+ staProtocol.setPakMk(true);
+ }
+ }
+ }
+
+ // 璇诲彇姝i潰鏉$爜
+ OperateResultExOne<byte[]> result3 = siemensS7Net.Read("DB103.0", (short) (5 * 40));
+ if (result3.IsSuccess) {
+ for (int i = 0; i < 5; i++) {
+ String barcode = siemensS7Net.getByteTransform().TransString(result3.Content, i * 40, 40, "UTF-8");
+ if (!Cools.isEmpty()) {
+ barcode = barcode.trim();
+ }
+ List<String> barcodeList = Arrays.stream(barcode.split(";")).collect(Collectors.toList());
+ Iterator<String> iterator = barcodeList.iterator();
+ while (iterator.hasNext()) {
+ String next = iterator.next();
+ if (next.length() == 6) {
+ barcode = next;
+ iterator.remove();
+ break;
+ }
+ }
+
+ BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, i + 1);
+ if (!Cools.isEmpty(barcodeThread) && !barcodeThread.getBarcode().equals(barcode)) {
+ barcodeThread.setBarcode(barcode);
+ }
+ StaProtocol staProtocol = station.get(barcodeSite2.get(i));
+ if (staProtocol != null) {
+ while (iterator.hasNext()) {
+ String next = iterator.next();
+ if (next.length() < 7 || next.length() > 10 || !next.matches("[0-9]*")) {
+ iterator.remove();
+ }
+ }
+ staProtocol.setMatIdList(barcodeList);
+ }
+ }
+ }
+
+ // 璇诲彇姝i潰鏉$爜
+// OperateResultExOne<byte[]> result2 = siemensS7Net.Read("DB101.1404", (short) (16 * 8));
+// if (result2.IsSuccess) {
+// for (int i = 0; i < 16; i++) {
+// int barcodeId = 0;
+// switch (i) {
+// case 1:
+// barcodeId = 1;
+// break;
+// case 4:
+// barcodeId = 2;
+// break;
+// case 7:
+// barcodeId = 3;
+// break;
+// case 10:
+// barcodeId = 4;
+// break;
+// case 13:
+// barcodeId = 5;
+// break;
+// default:
+// }
+// if (barcodeId != 0) {
+// String barcode = siemensS7Net.getByteTransform().TransString(result2.Content, i * 8, 6, "UTF-8");
+// BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, barcodeId);
+// if (!Cools.isEmpty(barcodeThread) && !barcodeThread.getBarcode().equals(barcode)) {
+// barcodeThread.setBarcode(barcode);
+// }
+// }
// }
-// staProtocol.setStaNo(siemensS7Net.getByteTransform().TransInt16(result0.Content, i*2)); // 鐩爣绔�
// }
-// }
- Thread.sleep(200);
- OperateResultExOne<byte[]> result1 = siemensS7Net.Read("DB150.0", (short) (staNoSize*2));
- if (result1.IsSuccess) {
- for (int i = 0; i < staNoSize; i++) {
- Integer siteId = staNos.get(i); // 绔欑偣缂栧彿
- boolean[] status = siemensS7Net.getByteTransform().TransBool(result1.Content, i*2, 1);
- StaProtocol staProtocol = station.get(siteId);
- 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()) {
- staProtocol.setPakMk(true);
+ // 璇诲彇渚ч潰鏉$爜
+ OperateResultExOne<byte[]> resultCM2 = siemensS7Net.Read("DB101.2574", (short) (3 * 4 * 6));
+ if (resultCM2.IsSuccess) {
+ for (int i = 8; i >= 6; i--) {
+ BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, i);
+ List<String> barcodes = new ArrayList<>();
+ for (int j = 0; j < 4; j++) {
+ String barcode1 = siemensS7Net.getByteTransform().TransString(resultCM2.Content, (8 - i) * 24 + j * 6, 6, "UTF-8");
+ if (!Cools.isEmpty(barcode1) && !barcode1.equals("000000") && !barcode1.equals("NoRead")) {
+ barcodes.add(barcode1);
+ }
+ }
+ String barcode = String.join("#", barcodes);
+ if (!Cools.isEmpty(barcodeThread) && !barcodeThread.getBarcode().equals(barcode)) {
+ barcodeThread.setBarcode(barcode);
+ }
+ }
+ }
+
+ // 璇诲彇姝i潰澶栧舰妫�娴�
+ OperateResultExOne<byte[]> resultErr1 = siemensS7Net.Read("DB101.936", (short) (16 * 8));
+ if (resultErr1.IsSuccess) {
+ for (int i = 0; i < 16; i++) {
+ Integer siteId = staNos.get(i); // 绔欑偣缂栧彿
+ StaProtocol staProtocol = station.get(siteId);
+ boolean[] status1 = siemensS7Net.getByteTransform().TransBool(resultErr1.Content, i * 2, 1);
+ staProtocol.setFrontErr(status1[0]);
+ staProtocol.setBackErr(status1[1]);
+ staProtocol.setHighErr(status1[2]);
+ staProtocol.setLeftErr(status1[3]);
+ staProtocol.setRightErr(status1[4]);
+ staProtocol.setWeightErr(status1[5]);
+ staProtocol.setBarcodeErr(status1[6]);
+ }
+ }
+
+ // 璇诲彇渚ч潰澶栧舰妫�娴�
+ OperateResultExOne<byte[]> resultErrCM1 = siemensS7Net.Read("DB101.1336", (short) (12 * 8));
+ if (resultErrCM1.IsSuccess) {
+ for (int i = 16; i < staNoSize; i++) {
+ Integer siteId = staNos.get(i); // 绔欑偣缂栧彿
+ StaProtocol staProtocol = station.get(siteId);
+ boolean[] status1 = siemensS7Net.getByteTransform().TransBool(resultErrCM1.Content, (i - 16) * 2, 1);
+ staProtocol.setFrontErr(status1[0]);
+ staProtocol.setBackErr(status1[1]);
+ staProtocol.setHighErr(status1[2]);
+ staProtocol.setLeftErr(status1[3]);
+ staProtocol.setRightErr(status1[4]);
+ staProtocol.setWeightErr(status1[5]);
+ staProtocol.setBarcodeErr(status1[6]);
+ }
+ }
+
+ // 璇绘闈㈡晠闅滃弽棣�
+ OperateResultExOne<byte[]> resultErr = siemensS7Net.Read("DB101.2340.0", (short) (16 * 2));
+ if (resultErr.IsSuccess) {
+ for (int i = 0; i < 16; i++) {
+ Integer siteId = staNos.get(i); // 绔欑偣缂栧彿
+ boolean[] status = siemensS7Net.getByteTransform().TransBool(resultErr.Content, i * 2, 2);
+ 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]);
+ staProtocol.setPushTheEnvelopeErr(status[8]);
+ staProtocol.setRaiseTheLowerLimitErr(status[9]);
+ staProtocol.setLeftProtectionTriggersErr(status[10]);
+ staProtocol.setRightProtectionTriggersErr(status[11]);
+ staProtocol.setGratingBlockingErr(status[12]);
+ }
+ }
+
+ // 璇讳晶闈㈡晠闅滃弽棣�
+ OperateResultExOne<byte[]> resultErrCM = siemensS7Net.Read("DB101.2540.0", (short) (12 * 2));
+ if (resultErrCM.IsSuccess) {
+ for (int i = 16; i < staNoSize; i++) {
+ Integer siteId = staNos.get(i); // 绔欑偣缂栧彿
+ boolean[] status = siemensS7Net.getByteTransform().TransBool(resultErrCM.Content, (i - 16) * 2, 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]);
+
+ }
+ }
+ } else {
+ // 璇诲缃緭閫佺嚎璐т綅淇℃伅鍙嶉
+ result = siemensS7Net.Read("DB101.0", (short) (staNoSize * 8));
+ if (result.IsSuccess) {
+ for (int i = 0; i < staNoSize; i++) {
+ Integer siteId = staNos.get(i); // 绔欑偣缂栧彿
+ StaProtocol staProtocol = station.get(siteId);
+ if (null == staProtocol) {
+ staProtocol = new StaProtocol();
+ staProtocol.setSiteId(siteId);
+ station.put(siteId, staProtocol);
+ }
+ staProtocol.setWorkNo((short) siemensS7Net.getByteTransform().TransInt32(result.Content, i * 8)); // 宸ヤ綔鍙�
+
+ 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()) {
+ staProtocol.setPakMk(true);
+ }
}
}
}
- Thread.sleep(200);
- int barcodeSize = slaveProperties.getBarcode().size();
- OperateResultExOne<byte[]> result2 = siemensS7Net.Read("DB100.190",(short)(barcodeSize*8));
- if (result2.IsSuccess) {
- for (int i = 0; i < barcodeSize; i++) {
- String barcode = siemensS7Net.getByteTransform().TransString(result2.Content,i*8,8, "UTF-8");
- BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, i + 1);
- if(!Cools.isEmpty(barcodeThread) && !barcodeThread.getBarcode().equals(barcode)) {
- barcodeThread.setBarcode(barcode);
- }
- }
+ if (result.IsSuccess) {
- }
-
-// OperateResultExOne<Short> result2 = siemensS7Net.ReadInt16("DB200.0");
-// if (result2.IsSuccess) {
-// this.ioMode = IoModeType.get(result2.Content);
-// }
-
- if (result.IsSuccess && result1.IsSuccess) {
-
- OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛",DateUtils.convert(new Date()), slave.getId()));
+ OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛", DateUtils.convert(new Date()), slave.getId()));
// 鏍规嵁瀹炴椂淇℃伅鏇存柊鏁版嵁搴�
try {
@@ -215,66 +515,365 @@
log.error("鏇存柊鏁版嵁搴撴暟鎹け璐� ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot());
}
+ DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
+ deviceErrorService.deleteDeviceError("devp", slave.getId());
} else {
OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戣鍙栬緭閫佺嚎plc鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()));
// log.error("璇诲彇杈撻�佺嚎plc鐘舵�佷俊鎭け璐� ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot());
+ DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
+ deviceErrorService.addDeviceError("devp", slave.getId(), "璇诲彇杈撻�佺嚎plc鐘舵�佷俊鎭け璐�");
}
}
- /**
- * 鍐欏叆 ID+鐩爣绔� =====> 鍗曠珯鐐瑰啓鍏�
- */
+
private void write(StaProtocol staProtocol) throws InterruptedException {
if (null == staProtocol) {
return;
}
+ ArrayList<Integer> staNos = getStaNo();
+
int index = staNos.indexOf(staProtocol.getSiteId());
- short[] array = new short[10];
- array[0] = staProtocol.getWorkNo();
- array[1] = staProtocol.getStaNo();
- OperateResult write = siemensS7Net.Write("DB100." + index*4, array);
+ // 浠诲姟鍙峰湴鍧�
+ String workNoAddress;
+ // 鐩爣绔欏湴鍧�
+ String staNoAddress;
+ // 鐩爣绔欏湴鍧�
+ String heightAddress = null;
+ if (index < 16) {
+ workNoAddress = "DB100." + index * 4;
+ staNoAddress = "DB100." + (index * 4 + 2);
+ } else {
+ workNoAddress = "DB100." + (400 + (index - 16) * 4);
+ staNoAddress = "DB100." + (400 + (index - 16) * 4 + 2);
+ }
+ int i = barcodeSite2.indexOf(staProtocol.getSiteId());
+ if (i != -1) {
+ heightAddress = "DB104." + (i * 2);
+ }
-// OperateResult write = siemensS7Net.Write("DB100." + index*2, staProtocol.getWorkNo()); // 宸ヤ綔鍙�
-// Thread.sleep(500);
-// OperateResult write1 = siemensS7Net.Write("DB101." + index*2, staProtocol.getStaNo()); // 鐩爣绔�
+ OperateResult writeResult;
+ //浠诲姟涓嬪彂娆℃暟
+ int writeCount = 0;
+ //浠诲姟涓嬪彂鎴愬姛鏍囪瘑
+ boolean writeFlag = false;
+ while (writeCount < 5) {
+ if (!Cools.isEmpty(staProtocol.getHeight()) && heightAddress != null) {
+ OperateResult writeResult3 = siemensS7Net.Write(heightAddress, Short.parseShort(staProtocol.getHeight()));
+ writeResult3 = siemensS7Net.Write(heightAddress, Short.parseShort(staProtocol.getHeight()));
+ writeResult3 = siemensS7Net.Write(heightAddress, Short.parseShort(staProtocol.getHeight()));
+ writeResult3 = siemensS7Net.Write(heightAddress, Short.parseShort(staProtocol.getHeight()));
+ log.info("鍐欏叆楂樺害鍦板潃锛歿},{}", heightAddress, writeResult3);
+ if (!writeResult3.IsSuccess) {
+ //fangzhi xierukushibai,jiu duoxiejici,meixunhuan
+ writeResult3 = siemensS7Net.Write(heightAddress, Short.parseShort(staProtocol.getHeight()));
+ if (!writeResult3.IsSuccess) {
+ writeResult3 = siemensS7Net.Write(heightAddress, Short.parseShort(staProtocol.getHeight())); // 鐩爣绔�
+ }
+ }
+ }
+ // 渚ч潰鍑哄簱锛岀粰杈撻�佺嚎鍐欐潯鐮�
+ Short staNo = staProtocol.getStaNo();
+ String barcode = staProtocol.getBarcode();
+ if (staNo == 203 || staNo == 207 || staNo == 212) {
+ if (Cools.isEmpty(barcode)) {
+ log.error("渚ч潰鍑哄簱鍒帮細{}绔欑偣锛屾潯鐮佸�间负绌猴紝浠诲姟鍙凤細{}", staNo, staProtocol.getWorkNo());
+ } else {
- if (!write.IsSuccess) {
+ String[] split = barcode.split("#");
+ int offset = 48 + (staNo - 201) * 24;
+ byte[] bytes = new byte[(split.length + 1) * 6];
+ for (int j = 0, k = 0; j < split.length; j++) {
+ String s = split[j];
+ for (int m = 0; m < s.length(); m++) {
+ bytes[k++] = (byte) s.charAt(m);
+ }
+ }
+
+ OperateResult writeResult4 = siemensS7Net.Write("DB79" + offset, bytes);
+ if (writeResult4.IsSuccess) {
+ log.info("渚ч潰鍑哄簱鍒帮細{}绔欑偣锛岀粰杈撻�佺嚎鍐欐潯鐮侊細{}鎴愬姛", staNo, barcode);
+ } else {
+ log.error("渚ч潰鍑哄簱鍒帮細{}绔欑偣锛岀粰杈撻�佺嚎鍐欐潯鐮侊細{}澶辫触", staNo, barcode);
+ }
+ }
+ }
+
+ OperateResult writeResult1 = siemensS7Net.Write(workNoAddress, staProtocol.getWorkNo()); // 宸ヤ綔鍙�
+ OperateResult writeResult2 = siemensS7Net.Write(staNoAddress, staProtocol.getStaNo()); // 鐩爣绔�
+ if (writeResult1.IsSuccess && writeResult2.IsSuccess) {
+ Thread.sleep(200);
+ OperateResultExOne<byte[]> readResult = siemensS7Net.Read("DB100." + index * 4, (short) 2);
+ if (readResult.IsSuccess) {
+// short workNo = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 0);
+// short staNo = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 2);
+// if (staProtocol.getWorkNo().equals(workNo) && staProtocol.getStaNo().equals(staNo)) {
+// //浠诲姟鍛戒护鍐欏叆鎴愬姛
+ writeFlag = true;
+ log.info("鍐欏叆杈撻�佺嚎鍛戒护鍚庤繑鍥炴垚鍔燂紝骞朵笖鍥炶鎴愬姛銆傝緭閫佺嚎plc缂栧彿={}锛寋}锛屽啓鍏ユ鏁�={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
+ break;
+// } else {//杩斿洖缁撴灉鏄垚鍔熶簡锛屼絾鏄湡瀹炲�间笉鐩稿悓
+// writeCount++;
+// OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎鍛戒护鍚庤繑鍥炴垚鍔燂紝浣嗘槸璇诲彇浠诲姟鍊间笉涓�鑷淬�傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2},鍐欏叆娆℃暟={3}",
+// slave.getId(), JSON.toJSON(staProtocol), writeCount));
+// log.error("鍐欏叆杈撻�佺嚎鍛戒护鍚庤繑鍥炴垚鍔燂紝浣嗘槸璇诲彇浠诲姟鍊间笉涓�鑷淬�傝緭閫佺嚎plc缂栧彿={}锛寋}锛屽啓鍏ユ鏁�={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
+// }
+ } else {
+ writeCount++;
+ OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎鍛戒护鍚庤鍙栧け璐ャ�傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2},鍐欏叆娆℃暟={3}",
+ slave.getId(), JSON.toJSON(staProtocol), writeCount));
+ log.error("鍐欏叆杈撻�佺嚎鍛戒护鍚庤鍙栧け璐ャ�傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={},鍐欏叆娆℃暟={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
+ }
+ } else {
+ writeCount++;
+ OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎鍛戒护澶辫触銆傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2},鍐欏叆娆℃暟={3}",
+ slave.getId(), JSON.toJSON(staProtocol), writeCount));
+ log.error("鍐欏叆杈撻�佺嚎鍛戒护澶辫触銆傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={},鍐欏叆娆℃暟={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
+ }
+ Thread.sleep(200);
+ }
+
+ //鍐欏懡浠ゅ皾璇曚簡5娆¤繕鏄け璐ヤ簡
+ if (!writeFlag) {
staProtocol = station.get(staProtocol.getSiteId());
- if (staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() ==0) {
+ if (staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() == 0) {
staProtocol.setPakMk(true);
}
- OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎绔欑偣鏁版嵁澶辫触銆傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2}", slave.getId(), JSON.toJSON(staProtocol)));
- log.error("鍐欏叆杈撻�佺嚎绔欑偣鏁版嵁澶辫触銆傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={}", slave.getId(), JSON.toJSON(staProtocol));
+ OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎鍛戒护灏濊瘯5娆″け璐ャ�傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2}", slave.getId(), JSON.toJSON(staProtocol)));
+ log.error("鍐欏叆杈撻�佺嚎鍛戒护灏濊瘯5娆″け璐ャ�傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={}", slave.getId(), JSON.toJSON(staProtocol));
+
+// //閲嶆柊娣诲姞鏁版嵁鍒颁换鍔¢槦鍒�
+// boolean result = MessageQueue.offer(SlaveType.Devp, slave.getId(), new Task(2, staProtocol));
+// read();//璇诲彇1娆¤澶囩姸鎬�
} else {
- OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆� 杈撻�佺嚎鍛戒护涓嬪彂 [id:{1}] >>>>> {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(staProtocol)));
- log.info("杈撻�佺嚎鍛戒护涓嬪彂 [id:{}] >>>>> 鍛戒护涓嬪彂锛� {}", slave.getId(), JSON.toJSON(staProtocol));
+ OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆� 杈撻�佺嚎鍛戒护涓嬪彂鎴愬姛 [id:{1}] >>>>> {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(staProtocol)));
+ log.info("杈撻�佺嚎鍛戒护涓嬪彂 [id:{}] >>>>> 鍛戒护涓嬪彂鎴愬姛锛� {}", slave.getId(), JSON.toJSON(staProtocol));
+
+// Integer siteId = staProtocol.getSiteId();
+// staProtocol = station.get(siteId);
+// if ((siteId == 101 || siteId == 201)&&(staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() ==0)) {
+// staProtocol.setPakMk(true);
+// }
+ }
+
+
+ }
+
+ private void write3(StaProtocol staProtocol){
+
+ int lx = 0,mp = 0,lev = 0;
+
+ switch (staProtocol.getSiteId()) {
+ case 205: lx = 16;mp = 18;lev=344;break;
+ case 207: lx = 24;mp = 26;lev=348;break;
+ case 210: lx = 36;mp = 38;lev=354;break;
+ case 212: lx = 44;mp = 46;lev=358;break;
+ default:
+ log.error("鍐欑爜鐩樹俊鎭珯鐐规湁璇細{}" , staProtocol.getSiteId());
+ return;
+ }
+
+ String addressPre = "DB79.";
+
+ //浠诲姟涓嬪彂娆℃暟
+ int writeCount = 0;
+ //浠诲姟涓嬪彂鎴愬姛鏍囪瘑
+ boolean writeFlag = false;
+ while (writeCount < 5) {
+ OperateResult writeResult1 = siemensS7Net.Write(addressPre + lx, staProtocol.getLx()); // 宸ヨ绫诲瀷
+ OperateResult writeResult2 = siemensS7Net.Write(addressPre + mp, staProtocol.getMp()); // 鏄惁鐮佺洏
+ OperateResult writeResult3 = siemensS7Net.Write(addressPre + lev, staProtocol.getLev()); // 鐮佺洏灞傛暟
+ if (writeResult1.IsSuccess && writeResult2.IsSuccess && writeResult3.IsSuccess) {
+ writeFlag = true;
+ log.info("鐮佺洏淇℃伅鍐欏叆杈撻�佺嚎鍛戒护鍚庤繑鍥炴垚鍔燂紝骞朵笖鍥炶鎴愬姛銆傝緭閫佺嚎plc缂栧彿={}锛寋}锛屽啓鍏ユ鏁�={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
+ break;
+ } else {
+ writeCount++;
+ log.error("鐮佺洏淇℃伅鍐欏叆杈撻�佺嚎鍛戒护澶辫触銆傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={},鍐欏叆娆℃暟={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
+ }
+ }
+
+ //鍐欏懡浠ゅ皾璇曚簡5娆¤繕鏄け璐ヤ簡
+ if (!writeFlag) {
+ //閲嶆柊娣诲姞鏁版嵁鍒颁换鍔¢槦鍒�
+ MessageQueue.offer(SlaveType.Devp, 1, new Task(3, staProtocol));
+ log.error("鐮佺洏淇℃伅鍐欏叆杈撻�佺嚎鍛戒护灏濊瘯5娆″け璐ラ噸鏂版帹閫侀槦鍒椼�傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={}", slave.getId(), JSON.toJSON(staProtocol));
}
}
+
+// /**
+// * 鍐欏叆 ID+鐩爣绔� =====> 鍗曠珯鐐瑰啓鍏�
+// */
+// private void write(StaProtocol staProtocol) throws InterruptedException {
+// if (null == staProtocol) {
+// return;
+// }
+// int index = staNos.indexOf(staProtocol.getSiteId());
+// short[] array = new short[2];
+// array[0] = staProtocol.getWorkNo();
+// array[1] = staProtocol.getStaNo();
+// OperateResult write = siemensS7Net.Write("DB100." + index*4, array);
+//
+
+ /// / OperateResult write = siemensS7Net.Write("DB100." + index*2, staProtocol.getWorkNo()); // 宸ヤ綔鍙�
+ /// / Thread.sleep(500);
+ /// / OperateResult write1 = siemensS7Net.Write("DB101." + index*2, staProtocol.getStaNo()); // 鐩爣绔�
+//
+// if (!write.IsSuccess) {
+// staProtocol = station.get(staProtocol.getSiteId());
+// if (staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() ==0) {
+// staProtocol.setPakMk(true);
+// }
+// OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎绔欑偣鏁版嵁澶辫触銆傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2}", slave.getId(), JSON.toJSON(staProtocol)));
+// log.error("鍐欏叆杈撻�佺嚎绔欑偣鏁版嵁澶辫触銆傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={}", slave.getId(), JSON.toJSON(staProtocol));
+// } else {
+// OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆� 杈撻�佺嚎鍛戒护涓嬪彂 [id:{1}] >>>>> {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(staProtocol)));
+// log.info("杈撻�佺嚎鍛戒护涓嬪彂 [id:{}] >>>>> 鍛戒护涓嬪彂锛� {}", slave.getId(), JSON.toJSON(staProtocol));
+//
+// Integer siteId = staProtocol.getSiteId();
+// staProtocol = station.get(siteId);
+// if ((siteId == 101 || siteId == 201)&&(staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() ==0)) {
+// staProtocol.setPakMk(true);
+// }
+// }
+// }
+ private void write2(StaProtocol staProtocol) throws InterruptedException {
+ if (null == staProtocol) {
+ return;
+ }
+ ArrayList<Integer> staNos = getStaNo();
+
+ int index = staNos.indexOf(staProtocol.getSiteId());
+ short[] array = new short[2];
+ array[0] = staProtocol.getWorkNo();
+ array[1] = staProtocol.getStaNo();
+
+ OperateResult writeResult;
+ //浠诲姟涓嬪彂娆℃暟
+ int writeCount = 0;
+ //浠诲姟涓嬪彂鎴愬姛鏍囪瘑
+ boolean writeFlag = false;
+ while (writeCount < 5) {
+ writeResult = siemensS7Net.Write("DB100." + index * 4, array); // 宸ヤ綔鍙枫�佺洰鏍囩珯
+
+ if (writeResult.IsSuccess) {
+ Thread.sleep(200);
+ OperateResultExOne<byte[]> readResult = siemensS7Net.Read("DB100." + index * 4, (short) 4);
+ if (readResult.IsSuccess) {
+ short workNo = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 0);
+ short staNo = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 2);
+ if (staProtocol.getWorkNo().equals(workNo) && staProtocol.getStaNo().equals(staNo)) {
+ //浠诲姟鍛戒护鍐欏叆鎴愬姛
+ writeFlag = true;
+ log.info("鍐欏叆杈撻�佺嚎鍛戒护鍚庤繑鍥炴垚鍔燂紝骞朵笖鍥炶鎴愬姛銆傝緭閫佺嚎plc缂栧彿={}锛寋}锛屽啓鍏ユ鏁�={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
+
+ Date now = new Date();
+ break;
+ } else {//杩斿洖缁撴灉鏄垚鍔熶簡锛屼絾鏄湡瀹炲�间笉鐩稿悓
+ writeCount++;
+ OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎鍛戒护鍚庤繑鍥炴垚鍔燂紝浣嗘槸璇诲彇浠诲姟鍊间笉涓�鑷淬�傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2},鍐欏叆娆℃暟={3}",
+ slave.getId(), JSON.toJSON(staProtocol), writeCount));
+ log.error("鍐欏叆杈撻�佺嚎鍛戒护鍚庤繑鍥炴垚鍔燂紝浣嗘槸璇诲彇浠诲姟鍊间笉涓�鑷淬�傝緭閫佺嚎plc缂栧彿={}锛寋}锛屽啓鍏ユ鏁�={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
+
+ }
+ } else {
+ writeCount++;
+ OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎鍛戒护鍚庤鍙栧け璐ャ�傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2},鍐欏叆娆℃暟={3}",
+ slave.getId(), JSON.toJSON(staProtocol), writeCount));
+ log.error("鍐欏叆杈撻�佺嚎鍛戒护鍚庤鍙栧け璐ャ�傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={},鍐欏叆娆℃暟={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
+
+ }
+ } else {
+ writeCount++;
+ OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎鍛戒护澶辫触銆傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2},鍐欏叆娆℃暟={3}",
+ slave.getId(), JSON.toJSON(staProtocol), writeCount));
+ log.error("鍐欏叆杈撻�佺嚎鍛戒护澶辫触銆傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={},鍐欏叆娆℃暟={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
+
+ }
+ Thread.sleep(200);
+ }
+
+ //鍐欏懡浠ゅ皾璇曚簡5娆¤繕鏄け璐ヤ簡
+ if (!writeFlag) {
+ staProtocol = station.get(staProtocol.getSiteId());
+ if (staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() == 0) {
+ staProtocol.setPakMk(true);
+ }
+ OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎鍛戒护灏濊瘯5娆″け璐ャ�傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2}", slave.getId(), JSON.toJSON(staProtocol)));
+ log.error("鍐欏叆杈撻�佺嚎鍛戒护灏濊瘯5娆″け璐ャ�傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={}", slave.getId(), JSON.toJSON(staProtocol));
+
+ //閲嶆柊娣诲姞鏁版嵁鍒颁换鍔¢槦鍒�
+ boolean result = MessageQueue.offer(SlaveType.Devp, slave.getId(), new Task(3, staProtocol));
+ read();//璇诲彇1娆¤澶囩姸鎬�
+ return;
+ } else {
+ OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆� 杈撻�佺嚎鍛戒护涓嬪彂鎴愬姛 [id:{1}] >>>>> {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(staProtocol)));
+ //log.info("杈撻�佺嚎鍛戒护涓嬪彂 [id:{}] >>>>> 鍛戒护涓嬪彂鎴愬姛锛� {}", slave.getId(), JSON.toJSON(staProtocol));
+
+ Integer siteId = staProtocol.getSiteId();
+ staProtocol = station.get(siteId);
+ if ((siteId == 101 || siteId == 201) && (staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() == 0)) {
+ staProtocol.setPakMk(true);
+ }
+
+ }
+
+ }
+
// 鏇存柊鍏ュ嚭搴撴ā寮�
private void updateIoMode() throws InterruptedException {
- if (this.ioMode != IoModeType.NONE) {
- if (!siemensS7Net.Write("DB200", this.ioMode.id).IsSuccess) {
- OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎1F鍏ュ嚭搴撴ā寮忓け璐ャ�傝緭閫佺嚎plc缂栧彿={1}", slave.getId()));
- log.error("鍐欏叆杈撻�佺嚎1F鍏ュ嚭搴撴ā寮忓け璐ャ�傝緭閫佺嚎plc缂栧彿={}", slave.getId());
+ if (slave.getId() == 1 && this.ioModeOf1F1 != null) {
+ if (!siemensS7Net.Write("DB105.0", this.ioModeOf1F1.id).IsSuccess) {
+ OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎21F1鍏ュ嚭搴撴ā寮忓け璐ャ�傝緭閫佺嚎plc缂栧彿={1}", slave.getId()));
+ log.error("鍐欏叆杈撻�佺嚎1F1鍏ュ嚭搴撴ā寮忓け璐ャ�傝緭閫佺嚎plc缂栧彿={}", slave.getId());
+ }
+ }
+ if (slave.getId() == 1 && this.ioModeOf1F2 != null) {
+ if (!siemensS7Net.Write("DB105.2", this.ioModeOf1F2.id).IsSuccess) {
+ OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎2F2鍏ュ嚭搴撴ā寮忓け璐ャ�傝緭閫佺嚎plc缂栧彿={1}", slave.getId()));
+ log.error("鍐欏叆杈撻�佺嚎1F2鍏ュ嚭搴撴ā寮忓け璐ャ�傝緭閫佺嚎plc缂栧彿={}", slave.getId());
+ }
+ }
+ if (slave.getId() == 1 && this.ioModeOf1F3 != null) {
+ if (!siemensS7Net.Write("DB105.4", this.ioModeOf1F3.id).IsSuccess) {
+ OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎3F1鍏ュ嚭搴撴ā寮忓け璐ャ�傝緭閫佺嚎plc缂栧彿={1}", slave.getId()));
+ log.error("鍐欏叆杈撻�佺嚎1F3鍏ュ嚭搴撴ā寮忓け璐ャ�傝緭閫佺嚎plc缂栧彿={}", slave.getId());
+ }
+ }
+ if (slave.getId() == 1 && this.ioModeOf1F4 != null) {
+ if (!siemensS7Net.Write("DB105.6", this.ioModeOf1F4.id).IsSuccess) {
+ OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎3F2鍏ュ嚭搴撴ā寮忓け璐ャ�傝緭閫佺嚎plc缂栧彿={1}", slave.getId()));
+ log.error("鍐欏叆杈撻�佺嚎1F4鍏ュ嚭搴撴ā寮忓け璐ャ�傝緭閫佺嚎plc缂栧彿={}", slave.getId());
+ }
+ }
+ if (slave.getId() == 1 && this.ioModeOf1F5 != null) {
+ if (!siemensS7Net.Write("DB105.8", this.ioModeOf1F5.id).IsSuccess) {
+ OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎3F2鍏ュ嚭搴撴ā寮忓け璐ャ�傝緭閫佺嚎plc缂栧彿={1}", slave.getId()));
+ log.error("鍐欏叆杈撻�佺嚎1F5鍏ュ嚭搴撴ā寮忓け璐ャ�傝緭閫佺嚎plc缂栧彿={}", slave.getId());
+ }
+ }
+
+
+ if (slave.getId() == 1 && this.ioModeOf2F1 != null) {
+ if (!siemensS7Net.Write("DB105.10", this.ioModeOf2F1.id).IsSuccess) {
+ OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎2F1鍏ュ嚭搴撴ā寮忓け璐ャ�傝緭閫佺嚎plc缂栧彿={1}", slave.getId()));
+ log.error("鍐欏叆杈撻�佺嚎2F1鍏ュ嚭搴撴ā寮忓け璐ャ�傝緭閫佺嚎plc缂栧彿={}", slave.getId());
+ }
+ }
+ if (slave.getId() == 1 && this.ioModeOf2F2 != null) {
+ if (!siemensS7Net.Write("DB105.12", this.ioModeOf2F2.id).IsSuccess) {
+ OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎2F2鍏ュ嚭搴撴ā寮忓け璐ャ�傝緭閫佺嚎plc缂栧彿={1}", slave.getId()));
+ log.error("鍐欏叆杈撻�佺嚎2F2鍏ュ嚭搴撴ā寮忓け璐ャ�傝緭閫佺嚎plc缂栧彿={}", slave.getId());
+ }
+ }
+ if (slave.getId() == 1 && this.ioModeOf2F3 != null) {
+ if (!siemensS7Net.Write("DB105.14", this.ioModeOf2F3.id).IsSuccess) {
+ OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎2F3鍏ュ嚭搴撴ā寮忓け璐ャ�傝緭閫佺嚎plc缂栧彿={1}", slave.getId()));
+ log.error("鍐欏叆杈撻�佺嚎2F3鍏ュ嚭搴撴ā寮忓け璐ャ�傝緭閫佺嚎plc缂栧彿={}", slave.getId());
}
}
}
- /**
- * 蹇冭烦
- */
- private void heartbeat(){
- if (heartBeatVal == 1) {
- heartBeatVal = 2;
- } else {
- heartBeatVal = 1;
- }
- OperateResult write = siemensS7Net.Write("DB100.50", heartBeatVal);
- if (!write.IsSuccess) {
- log.error("杈撻�佺嚎plc缂栧彿={} 蹇冭烦澶辫触", slave.getId());
- }
- }
/**
* 璁剧疆鍏ュ簱鏍囪
@@ -291,25 +890,38 @@
public void close() {
siemensS7Net.ConnectClose();
}
-
- public static void main(String[] args) {
- System.out.println(staNos.indexOf(129));
- System.out.println(staNos.size());
- for (int i = 0; i<staNos.size(); i++) {
-// System.out.println(i*2);
-// System.out.println(i*2 + 200);
-// System.out.println(i);
- }
- int index = staNos.indexOf(128);
- System.out.println(index*2);
- System.out.println(index*2 + 200);
- }
-
-// public static void main(String[] args) throws Exception {
-// DevpSlave slave = new DevpSlave();
-// slave.setIp("192.168.2.125");
+ public static void main(String[] args) throws Exception {
+ DevpSlave slave = new DevpSlave();
+ slave.setIp("10.49.210.41");
// SiemensDevpThread devpThread = new SiemensDevpThread(slave);
// devpThread.connect();
+ SiemensS7Net siemensS7Net = new SiemensS7Net(SiemensPLCS.S1200, slave.getIp());
+ siemensS7Net.setRack(slave.getRack().byteValue());
+ siemensS7Net.setSlot(slave.getSlot().byteValue());
+ OperateResult connect = siemensS7Net.ConnectServer();
+ // 渚ч潰鍑哄簱锛岀粰杈撻�佺嚎鍐欐潯鐮�
+ Short staNo = 212;
+ String barcode = "800001#123456#811112#811113";
+
+
+ String[] split = barcode.split("#");
+ int offset = 48 + (staNo - 201) * 24;
+ byte[] bytes = new byte[(split.length + 1) * 6];
+ for (int j = 0, k = 0; j < split.length; j++) {
+ String s = split[j];
+ for (int m = 0; m < s.length(); m++) {
+ bytes[k++] = (byte) s.charAt(m);
+ }
+ }
+
+ OperateResult writeResult4 = siemensS7Net.Write("DB79" + offset, bytes);
+ if (writeResult4.IsSuccess) {
+ log.info("渚ч潰鍑哄簱鍒帮細{}绔欑偣锛岀粰杈撻�佺嚎鍐欐潯鐮侊細{}鎴愬姛", staNo, barcode);
+ } else {
+ log.error("渚ч潰鍑哄簱鍒帮細{}绔欑偣锛岀粰杈撻�佺嚎鍐欐潯鐮侊細{}澶辫触", staNo, barcode);
+ }
+
+// devpThread.write2(0);
// devpThread.read();
// // 鍐�
// StaProtocol staProtocol = devpThread.getStation().get(1);
@@ -323,7 +935,7 @@
// // 璇�
// devpThread.read();
// System.out.println(JSON.toJSONString(devpThread.station));
-//
-// }
+
+ }
}
--
Gitblit v1.9.1