#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <errno.h>
#include "modbus.h"
int main()
{
int server_socket = -1;
modbus_t *ctx;
modbus_mapping_t *mb_mapping;
//创建一个TCP
ctx = modbus_new_tcp(NULL,1502);
//debug 模式
modbus_set_debug(ctx,TRUE);
//申请4块内存用于存放寄存器数据,各申请500
mb_mapping = modbus_mapping_new(500,500,500,500);
if(mb_mapping == NULL)
{
fprintf(stderr,"fail mapping :%s\n",modbus_sterror(errno));
modbus_free(ctx);
return -1;
}
//监听端口
server_socket = modbus_tcp_listen(ctx,1);
if(server_socket == -1)
{
fprintf(stderr,"fail listen\n");
modbus_free(ctx);
return -1;
}
//接收数据
modbus_tcp_accept(ctx,&server_socket);
while(1)
{
uint8_t query[MODBUS_TCP_ADU_LENGTH];
int rc;
//获取查询报文
rc = modbus_receive(ctx,query);
if(rc > 0)
{
//回应响应报文
modbus_reply(ctx,query,rc,mb_mapping);
}
else
{
printf("connect close\n");
modbus_close(ctx);
//等待下一个客户端报文
modbus_tcp_accept(ctx,&server_socket);
}
}
printf("quit the loop :%s\n",modbus_strerror(errno));
modbus_mapping_free(mb_mapping);
modbus_close(ctx);
modbus_free(ctx);
return 0;
}
Modbus TCP Server
最新推荐文章于 2023-02-16 10:28:18 发布