1
zhang
9 天以前 24f6766a113090fb97f9dd399586b61a364702ae
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
package com.zy.acs.conveyor.core.constant;
 
 
/**
 * 站点状态字段枚举(对应 §2.1)
 */
public enum StationStatusField {
    TASK_NUMBER("DB100", 0, 4),          // 任务号,偏移0,4字节
    FINAL_TARGET("DB100",  4, 2),          // 最终目标站,偏移4,2字节
    STATUS_WORD("DB100", 6, 2),           // 状态字,偏移6,2字节
    TASK_WRITABLE("DB100",  8, 2);          // 任务可写区,偏移8,2字节
 
    private final String addressPattern;
    private final int offset;
    private final int byteLength;
 
    StationStatusField(String addressPattern, int offset, int byteLength) {
        this.addressPattern = addressPattern;
        this.offset = offset;
        this.byteLength = byteLength;
    }
 
    /**
     * 根据 DB 块编号和站点偏移生成具体地址
     * @param dbBlock DB块编号
     * @param stationBaseOffset 站点基址偏移(站点号*站点长度)
     * @return PLC4X 地址字符串,如 "DB100.DBD0"
     */
    public String buildAddress(int dbBlock, int stationBaseOffset) {
        int finalOffset = stationBaseOffset + offset;
        return String.format(addressPattern, dbBlock, finalOffset);
    }
 
    public String getAddressPattern() {
        return addressPattern;
    }
 
    public int getOffset() {
        return offset;
    }
 
    public int getByteLength() {
        return byteLength;
    }
}