Merhaba arkadaslar Beaglebone Black üzerinde Libmodbus stackını kullanarak modbus server geliştiriyorum.Gelen sorgunun hangi fonksiyonu gönderdiğini anlıyorum fakat hangi değer okuduğunu anlayamıyorum.Daha önce kullanan varsa yardımcı olursa cok sevinirim.
#include <errno.h>
#include "string.h"
#include <modbus.h>
int main(void)
{
reg_update();
int s;
modbus_t *ctx;
modbus_mapping_t *mb_mapping;
int header_length;
uint8_t query[MODBUS_TCP_MAX_ADU_LENGTH];
int rc;
ctx = modbus_new_tcp("192.168.1.21", 1502);
//modbus_set_debug(ctx, TRUE); //debug kapali
header_length = modbus_get_header_length(ctx);
mb_mapping = modbus_mapping_new(0, 0, 0, 20);
if (mb_mapping == NULL) {
fprintf(stderr, "Failed to allocate the mapping: %s\n",
modbus_strerror(errno));
modbus_free(ctx);
return -1;
}
s = modbus_tcp_listen(ctx, 1);
modbus_tcp_accept(ctx, &s);
for (;;)
{
rc = modbus_receive(ctx, query);
if (rc > 0)
{
}
else if (rc == -1)
{
//error
break;
}
if(query[header_length]==0x01)
{
printf("Read coil\n");
}
if (query[header_length] == 0x03) //holding register degerlerini gonder
{
printf("Read Hold REgister\n");
}
}
printf("Quit the loop: %s\n", modbus_strerror(errno));
if (s != -1)
{
close(s);
}
modbus_mapping_free(mb_mapping);
modbus_close(ctx);
modbus_free(ctx);
return 0;
}