package com.mes.service; import com.alibaba.fastjson.JSONObject; import com.github.xingshuangs.iot.common.enums.EDataType; import com.github.xingshuangs.iot.protocol.s7.serializer.S7Parameter; import com.mes.device.entity.DeviceConfig; import com.mes.s7.enhanced.EnhancedS7Serializer; import java.util.ArrayList; import java.util.List; import java.util.Map; /** * PLC动态数据读写服务 * 根据DeviceConfig配置动态构建参数,支持任意字段组合的PLC数据交互 * * @author huang * @date 2025/11/05 */ public interface PlcDynamicDataService { /** * 根据DeviceConfig配置和字段名称读取PLC数据 * * @param device 设备配置 * @param fieldNames 要读取的字段名称列表 * @param s7Serializer S7序列化器 * @return 字段名->值 的Map */ Map readPlcData(DeviceConfig device, List fieldNames, EnhancedS7Serializer s7Serializer); /** * 根据DeviceConfig配置和数据Map写入PLC * * @param device 设备配置 * @param dataMap 字段名->值 的Map * @param s7Serializer S7序列化器 */ void writePlcData(DeviceConfig device, Map dataMap, EnhancedS7Serializer s7Serializer); /** * 读取PLC所有字段(基于DeviceConfig) * * @param device 设备配置 * @param s7Serializer S7序列化器 * @return 所有字段的值 */ Map readAllPlcData(DeviceConfig device, EnhancedS7Serializer s7Serializer); /** * 读取单个字段(基于DeviceConfig) * * @param device 设备配置 * @param fieldName 字段名 * @param s7Serializer S7序列化器 * @return 字段值 */ Object readPlcField(DeviceConfig device, String fieldName, EnhancedS7Serializer s7Serializer); /** * 写入单个字段(基于DeviceConfig) * * @param device 设备配置 * @param fieldName 字段名 * @param value 字段值 * @param s7Serializer S7序列化器 */ void writePlcField(DeviceConfig device, String fieldName, Object value, EnhancedS7Serializer s7Serializer); /** * 根据实体类和DeviceConfig配置写入PLC数据 * 实体类字段使用@S7Variable注解,address字段为字段名(对应configJson中的paramKey) * 偏移量从configJson中的paramValue获取 * * @param 实体类型 * @param device 设备配置 * @param entity 实体对象 * @param s7Serializer S7序列化器 */ void writePlcDataByEntity(DeviceConfig device, T entity, EnhancedS7Serializer s7Serializer); }