#ifndef MODBUS_DATA_STORE_H #define MODBUS_DATA_STORE_H #include #ifdef __cplusplus extern "C" { #endif /* Logical PLC word-device spaces. These values intentionally match the * PLSR D/HD/FD device codes, but this module does not depend on PLSR. */ typedef enum { MODBUS_DATA_DEVICE_D = 0, MODBUS_DATA_DEVICE_HD, MODBUS_DATA_DEVICE_FD } MODBUS_DATA_DEVICE; /* Logical PLC bit-device spaces. Standard Modbus coils expose M; X is * written by the input-image producer and HM is available to retained logic. * All consumers, including PLSR, read the same packed images here. */ typedef enum { MODBUS_BIT_DEVICE_X = 0, MODBUS_BIT_DEVICE_M, MODBUS_BIT_DEVICE_HM } MODBUS_BIT_DEVICE; #define MODBUS_DATA_D_WORD_COUNT (10000UL) #define MODBUS_DATA_HD_WORD_COUNT (10000UL) #define MODBUS_DATA_FD_WORD_COUNT (10000UL) #define MODBUS_DATA_X_BIT_COUNT (10000UL) #define MODBUS_DATA_M_BIT_COUNT (10000UL) #define MODBUS_DATA_HM_BIT_COUNT (10000UL) uint8_t ModbusDataValidateWords(MODBUS_DATA_DEVICE device, uint32_t firstAddress, uint32_t wordCount); uint8_t ModbusDataReadWord(MODBUS_DATA_DEVICE device, uint32_t address, uint16_t *value); uint8_t ModbusDataReadDword(MODBUS_DATA_DEVICE device, uint32_t lowAddress, int32_t *value); uint8_t ModbusDataWriteWord(MODBUS_DATA_DEVICE device, uint32_t address, uint16_t value); uint8_t ModbusDataWriteWords(MODBUS_DATA_DEVICE device, uint32_t firstAddress, const uint16_t *values, uint32_t wordCount); /* Existing function 0x48 uses a sparse linear address space: * 0..19999 are normal SRAM and 40000..69998 are CCMRAM. */ uint8_t ModbusDataReadLinear(uint32_t address, uint16_t *value); /* Even means stable; odd means a multi-register write is in progress. */ uint32_t ModbusDataGetWriteSequence(void); uint8_t ModbusDataValidateBits(MODBUS_BIT_DEVICE device, uint32_t firstAddress, uint32_t bitCount); uint8_t ModbusDataReadBit(MODBUS_BIT_DEVICE device, uint32_t address, uint8_t *value); uint8_t ModbusDataWriteBit(MODBUS_BIT_DEVICE device, uint32_t address, uint8_t value); #ifdef __cplusplus } #endif #endif /* MODBUS_DATA_STORE_H */