Der Fehler liegt in der Adressierung. Mit modbus_write_register(s) werden die Wort-Merker gesetzt, deren Adressen mit 1001 beginnen. Die nachfolgenden Programme setzen einen einzelnen Wort-Merker oder eine Gruppe derer.
#include <stdio.h>
#include <modbus.h>
#include <errno.h>
int main(void) {
modbus_t *ctx;
int rc;
ctx = modbus_new_tcp("192.168.80.11", 502);
if (modbus_connect(ctx) == -1) {
fprintf(stderr, "Connection failed: \n");
modbus_free(ctx);
return -1;
}
rc = modbus_write_register(ctx, 1001, 4711);
printf ("rc= %i \n",rc);
if (rc == -1) {
fprintf(stderr, "Connection failed: %s\n", modbus_strerror(errno));
return -1; }
modbus_close(ctx);
modbus_free(ctx);
}
// int modbus_write_register(modbus_t *ctx, int addr, int value);
#include <stdio.h>
#include <modbus.h>
#include <errno.h>
int main(void) {
modbus_t *ctx;
uint16_t mwreg[] = {4411,5522,6633,7744,8855,9966};
int rc;
ctx = modbus_new_tcp("192.168.80.11", 502);
if (modbus_connect(ctx) == -1) {
fprintf(stderr, "Connection failed: \n");
modbus_free(ctx);
return -1;
}
rc = modbus_write_registers (ctx, 1001, 6, mwreg);
printf ("rc= %i \n",rc);
if (rc == -1) {
fprintf(stderr, "Connection failed: %s\n", modbus_strerror(errno));
return -1; }
modbus_close(ctx);
modbus_free(ctx);
}
// *int modbus_write_registers(modbus_t *'ctx', int 'addr', int 'nb', const uint16_t *'src');*