25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

52 lines
1.7 KiB

  1. #ifndef MODBUS_DATA_STORE_H
  2. #define MODBUS_DATA_STORE_H
  3. #include <stdint.h>
  4. #ifdef __cplusplus
  5. extern "C" {
  6. #endif
  7. /* Logical PLC word-device spaces. These values intentionally match the
  8. * PLSR D/HD/FD device codes, but this module does not depend on PLSR. */
  9. typedef enum
  10. {
  11. MODBUS_DATA_DEVICE_D = 0,
  12. MODBUS_DATA_DEVICE_HD,
  13. MODBUS_DATA_DEVICE_FD
  14. } MODBUS_DATA_DEVICE;
  15. #define MODBUS_DATA_D_WORD_COUNT (10000UL)
  16. #define MODBUS_DATA_HD_WORD_COUNT (10000UL)
  17. #define MODBUS_DATA_FD_WORD_COUNT (10000UL)
  18. uint8_t ModbusDataValidateWords(MODBUS_DATA_DEVICE device,
  19. uint32_t firstAddress,
  20. uint32_t wordCount);
  21. uint8_t ModbusDataReadWord(MODBUS_DATA_DEVICE device,
  22. uint32_t address,
  23. uint16_t *value);
  24. uint8_t ModbusDataReadDword(MODBUS_DATA_DEVICE device,
  25. uint32_t lowAddress,
  26. int32_t *value);
  27. uint8_t ModbusDataWriteWord(MODBUS_DATA_DEVICE device,
  28. uint32_t address,
  29. uint16_t value);
  30. uint8_t ModbusDataWriteWords(MODBUS_DATA_DEVICE device,
  31. uint32_t firstAddress,
  32. const uint16_t *values,
  33. uint32_t wordCount);
  34. /* Existing function 0x48 uses a sparse linear address space:
  35. * 0..19999 are normal SRAM and 40000..69998 are CCMRAM. */
  36. uint8_t ModbusDataReadLinear(uint32_t address, uint16_t *value);
  37. /* Even means stable; odd means a multi-register write is in progress. */
  38. uint32_t ModbusDataGetWriteSequence(void);
  39. #ifdef __cplusplus
  40. }
  41. #endif
  42. #endif /* MODBUS_DATA_STORE_H */