plc协议开发

master
maxw@mesnac.com 6 months ago
parent d08e7012ff
commit b817d4b51b

@ -83,6 +83,13 @@
<groupId>com.ruoyi</groupId> <groupId>com.ruoyi</groupId>
<artifactId>ruoyi-common-datascope</artifactId> <artifactId>ruoyi-common-datascope</artifactId>
</dependency> </dependency>
<!-- https://mvnrepository.com/artifact/org.apache.plc4x/plc4j-protocol-ethernetip -->
<dependency>
<groupId>org.apache.plc4x</groupId>
<artifactId>plc4j-driver-ethernet-ip</artifactId>
<version>0.6.0</version>
</dependency>
<!-- RuoYi Common Log --> <!-- RuoYi Common Log -->
<dependency> <dependency>

@ -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.domain.AjaxResult;
import com.ruoyi.common.core.web.page.TableDataInfo; import com.ruoyi.common.core.web.page.TableDataInfo;
import com.ruoyi.common.security.utils.SecurityUtils; 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.Page;
import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.PageRequest;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
@ -19,6 +20,7 @@ import javax.annotation.Resource;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.concurrent.ExecutionException;
/** /**
* plc(PlcDevice) * plc(PlcDevice)
@ -120,9 +122,9 @@ public class PlcDeviceController extends BaseController {
public AjaxResult aeDataProcess() throws JsonProcessingException { public AjaxResult aeDataProcess() throws JsonProcessingException {
return AjaxResult.success(plcDeviceService.aeDataProcess()); return AjaxResult.success(plcDeviceService.aeDataProcess());
} }
@GetMapping("/linkDataProcess") @GetMapping("/ehternetDataProcess")
public AjaxResult linkDataProcess() throws JsonProcessingException { public AjaxResult ehternetDataProcess() throws JsonProcessingException{
return AjaxResult.success(plcDeviceService.linkDataProcess()); return AjaxResult.success(plcDeviceService.ehternetDataProcess());
} }
@GetMapping("/list") @GetMapping("/list")
public TableDataInfo list(PlcDevice hwDevice) { public TableDataInfo list(PlcDevice hwDevice) {

@ -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<PlcDevice> queryById();
List<PlcDevice> queryPlcDevices(@Param("accessProtocol") int accessProtocol);
/**
*
*
* @param plcDevice
* @param pageable
* @return
*/
List<PlcDevice> queryAllByLimit(PlcDevice plcDevice, @Param("pageable") Pageable pageable);
/**
*
*
* @param plcDevice
* @return
*/
long count(PlcDevice plcDevice);
/**
*
*
* @param plcDevice
* @return
*/
int insert(PlcDevice plcDevice);
/**
* MyBatisforeach
*
* @param entities List<PlcDevice>
* @return
*/
int insertBatch(@Param("entities") List<PlcDevice> entities);
/**
* MyBatisforeach
*
* @param entities List<PlcDevice>
* @return
* @throws org.springframework.jdbc.BadSqlGrammarException ListSQL
*/
int insertOrUpdateBatch(@Param("entities") List<PlcDevice> entities);
/**
*
*
* @param plcDevice
* @return
*/
int update(PlcDevice plcDevice);
/**
*
*
* @param deviceId
* @return
*/
int deleteById(Long deviceId);
List<PlcDevice> selectHwDeviceJoinList(PlcDevice hwDevice);
List<PlcDeviceMode> selectPlcDeviceMode(PlcDeviceMode queryDeviceMode);
PlcDevice selectHwDeviceByDeviceId(Long deviceId);
}

@ -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<PlcDeviceMode> queryAllByLimit(PlcDeviceMode plcDeviceMode, @Param("pageable") Pageable pageable);
/**
*
*
* @param plcDeviceMode
* @return
*/
long count(PlcDeviceMode plcDeviceMode);
/**
*
*
* @param plcDeviceMode
* @return
*/
int insert(PlcDeviceMode plcDeviceMode);
/**
* MyBatisforeach
*
* @param entities List<PlcDeviceMode>
* @return
*/
int insertBatch(@Param("entities") List<PlcDeviceMode> entities);
/**
* MyBatisforeach
*
* @param entities List<PlcDeviceMode>
* @return
* @throws org.springframework.jdbc.BadSqlGrammarException ListSQL
*/
int insertOrUpdateBatch(@Param("entities") List<PlcDeviceMode> entities);
/**
*
*
* @param plcDeviceMode
* @return
*/
int update(PlcDeviceMode plcDeviceMode);
/**
*
*
* @param deviceModeId
* @return
*/
int deleteById(Long deviceModeId);
List<PlcDeviceMode> selectList(PlcDeviceMode hwDeviceMode);
int deleteHwDeviceModeByDeviceModeIds(Long[] deviceModeIds);
}

@ -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<PlcDeviceModeFunction> queryAllByLimit(PlcDeviceModeFunction plcDeviceModeFunction, @Param("pageable") Pageable pageable);
/**
*
*
* @param plcDeviceModeFunction
* @return
*/
long count(PlcDeviceModeFunction plcDeviceModeFunction);
/**
*
*
* @param plcDeviceModeFunction
* @return
*/
int insert(PlcDeviceModeFunction plcDeviceModeFunction);
/**
* MyBatisforeach
*
* @param entities List<PlcDeviceModeFunction>
* @return
*/
int insertBatch(@Param("entities") List<PlcDeviceModeFunction> entities);
/**
* MyBatisforeach
*
* @param entities List<PlcDeviceModeFunction>
* @return
* @throws org.springframework.jdbc.BadSqlGrammarException ListSQL
*/
int insertOrUpdateBatch(@Param("entities") List<PlcDeviceModeFunction> entities);
/**
*
*
* @param plcDeviceModeFunction
* @return
*/
int update(PlcDeviceModeFunction plcDeviceModeFunction);
/**
*
*
* @param modeFunctionId
* @return
*/
int deleteById(Long modeFunctionId);
List<PlcDeviceModeFunction> selectFunctions(Long deviceModeId);
List<PlcDeviceModeFunction> selectFunctionList(Long deviceModeId);
List<HwDeviceModeFunction> selectHwDeviceModeFunctionList(HwDeviceModeFunction queryDeviceModeFunction);
int deleteHwDeviceModeParameterByModeFunctionId(Long modeFunctionId);
int deleteHwDeviceModeFunctionByDeviceModeIds(Long[] deviceModeIds);
}

@ -5,10 +5,12 @@ import com.fasterxml.jackson.core.JsonProcessingException;
import com.ruoyi.business.domain.HwDeviceMode; import com.ruoyi.business.domain.HwDeviceMode;
import com.ruoyi.business.domain.PlcDevice; import com.ruoyi.business.domain.PlcDevice;
import com.ruoyi.business.domain.PlcDeviceMode; 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.Page;
import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.PageRequest;
import java.util.List; import java.util.List;
import java.util.concurrent.ExecutionException;
/** /**
* plc(PlcDevice) * plc(PlcDevice)
@ -73,5 +75,5 @@ public interface PlcDeviceService {
String aeDataProcess() throws JsonProcessingException; String aeDataProcess() throws JsonProcessingException;
String linkDataProcess(); String ehternetDataProcess() throws JsonProcessingException;
} }

@ -1,8 +1,10 @@
package com.ruoyi.business.service.impl; package com.ruoyi.business.service.impl;
import HslCommunication.Core.Transfer.DataFormat; import HslCommunication.Core.Transfer.DataFormat;
import HslCommunication.Core.Types.OperateResult;
import HslCommunication.Core.Types.OperateResultExOne; import HslCommunication.Core.Types.OperateResultExOne;
import HslCommunication.ModBus.ModbusTcpNet; import HslCommunication.ModBus.ModbusTcpNet;
import HslCommunication.Profinet.AllenBradley.AllenBradleyNet;
import HslCommunication.Profinet.Melsec.MelsecA1ENet; import HslCommunication.Profinet.Melsec.MelsecA1ENet;
import HslCommunication.Profinet.Melsec.MelsecFxSerialOverTcp; import HslCommunication.Profinet.Melsec.MelsecFxSerialOverTcp;
import HslCommunication.Profinet.Melsec.MelsecHelper; 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.AlterTagVo;
import com.ruoyi.tdengine.api.domain.TdField; import com.ruoyi.tdengine.api.domain.TdField;
import com.ruoyi.tdengine.api.domain.TdTableVo; 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.apache.poi.ss.formula.functions.T;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -41,6 +50,7 @@ import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.concurrent.ExecutionException;
/** /**
* plc(PlcDevice) * plc(PlcDevice)
@ -316,60 +326,70 @@ public class PlcDeviceServiceImpl implements PlcDeviceService {
} }
return null; return null;
} }
//link数据读取 //EtherNet协议数据读取
@Override @Override
public String linkDataProcess() { public String ehternetDataProcess() throws JsonProcessingException {
// List<PlcDevice> plcDevices = this.plcDeviceDao.queryPlcDevices(1); // AllenBradleyNet plc = new AllenBradleyNet("127.0.0.1",44818);
// for (PlcDevice plcDevice : plcDevices) { // OperateResult operateResult = plc.ConnectServer();
// int station = plcDevice.getStation(); // OperateResultExOne<String> f = plc.ReadString("F");
// byte a = (byte)station; // String content = f.Content;
// int length = plcDevice.getLength(); // return null;
// short b = (short)length; List<PlcDevice> plcDevices = this.plcDeviceDao.queryPlcDevices(4);
// // ModbusTcpNet tcpNet = new ModbusTcpNet(plcDevice.getIp(),plcDevice.getPort1(), a); for (PlcDevice plcDevice : plcDevices) {
// // tcpNet.getByteTransform().setDataFormat(DataFormat.CDAB); int station = plcDevice.getStation();
// MelsecA1ENet net = new MelsecA1ENet(plcDevice.getIp(),plcDevice.getPort1()); byte a = (byte)station;
// MelsecFxSerialOverTcp melsecFxSerialOverTcp = new MelsecFxSerialOverTcp(); int length = plcDevice.getLength();
// TdTableVo tdTableVo = new TdTableVo(); short b = (short)length;
// List<TdField> schemaFields = new ArrayList<>(); // ModbusTcpNet tcpNet = new ModbusTcpNet(plcDevice.getIp(),plcDevice.getPort1(), a);
// TdField firstTdField = new TdField(); // tcpNet.getByteTransform().setDataFormat(DataFormat.CDAB);
// firstTdField.setFieldName(TdEngineConstants.DEFAULT_FIRST_FIELD_NAME); AllenBradleyNet ethernet = new AllenBradleyNet(plcDevice.getIp(),plcDevice.getPort1());
// long currentTimeMillis = System.currentTimeMillis(); TdTableVo tdTableVo = new TdTableVo();
// firstTdField.setFieldValue(currentTimeMillis); List<TdField> schemaFields = new ArrayList<>();
// String databaseName = TdEngineConstants.getDatabaseName(); TdField firstTdField = new TdField();
// String tableName = TdEngineConstants.PLC_TABLE_NAME_PREFIX + plcDevice.getDeviceId(); firstTdField.setFieldName(TdEngineConstants.DEFAULT_FIRST_FIELD_NAME);
// // firstTdField.setFieldValue(ts); long currentTimeMillis = System.currentTimeMillis();
// schemaFields.add(firstTdField); firstTdField.setFieldValue(currentTimeMillis);
// List<PlcDeviceModeFunction> list = plcDeviceModeFunctionDao.selectFunctions(plcDevice.getDeviceModeId()); String databaseName = TdEngineConstants.getDatabaseName();
// if (plcDevice.getDataType().equals("10")){ String tableName = TdEngineConstants.PLC_TABLE_NAME_PREFIX + plcDevice.getDeviceId();
// OperateResultExOne<String> resultExOne = net.ReadString(plcDevice.getLocation(),b, StandardCharsets.UTF_8); // firstTdField.setFieldValue(ts);
// String content = resultExOne.Content; schemaFields.add(firstTdField);
// ObjectMapper objectMapper = new ObjectMapper(); List<PlcDeviceModeFunction> list = plcDeviceModeFunctionDao.selectFunctions(plcDevice.getDeviceModeId());
// Map map = objectMapper.readValue(content, Map.class); if (plcDevice.getDataType().equals("10")){
// for (PlcDeviceModeFunction function : list) { OperateResultExOne<String> resultExOne = ethernet.ReadString(plcDevice.getLocation(),b, StandardCharsets.UTF_8);
// Object value = map.get(function.getFunctionIdentifier()); String content = resultExOne.Content;
// TdField tdField = new TdField(); ObjectMapper objectMapper = new ObjectMapper();
// tdField.setFieldName(function.getFunctionIdentifier()); Map map = objectMapper.readValue(content, Map.class);
// tdField.setFieldValue(value); for (PlcDeviceModeFunction function : list) {
// schemaFields.add(tdField); Object value = map.get(function.getFunctionIdentifier());
// } TdField tdField = new TdField();
// }else if (plcDevice.getDataType().equals("2")){ tdField.setFieldName(function.getFunctionIdentifier());
// OperateResultExOne<Integer> exOne = net.ReadInt32(plcDevice.getLocation()); tdField.setFieldValue(value);
// TdField tdField = new TdField(); schemaFields.add(tdField);
// tdField.setFieldName(list.get(0).getFunctionIdentifier()); }
// tdField.setFieldValue(exOne.Content); }else if (plcDevice.getDataType().equals("2")||plcDevice.getDataType().equals("9")){
// schemaFields.add(tdField); OperateResultExOne<Integer> exOne = ethernet.ReadInt32(plcDevice.getLocation());
// }else if (plcDevice.getDataType().equals("4")){ TdField tdField = new TdField();
// OperateResultExOne<Float> floatOperateResultExOne = net.ReadFloat(plcDevice.getLocation()); tdField.setFieldName(list.get(0).getFunctionIdentifier());
// TdField tdField = new TdField(); tdField.setFieldValue(exOne.Content);
// tdField.setFieldName(list.get(0).getFunctionIdentifier()); schemaFields.add(tdField);
// tdField.setFieldValue(floatOperateResultExOne.Content); }else if (plcDevice.getDataType().equals("4")){
// schemaFields.add(tdField); OperateResultExOne<Float> floatOperateResultExOne = ethernet.ReadFloat(plcDevice.getLocation());
// } TdField tdField = new TdField();
// tdTableVo.setDatabaseName(databaseName); tdField.setFieldName(list.get(0).getFunctionIdentifier());
// tdTableVo.setTableName(tableName); tdField.setFieldValue(floatOperateResultExOne.Content);
// tdTableVo.setSchemaFields(schemaFields); schemaFields.add(tdField);
// final R<?> insertResult = this.remoteTdEngineService.insertTable(tdTableVo , SecurityConstants.INNER); }else if (plcDevice.getDataType().equals("5")){
// } OperateResultExOne<Double> 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; return null;
} }

Loading…
Cancel
Save