win代码上传
parent
544204bca5
commit
1ecdd74611
|
|
@ -9,6 +9,8 @@ import com.ruoyi.common.core.domain.entity.SysRadar;
|
||||||
import com.ruoyi.common.core.page.PageDomain;
|
import com.ruoyi.common.core.page.PageDomain;
|
||||||
import com.ruoyi.common.core.page.TableDataInfo;
|
import com.ruoyi.common.core.page.TableDataInfo;
|
||||||
import com.ruoyi.common.core.page.TableSupport;
|
import com.ruoyi.common.core.page.TableSupport;
|
||||||
|
import com.ruoyi.common.utils.SocketModel;
|
||||||
|
import com.ruoyi.common.utils.SocketUtil;
|
||||||
import com.ruoyi.common.utils.StringUtils;
|
import com.ruoyi.common.utils.StringUtils;
|
||||||
import com.ruoyi.common.utils.bean.BeanUtils;
|
import com.ruoyi.common.utils.bean.BeanUtils;
|
||||||
import com.ruoyi.common.utils.bean.ModbusResponse;
|
import com.ruoyi.common.utils.bean.ModbusResponse;
|
||||||
|
|
@ -20,6 +22,8 @@ import com.ruoyi.system.service.PrimaryRadarDataService;
|
||||||
import com.ruoyi.system.service.impl.IdentifierStatusServiceImpl;
|
import com.ruoyi.system.service.impl.IdentifierStatusServiceImpl;
|
||||||
import com.ruoyi.web.core.config.RadarStatusWebSocket;
|
import com.ruoyi.web.core.config.RadarStatusWebSocket;
|
||||||
import com.serotonin.modbus4j.ModbusMaster;
|
import com.serotonin.modbus4j.ModbusMaster;
|
||||||
|
import lombok.Data;
|
||||||
|
import org.apache.commons.compress.utils.Lists;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
|
@ -27,8 +31,10 @@ import org.springframework.stereotype.Controller;
|
||||||
import org.springframework.ui.ModelMap;
|
import org.springframework.ui.ModelMap;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
import javax.xml.crypto.Data;
|
import java.io.IOException;
|
||||||
import java.net.Inet4Address;
|
import java.net.Inet4Address;
|
||||||
|
import java.net.Socket;
|
||||||
|
import java.net.UnknownHostException;
|
||||||
import java.sql.Connection;
|
import java.sql.Connection;
|
||||||
import java.sql.DriverManager;
|
import java.sql.DriverManager;
|
||||||
import java.sql.ResultSet;
|
import java.sql.ResultSet;
|
||||||
|
|
@ -66,34 +72,37 @@ public class RadarStatusController {
|
||||||
return prefix + "/radarstatus";
|
return prefix + "/radarstatus";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@PostMapping("/list")
|
@PostMapping("/list")
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public TableDataInfo list(@RequestBody SysRadar sysRadar) {
|
public TableDataInfo list(@RequestBody SysRadar sysRadar) {
|
||||||
TableDataInfo rspData = new TableDataInfo();
|
TableDataInfo rspData = new TableDataInfo();
|
||||||
List<SysRadar> radarList = service.selectRadarList(sysRadar);
|
List<SysRadar> radarList = service.selectRadarList(sysRadar);
|
||||||
// 异步连接硬件
|
|
||||||
CompletableFuture<List<ModbusResponse>> listCompletableFuture = CompletableFuture.supplyAsync(() -> {
|
List<SocketModel> socketModels = Lists.newArrayList();
|
||||||
List<ModbusResponse> responses = new ArrayList<>();
|
for (SysRadar radar : radarList) {
|
||||||
final ConnectionStatus connectionStatus = new ConnectionStatus();
|
try {
|
||||||
|
Socket socket = new Socket(radar.getRadarIp(), 23);
|
||||||
|
SocketModel socketModel = new SocketModel();
|
||||||
|
socketModel.setRadarLocation(radar.getRadarLocation());
|
||||||
|
socketModel.setSocket(socket);
|
||||||
|
socketModel.setRadarIp(radar.getRadarIp());
|
||||||
|
socketModels.add(socketModel);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Timer timer = new Timer();
|
Timer timer = new Timer();
|
||||||
boolean connected = false;
|
|
||||||
TimerTask task = new TimerTask() {
|
TimerTask task = new TimerTask() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
|
socketModels.forEach(socketModel -> {
|
||||||
for (SysRadar radar : radarList) {
|
|
||||||
System.out.println("=======radar=====");
|
|
||||||
try {
|
try {
|
||||||
// ModbusResponse modbusResponse = new ModbusResponse();
|
DataResponse data = SocketUtil.getData(socketModel);
|
||||||
ModbusMaster master = ModbusUtils.getSlave(radar.getRadarIp(), 23);
|
System.out.println(socketModel.getRadarIp() +": "+ data);
|
||||||
DataResponse dataResponse = new DataResponse();
|
ModbusResponse modbusResponse = getModbusResponse(data);
|
||||||
dataResponse.setRadarIp(radar.getRadarIp());
|
|
||||||
System.out.println(radar.getRadarIp());
|
|
||||||
ModbusResponse modbusResponse = ModbusUtils.holdingRegister();
|
|
||||||
if (modbusResponse == null){
|
|
||||||
dataResponse.setStatus(0);
|
|
||||||
}
|
|
||||||
System.out.println(modbusResponse);
|
|
||||||
String tag = modbusResponse.getTagId();
|
String tag = modbusResponse.getTagId();
|
||||||
PrimaryRadarData primaryRadarData = new PrimaryRadarData();
|
PrimaryRadarData primaryRadarData = new PrimaryRadarData();
|
||||||
SysIdentifier sysIdentifier = new SysIdentifier();
|
SysIdentifier sysIdentifier = new SysIdentifier();
|
||||||
|
|
@ -101,41 +110,93 @@ public class RadarStatusController {
|
||||||
if (!"0".equals(modbusResponse.getTagId())) {
|
if (!"0".equals(modbusResponse.getTagId())) {
|
||||||
sysIdentifier = identifierService.selectIdentifierByTag(tag);
|
sysIdentifier = identifierService.selectIdentifierByTag(tag);
|
||||||
primaryRadarData.setLadleNumber(sysIdentifier.getLadleNumber());
|
primaryRadarData.setLadleNumber(sysIdentifier.getLadleNumber());
|
||||||
primaryRadarData.setRadarLocation(radar.getRadarLocation());
|
primaryRadarData.setRadarLocation(socketModel.getRadarLocation());
|
||||||
primaryRadarData.setRadarIp(radar.getRadarIp());
|
primaryRadarData.setRadarIp(socketModel.getRadarIp());
|
||||||
} else {
|
} else {
|
||||||
primaryRadarData.setLadleNumber(null);
|
primaryRadarData.setLadleNumber(null);
|
||||||
primaryRadarData.setRadarLocation(null);
|
primaryRadarData.setRadarLocation(null);
|
||||||
primaryRadarData.setRadarIp(radar.getRadarIp());
|
primaryRadarData.setRadarIp(socketModel.getRadarIp());
|
||||||
}
|
}
|
||||||
dataResponse.setRadarLocation(primaryRadarData.getRadarLocation());
|
|
||||||
String ip = Inet4Address.getLocalHost().getHostAddress();
|
String ip = Inet4Address.getLocalHost().getHostAddress();
|
||||||
if (modbusResponse.getValue4() != null && !"0".equals(modbusResponse.getValue4())) {
|
if (modbusResponse.getValue4() != null && !"0".equals(modbusResponse.getValue4())) {
|
||||||
primaryRadarDataService.insertPrimaryRadarData(primaryRadarData);
|
primaryRadarDataService.insertPrimaryRadarData(primaryRadarData);
|
||||||
dataResponse.setStatus(1);
|
|
||||||
dataResponse.setRadarLocation(primaryRadarData.getRadarLocation());
|
|
||||||
} else {
|
} else {
|
||||||
dataResponse.setStatus(0);
|
|
||||||
}
|
|
||||||
RadarStatusWebSocket.sendToAll(JSON.toJSONString(dataResponse));
|
|
||||||
}catch (Exception e) {
|
|
||||||
if (e.equals("java.net.SocketTimeoutException: connect timed out")) {
|
|
||||||
System.err.println("从串口读取失败:" + "连接超时");
|
|
||||||
}
|
|
||||||
DataResponse dataResponse = new DataResponse();
|
|
||||||
dataResponse.setRadarIp(radar.getRadarIp());
|
|
||||||
dataResponse.setRadarLocation(radar.getRadarLocation());
|
|
||||||
dataResponse.setStatus(0);
|
|
||||||
RadarStatusWebSocket.sendToAll(JSON.toJSONString(dataResponse));
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
}
|
||||||
|
RadarStatusWebSocket.sendToAll(JSON.toJSONString(data));
|
||||||
|
} catch (Exception e) {
|
||||||
|
// if (e.equals("java.net.SocketTimeoutException: connect timed out")) {
|
||||||
|
// System.err.println("从串口读取失败:" + "连接超时");
|
||||||
|
// }
|
||||||
|
// DataResponse dataResponse = new DataResponse();
|
||||||
|
// dataResponse.setRadarIp(radar.getRadarIp());
|
||||||
|
// dataResponse.setRadarLocation(radar.getRadarLocation());
|
||||||
|
// dataResponse.setStatus(0);
|
||||||
|
// RadarStatusWebSocket.sendToAll(JSON.toJSONString(dataResponse));
|
||||||
|
// e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
timer.scheduleAtFixedRate(task, 1, 1000);
|
timer.scheduleAtFixedRate(task, 1, 1000);
|
||||||
|
|
||||||
return responses;
|
|
||||||
});
|
|
||||||
|
// 异步连接硬件
|
||||||
|
// CompletableFuture<List<ModbusResponse>> listCompletableFuture = CompletableFuture.supplyAsync(() -> {
|
||||||
|
// List<ModbusResponse> responses = new ArrayList<>();
|
||||||
|
// final ConnectionStatus connectionStatus = new ConnectionStatus();
|
||||||
|
// Timer timer = new Timer();
|
||||||
|
// boolean connected = false;
|
||||||
|
// TimerTask task = new TimerTask() {
|
||||||
|
// @Override
|
||||||
|
// public void run() {
|
||||||
|
//
|
||||||
|
// for (SysRadar radar : radarList) {
|
||||||
|
// System.out.println("=======radar=====" + radar.getRadarIp());
|
||||||
|
// try {
|
||||||
|
// DataResponse data = SocketUtil.getData(radar.getRadarIp(), 23, radar.getRadarLocation());
|
||||||
|
// System.out.println(radar.getRadarIp() +": "+ data);
|
||||||
|
// ModbusResponse modbusResponse = getModbusResponse(data);
|
||||||
|
// String tag = modbusResponse.getTagId();
|
||||||
|
// PrimaryRadarData primaryRadarData = new PrimaryRadarData();
|
||||||
|
// SysIdentifier sysIdentifier = new SysIdentifier();
|
||||||
|
// BeanUtils.copyProperties(modbusResponse, primaryRadarData);
|
||||||
|
// if (!"0".equals(modbusResponse.getTagId())) {
|
||||||
|
// sysIdentifier = identifierService.selectIdentifierByTag(tag);
|
||||||
|
// primaryRadarData.setLadleNumber(sysIdentifier.getLadleNumber());
|
||||||
|
// primaryRadarData.setRadarLocation(radar.getRadarLocation());
|
||||||
|
// primaryRadarData.setRadarIp(radar.getRadarIp());
|
||||||
|
// } else {
|
||||||
|
// primaryRadarData.setLadleNumber(null);
|
||||||
|
// primaryRadarData.setRadarLocation(null);
|
||||||
|
// primaryRadarData.setRadarIp(radar.getRadarIp());
|
||||||
|
// }
|
||||||
|
// String ip = Inet4Address.getLocalHost().getHostAddress();
|
||||||
|
// if (modbusResponse.getValue4() != null && !"0".equals(modbusResponse.getValue4())) {
|
||||||
|
// primaryRadarDataService.insertPrimaryRadarData(primaryRadarData);
|
||||||
|
// } else {
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
// RadarStatusWebSocket.sendToAll(JSON.toJSONString(data));
|
||||||
|
// } catch (Exception e) {
|
||||||
|
//// if (e.equals("java.net.SocketTimeoutException: connect timed out")) {
|
||||||
|
//// System.err.println("从串口读取失败:" + "连接超时");
|
||||||
|
//// }
|
||||||
|
//// DataResponse dataResponse = new DataResponse();
|
||||||
|
//// dataResponse.setRadarIp(radar.getRadarIp());
|
||||||
|
//// dataResponse.setRadarLocation(radar.getRadarLocation());
|
||||||
|
//// dataResponse.setStatus(0);
|
||||||
|
//// RadarStatusWebSocket.sendToAll(JSON.toJSONString(dataResponse));
|
||||||
|
//// e.printStackTrace();
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// };
|
||||||
|
// timer.scheduleAtFixedRate(task, 1, 10000);
|
||||||
|
//
|
||||||
|
// return responses;
|
||||||
|
// });
|
||||||
PageDomain pageDomain = TableSupport.buildPageRequest();
|
PageDomain pageDomain = TableSupport.buildPageRequest();
|
||||||
if (null == pageDomain.getPageNum() || null == pageDomain.getPageSize()) {
|
if (null == pageDomain.getPageNum() || null == pageDomain.getPageSize()) {
|
||||||
rspData.setRows(radarList);
|
rspData.setRows(radarList);
|
||||||
|
|
@ -154,6 +215,21 @@ public class RadarStatusController {
|
||||||
return rspData;
|
return rspData;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static ModbusResponse getModbusResponse(DataResponse data) {
|
||||||
|
ModbusResponse modbusResponse = new ModbusResponse();
|
||||||
|
modbusResponse.setRadarNum(data.getData().get(0).toString());
|
||||||
|
modbusResponse.setTagId(data.getData().get(3).toString());
|
||||||
|
modbusResponse.setValue1(data.getData().get(4));
|
||||||
|
modbusResponse.setValue2(data.getData().get(5));
|
||||||
|
modbusResponse.setValue3(data.getData().get(6));
|
||||||
|
modbusResponse.setValue4(data.getData().get(7));
|
||||||
|
modbusResponse.setValue5(data.getData().get(8));
|
||||||
|
modbusResponse.setBaseLine(data.getData().get(9));
|
||||||
|
modbusResponse.setQueryFre(data.getData().get(10));
|
||||||
|
modbusResponse.setNumber(data.getData().get(11));
|
||||||
|
return modbusResponse;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
class ConnectionStatus {
|
class ConnectionStatus {
|
||||||
boolean connected = false;
|
boolean connected = false;
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ package com.ruoyi.common.core.domain.entity;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
public class DataResponse implements Serializable {
|
public class DataResponse implements Serializable {
|
||||||
|
|
@ -23,13 +24,6 @@ public class DataResponse implements Serializable {
|
||||||
*/
|
*/
|
||||||
private Integer status = 0 ;
|
private Integer status = 0 ;
|
||||||
|
|
||||||
|
private List<Integer> data;
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return "DataResponse{" +
|
|
||||||
"radarIp='" + radarIp + '\'' +
|
|
||||||
", radarLocation='" + radarLocation + '\'' +
|
|
||||||
", status='" + status + '\'' +
|
|
||||||
'}';
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,57 @@
|
||||||
|
package com.ruoyi.common.utils;
|
||||||
|
|
||||||
|
import com.serotonin.modbus4j.BatchResults;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class BitUtils {
|
||||||
|
|
||||||
|
public static List<String> convertToArray(String string) {
|
||||||
|
int[] groupLengths = {2, 2, 2, 8, 4, 4, 4, 4, 4, 4, 4,4,4};
|
||||||
|
int startIndex = 0;
|
||||||
|
List<String> array = new ArrayList<>();
|
||||||
|
|
||||||
|
for (int length : groupLengths) {
|
||||||
|
int endIndex = startIndex + length;
|
||||||
|
String substring = string.substring(startIndex, endIndex);
|
||||||
|
array.add(substring);
|
||||||
|
startIndex = endIndex;
|
||||||
|
}
|
||||||
|
|
||||||
|
return array;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int covert(String content) {
|
||||||
|
int number = 0;
|
||||||
|
String[] HighLetter = {"a", "b", "c", "d", "e", "f"};
|
||||||
|
Map<String, Integer> map = new HashMap<>();
|
||||||
|
for (int i = 0; i <= 9; i++) {
|
||||||
|
map.put(i + "", i);
|
||||||
|
}
|
||||||
|
for (int j = 10; j < HighLetter.length + 10; j++) {
|
||||||
|
map.put(HighLetter[j - 10], j);
|
||||||
|
}
|
||||||
|
String[] str = new String[content.length()];
|
||||||
|
for (int i = 0; i < str.length; i++) {
|
||||||
|
str[i] = content.substring(i, i + 1);
|
||||||
|
}
|
||||||
|
for (int i = 0; i < str.length; i++) {
|
||||||
|
number += map.get(str[i]) * Math.pow(16, str.length - 1 - i);
|
||||||
|
}
|
||||||
|
return number;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int covertInt(BatchResults<Integer> integerBatchResults){
|
||||||
|
Object value1 = integerBatchResults.getValue(0);
|
||||||
|
Object value2 = integerBatchResults.getValue(1);
|
||||||
|
String hex1String = Integer.toHexString(Integer.parseInt(value1.toString()));
|
||||||
|
String hex2String = Integer.toHexString(Integer.parseInt(value2.toString()));
|
||||||
|
String hex = hex1String + hex2String;
|
||||||
|
|
||||||
|
return (covert(hex));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
package com.ruoyi.common.utils;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.net.Socket;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class SocketModel {
|
||||||
|
private String radarIp;
|
||||||
|
|
||||||
|
private String radarLocation;
|
||||||
|
|
||||||
|
private Socket socket;
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,60 @@
|
||||||
|
package com.ruoyi.common.utils;
|
||||||
|
|
||||||
|
import com.ruoyi.common.core.domain.entity.DataResponse;
|
||||||
|
|
||||||
|
import java.io.DataInputStream;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.math.BigInteger;
|
||||||
|
import java.net.InetSocketAddress;
|
||||||
|
import java.net.Socket;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class SocketUtil {
|
||||||
|
|
||||||
|
public static DataResponse getData(SocketModel socketModel) {
|
||||||
|
DataResponse dataResponse = new DataResponse();
|
||||||
|
Socket socket = socketModel.getSocket();
|
||||||
|
String radarLocation = socketModel.getRadarLocation();
|
||||||
|
String radarIp = socketModel.getRadarIp();
|
||||||
|
try {
|
||||||
|
boolean connected = socket.isConnected();
|
||||||
|
|
||||||
|
if (!connected) {
|
||||||
|
System.out.println(radarLocation+": "+connected);
|
||||||
|
dataResponse.setRadarIp(radarIp);
|
||||||
|
dataResponse.setRadarLocation(radarLocation);
|
||||||
|
dataResponse.setStatus(1);
|
||||||
|
dataResponse.setData(null);
|
||||||
|
return dataResponse;
|
||||||
|
}
|
||||||
|
|
||||||
|
InputStream inputStream = socket.getInputStream(); // 获取输入流
|
||||||
|
int available = inputStream.available();
|
||||||
|
byte[] buffer = new byte[available];
|
||||||
|
inputStream.read(buffer, 0, available);
|
||||||
|
String hex = new BigInteger(1, buffer).toString(16);
|
||||||
|
if (!"0".equals(hex)) {
|
||||||
|
hex = "0" + hex;
|
||||||
|
List<Integer> decimal = new ArrayList<>();
|
||||||
|
List<String> strings = BitUtils.convertToArray(hex);
|
||||||
|
for (String string : strings) {
|
||||||
|
int s = BitUtils.covert(string);
|
||||||
|
decimal.add(s);
|
||||||
|
}
|
||||||
|
dataResponse.setData(decimal);
|
||||||
|
dataResponse.setRadarIp(radarIp);
|
||||||
|
dataResponse.setStatus(1);
|
||||||
|
dataResponse.setRadarLocation(radarLocation);
|
||||||
|
return dataResponse;
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
System.out.println("读取数据异常:"+radarIp);
|
||||||
|
}
|
||||||
|
dataResponse.setRadarIp(radarIp);
|
||||||
|
dataResponse.setRadarLocation(radarLocation);
|
||||||
|
dataResponse.setStatus(0);
|
||||||
|
dataResponse.setData(null);
|
||||||
|
return dataResponse;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -5,6 +5,11 @@ import lombok.Data;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
public class ModbusResponse {
|
public class ModbusResponse {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 雷达id
|
||||||
|
*/
|
||||||
|
private String radarNum;
|
||||||
/**
|
/**
|
||||||
* 标签id号
|
* 标签id号
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,7 @@ public class ModbusUtils {
|
||||||
// 发送请求之前获取写锁
|
// 发送请求之前获取写锁
|
||||||
lock.readLock().lock();
|
lock.readLock().lock();
|
||||||
BatchResults<Integer> integerBatchResults = master.send(batch);
|
BatchResults<Integer> integerBatchResults = master.send(batch);
|
||||||
|
// log.error("读取的内容:{}",integerBatchResults);
|
||||||
// 当接收到响应时释放写锁
|
// 当接收到响应时释放写锁
|
||||||
lock.readLock().unlock();
|
lock.readLock().unlock();
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue