Explorar o código

搅拌槽通讯接口

LZH %!s(int64=2) %!d(string=hai) anos
pai
achega
96b15c6e94

+ 153 - 0
ruoyi-admin/src/main/java/com/ruoyi/xuankuang/controller/test/TankTestController.java

@@ -0,0 +1,153 @@
+package com.ruoyi.xuankuang.controller.test;
+
+import com.ruoyi.hard.xuankang.StirringTankClient;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.models.auth.In;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @author Jwk
+ * @version 1.0
+ * @date 2023/4/14 16:58
+ */
+@Api("搅拌槽接口测试")
+@RestController
+@RequestMapping("/test/tank")
+public class TankTestController {
+
+    @Autowired
+    StirringTankClient stirringTankClient;
+
+    @ApiOperation("读碳酸钠搅拌槽液位")
+    @GetMapping("/readTank01")
+    public Number readTank01(){
+        return stirringTankClient.readTank01();
+    }
+//
+//    @ApiOperation("读丁黄药搅拌槽液位")
+//    @GetMapping("/readTank02")
+//    public short[]  readTank02(){
+//        return stirringTankClient.readTank02();
+//    }
+//
+//    @ApiOperation("读丁铵黑药搅拌槽液位")
+//    @GetMapping("/readTank03")
+//    public short[]  readTank03(){
+//        return stirringTankClient.readTank03();
+//    }
+//
+//    @ApiOperation("读六偏磷酸钠搅拌槽液位")
+//    @GetMapping("/readTank04")
+//    public short[]  readTank04(){
+//        return stirringTankClient.readTank04();
+//    }
+//
+//    @ApiOperation("读硫酸铵搅拌槽液位")
+//    @GetMapping("/readTank05")
+//    public short[]  readTank05(){
+//        return stirringTankClient.readTank05();
+//    }
+//
+//    @ApiOperation("读乙黄药搅拌槽液位")
+//    @GetMapping("/readTank06")
+//    public short[]  readTank06(){
+//        return stirringTankClient.readTank06();
+//    }
+//
+    @ApiOperation("读碳酸钠药剂量")
+    @GetMapping("/readTank07")
+    public Number readTank07(){
+        return stirringTankClient.readTank07();
+    }
+//
+//    @ApiOperation("读丁黄药药剂量")
+//    @GetMapping("/readTank08")
+//    public short[]  readTank08(){
+//        return stirringTankClient.readTank08();
+//    }
+//
+//    @ApiOperation("读丁铵黑药药剂量")
+//    @GetMapping("/readTank09")
+//    public short[]  readTank09(){
+//        return stirringTankClient.readTank09();
+//    }
+//
+//    @ApiOperation("读六偏磷酸钠药剂量")
+//    @GetMapping("/readTank10")
+//    public short[] readTank10(){
+//        return stirringTankClient.readTank10();
+//    }
+//
+//    @ApiOperation("读硫酸铵药剂量")
+//    @GetMapping("/readTank11")
+//    public short[]  readTank11(){
+//        return stirringTankClient.readTank11();
+//    }
+//
+//    @ApiOperation("读乙黄药药剂量")
+//    @GetMapping("/readTank12")
+//    public short[]  readTank12(){
+//        return stirringTankClient.readTank12();
+//    }
+
+    @ApiOperation("读仓库是否可以完成该剂量的注入标志位")
+    @GetMapping("/readTank13")
+    public boolean[]  readTank13(){
+        return stirringTankClient.readTank13();
+    }
+
+    @ApiOperation("读药剂注入请求")
+    @GetMapping("/readTank14")
+    public boolean[]  readTank14(){
+        return stirringTankClient.readTank14();
+    }
+
+    @ApiOperation("读碳酸钠搅拌槽运行")
+    @GetMapping("/readTank15")
+    public boolean[]  readTank15(){
+        return stirringTankClient.readTank15();
+    }
+
+    @ApiOperation("读碳酸钠确认开始生产")
+    @GetMapping("/readTank16")
+    public boolean[]  readTank16(){
+        return stirringTankClient.readTank16();
+    }
+
+
+
+    @ApiOperation("写仓库无法完成碳酸钠注药量")
+    @PostMapping("/writeTank01")
+    public Boolean writeTank01() {
+        return stirringTankClient.writeTank01();
+    }
+
+    @ApiOperation("写仓库确认可完成碳酸钠注药量")
+    @PostMapping("/writeTank02")
+    public Boolean writeTank02() {
+        return stirringTankClient.writeTank02();
+    }
+
+    @ApiOperation("写仓库收到请求开始碳酸钠注药")
+    @PostMapping("/writeTank03")
+    public Boolean writeTank03() {
+        return stirringTankClient.writeTank03();
+    }
+
+    @ApiOperation("写仓库注入碳酸钠失败")
+    @PostMapping("/writeTank04")
+    public Boolean writeTank04() {
+        return stirringTankClient.writeTank04();
+    }
+
+    @ApiOperation("写仓库注入碳酸钠成功")
+    @PostMapping("/writeTank05")
+    public Boolean writeTank05() {
+        return stirringTankClient.writeTank05();
+    }
+}

