diff --git a/ruoyi-modules/hw-business/pom.xml b/ruoyi-modules/hw-business/pom.xml
index 6bd0a2f..2958a94 100644
--- a/ruoyi-modules/hw-business/pom.xml
+++ b/ruoyi-modules/hw-business/pom.xml
@@ -83,6 +83,13 @@
com.ruoyi
ruoyi-common-datascope
+
+
+ org.apache.plc4x
+ plc4j-driver-ethernet-ip
+ 0.6.0
+
+
diff --git a/ruoyi-modules/hw-business/src/main/java/com/ruoyi/business/controller/PlcDeviceController.java b/ruoyi-modules/hw-business/src/main/java/com/ruoyi/business/controller/PlcDeviceController.java
index a45ee4a..a3363e2 100644
--- a/ruoyi-modules/hw-business/src/main/java/com/ruoyi/business/controller/PlcDeviceController.java
+++ b/ruoyi-modules/hw-business/src/main/java/com/ruoyi/business/controller/PlcDeviceController.java
@@ -10,6 +10,7 @@ import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.web.page.TableDataInfo;
import com.ruoyi.common.security.utils.SecurityUtils;
+import org.apache.plc4x.java.api.exceptions.PlcConnectionException;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.http.ResponseEntity;
@@ -19,6 +20,7 @@ import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
+import java.util.concurrent.ExecutionException;
/**
* plc设备信息(PlcDevice)表控制层
@@ -120,9 +122,9 @@ public class PlcDeviceController extends BaseController {
public AjaxResult aeDataProcess() throws JsonProcessingException {
return AjaxResult.success(plcDeviceService.aeDataProcess());
}
- @GetMapping("/linkDataProcess")
- public AjaxResult linkDataProcess() throws JsonProcessingException {
- return AjaxResult.success(plcDeviceService.linkDataProcess());
+ @GetMapping("/ehternetDataProcess")
+ public AjaxResult ehternetDataProcess() throws JsonProcessingException{
+ return AjaxResult.success(plcDeviceService.ehternetDataProcess());
}
@GetMapping("/list")
public TableDataInfo list(PlcDevice hwDevice) {
diff --git a/ruoyi-modules/hw-business/src/main/java/com/ruoyi/business/mapper/PlcDeviceDao.java b/ruoyi-modules/hw-business/src/main/java/com/ruoyi/business/mapper/PlcDeviceDao.java
new file mode 100644
index 0000000..539d704
--- /dev/null
+++ b/ruoyi-modules/hw-business/src/main/java/com/ruoyi/business/mapper/PlcDeviceDao.java
@@ -0,0 +1,91 @@
+package com.ruoyi.business.mapper;
+
+import com.ruoyi.business.domain.PlcDevice;
+import com.ruoyi.business.domain.PlcDeviceMode;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.data.domain.Pageable;
+
+import java.util.List;
+
+/**
+ * plc设备信息(PlcDevice)表数据库访问层
+ *
+ * @author makejava
+ * @since 2024-12-19 16:22:43
+ */
+public interface PlcDeviceDao {
+
+ /**
+ * 通过ID查询单条数据
+ *
+ * @param deviceId 主键
+ * @return 实例对象
+ */
+ List queryById();
+ List queryPlcDevices(@Param("accessProtocol") int accessProtocol);
+
+ /**
+ * 查询指定行数据
+ *
+ * @param plcDevice 查询条件
+ * @param pageable 分页对象
+ * @return 对象列表
+ */
+ List queryAllByLimit(PlcDevice plcDevice, @Param("pageable") Pageable pageable);
+
+ /**
+ * 统计总行数
+ *
+ * @param plcDevice 查询条件
+ * @return 总行数
+ */
+ long count(PlcDevice plcDevice);
+
+ /**
+ * 新增数据
+ *
+ * @param plcDevice 实例对象
+ * @return 影响行数
+ */
+ int insert(PlcDevice plcDevice);
+
+ /**
+ * 批量新增数据(MyBatis原生foreach方法)
+ *
+ * @param entities List 实例对象列表
+ * @return 影响行数
+ */
+ int insertBatch(@Param("entities") List entities);
+
+ /**
+ * 批量新增或按主键更新数据(MyBatis原生foreach方法)
+ *
+ * @param entities List 实例对象列表
+ * @return 影响行数
+ * @throws org.springframework.jdbc.BadSqlGrammarException 入参是空List的时候会抛SQL语句错误的异常,请自行校验入参
+ */
+ int insertOrUpdateBatch(@Param("entities") List entities);
+
+ /**
+ * 修改数据
+ *
+ * @param plcDevice 实例对象
+ * @return 影响行数
+ */
+ int update(PlcDevice plcDevice);
+
+ /**
+ * 通过主键删除数据
+ *
+ * @param deviceId 主键
+ * @return 影响行数
+ */
+ int deleteById(Long deviceId);
+
+ List selectHwDeviceJoinList(PlcDevice hwDevice);
+
+ List selectPlcDeviceMode(PlcDeviceMode queryDeviceMode);
+
+ PlcDevice selectHwDeviceByDeviceId(Long deviceId);
+}
+
diff --git a/ruoyi-modules/hw-business/src/main/java/com/ruoyi/business/mapper/PlcDeviceModeDao.java b/ruoyi-modules/hw-business/src/main/java/com/ruoyi/business/mapper/PlcDeviceModeDao.java
new file mode 100644
index 0000000..d59f167
--- /dev/null
+++ b/ruoyi-modules/hw-business/src/main/java/com/ruoyi/business/mapper/PlcDeviceModeDao.java
@@ -0,0 +1,88 @@
+package com.ruoyi.business.mapper;
+
+import com.ruoyi.business.domain.HwDeviceMode;
+import com.ruoyi.business.domain.PlcDeviceMode;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.data.domain.Pageable;
+
+import java.util.List;
+
+/**
+ * plc设备模型(PlcDeviceMode)表数据库访问层
+ *
+ * @author makejava
+ * @since 2024-12-19 16:23:27
+ */
+public interface PlcDeviceModeDao {
+
+ /**
+ * 通过ID查询单条数据
+ *
+ * @param deviceModeId 主键
+ * @return 实例对象
+ */
+ PlcDeviceMode queryById(Long deviceModeId);
+
+ /**
+ * 查询指定行数据
+ *
+ * @param plcDeviceMode 查询条件
+ * @param pageable 分页对象
+ * @return 对象列表
+ */
+ List queryAllByLimit(PlcDeviceMode plcDeviceMode, @Param("pageable") Pageable pageable);
+
+ /**
+ * 统计总行数
+ *
+ * @param plcDeviceMode 查询条件
+ * @return 总行数
+ */
+ long count(PlcDeviceMode plcDeviceMode);
+
+ /**
+ * 新增数据
+ *
+ * @param plcDeviceMode 实例对象
+ * @return 影响行数
+ */
+ int insert(PlcDeviceMode plcDeviceMode);
+
+ /**
+ * 批量新增数据(MyBatis原生foreach方法)
+ *
+ * @param entities List 实例对象列表
+ * @return 影响行数
+ */
+ int insertBatch(@Param("entities") List entities);
+
+ /**
+ * 批量新增或按主键更新数据(MyBatis原生foreach方法)
+ *
+ * @param entities List 实例对象列表
+ * @return 影响行数
+ * @throws org.springframework.jdbc.BadSqlGrammarException 入参是空List的时候会抛SQL语句错误的异常,请自行校验入参
+ */
+ int insertOrUpdateBatch(@Param("entities") List entities);
+
+ /**
+ * 修改数据
+ *
+ * @param plcDeviceMode 实例对象
+ * @return 影响行数
+ */
+ int update(PlcDeviceMode plcDeviceMode);
+
+ /**
+ * 通过主键删除数据
+ *
+ * @param deviceModeId 主键
+ * @return 影响行数
+ */
+ int deleteById(Long deviceModeId);
+
+ List selectList(PlcDeviceMode hwDeviceMode);
+
+ int deleteHwDeviceModeByDeviceModeIds(Long[] deviceModeIds);
+}
+
diff --git a/ruoyi-modules/hw-business/src/main/java/com/ruoyi/business/mapper/PlcDeviceModeFunctionDao.java b/ruoyi-modules/hw-business/src/main/java/com/ruoyi/business/mapper/PlcDeviceModeFunctionDao.java
new file mode 100644
index 0000000..3f68365
--- /dev/null
+++ b/ruoyi-modules/hw-business/src/main/java/com/ruoyi/business/mapper/PlcDeviceModeFunctionDao.java
@@ -0,0 +1,94 @@
+package com.ruoyi.business.mapper;
+
+import com.ruoyi.business.domain.HwDeviceModeFunction;
+import com.ruoyi.business.domain.PlcDeviceModeFunction;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.data.domain.Pageable;
+
+import java.util.List;
+
+/**
+ * plc设备模型功能(PlcDeviceModeFunction)表数据库访问层
+ *
+ * @author makejava
+ * @since 2024-12-19 16:23:52
+ */
+public interface PlcDeviceModeFunctionDao {
+
+ /**
+ * 通过ID查询单条数据
+ *
+ * @param modeFunctionId 主键
+ * @return 实例对象
+ */
+ PlcDeviceModeFunction queryById(Long modeFunctionId);
+
+ /**
+ * 查询指定行数据
+ *
+ * @param plcDeviceModeFunction 查询条件
+ * @param pageable 分页对象
+ * @return 对象列表
+ */
+ List queryAllByLimit(PlcDeviceModeFunction plcDeviceModeFunction, @Param("pageable") Pageable pageable);
+
+ /**
+ * 统计总行数
+ *
+ * @param plcDeviceModeFunction 查询条件
+ * @return 总行数
+ */
+ long count(PlcDeviceModeFunction plcDeviceModeFunction);
+
+ /**
+ * 新增数据
+ *
+ * @param plcDeviceModeFunction 实例对象
+ * @return 影响行数
+ */
+ int insert(PlcDeviceModeFunction plcDeviceModeFunction);
+
+ /**
+ * 批量新增数据(MyBatis原生foreach方法)
+ *
+ * @param entities List 实例对象列表
+ * @return 影响行数
+ */
+ int insertBatch(@Param("entities") List entities);
+
+ /**
+ * 批量新增或按主键更新数据(MyBatis原生foreach方法)
+ *
+ * @param entities List 实例对象列表
+ * @return 影响行数
+ * @throws org.springframework.jdbc.BadSqlGrammarException 入参是空List的时候会抛SQL语句错误的异常,请自行校验入参
+ */
+ int insertOrUpdateBatch(@Param("entities") List entities);
+
+ /**
+ * 修改数据
+ *
+ * @param plcDeviceModeFunction 实例对象
+ * @return 影响行数
+ */
+ int update(PlcDeviceModeFunction plcDeviceModeFunction);
+
+ /**
+ * 通过主键删除数据
+ *
+ * @param modeFunctionId 主键
+ * @return 影响行数
+ */
+ int deleteById(Long modeFunctionId);
+
+ List selectFunctions(Long deviceModeId);
+
+ List selectFunctionList(Long deviceModeId);
+
+ List selectHwDeviceModeFunctionList(HwDeviceModeFunction queryDeviceModeFunction);
+
+ int deleteHwDeviceModeParameterByModeFunctionId(Long modeFunctionId);
+
+ int deleteHwDeviceModeFunctionByDeviceModeIds(Long[] deviceModeIds);
+}
+
diff --git a/ruoyi-modules/hw-business/src/main/java/com/ruoyi/business/service/PlcDeviceService.java b/ruoyi-modules/hw-business/src/main/java/com/ruoyi/business/service/PlcDeviceService.java
index b4b3451..5b82853 100644
--- a/ruoyi-modules/hw-business/src/main/java/com/ruoyi/business/service/PlcDeviceService.java
+++ b/ruoyi-modules/hw-business/src/main/java/com/ruoyi/business/service/PlcDeviceService.java
@@ -5,10 +5,12 @@ import com.fasterxml.jackson.core.JsonProcessingException;
import com.ruoyi.business.domain.HwDeviceMode;
import com.ruoyi.business.domain.PlcDevice;
import com.ruoyi.business.domain.PlcDeviceMode;
+import org.apache.plc4x.java.api.exceptions.PlcConnectionException;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import java.util.List;
+import java.util.concurrent.ExecutionException;
/**
* plc设备信息(PlcDevice)表服务接口
@@ -73,5 +75,5 @@ public interface PlcDeviceService {
String aeDataProcess() throws JsonProcessingException;
- String linkDataProcess();
+ String ehternetDataProcess() throws JsonProcessingException;
}
diff --git a/ruoyi-modules/hw-business/src/main/java/com/ruoyi/business/service/impl/PlcDeviceServiceImpl.java b/ruoyi-modules/hw-business/src/main/java/com/ruoyi/business/service/impl/PlcDeviceServiceImpl.java
index 58a3c5c..104ce2d 100644
--- a/ruoyi-modules/hw-business/src/main/java/com/ruoyi/business/service/impl/PlcDeviceServiceImpl.java
+++ b/ruoyi-modules/hw-business/src/main/java/com/ruoyi/business/service/impl/PlcDeviceServiceImpl.java
@@ -1,8 +1,10 @@
package com.ruoyi.business.service.impl;
import HslCommunication.Core.Transfer.DataFormat;
+import HslCommunication.Core.Types.OperateResult;
import HslCommunication.Core.Types.OperateResultExOne;
import HslCommunication.ModBus.ModbusTcpNet;
+import HslCommunication.Profinet.AllenBradley.AllenBradleyNet;
import HslCommunication.Profinet.Melsec.MelsecA1ENet;
import HslCommunication.Profinet.Melsec.MelsecFxSerialOverTcp;
import HslCommunication.Profinet.Melsec.MelsecHelper;
@@ -28,6 +30,13 @@ import com.ruoyi.tdengine.api.RemoteTdEngineService;
import com.ruoyi.tdengine.api.domain.AlterTagVo;
import com.ruoyi.tdengine.api.domain.TdField;
import com.ruoyi.tdengine.api.domain.TdTableVo;
+import org.apache.plc4x.java.PlcDriverManager;
+import org.apache.plc4x.java.api.PlcConnection;
+import org.apache.plc4x.java.api.exceptions.PlcConnectionException;
+import org.apache.plc4x.java.api.messages.PlcReadRequest;
+import org.apache.plc4x.java.api.messages.PlcReadResponse;
+import org.apache.plc4x.java.api.metadata.PlcConnectionMetadata;
+import org.apache.plc4x.java.ethernetip.EtherNetIpPlcDriver;
import org.apache.poi.ss.formula.functions.T;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -41,6 +50,7 @@ import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
+import java.util.concurrent.ExecutionException;
/**
* plc设备信息(PlcDevice)表服务实现类
@@ -316,60 +326,70 @@ public class PlcDeviceServiceImpl implements PlcDeviceService {
}
return null;
}
-//link数据读取
+ //EtherNet协议数据读取
@Override
- public String linkDataProcess() {
-// List plcDevices = this.plcDeviceDao.queryPlcDevices(1);
-// for (PlcDevice plcDevice : plcDevices) {
-// int station = plcDevice.getStation();
-// byte a = (byte)station;
-// int length = plcDevice.getLength();
-// short b = (short)length;
-// // ModbusTcpNet tcpNet = new ModbusTcpNet(plcDevice.getIp(),plcDevice.getPort1(), a);
-// // tcpNet.getByteTransform().setDataFormat(DataFormat.CDAB);
-// MelsecA1ENet net = new MelsecA1ENet(plcDevice.getIp(),plcDevice.getPort1());
-// MelsecFxSerialOverTcp melsecFxSerialOverTcp = new MelsecFxSerialOverTcp();
-// TdTableVo tdTableVo = new TdTableVo();
-// List schemaFields = new ArrayList<>();
-// TdField firstTdField = new TdField();
-// firstTdField.setFieldName(TdEngineConstants.DEFAULT_FIRST_FIELD_NAME);
-// long currentTimeMillis = System.currentTimeMillis();
-// firstTdField.setFieldValue(currentTimeMillis);
-// String databaseName = TdEngineConstants.getDatabaseName();
-// String tableName = TdEngineConstants.PLC_TABLE_NAME_PREFIX + plcDevice.getDeviceId();
-// // firstTdField.setFieldValue(ts);
-// schemaFields.add(firstTdField);
-// List list = plcDeviceModeFunctionDao.selectFunctions(plcDevice.getDeviceModeId());
-// if (plcDevice.getDataType().equals("10")){
-// OperateResultExOne resultExOne = net.ReadString(plcDevice.getLocation(),b, StandardCharsets.UTF_8);
-// String content = resultExOne.Content;
-// ObjectMapper objectMapper = new ObjectMapper();
-// Map map = objectMapper.readValue(content, Map.class);
-// for (PlcDeviceModeFunction function : list) {
-// Object value = map.get(function.getFunctionIdentifier());
-// TdField tdField = new TdField();
-// tdField.setFieldName(function.getFunctionIdentifier());
-// tdField.setFieldValue(value);
-// schemaFields.add(tdField);
-// }
-// }else if (plcDevice.getDataType().equals("2")){
-// OperateResultExOne exOne = net.ReadInt32(plcDevice.getLocation());
-// TdField tdField = new TdField();
-// tdField.setFieldName(list.get(0).getFunctionIdentifier());
-// tdField.setFieldValue(exOne.Content);
-// schemaFields.add(tdField);
-// }else if (plcDevice.getDataType().equals("4")){
-// OperateResultExOne floatOperateResultExOne = net.ReadFloat(plcDevice.getLocation());
-// TdField tdField = new TdField();
-// tdField.setFieldName(list.get(0).getFunctionIdentifier());
-// tdField.setFieldValue(floatOperateResultExOne.Content);
-// schemaFields.add(tdField);
-// }
-// tdTableVo.setDatabaseName(databaseName);
-// tdTableVo.setTableName(tableName);
-// tdTableVo.setSchemaFields(schemaFields);
-// final R> insertResult = this.remoteTdEngineService.insertTable(tdTableVo , SecurityConstants.INNER);
-// }
+ public String ehternetDataProcess() throws JsonProcessingException {
+// AllenBradleyNet plc = new AllenBradleyNet("127.0.0.1",44818);
+// OperateResult operateResult = plc.ConnectServer();
+// OperateResultExOne f = plc.ReadString("F");
+// String content = f.Content;
+// return null;
+ List plcDevices = this.plcDeviceDao.queryPlcDevices(4);
+ for (PlcDevice plcDevice : plcDevices) {
+ int station = plcDevice.getStation();
+ byte a = (byte)station;
+ int length = plcDevice.getLength();
+ short b = (short)length;
+ // ModbusTcpNet tcpNet = new ModbusTcpNet(plcDevice.getIp(),plcDevice.getPort1(), a);
+ // tcpNet.getByteTransform().setDataFormat(DataFormat.CDAB);
+ AllenBradleyNet ethernet = new AllenBradleyNet(plcDevice.getIp(),plcDevice.getPort1());
+ TdTableVo tdTableVo = new TdTableVo();
+ List schemaFields = new ArrayList<>();
+ TdField firstTdField = new TdField();
+ firstTdField.setFieldName(TdEngineConstants.DEFAULT_FIRST_FIELD_NAME);
+ long currentTimeMillis = System.currentTimeMillis();
+ firstTdField.setFieldValue(currentTimeMillis);
+ String databaseName = TdEngineConstants.getDatabaseName();
+ String tableName = TdEngineConstants.PLC_TABLE_NAME_PREFIX + plcDevice.getDeviceId();
+ // firstTdField.setFieldValue(ts);
+ schemaFields.add(firstTdField);
+ List list = plcDeviceModeFunctionDao.selectFunctions(plcDevice.getDeviceModeId());
+ if (plcDevice.getDataType().equals("10")){
+ OperateResultExOne resultExOne = ethernet.ReadString(plcDevice.getLocation(),b, StandardCharsets.UTF_8);
+ String content = resultExOne.Content;
+ ObjectMapper objectMapper = new ObjectMapper();
+ Map map = objectMapper.readValue(content, Map.class);
+ for (PlcDeviceModeFunction function : list) {
+ Object value = map.get(function.getFunctionIdentifier());
+ TdField tdField = new TdField();
+ tdField.setFieldName(function.getFunctionIdentifier());
+ tdField.setFieldValue(value);
+ schemaFields.add(tdField);
+ }
+ }else if (plcDevice.getDataType().equals("2")||plcDevice.getDataType().equals("9")){
+ OperateResultExOne exOne = ethernet.ReadInt32(plcDevice.getLocation());
+ TdField tdField = new TdField();
+ tdField.setFieldName(list.get(0).getFunctionIdentifier());
+ tdField.setFieldValue(exOne.Content);
+ schemaFields.add(tdField);
+ }else if (plcDevice.getDataType().equals("4")){
+ OperateResultExOne floatOperateResultExOne = ethernet.ReadFloat(plcDevice.getLocation());
+ TdField tdField = new TdField();
+ tdField.setFieldName(list.get(0).getFunctionIdentifier());
+ tdField.setFieldValue(floatOperateResultExOne.Content);
+ schemaFields.add(tdField);
+ }else if (plcDevice.getDataType().equals("5")){
+ OperateResultExOne doubleOperateResultExOne = ethernet.ReadDouble(plcDevice.getLocation());
+ TdField tdField = new TdField();
+ tdField.setFieldName(list.get(0).getFunctionIdentifier());
+ tdField.setFieldValue(doubleOperateResultExOne.Content);
+ schemaFields.add(tdField);
+ }
+ tdTableVo.setDatabaseName(databaseName);
+ tdTableVo.setTableName(tableName);
+ tdTableVo.setSchemaFields(schemaFields);
+ final R> insertResult = this.remoteTdEngineService.insertTable(tdTableVo , SecurityConstants.INNER);
+ }
return null;
}