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

#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) ;
}
}