+ 359 - 0
warewms-hard/src/main/java/com/ruoyi/hard/xuankang/StirringTankClient.java

@@ -1,11 +1,17 @@
 package com.ruoyi.hard.xuankang;
 
 import com.jwk.spring.boot.autoconfigure.ModbusTcpMasterTemplate;
+import com.jwk.spring.boot.constant.DATA_TYPE_WRAPPER;
+import com.jwk.spring.boot.modbus4j.ModbusMasterUtil;
+import com.serotonin.modbus4j.base.ModbusUtils;
+import com.serotonin.modbus4j.msg.ReadResponse;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Service;
 
+import static com.ruoyi.hard.xuankang.StirringTankClient.STIR_TANK_COMMAND.*;
+
 /**
  * 搅拌槽通讯客户端
  *
@@ -16,9 +22,362 @@ import org.springframework.stereotype.Service;
 @Slf4j
 @Service
 public class StirringTankClient {
+    //转换为bool数组
+    protected boolean[] convertToBooleans(Number num) {
+        int i = num.intValue();
+        String string = Integer.toBinaryString(i);
+        StringBuilder stringBuilder = new StringBuilder(string);
+        String string1 = stringBuilder.reverse().toString();
+        char[] chars = string1.toCharArray();
+        boolean[] booleans = new boolean[chars.length];
+        for (int j = 0; j < chars.length; j++) {
+            if (chars[j] == 49) {
+                booleans[j] = true;
+            } else {
+                booleans[j] = false;
+            }
+        }
+        return booleans;
+    }
 
 
+    /**
+     * 搅拌槽
+     */
     @Autowired(required = false)
     @Qualifier("modbusTcpMasterTemplateFirst")
     private ModbusTcpMasterTemplate modbusTcpMasterTemplateFirst;
