From f375928943ad4b9fe6d8508e151971dcdc23e982 Mon Sep 17 00:00:00 2001
From: Junjie <DELL@qq.com>
Date: 星期一, 05 一月 2026 16:18:36 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/core/thread/impl/ZySiemensDualCrnThread.java |  328 +++++++++++++++++++++++++++++++++++++----------------
 1 files changed, 227 insertions(+), 101 deletions(-)

diff --git a/src/main/java/com/zy/core/thread/impl/ZySiemensDualCrnThread.java b/src/main/java/com/zy/core/thread/impl/ZySiemensDualCrnThread.java
index 2df5438..43f5039 100644
--- a/src/main/java/com/zy/core/thread/impl/ZySiemensDualCrnThread.java
+++ b/src/main/java/com/zy/core/thread/impl/ZySiemensDualCrnThread.java
@@ -1,39 +1,41 @@
 package com.zy.core.thread.impl;
 
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.serializer.SerializerFeature;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.core.common.DateUtils;
 import com.core.common.SpringUtils;
-import com.zy.asrs.entity.BasDualCrnp;
-import com.zy.asrs.entity.BasDualCrnpOpt;
-import com.zy.asrs.entity.DeviceConfig;
-import com.zy.asrs.entity.DeviceDataLog;
+import com.zy.asrs.entity.*;
 import com.zy.asrs.service.BasDualCrnpOptService;
 import com.zy.asrs.service.BasDualCrnpService;
+import com.zy.asrs.service.WrkMastService;
 import com.zy.asrs.utils.Utils;
 import com.zy.common.utils.RedisUtil;
+import com.zy.core.News;
 import com.zy.core.cache.MessageQueue;
 import com.zy.core.cache.OutputQueue;
-import com.zy.core.enums.CrnTaskModeType;
-import com.zy.core.enums.RedisKeyType;
-import com.zy.core.enums.SlaveType;
+import com.zy.core.cache.SlaveConnection;
+import com.zy.core.enums.*;
 import com.zy.core.model.CommandResponse;
+import com.zy.core.model.StationObjModel;
 import com.zy.core.model.Task;
 import com.zy.core.model.command.DualCrnCommand;
 import com.zy.core.model.protocol.DualCrnProtocol;
+import com.zy.core.model.protocol.StationProtocol;
 import com.zy.core.network.DeviceConnectPool;
 import com.zy.core.network.ZyDualCrnConnectDriver;
 import com.zy.core.network.entity.ZyDualCrnStatusEntity;
 import com.zy.core.thread.DualCrnThread;
+import com.zy.core.thread.StationThread;
 import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
 
 import java.text.MessageFormat;
 import java.util.Date;
