#include <iostream>
#include <stdio.h>
#include "modbus.h"
#include <string.h>
//parameters for modbus_new_rtu
int baud = 9600; //baud rate
char par = 'O'; //parity
int d_bit = 8; //number of bits of data
int s_bit = 1; //bits of stop
int slave = 2;
//parameters for modbus_read_registers
int index = 501;
int n_reg = 2;
using namespace std;
int main(){
modbus_t *ctx;
uint16_t tab_reg[64];
uint32_t old_response_to_sec;
uint32_t old_response_to_usec;
uint32_t new_response_to_sec;
uint32_t new_response_to_usec;
int rc;
ctx = modbus_new_rtu("COM2", baud, par, d_bit, s_bit); //modbus_t *modbus_new_rtu(const char *device, int baud, char parity, int data_bit, int stop_bit);
int s_stat = modbus_set_slave(ctx, slave);
if (s_stat == -1) {
fprintf(stderr, "Connection failed: %s\n", modbus_strerror(errno));
modbus_free(ctx);
return -1;
}
else
cout << "Slave index: "<<slave<<endl;
if (modbus_rtu_set_serial_mode(ctx, MODBUS_RTU_RS485) == -1)
fprintf(stderr, "Unable to set mode: %s\n", modbus_strerror(errno));
modbus_set_debug(ctx, TRUE);
modbus_get_response_timeout(ctx, &old_response_to_sec, &old_response_to_usec);
int c_stat = modbus_connect(ctx);
if (c_stat == -1) {
fprintf(stderr, "Connection failed: %s\n", modbus_strerror(errno));
modbus_free(ctx);
return -1;
}
else
cout << "Connection started"<< endl;
modbus_get_response_timeout(ctx, &new_response_to_sec, &new_response_to_usec);
if ((old_response_to_sec == new_response_to_sec) && (old_response_to_usec == new_response_to_usec)){
cout << "No response timeout modification on connect"<<endl;
}
else{
cout << "Response timeout modification on connect"<<endl;
return -1;
}
rc = modbus_read_registers(ctx, index, n_reg, tab_reg);
if (rc == -1){
cout << "read failed: " << modbus_strerror(errno) << endl;
return -1;
}
else {
for (int i = 0; i<rc; i++){
cout << "reg[" << i << "] = " << tab_reg[i] << endl;
}
}
free(tab_reg);
modbus_close(ctx);
modbus_free(ctx);
system("PAUSE");
return 0;
}