#include "ModbusUtils.h" #include #include #include #include "modbus/modbus.h" // #define DEVICE_NAME "/dev/ttyUSB0" // #define DEVICE_NAME "/dev/tty.usbserial-A91UENJO" #define DEVICE_NAME "/dev/tty.usbserial-FT99NQSV0" using namespace server::utils; ModbusUtils::ModbusUtils() {} ModbusUtils::~ModbusUtils() {} bool ModbusUtils::connect() { context = modbus_new_rtu(DEVICE_NAME, 9600, 'N', 8, 1); // modbus_set_response_timeout(modbus_t *ctx, uint32_t to_sec, uint32_t to_usec) // modbus_set_indication_timeout(modbus_t *ctx, uint32_t to_sec, uint32_t to_usec) // modbus_set_error_recovery(modbus_t *ctx, modbus_error_recovery_mode error_recovery) // modbus_set_slave(context, 6); // modbus_set_backend(); if (context == NULL) { std::cout << " unable to create the context" << std::endl; return false; } if (modbus_connect(context) == -1) { std::cout << " enter the Connection failed function " << std::endl; std::cout << " Failed to connect " << std::endl; std::cout << "Error: " << modbus_strerror(errno) << std::endl; modbus_close(context); modbus_free(context); return false; } return true; } bool ModbusUtils::disconnect() { modbus_close(context); modbus_free(context); return true; } std::vector ModbusUtils::read() { modbus_set_slave(context, 6); auto list = std::vector(); uint16_t registers[64]; int count; count = modbus_read_registers(context, 2, 1, registers); for (auto i = 0; i < count; i++) { // stream << " registers: " << std::oct << registers[i] << " the hex value : " << std::hex << registers[i]; auto value = registers[i]; list.push_back(value); } return list; }