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.
		
		
		
		
			
				
					122 lines
				
				2.3 KiB
			
		
		
			
		
	
	
					122 lines
				
				2.3 KiB
			| 
								 
											2 years ago
										 
									 | 
							
								#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) ;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								}
							 |