#include #include #include #include #include #include //包含Modbus相关头文件 #include //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 ; }