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

100 行
2.7 KiB

  1. #include "plsr_modbus_data.h"
  2. #include "modbus_data_store.h"
  3. #include <stddef.h>
  4. static uint8_t PlsrModbusDevice(PLSR_DEVICE_TYPE device,
  5. MODBUS_DATA_DEVICE *modbusDevice)
  6. {
  7. if ((modbusDevice == NULL) || (device > PLSR_DEVICE_FD))
  8. {
  9. return 0U;
  10. }
  11. *modbusDevice = (MODBUS_DATA_DEVICE)device;
  12. return 1U;
  13. }
  14. static uint8_t PlsrModbusValidateWords(void *context,
  15. PLSR_DEVICE_TYPE device,
  16. uint32_t firstAddress,
  17. uint32_t wordCount)
  18. {
  19. MODBUS_DATA_DEVICE modbusDevice;
  20. (void)context;
  21. if (PlsrModbusDevice(device, &modbusDevice) == 0U)
  22. {
  23. return 0U;
  24. }
  25. return ModbusDataValidateWords(modbusDevice, firstAddress, wordCount);
  26. }
  27. static uint8_t PlsrModbusReadWord(void *context,
  28. PLSR_DEVICE_TYPE device,
  29. uint32_t address,
  30. uint16_t *value)
  31. {
  32. MODBUS_DATA_DEVICE modbusDevice;
  33. (void)context;
  34. if (PlsrModbusDevice(device, &modbusDevice) == 0U)
  35. {
  36. return 0U;
  37. }
  38. return ModbusDataReadWord(modbusDevice, address, value);
  39. }
  40. static uint8_t PlsrModbusReadDword(void *context,
  41. PLSR_DEVICE_TYPE device,
  42. uint32_t address,
  43. int32_t *value)
  44. {
  45. MODBUS_DATA_DEVICE modbusDevice;
  46. (void)context;
  47. if (PlsrModbusDevice(device, &modbusDevice) == 0U)
  48. {
  49. return 0U;
  50. }
  51. return ModbusDataReadDword(modbusDevice, address, value);
  52. }
  53. static uint8_t PlsrModbusBitDevice(PLSR_DEVICE_TYPE device,
  54. MODBUS_BIT_DEVICE *modbusDevice)
  55. {
  56. if ((modbusDevice == NULL) || (device < PLSR_DEVICE_X)
  57. || (device > PLSR_DEVICE_HM))
  58. {
  59. return 0U;
  60. }
  61. *modbusDevice = (MODBUS_BIT_DEVICE)(device - PLSR_DEVICE_X);
  62. return 1U;
  63. }
  64. static uint8_t PlsrModbusReadBit(void *context,
  65. PLSR_DEVICE_TYPE device,
  66. uint32_t address,
  67. uint8_t *value)
  68. {
  69. MODBUS_BIT_DEVICE modbusDevice;
  70. (void)context;
  71. if (PlsrModbusBitDevice(device, &modbusDevice) == 0U)
  72. {
  73. return 0U;
  74. }
  75. return ModbusDataReadBit(modbusDevice, address, value);
  76. }
  77. void PlsrModbusDataSourceInit(PLSR_DATA_SOURCE *source)
  78. {
  79. if (source == NULL)
  80. {
  81. return;
  82. }
  83. source->context = NULL;
  84. source->validateWords = PlsrModbusValidateWords;
  85. source->readWord = PlsrModbusReadWord;
  86. source->readDword = PlsrModbusReadDword;
  87. source->readBit = PlsrModbusReadBit;
  88. }