You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

96 lines
2.4 KiB

#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
//包含Modbus相关头文件
#include <modbus.h>
//Tcp模式下的Master端
int main(void)
{
int ret = -1 ;
//创建需要轮询的ip地址 和 port端口号
char ipArray[2][16] = { "192.168.1.231" , "192.168.1.231" } ;
int portArray[2] = { 1502 , 1503 };
//创建读取数据的tab_registers数组 和 创将tab_input_registers的数组
uint16_t tab_registers[24] ;
uint16_t tab_input_registers[134] ;
//创建一个TCP类型的变量 并 使用for循环进行轮询
modbus_t* ctx[2] = { NULL , NULL } ;
for(int i = 0 ; i < 2; i++)
{
ctx[i] = modbus_new_tcp( ipArray[i] , portArray[i] );
if (NULL == ctx[i])
{
fprintf(stderr, "Error: %s\n", modbus_strerror(errno));
return 1;
}
else
{
printf("设置TCP成功\n");
}
//遍历 连接Server
ret = modbus_connect(ctx[i]);
if (-1 == ret)
{
fprintf(stderr, "Connection failed: %s\n", modbus_strerror(errno));
modbus_free(ctx[i]);
return 1;
}
}
while(1)
{
for(int i = 0 ; i < 2 ; i++)
{
//清空缓存并读取数据
memset( tab_registers , 0 , sizeof(tab_registers) ) ;
memset( tab_input_registers , 0 , sizeof(tab_input_registers) ) ;
ret = modbus_read_registers(ctx[i] , 30000 , 24 , tab_registers);
if( ret == -1 )
{
perror("read tab_registers error") ;
printf("\n") ;
fprintf( stderr , "read tab_registers error %s " , modbus_strerror(errno));
printf("\n") ;
}
ret = modbus_read_input_registers( ctx[i] , 40000 , 100 , tab_input_registers ) ;
if( ret == -1)
{
perror("read tab_input_registers error") ;
printf("\n") ;
fprintf( stderr , "read tab_input_registers error %s " , modbus_strerror(errno)) ;
}
printf("\n---------- IP is : %s ----------PORT is : %d----------\n" , ipArray[i] , portArray[i]) ;
printf("\n===================================================================\n") ;
printf("----------tab_registers value Array :----------\n") ;
for( int i = 0 ; i < 24 ; i++ )
{
printf("%d\t" , tab_registers[i]) ;
}
printf("\n----------tab_input_registers value Array :----------\n") ;
for( int i = 0 ; i < 135 ; i++)
{
printf("%d\t" , tab_input_registers[i] ) ;
}
printf("\n===================================================================\n") ;
sleep(1) ;
}
}
return 0 ;
}