Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.
 
 
 
 
 
 

114 lignes
5.1 KiB

  1. #include "modbus_data_store.h"
  2. #include "plsr_modbus_data.h"
  3. #include <stdint.h>
  4. #include <stdio.h>
  5. static unsigned TestChecks;
  6. #define CHECK(condition) \
  7. do \
  8. { \
  9. TestChecks++; \
  10. if (!(condition)) \
  11. { \
  12. (void)printf("FAIL line %d: %s\n", __LINE__, #condition); \
  13. return 1; \
  14. } \
  15. } while (0)
  16. int main(void)
  17. {
  18. PLSR_DATA_SOURCE source;
  19. uint16_t words[4] = {0x5678U, 0x1234U, 0xFFFEU, 0xFFFFU};
  20. uint16_t word;
  21. uint8_t bit;
  22. int32_t dword;
  23. uint32_t sequence;
  24. CHECK(ModbusDataValidateWords(MODBUS_DATA_DEVICE_D, 0UL, 1UL) == 1U);
  25. CHECK(ModbusDataValidateWords(MODBUS_DATA_DEVICE_HD, 9998UL, 2UL) == 1U);
  26. CHECK(ModbusDataValidateWords(MODBUS_DATA_DEVICE_FD, 9999UL, 2UL) == 0U);
  27. CHECK(ModbusDataValidateWords(MODBUS_DATA_DEVICE_D, 0UL, 0UL) == 0U);
  28. CHECK(ModbusDataValidateWords((MODBUS_DATA_DEVICE)3, 0UL, 1UL) == 0U);
  29. sequence = ModbusDataGetWriteSequence();
  30. CHECK((sequence & 1UL) == 0UL);
  31. CHECK(ModbusDataWriteWords(MODBUS_DATA_DEVICE_D, 1000UL, words, 4UL)
  32. == 1U);
  33. CHECK(ModbusDataGetWriteSequence() == sequence + 2UL);
  34. CHECK(ModbusDataReadDword(MODBUS_DATA_DEVICE_D, 1000UL, &dword) == 1U);
  35. CHECK(dword == (int32_t)0x12345678UL);
  36. CHECK(ModbusDataReadDword(MODBUS_DATA_DEVICE_D, 1002UL, &dword) == 1U);
  37. CHECK(dword == -2);
  38. CHECK(ModbusDataWriteWord(MODBUS_DATA_DEVICE_HD, 5UL, 0xA55AU) == 1U);
  39. CHECK(ModbusDataWriteWord(MODBUS_DATA_DEVICE_FD, 5UL, 0x5AA5U) == 1U);
  40. CHECK(ModbusDataReadWord(MODBUS_DATA_DEVICE_D, 5UL, &word) == 1U);
  41. CHECK(word == 0U);
  42. CHECK(ModbusDataReadWord(MODBUS_DATA_DEVICE_HD, 5UL, &word) == 1U);
  43. CHECK(word == 0xA55AU);
  44. CHECK(ModbusDataReadWord(MODBUS_DATA_DEVICE_FD, 5UL, &word) == 1U);
  45. CHECK(word == 0x5AA5U);
  46. CHECK(ModbusDataReadLinear(10005UL, &word) == 1U);
  47. CHECK(word == 0xA55AU);
  48. CHECK(ModbusDataReadLinear(40005UL, &word) == 1U);
  49. CHECK(word == 0x5AA5U);
  50. CHECK(ModbusDataReadLinear(20000UL, &word) == 0U);
  51. CHECK(ModbusDataReadLinear(39999UL, &word) == 0U);
  52. CHECK(ModbusDataReadLinear(69999UL, &word) == 0U);
  53. CHECK(ModbusDataValidateBits(MODBUS_BIT_DEVICE_X, 9999UL, 1UL) == 1U);
  54. CHECK(ModbusDataValidateBits(MODBUS_BIT_DEVICE_M, 9999UL, 2UL) == 0U);
  55. CHECK(ModbusDataValidateBits(MODBUS_BIT_DEVICE_HM, 0UL, 0UL) == 0U);
  56. CHECK(ModbusDataValidateBits((MODBUS_BIT_DEVICE)3, 0UL, 1UL) == 0U);
  57. CHECK(ModbusDataWriteBit(MODBUS_BIT_DEVICE_X, 17UL, 1U) == 1U);
  58. CHECK(ModbusDataWriteBit(MODBUS_BIT_DEVICE_M, 17UL, 0U) == 1U);
  59. CHECK(ModbusDataWriteBit(MODBUS_BIT_DEVICE_HM, 17UL, 1U) == 1U);
  60. CHECK(ModbusDataWriteBit(MODBUS_BIT_DEVICE_X, 18UL, 1U) == 1U);
  61. CHECK(ModbusDataWriteBit(MODBUS_BIT_DEVICE_X, 17UL, 0U) == 1U);
  62. CHECK(ModbusDataReadBit(MODBUS_BIT_DEVICE_X, 17UL, &bit) == 1U);
  63. CHECK(bit == 0U);
  64. CHECK(ModbusDataReadBit(MODBUS_BIT_DEVICE_X, 18UL, &bit) == 1U);
  65. CHECK(bit == 1U);
  66. CHECK(ModbusDataReadBit(MODBUS_BIT_DEVICE_M, 17UL, &bit) == 1U);
  67. CHECK(bit == 0U);
  68. CHECK(ModbusDataReadBit(MODBUS_BIT_DEVICE_HM, 17UL, &bit) == 1U);
  69. CHECK(bit == 1U);
  70. CHECK(ModbusDataReadBit(MODBUS_BIT_DEVICE_X, 10000UL, &bit) == 0U);
  71. CHECK(ModbusDataReadBit(MODBUS_BIT_DEVICE_X, 0UL, NULL) == 0U);
  72. PlsrModbusDataSourceInit(&source);
  73. CHECK(source.context == NULL);
  74. CHECK(source.validateWords != NULL);
  75. CHECK(source.readWord != NULL);
  76. CHECK(source.readDword != NULL);
  77. CHECK(source.readBit != NULL);
  78. CHECK(source.validateWords(source.context, PLSR_DEVICE_D, 1000UL, 4UL)
  79. == 1U);
  80. CHECK(source.validateWords(source.context, PLSR_DEVICE_X, 0UL, 1UL)
  81. == 0U);
  82. CHECK(source.readDword(source.context,
  83. PLSR_DEVICE_D,
  84. 1000UL,
  85. &dword) == 1U);
  86. CHECK(dword == (int32_t)0x12345678UL);
  87. CHECK(source.readWord(source.context, PLSR_DEVICE_HD, 5UL, &word) == 1U);
  88. CHECK(word == 0xA55AU);
  89. CHECK(source.readWord(source.context, PLSR_DEVICE_FD, 5UL, &word) == 1U);
  90. CHECK(word == 0x5AA5U);
  91. CHECK(source.readWord(source.context, PLSR_DEVICE_M, 5UL, &word) == 0U);
  92. CHECK(source.readBit(source.context, PLSR_DEVICE_X, 17UL, &bit) == 1U);
  93. CHECK(bit == 0U);
  94. CHECK(source.readBit(source.context, PLSR_DEVICE_M, 17UL, &bit) == 1U);
  95. CHECK(bit == 0U);
  96. CHECK(source.readBit(source.context, PLSR_DEVICE_HM, 17UL, &bit) == 1U);
  97. CHECK(bit == 1U);
  98. CHECK(source.readBit(source.context, PLSR_DEVICE_D, 17UL, &bit) == 0U);
  99. CHECK(source.readBit(source.context, PLSR_DEVICE_X, 10000UL, &bit) == 0U);
  100. PlsrModbusDataSourceInit(NULL);
  101. (void)printf("PASS: %u Modbus data-source checks\n", TestChecks);
  102. return 0;
  103. }