ModbusUtils.cpp 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. #include "ModbusUtils.h"
  2. #include <unistd.h>
  3. #include <iostream>
  4. #include <vector>
  5. #include "modbus/modbus.h"
  6. // #define DEVICE_NAME "/dev/ttyUSB0"
  7. // #define DEVICE_NAME "/dev/tty.usbserial-A91UENJO"
  8. #define DEVICE_NAME "/dev/tty.usbserial-FT99NQSV0"
  9. using namespace server::utils;
  10. ModbusUtils::ModbusUtils() {}
  11. ModbusUtils::~ModbusUtils() {}
  12. bool ModbusUtils::connect() {
  13. context = modbus_new_rtu(DEVICE_NAME, 9600, 'N', 8, 1);
  14. // modbus_set_response_timeout(modbus_t *ctx, uint32_t to_sec, uint32_t to_usec)
  15. // modbus_set_indication_timeout(modbus_t *ctx, uint32_t to_sec, uint32_t to_usec)
  16. // modbus_set_error_recovery(modbus_t *ctx, modbus_error_recovery_mode error_recovery)
  17. // modbus_set_slave(context, 6);
  18. // modbus_set_backend();
  19. if (context == NULL) {
  20. std::cout << " unable to create the context" << std::endl;
  21. return false;
  22. }
  23. if (modbus_connect(context) == -1) {
  24. std::cout << " enter the Connection failed function " << std::endl;
  25. std::cout << " Failed to connect " << std::endl;
  26. std::cout << "Error: " << modbus_strerror(errno) << std::endl;
  27. modbus_close(context);
  28. modbus_free(context);
  29. return false;
  30. }
  31. return true;
  32. }
  33. bool ModbusUtils::disconnect() {
  34. modbus_close(context);
  35. modbus_free(context);
  36. return true;
  37. }
  38. std::vector<uint16_t> ModbusUtils::read() {
  39. modbus_set_slave(context, 6);
  40. auto list = std::vector<uint16_t>();
  41. uint16_t registers[64];
  42. int count;
  43. count = modbus_read_registers(context, 2, 1, registers);
  44. for (auto i = 0; i < count; i++) {
  45. // stream << " registers: " << std::oct << registers[i] << " the hex value : " << std::hex << registers[i];
  46. auto value = registers[i];
  47. list.push_back(value);
  48. }
  49. return list;
  50. }