+
+    /**
+     * 搅拌槽命令
+     */
+    public enum STIR_TANK_COMMAND {
+        //读碳酸钠液位
+        READ_THE_STIRRING_TANK_01(1, 100, 1, 0),
+        //读丁黄药液位
+        READ_THE_STIRRING_TANK_02(1, 101, 1, 0),
+        //读丁铵黑药液位
+        READ_THE_STIRRING_TANK_03(1, 102, 1, 0),
+        //读六偏磷酸钠液位
+        READ_THE_STIRRING_TANK_04(1, 103, 1, 0),
+        //读硫酸铵液位
+        READ_THE_STIRRING_TANK_05(1, 104, 1, 0),
+        //读乙黄药液位
+        READ_THE_STIRRING_TANK_06(1, 105, 1, 0),
+        //读碳酸钠药剂量
+        READ_THE_STIRRING_TANK_07(1, 106, 1, 0),
+        //读丁黄药药剂量
+        READ_THE_STIRRING_TANK_08(1, 107, 1, 0),
+        //读丁铵黑药药剂量
+        READ_THE_STIRRING_TANK_09(1, 108, 1, 0),
+        //读六偏磷酸钠药剂量
+        READ_THE_STIRRING_TANK_10(1, 109, 1, 0),
+        //读硫酸铵药剂量
+        READ_THE_STIRRING_TANK_11(1, 110, 1, 0),
+        //读乙黄药药剂量
+        READ_THE_STIRRING_TANK_12(1, 111, 1, 0),
+
+
+        //读仓库是否可以完成该剂量的注入标志位
+        READ_THE_STIRRING_TANK_13(1, 112, 1, 0),
+        //读药剂注入请求
+        READ_THE_STIRRING_TANK_14(1, 113, 1, 0),
+        //读搅拌槽运行
+        READ_THE_STIRRING_TANK_15(1, 114, 1, 0),
+        //读确认开始生产
+        READ_THE_STIRRING_TANK_16(1, 115, 1, 0),
+
+
+        //写仓库无法完成注药量
+        WRITE_THE_STIRRING_TANK_01(1, 0, 1, 0),
+        //写仓库确认可完成注药量
+        WRITE_THE_STIRRING_TANK_02(1, 1, 1, 1),
+        //写仓库收到请求已经开始注药
+        WRITE_THE_STIRRING_TANK_03(1, 2, 1, 1),
+        //写仓库注入失败
+        WRITE_THE_STIRRING_TANK_04(1, 3, 1, 0),
+        //写仓库注入成功
+        WRITE_THE_STIRRING_TANK_05(1, 4, 1, 1);
+
+        /**
+         * 从节点id
+         */
+        private int slaveId;
+        /**
+         * 地址
+         */
+        private int offset;
+        /**
+         * 读的长度
+         */
+        private int value;
+        /**
+         * 写的值
+         */
+        private int value1;
+
+        STIR_TANK_COMMAND(int slaveId, int offset, int value, int value1) {
+            this.slaveId = slaveId;
+            this.offset = offset;
+            this.value = value;
+            this.value1 = value1;
+        }
+
+        public int getSlaveId() {
+            return slaveId;
+        }
+
+        public int getOffset() {
+            return offset;
+        }
+
+        public int getValue() {
+            return value;
+        }
+
+        public int getValue1() {
+            return value1;
+        }
+    }
+
+    /**
+     * 读碳酸钠搅拌槽液位
+     *
+     * @return 搅拌槽液位 *100
+     */
+    public Number readTank01() {
+        Number number = read1(READ_THE_STIRRING_TANK_01.getSlaveId(), READ_THE_STIRRING_TANK_01.getOffset());
+        return number;
+    }
+
+
+    /**
+     * 读丁黄药搅拌槽液位
+     *
+     * @return
+     */
+    public Number readTank02() {
+        Number number = read1(READ_THE_STIRRING_TANK_02.getSlaveId(), READ_THE_STIRRING_TANK_02.getOffset());
+        return number;
+    }
+
+    /**
+     * 读丁铵黑药搅拌槽液位
+     *
+     * @return
+     */
+    public Number readTank03() {
+        Number number = read1(READ_THE_STIRRING_TANK_03.getSlaveId(), READ_THE_STIRRING_TANK_03.getOffset());
+        return number;
+    }
+
+    /**
+     * 读六偏磷酸钠搅拌槽液位
+     *
+     * @return
+     */
+    public Number readTank04() {
+        Number number = read1(READ_THE_STIRRING_TANK_04.getSlaveId(), READ_THE_STIRRING_TANK_04.getOffset());
+        return number;
+    }
+
+    /**
+     * 读硫酸铵搅拌槽液位
+     *
+     * @return
+     */
+    public Number readTank05() {
+        Number number = read1(READ_THE_STIRRING_TANK_05.getSlaveId(), READ_THE_STIRRING_TANK_05.getOffset());
+        return number;
+    }
+
+    /**
+     * 读乙黄药搅拌槽液位
+     *
+     * @return
+     */
+    public Number readTank06() {
+        Number number = read1(READ_THE_STIRRING_TANK_06.getSlaveId(), READ_THE_STIRRING_TANK_06.getOffset());
+        return number;
+    }
+
+    /**
+     * 读碳酸钠药剂量
+     *
+     * @return
+     */
+    public Number readTank07() {
+        Number number = read1(READ_THE_STIRRING_TANK_07.getSlaveId(), READ_THE_STIRRING_TANK_07.getOffset());
+        return number;
+    }
+
+    /**
+     * 读丁黄药药剂量
+     *
+     * @return
+     */
+    public Number readTank08() {
+        Number number = read1(READ_THE_STIRRING_TANK_08.getSlaveId(), READ_THE_STIRRING_TANK_08.getOffset());
+        return number;
+    }
+
+    /**
+     * 读丁铵黑药药剂量
+     *
+     * @return
+     */
+    public Number readTank09() {
+        Number number = read1(READ_THE_STIRRING_TANK_09.getSlaveId(), READ_THE_STIRRING_TANK_09.getOffset());
+        return number;
+    }
+
+    /**
+     * 读六偏磷酸钠药剂量
+     *
+     * @return
+     */
+    public Number readTank10() {
+        Number number = read1(READ_THE_STIRRING_TANK_10.getSlaveId(), READ_THE_STIRRING_TANK_10.getOffset());
+        return number;
+    }
+
+    /**
+     * 读硫酸铵药剂量
+     *
+     * @return
+     */
+    public Number readTank11() {
+        Number number = read1(READ_THE_STIRRING_TANK_11.getSlaveId(), READ_THE_STIRRING_TANK_11.getOffset());
+        return number;
+    }
+
+    /**
+     * 读乙黄药药剂量
+     *
+     * @return
+     */
+    public Number readTank12() {
+        Number number = read1(READ_THE_STIRRING_TANK_12.getSlaveId(), READ_THE_STIRRING_TANK_12.getOffset());
+        return number;
+    }
+
+    /**
+     * 读仓库是否可以完成该剂量的注入标志位
+     *
+     * @return
+     */
+    public boolean[] readTank13() {
+        Number number = read1(READ_THE_STIRRING_TANK_13.getSlaveId(), READ_THE_STIRRING_TANK_13.getOffset());
+        boolean[] booleans = convertToBooleans(number);
+        return booleans;
+    }
+
+
+    /**
+     * 读药剂注入请求
+     *
+     * @return
+     */
+    public boolean[] readTank14() {
+        Number number = read1(READ_THE_STIRRING_TANK_14.getSlaveId(), READ_THE_STIRRING_TANK_14.getOffset());
+        boolean[] booleans = convertToBooleans(number);
+        return booleans;
+    }
+
+    /**
+     * 读搅拌槽运行
+     *
+     * @return
+     */
+    public boolean[] readTank15() {
+        Number number = read1(READ_THE_STIRRING_TANK_15.getSlaveId(), READ_THE_STIRRING_TANK_15.getOffset());
+        boolean[] booleans = convertToBooleans(number);
+        return booleans;
+    }
+
+    /**
+     * 读确认开始生产
+     *
+     * @return
+     */
+    public boolean[] readTank16() {
+        Number number = read1(READ_THE_STIRRING_TANK_16.getSlaveId(), READ_THE_STIRRING_TANK_16.getOffset());
+        boolean[] booleans = convertToBooleans(number);
+        return booleans;
+    }
+
+
+    /**
+     * 写仓库无法完成注药量
+     *
+     * @return
+     */
+    public Boolean writeTank01() {
+        return write(WRITE_THE_STIRRING_TANK_01.getSlaveId(), WRITE_THE_STIRRING_TANK_01.getOffset(), WRITE_THE_STIRRING_TANK_01.getValue1());
+    }
+
+    /**
+     * 写仓库确认可完成注药
+     *
+     * @return
+     */
+    public Boolean writeTank02() {
+        return write(WRITE_THE_STIRRING_TANK_02.getSlaveId(), WRITE_THE_STIRRING_TANK_02.getOffset(), WRITE_THE_STIRRING_TANK_02.getValue1());
+    }
+
+    /**
+     * 写仓库收到请求已经开始注药
+     *
+     * @return
+     */
+    public Boolean writeTank03() {
+        return write(WRITE_THE_STIRRING_TANK_03.getSlaveId(), WRITE_THE_STIRRING_TANK_03.getOffset(), WRITE_THE_STIRRING_TANK_03.getValue1());
+    }
+
+    /**
+     * 写仓库注入失败
+     *
+     * @return
+     */
+    public Boolean writeTank04() {
+        return write(WRITE_THE_STIRRING_TANK_04.getSlaveId(), WRITE_THE_STIRRING_TANK_04.getOffset(), WRITE_THE_STIRRING_TANK_04.getValue1());
+    }
+
+    /**
+     * 写仓库注入成功
+     *
+     * @return
+     */
+    public Boolean writeTank05() {
+        return write(WRITE_THE_STIRRING_TANK_05.getSlaveId(), WRITE_THE_STIRRING_TANK_05.getOffset(), WRITE_THE_STIRRING_TANK_05.getValue1());
+    }
+
+
+    /**
+     * 读的方法
+     *
+     * @param slaveId
+     * @param offset
+     * @param len
+     * @return
+     */
+    private Number read1(int slaveId, int offset) {
+        ModbusMasterUtil modbusMasterUtil = modbusTcpMasterTemplateFirst.getModbusMasterUtil();
+        Number number = modbusMasterUtil.readHoldingRegister(slaveId, offset, DATA_TYPE_WRAPPER.TWO_BYTE_INT_UNSIGNED);
+        return number;
+    }
+
+    /**
+     * 写的方法
+     *
+     * @param slaveId
+     * @param offset
+     * @param value
+     * @return
+     */
+    private Boolean write(int slaveId, int offset, int value) {
+        ModbusMasterUtil modbusMasterUtil = modbusTcpMasterTemplateFirst.getModbusMasterUtil();
+        return modbusMasterUtil.writeHoldingRegisters(slaveId, offset, value);
+    }
+
 }