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.
121 lines
2.3 KiB
121 lines
2.3 KiB
#include <stdio.h> |
|
#include <errno.h> |
|
#include <unistd.h> |
|
#include <string.h> |
|
|
|
#include <modbus.h> |
|
|
|
|
|
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) ; |
|
} |
|
|
|
}
|
|
|