-import java.util.concurrent.Executors;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.ThreadFactory;
-import java.util.concurrent.TimeUnit;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 /**
  * 鍙屽伐浣嶅爢鍨涙満绾跨▼
@@ -47,10 +49,6 @@
     private ZyDualCrnConnectDriver zyDualCrnConnectDriver;
     private DualCrnProtocol crnProtocol;
     private int deviceLogCollectTime = 200;
-    private boolean resetFlag = false;
-    private volatile boolean closed = false;
-    private ScheduledExecutorService readExecutor;
-    private ScheduledExecutorService processExecutor;
 
     public ZySiemensDualCrnThread(DeviceConfig deviceConfig, RedisUtil redisUtil) {
         this.deviceConfig = deviceConfig;
@@ -62,53 +60,163 @@
     public void run() {
         this.connect();
         this.initCrn();
-        readExecutor = Executors.newSingleThreadScheduledExecutor(new ThreadFactory() {
-            @Override
-            public Thread newThread(Runnable r) {
-                Thread t = new Thread(r);
-                t.setName("DualCrnReader-" + deviceConfig.getDeviceNo());
-                t.setDaemon(true);
-                return t;
-            }
-        });
-        readExecutor.scheduleAtFixedRate(() -> {
-            if (closed || Thread.currentThread().isInterrupted()) {
-                return;
-            }
-            try {
-                deviceLogCollectTime = Utils.getDeviceLogCollectTime();
-                readStatus();
-            } catch (Exception e) {
-                log.error("DualCrnThread Fail", e);
-            }
-        }, 0, 200, TimeUnit.MILLISECONDS);
 
-        processExecutor = Executors.newSingleThreadScheduledExecutor(new ThreadFactory() {
-            @Override
-            public Thread newThread(Runnable r) {
-                Thread t = new Thread(r);
-                t.setName("DualCrnWriter-" + deviceConfig.getDeviceNo());
-                t.setDaemon(true);
-                return t;
+        Thread readThread = new Thread(() -> {
+            while (true) {
+                try {
+                    deviceLogCollectTime = Utils.getDeviceLogCollectTime();
+                    readStatus();
+                    Thread.sleep(100);
+                } catch (Exception e) {
+                    log.error("DualCrnThread Fail", e);
+                }
             }
         });
-        processExecutor.scheduleAtFixedRate(() -> {
-            if (closed || Thread.currentThread().isInterrupted()) {
-                return;
-            }
-            try {
-                int step = 1;
-                Task task = MessageQueue.poll(SlaveType.DualCrn, deviceConfig.getDeviceNo());
-                if (task != null) {
-                    step = task.getStep();
+        readThread.start();
+
+        Thread processThread = new Thread(() -> {
+            while (true) {
+                try {
+                    int step = 1;
+                    Task task = MessageQueue.poll(SlaveType.DualCrn, deviceConfig.getDeviceNo());
+                    if (task != null) {
+                        step = task.getStep();
+                    }
+
+                    if (step == 2) {
+                        List<DualCrnCommand> commandList = (List<DualCrnCommand>) task.getData();
+                        DualCrnCommand command = commandList.get(0);
+
+                        HashMap<String, Object> map = new HashMap<>();
+                        map.put("commands", commandList);
+                        map.put("idx", 1);
+                        redisUtil.set(RedisKeyType.DUAL_CRN_COMMAND_.key + command.getTaskNo(), JSON.toJSONString(map, SerializerFeature.DisableCircularReferenceDetect), 60 * 60 * 24);
+                        sendCommand(command);
+                    } else if (step == 3) {
+                        sendCommand((DualCrnCommand) task.getData());
+                    }
+
+                    Thread.sleep(100);
+                } catch (Exception e) {
+                    log.error("DualCrnProcess Fail", e);
                 }
-                if (step == 2 && task != null) {
-                    sendCommand((DualCrnCommand) task.getData());
-                }
-            } catch (Exception e) {
-                e.printStackTrace();
             }
-        }, 0, 200, TimeUnit.MILLISECONDS);
+        });
+        processThread.start();
+
+        Thread commandThread = new Thread(() -> {
+            while (true) {
+                try {
+                    if(crnProtocol.getMode() != DualCrnModeType.AUTO.id) {
+                        continue;
+                    }
+
+                    if(crnProtocol.getAlarm() != 0) {
+                        continue;
+                    }
+
+                    if (crnProtocol.getLoaded() == 1 && crnProtocol.getLoadedTwo() == 1) {
+                        Object wait = redisUtil.get(RedisKeyType.DUAL_CRN_PICK_WAIT_NEXT_TASK.key + crnProtocol.getCrnNo());
+                        if (wait != null) {
+                            redisUtil.del(RedisKeyType.DUAL_CRN_PICK_WAIT_NEXT_TASK.key + crnProtocol.getCrnNo());
+                        }
+                    }
+
+                    if(crnProtocol.getTaskNo() > 0 && crnProtocol.getStatus() == DualCrnStatusType.IDLE.id) {
+                        Integer taskNo = crnProtocol.getTaskNo();
+                        Object commandObj = redisUtil.get(RedisKeyType.DUAL_CRN_COMMAND_.key + taskNo);
+                        if (commandObj == null) {
+                            News.error("鍙屽伐浣嶅爢鍨涙満锛屽伐浣�1绌洪棽绛夊緟涓嬪彂鍛戒护锛屼絾鏈壘鍒板懡浠ゃ�傚爢鍨涙満鍙�={}锛屽伐浣滃彿={}", crnProtocol.getCrnNo(), taskNo);
+                            continue;
+                        }
+
+                        JSONObject commandMap = JSON.parseObject(commandObj.toString());
+                        Integer idx = commandMap.getInteger("idx");
+                        List<DualCrnCommand> commandList = commandMap.getJSONArray("commands").toJavaList(DualCrnCommand.class);
+                        if (idx >= commandList.size()) {
+                            continue;
+                        }
+                        DualCrnCommand dualCommand = commandList.get(idx);
+
+                        if (dualCommand.getTaskMode() == DualCrnTaskModeType.PUT.id.shortValue()) {
+                            //绛夊緟涓嬩竴涓换鍔�
+                            Object wait = redisUtil.get(RedisKeyType.DUAL_CRN_PICK_WAIT_NEXT_TASK.key + crnProtocol.getCrnNo());
+                            if (wait != null) {
+                                continue;
+                            }
+
+                            Object outTaskStationInfoObj = redisUtil.get(RedisKeyType.DUAL_CRN_OUT_TASK_STATION_INFO.key + taskNo);
+                            if (outTaskStationInfoObj != null) {
+                                //妫�娴嬪嚭鍙g珯鏄惁鍙墽琛屾斁璐у姩浣�
+                                StationObjModel stationObjModel = JSON.parseObject(outTaskStationInfoObj.toString(), StationObjModel.class);
+                                StationThread stationThread = (StationThread) SlaveConnection.get(SlaveType.Devp, stationObjModel.getDeviceNo());
+                                if (stationThread == null) {
+                                    continue;
+                                }
+
+                                Map<Integer, StationProtocol> statusMap = stationThread.getStatusMap();
+                                StationProtocol stationProtocol = statusMap.get(stationObjModel.getStationId());
+                                if (stationProtocol == null) {
+                                    continue;
+                                }
+
+                                if (!stationProtocol.isAutoing()) {
+                                    continue;
+                                }
+
+                                if (stationProtocol.isLoading()) {
+                                    continue;
+                                }
+
+                                if (stationProtocol.getTaskNo() > 0) {
+                                    continue;
+                                }
+                            }
+                        }
+
+                        idx++;
+                        commandMap.put("idx", idx);
+                        sendCommand(dualCommand);
+                        redisUtil.set(RedisKeyType.DUAL_CRN_COMMAND_.key + taskNo, commandMap.toJSONString(), 60 * 60 * 24);
+                    }
+
+                    if(crnProtocol.getTaskNoTwo() > 0 && crnProtocol.getStatusTwo() == DualCrnStatusType.IDLE.id) {
+                        Integer taskNo = crnProtocol.getTaskNoTwo();
+                        Object commandObj = redisUtil.get(RedisKeyType.DUAL_CRN_COMMAND_.key + taskNo);
+                        if (commandObj == null) {
+                            News.error("鍙屽伐浣嶅爢鍨涙満锛屽伐浣�2绌洪棽绛夊緟涓嬪彂鍛戒护锛屼絾鏈壘鍒板懡浠ゃ�傚爢鍨涙満鍙�={}锛屽伐浣滃彿={}", crnProtocol.getCrnNo(), taskNo);
+                            continue;
+                        }
+
+                        JSONObject commandMap = JSON.parseObject(commandObj.toString());
+                        Integer idx = commandMap.getInteger("idx");
+                        List<DualCrnCommand> commandList = commandMap.getJSONArray("commands").toJavaList(DualCrnCommand.class);
+                        if (idx >= commandList.size()) {
+                            continue;
+                        }
+                        DualCrnCommand dualCommand = commandList.get(idx);
+
+                        if (dualCommand.getTaskMode() == DualCrnTaskModeType.PUT.id.shortValue()) {
+                            //绛夊緟涓嬩竴涓换鍔�
+                            Object wait = redisUtil.get(RedisKeyType.DUAL_CRN_PICK_WAIT_NEXT_TASK.key + crnProtocol.getCrnNo());
+                            if (wait != null) {
+                                continue;
+                            }
+                        }
+
+                        idx++;
+                        commandMap.put("idx", idx);
+                        sendCommand(dualCommand);
+                        redisUtil.set(RedisKeyType.DUAL_CRN_COMMAND_.key + taskNo, commandMap.toJSONString(), 60 * 60 * 24);
+                    }
+
+                    Thread.sleep(100);
+                } catch (Exception e) {
+                    log.error("DualCrnCommand Fail", e);
+                }
+            }
+        });
+        commandThread.start();
     }
 
     /**
@@ -129,6 +237,7 @@
         crnProtocol.setForkPos(-1);
         crnProtocol.setLoaded(0);
         crnProtocol.setWalkPos(0);
+        crnProtocol.setLiftPos(0);
 
         //宸ヤ綅2
         crnProtocol.setTaskNoTwo(0);
@@ -138,6 +247,7 @@
         crnProtocol.setForkPosTwo(-1);
         crnProtocol.setLoadedTwo(0);
         crnProtocol.setWalkPosTwo(0);
+        crnProtocol.setLiftPosTwo(0);
 
         crnProtocol.setAlarm(0);
         crnProtocol.setXSpeed(0);
@@ -166,27 +276,26 @@
             OutputQueue.DUAL_CRN.offer(MessageFormat.format("銆恵0}銆戣鍙栧弻宸ヤ綅鍫嗗灈鏈簆lc鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), deviceConfig.getDeviceNo(), deviceConfig.getIp(), deviceConfig.getPort()));
             return;
         }
-
         crnProtocol.setMode(crnStatus.getMode());
 
         //宸ヤ綅1
         crnProtocol.setTaskNo(crnStatus.getTaskNo());
         crnProtocol.setStatus(crnStatus.getStatus());
-        crnProtocol.setBay(crnStatus.getBay());
-        crnProtocol.setLevel(crnStatus.getLevel());
         crnProtocol.setForkPos(crnStatus.getForkPos());
         crnProtocol.setLoaded(crnStatus.getLoaded());
-        crnProtocol.setWalkPos(crnStatus.getWalkPos());
+        crnProtocol.setTaskReceive(crnStatus.getTaskReceive());
 
         //宸ヤ綅2
         crnProtocol.setTaskNoTwo(crnStatus.getTaskNoTwo());
         crnProtocol.setStatusTwo(crnStatus.getStatusTwo());
-        crnProtocol.setBayTwo(crnStatus.getBayTwo());
-        crnProtocol.setLevelTwo(crnStatus.getLevelTwo());
         crnProtocol.setForkPosTwo(crnStatus.getForkPosTwo());
         crnProtocol.setLoadedTwo(crnStatus.getLoadedTwo());
-        crnProtocol.setWalkPosTwo(crnStatus.getWalkPosTwo());
+        crnProtocol.setTaskReceiveTwo(crnStatus.getTaskReceiveTwo());
 
+        crnProtocol.setBay(crnStatus.getBay());
+        crnProtocol.setLevel(crnStatus.getLevel());
+        crnProtocol.setWalkPos(crnStatus.getWalkPos());
+        crnProtocol.setLiftPos(crnStatus.getLiftPos());
         crnProtocol.setAlarm(crnStatus.getAlarm());
         crnProtocol.setTemp1(crnStatus.getTemp1());
         crnProtocol.setTemp2(crnStatus.getTemp2());
@@ -248,15 +357,6 @@
 
     @Override
     public void close() {
-        closed = true;
-        ScheduledExecutorService ex = readExecutor;
-        if (ex != null) {
-            try { ex.shutdownNow(); } catch (Exception ignore) {}
-        }
-        ScheduledExecutorService px = processExecutor;
-        if (px != null) {
-            try { px.shutdownNow(); } catch (Exception ignore) {}
-        }
         if (zyDualCrnConnectDriver != null) {
             zyDualCrnConnectDriver.close();
         }
@@ -271,16 +371,44 @@
     public DualCrnCommand getPickAndPutCommand(String sourceLocNo, String targetLocNo, Integer taskNo, Integer crnNo, Integer station) {
         DualCrnCommand crnCommand = new DualCrnCommand();
         crnCommand.setCrnNo(crnNo); // 鍫嗗灈鏈虹紪鍙�
-        crnCommand.setTaskNo(taskNo.shortValue()); // 宸ヤ綔鍙�
-        crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE.id.shortValue()); // 浠诲姟妯″紡:  搴撲綅绉昏浆
-        crnCommand.setSourcePosX((short) Utils.getRow(sourceLocNo));     // 婧愬簱浣嶆帓
-        crnCommand.setSourcePosY((short) Utils.getBay(sourceLocNo));     // 婧愬簱浣嶅垪
-        crnCommand.setSourcePosZ((short) Utils.getLev(sourceLocNo));     // 婧愬簱浣嶅眰
-        crnCommand.setDestinationPosX((short) Utils.getRow(targetLocNo));     // 鐩爣搴撲綅鎺�
-        crnCommand.setDestinationPosY((short) Utils.getBay(targetLocNo));     // 鐩爣搴撲綅鍒�
-        crnCommand.setDestinationPosZ((short) Utils.getLev(targetLocNo));     // 鐩爣搴撲綅灞�
-        crnCommand.setStation(station.shortValue());//宸ヤ綅
-        crnCommand.setCommand((short) 1);     // 浠诲姟纭
+        crnCommand.setTaskNo(taskNo); // 宸ヤ綔鍙�
+        crnCommand.setTaskMode(DualCrnTaskModeType.TRANSFER.id); // 浠诲姟妯″紡:  鍙栨斁璐�
+        crnCommand.setSourcePosX(Utils.getRow(sourceLocNo));     // 婧愬簱浣嶆帓
+        crnCommand.setSourcePosY(Utils.getBay(sourceLocNo));     // 婧愬簱浣嶅垪
+        crnCommand.setSourcePosZ(Utils.getLev(sourceLocNo));     // 婧愬簱浣嶅眰
+        crnCommand.setDestinationPosX(Utils.getRow(targetLocNo));     // 鐩爣搴撲綅鎺�
+        crnCommand.setDestinationPosY(Utils.getBay(targetLocNo));     // 鐩爣搴撲綅鍒�
+        crnCommand.setDestinationPosZ(Utils.getLev(targetLocNo));     // 鐩爣搴撲綅灞�
+        crnCommand.setStation(station);//宸ヤ綅
+        crnCommand.setCommand(1);     // 浠诲姟纭
+        return crnCommand;
+    }
+
+    @Override
+    public DualCrnCommand getPickCommand(String targetLocNo, Integer taskNo, Integer crnNo, Integer station) {
+        DualCrnCommand crnCommand = new DualCrnCommand();
+        crnCommand.setCrnNo(crnNo); // 鍫嗗灈鏈虹紪鍙�
+        crnCommand.setTaskNo(taskNo); // 宸ヤ綔鍙�
+        crnCommand.setTaskMode(DualCrnTaskModeType.PICK.id); // 浠诲姟妯″紡:  鍙栬揣
+        crnCommand.setDestinationPosX(Utils.getRow(targetLocNo));     // 鐩爣搴撲綅鎺�
+        crnCommand.setDestinationPosY(Utils.getBay(targetLocNo));     // 鐩爣搴撲綅鍒�
+        crnCommand.setDestinationPosZ(Utils.getLev(targetLocNo));     // 鐩爣搴撲綅灞�
+        crnCommand.setStation(station);//宸ヤ綅
+        crnCommand.setCommand(1);     // 浠诲姟纭
+        return crnCommand;
+    }
+
+    @Override
+    public DualCrnCommand getPutCommand(String targetLocNo, Integer taskNo, Integer crnNo, Integer station) {
+        DualCrnCommand crnCommand = new DualCrnCommand();
+        crnCommand.setCrnNo(crnNo); // 鍫嗗灈鏈虹紪鍙�
+        crnCommand.setTaskNo(taskNo); // 宸ヤ綔鍙�
+        crnCommand.setTaskMode(DualCrnTaskModeType.PUT.id); // 浠诲姟妯″紡:  鏀捐揣
+        crnCommand.setDestinationPosX(Utils.getRow(targetLocNo));     // 鐩爣搴撲綅鎺�
+        crnCommand.setDestinationPosY(Utils.getBay(targetLocNo));     // 鐩爣搴撲綅鍒�
+        crnCommand.setDestinationPosZ(Utils.getLev(targetLocNo));     // 鐩爣搴撲綅灞�
+        crnCommand.setStation(station);//宸ヤ綅
+        crnCommand.setCommand(1);     // 浠诲姟纭
         return crnCommand;
     }
 
@@ -288,13 +416,12 @@
     public DualCrnCommand getMoveCommand(String targetLocNo, Integer taskNo, Integer crnNo) {
         DualCrnCommand crnCommand = new DualCrnCommand();
         crnCommand.setCrnNo(crnNo); // 鍫嗗灈鏈虹紪鍙�
-        crnCommand.setTaskNo(taskNo.shortValue()); // 宸ヤ綔鍙�
-        crnCommand.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
-        crnCommand.setTaskMode(CrnTaskModeType.CRN_MOVE.id.shortValue()); // 浠诲姟妯″紡:  鍫嗗灈鏈虹Щ鍔�
-        crnCommand.setDestinationPosX((short) Utils.getRow(targetLocNo));     // 鐩爣搴撲綅鎺�
-        crnCommand.setDestinationPosY((short) Utils.getBay(targetLocNo));     // 鐩爣搴撲綅鍒�
-        crnCommand.setDestinationPosZ((short) Utils.getLev(targetLocNo));     // 鐩爣搴撲綅灞�
-        crnCommand.setCommand((short) 1);     // 浠诲姟纭
+        crnCommand.setTaskNo(taskNo); // 宸ヤ綔鍙�
+        crnCommand.setTaskMode(DualCrnTaskModeType.MOVE.id); // 浠诲姟妯″紡:  鍫嗗灈鏈虹Щ鍔�
+        crnCommand.setDestinationPosX(Utils.getRow(targetLocNo));     // 鐩爣搴撲綅鎺�
+        crnCommand.setDestinationPosY(Utils.getBay(targetLocNo));     // 鐩爣搴撲綅鍒�
+        crnCommand.setDestinationPosZ(Utils.getLev(targetLocNo));     // 鐩爣搴撲綅灞�
+        crnCommand.setCommand(1);     // 浠诲姟纭
         return crnCommand;
     }
 
@@ -302,17 +429,16 @@
     public DualCrnCommand getResetCommand(Integer crnNo, Integer station) {
         DualCrnCommand crnCommand = new DualCrnCommand();
         crnCommand.setCrnNo(crnNo); // 鍫嗗灈鏈虹紪鍙�
-        crnCommand.setTaskNo((short) 0); // 宸ヤ綔鍙�
-        crnCommand.setAckFinish((short) 1);  // 浠诲姟瀹屾垚纭浣�
-        crnCommand.setTaskMode(CrnTaskModeType.NONE.id.shortValue()); // 浠诲姟妯″紡
-        crnCommand.setSourcePosX((short)0);     // 婧愬簱浣嶆帓
-        crnCommand.setSourcePosY((short)0);     // 婧愬簱浣嶅垪
-        crnCommand.setSourcePosZ((short)0);     // 婧愬簱浣嶅眰
-        crnCommand.setDestinationPosX((short)0);     // 鐩爣搴撲綅鎺�
-        crnCommand.setDestinationPosY((short)0);     // 鐩爣搴撲綅鍒�
-        crnCommand.setDestinationPosZ((short)0);     // 鐩爣搴撲綅灞�
-        crnCommand.setStation(station.shortValue());//宸ヤ綅
-        crnCommand.setCommand((short) 1);     // 浠诲姟纭
+        crnCommand.setTaskNo(0); // 宸ヤ綔鍙�
+        crnCommand.setTaskMode(DualCrnTaskModeType.CONFIRM.id); // 浠诲姟妯″紡:  纭
+        crnCommand.setSourcePosX(0);     // 婧愬簱浣嶆帓
+        crnCommand.setSourcePosY(0);     // 婧愬簱浣嶅垪
+        crnCommand.setSourcePosZ(0);     // 婧愬簱浣嶅眰
+        crnCommand.setDestinationPosX(0);     // 鐩爣搴撲綅鎺�
+        crnCommand.setDestinationPosY(0);     // 鐩爣搴撲綅鍒�
+        crnCommand.setDestinationPosZ(0);     // 鐩爣搴撲綅灞�
+        crnCommand.setStation(station);//宸ヤ綅
+        crnCommand.setCommand(1);     // 浠诲姟纭
         return crnCommand;
     }
 

--
Gitblit v1.9.1