From d347d38448468b7eac22f057ee92d6a7dda6f8be Mon Sep 17 00:00:00 2001 From: wangchenyang <1404509497@qq.com> Date: Wed, 27 Mar 2024 17:49:16 +0800 Subject: [PATCH 1/5] first commit --- README.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 From e2deae7dd2c498d740109e9f65963da90fa8a26b Mon Sep 17 00:00:00 2001 From: wangchenyang <1404509497@qq.com> Date: Wed, 27 Mar 2024 18:08:17 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E8=87=B3=20''?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- RTUMaster.c | 121 ++++++++++++++++++++++++++++++++++++ RTUSlave.c | 159 ++++++++++++++++++++++++++++++++++++++++++++++++ TcpMaster.c | 95 +++++++++++++++++++++++++++++ TcpSlave.c | 172 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 547 insertions(+) create mode 100644 RTUMaster.c create mode 100644 RTUSlave.c create mode 100644 TcpMaster.c create mode 100644 TcpSlave.c diff --git a/RTUMaster.c b/RTUMaster.c new file mode 100644 index 0000000..6cb0b58 --- /dev/null +++ b/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/RTUSlave.c b/RTUSlave.c new file mode 100644 index 0000000..fff4ac4 --- /dev/null +++ b/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/TcpMaster.c b/TcpMaster.c new file mode 100644 index 0000000..be0675e --- /dev/null +++ b/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/TcpSlave.c b/TcpSlave.c new file mode 100644 index 0000000..486d30c --- /dev/null +++ b/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 ; +} + From 8e91dcd9d4c044845db62f79ccc6e5fe25774510 Mon Sep 17 00:00:00 2001 From: wangchenyang <1404509497@qq.com> Date: Wed, 27 Mar 2024 18:10:27 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E8=87=B3=20''?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TcpSlave.c | 178 ++++++++++++++++++++++++++++------------------------- 1 file changed, 95 insertions(+), 83 deletions(-) diff --git a/TcpSlave.c b/TcpSlave.c index 486d30c..9f7c7d4 100644 --- a/TcpSlave.c +++ b/TcpSlave.c @@ -6,6 +6,10 @@ #include + +int dataProcessing( uint8_t* query , modbus_mapping_t* map) ; + + //TCP模式的Slave端程序 int main(void) { @@ -13,18 +17,11 @@ int main(void) 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 ; + uint8_t query[MODBUS_TCP_MAX_ADU_LENGTH] ; //1. 设置串口信息 - ctx = modbus_new_tcp("192.168.1.231", 1503) ; + ctx = modbus_new_tcp("192.168.1.231", 1502) ; if (NULL == ctx) { fprintf(stderr, "Error: %s\n", modbus_strerror(errno)) ; @@ -34,20 +31,7 @@ int main(void) { 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) { @@ -55,17 +39,20 @@ int main(void) modbus_free(ctx) ; return 1 ; } - for(i = 0 ; i < 24 ; i++) + + for(int i = 0 ; i < 24 ; i++) { - map->tab_registers[i] = i + 777; + map->tab_registers[i] = i ; } + map->tab_registers[24] = 999 ; + //浮点测试 //map->tab_registers[2] = 0x0020 ; //map->tab_registers[3] = 0xF147 ; - for(i = 0 ; i < 135 ; i++) + for(int i = 0 ; i < 135 ; i++) { - map->tab_input_registers[i] = i * 2 + 100 ; + map->tab_input_registers[i] = i * 2 ; } //4. 开始监听端口 @@ -90,83 +77,108 @@ int main(void) 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) ; } - - //尝试处理浮点数 - 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 ; } + +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 ; +} From d96a717bf273c09014265c7fbfa429db86f2aec9 Mon Sep 17 00:00:00 2001 From: wangchenyang <1404509497@qq.com> Date: Wed, 27 Mar 2024 18:10:54 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E8=87=B3=20''?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TcpSlave1.c | 172 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 172 insertions(+) create mode 100644 TcpSlave1.c diff --git a/TcpSlave1.c b/TcpSlave1.c new file mode 100644 index 0000000..486d30c --- /dev/null +++ b/TcpSlave1.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 ; +} + From 5adb25ede0f38f2d7b16eb5e75af2b7374c3e675 Mon Sep 17 00:00:00 2001 From: wangchenyang <1404509497@qq.com> Date: Wed, 27 Mar 2024 18:31:35 +0800 Subject: [PATCH 5/5] test --- 06MultipleTcp/TcpMaster/Makefile | 19 ++++++++++++++++++ .../TcpMaster/TcpMaster.c | 0 06MultipleTcp/TcpSlave/Makefile | 19 ++++++++++++++++++ 06MultipleTcp/TcpSlave/TcpSlave | Bin 0 -> 16672 bytes .../TcpSlave/TcpSlave.c | 0 06MultipleTcp/TcpSlave/TcpSlave.o | Bin 0 -> 6064 bytes 06MultipleTcp/TcpSlave/output.log | 1 + 06MultipleTcp/TcpSlave01/Makefile | 19 ++++++++++++++++++ 06MultipleTcp/TcpSlave01/TcpSlave | Bin 0 -> 16640 bytes .../TcpSlave01/TcpSlave.c | 0 06MultipleTcp/TcpSlave01/TcpSlave.o | Bin 0 -> 5328 bytes 07ARMtestRTU/RTUMaster/Makefile | 19 ++++++++++++++++++ 07ARMtestRTU/RTUMaster/RTUMaster | Bin 0 -> 13372 bytes .../RTUMaster/RTUMaster.c | 0 07ARMtestRTU/RTUMaster/RTUMaster.o | Bin 0 -> 3456 bytes 07ARMtestRTU/RTUSlave/Makefile | 19 ++++++++++++++++++ 07ARMtestRTU/RTUSlave/RTUSlave | Bin 0 -> 13276 bytes .../RTUSlave/RTUSlave.c | 0 07ARMtestRTU/RTUSlave/RTUSlave.o | Bin 0 -> 3724 bytes 19 files changed, 96 insertions(+) create mode 100644 06MultipleTcp/TcpMaster/Makefile rename TcpMaster.c => 06MultipleTcp/TcpMaster/TcpMaster.c (100%) create mode 100644 06MultipleTcp/TcpSlave/Makefile create mode 100755 06MultipleTcp/TcpSlave/TcpSlave rename TcpSlave.c => 06MultipleTcp/TcpSlave/TcpSlave.c (100%) create mode 100644 06MultipleTcp/TcpSlave/TcpSlave.o create mode 100644 06MultipleTcp/TcpSlave/output.log create mode 100644 06MultipleTcp/TcpSlave01/Makefile create mode 100755 06MultipleTcp/TcpSlave01/TcpSlave rename TcpSlave1.c => 06MultipleTcp/TcpSlave01/TcpSlave.c (100%) create mode 100644 06MultipleTcp/TcpSlave01/TcpSlave.o create mode 100644 07ARMtestRTU/RTUMaster/Makefile create mode 100755 07ARMtestRTU/RTUMaster/RTUMaster rename RTUMaster.c => 07ARMtestRTU/RTUMaster/RTUMaster.c (100%) create mode 100644 07ARMtestRTU/RTUMaster/RTUMaster.o create mode 100644 07ARMtestRTU/RTUSlave/Makefile create mode 100755 07ARMtestRTU/RTUSlave/RTUSlave rename RTUSlave.c => 07ARMtestRTU/RTUSlave/RTUSlave.c (100%) create mode 100644 07ARMtestRTU/RTUSlave/RTUSlave.o 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/TcpMaster.c b/06MultipleTcp/TcpMaster/TcpMaster.c similarity index 100% rename from TcpMaster.c rename to 06MultipleTcp/TcpMaster/TcpMaster.c 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 0000000000000000000000000000000000000000..8ba1e9863f35c39d7301e0a84959b2bdfe0bd1d5 GIT binary patch literal 16672 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..67656b346fb9ebb28ad7db7822791b85c2a94087 GIT binary patch literal 16640 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 QE7?zOQW}$71};|o2ktK?HUIzs literal 0 HcmV?d00001 diff --git a/TcpSlave1.c b/06MultipleTcp/TcpSlave01/TcpSlave.c similarity index 100% rename from TcpSlave1.c rename to 06MultipleTcp/TcpSlave01/TcpSlave.c diff --git a/06MultipleTcp/TcpSlave01/TcpSlave.o b/06MultipleTcp/TcpSlave01/TcpSlave.o new file mode 100644 index 0000000000000000000000000000000000000000..ccacb5df33bdbfeb4ca67e4a2edf3eacd138052c GIT binary patch literal 5328 zcmb_fZ){Ul6u)Hy#(;I=6b)$VhnX4Na~(tmfu&<0kHnaX%n(A-bnWX_XD{N|p zvng83j2cP&pfP^&g8}@YW&_=*pbQeDm=Huis8RWs;UC1rMZtN_efPeeKKhJ*I7#oj z_jiBi&pr3v^ImtZyZ^o!9uJe^VePCmk|<+cHHnm?lsT?~L; zL@iV|Ho?4_UpM71PUKGfIX#W^iQF;hp{NtN(*lIB)|v^1{KRwnm^$%@$jt6YN~owU)ERR%*P( zVZ32Z$?_1lybDq=ctpfLj_H(pljnO};B9tlI@9FbyGrZb48g0zd+>DF`8ZXwi03Ce zhV68w-I?E`B?qM)wyjtP#>(n1Gtf)!XRvdy8e-jYo z=WtiqzT;^A1N-E_jyhaKy+0kl?A{ zj=dv1)s-_bxs+&<4ftE7Qke3LmCjCm_OJ)8?1j3kczn92BI=R`UXjh2oP7KU)-dK@ z(W?0GZBzV8>ry{kXBbIirLQqv%g*l~KR332Q)k!rhh9HB^w!yDo!-4_kT;#x#e6tGWbL*cNNGR17%^3s{qbuDbhlDaP(Po_0i zyZX8at8KOgf^BX$Lp?!5>%{<#v^~|#8Y6Rf9xCx;dMaa9)MC_rG@cBZzO|jcH61=` zIa&*rOF%l-t7{QoOgAa3xiL};K_HdOby@vt#@2UsuJko^_hfW4Lc%YvLwn+8lI4VE?|&|%S(0XHei;D)9p zM^vRC+De-t!wiNZ5kpJcgs7oul3c1+6tQX)OK6F-X37ae3v03Mwx*$_;sbKds#>DT z^=f92SA$?A+!KPeKosF^!EoQUAl5`k35#F@0{4sGttg^eYR_UV)<>tb~$3CUD8WNsK=dPvoNw$^Vt$ za|vFD7ahbI|3ZS(`0o(7GyW!mV@+DZtuod|?9lkv6MP?An8Yb5_mflI%; z(J9EcgirlmaPUuBbau&w--rtZk@l}xL)I#Ae9$~^aPaX@1j>ViPvgls_|pE1gir17 zb?}!7`|l7wwf~ue|FGbHMflYI83%u>;Qv7Q)c!r*I z_dEEz1^-FHr}69~IMyV2PJGZu!8q|}i;^Blz{ej`;0G(hy zQ-QUDN zpYr|?`V_;yle-Zxq&nl5iT1%96=(d9z$Dsq>iYz-jVeRmsgI|y(*764$FJOH+<$y; zN_~k}@(nb$SrF?*VEC>D+sOSRYc^5SuVmSle+p~M1{%D7vTWJd2FW(E735z`FoE=Wwfm&qc(p5b zpKO^4;Ia8JOb5)QLo*pCP7}&7EjWfk;r5G=ce%ECG>= z86t|Z2+U6|WvZtTd=j=HAqil)l2>E1{t8Oo%yL&M=hF1$$bn3w#u8?M7s2=)W(%D}u$0H%@u z?ZaoTd9U!|`Ty8FTJg-n<#k_7Ufj|EUJ$^(Vt>~G<^bvewE*fuvqcTyV!%a!S%BGq zKLX4EP>1R#AZ3Ad_^40?hU$MMf#E2INx;}H*1r)j9l+2Gm+%?pe@hv^ z8FUi;q3h50(c6D}%kqD{jDE~R2Z2B5p;_LCW%N%#H@S^y-2nwDWd>Ev&wD zHtkJL+Py>l!m|1Ya#<7+&pVc-`FT5@w9?tZA;;3%3!0a;cUgI7NR_U+7b;sS(E9O-C zPd|n=@dfn3&4`<#hen!$hepik{U?0EFTahQ@r{edBF4*OV?Tcq@A_7ZdFR>f1oP>$ zJ^?WIt*Usb{zFgh1Vcy2~UyF5|I~INVtRcqE?>YV4=o;gd z(KRt~`HYv{8kuuaW9L7A+U%O0YVI04-vn${SI4>MW5{C!k(+ZV6AEQZ0D! zH|T%1sQ)%sf2yeeh}6H|qkopvzsJ?T_f*vf`wP)|VlMmo;Zw`IHokv%UQu6{yykgp z&qg<^S{w#HIj{R%N2j8{daC2xL03}}`13CQC#OWqbE7@6sV82+^F~qi!6W&pYZi@m zteA`JUyK~Pe?ry?yizvdZsZg4xanSv z#at^teh{JY!HM^lw)63SJQS6$HnCBEt^dW?Mj3K|-3GUF^>q9NSm+>jo!QD>dUXYbIom5#Z&#?!tf= zm}un>@gT4eIvnb1A0jjQ9pJUM5{(g^yo|Z6M=^>(gmJL`hvcnh`7d4c$mWr%2jP9uhN~)R*rv~i z#|j((>ZXZH5ls$@t7fViUOJPdcQpU`Dx}wkjSHkx;gpJEeSBzrprn{&LoIrzv66y~ z;8d%olQZ?6y#{#LRqox3IoiTdR3bX_7q*tJ`v*6_|N*u z0#1KUMu0JX!eLU=Lxw3wzNqkVYcXFGMkF@3rNx{PjK${8Z#8cYw?%wDsA-`}>0h3p zSkMm^PEd_VNin`A6U55Pcb8SSc1z>SJh4+I``a9yqRd<}(;yvoUC9gJxs+@>m4Rx>>nGKIigjM+eLr!-tcv zvFQ^H5f>$QhJi$*mMX)F(}#1CE0CW+07S_-BOah!7IC^D9cj_P5uh8Q?y=kh^VT^ z=X9}@;D=YAh#q1b1i%%}h?}1&oZAl(p>e5PR>;5Tmu6P0AxU!-v;MWFwJ!E|j<`Y#mCBb@SUC|Z3<)_w;Q z2XhAcB^XR;0pn9&k>;0T<=0?rO0S5rl@(3z2)YdIVldsEfCmso(+gAjE^Ep!-=f%l zQ-1wc_Y#zRK*}$~Jq1NK$e8{cMboQ-^IVbU_~Tqwq?;ry;GbbIU9ZiyB8`tp2-}M^ z&T5`uN)w@!V9KxIUYhf#6in$=^3rok1Ta&cvPwy&oM>M9;u0a{gJtwwcLu0rzj$wq zegr)qIB8FKa*+Q$be-;h9C-!hdGAAofTW}D_>liA)m4(M^_S-76e+L!k2eL5X;sKU z`TqjVcR+>70tbg8?Q_fD=HXMG?}`ewf;8V573xJ@S$)XoyW^EFyZ=P$qPKMTI5=_QooSuB5scmsSL^mrUA_Rkc-_Wj7!&+$85CQm-kYAUGlf5=0V z&vTlWuiiSQTr{CSSwHuvoJ->q( ze}~RHH!%N$;Oq5*_f+V>(1H9HL3{6UJT*=p?@O8db)fZp=RK7d%JTo4o1fL-J(YLM z^8XsNu5SSKttqSTtTMX2j9%xVgDB&A(0cwi_@;{_XukgxYry(k@W`{hcY)@&WNzW? z?+45HPn6M3W$k;mjBkSG-8Ba4dj+(&KYs?=d++5v(BAR*HE4d{{w5{>^ZV46=jy|Z zE~7)Bb$+&YnTH=lu4_Fs+nX+<51>4~e#v_=pU&xfyn*_WhUr8X@Bix9jlgaSWnsmH zb7Fq-Q*uQA4x6W(C1{%?BDp~)Vh=kZCzs2>8cSy*y#Tm3CiWW*lgLmZFKvD4@PLZA zNWe0*cG>YAR$unF(w9YdLv6ts>g$6CrgU}6at5pfFHhl`l9kL^{h3^EJYywcV-~FV z&@jH#4h&{&$4-WqwJvVIu+Vs$z{&3xefju+Z6${W26iKhhw>U{c9x=BwqCbh`u$Na zj|0Q9y0&z#zuLNb!y0)@sqFM`t+`=C=lbr|(C*)NZgT3b6; z^<2$MPvfn>-{Ojy=Vn#u=9uTgnYw=^uV;01lFH^S-ci=8~*$tWtIV%;wA>ot+@`6Iw(z5n`;nW5NXk+6vjAGGl%tJ2Oawry7+Ito z&%#>(Ja$Pre9at2X5IzRL8G5X0?hjyY4 zxG3;313)?2;28+eJ)!ln4fskTZU<0q6@YgR?tt6@;FRM%1ueH9IP1!CcxGurXVSl` z1LYX@0koXDPawoEBu70cN4O85{)-k6{?nbz2@L8c4H2Rq`xp&~c*~Q7@1}(Rw zOl~{eHfyvHVqJyRu3XgRJp{Qb%|sgY5jK?R`)l|KIYv5AhT(=Xx&3hOtWzxc)crzv zPqoEMkb4^MW((4{0$2rfy?n1f{7fSk#MqV5>O^HWrhr#9z2=xiBc*Da!S{hth;eZ z3tSiZ8rS&kzsApxH7kQ-&6X@vhI)Z>IIkV z_<5cAB}y?^IxGG2V*yPmMs6ipCxAKu?elBnkNn?CzYR@PDs)x4I~C42DipXX+>Iyb zcjPZ}<l9yoLuV_!F4xYGi*k$pk(!Rb-jHTD}s@d$8QCiZ0=lj=U7V5kF{#~ zLxbqINcPR6Mt*bkSfH_xZ!-O!=qh+qtr|yj%P;@z_3>>vW1M4VZP9XvRs;vfT8gX3 z@>F-emPEc54SoC^+|6RC{oeU+BAv*{^KhR=L9vj2lC zC%(FT?!?H4pI$lj(eg#6S0?GB{R1QW-t)@v7jKLnIy-XcYd6r%avVO-z$;JQmZ#)|5FZ-I*~xYvr9cshHfXPo3ovJ-AO@5q4 zAwAR{6=flYS#=dnGR>Ral%q_~$jh9i%vR=l3Y0>nC}Y9266bN2IK`Yord%6Oh^fvq z>GTuv;Lq7SlIf&yv*eyhN|xlh_-yc*X)Q~NFy?J1Tb4YCLA_0pkKVHmz64{-!TIz9 z4qlD%aR+CvZybCj#zPMND8@6>i;yKP;Pno^7QE5HH>T%ukTw#kN3tim9+~FiIr2|6KP(F);%{B0veVdAv8!fR!>*RyGIn+B>e)50(~?sXbF?a1Xi0Y{ z8k6pLq`lW{i|ISs469d6E20~Qw6&p+#oM~#;gE&BXNQ@V0V8fmM~@MWSsjdz_gd1i z!-!gXI!d?N%&t)1Bq4FY*%7IeOS<)LQ^%boZ^F<+k%@z3lIl8S1V@g^F5DS1#O%`b z9;|5|u1b7vbAT$4`^Z};vXnXq_k{}N|0>>jA`cViiv;QCh&(|b_$2iQL^e}jAo2or zU?=%>kuGu|YkILcUnTmI@0E4lq7QtRI_exHqRvTRC4N^<(FdNTjyl|ntn)2(;E&|^ zzv==x@FI|PhKa=@x9B7PpY(y;a;)PeqD~&L5(mm0pbDH%9d#B{NB*VMfi>hfoVd4D zAon!uG!siio~Dodo9P3$Qb(N^iKt`HzgMJ>KJaDgsI!+k^6#S#JV<^Y)`c8+2*^6e zh@~QDQurMahucNsB9UK!mAN9n0#)EB^~EArsoyX1J9Xgol%9+8qY@v%ET9T30D2$7 zm{^AArH?%I^ns1kkuN|!AJ0u4*pkw>Qb(Q$bzmoT6@@wc0%_>FjygyY@adJJAHZt4EjYd2MxRw%q( z{7oCy_(PUuMB95U-9&{uZdh)9Ch60cdw}Py-RvP=ui(>`K*~6tgWnRE)HpvA7bL;! zNpSnu?}D8GIvZoz%5gFNzv5KHaE_hkCk#66B+yxxjlW%#8P67g(VHA5dV0K?QkW3Y zowgIC1jewf$Ax?ANf305tF#Hwjw9OlMtc}>haq4aO93vX$0v|jC;M4JWe?6F?mN5L TLwvUBHKEsteIBxdfOg#95Ks8H literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..ef4480fc1fbff4082b1929f909011a2d9150f342 GIT binary patch literal 13276 zcmeHO3zU?_m9D@4o(Ie@^e_VqAo}A#Bx1jYkpTsrVPJ3!F9%de%xQbN|Cwp+=^nd# zU^G3LaxX7e!W$wuNUqcVc4AQ}T0+{}Jo)n7gT zG~!ysBN7KP z#6i@>$nvC;r*tf%N5+-NScAxVN%!E_2f7b*#v{NPN!M-c0)H3kW?Y1PMoqh9AQuOE zQeb%>VjJl0`i~=zk>%O8U^3AjOve4mM5?zhkWB|>D;mp^zGV5O_!WYBU|Shjwi=On zr2qP*t%sKU>x;j?W%IkWE3PD*SdKUvk+PsBjFS+jAx=S@ zh&Tyx0wU#CAX3*O1-4clwCKFss(biBPc%SnE&P;exh%h;JrI-~JeI+e0x zIT2}Hy(|*9Gj?Ypo3k^kmo+ETDSLIaJ!xy!teuNwlhJjyh;$@U2@#2OcBfO27|rA& z5zUpcdy*T5keHo70jKhgjGc$Oqdh%|RA(e*uXjX5u*c_<~aB+2lM}CD|6Zz+ne_RRp$B|O2 z<;mRdAWMIL)rka_4Uf1+4Xs#;Z)Q9e3eK%+40AbBehWUP_}r?Q;-jcxijV&^rdWh5 zrjRt9Day}eiiP1Erl>5$6bnW@Q!GMrnPOp@&lC$)BU3CGiBWJ555o zTe@lQL2ti*z}vrbprZe_{?a2)4K$8I!~W~GH+?_-yEhv@esVy=b6s%A1Vky}K7M?tt|Kn^pbPGI!TVhB^Dg)&fL9z5Wr!7?C$DPpK5RVv+vC2cmmT;1 z!o0})rNLtlygzvC;QMc2omyOKi0>k;4(%MMwssDfq1*aB){X<%k={CeFlanCIQYNw z!Lt-&+w|cYM)TN}a& z_ej%+S9rnct?irg_~5Z$4jQ$!J-)rK9uPmg{gI#T_C6?TpFLh4=5ML|^@fdFv7@wh z`I##|dL!I;^hoIG4-GMR?ArIiVZ21HSrcAx+Gw8EHF#|4`)13Ou9}v?V-o;PZfQLF zNf>1e3psP&H)>z*H>RPSF?g&7GRh&NJp7*@3|?6M!r-w$zU=YCX3Hd$^);&cJ~^z) z)I-AK{R)2Xu)F-^VXY|5OZpWgu@#{v-HMMKSrw4AqyLs#b4TmZ#%9lsnp$JWk`F_x z#12s_&J@#xHF(T}HhR%UFZwyWhJBE$`uQEFhKuqwJmb{x`eCECy`S2w4v$5vz2TRy zdI|7XMAags)BfS1$(x89v&lhd;;eUHBfl?P34UMru7_CaPL%SYRN107q00DV86V2{ z!Z*))=QVP@a@FLmMjh$rPhIiRri_@zQP_U?{Hc>#l*Vq)YfQ`<`^vnjECu~L6u%J5bY7^7~uY?`^q#@1{q#?iLUBT{-W{#-lwB$K1mk zyQcJU#CAJ5(~)D$p3-N|Dt@8y=+E=Hqx)69cUBSdk30D_;P!y~Umlv`Ik9@0(|1@=WRc+t*Uv?*Y|95^Y$NVJlg1# zd;5^6JrNz-e}31?SDi?345n-)Z``5(^w5cfG5bXHL}KEs_g-r}+Lg~2wR>c_yRO!h48;~yt$;MZ28ufJ6c9ByMEE&v2};8 zTeNP<4}7DZ7t@XUOOJcczqqBTWp2y2mV9sF(HHg}JbvS4Ce{H&e&<|2xps1Y2*&Mo z!CY=b)2i8GxxLqdGLX!4(xqk|DIdlzWa%RyLS(Kd(*(K?;m{l zyMchBzrAh8z>}NyKlaeTZTBdOD(J{?wp_*AtTujZidHO{&f46CMlU#(fb*Jc8Cp58 z>lW3%{f|9y-i$cUzoFUI!3XyY-1bjxb~J8XlupL6`&(_!c_TaU;Ff{=zcp~@y=+IQ z-p$*Z!p1%#rxJMJt}O>2d3504zfoAF@aID=+8)toh-^OBkGf{WM~TrxIb=+*!cSp8 zMICAV3UTkpgEwGz{9E`88fe14`9(zPOGloOXj}2ji(`$n6=+M*?xbx+yFl7sz-ez0 zXS@$KC2gMhUPIbONsl4zvyBjpE3lNo=Xdc~8GBtK%cUb;H!oZliq_ZF+p&)JSa?o@ z-7zl|nsaU}WZUfx9rMET8X6ix;jfA&`YNJ!v^^n==>Urw{7s^GbP2|GlxLi`%BVKR z8xzeMW0Eo1b0)Q>>|~_@j+_u%;P(hgNd0g;JmL-fD!L|}BlFuKMCCt>a;%ech2ulJ z(p`e{!y_(0RVsHE=ocVQ2bT4SXJIlc`hAc?=wN}I*CZcHVR9j`y{tPB2xd2A<91Ir z7|nDCrNtCjC4yb)ZabKZt?%@=_a>5YX810VFsShTj?RHWL>6<$zGN)e23c@Puv~#RaxjOuvsa|S7m`z1{vR&z1HrOdm zr_My~dPn~Cb%DBbukVi10u08oy>xb1O{*+q&kfWGW7Bo)n*0n@2g}=_GfwffAb5;Y zIsrVMl5?1NOE>^XzRJWXwj{0SLL{cQ2e`HM>=Xfen!vWkA(OG5=XVvdn0~} zl-|p3MQLN^CCDjzli=ABJOgza=Sc7^g#Bf@9{f zbfh1n2tXKjSNw>yW_FI zk?l2VQR7U|Po89{zsgBwR0>~lr7_MhOQ)31D6QgFXjB?ADyquNiYXPoiI`T?MOoPe zK=GkEAQnyU7ep)eH~5;(iu20OFKey3aFU1GmJ%;59$6l0Dt60+Aag=q!jROVDvJ%H zwaP$ECDR}rp4>82g{eEGi3hy;I&BbjD&M?5Og<6ilRI$=9mKS~wxWEDuz)k@wRmBLbz|w4lADTeF1p3L)!gQ})sSax^5_MeM}y{Y_%Cx> zwEW#X;w-@FWnF_m3N+W7vKPeQ+O_-q(Rs+|NT#DXKMphtvgwW-Il6kg+nFY_{&*sq zgjah3&ODaC)AFyVv-}tc;%KtJ1L@p(7$h8RZJ^yY&Px7hGUxyOsj$4_W zmCxe_uCfS4T35i)jEW+?SvxM^cJH+0&oKVa=M(vJ&Wb|~m%WnCc^p(T(G89tJ)8KN z9idNN`rL86RM!Z0YF&@}oB7+sk`rrXYxAd1uZUEgqg`G;L?S&In=^2j#)q-V4Me~y zhzX8_dmLDhlyz$M#nZjK_9>L9>Ty-V3KBQ1qV5Yj395EnrmH2#>4+W?+R4;H#Pv24o)Jxv zyJ05*8kfk&uMAux32?XDhsX_%%PRLZuBSR^KGJBTlP1j-%`igByLAQ=6*BOyo54gQ z8Mfwe97+-Bw_q?G83tcxt2N~rkqMc8K(3mx$)D6 z5J09pWesJSa-zBMGlme!Zx!IvoEf09z2bvG`VsVe;H2$$l_33bsFDXj6~+kiYyCn~ z62I3)$2C(vX!%3)bFAdo`r~VaC$(slBL64A`3bn^3CQK3u_ z=QpE5g(xp*59$1N-26k|SA|$wz|a2kdsJbJxE%D~I5^uw>-qm&INP_{nIG(55_I|# z8OXmG_!Xct$H06czn*_w-tGWh<9reG7;yR|8Fc^k{N?M0XF%6Dy@QlT`6^5lZ)p%2 zdOVKg^)ptme~TRXd^K{ofS+`p)l^XW-{-7>i=Xl%zMv1@vze;8kdkyZ^rh&NpZbEdT8S z{{H~(=6?vdTfa{g@c#lh@6XT108`$J1@zYo@WBGS0$ZS#&;CzVTcT{Ah2MG?&i*G* zUawE`t<2|hx*l$TeyZVlvJ3Z5I&Oooi~K2ADS@<@9{-#i&40n}DQ5`!mJ`8rPcCTp z<@~vHItgnlkqWjW!hLbF-e`CPd$Sp7%S(p_L_|dlmS1GO9lbizkvb)LDX1G_v$@`m z4tQ9Go>N6~-4WcfrtBdtK#nQ8c$ zKbP4cIx^92I}-2h?%seRF3fFw*(tKNt-f>>-)^B57F-OCu{&E?pid>-Z|lC(0D#*;G``MTw@a}hoTbF&sab%WS! zI?@$Q#c3uDx8I$oWy4G7l_D*z!dGc-UiENoSdM(ehwEs*t3y%e<=N2tG)Ko7+j(op zXKbhR;4XsKe|k#rS)jf+AND9vzO!?;Qv|Xbx^aDuG?!6nmxkaGuroa(AeW@3g{}Tv zw9~=hiU~+ZoIep4fv#w_O9bK@Qjn$6Tt)=Qv(C=&#&H-D0S#AII*crEeqIviFls~*j?&-QS8cUR_q#v&}ereh6>XVqy#|eB7kqT8y}UB z;-a}+CehxT!~994xx!uM>5v40#d*pjGc(QpC?S4_#-e_fZg>1g)2e5)g~YB_^ZLd_Go$R18y_K z4T!X$7a~pv-*oV80!%)>BhY+X0kf^Fhi8vn0F)(-3=%A+l@9}HRsMQZp_z_@9WV@#WYZ}&A#^AZ0sBHyudF3|QU{}jGo zf=(Tik2VSa*WiegheXO||MwxXd*qY02?lp1VJEOoM%qT2k7xFk;2TMQZ-I~bl*hB^ zngTvu=Aa`lgp`4NIR(mJ*2VY%B4qW*O#J*Dd_j#MB@YALLK>DCaHs5+fcnw(`U?1V zgYO=fqP2|E3iwvRodWlNK4|dl0=_qJCAOZE#|fHmP66K z5=}%N+UyaBnK=tw) g=h*7dbrx(Ey%-=<*9*0(Ipr|k55HokCc60k9{>-@VE_OC literal 0 HcmV?d00001 diff --git a/RTUSlave.c b/07ARMtestRTU/RTUSlave/RTUSlave.c similarity index 100% rename from RTUSlave.c rename to 07ARMtestRTU/RTUSlave/RTUSlave.c diff --git a/07ARMtestRTU/RTUSlave/RTUSlave.o b/07ARMtestRTU/RTUSlave/RTUSlave.o new file mode 100644 index 0000000000000000000000000000000000000000..25d4074c987a67645130f8ec9fa0cd815c15d30a GIT binary patch literal 3724 zcmbtWYitx%82zTZTiVjd0tHGdI%SI%*KTLpE!&62HiZQV0v0hOsAYC{N*CMRW_AiC z)mVv9Km&vlqlk}0RDLKRNg_SRO28N#UI0o+i zt*Iqvpx7e}%)KZrp#k#HbSfj!oTC$CIPsqUZG_MeuV#@v4zqU3CsrMYy__b_29|Bz zSJKa1sNo2}W{%s)aU;hqKk5DP6i1z0RkB{F zW`EPXaoW_N^~TnUk$2q5`e~en_0Q}_BP-+0tgp}7SO4>~#lbPZZdx-K z+%nj|fBjzC)4QU6g*~FLqqKMQj`ej2HKn}{Z!YglW*-ZNOx@{qjnex%auEH(zS5lG zb$uNU*vWNQHYPVtZ0TFqw=ui2GacKASQqT!#~U^dZBL{$-W zb(OBKZC+AC3)MAZtKK8d(X_bMAkIh>5S`oo!P&vxr<0q`>^PL#u{ZT%e`@F3=iYtI z=QI6hHVmZR?>~KTUuyHKrpHW7*XUBZyQ8s{W^7A57E{A|G#(Sfo$-XqpLxNZ|ECd| zGs7%XJD)P=clzL=h8Yn|ounG^+@54=^Run05)tRcJ0m=mR&`}Gp{rUVwdaY{ThFDQ z-^KHg{Px(pW8FRaH6zV}XSY9bZvTPQ8&78sNtKzVE1@>c8Y`n#VyqdFd@2}GI55fs zUMKv2u93CAL~~nO8pMhP(U_veMG!IItEsG(RNGmrx90aixD+- zbu_`-7pbn7t0l!>?N`I?p|CtFptjdb(yZFBq^hAnd%avA2m~bgL2CBlg%wo^MM)@! z=?YXfQ*ObS<~$)kXM(dxm?TVb6bn;@lAN1zr`vxG5R7J5oOI!;shYiGl$XeXKYMeK z(@x=a;Wx$JTr|#3;V%LoiE+_Xa4{3(qMKkh*|-PxG8?ae-D%^z-y=;R38X(GxTqHP zVHF&97SE#) z6i&Y_hiC$i(kp&`I)sK;`vVo z_u}3BKz_gSEI+m0w{%ITvRd_psXRiy1uYVHGI!P7)o|zMu9nJm##!72xU1u?o;%sh zGSXxtPc{-|KXob57(q+cUbVwlhLL3?t&V0ju(fo&!q29juq(oHI@*+RKO!^+OxXLYzgQ1T0~FCe9@5H((srfp?_!AnUlu z=Ccl5$a)#pk99ZE3f6%U)=@`ieLU_3)`5?t^;cM*fOTUXxQlhvIg-}DNb6sv^>0|8 zi2I6l;1KJmf0=b$q<^r^7b>o0uHyz)O~N_?C15e@h?iJLoS$`I9qWjn$NFTV1*`)X zvyOQ3CDwM~R}-jfCU#hsrgr*twHF^ApGoqCaDaVU+$7<6SC<-tFBaET-`s^uD{<1p z50kIC^&X$1>smC_qpQZ*#VG%%VOx#+FgG3T2R?*(S`ABJG#q=%$J1mmoGFlHaIz-g zapJ*ICmaidTP3zy26S#5%gu|2<1P2~;v~dyjx~>MNH}j5fzIP{tHZ-G$8&qkMbu-O zM$bNen$u{A=q@47-Z+Nay?8KGw?WWxT$M$DRve=>H+Gj}Azy*O|G$;s;rZd{8tY`e eD=2-8m!D}B0k=#X=ggXL+&p|g3LEKW#r*|ktV