123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- #include "ModbusUtils.h"
- #include <unistd.h>
- #include <iostream>
- #include <vector>
- #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<uint16_t> ModbusUtils::read() {
- modbus_set_slave(context, 6);
- auto list = std::vector<uint16_t>();
- 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;
- }
|