-
Notifications
You must be signed in to change notification settings - Fork 13
Open
Description
Binary file is created against to the program https://github.com/rscada/libmodbus/blob/master/bin/modbus-tcp-discrete-output.c
After creating the socket, every 26th attempt getting the below error.Further socket can't be executed.
ERROR Message:
main: modbus_tcp_init failed: modbus_tcp_init: couldn't connect: Connection timed out.
Modified the below parameters
"HOST COMMAND ADDRESS" values are passed inside the code itself. Instead of getting as argument.
Declared as below:
addr = 0;
range = 16;
char IP_ADDRESS;
char PORT;
host= test->IP_ADDRESS;
port = test->PORT;
Below part removed:
if (argc != 4 && argc != 5)
{
printf("Error: Invalid arguments.\n\n");
usage(argv[0]);
}
host = argv[1];
command = argv[2];
if (strcmp(command, "write") == 0)
{
if (argc != 5)
{
printf("Error: Invalid arguments: COMMAND write requies additional argument VALUE\n\n");
usage(argv[0]);
}
addr = atoi(argv[3]);
value = atoi(argv[4]);
}
else if (strcmp(command, "read") == 0)
{
addr = atoi(argv[3]);
}
else if (strcmp(command, "readrange") == 0)
{
addr = atoi(argv[3]);
range = 8;
}
else
{
printf("Error: Invalid COMMAND: %s\n\n", command);
usage(argv[0]);
}
Below modified part running in while loop:
while(1)
{
pkt = modbus_frame_new();
modbus_read_coil_status(pkt, addr, range);
// setup tcp
if (modbus_tcp_init(host, port, &handle) != 0)
{
printf("%s: modbus_tcp_init failed: %s.\n", __PRETTY_FUNCTION__, modbus_error_str);
return 0;
}
if (debug)
modbus_frame_print(pkt);
// Send command
if (modbus_tcp_send(&handle, pkt) != 0)
{
printf("%s: modbus_tcp_send failed: %s.\n", __PRETTY_FUNCTION__, modbus_error_str);
return 0;
}
// recv response
if (modbus_tcp_recv(&handle, pkt) != 0)
{
printf("%s: modbus_tcp_recv failed: %s.\n", __PRETTY_FUNCTION__, modbus_error_str);
return 0;
}
if (modbus_frame_verify(pkt) == -1)
{
printf("%s: modbus_frame_verify failed: %s\n", __PRETTY_FUNCTION__, modbus_error_str);
return 0;
}
if (debug)
modbus_frame_print(pkt);
if (strcmp(command, "write") == 0)
{
; //
}
else // a read command
{
for (i = range - 1; i >= 0; i--)
{
printf("%d ", pkt->data_buff[1] & (0x01<<i) ? 1 : 0);
}
printf("\n");
}
modbus_frame_free(pkt);
}//while loop
return 0;
Metadata
Metadata
Assignees
Labels
No labels