huang
2025-11-20 366ba040d2447bacd3455299425e3166f1f992bb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
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<String, Object> readPlcData(DeviceConfig device, List<String> fieldNames, EnhancedS7Serializer s7Serializer);
    
    /**
     * 根据DeviceConfig配置和数据Map写入PLC
     * 
     * @param device 设备配置
     * @param dataMap 字段名->值 的Map
     * @param s7Serializer S7序列化器
     */
    void writePlcData(DeviceConfig device, Map<String, Object> dataMap, EnhancedS7Serializer s7Serializer);
    
    /**
     * 读取PLC所有字段(基于DeviceConfig)
     * 
     * @param device 设备配置
     * @param s7Serializer S7序列化器
     * @return 所有字段的值
     */
    Map<String, Object> 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 <T> 实体类型
     * @param device 设备配置
     * @param entity 实体对象
     * @param s7Serializer S7序列化器
     */
    <T> void writePlcDataByEntity(DeviceConfig device, T entity, EnhancedS7Serializer s7Serializer);
}