jwk 2 år sedan
förälder
incheckning
71dc75bd9a

+ 83 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/warewms/Test/ModbusTestController.java

@@ -0,0 +1,83 @@
+package com.ruoyi.web.controller.warewms.Test;
+
+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.ruoyi.common.core.domain.AjaxResult;
+import com.serotonin.modbus4j.msg.ReadResponse;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+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 2022/11/14 14:52
+ */
+@Api("Modbus测试")
+@RestController
+@RequestMapping("/api/modbus")
+public class ModbusTestController {
+
+    @Autowired
+    private ModbusTcpMasterTemplate modbusTcpMasterTemplate;
+
+    /**
+     * 自动门命令
+     */
+    public enum AUTOMATIC_DOOR_CODE {
+        /***
+         * 读门状态
+         */
+        RAED_STS(1, 0, 0),
+        /**
+         * 开门
+         */
+        WRITE_OPEN(1, 1, 1),
+        /**
+         * 关门
+         */
+        WRITE_CLOSE(1, 2, 1);
+        private int slaveId;
+        private int offset;
+        private int value;
+
+        AUTOMATIC_DOOR_CODE(int slaveId, int offset, int value) {
+            this.slaveId = slaveId;
+            this.offset = offset;
+            this.value = value;
+        }
+    }
+
+
+    /**
+     * 读保持寄存器
+     */
+    @ApiOperation("读取")
+    @PostMapping("/read")
+    public AjaxResult read(int slaveId, int offset, int value) {
+        ModbusMasterUtil modbusMasterUtil = modbusTcpMasterTemplate.getModbusMasterUtil();
+        if (value > 0) {
+            ReadResponse readResponse = modbusMasterUtil.readHoldingRegisters(slaveId, offset, value);
+            byte[] data = readResponse.getData();
+        }else {
+            Number number = modbusMasterUtil.readHoldingRegister(slaveId, offset,DATA_TYPE_WRAPPER.FOUR_BYTE_INT_SIGNED);
+            int i = number.intValue();
+        }
+        return AjaxResult.success();
+    }
+
+    /**
+     * 写保持寄存器
+     */
+    @ApiOperation("发送")
+    @PostMapping("/send")
+    public AjaxResult send(int slaveId, int offset, int value) {
+        ModbusMasterUtil modbusMasterUtil = modbusTcpMasterTemplate.getModbusMasterUtil();
+        Boolean aBoolean = modbusMasterUtil.writeHoldingRegisters(slaveId, offset, value);
+        return AjaxResult.success(aBoolean.toString());
+    }
+}

+ 7 - 0
ruoyi-admin/src/main/resources/application-dev.yml

@@ -67,3 +67,10 @@ logging:
     level:
         com.ruoyi: debug
         org.springframework: debug
+
+
+modbus:
+  tcp-master:
+      open: true
+      host: 127.0.0.1
+      port: 502

+ 5 - 4
ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java

@@ -20,7 +20,7 @@ import com.ruoyi.framework.security.handle.LogoutSuccessHandlerImpl;
 
 /**
  * spring security配置
- * 
+ *
  * @author ruoyi
  */
 @EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)
@@ -31,7 +31,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
      */
     @Autowired
     private UserDetailsService userDetailsService;
-    
+
     /**
      * 认证失败处理类
      */
@@ -49,13 +49,13 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
      */
     @Autowired
     private JwtAuthenticationTokenFilter authenticationTokenFilter;
-    
+
     /**
      * 跨域过滤器
      */
     @Autowired
     private CorsFilter corsFilter;
-    
+
     /**
      * 解决 无法直接注入 AuthenticationManager
      *
@@ -111,6 +111,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
                 .antMatchers("/swagger-resources/**").anonymous()
                 .antMatchers("/webjars/**").anonymous()
                 .antMatchers("/*/api-docs").anonymous()
+                .antMatchers("/api/**").anonymous()
                 .antMatchers("/druid/**").anonymous()
                 // 除上面外的所有请求全部需要鉴权认证
                 .anyRequest().authenticated()