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.TableDataInfo;
|
||||
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.bean.BeanUtils;
|
||||
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.web.core.config.RadarStatusWebSocket;
|
||||
import com.serotonin.modbus4j.ModbusMaster;
|
||||
import lombok.Data;
|
||||
import org.apache.commons.compress.utils.Lists;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
|
@ -27,8 +31,10 @@ import org.springframework.stereotype.Controller;
|
|||
import org.springframework.ui.ModelMap;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.xml.crypto.Data;
|
||||
import java.io.IOException;
|
||||
import java.net.Inet4Address;
|
||||
import java.net.Socket;
|
||||
import java.net.UnknownHostException;
|
||||
import java.sql.Connection;
|
||||
import java.sql.DriverManager;
|
||||
import java.sql.ResultSet;
|
||||
|
|
@ -66,34 +72,37 @@ public class RadarStatusController {
|
|||
return prefix + "/radarstatus";
|
||||
}
|
||||
|
||||
|
||||
|
||||
@PostMapping("/list")
|
||||
@ResponseBody
|
||||
public TableDataInfo list(@RequestBody SysRadar sysRadar) {
|
||||
TableDataInfo rspData = new TableDataInfo();
|
||||
List<SysRadar> radarList = service.selectRadarList(sysRadar);
|
||||
// 异步连接硬件
|
||||
CompletableFuture<List<ModbusResponse>> listCompletableFuture = CompletableFuture.supplyAsync(() -> {
|
||||
List<ModbusResponse> responses = new ArrayList<>();
|
||||
final ConnectionStatus connectionStatus = new ConnectionStatus();
|
||||
Timer timer = new Timer();
|
||||
boolean connected = false;
|
||||
|
||||
List<SocketModel> socketModels = Lists.newArrayList();
|
||||
for (SysRadar radar : radarList) {
|
||||
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();
|
||||
TimerTask task = new TimerTask() {
|
||||
@Override
|
||||
public void run() {
|
||||
|
||||
for (SysRadar radar : radarList) {
|
||||
System.out.println("=======radar=====");
|
||||
try {
|
||||
// ModbusResponse modbusResponse = new ModbusResponse();
|
||||
ModbusMaster master = ModbusUtils.getSlave(radar.getRadarIp(), 23);
|
||||
DataResponse dataResponse = new DataResponse();
|
||||
dataResponse.setRadarIp(radar.getRadarIp());
|
||||
System.out.println(radar.getRadarIp());
|
||||
ModbusResponse modbusResponse = ModbusUtils.holdingRegister();
|
||||
if (modbusResponse == null){
|
||||
dataResponse.setStatus(0);
|
||||
}
|
||||
System.out.println(modbusResponse);
|
||||
socketModels.forEach(socketModel -> {
|
||||
try {
|
||||
DataResponse data = SocketUtil.getData(socketModel);
|
||||
System.out.println(socketModel.getRadarIp() +": "+ data);
|
||||
ModbusResponse modbusResponse = getModbusResponse(data);
|
||||
String tag = modbusResponse.getTagId();
|
||||
PrimaryRadarData primaryRadarData = new PrimaryRadarData();
|
||||
SysIdentifier sysIdentifier = new SysIdentifier();
|
||||
|
|
@ -101,41 +110,93 @@ public class RadarStatusController {
|
|||
if (!"0".equals(modbusResponse.getTagId())) {
|
||||
sysIdentifier = identifierService.selectIdentifierByTag(tag);
|
||||
primaryRadarData.setLadleNumber(sysIdentifier.getLadleNumber());
|
||||
primaryRadarData.setRadarLocation(radar.getRadarLocation());
|
||||
primaryRadarData.setRadarIp(radar.getRadarIp());
|
||||
primaryRadarData.setRadarLocation(socketModel.getRadarLocation());
|
||||
primaryRadarData.setRadarIp(socketModel.getRadarIp());
|
||||
} else {
|
||||
primaryRadarData.setLadleNumber(null);
|
||||
primaryRadarData.setRadarLocation(null);
|
||||
primaryRadarData.setRadarIp(radar.getRadarIp());
|
||||
primaryRadarData.setRadarIp(socketModel.getRadarIp());
|
||||
}
|
||||
dataResponse.setRadarLocation(primaryRadarData.getRadarLocation());
|
||||
String ip = Inet4Address.getLocalHost().getHostAddress();
|
||||
if (modbusResponse.getValue4() != null && !"0".equals(modbusResponse.getValue4())) {
|
||||
primaryRadarDataService.insertPrimaryRadarData(primaryRadarData);
|
||||
dataResponse.setStatus(1);
|
||||
dataResponse.setRadarLocation(primaryRadarData.getRadarLocation());
|
||||
} 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);
|
||||
|
||||
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();
|
||||
if (null == pageDomain.getPageNum() || null == pageDomain.getPageSize()) {
|
||||
rspData.setRows(radarList);
|
||||
|
|
@ -154,6 +215,21 @@ public class RadarStatusController {
|
|||
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 {
|
||||
boolean connected = false;
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ package com.ruoyi.common.core.domain.entity;
|
|||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class DataResponse implements Serializable {
|
||||
|
|
@ -23,13 +24,6 @@ public class DataResponse implements Serializable {
|
|||
*/
|
||||
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
|
||||
public class ModbusResponse {
|
||||
|
||||
/**
|
||||
* 雷达id
|
||||
*/
|
||||
private String radarNum;
|
||||
/**
|
||||
* 标签id号
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ public class ModbusUtils {
|
|||
// 发送请求之前获取写锁
|
||||
lock.readLock().lock();
|
||||
BatchResults<Integer> integerBatchResults = master.send(batch);
|
||||
|
||||
// log.error("读取的内容:{}",integerBatchResults);
|
||||
// 当接收到响应时释放写锁
|
||||
lock.readLock().unlock();
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue