#include #include #include #include #include int main() { //初始化modbus实例 modbus_t* ctx ; ctx = modbus_new_rtu( "/dev/ttyAS1", 115200, 'N', 8, 1 ) ; if ( ctx == NULL) { fprintf( stderr , "串口设置失败:%s\n" , modbus_strerror(errno) ) ; return -1 ; } else { fprintf( stdout , "串口设置成功\n") ; } //设置为RS485模式 int ret = -1 ; /* ret = modbus_rtu_set_serial_mode(ctx , MODBUS_RTU_RS485); if( ret == -1) { fprintf( stderr , "串口设置模式失败:%s\n" , modbus_strerror(errno) ) ; return -1 ; } else { fprintf( stdout , "串口设置模式成功\n") ; } */ //设置从机地址为 1 ret = modbus_set_slave( ctx , 1 ) ; if( ret == -1) { fprintf( stderr , "从机地址设置失败:%s\n" , modbus_strerror(errno) ) ; return -1 ; } else { fprintf( stdout , "从机地址设置成功\n") ; } //设置debug模式 ret = modbus_set_debug( ctx , TRUE ) ; if( ret == -1 ) { fprintf( stderr , "debug模式设置失败:%s\n" , modbus_strerror(errno) ) ; return -1 ; } else { fprintf( stdout , "debug模式设置成功\n") ; } //连接串口 ret = modbus_connect( ctx ) ; if( ret == -1 ) { fprintf( stderr , "connect设置失败:%s\n" , modbus_strerror(errno) ) ; return -1 ; } else { fprintf( stdout , "connect模式设置成功\n") ; } //初始化寄存器数组 uint16_t tab_registers[24] ; uint16_t tab_input_registers[135] ; while(1) { memset( tab_registers , 0 , sizeof(tab_registers) ) ; memset( tab_input_registers , 0 , sizeof(tab_input_registers) ) ; //直接读取 tab_registers modbus_read_registers( ctx , 30000 , 24 , tab_registers ) ; //直接读取 tab_input_registers modbus_read_input_registers( ctx , 40000 , 100 , tab_input_registers ) ; printf("===========================================\n") ; printf("---------------tab_registers---------------\n") ; for( int i = 0 ; i < 24 ; i++ ) { printf("%d\t" , tab_registers[i] ) ; } printf("\n") ; printf("===========================================\n") ; printf("----------tab_input_registers--------------\n") ; for( int i = 0 ; i < 135 ; i++) { printf("%d\t" , tab_input_registers[i]) ; } printf("\n") ; printf("===========================================\n") ; sleep(1) ; } }