有没有大佬有用libmodbus编写的简单的modbus tcp服务端和客户端的代码??我的代码不能打印出有用的数据对modbus的编程也不太了解。

有没有大佬有用libmodbus编写的简单的modbus tcp服务端和客户端的代码??我的代码不能打印出有用的数据对modbus的编程也不太了解。
客户端:
#include
#include
#include
#include
#include
#include

const uint16_t UT_INPUT_REGISTERS_ADDRESS = 0x1; //输入寄存器地址
const uint16_t UT_BITS_ADDRESS = 0x04; //线圈地址
const uint16_t UT_INPUT_REGISTERS_NB = 0xA; //输入寄存器数量
const uint16_t UT_INPUT_REGISTERS_TAB[] = { 0x000A };

int main(void)
{
int socket=-1;
modbus_t *ctx;
modbus_mapping_t *mb_mapping;
uint8_t *tab_rp_bits;

int nb = 0x25; //线圈数量
int rc = 0;

ctx=modbus_new_tcp(“127.0.0.1”,1502); //创建一个TCP容器
modbus_set_debug(ctx,TRUE); //设置debug模式

//申请四块内存区用以存放寄存器数据,这里各申请500各寄存器地址
mb_mapping=modbus_mapping_new(500,500,500,500);
if(mb_mapping == NULL)
{
fprintf(stderr, “failed mapping :%s\n”,modbus_strerror(errno));
modbus_free(ctx);
return -1;
}

socket =modbus_tcp_listen(ctx,1);
if(socket == -1)
{
fprintf(stderr, “Unable to listen TCP\n”);
modbus_free(ctx);
return -1;
}

modbus_tcp_accept(ctx,&socket);
while(1)
{
/*
uint8_t query[MODBUS_TCP_MAX_ADU_LENGTH];
int rc;
rc=modbus_receive(ctx,query); //获取查询保温
if(rc>0)
{
//rc id the query size
modbus_reply(ctx,query,rc,mb_mapping); //回复响应报文
}
else
{
//connection closed by the client or error
printf(“Connecion Close\n”);
//close ctx
modbus_close(ctx);
//等待下一个客户端报文
modbus_tcp_accept(ctx,&socket);
}
*/
memset(tab_rp_bits, 0, nb * sizeof(uint8_t)); //清空传出的状态值
rc = modbus_read_bits(ctx, UT_BITS_ADDRESS, 1, tab_rp_bits);
//printf(“modbus_read_bits 0 \n modbus_read_bits: \n”);
if (rc != 1)
{
printf(“FAILED (nb points %d)\n”, rc);
}
printf(“tab_rp_bits is %d\n”,tab_rp_bits);
sleep(1);
}
printf(“Quit the loop:%s\n”,modbus_strerror(errno));
modbus_mapping_free(mb_mapping);
modbus_close(ctx);
modbus_free(ctx);
return 0;
}

服务端:
#include
#include
#include
#include
#include
#include
#include
const uint16_t UT_INPUT_REGISTERS_ADDRESS = 0x1; //输入寄存器地址
const uint16_t UT_BITS_ADDRESS = 0x04; //线圈地址
const uint16_t UT_INPUT_REGISTERS_NB = 0xA; //输入寄存器数量
const uint16_t UT_INPUT_REGISTERS_TAB[] = { 0x000A };
int main(int argc, char const *argv[])
{
int nb = 0x25; //线圈数量
int rc = 0;
modbus_t *ctx; //modbus实例
uint8_t *tab_rp_bits; //传出的状态值
tab_rp_bits = (uint8_t *) malloc(nb * sizeof(uint8_t)); //分配空间
memset(tab_rp_bits, 0, nb * sizeof(uint8_t)); //清空内存
ctx = modbus_new_tcp(“127.0.0.1”, 1502); // 初始化 ip:port
if(ctx == NULL)
{
fprintf(stderr, “Unable to allocate libmodbus context\n”);
return -1;
}

if(modbus_connect(ctx) == -1)  //发送链接给服务器
{
    fprintf(stderr, "Connection failed: %s\n", modbus_strerror(errno));
    modbus_free(ctx);  //失败则释放modbus
    return -1;
}
while(1)
{
    memset(tab_rp_bits, 0, nb * sizeof(uint8_t));  //清空传出的状态值
    printf("please put a num:");
    scanf("%s",tab_rp_bits);
    rc = modbus_write_bits(ctx, UT_BITS_ADDRESS, 1,tab_rp_bits);
    if (rc != 1) 
    {
        printf("FAILED (nb points %d)\n", rc);
    }
    
}
modbus_close(ctx);
modbus_free(ctx);
return 0;

}

希望大佬们能帮忙指正下,谢谢

你可能感兴趣的:(有没有大佬有用libmodbus编写的简单的modbus tcp服务端和客户端的代码??我的代码不能打印出有用的数据对modbus的编程也不太了解。)