diff --git a/06MultipleTcp/TcpMaster/Makefile b/06MultipleTcp/TcpMaster/Makefile new file mode 100644 index 0000000..59e481f --- /dev/null +++ b/06MultipleTcp/TcpMaster/Makefile @@ -0,0 +1,19 @@ +CC = gcc +CFLAGS = -Wall +LDFLAGS = -lmodbus + +SRCS = TcpMaster.c +OBJS = $(SRCS:.c=.o) +EXEC = TcpMaster + +all: $(EXEC) + +$(EXEC): $(OBJS) + $(CC) $(CFLAGS) $(OBJS) -o $(EXEC) $(LDFLAGS) + +%.o: %.c + $(CC) $(CFLAGS) -c $< -o $@ + +clean: + rm -f $(OBJS) $(EXEC) + diff --git a/06MultipleTcp/TcpMaster/TcpMaster.c b/06MultipleTcp/TcpMaster/TcpMaster.c new file mode 100644 index 0000000..be0675e --- /dev/null +++ b/06MultipleTcp/TcpMaster/TcpMaster.c @@ -0,0 +1,95 @@ +#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 ; +} diff --git a/06MultipleTcp/TcpSlave/Makefile b/06MultipleTcp/TcpSlave/Makefile new file mode 100644 index 0000000..6c4155a --- /dev/null +++ b/06MultipleTcp/TcpSlave/Makefile @@ -0,0 +1,19 @@ +CC = gcc +CFLAGS = -Wall +LDFLAGS = -lmodbus + +SRCS = TcpSlave.c +OBJS = $(SRCS:.c=.o) +EXEC = TcpSlave + +all: $(EXEC) + +$(EXEC): $(OBJS) + $(CC) $(CFLAGS) $(OBJS) -o $(EXEC) $(LDFLAGS) + +%.o: %.c + $(CC) $(CFLAGS) -c $< -o $@ + +clean: + rm -f $(OBJS) $(EXEC) + diff --git a/06MultipleTcp/TcpSlave/TcpSlave b/06MultipleTcp/TcpSlave/TcpSlave new file mode 100755 index 0000000..8ba1e98 Binary files /dev/null and b/06MultipleTcp/TcpSlave/TcpSlave differ diff --git a/06MultipleTcp/TcpSlave/TcpSlave.c b/06MultipleTcp/TcpSlave/TcpSlave.c new file mode 100644 index 0000000..9f7c7d4 --- /dev/null +++ b/06MultipleTcp/TcpSlave/TcpSlave.c @@ -0,0 +1,184 @@ +#include +#include +#include +#include +#include + +#include + + +int dataProcessing( uint8_t* query , modbus_mapping_t* map) ; + + +//TCP模式的Slave端程序 +int main(void) +{ + int ret = 0 ; + int sockfd = -1 ; + modbus_t* ctx = NULL ; + modbus_mapping_t* map = NULL ; + + uint8_t query[MODBUS_TCP_MAX_ADU_LENGTH] ; + + //1. 设置串口信息 + ctx = modbus_new_tcp("192.168.1.231", 1502) ; + if (NULL == ctx) + { + fprintf(stderr, "Error: %s\n", modbus_strerror(errno)) ; + return 1 ; + } + else + { + printf("设置TCP信息成功\n") ; + } + + map = modbus_mapping_new_start_address(0 , 0 , 0 , 0 , 30000 , 25 , 40000 , 135) ; + if (NULL == map) + { + fprintf(stderr, "Error: mapping %s\n", modbus_strerror(errno)) ; + modbus_free(ctx) ; + return 1 ; + } + + for(int i = 0 ; i < 24 ; i++) + { + map->tab_registers[i] = i ; + } + + map->tab_registers[24] = 999 ; + //浮点测试 + //map->tab_registers[2] = 0x0020 ; + //map->tab_registers[3] = 0xF147 ; + + for(int i = 0 ; i < 135 ; i++) + { + map->tab_input_registers[i] = i * 2 ; + } + + //4. 开始监听端口 + sockfd = modbus_tcp_listen(ctx, 1) ; + if (-1 == sockfd) + { + printf("modbus_tcp_listen failed...\n") ; + modbus_free(ctx) ; + return 1 ; + } + + //5. 接受客户端连接 + ret = modbus_tcp_accept(ctx, &sockfd) ; + if (-1 == ret) + { + printf("modbus_tcp_accept failedl: %s\n", modbus_strerror(errno)) ; + modbus_free(ctx) ; + return 1 ; + } + + //6. 循环接受客户端请求,并且响应客户端 + while (1) + { + memset(query, 0, sizeof(query)) ; + //获取查询请求报文 + ret = modbus_receive(ctx, query) ; + if (ret >= 0) + { + //恢复响应报文 + modbus_reply(ctx, query, ret, map) ; + dataProcessing( query , map ) ; + } + else + { + printf("Connection close\n") ; + modbus_close(ctx) ; + //等待下一个客户端连接 + modbus_tcp_accept(ctx, &sockfd) ; + } + } + printf("Quit the loop: %s\n", modbus_strerror(errno)) ; + //6. 释放内存 + modbus_mapping_free(map) ; + //7. 关闭设备 + modbus_close(ctx) ; + modbus_free(ctx) ; + + return 0 ; +} + + +int dataProcessing( uint8_t* query , modbus_mapping_t* map ) +{ + uint16_t address ; + uint16_t address1 ; + uint16_t address2 ; + int i = 0 ; + + //浮点处理 + uint16_t floatArray[2] = {0} ; + float floatting ; + + //unsigned 转 signed + uint16_t sint ; + + + //尝试处理浮点数 + floatArray[0] = map->tab_registers[2] ; + floatArray[1] = map->tab_registers[3] ; + floatting = modbus_get_float_dcba(floatArray) ; + + //将unsigned转为signed + if(map->tab_registers[4] & 0x8000) + { + sint = (~(map->tab_registers[4])) + 1 ; + } + else + { + sint = map->tab_registers[4] ; + } + printf("\n请求序列号:%d\n" , query[1] ) ; + if( query[7] == 4) + { + printf("读取Input Registers寄存器\n") ; + } + else if(query[7] == 3) + { + printf("读取Holding Registers寄存器\n") ; + } + address1 = query[8] << 8 ; + address2 = query[9] & 0x00ff ; + address = address1 | address2 ; + printf("本次读取的起始地址为:%d\n" , address) ; + printf("本次读取个数为:%d个\n" , query[11] ) ; + //打印信息 + printf("\n======================================================================\n") ; + + printf("\n----------map->tab_registers----------\n") ; + for(i = 0 ; i < 24 ; i++) + { + printf("%d\t" , map->tab_registers[i]) ; + } + + printf("\n----------map->tab_input_registers----------\n") ; + for(i = 0 ; i < 135 ; i ++) + { + printf("%d\t" , map->tab_input_registers[i]) ; + } + + printf("\n----------float DC BA ----------\n"); + printf("%f\n" , floatting) ; + + printf("----------signed int ----------\n"); + if(map->tab_registers[4] & 0x8000) + { + sint = (~(map->tab_registers[4])) + 1 ; + printf("-%d\n" , sint) ; + } + else + { + sint = map->tab_registers[4] ; + printf("%d\n" , sint); + } + printf("======================================================================\n") ; + + map->tab_registers[0]++ ; + + return 0 ; +} diff --git a/06MultipleTcp/TcpSlave/TcpSlave.o b/06MultipleTcp/TcpSlave/TcpSlave.o new file mode 100644 index 0000000..8a9bb56 Binary files /dev/null and b/06MultipleTcp/TcpSlave/TcpSlave.o differ diff --git a/06MultipleTcp/TcpSlave/output.log b/06MultipleTcp/TcpSlave/output.log new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/06MultipleTcp/TcpSlave/output.log @@ -0,0 +1 @@ + diff --git a/06MultipleTcp/TcpSlave01/Makefile b/06MultipleTcp/TcpSlave01/Makefile new file mode 100644 index 0000000..6c4155a --- /dev/null +++ b/06MultipleTcp/TcpSlave01/Makefile @@ -0,0 +1,19 @@ +CC = gcc +CFLAGS = -Wall +LDFLAGS = -lmodbus + +SRCS = TcpSlave.c +OBJS = $(SRCS:.c=.o) +EXEC = TcpSlave + +all: $(EXEC) + +$(EXEC): $(OBJS) + $(CC) $(CFLAGS) $(OBJS) -o $(EXEC) $(LDFLAGS) + +%.o: %.c + $(CC) $(CFLAGS) -c $< -o $@ + +clean: + rm -f $(OBJS) $(EXEC) + diff --git a/06MultipleTcp/TcpSlave01/TcpSlave b/06MultipleTcp/TcpSlave01/TcpSlave new file mode 100755 index 0000000..67656b3 Binary files /dev/null and b/06MultipleTcp/TcpSlave01/TcpSlave differ diff --git a/06MultipleTcp/TcpSlave01/TcpSlave.c b/06MultipleTcp/TcpSlave01/TcpSlave.c new file mode 100644 index 0000000..486d30c --- /dev/null +++ b/06MultipleTcp/TcpSlave01/TcpSlave.c @@ -0,0 +1,172 @@ +#include +#include +#include +#include +#include + +#include + +//TCP模式的Slave端程序 +int main(void) +{ + int ret = 0 ; + int sockfd = -1 ; + modbus_t* ctx = NULL ; + modbus_mapping_t* map = NULL ; + uint8_t query[MODBUS_TCP_MAX_ADU_LENGTH] ; + int i = 0 ; + + //浮点处理 + uint16_t floatArray[2] = {0} ; + float floatting ; + + //unsigned 转 signed + uint16_t sint ; + + //1. 设置串口信息 + ctx = modbus_new_tcp("192.168.1.231", 1503) ; + if (NULL == ctx) + { + fprintf(stderr, "Error: %s\n", modbus_strerror(errno)) ; + return 1 ; + } + else + { + printf("设置TCP信息成功\n") ; + } + +#if 0 + //2. 设置调试模式 + ret = modbus_set_debug(ctx, TRUE); + if (-1 == ret) + { + printf("modbus_set_debug failed...\n") ; + modbus_free(ctx); + return 1; + } +#endif + + //3. 申请内存 存放寄存器数据 + //map = modbus_mapping_new( 0 , 0 , 30000 + 25 , 0) ; + map = modbus_mapping_new_start_address(0 , 0 , 0 , 0 , 30000 , 25 , 40000 , 135) ; + if (NULL == map) + { + fprintf(stderr, "Error: mapping %s\n", modbus_strerror(errno)) ; + modbus_free(ctx) ; + return 1 ; + } + for(i = 0 ; i < 24 ; i++) + { + map->tab_registers[i] = i + 777; + } + map->tab_registers[24] = 999 ; + //map->tab_registers[2] = 0x0020 ; + //map->tab_registers[3] = 0xF147 ; + + for(i = 0 ; i < 135 ; i++) + { + map->tab_input_registers[i] = i * 2 + 100 ; + } + + //4. 开始监听端口 + sockfd = modbus_tcp_listen(ctx, 1) ; + if (-1 == sockfd) + { + printf("modbus_tcp_listen failed...\n") ; + modbus_free(ctx) ; + return 1 ; + } + + //5. 接受客户端连接 + ret = modbus_tcp_accept(ctx, &sockfd) ; + if (-1 == ret) + { + printf("modbus_tcp_accept failedl: %s\n", modbus_strerror(errno)) ; + modbus_free(ctx) ; + return 1 ; + } + + //6. 循环接受客户端请求,并且响应客户端 + while (1) + { + memset(query, 0, sizeof(query)) ; + + //获取查询请求报文 + ret = modbus_receive(ctx, query) ; + if (ret >= 0) + { + //恢复响应报文 + modbus_reply(ctx, query, ret, map) ; + } + else + { + printf("Connection close\n") ; + + modbus_close(ctx) ; + + //等待下一个客户端连接 + modbus_tcp_accept(ctx, &sockfd) ; + } + + //尝试处理浮点数 + floatArray[0] = map->tab_registers[2] ; + floatArray[1] = map->tab_registers[3] ; + floatting = modbus_get_float_dcba(floatArray) ; + + //将unsigned转为signed + if(map->tab_registers[4] & 0x8000) + { + sint = (~(map->tab_registers[4])) + 1 ; + } + else + { + sint = map->tab_registers[4] ; + } + + //打印信息 + printf("\n======================================================================\n") ; + + printf("\n----------map->tab_registers----------\n") ; + for(i = 0 ; i < 24 ; i++) + { + printf("%d\t" , map->tab_registers[i]) ; + } + + printf("\n----------map->tab_input_registers----------\n") ; + for(i = 0 ; i < 135 ; i ++) + { + printf("%d\t" , map->tab_input_registers[i]) ; + } + + printf("\n----------float DC BA ----------\n"); + printf("%f\n" , floatting) ; + + printf("----------signed int ----------\n"); + if(map->tab_registers[4] & 0x8000) + { + sint = (~(map->tab_registers[4])) + 1 ; + printf("-%d\n" , sint) ; + } + else + { + sint = map->tab_registers[4] ; + printf("%d\n" , sint); + } + printf("======================================================================\n") ; + + map->tab_registers[0]++ ; + //sleep(1) ; + } + + printf("Quit the loop: %s\n", modbus_strerror(errno)) ; + + //6. 释放内存 + modbus_mapping_free(map) ; + + //7. 关闭设备 + modbus_close(ctx) ; + modbus_free(ctx) ; + + return 0 ; +} + diff --git a/06MultipleTcp/TcpSlave01/TcpSlave.o b/06MultipleTcp/TcpSlave01/TcpSlave.o new file mode 100644 index 0000000..ccacb5d Binary files /dev/null and b/06MultipleTcp/TcpSlave01/TcpSlave.o differ diff --git a/07ARMtestRTU/RTUMaster/Makefile b/07ARMtestRTU/RTUMaster/Makefile new file mode 100644 index 0000000..39add07 --- /dev/null +++ b/07ARMtestRTU/RTUMaster/Makefile @@ -0,0 +1,19 @@ +CC = arm-linux-gnueabi-gcc +CFLAGS = -Wall +LDFLAGS = -lmodbus + +SRCS = RTUMaster.c +OBJS = $(SRCS:.c=.o) +EXEC = RTUMaster + +all: $(EXEC) + +$(EXEC): $(OBJS) + $(CC) $(CFLAGS) $(OBJS) -o $(EXEC) $(LDFLAGS) + +%.o: %.c + $(CC) $(CFLAGS) -c $< -o $@ + +clean: + rm -f $(OBJS) $(EXEC) + diff --git a/07ARMtestRTU/RTUMaster/RTUMaster b/07ARMtestRTU/RTUMaster/RTUMaster new file mode 100755 index 0000000..b8ac297 Binary files /dev/null and b/07ARMtestRTU/RTUMaster/RTUMaster differ diff --git a/07ARMtestRTU/RTUMaster/RTUMaster.c b/07ARMtestRTU/RTUMaster/RTUMaster.c new file mode 100644 index 0000000..6cb0b58 --- /dev/null +++ b/07ARMtestRTU/RTUMaster/RTUMaster.c @@ -0,0 +1,121 @@ +#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) ; + } + +} diff --git a/07ARMtestRTU/RTUMaster/RTUMaster.o b/07ARMtestRTU/RTUMaster/RTUMaster.o new file mode 100644 index 0000000..8d343e9 Binary files /dev/null and b/07ARMtestRTU/RTUMaster/RTUMaster.o differ diff --git a/07ARMtestRTU/RTUSlave/Makefile b/07ARMtestRTU/RTUSlave/Makefile new file mode 100644 index 0000000..41f322b --- /dev/null +++ b/07ARMtestRTU/RTUSlave/Makefile @@ -0,0 +1,19 @@ +CC = arm-linux-gnueabi-gcc +CFLAGS = -Wall +LDFLAGS = -lmodbus + +SRCS = RTUSlave.c +OBJS = $(SRCS:.c=.o) +EXEC = RTUSlave + +all: $(EXEC) + +$(EXEC): $(OBJS) + $(CC) $(CFLAGS) $(OBJS) -o $(EXEC) $(LDFLAGS) + +%.o: %.c + $(CC) $(CFLAGS) -c $< -o $@ + +clean: + rm -f $(OBJS) $(EXEC) + diff --git a/07ARMtestRTU/RTUSlave/RTUSlave b/07ARMtestRTU/RTUSlave/RTUSlave new file mode 100755 index 0000000..ef4480f Binary files /dev/null and b/07ARMtestRTU/RTUSlave/RTUSlave differ diff --git a/07ARMtestRTU/RTUSlave/RTUSlave.c b/07ARMtestRTU/RTUSlave/RTUSlave.c new file mode 100644 index 0000000..fff4ac4 --- /dev/null +++ b/07ARMtestRTU/RTUSlave/RTUSlave.c @@ -0,0 +1,159 @@ +#include +#include +#include +#include +#include + +#include + +int dataProessing( uint8_t *query , modbus_mapping_t* map ) ; + +int main(void) +{ + int ret = 0; + + modbus_t* ctx = NULL; + modbus_mapping_t* map = NULL; + + uint8_t query[MODBUS_RTU_MAX_ADU_LENGTH]; + + + ctx = modbus_new_rtu("/dev/ttyAS3", 115200 , 'N', 8, 1); + if (NULL == ctx) + { + fprintf(stderr, "New Rtu Error: %s\n", modbus_strerror(errno)); + return 1; + } + + + ret = modbus_set_slave( ctx, 1 ); + if (-1 == ret) + { + printf("设置从机地址失败.. %s\n", modbus_strerror(errno)); + modbus_free(ctx); + return 1; + } +#if 0 + ret = modbus_set_debug(ctx, TRUE); + if (-1 == ret) + { + printf("modbus_set_debug failed...\n"); + modbus_free(ctx); + return 1; + } +#endif + + + ret = modbus_connect(ctx); + if (-1 == ret) + { + fprintf(stderr, "打开串口失败: %s\n", modbus_strerror(errno)); + modbus_free(ctx); + return 1; + } + + + + map = modbus_mapping_new_start_address( 0 , 0 , 0 , 0 , 30000 , 24 , 40000 , 135 ) ; + if (NULL == map) + { + fprintf(stderr, "Error: mapping %s\n", modbus_strerror(errno)); + modbus_free(ctx); + return 1; + } + + for(int i = 0 ; i < 24 ; i++) + { + map->tab_registers[i] = i ; + } + + for(int i = 0 ; i < 135 ; i++ ) + { + map->tab_input_registers[i] = i * 2 ; + } + + while (1) + { + map->tab_registers[0]++ ; + memset(query, 0, sizeof(query)); + + //获取查询请求报文 + ret = modbus_receive(ctx, query); + if (ret >= 0) + { + //恢复响应报文 + modbus_reply(ctx, query, ret, map); + dataProessing( query , map ) ; + } + else + { + printf("Connection close\n"); + } + } + + printf("Quit the loop: %s\n", modbus_strerror(errno)); + + + modbus_mapping_free(map); + + modbus_close(ctx); + modbus_free(ctx); + + return 0; +} + + +int dataProessing( uint8_t *query , modbus_mapping_t* map ) +{ + uint16_t address ; + uint16_t address1 ; + uint16_t address2 ; + + uint16_t count ; + uint16_t count1 ; + uint16_t count2 ; +#if 0 + printf("\n=====================query start======================\n") ; + for(int i = 0 ; i < MODBUS_RTU_MAX_ADU_LENGTH ; i++) + { + printf( "%d\t" , query[i] ) ; + } + printf("\n====================query end==========================\n") ; + + return 0 ; +#endif + printf("\n=============================================================\n") ; + printf("从机设备地址为:%d\n" , query[0] ) ; + if( query[1] == 3 ) + { + printf("03 读取Read Holding Registers寄存器\n") ; + } + else if( query[1] == 4 ) + { + printf("04 读取Read Input Registers寄存器\n") ; + } + address1 = query[2] << 8 ; + address2 = query[3] & 0x00ff ; + address = address1 | address2 ; + printf("读取的起始地址为:%d\n" , address) ; + + count1 = query[4] << 8 ; + count2 = query[5] & 0x00ff ; + count = count1 | count2 ; + printf("读取的起始地址为:%d\n" , count) ; + + printf("----------tab_registers----------\n") ; + for(int i = 0 ; i < 24 ; i++) + { + printf("%d\t" , map->tab_registers[i] ) ; + } + + printf("\n----------tab_input_registers----------\n") ; + for(int i = 0 ; i < 135 ; i++ ) + { + printf("%d\t" , map->tab_input_registers[i] ) ; + } + printf("\n=====================================================================\n" ) ; + + return 0 ; +} diff --git a/07ARMtestRTU/RTUSlave/RTUSlave.o b/07ARMtestRTU/RTUSlave/RTUSlave.o new file mode 100644 index 0000000..25d4074 Binary files /dev/null and b/07ARMtestRTU/RTUSlave/RTUSlave.o differ diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29