35#ifndef PROTOCORE_MELSEC_H
36#define PROTOCORE_MELSEC_H
45#define MELSEC_3E_REQ_SUBHEADER0 0x50
46#define MELSEC_3E_REQ_SUBHEADER1 0x00
47#define MELSEC_3E_RES_SUBHEADER0 0xD0
48#define MELSEC_3E_RES_SUBHEADER1 0x00
50#define MELSEC_NETWORK_DEFAULT 0x00
51#define MELSEC_PC_DEFAULT 0xFF
52#define MELSEC_DEST_IO_DEFAULT 0x03FF
53#define MELSEC_DEST_MULTIDROP_DEFAULT 0x00
55#define MELSEC_CMD_BATCH_READ 0x0401
56#define MELSEC_CMD_BATCH_WRITE 0x1401
57#define MELSEC_SUBCMD_WORD 0x0000
58#define MELSEC_SUBCMD_BIT 0x0001
61#define MELSEC_DEV_D 0xA8
62#define MELSEC_DEV_R 0xAF
63#define MELSEC_DEV_M 0x90
64#define MELSEC_DEV_S 0x98
65#define MELSEC_DEV_X 0x9C
66#define MELSEC_DEV_Y 0x9D
67#define MELSEC_DEV_TN 0xC2
68#define MELSEC_DEV_TS 0xC1
69#define MELSEC_DEV_CN 0xC5
70#define MELSEC_DEV_CS 0xC4
72#define MELSEC_ENDCODE_OK 0x0000
75#define MELSEC_3E_READ_REQ_LEN 21
76#define MELSEC_3E_READ_REQ_DATA_LEN 12
77#define MELSEC_3E_RES_MIN_LEN 11
78#define MELSEC_3E_RES_LEN_OFFSET 7
79#define MELSEC_3E_RES_DATALEN_BASE 9
80#define MELSEC_3E_RES_DATA_OFFSET 11
81#define MELSEC_ENDCODE_LEN 2
91size_t pc_melsec_build_read(uint8_t *buf,
size_t cap, uint8_t device_code, uint32_t head_device, uint16_t points,
92 uint16_t monitoring_timer);
101size_t pc_melsec_build_write(uint8_t *buf,
size_t cap, uint8_t device_code, uint32_t head_device, uint16_t points,
102 uint16_t monitoring_timer,
const uint8_t *data,
size_t data_len);
113bool pc_melsec_parse_response(
const uint8_t *buf,
size_t len, MelsecResponse *out);
User-facing configuration for ProtoCore.