Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.
 
 
 
 
 
 

73 řádky
1.9 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. void PlsrModbusDataSourceInit(PLSR_DATA_SOURCE *source)
  54. {
  55. if (source == NULL)
  56. {
  57. return;
  58. }
  59. source->context = NULL;
  60. source->validateWords = PlsrModbusValidateWords;
  61. source->readWord = PlsrModbusReadWord;
  62. source->readDword = PlsrModbusReadDword;
  63. source->readBit = NULL;
  64. }