#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <errno.h>
#include <modbus.h>
int main(int argc, char** argv)
{
int socket;
modbus_t *ctx;
modbus_mapping_t *mb_mapping;
if(argc != 2) {
fprintf(stderr, "Usage: %s <PORT>\n\n", argv[0]);
exit(1);
}
ctx = modbus_new_tcp("127.0.0.1", atoi(argv[1]));
mb_mapping = modbus_mapping_new(500, 500, 500, 500);
if (mb_mapping == NULL) {
fprintf(stderr, "Failed to allocate the mapping: %s\n",
modbus_strerror(errno));
modbus_free(ctx);
return -1;
}
socket = modbus_tcp_listen(ctx, 1);
modbus_tcp_accept(ctx, &socket);
for (;;) {
uint8_t query[MODBUS_TCP_MAX_ADU_LENGTH];
int rc;
rc = modbus_receive(ctx, query);
if (rc != -1) {
modbus_reply(ctx, query, rc, mb_mapping);
} else {
break;
}
}
printf("Quit the loop: %s\n", modbus_strerror(errno));
modbus_mapping_free(mb_mapping);
modbus_close(ctx);
modbus_free(ctx);
return 0;
}