LibModbus kullanan var mı?

Başlatan EMP_Otto, 08 Ağustos 2014, 10:57:03

EMP_Otto

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;
}
Bu işler zordur,özveri ister...