您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 
 
 
 

75 行
2.6 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. /* Logical PLC bit-device spaces. Standard Modbus coils expose M; X is
  16. * written by the input-image producer and HM is available to retained logic.
  17. * All consumers, including PLSR, read the same packed images here. */
  18. typedef enum
  19. {
  20. MODBUS_BIT_DEVICE_X = 0,
  21. MODBUS_BIT_DEVICE_M,
  22. MODBUS_BIT_DEVICE_HM
  23. } MODBUS_BIT_DEVICE;
  24. #define MODBUS_DATA_D_WORD_COUNT (10000UL)
  25. #define MODBUS_DATA_HD_WORD_COUNT (10000UL)
  26. #define MODBUS_DATA_FD_WORD_COUNT (10000UL)
  27. #define MODBUS_DATA_X_BIT_COUNT (10000UL)
  28. #define MODBUS_DATA_M_BIT_COUNT (10000UL)
  29. #define MODBUS_DATA_HM_BIT_COUNT (10000UL)
  30. uint8_t ModbusDataValidateWords(MODBUS_DATA_DEVICE device,
  31. uint32_t firstAddress,
  32. uint32_t wordCount);
  33. uint8_t ModbusDataReadWord(MODBUS_DATA_DEVICE device,
  34. uint32_t address,
  35. uint16_t *value);
  36. uint8_t ModbusDataReadDword(MODBUS_DATA_DEVICE device,
  37. uint32_t lowAddress,
  38. int32_t *value);
  39. uint8_t ModbusDataWriteWord(MODBUS_DATA_DEVICE device,
  40. uint32_t address,
  41. uint16_t value);
  42. uint8_t ModbusDataWriteWords(MODBUS_DATA_DEVICE device,
  43. uint32_t firstAddress,
  44. const uint16_t *values,
  45. uint32_t wordCount);
  46. /* Existing function 0x48 uses a sparse linear address space:
  47. * 0..19999 are normal SRAM and 40000..69998 are CCMRAM. */
  48. uint8_t ModbusDataReadLinear(uint32_t address, uint16_t *value);
  49. /* Even means stable; odd means a multi-register write is in progress. */
  50. uint32_t ModbusDataGetWriteSequence(void);
  51. uint8_t ModbusDataValidateBits(MODBUS_BIT_DEVICE device,
  52. uint32_t firstAddress,
  53. uint32_t bitCount);
  54. uint8_t ModbusDataReadBit(MODBUS_BIT_DEVICE device,
  55. uint32_t address,
  56. uint8_t *value);
  57. uint8_t ModbusDataWriteBit(MODBUS_BIT_DEVICE device,
  58. uint32_t address,
  59. uint8_t value);
  60. #ifdef __cplusplus
  61. }
  62. #endif
  63. #endif /* MODBUS_DATA_STORE_H */