From 4ec239dd5d3838b58873fd61986fc3391eb96a3d Mon Sep 17 00:00:00 2001
From: zhyinch <zhyinch@gmail.com>
Date: 星期四, 03 三月 2022 10:51:40 +0800
Subject: [PATCH] V1.48 支持MODBUS读写参数

---
 源码/核心板/Src/application/modbus.c |   20 +++++++++++++++++++-
 1 files changed, 19 insertions(+), 1 deletions(-)

diff --git "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/modbus.c" "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/modbus.c"
index 442190a..fbde13a 100644
--- "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/modbus.c"
+++ "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/modbus.c"
@@ -1,5 +1,6 @@
 #include "modbus.h"
 #include "Rcc_Nvic_Systick.h"
+#include "global_param.h"
 ///////////////////////////////////////////////////////////
 //u32 RS485_Baudrate=9600;//通讯波特率
 //u8 RS485_Parity=0;//0无校验;1奇校验;2偶校验
@@ -24,6 +25,7 @@
 void Modbus_RegMap(void)
 {
 	u16 i;
+	RS485_Addr=g_com_map[DEV_ID];
 	for(i=0;i<MODBUS_SIZE;i++)
 	{
 		Modbus_HoldReg[i]=i;
@@ -510,8 +512,14 @@
                 RS485_TX_BUFF[2]=RegNum*2;
                 for(i=0;i<RegNum;i++)
                 {
+									if(startRegAddr<100)
+									{
                         RS485_TX_BUFF[3+i*2]=(Modbus_HoldReg[startRegAddr+i]>>8)&0xFF;//           /////////先发送高字节--在发送低字节
                         RS485_TX_BUFF[4+i*2]=(Modbus_HoldReg[startRegAddr+i])&0xFF; //
+									}else{
+												RS485_TX_BUFF[3+i*2]=(g_com_map[startRegAddr+i-100]>>8)&0xFF;//           /////////先发送高字节--在发送低字节
+                        RS485_TX_BUFF[4+i*2]=(g_com_map[startRegAddr+i-100])&0xFF; //
+									}
                 }
                 calCRC=CRC_Compute(RS485_TX_BUFF,RegNum*2+3);
                 RS485_TX_BUFF[RegNum*2+3]=(calCRC>>8)&0xFF;         //CRC高地位不对吗?  // 先高后低
@@ -532,9 +540,19 @@
 //写单个保持寄存器
 void Modbus_06_Solve(void)
 {
+	if(startRegAddr>100)
+	{
+		if(startRegAddr<600)
+		{
+			g_com_map[startRegAddr-100]=RS485_RX_BUFF[4]<<8|RS485_RX_BUFF[5];
+		}
+                            save_com_map_to_flash();							
+							delay_ms(500);
+							SCB->AIRCR = 0X05FA0000|(unsigned int)0x04; //软复位回到bootloader  
+	}else{
         Modbus_HoldReg[startRegAddr]=RS485_RX_BUFF[4]<<8;//高字节在前                    ////////修改为高字节在前,低字节在后
         Modbus_HoldReg[startRegAddr]|=((u16)RS485_RX_BUFF[5]);//低字节在后
-        
+    }    
         RS485_TX_BUFF[0]=RS485_RX_BUFF[0];
         RS485_TX_BUFF[1]=RS485_RX_BUFF[1];
         RS485_TX_BUFF[2]=RS485_RX_BUFF[2];

--
Gitblit v1.9.3