--- /root/personal/work/tracker/V22_Master_original_20260408/AI-2/AI-2/Resource/ASProtocol.c	2026-04-01 23:58:44.000000000 +0800
+++ /root/personal/work/tracker/V22_Master/AI-2/AI-2/Resource/ASProtocol.c	2026-06-20 10:00:06.916278853 +0800
@@ -1,6268 +1,6810 @@
-#include "GlobalDefine.h"
-#include "ASProtocol.h"
-#include "BackupRegister.h"
-#include "RtcLocalModule.h"
-#include "os.h"
-#include "MotorControl.h"
-#include "log.h"
-#include "math.h"
-#include "Init.h"
-#include <stdlib.h>
-#include "ModbusFrame.h"
-#include "gd32f30x.h"
-#include <master_slave_comm.h>
-extern GlobalVariableDef GlobalVariable;
-unsigned short us_tick = 0;
-unsigned char  uc_rtcFlag = 0;
-
-extern uint16_t	WeaherState;
-
-extern float	WeaherStateTime;
-extern unsigned char	WeaherStateTimeFlag;
-
-
-
-
-static const uint8_t valid_mode[] = {		//ÓÐÐ§Ä£Ê½
-	MAINTENANCE_MODE,
-	CLEAN_MODE,
-	ANGLE_CALIBRATION_MODE,
-	AUTO_MODE,
-	AUTO_RAIN_MODE,
-	AUTO_SNOW_MODE,
-	AUTO_WIND_MODE,
-//	0x29,
-	AUTO_AI_MODE,
-	AUTO_FLOOD_MODE,
-	MANUAL_MODE,
-	MANUAL_EAST_MODE,
-	MANUAL_WEST_MODE,
-	0x00,
-	0xff,
-	0xfe
-};
-
-
-/***************************************************************************************************
-                                     Private Variable
-***************************************************************************************************/
-/*R-0, RW-1*/
-static void (* RWRegister[RWREGISTER_SUM])(unsigned char R_or_RW, unsigned short *value)={(void *)0};
-static void (* RWRegisterQ[5] )(unsigned char R_or_RW, unsigned short *value)={(void *)0};
-static void (* RWRegisterL[10]  )(unsigned char R_or_RW, unsigned short *value)={(void *)0};
-static void (* RWRegisterSlave[200] )(unsigned char R_or_RW, unsigned short *value)={(void *)0};
-
-/***************************************************************************************************
-                                Jump function
-***************************************************************************************************/
-
-static void RDeviceEdition(unsigned char R_or_RW, unsigned short *value );
-static void RWWorkMode1(unsigned char R_or_RW, unsigned short *value );
-static void RWWorkMode2(unsigned char R_or_RW, unsigned short *value );
-static void RWarningAndFault1(unsigned char R_or_RW, unsigned short *value );
-static void RWarningAndFault2(unsigned char R_or_RW, unsigned short *value );
-static void RDeviceType(unsigned char R_or_RW, unsigned short *value);
-static void RWChannelEnable1(unsigned char R_or_RW, unsigned short *value);
-static void RWChannelEnable2(unsigned char R_or_RW, unsigned short *value);
-
-static void RElevationAngle1(unsigned char R_or_RW, unsigned short *value);
-static void RElevationAngle2(unsigned char R_or_RW, unsigned short *value);
-static void RAzimuthAngle1(unsigned char R_or_RW, unsigned short *value);
-static void RAzimuthAngle2(unsigned char R_or_RW, unsigned short *value);
-static void RTargetAngle1(unsigned char R_or_RW, unsigned short *value);
-static void RTargetAngle2(unsigned char R_or_RW, unsigned short *value);
-static void RRealAngle1(unsigned char R_or_RW, unsigned short *value);
-static void RRealAngle2(unsigned char R_or_RW, unsigned short *value);
-static void RWTimeYear(unsigned char R_or_RW, unsigned short *value);
-static void RWTimeMonth(unsigned char R_or_RW, unsigned short *value);
-static void RWTimeDay(unsigned char R_or_RW, unsigned short *value);
-static void RWTimeHour(unsigned char R_or_RW, unsigned short *value);
-static void RWTimeMinute(unsigned char R_or_RW, unsigned short *value);
-static void RWTimeSecond(unsigned char R_or_RW, unsigned short *value);
-static void RWRemoteWindSpeed(unsigned char R_or_RW, unsigned short *value);
-static void RWRemoteWindDirect(unsigned char R_or_RW, unsigned short *value);
-
-static void RWAIRemoteTarget(unsigned char R_or_RW, unsigned short *value);
-static void RTemp(unsigned char R_or_RW, unsigned short *value);
-
-static void RMotorCurrent(unsigned char R_or_RW, unsigned short *value);
-static void RWProtectCurrent1(unsigned char R_or_RW, unsigned short *value);
-static void RWProtectCurrent2(unsigned char R_or_RW, unsigned short *value);
-static void RWLongitude1(unsigned char R_or_RW, unsigned short *value);
-static void RWLongitude2(unsigned char R_or_RW, unsigned short *value);
-static void RWLatitude1(unsigned char R_or_RW, unsigned short *value);
-static void RWLatitude2(unsigned char R_or_RW, unsigned short *value);
-static void RWTimeZone1(unsigned char R_or_RW, unsigned short *value);
-static void RWTimeZone2(unsigned char R_or_RW, unsigned short *value);
-static void RWEWTracingAccuracy1(unsigned char R_or_RW, unsigned short *value);
-static void RWEWTracingAccuracy2(unsigned char R_or_RW, unsigned short *value);
-static void RPVBuckerVoltage(unsigned char R_or_RW, unsigned short *value);
-static void RBatState(unsigned char R_or_RW, unsigned short *value);
-static void RBatSOCTemp(unsigned char R_or_RW, unsigned short *value);
-static void RBatVoltage(unsigned char R_or_RW, unsigned short *value);
-static void RBatCurrent(unsigned char R_or_RW, unsigned short *value);
-
-static void RWComID(unsigned char R_or_RW, unsigned short *value);
-static void RWPowerMode(unsigned char R_or_RW, unsigned short *value);
-static void RWCleaningDockAngle(unsigned char R_or_RW, unsigned short *value);
-
-static void RWPVModuleWidth1(unsigned char R_or_RW, unsigned short *value);
-static void RWPVModuleWidth2(unsigned char R_or_RW, unsigned short *value);
-static void RWPostSpacing1(unsigned char R_or_RW, unsigned short *value);
-static void RWPostSpacing2(unsigned char R_or_RW, unsigned short *value);
-static void RWTerrainSlope1(unsigned char R_or_RW, unsigned short *value);
-static void RWTerrainSlope2(unsigned char R_or_RW, unsigned short *value);
-
-static void RWUpWindSpeed(unsigned char R_or_RW, unsigned short *value);
-static void RWUpStartTime(unsigned char R_or_RW, unsigned short *value);
-static void RWLowWindSpeed(unsigned char R_or_RW, unsigned short *value);
-static void RWLowStopTime(unsigned char R_or_RW, unsigned short *value);
-static void RWESoftLimitAngle1(unsigned char R_or_RW, unsigned short *value);
-static void RWESoftLimitAngle2(unsigned char R_or_RW, unsigned short *value);
-static void RWWSoftLimitAngle1(unsigned char R_or_RW, unsigned short *value);
-static void RWWSoftLimitAngle2(unsigned char R_or_RW, unsigned short *value);
-static void RWBackAngle(unsigned char R_or_RW, unsigned short *value);    
-static void RWEWindProtectionAngle(unsigned char R_or_RW, unsigned short *value);
-static void RWWWindProtectionAngle(unsigned char R_or_RW, unsigned short *value);
-
-//static void RWInstallPostion(unsigned char R_or_RW, unsigned short *value);
-static void RWSouthNorthShiftAngle(unsigned char R_or_RW, unsigned short *value);
-static void RWFacingWindStopFunction_Enable(unsigned char R_or_RW, unsigned short *value);
-static void RWEFacingWindAngle(unsigned char R_or_RW, unsigned short *value);
-static void RWWFacingWindAngle(unsigned char R_or_RW, unsigned short *value);
-
-static void RDeviceEdition(unsigned char R_or_RW, unsigned short *value )
-{
-    if(R_or_RW == 0)
-    {
-        *value = GlobalVariable.FixePara.DeviceEdition;
-    }
-}
-
-static void RWWorkMode1(unsigned char R_or_RW, unsigned short *value )
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.WorkMode.WorkMode)+1);
-    }
-    else if(R_or_RW == 1)
-    {
-        *(((unsigned short *)&GlobalVariable.WorkModeBuffer.WorkMode)+1) = *value;
-		Log_AddParamChange(1, *value, GlobalVariable.WorkMode.WorkMode >> 16);
-    }
-}
-
-static void RWWorkMode2(unsigned char R_or_RW, unsigned short *value )
-{
-	int i;
-
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.WorkMode.WorkMode));
-    }
-    else if(R_or_RW == 1)
-    {
-        //LogOperation_ParameterChange( GlobalVariable.WorkMode.WorkMode, GlobalVariable.WorkModeBuffer.WorkMode );
-			if((GlobalVariable.Weather.RemoteWindSpeed == 20)
-				||((GlobalVariable.WorkMode.WorkMode & 0x00ff) == MOTOR_ALARM_MODE) )    //Èç¹û¸ß???ËÙ»òÕß¹ÊÕÏµç»úÄ£Ê½£¬²»Ö§³Ö¸ÄÄ£Ê½,¸´Î»³ý???
-			{
-				if(*value != 0xFF)
-				{
-			     return;
-				}
-			}
-        *(((unsigned short *)&GlobalVariable.WorkModeBuffer.WorkMode)) = *value;
-		if((GlobalVariable.WorkMode.WorkMode & 0xffff) != *value)
-		{
-	        Log_AddWorkModeChange(*value, GlobalVariable.WorkMode.WorkMode,LOG_WORK_MODE_RCV);
-		}
-		
-		for(i = 0; i < sizeof(valid_mode)/sizeof(valid_mode[0]); i++)
-		{
-			if(*value == valid_mode[i])
-			{
-				break;
-			}
-		}
-
-		
-		if(i >= sizeof(valid_mode)/sizeof(valid_mode[0]))
-		{
-			return;	//·ÇÓÐÐ§Ä£Ê½Ö±½Ó·µ???
-		}
-		
-        if((GlobalVariable.WorkModeBuffer.WorkMode & 0xFF) == 0xFF)
-        {
-            NVIC_SystemReset();
-        }
-        else if((GlobalVariable.WorkModeBuffer.WorkMode & 0xFF) == 0xFE)//
-        {
-			GlobalVariable.WorkMode.WorkMode = GlobalVariable.WorkMode.WorkMode; //Èç¹ûÊÕµ½Í¨???ÏäÍ£»úÄ£Ê½£¬±£³ÖÔ­Ä£Ê½£¬²»Ïì?
-//            MotorAllStop();            /* Stop */
-//            GlobalVariable.WorkModeBuffer.WorkMode = AUTO_TRACKER_MODE; 
-//					  RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);	//Ê¹ÄÜPWRÍâ???Ê±???
-//	          
-//					  EXTI_InitTypeDef EXTI_InitStructure;
-// 	          NVIC_InitTypeDef NVIC_InitStructure;
-//  	        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);	//Ê¹ÄÜ¸´ÓÃ¹¦ÄÜÊ±ÖÓ
-
-					//						//GPIOE.2 ??????ÏßÒÔ¼°ÖÐ???³õ???»¯ÅäÖÃ   ÏÂ½µÑØ´¥???  LORA_RX : PA10
-//						GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource10);
-//					
-//						EXTI_InitStructure.EXTI_Line=EXTI_Line10;	//PA10
-//						EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;	
-//						EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling;
-//						EXTI_InitStructure.EXTI_LineCmd = ENABLE;
-//						EXTI_Init(&EXTI_InitStructure);	 	//¸ù¾ÝEXTI_InitStruct???Ö¸¶¨µÄ²ÎÊý³õÊ¼»¯Íâ???EXTI¼Ä´æ???
-
-//  	        NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;			//Ê¹ÄÜ°´¼üWK_UPËùÔÚµÄÍâ²¿??????Í¨µÀ
-//						NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;	//ÇÀÕ¼ÓÅÏÈ???2??? 
-//						NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x03;					//×ÓÓÅÏÈ¼¶3
-//						NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;								//Ê¹ÄÜÍâ²¿??????Í¨µÀ
-//						NVIC_Init(&NVIC_InitStructure); 
-//						
-//						IWDG_ReloadCounter(); 
-//						IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
-//						IWDG_SetPrescaler(IWDG_Prescaler_256);
-//						IWDG_SetReload(0xFFF); 
-//						IWDG_ReloadCounter();
-//						
-//						RTC_Local_Init();
-//						
-//						us_tick = SysTick->CTRL;
-//			      SysTick->CTRL  = 0; 
-//	          PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);//STOPÄ£Ê½
-//						OS_ERR err; 
-//						OSSchedLock(&err);
-//						while(1)
-//						{
-//								if(uc_rtcFlag==1)
-//								{
-//										uc_rtcFlag = 0;
-//										SysTick->CTRL = us_tick;
-//										SystemInit();
-//										OS_CPU_SysTickInit(720000); 
-//										IWDG_ReloadCounter();
-//										RCC_LSICmd(ENABLE);
-//										RTC_WaitForSynchro();	
-//										RTC_Local_Init();
-//										us_tick = SysTick->CTRL;
-//										SysTick->CTRL  = 0; 
-//										PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);//STOPÄ£Ê½
-//								}
-//						} 
-        }
-        // else if ((GlobalVariable.WorkModeBuffer.WorkMode & 0xFF) == AUTO_AI_MODE)
-        // {
-        //     GlobalVariable.WorkMode.WorkMode = GlobalVariable.WorkModeBuffer.WorkMode;
-        //     GlobalVariable.AIPara.AIRemoteAngle=GlobalVariable.Motor[0].ActualAngle;
-        // }
-        // else
-        // {
-        // if ( GlobalVariable.ConfigPara.isMasterController == YES)//powerSlave:stay in manual mode
-        // {
-
-        //     if ((GlobalVariable.WorkModeBuffer.WorkMode & 0xFF) == 0x00)
-        //     {
-        //         SetStopMotorToSlaves(); 
-        //     }
-        //     GlobalVariable.WorkMode.WorkMode = GlobalVariable.WorkModeBuffer.WorkMode; 
-        // }
-
-            else if ((GlobalVariable.WorkModeBuffer.WorkMode & 0xFF) == AUTO_AI_MODE)
-        {
-            GlobalVariable.WorkMode.WorkMode = GlobalVariable.WorkModeBuffer.WorkMode;
-            GlobalVariable.AIPara.AIRemoteAngle=GlobalVariable.Motor[0].ActualAngle;
-        }
-        else
-        {
-          if ( GlobalVariable.ConfigPara.isMasterController == YES)
-          {
-             //only masterController can change workMode,powerSlave:stay in manual mode
-            GlobalVariable.WorkMode.WorkMode = GlobalVariable.WorkModeBuffer.WorkMode;
-          }
-        }    
-    }
-}
-
-//void EXTI15_10_IRQHandler(void)
-//{
-//	  NVIC_SystemReset();
-//}
-
-static void RWarningAndFault1(unsigned char R_or_RW, unsigned short *value ) //High
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.SystemWarningAndFaultUpdate)+1); // 
-    }
-}
-static void RWarningAndFault2(unsigned char R_or_RW, unsigned short *value )//low
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.SystemWarningAndFaultUpdate)); //
-    }
-}
-
-static void RDeviceType(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = GlobalVariable.FixePara.DeviceType;
-    }
-}
-
-// µÍÎ»Í¨µÀÊ¹ÄÜ0µ½15Í¨µÀ
-static void RWChannelEnable1(uint8_t R_or_RW, uint16_t *value)
-{
-    uint32_t *cfg = &GlobalVariable.ConfigPara.ChannelEnable;
-    uint32_t *buf = &GlobalVariable.ConfigParaBuffer.ChannelEnable;
-
-    if (R_or_RW == 0)        // ¶ÁµÍ16 bit
-    {
-        *value = (uint16_t)(*cfg & 0xFFFF);
-    }
-    else                    // Ð´µÍ16 bit
-    {
-        // Ð´ÈëµÍ16bitµ½ buffer
-        *buf = (*buf & 0xFFFF0000) | (*value & 0xFFFF);
-
-        if (GlobalVariable.ConfigPara.isMasterController == NO)
-        {
-            *cfg = 0x00000001;  // ´Ó¿ØÖ»ÔÊÐíÍ¨µÀ 0
-        }
-        else
-        {
-            // ¸üÐÂÅäÖÃ£ºµÍ16Î»
-            *cfg = (*cfg & 0xFFFF0000) | (*value & 0xFFFF);
-        }
-
-        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-    }
-}
-
-// ¸ßÎ»Í¨µÀÊ¹ÄÜ16-31Í¨µÀ
-static void RWChannelEnable2(uint8_t R_or_RW, uint16_t *value)
-{
-    uint32_t *cfg = &GlobalVariable.ConfigPara.ChannelEnable;
-    uint32_t *buf = &GlobalVariable.ConfigParaBuffer.ChannelEnable;
-
-    if (R_or_RW == 0)        // ¶Á¸ß16 bit
-    {
-        *value = (uint16_t)((*cfg >> 16) & 0xFFFF);
-    }
-    else                    // Ð´¸ß16 bit
-    {
-        // Ð´Èë¸ß16bitµ½ buffer
-        *buf = (*buf & 0x0000FFFF) | (((uint32_t)*value) << 16);
-
-        if (GlobalVariable.ConfigPara.isMasterController == NO)
-        {
-            *cfg = 0x00000000; // ´Ó¿ØÇ¿ÖÆ¹Ø±ÕÈ«²¿Í¨µÀ
-        }
-        else
-        {
-            uint16_t oldHigh = (uint16_t)((*cfg >> 16) & 0xFFFF);
-            uint16_t oldLow  = (uint16_t)(*cfg & 0xFFFF);
-
-            // Ð´ÈÕÖ¾
-            Log_AddParamChange(6,  *value,  oldHigh);
-            Log_AddParamChange(29, *value,  oldLow);
-
-            // ¸üÐÂÅäÖÃ£º¸ß16Î»
-            *cfg = (*cfg & 0x0000FFFF) | (((uint32_t)*value) << 16);
-
-            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-        }
-    }
-}
-
-
-// static void RWESoftLimitAngle1(unsigned char R_or_RW, unsigned short *value)
-// {
-//     if(R_or_RW == 0)
-//     {
-//         *value = *(((unsigned short *)&GlobalVariable.ConfigPara.ESoftLimitAngle)+1);
-//     }
-//     else if(R_or_RW == 1)
-//     {
-//         *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.ESoftLimitAngle)+1) = *value;
-//     }
-// }
-// static void RWESoftLimitAngle2(unsigned char R_or_RW, unsigned short *value)
-// {
-//     if(R_or_RW == 0)
-//     {
-//         *value = *(((unsigned short *)&GlobalVariable.ConfigPara.ESoftLimitAngle));
-//     }
-//     else if(R_or_RW == 1)
-//     {   
-//         *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.ESoftLimitAngle)) = *value;
-//         if((GlobalVariable.ConfigParaBuffer.ESoftLimitAngle >  29.9f )
-//             && (GlobalVariable.ConfigParaBuffer.ESoftLimitAngle  < 150.1f) )
-//         {
-//             Log_AddParamChange(103, *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.ESoftLimitAngle)+1), *(((unsigned short *)&GlobalVariable.ConfigPara.ESoftLimitAngle)+1));
-// 			Log_AddParamChange(104, *value, *(((unsigned short *)&GlobalVariable.ConfigPara.ESoftLimitAngle)));
-//             GlobalVariable.ConfigPara.ESoftLimitAngle = GlobalVariable.ConfigParaBuffer.ESoftLimitAngle;
-//             GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-//         }
-        
-//     }
-// }
-
-
-
-
-
-
-
-
-
-
-
-
-static void RElevationAngle1(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.AstronomyPara.ElevationAngle)+1);
-    }
-}
-static void RElevationAngle2(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.AstronomyPara.ElevationAngle));
-    }
-}
-static void RAzimuthAngle1(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.AstronomyPara.AzimuthAngle)+1);
-    }
-}
-static void RAzimuthAngle2(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.AstronomyPara.AzimuthAngle));
-    }
-}
-
-static void RTargetAngle(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-//        *value = *(((unsigned short *)&GlobalVariable.WorkMode.Target)+1);
-			   *value = GlobalVariable.WorkMode.Target * 100.0f;
-    }
-}
-
-
-static void RTargetAngle1(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.WorkMode.Target)+1);
-    }
-}
-static void RTargetAngle2(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.WorkMode.Target));
-    }
-}
-
-
-
-static void RRealAngle(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = GlobalVariable.Motor[0].ActualAngle * 100.0f;
-    }
-}
-static void RRealAngle1(unsigned char R_or_RW, unsigned short *value)
-{
-    if (YES == GlobalVariable.ConfigPara.isMasterController)
-    {   
-        if(R_or_RW == 0)
-        {
-                  if(((GlobalVariable.ConfigPara.ChannelEnable >> 1) & 0x01) == ENABLE)
-                    {
-                     *value = GlobalVariable.Motor[1].ActualAngle * 100.0f;
-                    }
-        }
-    }
-    else
-    {
-        if(R_or_RW == 0)
-        {
-            *value = *(((unsigned short *)&GlobalVariable.Motor[0].ActualAngle)+1);
-        }
-    }
-    
-
-}
-static void RRealAngle2(unsigned char R_or_RW, unsigned short *value)
-{
-   if (YES == GlobalVariable.ConfigPara.isMasterController)
-    {
-        if(R_or_RW == 0)
-        {
-                  if(((GlobalVariable.ConfigPara.ChannelEnable >> 2) & 0x01) == ENABLE)
-                    {
-               *value = GlobalVariable.Motor[2].ActualAngle * 100.0f;
-                    }
-        }
-    }
-    else
-    {
-        if(R_or_RW == 0)
-        {
-            *value = *(((unsigned short *)&GlobalVariable.Motor[0].ActualAngle));
-        }
-    }
-
-}
-static void RRealAngle3(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-         if(((GlobalVariable.ConfigPara.ChannelEnable >> 3) & 0x01) == ENABLE)
-				{
-           *value = GlobalVariable.Motor[3].ActualAngle * 100.0f;
-				}
-    }
-}
-static void RRealAngle4(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-         if(((GlobalVariable.ConfigPara.ChannelEnable >> 4) & 0x01) == ENABLE)
-				{
-           *value = GlobalVariable.Motor[4].ActualAngle * 100.0f;
-				}
-    }
-}
-
-static void RRealAngle5(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-         if(((GlobalVariable.ConfigPara.ChannelEnable >> 5) & 0x01) == ENABLE)
-				{
-           *value = GlobalVariable.Motor[5].ActualAngle * 100.0f;
-				}
-    }
-}
-static void RRealAngle6(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-         if(((GlobalVariable.ConfigPara.ChannelEnable >> 6) & 0x01) == ENABLE)
-				{
-           *value = GlobalVariable.Motor[6].ActualAngle * 100.0f;
-				}
-    }
-}
-
-
-static void RRealAngle7(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-         if(((GlobalVariable.ConfigPara.ChannelEnable >> 7) & 0x01) == ENABLE)
-                {
-           *value = GlobalVariable.Motor[7].ActualAngle * 100.0f;
-                }
-    }
-}
-static void RRealAngle8(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-         if(((GlobalVariable.ConfigPara.ChannelEnable >> 8) & 0x01) == ENABLE)
-                {
-           *value = GlobalVariable.Motor[8].ActualAngle * 100.0f;
-                }
-    }
-}
-static void RRealAngle9(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-         if(((GlobalVariable.ConfigPara.ChannelEnable >> 9) & 0x01) == ENABLE)
-                {
-           *value = GlobalVariable.Motor[9].ActualAngle * 100.0f;
-                }
-    }
-}   
-static void RRealAngle10(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-         if(((GlobalVariable.ConfigPara.ChannelEnable >> 10) & 0x01) == ENABLE)
-                {
-           *value = GlobalVariable.Motor[10].ActualAngle * 100.0f;
-                }
-    }
-}
-static void RRealAngle11(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-         if(((GlobalVariable.ConfigPara.ChannelEnable >> 11) & 0x01) == ENABLE)
-                {
-           *value = GlobalVariable.Motor[11].ActualAngle * 100.0f;
-                }
-    }
-}   
-static void RRealAngle12(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-         if(((GlobalVariable.ConfigPara.ChannelEnable >> 12) & 0x01) == ENABLE)
-                {
-           *value = GlobalVariable.Motor[12].ActualAngle * 100.0f;
-                }
-    }
-}
-static void RRealAngle13(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-         if(((GlobalVariable.ConfigPara.ChannelEnable >> 13) & 0x01) == ENABLE)
-                {
-           *value = GlobalVariable.Motor[13].ActualAngle * 100.0f;
-                }
-    }
-}   
-static void RRealAngle14(unsigned char R_or_RW, unsigned short *value   )
-{
-    if(R_or_RW == 0)
-    {
-         if(((GlobalVariable.ConfigPara.ChannelEnable >> 14) & 0x01) == ENABLE)
-                {
-           *value = GlobalVariable.Motor[14].ActualAngle * 100.0f;
-                }
-    }
-}
-static void RRealAngle15(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-         if(((GlobalVariable.ConfigPara.ChannelEnable >> 15) & 0x01) == ENABLE)
-                {
-           *value = GlobalVariable.Motor[15].ActualAngle * 100.0f;
-                }
-    }
-}   
-static void RRealAngle16(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-         if(((GlobalVariable.ConfigPara.ChannelEnable >> 16) & 0x01) == ENABLE)
-                {
-           *value = GlobalVariable.Motor[16].ActualAngle * 100.0f;
-                }
-    }
-}
-
-static void RRealAngle17(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-         if(((GlobalVariable.ConfigPara.ChannelEnable >> 17) & 0x01) == ENABLE)
-                {
-           *value = GlobalVariable.Motor[17].ActualAngle * 100.0f;
-                }
-    }
-}
-static void RRealAngle18(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-         if(((GlobalVariable.ConfigPara.ChannelEnable >> 18) & 0x01) == ENABLE)
-                {
-           *value = GlobalVariable.Motor[18].ActualAngle * 100.0f;
-                }
-    }
-}   
-static void RRealAngle19(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-         if(((GlobalVariable.ConfigPara.ChannelEnable >> 19) & 0x01) == ENABLE)
-                {
-           *value = GlobalVariable.Motor[19].ActualAngle * 100.0f;
-                }
-    }
-}
-static void RRealAngle20(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-         if(((GlobalVariable.ConfigPara.ChannelEnable >> 20) & 0x01) == ENABLE)
-                {
-           *value = GlobalVariable.Motor[20].ActualAngle * 100.0f;
-                }
-    }
-}
-
-
-
-
-
-
-static void RWTimeYear(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = GlobalVariable.Time.Year;
-    }
-    else if(R_or_RW == 1)
-    {
-        //LogOperation_ParameterChange( GlobalVariable.TimeBuffer.Year, *value );  
-        //Log_AddParamChange(23, *value, GlobalVariable.TimeBuffer.Year);
-        GlobalVariable.TimeBuffer.Year = *value;
-        GlobalVariable.WriteFlag.TimeWrite = 1;
-    }
-}
-static void RWTimeMonth(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = GlobalVariable.Time.Month;
-    }
-    else if(R_or_RW == 1)
-    {
-        //LogOperation_ParameterChange( GlobalVariable.TimeBuffer.Month, *value );   
-		//Log_AddParamChange(24, *value, GlobalVariable.TimeBuffer.Month);
-        GlobalVariable.TimeBuffer.Month = *value;
-        GlobalVariable.WriteFlag.TimeWrite = 1;
-    }
-}
-static void RWTimeDay(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = GlobalVariable.Time.Day;
-    }
-    else if(R_or_RW == 1)
-    {
-        //LogOperation_ParameterChange( GlobalVariable.TimeBuffer.Day, *value );  
-		//Log_AddParamChange(25, *value, GlobalVariable.TimeBuffer.Day);
-        GlobalVariable.TimeBuffer.Day = *value;
-        GlobalVariable.WriteFlag.TimeWrite = 1;
-    }    
-}
-static void RWTimeHour(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = GlobalVariable.Time.Hour;
-    }
-    else if(R_or_RW == 1)
-    {
-        //LogOperation_ParameterChange( GlobalVariable.TimeBuffer.Hour, *value );    
-		//Log_AddParamChange(26, *value, GlobalVariable.TimeBuffer.Hour);
-        GlobalVariable.TimeBuffer.Hour = *value;
-        GlobalVariable.WriteFlag.TimeWrite = 1;
-    }
-}
-static void RWTimeMinute(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = GlobalVariable.Time.Minute;
-    }
-    else if(R_or_RW == 1)
-    {
-        //LogOperation_ParameterChange( GlobalVariable.TimeBuffer.Minute, *value );   
-		//Log_AddParamChange(27, *value, GlobalVariable.TimeBuffer.Minute);
-        GlobalVariable.TimeBuffer.Minute = *value;
-        GlobalVariable.WriteFlag.TimeWrite = 1;
-    }
-}
-static void RWTimeSecond(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = GlobalVariable.Time.Second;
-    }
-    else if(R_or_RW == 1)
-    {
-        //LogOperation_ParameterChange( GlobalVariable.TimeBuffer.Second, *value );    
-		//Log_AddParamChange(28, *value, GlobalVariable.TimeBuffer.Second);
-        GlobalVariable.TimeBuffer.Second = *value;
-        BKPWriteRTCUpdateFlag();
-        GlobalVariable.WriteFlag.TimeWrite = 1;
-    }
-}
-
-static void RWRemoteWindDirect(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = GlobalVariable.Weather.RemoteWindDirect;
-    }
-    else if(R_or_RW == 1)
-    {
-    	Log_AddParamChange(31, *value, GlobalVariable.Weather.RemoteWindDirect);
-        GlobalVariable.Weather.RemoteWindDirect = *value;
-    }
-}
-
-static void RWRemoteWindSpeed(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = GlobalVariable.Weather.RemoteWindSpeed;
-    }
-    else if(R_or_RW == 1)
-    {
-        //LogOperation_ParameterChange( GlobalVariable.Weather.RemoteWindSpeed, *value );
-			  
-			if(*value != GlobalVariable.Weather.RemoteWindSpeed)
-			{   
-				if(20 == *value || 20 == GlobalVariable.Weather.RemoteWindSpeed)
-                {
-					Log_AddParamChange(33, *value, GlobalVariable.Weather.RemoteWindSpeed);
-				}
-			}
-        GlobalVariable.Weather.RemoteWindSpeed = *value;
-    }
-}
-
-static void RWAIRemoteTarget(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = (unsigned short)GlobalVariable.AIPara.AIRemoteAngle;
-    }
-    else if(R_or_RW == 1)
-    {
-        //LogOperation_ParameterChange( GlobalVariable.AIPara.AIRemoteAngle, *value );   
-		Log_AddParamChange(34, *value, GlobalVariable.AIPara.AIRemoteAngle);
-        GlobalVariable.AIPara.AIRemoteAngle = (float)*value;
-        GlobalVariable.AIPara.AIModeDelayCount = 1;
-    }
-}
-
-static void RTemp(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(unsigned short *)&GlobalVariable.Tmp.BoardTmp;
-    }
-}
-
-static void RMotorCurrent(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = (short)(GlobalVariable.Motor[0].Motorcurrent * 10);  //
-    }
-}
-static void RMotorCurrent1(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-			 if(((GlobalVariable.ConfigPara.ChannelEnable >> 1) & 0x01) == ENABLE)
-			 {
-          *value = (short)(GlobalVariable.Motor[1].Motorcurrent * 10);  //
-        //  *value = 3000;
-			 }
-    }
-}
-static void RMotorCurrent2(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-       if(((GlobalVariable.ConfigPara.ChannelEnable >> 2) & 0x01) == ENABLE)
-			 {
-          *value = (short)(GlobalVariable.Motor[2].Motorcurrent * 10);  //
-			 }
-    }
-}
-static void RMotorCurrent3(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-       if(((GlobalVariable.ConfigPara.ChannelEnable >> 3) & 0x01) == ENABLE)
-			 {
-          *value = (short)(GlobalVariable.Motor[3].Motorcurrent * 10);  //
-			 }
-    }
-}
-static void RMotorCurrent4(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-       if(((GlobalVariable.ConfigPara.ChannelEnable >> 4) & 0x01) == ENABLE)
-			 {
-          *value = (short)(GlobalVariable.Motor[4].Motorcurrent * 10);  //
-			 }
-    }
-}
-static void RMotorCurrent5(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-       if(((GlobalVariable.ConfigPara.ChannelEnable >> 5) & 0x01) == ENABLE)
-			 {
-          *value = (short)(GlobalVariable.Motor[5].Motorcurrent * 10);  //
-			 }
-    }
-}
-static void RMotorCurrent6(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-       if(((GlobalVariable.ConfigPara.ChannelEnable >> 6) & 0x01) == ENABLE)
-			 {
-          *value = (short)(GlobalVariable.Motor[6].Motorcurrent * 10);  //
-			 }
-    }
-}
-
-static void RMotorCurrent7(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-       if(((GlobalVariable.ConfigPara.ChannelEnable >> 7) & 0x01) == ENABLE)
-             {
-          *value = (short)(GlobalVariable.Motor[7].Motorcurrent * 10);  //
-             }
-    }
-}   
-static void RMotorCurrent8(unsigned char R_or_RW, unsigned short *value )
-{
-    if(R_or_RW == 0)
-    {
-       if(((GlobalVariable.ConfigPara.ChannelEnable >> 8) & 0x01) == ENABLE)
-             {
-          *value = (short)(GlobalVariable.Motor[8].Motorcurrent * 10);  //
-             }
-    }
-}
-static void RMotorCurrent9(unsigned char R_or_RW, unsigned short *value )
-{
-    if(R_or_RW == 0)
-    {
-       if(((GlobalVariable.ConfigPara.ChannelEnable >> 9) & 0x01) == ENABLE)
-             {
-          *value = (short)(GlobalVariable.Motor[9].Motorcurrent * 10);  //
-             }
-    }
-} 
-static void RMotorCurrent10(unsigned char R_or_RW, unsigned short *value )
-{
-    if(R_or_RW == 0)
-    {
-       if(((GlobalVariable.ConfigPara.ChannelEnable >> 10) & 0x01) == ENABLE)
-             {
-          *value = (short)(GlobalVariable.Motor[10].Motorcurrent * 10);  //
-             }
-    }
-}
-static void RMotorCurrent11(unsigned char R_or_RW, unsigned short *value )
-{
-    if(R_or_RW == 0)
-    {
-       if(((GlobalVariable.ConfigPara.ChannelEnable >> 11) & 0x01) == ENABLE)
-             {
-          *value = (short)(GlobalVariable.Motor[11].Motorcurrent * 10);  //
-             }
-    }
-}
-static void RMotorCurrent12(unsigned char R_or_RW, unsigned short *value )
-{
-    if(R_or_RW == 0)
-    {
-       if(((GlobalVariable.ConfigPara.ChannelEnable >> 12) & 0x01) == ENABLE)
-             {
-          *value = (short)(GlobalVariable.Motor[12].Motorcurrent * 10);  //
-             }
-    }
-}   
-static void RMotorCurrent13(unsigned char R_or_RW, unsigned short *value )
-{
-    if(R_or_RW == 0)
-    {
-       if(((GlobalVariable.ConfigPara.ChannelEnable >> 13) & 0x01) == ENABLE)
-             {
-          *value = (short)(GlobalVariable.Motor[13].Motorcurrent * 10);  //
-             }
-    }
-}
-static void RMotorCurrent14(unsigned char R_or_RW, unsigned short *value )
-{
-    if(R_or_RW == 0)
-    {
-       if(((GlobalVariable.ConfigPara.ChannelEnable >> 14) & 0x01) == ENABLE)
-             {
-          *value = (short)(GlobalVariable.Motor[14].Motorcurrent * 10);  //
-             }
-    }
-}
-static void RMotorCurrent15(unsigned char R_or_RW, unsigned short *value )
-{
-    if(R_or_RW == 0)
-    {
-       if(((GlobalVariable.ConfigPara.ChannelEnable >> 15) & 0x01) == ENABLE)
-             {
-          *value = (short)(GlobalVariable.Motor[15].Motorcurrent * 10);  //
-             }
-    }
-}
-static void RMotorCurrent16(unsigned char R_or_RW, unsigned short *value )
-{
-    if(R_or_RW == 0)
-    {
-       if(((GlobalVariable.ConfigPara.ChannelEnable >> 16) & 0x01) == ENABLE)
-             {
-          *value = (short)(GlobalVariable.Motor[16].Motorcurrent * 10);  //
-             }
-    }
-} 
-
-static void RMotorCurrent17(unsigned char R_or_RW, unsigned short *value )
-{
-    if(R_or_RW == 0)
-    {
-       if(((GlobalVariable.ConfigPara.ChannelEnable >> 17) & 0x01) == ENABLE)
-             {
-          *value = (short)(GlobalVariable.Motor[17].Motorcurrent * 10);  //
-             }
-    }
-}
-static void RMotorCurrent18(unsigned char R_or_RW, unsigned short *value )
-{
-    if(R_or_RW == 0)
-    {
-       if(((GlobalVariable.ConfigPara.ChannelEnable >> 18) & 0x01) == ENABLE)
-             {
-          *value = (short)(GlobalVariable.Motor[18].Motorcurrent * 10);  //
-             }
-    }
-}
-static void RMotorCurrent19(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-       if(((GlobalVariable.ConfigPara.ChannelEnable >> 19) & 0x01) == ENABLE)
-             {
-          *value = (short)(GlobalVariable.Motor[19].Motorcurrent * 10);  //
-             }
-    }
-}
-static void RMotorCurrent20(unsigned char R_or_RW, unsigned short *value )
-{
-    if(R_or_RW == 0)
-    {
-       if(((GlobalVariable.ConfigPara.ChannelEnable >> 20) & 0x01) == ENABLE)
-             {
-          *value = (short)(GlobalVariable.Motor[20].Motorcurrent * 10);  //
-             }
-    }
-}
-
-
-
-
-static void RWProtectCurrent1(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.MotorOverCurrentValue)+1);
-    }
-    else if(R_or_RW == 1)
-    {
-        *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.MotorOverCurrentValue)+1) = *value;
-    }
-}
-
-static void RWProtectCurrent2(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.MotorOverCurrentValue));
-    }
-    else if(R_or_RW == 1)
-    {
-        *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.MotorOverCurrentValue)) = *value;
-        //LogOperation_ParameterChange( GlobalVariable.ConfigPara.MotorOverCurrentValue, GlobalVariable.ConfigParaBuffer.MotorOverCurrentValue ); 
-      
-        if( (GlobalVariable.ConfigParaBuffer.MotorOverCurrentValue > 0.19f) && 
-            (GlobalVariable.ConfigParaBuffer.MotorOverCurrentValue < 20.1f )  ) //???6.1·Å´ó???20.1ÏÞÖÆ
-        {
-            Log_AddParamChange(43, *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.MotorOverCurrentValue)+1), *(((unsigned short *)&GlobalVariable.ConfigPara.MotorOverCurrentValue)+1));
-        	Log_AddParamChange(44, *value, *(((unsigned short *)&GlobalVariable.ConfigPara.MotorOverCurrentValue)));
-            GlobalVariable.ConfigPara.MotorOverCurrentValue = GlobalVariable.ConfigParaBuffer.MotorOverCurrentValue;
-            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-
-    
-                GlobalVariable.SpecialCheck.MasterSetProCurrentToSlaveFlag = 1;
-
-            
-        }
-    }
-}
-
-/* Longitude */
-static void RWLongitude1(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.Longitude)+1);
-    }
-    else if(R_or_RW == 1)
-    {
-        *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.Longitude)+1) = *value;
-    }
-}
-static void RWLongitude2(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.Longitude));
-    }
-    else if(R_or_RW == 1)
-    {
-        *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.Longitude)) = *value;
-        if(GlobalVariable.ConfigParaBuffer.Longitude >= -180.0
-            &&GlobalVariable.ConfigParaBuffer.Longitude <= 180.0 )
-        {
-					if(fabs(GlobalVariable.ConfigParaBuffer.Longitude - GlobalVariable.ConfigPara.Longitude) >= 0.1f ) //???7.8??????
-					{
-						Log_AddParamChange(45, *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.Longitude)+1), *(((unsigned short *)&GlobalVariable.ConfigPara.Longitude)+1));
-      			        Log_AddParamChange(46, *value, *(((unsigned short *)&GlobalVariable.ConfigPara.Longitude)));						
-						GlobalVariable.ConfigPara.Longitude = GlobalVariable.ConfigParaBuffer.Longitude;
-                        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-					}  
-        }
-    }
-}
-
-/* Latitude */
-static void RWLatitude1(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.Latitude)+1);
-    }
-    else if(R_or_RW == 1)
-    {
-        *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.Latitude)+1) = *value;
-    }
-}
-static void RWLatitude2(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.Latitude));
-    }
-    else if(R_or_RW == 1)
-    {
-        *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.Latitude)) = *value;
-        if(GlobalVariable.ConfigParaBuffer.Latitude >= -90.0 
-            && GlobalVariable.ConfigParaBuffer.Latitude <= 90.0)
-        {
-            if(fabs(GlobalVariable.ConfigParaBuffer.Latitude - GlobalVariable.ConfigPara.Latitude) >= 0.1f )//???7.8??????
-            {
-                Log_AddParamChange(47, *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.Latitude)+1), *(((unsigned short *)&GlobalVariable.ConfigPara.Latitude)+1));
-                Log_AddParamChange(48, *value, *(((unsigned short *)&GlobalVariable.ConfigPara.Latitude)));					
-                GlobalVariable.ConfigPara.Latitude = GlobalVariable.ConfigParaBuffer.Latitude;
-                GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-            }       
-        }
-    }
-}
-static void RWTimeZone1(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.TimeZone)+1);
-    }
-    else if(R_or_RW == 1)
-    {
-//    	Log_AddParamChange(49, *value, *(((unsigned short *)&GlobalVariable.ConfigPara.TimeZone)+1));
-        *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.TimeZone)+1) = *value;
-    }
-}
-static void RWTimeZone2(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.TimeZone));
-    }
-    else if(R_or_RW == 1)
-    {
-        *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.TimeZone)) = *value;
-        if(GlobalVariable.ConfigParaBuffer.TimeZone >= -12.0
-            && GlobalVariable.ConfigParaBuffer.TimeZone <= 12.0)
-        {
-            if(fabs(GlobalVariable.ConfigParaBuffer.TimeZone - GlobalVariable.ConfigPara.TimeZone) >= 0.5f )
-            {
-                Log_AddParamChange(49, *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.TimeZone)+1), *(((unsigned short *)&GlobalVariable.ConfigPara.TimeZone)+1));
-                Log_AddParamChange(50,	*value, *(((unsigned short *)&GlobalVariable.ConfigPara.TimeZone)));
-
-                GlobalVariable.ConfigPara.TimeZone = GlobalVariable.ConfigParaBuffer.TimeZone;
-                GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-            }
-            
-        }
-    }
-}
-static void RWEWTracingAccuracy1(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-         *value = *(((unsigned short *)&GlobalVariable.ConfigPara.EWTracingAccuracy)+1);
-    }
-    else if(R_or_RW == 1)
-    {    	
-        *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.EWTracingAccuracy)+1) = *value;
-    }
-}
-static void RWEWTracingAccuracy2(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.EWTracingAccuracy));
-    }
-    else if(R_or_RW == 1)
-    {
-        *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.EWTracingAccuracy)) = *value;
-        if(GlobalVariable.ConfigParaBuffer.EWTracingAccuracy >= 0.98
-            && GlobalVariable.ConfigParaBuffer.EWTracingAccuracy <= 5.1)
-        {
-            Log_AddParamChange(51, *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.EWTracingAccuracy)+1), *(((unsigned short *)&GlobalVariable.ConfigPara.EWTracingAccuracy)+1));
-			Log_AddParamChange(52, *value, *(((unsigned short *)&GlobalVariable.ConfigPara.EWTracingAccuracy)));
-            GlobalVariable.ConfigPara.EWTracingAccuracy = GlobalVariable.ConfigParaBuffer.EWTracingAccuracy;
-            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-        }
-    }
-}
-
-static void RPVBuckerVoltage(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = (unsigned short)(GlobalVariable.PowerPara.PVBuckerVoltage * 10);
-    }
-}
-static void RBatState(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = 0;
-        *value |= *(unsigned char*)(&GlobalVariable.PowerPara.ChargeState);
-    }
-}
-static void RBatSOCTemp(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = 0x00FF & (unsigned char)(GlobalVariable.PowerPara.BatterySOC*100);
-        *value = *value << 8;
-        *value &= 0xFF00;
-        *value |= ((signed char)(GlobalVariable.PowerPara.BatteryTemperature) & 0x00FF);
-    }
-}
-static void RBatVoltage(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = (unsigned short)(GlobalVariable.PowerPara.BatteryVoltage*10);
-    }
-}
-static void RBatCurrent(unsigned char R_or_RW, unsigned short *value)
-{
-    signed short temp = 0;
-    if(R_or_RW == 0)
-    {
-        temp = (signed short)(GlobalVariable.PowerPara.BatteryCurrent*100);
-        *value = *((unsigned short *)&temp);
-    }
-}
-
-static void RVersion1(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = (unsigned short)(GlobalVariable.FixePara.Version1);
-    }
-}
-static void RVersion2(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = (unsigned short)(GlobalVariable.FixePara.Version2);
-    }
-}
-
-static void RWComID(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.ComID));
-    }
-    else if(R_or_RW == 1)
-    {        
-          if (GlobalVariable.ConfigPara.isMasterController == 1)
-          {
-            if(*value >= 1 && *value < 255)
-            {
-                //LogOperation_ParameterChange( GlobalVariable.ConfigPara.ComID, *value );   
-                Log_AddParamChange(81, *value, GlobalVariable.ConfigPara.ComID);
-                GlobalVariable.ConfigPara.ComID =(unsigned char) *value;
-                GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-            }
-
-          }
-
-     else  if (GlobalVariable.ConfigPara.isMasterController == 0)
-        {
-            if(*value >= 2 && *value <=21)
-            {
-                //LogOperation_ParameterChange( GlobalVariable.ConfigPara.ComID, *value );   
-                Log_AddParamChange(81, *value, GlobalVariable.ConfigPara.ComID);
-                GlobalVariable.ConfigPara.ComID =(unsigned char) *value;
-                GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-            }
-        }
-        
-
-
-
-    }
-}
-static void RWComID2(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.ComID2));
-    }
-    else if(R_or_RW == 1)
-    {        
-        if(*value >= 1 && *value < 255)
-        {
-//            LogOperation_ParameterChange( GlobalVariable.ConfigPara.ComID, *value );     
-            Log_AddParamChange(112, *value, GlobalVariable.ConfigPara.ComID2);					
-            GlobalVariable.ConfigPara.ComID2 =(unsigned char) *value;
-            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-        }
-    }
-}
-static void RWComID3(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.ComID3));
-    }
-    else if(R_or_RW == 1)
-    {        
-        if(*value >= 1 && *value < 255)
-        {
-//            LogOperation_ParameterChange( GlobalVariable.ConfigPara.ComID, *value );      
-					  Log_AddParamChange(113, *value, GlobalVariable.ConfigPara.ComID3);	
-            GlobalVariable.ConfigPara.ComID3 =(unsigned char) *value;
-            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-        }
-    }
-}
-
-static void RWComID4(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.ComID4));
-    }
-    else if(R_or_RW == 1)
-    {        
-        if(*value >= 1 && *value < 255)
-        {
-//            LogOperation_ParameterChange( GlobalVariable.ConfigPara.ComID, *value );     
-            Log_AddParamChange(131, *value, GlobalVariable.ConfigPara.ComID4);					
-            GlobalVariable.ConfigPara.ComID4 =(unsigned char) *value;
-            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-        }
-    }
-}
-static void RWComID5(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.ComID5));
-    }
-    else if(R_or_RW == 1)
-    {        
-        if(*value >= 1 && *value < 255)
-        {
-//            LogOperation_ParameterChange( GlobalVariable.ConfigPara.ComID, *value );      
-					  Log_AddParamChange(132, *value, GlobalVariable.ConfigPara.ComID5);	
-            GlobalVariable.ConfigPara.ComID5 =(unsigned char) *value;
-            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-        }
-    }
-}
-static void RWComID6(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.ComID6));
-    }
-    else if(R_or_RW == 1)
-    {        
-        if(*value >= 1 && *value < 255)
-        {
-//            LogOperation_ParameterChange( GlobalVariable.ConfigPara.ComID, *value );
-					  Log_AddParamChange(133, *value, GlobalVariable.ConfigPara.ComID6);    
-            GlobalVariable.ConfigPara.ComID6 =(unsigned char) *value;
-            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-        }
-    }
-}
-static void RWComID7(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.ComID7));
-    }
-    else if(R_or_RW == 1)
-    {        
-        if(*value >= 1 && *value < 255)
-        {
-//            LogOperation_ParameterChange( GlobalVariable.ConfigPara.ComID, *value );
-					  Log_AddParamChange(134, *value, GlobalVariable.ConfigPara.ComID7);
-            GlobalVariable.ConfigPara.ComID7 =(unsigned char) *value;
-            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-        }
-    }
-}
-static void RWComID8(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.ComID8));
-    }
-    else if(R_or_RW == 1)
-    {        
-        if(*value >= 1 && *value < 255)
-        {
-//            LogOperation_ParameterChange( GlobalVariable.ConfigPara.ComID, *value );
-					  Log_AddParamChange(135, *value, GlobalVariable.ConfigPara.ComID8);
-            GlobalVariable.ConfigPara.ComID8 =(unsigned char) *value;
-            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-        }
-    }
-}
-static void RWComID9(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.ComID9));
-    }
-    else if(R_or_RW == 1)
-    {        
-        if(*value >= 1 && *value < 255)
-        {
-//            LogOperation_ParameterChange( GlobalVariable.ConfigPara.ComID, *value );
-                        Log_AddParamChange(136, *value, GlobalVariable.ConfigPara.ComID9);	
-                GlobalVariable.ConfigPara.ComID9 =(unsigned char) *value;
-                GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-            }
-        }
-    }
-static void RWComID10(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.ComID10));
-    }
-    else if(R_or_RW == 1)
-    {
-        if(*value >= 1 && *value < 255)
-        {
-//            LogOperation_ParameterChange( GlobalVariable.ConfigPara.ComID, *value );
-                        Log_AddParamChange(137, *value, GlobalVariable.ConfigPara.ComID10);	
-                GlobalVariable.ConfigPara.ComID10 =(unsigned char) *value;
-                GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-        }
-    }
-	
-}
-
-static void RWComID11(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.ComID11));
-    }
-    else if(R_or_RW == 1)
-    {        
-        if(*value >= 1 && *value < 255)
-        {
-//            LogOperation_ParameterChange( GlobalVariable.ConfigPara.ComID, *value );
-					  Log_AddParamChange(138, *value, GlobalVariable.ConfigPara.ComID11);
-            GlobalVariable.ConfigPara.ComID11 =(unsigned char) *value;
-            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-        }
-    }
-}
-
-static void RWComID12(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.ComID12));
-    }
-    else if(R_or_RW == 1)
-    {        
-        if(*value >= 1 && *value < 255)
-        {
-//            LogOperation_ParameterChange( GlobalVariable.ConfigPara.ComID, *value );
-					  Log_AddParamChange(139, *value, GlobalVariable.ConfigPara.ComID12);
-            GlobalVariable.ConfigPara.ComID12 =(unsigned char) *value;
-            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-        }
-    }
-}
-static void RWComID13(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.ComID13));
-    }
-    else if(R_or_RW == 1)
-    {        
-        if(*value >= 1 && *value < 255)
-        {
-//            LogOperation_ParameterChange( GlobalVariable.ConfigPara.ComID, *value );
-			Log_AddParamChange(140, *value, GlobalVariable.ConfigPara.ComID13);
-            GlobalVariable.ConfigPara.ComID13 =(unsigned char) *value;
-            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-        }
-    }
-}
-static void RWComID14(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.ComID14));
-    }
-    else if(R_or_RW == 1)
-    {        
-        if(*value >= 1 && *value < 255)
-        {
-//            LogOperation_ParameterChange( GlobalVariable.ConfigPara.ComID, *value );
-					  Log_AddParamChange(141, *value, GlobalVariable.ConfigPara.ComID14);
-            GlobalVariable.ConfigPara.ComID14 =(unsigned char) *value;
-            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-        }
-    }
-}
-static void RWComID15(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.ComID15));
-    }
-    else if(R_or_RW == 1)
-    {        
-        if(*value >= 1 && *value < 255)
-        {   
-//            LogOperation_ParameterChange( GlobalVariable.ConfigPara.ComID, *value );
-                        Log_AddParamChange(142, *value, GlobalVariable.ConfigPara.ComID15);
-                GlobalVariable.ConfigPara.ComID15 =(unsigned char) *value;
-                GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-            }
-        }
-}
-static void RWComID16(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.ComID16));
-    }
-    else if(R_or_RW == 1)
-    {        
-        if(*value >= 1 && *value < 255)
-        {
-//            LogOperation_ParameterChange( GlobalVariable.ConfigPara.ComID, *value );
-					  Log_AddParamChange(143, *value, GlobalVariable.ConfigPara.ComID16);
-            GlobalVariable.ConfigPara.ComID16 =(unsigned char) *value;
-            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-        }
-    }
-}
-static void RWComID17(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.ComID17));
-    }
-    else if(R_or_RW == 1)
-    {        
-        if(*value >= 1 && *value < 255)
-        {
-//            LogOperation_ParameterChange( GlobalVariable.ConfigPara.ComID, *value )
-					  Log_AddParamChange(144, *value, GlobalVariable.ConfigPara.ComID17);
-            GlobalVariable.ConfigPara.ComID17 =(unsigned char) *value;
-            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-        }
-    }
-}
-static void RWComID18(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.ComID18));
-   
-    }
-    else if(R_or_RW == 1)
-    {
-        if(*value >= 1 && *value < 255)
-        {
-//            LogOperation_ParameterChange( GlobalVariable.ConfigPara.ComID, *value );
-                        Log_AddParamChange(145, *value, GlobalVariable.ConfigPara.ComID18);
-                GlobalVariable.ConfigPara.ComID18 =(unsigned char) *value;
-                GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-        }
-    }
-}
-static void RWComID19(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.ComID19));
-    }
-    else if(R_or_RW == 1)
-    {        
-        if(*value >= 1 && *value < 255)
-        {
-//            LogOperation_ParameterChange( GlobalVariable.ConfigPara.ComID, *value )
-                      Log_AddParamChange(146, *value, GlobalVariable.ConfigPara.ComID19);
-            GlobalVariable.ConfigPara.ComID19 =(unsigned char) *value;
-            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-        }
-    }
-}
-static void RWComID20(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.ComID20));
-    }
-    else if(R_or_RW == 1)
-    {        
-        if(*value >= 1 && *value < 255)
-        {
-//            LogOperation_ParameterChange( GlobalVariable.ConfigPara.ComID, *value );
-                        Log_AddParamChange(147, *value, GlobalVariable.ConfigPara.ComID20);	
-                GlobalVariable.ConfigPara.ComID20 =(unsigned char) *value;
-                GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-            }
-        }
-    }
-
-static void RWComID21(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.ComID21));
-    }
-    else if(R_or_RW == 1)
-    {        
-        if(*value >= 1 && *value < 255)
-        {
-//            LogOperation_ParameterChange( GlobalVariable.ConfigPara.ComID, *value );      
-					  Log_AddParamChange(148, *value, GlobalVariable.ConfigPara.ComID21);	
-            GlobalVariable.ConfigPara.ComID21 =(unsigned char) *value;
-            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-        }
-    }
-}
-
-static void RWEnableMasterController(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.isMasterController));
-    }
-    else if(R_or_RW == 1)
-    {        
-            if((*value) == NO) 
-            {
-                if(( GlobalVariable.ConfigPara.ComID >= 2) && (GlobalVariable.ConfigPara.ComID <= 21))
-                {
-                //
-                    Log_AddParamChange(REG_SET_CONTROLER_ROLE, *value, GlobalVariable.ConfigPara.isMasterController);	
-                    GlobalVariable.ConfigPara.isMasterController =(unsigned char) *value;
-                    FixedParaInit();//¸ü»»¹Ì¼þ°æ±¾ºÅ£¬ÊÊÅäÖ÷´Ó½ÇÉ«
-                    GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-                }
-              }
-            else if((*value) == YES)
-             {
-                 if(( GlobalVariable.ConfigPara.ComID >= 1) && (GlobalVariable.ConfigPara.ComID < 255))
-                 {
-
-          
-                Log_AddParamChange(REG_SET_CONTROLER_ROLE, *value, GlobalVariable.ConfigPara.isMasterController);	
-                GlobalVariable.ConfigPara.isMasterController =(unsigned char) *value;
-
-                FixedParaInit();//¸ü»»¹Ì¼þ°æ±¾ºÅ£¬ÊÊÅäÖ÷´Ó½ÇÉ«
-                GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-                }
-             }
-    }
-}
-
-static void RWsubSlaveCount(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.subSlaveCount));
-    }
-    else if(R_or_RW == 1)
-    {        
-        if((*value >= 1) &&( *value )< 30)
-        {
-		   Log_AddParamChange(REG_SUBSLAVE_COUNT, *value, GlobalVariable.ConfigPara.subSlaveCount);	
-            GlobalVariable.ConfigPara.subSlaveCount =(unsigned char) *value;
-            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-        }
-    }
-}
-
-
-
-static void RWsubSlavePowerSupplyEnable(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.subSlavePowerSupplyEnable));
-    }
-    else if(R_or_RW == 1)
-    {        
-        if((*value == YES) ||( *value ) == NO)
-        {
-		   Log_AddParamChange(REG_SUBSLAVE_POWER_SUPPLY_ENABLE, *value, GlobalVariable.ConfigPara.subSlavePowerSupplyEnable);	
-            GlobalVariable.ConfigPara.subSlavePowerSupplyEnable =(unsigned char) *value;
-            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-        }
-    }
-}
-
-
-/*************************************************
-  Function              : RWPIDKP()
-  Description           : PID KP  
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : tangtao
-  Revision				      : V0.0
-  Modified Date			    : 2021.10.08
-  Additional Comments	  : 
-*************************************************/
-//static void RWPIDKP(unsigned char R_or_RW, unsigned short *value)
-//{
-//    if(R_or_RW == 0)
-//    {
-//        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.Pid_CurrKp));
-//    }
-//    else if(R_or_RW == 1)
-//    {        
-//        LogOperation_ParameterChange( GlobalVariable.ConfigPara.Pid_CurrKp, *value );      
-//        GlobalVariable.ConfigPara.Pid_CurrKp =(unsigned short) *value;
-//        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-//    }
-//}
-
-/*************************************************
-  Function              : RWPIDKI()
-  Description           : PID KI  
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : tangtao
-  Revision				      : V0.0
-  Modified Date			    : 2021.10.08
-  Additional Comments	  : 
-*************************************************/
-//static void RWPIDKI(unsigned char R_or_RW, unsigned short *value)
-//{
-//    if(R_or_RW == 0)
-//    {
-//        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.Pid_CurrKi));
-//    }
-//    else if(R_or_RW == 1)
-//    {        
-//        LogOperation_ParameterChange( GlobalVariable.ConfigPara.Pid_CurrKi, *value );      
-//        GlobalVariable.ConfigPara.Pid_CurrKi =(unsigned short) *value;
-//        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-//    }
-//}
-
-/*************************************************
-  Function              : RWPIDKD()
-  Description           : PID KD 
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : tangtao
-  Revision				      : V0.0
-  Modified Date			    : 2021.10.08
-  Additional Comments	  : 
-*************************************************/
-//static void RWPIDKD(unsigned char R_or_RW, unsigned short *value)
-//{
-//    if(R_or_RW == 0)
-//    {
-//        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.Pid_CurrKd));
-//    }
-//    else if(R_or_RW == 1)
-//    {        
-//        LogOperation_ParameterChange( GlobalVariable.ConfigPara.Pid_CurrKd, *value );      
-//        GlobalVariable.ConfigPara.Pid_CurrKd =(unsigned short) *value;
-//        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-//    }
-//}
-
-/*************************************************
-  Function              : RWPIDSlope()
-  Description           : PID Slope 
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : tangtao
-  Revision				      : V0.0
-  Modified Date			    : 2021.10.08
-  Additional Comments	  : 
-*************************************************/
-//static void RWPIDSlope(unsigned char R_or_RW, unsigned short *value)
-//{
-//    if(R_or_RW == 0)
-//    {
-//        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.Pid_CurrSlope));
-//    }
-//    else if(R_or_RW == 1)
-//    {       
-//        LogOperation_ParameterChange( GlobalVariable.ConfigPara.Pid_CurrSlope, *value );      
-//        GlobalVariable.ConfigPara.Pid_CurrSlope =(unsigned short) *value;
-//        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-//    }
-//}
-
-
-
-static void RWHeatEnable(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.HeatEnable));
-    }
-    else if(R_or_RW == 1)
-    {        
-         if((*value == 0 )|| (*value == 1)) 
-         {
-		Log_AddParamChange(107, *value, GlobalVariable.ConfigPara.HeatEnable);
-        GlobalVariable.ConfigPara.HeatEnable =(unsigned short) *value;
-        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-         }
-    }
-}
-
-
-//static void RWMotorOverCurrentValueG1(unsigned char R_or_RW, unsigned short *value)
-//{
-//    if(R_or_RW == 0)
-//    {
-//        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.MotorOverCurrentValueG1));
-//    }
-//    else if(R_or_RW == 1)
-//    {      
-//        LogOperation_ParameterChange( GlobalVariable.ConfigPara.MotorOverCurrentValueG1, *value );      
-//        GlobalVariable.ConfigPara.MotorOverCurrentValueG1 =(unsigned short) *value;
-//        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-//    }
-//}
-
-//static void RWMotorOverCurrentTimeG1(unsigned char R_or_RW, unsigned short *value)
-//{
-//    if(R_or_RW == 0)
-//    {
-//        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.MotorOverCurrentTimeG1));
-//    }
-//    else if(R_or_RW == 1)
-//    {     
-//        LogOperation_ParameterChange( GlobalVariable.ConfigPara.MotorOverCurrentTimeG1, *value );      
-//        GlobalVariable.ConfigPara.MotorOverCurrentTimeG1 =(unsigned short) *value;
-//        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-//    }
-//}
-
-//static void RWMotorOverCurrentValueG2(unsigned char R_or_RW, unsigned short *value)
-//{
-//    if(R_or_RW == 0)
-//    {
-//        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.MotorOverCurrentValueG2));
-//    }
-//    else if(R_or_RW == 1)
-//    {        
-//        LogOperation_ParameterChange( GlobalVariable.ConfigPara.MotorOverCurrentValueG2, *value );      
-//        GlobalVariable.ConfigPara.MotorOverCurrentValueG2 =(unsigned short) *value;
-//        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-//    }
-//}
-
-//static void RWMotorOverCurrentTimeG2(unsigned char R_or_RW, unsigned short *value)
-//{
-//    if(R_or_RW == 0)
-//    {
-//        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.MotorOverCurrentTimeG2));
-//    }
-//    else if(R_or_RW == 1)
-//    {        
-//        LogOperation_ParameterChange( GlobalVariable.ConfigPara.MotorOverCurrentTimeG2, *value );      
-//        GlobalVariable.ConfigPara.MotorOverCurrentTimeG2 =(unsigned short) *value;
-//        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-//    }
-//}
-
-//static void RWMotorOverCurrentValueG3(unsigned char R_or_RW, unsigned short *value)
-//{
-//    if(R_or_RW == 0)
-//    {
-//        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.MotorOverCurrentValueG3));
-//    }
-//    else if(R_or_RW == 1)
-//    {        
-//        LogOperation_ParameterChange( GlobalVariable.ConfigPara.MotorOverCurrentValueG3, *value );      
-//        GlobalVariable.ConfigPara.MotorOverCurrentValueG3 =(unsigned short) *value;
-//        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-//    }
-//}
-
-//static void RWMotorOverCurrentTimeG3(unsigned char R_or_RW, unsigned short *value)
-//{
-//    if(R_or_RW == 0)
-//    {
-//        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.MotorOverCurrentTimeG3));
-//    }
-//    else if(R_or_RW == 1)
-//    {        
-//        LogOperation_ParameterChange( GlobalVariable.ConfigPara.MotorOverCurrentTimeG3, *value );      
-//        GlobalVariable.ConfigPara.MotorOverCurrentTimeG3 =(unsigned short) *value;
-//        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-//    }
-//}
-
-//static void RWMotorOverCurrentValueG4(unsigned char R_or_RW, unsigned short *value)
-//{
-//    if(R_or_RW == 0)
-//    {
-//        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.MotorOverCurrentValueG4));
-//    }
-//    else if(R_or_RW == 1)
-//    {        
-//        LogOperation_ParameterChange( GlobalVariable.ConfigPara.MotorOverCurrentValueG4, *value );      
-//        GlobalVariable.ConfigPara.MotorOverCurrentValueG4 =(unsigned short) *value;
-//        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-//    }
-//}
-
-//static void RWMotorOverCurrentTimeG4(unsigned char R_or_RW, unsigned short *value)
-//{
-//    if(R_or_RW == 0)
-//    {
-//        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.MotorOverCurrentTimeG4));
-//    }
-//    else if(R_or_RW == 1)
-//    {        
-//        LogOperation_ParameterChange( GlobalVariable.ConfigPara.MotorOverCurrentTimeG4, *value );      
-//        GlobalVariable.ConfigPara.MotorOverCurrentTimeG4 =(unsigned short) *value;
-//        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-//    }
-//}
-
-//static void RWMotorOverCurrentValueG5(unsigned char R_or_RW, unsigned short *value)
-//{
-//    if(R_or_RW == 0)
-//    {
-//        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.MotorOverCurrentValueG5));
-//    }
-//    else if(R_or_RW == 1)
-//    {        
-//        LogOperation_ParameterChange( GlobalVariable.ConfigPara.MotorOverCurrentValueG5, *value );      
-//        GlobalVariable.ConfigPara.MotorOverCurrentValueG5 =(unsigned short) *value;
-//        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-//    }
-//}
-
-//static void RWMotorOverCurrentTimeG5(unsigned char R_or_RW, unsigned short *value)
-//{
-//    if(R_or_RW == 0)
-//    {
-//        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.MotorOverCurrentTimeG5));
-//    }
-//    else if(R_or_RW == 1)
-//    {        
-//        LogOperation_ParameterChange( GlobalVariable.ConfigPara.MotorOverCurrentTimeG5, *value );      
-//        GlobalVariable.ConfigPara.MotorOverCurrentTimeG5 =(unsigned short) *value;
-//        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-//    }
-//}
-
-//static void RWMotorOverCurrentValueG6(unsigned char R_or_RW, unsigned short *value)
-//{
-//    if(R_or_RW == 0)
-//    {
-//        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.MotorOverCurrentValueG6));
-//    }
-//    else if(R_or_RW == 1)
-//    {        
-//        LogOperation_ParameterChange( GlobalVariable.ConfigPara.MotorOverCurrentValueG6, *value );      
-//        GlobalVariable.ConfigPara.MotorOverCurrentValueG6 =(unsigned short) *value;
-//        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-//    }
-//}
-
-//static void RWMotorOverCurrentTimeG6(unsigned char R_or_RW, unsigned short *value)
-//{
-//    if(R_or_RW == 0)
-//    {
-//        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.MotorOverCurrentTimeG6));
-//    }
-//    else if(R_or_RW == 1)
-//    {        
-//        LogOperation_ParameterChange( GlobalVariable.ConfigPara.MotorOverCurrentTimeG6, *value );      
-//        GlobalVariable.ConfigPara.MotorOverCurrentTimeG6 =(unsigned short) *value;
-//        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-//    }
-//}
-
-//static void RWMotorOverCurrentValueG7(unsigned char R_or_RW, unsigned short *value)
-//{
-//    if(R_or_RW == 0)
-//    {
-//        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.MotorOverCurrentValueG7));
-//    }
-//    else if(R_or_RW == 1)
-//    {        
-//        LogOperation_ParameterChange( GlobalVariable.ConfigPara.MotorOverCurrentValueG7, *value );      
-//        GlobalVariable.ConfigPara.MotorOverCurrentValueG7 =(unsigned short) *value;
-//        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-//    }
-//}
-
-//static void RWMotorOverCurrentTimeG7(unsigned char R_or_RW, unsigned short *value)
-//{
-//    if(R_or_RW == 0)
-//    {
-//        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.MotorOverCurrentTimeG7));
-//    }
-//    else if(R_or_RW == 1)
-//    {        
-//        LogOperation_ParameterChange( GlobalVariable.ConfigPara.MotorOverCurrentTimeG7, *value );      
-//        GlobalVariable.ConfigPara.MotorOverCurrentTimeG7 =(unsigned short) *value;
-//        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-//    }
-//}
-
-//static void RWMotorOverCurrentValueG8(unsigned char R_or_RW, unsigned short *value)
-//{
-//    if(R_or_RW == 0)
-//    {
-//        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.MotorOverCurrentValueG8));
-//    }
-//    else if(R_or_RW == 1)
-//    {        
-//        LogOperation_ParameterChange( GlobalVariable.ConfigPara.MotorOverCurrentValueG8, *value );      
-//        GlobalVariable.ConfigPara.MotorOverCurrentValueG8 =(unsigned short) *value;
-//        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-//    }
-//}
-
-//static void RWMotorOverCurrentTimeG8(unsigned char R_or_RW, unsigned short *value)
-//{
-//    if(R_or_RW == 0)
-//    {
-//        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.MotorOverCurrentTimeG8));
-//    }
-//    else if(R_or_RW == 1)
-//    {        
-//        LogOperation_ParameterChange( GlobalVariable.ConfigPara.MotorOverCurrentTimeG8, *value );      
-//        GlobalVariable.ConfigPara.MotorOverCurrentTimeG8 =(unsigned short) *value;
-//        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-//    }
-//}
-
-//static void RWMotorOverCurrentValueG9(unsigned char R_or_RW, unsigned short *value)
-//{
-//    if(R_or_RW == 0)
-//    {
-//        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.MotorOverCurrentValueG9));
-//    }
-//    else if(R_or_RW == 1)
-//    {        
-//        LogOperation_ParameterChange( GlobalVariable.ConfigPara.MotorOverCurrentValueG9, *value );      
-//        GlobalVariable.ConfigPara.MotorOverCurrentValueG9 =(unsigned short) *value;
-//        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-//    }
-//}
-
-//static void RWMotorOverCurrentTimeG9(unsigned char R_or_RW, unsigned short *value)
-//{
-//    if(R_or_RW == 0)
-//    {
-//        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.MotorOverCurrentTimeG9));
-//    }
-//    else if(R_or_RW == 1)
-//    {    
-//        LogOperation_ParameterChange( GlobalVariable.ConfigPara.MotorOverCurrentTimeG9, *value );      
-//        GlobalVariable.ConfigPara.MotorOverCurrentTimeG9 =(unsigned short) *value;
-//        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-//    }
-//}
-
-//static void RWMotorOverCurrentValueG10(unsigned char R_or_RW, unsigned short *value)
-//{
-//    if(R_or_RW == 0)
-//    {
-//        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.MotorOverCurrentValueG10));
-//    }
-//    else if(R_or_RW == 1)
-//    {        
-//        LogOperation_ParameterChange( GlobalVariable.ConfigPara.MotorOverCurrentValueG10, *value );      
-//        GlobalVariable.ConfigPara.MotorOverCurrentValueG10 =(unsigned short) *value;
-//        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-//    }
-//}
-
-//static void RWMotorOverCurrentTimeG10(unsigned char R_or_RW, unsigned short *value)
-//{
-//    if(R_or_RW == 0)
-//    {
-//        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.MotorOverCurrentTimeG10));
-//    }
-//    else if(R_or_RW == 1)
-//    {        
-//        LogOperation_ParameterChange( GlobalVariable.ConfigPara.MotorOverCurrentTimeG10, *value );      
-//        GlobalVariable.ConfigPara.MotorOverCurrentTimeG10 =(unsigned short) *value;
-//        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-//    }
-//}
-
-static void RWPowerMode(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = GlobalVariable.ConfigPara.PowerMode;
-    }
-    else if(R_or_RW == 1)
-    {
-        if(*value <= 3)
-        {
-        	Log_AddParamChange(82, *value, GlobalVariable.ConfigPara.PowerMode);
-            GlobalVariable.ConfigPara.PowerMode = *value;
-            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-        } 
-    }
-}
-
-static void RWCleaningDockAngle(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = GlobalVariable.ConfigPara.CleaningDockAngle;
-    }
-    else if(R_or_RW == 1)
-    {
-        if((*value >= 30) && (*value <= 150))
-        {
-            //LogOperation_ParameterChange( GlobalVariable.ConfigPara.CleaningDockAngle, *value );      
-			Log_AddParamChange(84, *value, GlobalVariable.ConfigPara.CleaningDockAngle);
-            GlobalVariable.ConfigPara.CleaningDockAngle = *value;
-            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-        } 
-    }
-}
-
-static void RWMotorOrientation(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = GlobalVariable.ConfigPara.MotorOrientation;
-    }
-    else if(R_or_RW == 1)
-    {
-			  if(*value == 0 || *value == 1)  //0£ºµç»ú³¯¶«£» 1£ºµç»ú³¯???
-        {
-            //LogOperation_ParameterChange( GlobalVariable.ConfigPara.MotorOrientation, *value );  
-			Log_AddParamChange(85, *value, GlobalVariable.ConfigPara.MotorOrientation);
-            GlobalVariable.ConfigPara.MotorOrientation = *value;
-            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-        } 
-    }
-}
-
-static void RWRS485Enable(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = GlobalVariable.ConfigPara.RS485Enable;
-    }
-    else if(R_or_RW == 1)
-    {
-        if((*value == 0 )|| (*value == 1)) 
-        {
-        //LogOperation_ParameterChange( GlobalVariable.ConfigPara.RS485Enable, *value ); 
-		Log_AddParamChange(88, *value, GlobalVariable.ConfigPara.RS485Enable);
-        GlobalVariable.ConfigPara.RS485Enable = *value;
-        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-        }
-    }
-}
-
-static void RWNoComEnable(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = GlobalVariable.ConfigPara.NoComEnable;
-    }
-    else if(R_or_RW == 1)
-    {
-          if((*value == 0 )|| (*value == 1)) 
-          {
-		Log_AddParamChange(98, *value, GlobalVariable.ConfigPara.NoComEnable);
-        GlobalVariable.ConfigPara.NoComEnable = *value;
-        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-          }
-    }
-}
-
-static void RWPVModuleWidth1(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.PVModuleWidth)+1);
-    }
-    else if(R_or_RW == 1)
-    {
-         *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.PVModuleWidth)+1) = *value;
-    }
-}
-static void RWPVModuleWidth2(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.PVModuleWidth));
-    }
-    else if(R_or_RW == 1)
-    {
-         *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.PVModuleWidth)) = *value;
-        if((GlobalVariable.ConfigParaBuffer.PVModuleWidth >= 0.2) && (GlobalVariable.ConfigParaBuffer.PVModuleWidth <= 20.0) )
-        {
-            Log_AddParamChange(89, *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.PVModuleWidth)+1), *(((unsigned short *)&GlobalVariable.ConfigPara.PVModuleWidth)+1));
-			Log_AddParamChange(90, *value, *(((unsigned short *)&GlobalVariable.ConfigPara.PVModuleWidth)));
-            GlobalVariable.ConfigPara.PVModuleWidth = GlobalVariable.ConfigParaBuffer.PVModuleWidth;
-            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-        }
-    }
-}
-static void RWPostSpacing1(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.PostSpacing)+1);
-    }
-    else if(R_or_RW == 1)
-    {
-        *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.PostSpacing)+1) = *value;
-    }
-} 
-
-static void RWPostSpacing2(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.PostSpacing));
-    }
-    else if(R_or_RW == 1)
-    {
-        *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.PostSpacing)) = *value;
-
-        if((GlobalVariable.ConfigParaBuffer.PostSpacing >= GlobalVariable.ConfigPara.PVModuleWidth)
-        && (GlobalVariable.ConfigParaBuffer.PostSpacing <= 50.0) )
-        {
-		    	Log_AddParamChange(91, *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.PostSpacing)+1), *(((unsigned short *)&GlobalVariable.ConfigPara.PostSpacing)+1));
-	            Log_AddParamChange(92, *value, *(((unsigned short *)&GlobalVariable.ConfigPara.PostSpacing)));
-                GlobalVariable.ConfigPara.PostSpacing = GlobalVariable.ConfigParaBuffer.PostSpacing;
-                GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-        }
-    }
-}
-static void RWTerrainSlope1(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.TerrainSlope)+1);
-    }
-    else if(R_or_RW == 1)
-    {
-    	
-        *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.TerrainSlope)+1) = *value;
-    }
-}
-static void RWTerrainSlope2(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.TerrainSlope));
-    }
-    else if(R_or_RW == 1)
-    {
-        *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.TerrainSlope)) = *value;
-        if((GlobalVariable.ConfigParaBuffer.TerrainSlope >= -45.0f) 
-            && (GlobalVariable.ConfigParaBuffer.TerrainSlope <= 45.0f))
-        {
-            Log_AddParamChange(93, *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.TerrainSlope)+1), *(((unsigned short *)&GlobalVariable.ConfigPara.TerrainSlope)+1));
-			Log_AddParamChange(94, *value, *(((unsigned short *)&GlobalVariable.ConfigPara.TerrainSlope)));
-            GlobalVariable.ConfigPara.TerrainSlope = GlobalVariable.ConfigParaBuffer.TerrainSlope;            
-            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-        }
-    }
-}
-
-
-static void RWUpWindSpeed(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.UpWindSpeed));
-    }
-
-//    else if(R_or_RW == 1)
-//    {
-//        if(*value <= 40)
-//        {
-//            //LogOperation_ParameterChange( GlobalVariable.ConfigPara.UpWindSpeed, *value );   
-//			Log_AddParamChange(99, *value, GlobalVariable.ConfigPara.UpWindSpeed);
-//            *(((unsigned short *)&GlobalVariable.ConfigPara.UpWindSpeed)) = *value;
-//            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-//        }
-//    }
-}
-static void RWUpStartTime(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.UpStartTime));
-    }
-//    else if(R_or_RW == 1)
-//    {
-//        if(*value <= 1000)
-//        {
-//            //LogOperation_ParameterChange( GlobalVariable.ConfigPara.UpStartTime, *value );  
-//			Log_AddParamChange(100, *value, GlobalVariable.ConfigPara.UpStartTime);
-//           *(((unsigned short *)&GlobalVariable.ConfigPara.UpStartTime)) = *value;
-//            GlobalVariable.WriteFlag.ConfigParaWrite = 1; 
-//        }
-//    }
-}
-static void RWLowWindSpeed(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.LowWindSpeed));
-    }
-//    else if(R_or_RW == 1)
-//    {
-//        if(*value <= (GlobalVariable.ConfigPara.UpWindSpeed - 1))
-//        {
-//            //LogOperation_ParameterChange( GlobalVariable.ConfigPara.LowWindSpeed, *value );      
-//			Log_AddParamChange(101, *value, GlobalVariable.ConfigPara.LowWindSpeed);
-//            *(((unsigned short *)&GlobalVariable.ConfigPara.LowWindSpeed)) = *value;
-//        }
-//        else
-//        {
-//            //LogOperation_ParameterChange( GlobalVariable.ConfigPara.LowWindSpeed, GlobalVariable.ConfigPara.UpWindSpeed - 1 ); 
-//			Log_AddParamChange(101, GlobalVariable.ConfigPara.UpWindSpeed - 1, GlobalVariable.ConfigPara.LowWindSpeed);
-//            *(((unsigned short *)&GlobalVariable.ConfigPara.LowWindSpeed)) = GlobalVariable.ConfigPara.UpWindSpeed - 1;
-//        }
-//        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-//    }
-}
-static void RWLowStopTime(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.LowStopTime));
-    }
-//    else if(R_or_RW == 1)
-//    {
-//        if(*value <= 1000)
-//        {
-//            //LogOperation_ParameterChange( GlobalVariable.ConfigPara.LowStopTime, *value );      
-//			Log_AddParamChange(102, *value, GlobalVariable.ConfigPara.LowStopTime);
-//            *(((unsigned short *)&GlobalVariable.ConfigPara.LowStopTime)) = *value;
-//            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-//        }
-//    }
-}
-
-static void RWESoftLimitAngle1(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.ESoftLimitAngle)+1);
-    }
-    else if(R_or_RW == 1)
-    {
-        *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.ESoftLimitAngle)+1) = *value;
-    }
-}
-static void RWESoftLimitAngle2(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.ESoftLimitAngle));
-    }
-    else if(R_or_RW == 1)
-    {   
-        *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.ESoftLimitAngle)) = *value;
-        if((GlobalVariable.ConfigParaBuffer.ESoftLimitAngle >  29.9f )
-            && (GlobalVariable.ConfigParaBuffer.ESoftLimitAngle  < 150.1f) )
-        {
-            Log_AddParamChange(103, *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.ESoftLimitAngle)+1), *(((unsigned short *)&GlobalVariable.ConfigPara.ESoftLimitAngle)+1));
-			Log_AddParamChange(104, *value, *(((unsigned short *)&GlobalVariable.ConfigPara.ESoftLimitAngle)));
-            GlobalVariable.ConfigPara.ESoftLimitAngle = GlobalVariable.ConfigParaBuffer.ESoftLimitAngle;
-            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-        }
-        
-    }
-}
-static void RWWSoftLimitAngle1(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.WSoftLimitAngle)+1);
-    }
-    else if(R_or_RW == 1)
-    {
-        *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.WSoftLimitAngle)+1) = *value;
-    }
-}
-static void RWWSoftLimitAngle2(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.WSoftLimitAngle));
-    }
-    else if(R_or_RW == 1)
-    {
-        *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.WSoftLimitAngle)) = *value;
-        if( (GlobalVariable.ConfigParaBuffer.WSoftLimitAngle > 29.9f)
-             && ( GlobalVariable.ConfigParaBuffer.WSoftLimitAngle < 150.1f))
-        {
-            Log_AddParamChange(105, *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.WSoftLimitAngle)+1), *(((unsigned short *)&GlobalVariable.ConfigPara.WSoftLimitAngle)+1));
-			Log_AddParamChange(106, *value, *(((unsigned short *)&GlobalVariable.ConfigPara.WSoftLimitAngle)));
-            GlobalVariable.ConfigPara.WSoftLimitAngle = GlobalVariable.ConfigParaBuffer.WSoftLimitAngle;
-            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-        }
-        
-    }
-}
-static void RWBackAngle(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.BackAngle));
-    }
-    else if(R_or_RW == 1)
-    {
-        if(*value >= 59.9 && *value <= 120.1)
-        {
-            //LogOperation_ParameterChange( GlobalVariable.ConfigPara.BackAngle, *value );    
-			Log_AddParamChange(111, *value, GlobalVariable.ConfigPara.BackAngle);
-            *(((unsigned short *)&GlobalVariable.ConfigPara.BackAngle)) = *value;
-            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-        }
-    }
-}
-static void RWEWindProtectionAngle(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.EWindProtectionAngle));
-    }
-    else if(R_or_RW == 1)
-    {
-        if(*value >= 60 && *value <= 90)
-        {
-           //LogOperation_ParameterChange( GlobalVariable.ConfigPara.EWindProtectionAngle, *value );   
-			Log_AddParamChange(112, *value, GlobalVariable.ConfigPara.EWindProtectionAngle);
-           *(((unsigned short *)&GlobalVariable.ConfigPara.EWindProtectionAngle)) = *value;
-            GlobalVariable.WriteFlag.ConfigParaWrite = 1; 
-        } 
-    }
-}
-static void RWWWindProtectionAngle(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.WWindProtectionAngle));
-    }
-    else if(R_or_RW == 1)
-    {
-        if(*value >= 90 && *value <= 120)
-        {
-            //LogOperation_ParameterChange( GlobalVariable.ConfigPara.WWindProtectionAngle, *value );     
-			Log_AddParamChange(113, *value, GlobalVariable.ConfigPara.WWindProtectionAngle);
-            *(((unsigned short *)&GlobalVariable.ConfigPara.WWindProtectionAngle)) = *value;
-            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-        }
-    }
-}
-/***********************************************************************************
- *º¯ÊýÃû£ºRWManufactor
- *???  Êö£º¶ÁÐ´LORA³§???²Î???
- *???  Èë£º¶ÁÐ´±êÖ¾Î»¡¢??
- *·µ»ØÖµ£º
- *???  ÆÚ£º2020-8-17
- **********************************************************************************/
-static void RWManufactor(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_manufactor));
-    }
-    else if(R_or_RW == 1)
-    {
-        //LogOperation_ParameterChange( GlobalVariable.ConfigPara.Lora_manufactor, *value );  
-		Log_AddParamChange(200, *value,  GlobalVariable.ConfigPara.Lora_manufactor);
-        *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_manufactor)) = *value;
-        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-    }
-}
-
-/***********************************************************************************
- *º¯ÊýÃû£ºRWDeviceIDH
- *???  Êö£º¶ÁÐ´LORAÄ£¿éID²ÎÊý
- *???  Èë£º¶ÁÐ´±êÖ¾Î»¡¢??
- *·µ»ØÖµ£º
- *???  ÆÚ£º2020-8-17
- **********************************************************************************/
-static void RWDeviceIDH(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_deviceIDH));
-    }
-    else if(R_or_RW == 1)
-    {
-        //LogOperation_ParameterChange( GlobalVariable.ConfigPara.Lora_deviceIDH, *value );  
-		Log_AddParamChange(201, *value, GlobalVariable.ConfigPara.Lora_deviceIDH);
-        *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_deviceIDH)) = *value;
-        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-        GlobalVariable.WriteFlag.LoraParaWrite = 1;
-    }
-}
-
-/***********************************************************************************
- *º¯ÊýÃû£ºRWDeviceIDL
- *???  Êö£º¶ÁÐ´LORAÄ£¿éID²ÎÊý
- *???  Èë£º¶ÁÐ´±êÖ¾Î»¡¢??
- *·µ»ØÖµ£º
- *???  ÆÚ£º2020-8-17
- **********************************************************************************/
-static void RWDeviceIDL(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_deviceIDL));
-    }
-    else if(R_or_RW == 1)
-    {
-        //LogOperation_ParameterChange( GlobalVariable.ConfigPara.Lora_deviceIDL, *value ); 
-		Log_AddParamChange(202, *value, GlobalVariable.ConfigPara.Lora_deviceIDL);
-        *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_deviceIDL)) = *value;
-        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-        GlobalVariable.WriteFlag.LoraParaWrite = 1;
-    }
-}
-
-/***********************************************************************************
- *º¯ÊýÃû£ºRWDeviceNetID
- *???  Êö£º¶ÁÐ´LORA net ID²ÎÊý
- *???  Èë£º¶ÁÐ´±êÖ¾Î»¡¢??
- *·µ»ØÖµ£º
- *???  ÆÚ£º2020-8-17
- **********************************************************************************/
-static void RWDeviceNetID(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_deviceNetID));
-    }
-    else if(R_or_RW == 1)
-    {
-        //LogOperation_ParameterChange( GlobalVariable.ConfigPara.Lora_deviceNetID, *value );  
-		Log_AddParamChange(203, *value, GlobalVariable.ConfigPara.Lora_deviceNetID);
-        *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_deviceNetID)) = *value;
-        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-        GlobalVariable.WriteFlag.LoraParaWrite = 1;
-    }
-}
-
-/***********************************************************************************
- *º¯ÊýÃû£ºRWYBTadd3
- *???  Êö£º¶ÁÐ´LORA Ò×°Û??? 03H ²ÎÊý
- *???  Èë£º¶ÁÐ´±êÖ¾Î»¡¢??
- *·µ»ØÖµ£º
- *???  ÆÚ£º2020-8-17
- **********************************************************************************/
-static void RWYBTadd3(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_ybt_add3));
-    }
-    else if(R_or_RW == 1)
-    {
-        //LogOperation_ParameterChange( GlobalVariable.ConfigPara.Lora_ybt_add3, *value );    
-		Log_AddParamChange(204, *value, GlobalVariable.ConfigPara.Lora_ybt_add3);
-        *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_ybt_add3)) = *value;
-        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-        GlobalVariable.WriteFlag.LoraParaWrite = 1;
-    }
-}
-
-/***********************************************************************************
- *º¯ÊýÃû£ºRWYBTadd4
- *???  Êö£º¶ÁÐ´LORA Ò×°Û??? 04H ²ÎÊý
- *???  Èë£º¶ÁÐ´±êÖ¾Î»¡¢??
- *·µ»ØÖµ£º
- *???  ÆÚ£º2020-8-17
- **********************************************************************************/
-static void RWYBTadd4(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_ybt_add4));
-    }
-    else if(R_or_RW == 1)
-    {
-        //LogOperation_ParameterChange( GlobalVariable.ConfigPara.Lora_ybt_add4, *value );    
-		Log_AddParamChange(205, *value, GlobalVariable.ConfigPara.Lora_ybt_add4);
-        *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_ybt_add4)) = *value;
-        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-        GlobalVariable.WriteFlag.LoraParaWrite = 1;
-    }
-}
-
-/***********************************************************************************
- *º¯ÊýÃû£ºRWYBTChannel
- *???  Êö£º¶ÁÐ´LORA Ò×°Û??? ÐÅµÀ ²ÎÊý
- *???  Èë£º¶ÁÐ´±êÖ¾Î»¡¢??
- *·µ»ØÖµ£º
- *???  ÆÚ£º2020-8-17
- **********************************************************************************/
-static void RWYBTChannel(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_ybt_channel));
-    }
-    else if(R_or_RW == 1)
-    {
-        //LogOperation_ParameterChange( GlobalVariable.ConfigPara.Lora_ybt_channel, *value );   
-		Log_AddParamChange(206, *value, GlobalVariable.ConfigPara.Lora_ybt_channel);
-        *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_ybt_channel)) = *value;
-        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-        GlobalVariable.WriteFlag.LoraParaWrite = 1;
-    }
-}
-
-/***********************************************************************************
- *º¯ÊýÃû£ºRWYBTadd6
- *???  Êö£º¶ÁÐ´LORA Ò×°Û??? 06H ²ÎÊý
- *???  Èë£º¶ÁÐ´±êÖ¾Î»¡¢??
- *·µ»ØÖµ£º
- *???  ÆÚ£º2020-8-17
- **********************************************************************************/
-static void RWYBTadd6(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_ybt_add6));
-    }
-    else if(R_or_RW == 1)
-    {
-        //LogOperation_ParameterChange( GlobalVariable.ConfigPara.Lora_ybt_add6, *value );  
-		Log_AddParamChange(207, *value, GlobalVariable.ConfigPara.Lora_ybt_add6);
-        *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_ybt_add6)) = *value;
-        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-        GlobalVariable.WriteFlag.LoraParaWrite = 1;
-    }
-}
-
-/***********************************************************************************
- *º¯ÊýÃû£ºRWYBTkeyH
- *???  Êö£º¶ÁÐ´LORA Ò×°Û??? ÃÜÔ¿ ²ÎÊý
- *???  Èë£º¶ÁÐ´±êÖ¾Î»¡¢??
- *·µ»ØÖµ£º
- *???  ÆÚ£º2020-8-17
- **********************************************************************************/
-static void RWYBTkeyH(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_ybt_keyH));
-    }
-    else if(R_or_RW == 1)
-    {
-        //LogOperation_ParameterChange( GlobalVariable.ConfigPara.Lora_ybt_keyH, *value );  
-		Log_AddParamChange(208, *value, GlobalVariable.ConfigPara.Lora_ybt_keyH);
-        *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_ybt_keyH)) = *value;
-        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-        GlobalVariable.WriteFlag.LoraParaWrite = 1;
-    }
-}
-
-/***********************************************************************************
- *º¯ÊýÃû£ºRWYBTkeyL
- *???  Êö£º¶ÁÐ´LORA Ò×°Û??? ÃÜÔ¿ ²ÎÊý
- *???  Èë£º¶ÁÐ´±êÖ¾Î»¡¢??
- *·µ»ØÖµ£º
- *???  ÆÚ£º2020-8-17
- **********************************************************************************/
-static void RWYBTkeyL(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_ybt_keyL));
-    }
-    else if(R_or_RW == 1)
-    {
-        //LogOperation_ParameterChange( GlobalVariable.ConfigPara.Lora_ybt_keyL, *value );    
-		Log_AddParamChange(209, *value, GlobalVariable.ConfigPara.Lora_ybt_keyL);
-        *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_ybt_keyL)) = *value;
-        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-        GlobalVariable.WriteFlag.LoraParaWrite = 1;
-    }
-}
-
-/***********************************************************************************
- *º¯ÊýÃû£ºRWJXYLbaudrate
- *???  Êö£º¶ÁÐ´LORA ½ÝÑ¸Ò×Áª ²¨ÌØ??? ²ÎÊý
- *???  Èë£º¶ÁÐ´±êÖ¾Î»¡¢??
- *·µ»ØÖµ£º
- *???  ÆÚ£º2020-8-17
- **********************************************************************************/
-static void RWJXYLbaudrate(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_jxyl_baudrate));
-    }
-    else if(R_or_RW == 1)
-    {
-        //LogOperation_ParameterChange( GlobalVariable.ConfigPara.Lora_jxyl_baudrate, *value );   
-		Log_AddParamChange(210, *value, GlobalVariable.ConfigPara.Lora_jxyl_baudrate);
-        *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_jxyl_baudrate)) = *value;
-        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-        GlobalVariable.WriteFlag.LoraParaWrite = 1;
-    }
-}
-
-/***********************************************************************************
- *º¯ÊýÃû£ºRWJXYLparity
- *???  Êö£º¶ÁÐ´LORA ½ÝÑ¸Ò×Áª Ð£Ñé ²ÎÊý
- *???  Èë£º¶ÁÐ´±êÖ¾Î»¡¢??
- *·µ»ØÖµ£º
- *???  ÆÚ£º2020-8-17
- **********************************************************************************/
-static void RWJXYLparity(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_jxyl_parity));
-    }
-    else if(R_or_RW == 1)
-    {
-        //LogOperation_ParameterChange( GlobalVariable.ConfigPara.Lora_jxyl_parity, *value );  
-		Log_AddParamChange(211, *value, GlobalVariable.ConfigPara.Lora_jxyl_parity);
-        *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_jxyl_parity)) = *value;
-        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-        GlobalVariable.WriteFlag.LoraParaWrite = 1;
-    }
-}
-
-/***********************************************************************************
- *º¯ÊýÃû£ºRWJXYLfq1
- *???  Êö£º¶ÁÐ´LORA ½ÝÑ¸Ò×Áª ÆµÂÊ ²ÎÊý
- *???  Èë£º¶ÁÐ´±êÖ¾Î»¡¢??
- *·µ»ØÖµ£º
- *???  ÆÚ£º2020-8-17
- **********************************************************************************/
-static void RWJXYLfq1(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_jxyl_fq1));
-    }
-    else if(R_or_RW == 1)
-    {
-        //LogOperation_ParameterChange( GlobalVariable.ConfigPara.Lora_jxyl_fq1, *value ); 
-		Log_AddParamChange(212, *value, GlobalVariable.ConfigPara.Lora_jxyl_fq1);
-        *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_jxyl_fq1)) = *value;
-        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-        GlobalVariable.WriteFlag.LoraParaWrite = 1;
-    }
-}
-
-/***********************************************************************************
- *º¯ÊýÃû£ºRWJXYLfq2
- *???  Êö£º¶ÁÐ´LORA ½ÝÑ¸Ò×Áª ÆµÂÊ ²ÎÊý
- *???  Èë£º¶ÁÐ´±êÖ¾Î»¡¢??
- *·µ»ØÖµ£º
- *???  ÆÚ£º2020-8-17
- **********************************************************************************/
-static void RWJXYLfq2(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_jxyl_fq2));
-    }
-    else if(R_or_RW == 1)
-    {
-        //LogOperation_ParameterChange( GlobalVariable.ConfigPara.Lora_jxyl_fq2, *value );     
-		Log_AddParamChange(213, *value, GlobalVariable.ConfigPara.Lora_jxyl_fq2);
-        *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_jxyl_fq2)) = *value;
-        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-        GlobalVariable.WriteFlag.LoraParaWrite = 1;
-    }
-}
-
-/***********************************************************************************
- *º¯ÊýÃû£ºRWJXYLfq3
- *???  Êö£º¶ÁÐ´LORA ½ÝÑ¸Ò×Áª ÆµÂÊ ²ÎÊý
- *???  Èë£º¶ÁÐ´±êÖ¾Î»¡¢??
- *·µ»ØÖµ£º
- *???  ÆÚ£º2020-8-17
- **********************************************************************************/
-static void RWJXYLfq3(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_jxyl_fq3));
-    }
-    else if(R_or_RW == 1)
-    {
-        //LogOperation_ParameterChange( GlobalVariable.ConfigPara.Lora_jxyl_fq3, *value ); 
-		Log_AddParamChange(214, *value, GlobalVariable.ConfigPara.Lora_jxyl_fq3);
-        *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_jxyl_fq3)) = *value;
-        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-        GlobalVariable.WriteFlag.LoraParaWrite = 1;
-    }
-}
-
-/***********************************************************************************
- *º¯ÊýÃû£ºRWJXYLfactor
- *???  Êö£º¶ÁÐ´LORA ½ÝÑ¸Ò×Áª À©???Òò??? ²ÎÊý
- *???  Èë£º¶ÁÐ´±êÖ¾Î»¡¢??
- *·µ»ØÖµ£º
- *???  ÆÚ£º2020-8-17
- **********************************************************************************/
-static void RWJXYLfactor(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_jxyl_factor));
-    }
-    else if(R_or_RW == 1)
-    {
-        //LogOperation_ParameterChange( GlobalVariable.ConfigPara.Lora_jxyl_factor, *value ); 
-		Log_AddParamChange(215, *value, GlobalVariable.ConfigPara.Lora_jxyl_factor);
-        *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_jxyl_factor)) = *value;
-        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-        GlobalVariable.WriteFlag.LoraParaWrite = 1;
-    }
-}
- 
-/***********************************************************************************
- *º¯ÊýÃû£ºRWJXYLmode
- *???  Êö£º¶ÁÐ´LORA ½ÝÑ¸Ò×Áª Ä£Ê½ ²ÎÊý
- *???  Èë£º¶ÁÐ´±êÖ¾Î»¡¢??
- *·µ»ØÖµ£º
- *???  ÆÚ£º2020-8-17
- **********************************************************************************/
-static void RWJXYLmode(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_jxyl_mode));
-    }
-    else if(R_or_RW == 1)
-    {
-        //LogOperation_ParameterChange( GlobalVariable.ConfigPara.Lora_jxyl_mode, *value );   
-		Log_AddParamChange(216, *value, GlobalVariable.ConfigPara.Lora_jxyl_mode);
-        *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_jxyl_mode)) = *value;
-        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-        GlobalVariable.WriteFlag.LoraParaWrite = 1;
-    }
-}
-
-/***********************************************************************************
- *º¯ÊýÃû£ºRWJXYLmode
- *???  Êö£º¶ÁÐ´LORA ½ÝÑ¸Ò×Áª À©???´ø??? ²ÎÊý
- *???  Èë£º¶ÁÐ´±êÖ¾Î»¡¢??
- *·µ»ØÖµ£º
- *???  ÆÚ£º2020-8-17
- **********************************************************************************/
-static void RWJXYLbw(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_jxyl_bw));
-    }
-    else if(R_or_RW == 1)
-    {
-        //LogOperation_ParameterChange( GlobalVariable.ConfigPara.Lora_jxyl_bw, *value ); 
-		Log_AddParamChange(217, *value, GlobalVariable.ConfigPara.Lora_jxyl_bw);
-        *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_jxyl_bw)) = *value;
-        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-        GlobalVariable.WriteFlag.LoraParaWrite = 1;
-    }
-}
-
-/***********************************************************************************
- *º¯ÊýÃû£ºRWJXYLpower
- *???  Êö£º¶ÁÐ´LORA ½ÝÑ¸Ò×Áª ¹¦ÂÊ ²ÎÊý
- *???  Èë£º¶ÁÐ´±êÖ¾Î»¡¢??
- *·µ»ØÖµ£º
- *???  ÆÚ£º2020-8-17
- **********************************************************************************/
-static void RWJXYLpower(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_jxyl_power));
-    }
-    else if(R_or_RW == 1)
-    {
-        //LogOperation_ParameterChange( GlobalVariable.ConfigPara.Lora_jxyl_power, *value ); 
-		Log_AddParamChange(218, *value, GlobalVariable.ConfigPara.Lora_jxyl_power);
-        *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_jxyl_power)) = *value;
-        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-        GlobalVariable.WriteFlag.LoraParaWrite = 1;
-    }
-}
-
-/***********************************************************************************
- *º¯ÊýÃû£ºRWTerrainSlopeDown
- *???  Êö£º
- *???  Èë£º¶ÁÐ´±êÖ¾Î»¡¢??
- *·µ»ØÖµ£º
- *???  ÆÚ£º2021-8-17
- **********************************************************************************/
-static void RWTerrainSlopeEvening(unsigned char R_or_RW, unsigned short *value)
-{
-   if(R_or_RW == 0)
-    {
-        *value = (signed short)(GlobalVariable.ConfigPara.TerrainSlopeEvening*10);
-    }
-    else if(R_or_RW == 1)
-    {     
-        GlobalVariable.ConfigParaBuffer.TerrainSlopeEvening = ((float)((signed short)(*value)))/10.0f;
-		if(GlobalVariable.ConfigParaBuffer.TerrainSlopeEvening >= -45.0f 
-            && GlobalVariable.ConfigParaBuffer.TerrainSlopeEvening <= 45.0f)
-        {
-			Log_AddParamChange(95, *value, (signed short)(GlobalVariable.ConfigPara.TerrainSlopeEvening*10));
-            GlobalVariable.ConfigPara.TerrainSlopeEvening = GlobalVariable.ConfigParaBuffer.TerrainSlopeEvening;           
-            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-        }
-		else
-		{
-			  Log_AddParamChange(95, (signed short)GlobalVariable.ConfigPara.TerrainSlope, (signed short)(GlobalVariable.ConfigPara.TerrainSlopeEvening*10));
-			  GlobalVariable.ConfigPara.TerrainSlopeEvening = GlobalVariable.ConfigPara.TerrainSlope;
-			  GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-		}
-    }
-}
-
-/*************************************************
-  Function              : RWBatteryLowTriggerValue()
-  Description           : Battery Low Trigger Value  
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.05.13
-  Additional Comments	  : [1800,2940],¶ÔÓ¦???ÉèµçÑ¹·¶Î§[18V,29.4V]
-*************************************************/
-static void RWBatteryLowTriggerValue(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = GlobalVariable.ConfigPara.Battery_Low_TriggerValue;
-    }
-    else if(R_or_RW == 1)
-    {    
-        if(*value >= 1800 && *value <= 2940)
-		{					 
-           //LogOperation_ParameterChange( GlobalVariable.ConfigPara.Battery_Low_TriggerValue, *value );   
-		   Log_AddParamChange(REG_BATTERY_LOW_TRIGGER_VALUE, *value, GlobalVariable.ConfigPara.Battery_Low_TriggerValue);
-           GlobalVariable.ConfigPara.Battery_Low_TriggerValue = (unsigned short) *value;
-           GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-		}
-    }
-}
-
-/*************************************************
-  Function              : RWBatteryLowRecoveryValue()
-  Description           : Battery Low Recovery Value  
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.05.13
-  Additional Comments	  : [1800,2940],¶ÔÓ¦???ÉèµçÑ¹·¶Î§[18V,29.4V]
-*************************************************/
-static void RWBatteryLowRecoveryValue(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = GlobalVariable.ConfigPara.Battery_Low_RecoveryValue;
-    }
-    else if(R_or_RW == 1)
-    {        
-		if(*value >= 1800 && *value <= 2940)
-		{	
-           //LogOperation_ParameterChange( GlobalVariable.ConfigPara.Battery_Low_RecoveryValue, *value );   
-		   Log_AddParamChange(REG_BATTERY_LOW_RECORERY_VALUE, *value, GlobalVariable.ConfigPara.Battery_Low_RecoveryValue);
-           GlobalVariable.ConfigPara.Battery_Low_RecoveryValue = (unsigned short) *value;
-           GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-		}
-    }
-}
-
-/*************************************************
-  Function              : RWBatteryEmptyTriggerValue()
-  Description           : Battery Empty Trigger Value  
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.05.13
-  Additional Comments	  : [1800,2940],¶ÔÓ¦???ÉèµçÑ¹·¶Î§[18V,29.4V] 
-*************************************************/
-static void RWBatteryEmptyTriggerValue(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = GlobalVariable.ConfigPara.Battery_Empty_TriggerValue;
-    }
-    else if(R_or_RW == 1)
-    {      
-        if(*value >= 1800 && *value <= 2940)
-		{					
-           //LogOperation_ParameterChange( GlobalVariable.ConfigPara.Battery_Empty_TriggerValue, *value );     
-		   Log_AddParamChange(REG_BATTERY_EMPTY_TRIGGER_VALUE, *value, GlobalVariable.ConfigPara.Battery_Empty_TriggerValue);
-           GlobalVariable.ConfigPara.Battery_Empty_TriggerValue = (unsigned short) *value;
-           GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-		}
-    }
-}
-
-/*************************************************
-  Function              : RWBatteryEmptyRecoveryValue()
-  Description           : Battery Empty Recovery Value  
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.05.13
-  Additional Comments	  : [1800,2940],¶ÔÓ¦???ÉèµçÑ¹·¶Î§[18V,29.4V]
-*************************************************/
-static void RWBatteryEmptyRecoveryValue(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = GlobalVariable.ConfigPara.Battery_Empty_RecoveryValue;
-    }
-    else if(R_or_RW == 1)
-    {        
-		if(*value >= 1800 && *value <= 2940)
-		{
-          //LogOperation_ParameterChange( GlobalVariable.ConfigPara.Battery_Empty_RecoveryValue, *value );     
-		  Log_AddParamChange(REG_BATTERY_EMPTY_RECORERY_VALUE, *value, GlobalVariable.ConfigPara.Battery_Empty_RecoveryValue);
-          GlobalVariable.ConfigPara.Battery_Empty_RecoveryValue = (unsigned short) *value;
-          GlobalVariable.WriteFlag.ConfigParaWrite = 1;
- GlobalVariable.SpecialCheck.MasterSetBatErrParaToSlaveFlag = 1;
-            
-		}
-    }
-}
-
-/*************************************************
-  Function              : RResetCount()
-  Description           : Reset Count 
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : tangtao
-  Revision				      : V0.0
-  Modified Date			    : 2021.10.08
-  Additional Comments	  : 
-*************************************************/
-static void RResetCount1(unsigned char R_or_RW, unsigned short *value)
-{
-
-
-
-
-
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.Log.LogReset.ResetCount)+1);
-    }
-}
-static void RResetCount2(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.Log.LogReset.ResetCount));
-    }
-}
-
-/*************************************************
-  Function              : RWLogEnable()
-  Description           : log enable 
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : tangtao
-  Revision				      : V0.0
-  Modified Date			    : 2021.10.08
-  Additional Comments	  : 
-*************************************************/
-static void RWLogEnable(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = GlobalVariable.ConfigPara.LogEnable;
-    }
-    else if(R_or_RW == 1)
-    {        
-        //LogOperation_ParameterChange( GlobalVariable.ConfigPara.LogEnable, *value );      
-		Log_AddParamChange(41, *value, GlobalVariable.ConfigPara.LogEnable);
-        GlobalVariable.ConfigPara.LogEnable = (unsigned short) *value;
-        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-    }
-}
-
-/*************************************************
-  Function              : RWPIDTarget()
-  Description           : pid target 
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : tangtao
-  Revision				      : V0.0
-  Modified Date			    : 2021.10.08
-  Additional Comments	  : 
-*************************************************/
-//static void RWPIDTarget(unsigned char R_or_RW, unsigned short *value)
-//{
-//    if(R_or_RW == 0)
-//    {
-//        *value = GlobalVariable.ConfigPara.Pid_Target;
-//    }
-//    else if(R_or_RW == 1)
-//    {        
-//        LogOperation_ParameterChange( GlobalVariable.ConfigPara.Pid_Target, *value );      
-//        GlobalVariable.ConfigPara.Pid_Target = (unsigned short) *value;
-//        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-//    }
-//}
-
-/*************************************************
-  Function              : RWAskOperationNo()
-  Description           : log Ask Operation No 
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : tangtao
-  Revision				      : V0.0
-  Modified Date			    : 2021.10.08
-  Additional Comments	  : 
-*************************************************/
-static void RWAskOperationNo(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = GlobalVariable.Log.Ask_OperationNo ;
-    }
-    else if(R_or_RW == 1)
-    {        
-        if( *value <= 100 )
-        {
-        	//Log_AddParamChange(10000 + 5, *value, GlobalVariable.Log.Ask_OperationNo);
-            GlobalVariable.Log.Ask_OperationNo = (unsigned short) *value;
-        }
-    }
-}
-/*************************************************
-  Function              : 
-  Description           : from which num to read log
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : longcd
-  Revision				      : 
-  Modified Date			    : 
-  Additional Comments	  : 
-*************************************************/
-static void RWLogReadNum(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = GlobalVariable.Log.read_num ;
-    }
-    else if(R_or_RW == 1)
-    {        
-    	GlobalVariable.Log.read_num = *value;
-		Log_ReadToBuf(GlobalVariable.Log.read_num);
-    }
-}
-
-/*************************************************
-  Function              : RWLogOperationSum()
-  Description           : log Operation Sum
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : tangtao
-  Revision				      : V0.0
-  Modified Date			    : 2021.10.08
-  Additional Comments	  : 
-*************************************************/
-static void RWLogOperationSum(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = (GlobalVariable.Log.LogOperation.Sum > 100) ? 100 : GlobalVariable.Log.LogOperation.Sum ;
-    }
-}
-
-/*************************************************
-  Function              : RWAskWarningNo()
-  Description           : log Ask Warning No 
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : tangtao
-  Revision				      : V0.0
-  Modified Date			    : 2021.10.08
-  Additional Comments	  : 
-*************************************************/
-static void RWAskWarningNo(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = GlobalVariable.Log.Ask_WarningNo ;
-    }
-    else if(R_or_RW == 1)
-    {        
-        if( *value <= 100 )
-        {
-            GlobalVariable.Log.Ask_WarningNo = (unsigned short) *value;
-        }
-    }
-}
-
-/*************************************************
-  Function              : RWLogWarningSum()
-  Description           : log Warning Sum
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : tangtao
-  Revision				      : V0.0
-  Modified Date			    : 2021.10.08
-  Additional Comments	  : 
-*************************************************/
-static void RWLogWarningSum(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = (GlobalVariable.Log.LogWarning.Sum > 100) ? 100 : GlobalVariable.Log.LogWarning.Sum;
-    }
-}
-
-/*************************************************
-  Function              : RWInstallPostion()
-  Description           : RWInstallPostion
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2022.08.23
-  Additional Comments	  : 
-*************************************************/
-//static void RWInstallPostion(unsigned char R_or_RW, unsigned short *value)
-//{
-
-//}
-/*************************************************
-  Function              : RWSouthNorthShiftAngle()
-  Description           : RWSouthNorthShiftAngle
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2022.08.25
-  Additional Comments	  : 
-*************************************************/
-static void RWSouthNorthShiftAngle(unsigned char R_or_RW, unsigned short *value)
-{
-    short temp;
-	
-    if(R_or_RW == 0)
-    {
-        *value = *((( short *)&GlobalVariable.ConfigPara.SouthNorthShiftAngle));
-    }
-    else if(R_or_RW == 1)
-    {
-			temp = (signed short )(*value);
-		if( abs(temp) <= MAXABS_SOUTHNORTHSHIFTANGLE_PLUS100 )
-       {
-            //LogOperation_ParameterChange( GlobalVariable.ConfigPara.SouthNorthShiftAngle, *value );  
-            Log_AddParamChange(413, *value, *((( short *)&GlobalVariable.ConfigPara.SouthNorthShiftAngle)));
-            GlobalVariable.ConfigPara.SouthNorthShiftAngle = temp;
-            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-        }
-    }
-}
-/*************************************************
-  Function              : RWFacingWindStopFunction_Enable()
-  Description           : RWFacingWindStopFunction_Enable
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2022.08.30
-  Additional Comments	  : 
-*************************************************/
-static void RWFacingWindStopFunction_Enable(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = GlobalVariable.ConfigPara.FacingWindStopFunction_Enable;
-    }
-    else if(R_or_RW == 1)
-    {        
-        //LogOperation_ParameterChange( GlobalVariable.ConfigPara.FacingWindStopFunction_Enable, *value );      
-		Log_AddParamChange(116, *value, GlobalVariable.ConfigPara.FacingWindStopFunction_Enable);
-        GlobalVariable.ConfigPara.FacingWindStopFunction_Enable = (unsigned short) *value;
-        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-    }
-}
-
-/*************************************************
-  Function              : RWYBTLoraParaEnable(unsigned char R_or_RW, unsigned short *value)
-  Description           : RWYBTLoraParaEnable
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.03.08
-  Additional Comments	  : ÊÕµ½ÉÏÎ»»úÏÂ·¢µÄÌØÊâ×Ö???£º0x6A6A;MCU¿ªÊ¼???È¡Lora²ÎÊý
-                          MCU¶ÁÈ¡³É¹¦ºó£¬¸Ã¼Ä´æÆ÷??????¸ÄÎª0x7A7A;
-                          ÉÏÎ»»ú???È¡???0x7A7Aºó£¬ÔÙÈ¥¼Ä´æ???201-209¶ÁÈ¡Lora²ÎÊý
-*************************************************/
-static void RWYBTLoraParaEnable(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = GlobalVariable.SpecialCheck.ReadYBTLoraParaEnable;
-    }
-    else if(R_or_RW == 1)
-    {              
-        GlobalVariable.SpecialCheck.ReadYBTLoraParaEnable = (unsigned short) *value;
-    }
-}
-
-
-/*************************************************
-  Function              : RWEFacingWindAngle(unsigned char R_or_RW, unsigned short *value)
-  Description           : RWEFacingWindAngle
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.01.09
-  Additional Comments	  : ¶«Ó­·çÍ£¿¿???¶È£¬¿ÉÉè·¶Î§´óÓÚµÈ???30???;
-*************************************************/
-static void RWEFacingWindAngle(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.EFacingWindAngle));
-    }
-    else if(R_or_RW == 1)
-    {
-        if(*value >= 30 &&  *value <= 150)
-        {
-            //LogOperation_ParameterChange( GlobalVariable.ConfigPara.EFacingWindAngle, *value );   
-			Log_AddParamChange(117, *value, GlobalVariable.ConfigPara.EFacingWindAngle);
-           *(((unsigned short *)&GlobalVariable.ConfigPara.EFacingWindAngle)) = *value;
-            GlobalVariable.WriteFlag.ConfigParaWrite = 1; 
-        } 
-    }
-}
-/*************************************************
-  Function              : RWWFacingWindAngle(unsigned char R_or_RW, unsigned short *value)
-  Description           : RWWFacingWindAngle
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.01.09
-  Additional Comments	  : Î÷Ó­·çÍ£¿¿???¶È£¬¿ÉÉè·¶Î§Ð¡ÓÚµÈ???150???;
-*************************************************/
-static void RWWFacingWindAngle(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.WFacingWindAngle));
-    }
-    else if(R_or_RW == 1)
-    {
-        if(*value >= 30 &&  *value <= 150)
-        {
-            //LogOperation_ParameterChange( GlobalVariable.ConfigPara.WFacingWindAngle, *value );      
-            Log_AddParamChange(118, *value, GlobalVariable.ConfigPara.WFacingWindAngle);
-           *(((unsigned short *)&GlobalVariable.ConfigPara.WFacingWindAngle)) = *value;
-            GlobalVariable.WriteFlag.ConfigParaWrite = 1; 
-        } 
-    }
-}
-/*************************************************
-  Function              : RWBatteryHighTemperatureProtection_TriggerValue()
-  Description           : RWBatteryHighTemperatureProtection_TriggerValue
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.05.03
-  Additional Comments	  : porting by longcd
-*************************************************/
-static void RWBatteryHighTemperatureProtection_TriggerValue(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = GlobalVariable.ConfigPara.BatteryHighTempProtectTriggerValue;
-    }
-    else if(R_or_RW == 1)
-    {        
-       // LogOperation_ParameterChange( GlobalVariable.ConfigPara.BatteryHighTempProtectTriggerValue, *value );  
-       if( (*value >= 25) && (*value <= 80) )	
-       {				 
-       		Log_AddParamChange(REG_BATTERY_HIGHTEMPPRO_TRIGGER_VALUE, *value, GlobalVariable.ConfigPara.BatteryHighTempProtectTriggerValue);
-           GlobalVariable.ConfigPara.BatteryHighTempProtectTriggerValue = (unsigned short) *value;
-           GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-	   }
-    }
-}
-/*************************************************
-  Function              : RWBatteryHighTemperatureProtection_ExitValue()
-  Description           : RWBatteryHighTemperatureProtection_ExitValue
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.05.03
-  Additional Comments	  : porting by longcd
-*************************************************/
-static void RWBatteryHighTemperatureProtection_ExitValue(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = GlobalVariable.ConfigPara.BatteryHighTempProtectExitValue;
-    }
-    else if(R_or_RW == 1)
-    {        
-       // LogOperation_ParameterChange( GlobalVariable.ConfigPara.BatteryHighTempProtectTriggerValue, *value );    
-       if( (*value >= 25) && (*value <= 80) )	
-       {			
-       		Log_AddParamChange(REG_BATTERY_HIGHTEMPPRO_EXIT_VALUE, *value, GlobalVariable.ConfigPara.BatteryHighTempProtectExitValue);
-          GlobalVariable.ConfigPara.BatteryHighTempProtectExitValue = (unsigned short) *value;
-          GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-	   }
-    }
-}
-
-static void RWStopAllSlaveMotor(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = GlobalVariable.ConfigPara.StopSlaveMotorFlag;
-    }
-    else if(R_or_RW == 1)
-    {        
-       // LogOperation_ParameterChange( GlobalVariable.ConfigPara.BatteryHighTempProtectTriggerValue, *value );    
-       //§Õ????????0????1????§Õ????????????????????????§Õ??
-       if( (*value == 0x01) || (*value == 0x00) )
-       {
-           if(*value != GlobalVariable.ConfigPara.StopSlaveMotorFlag)
-           {
-               Log_AddParamChange(REG_STOP_ALL_SLAVEMOTOR, *value, GlobalVariable.ConfigPara.StopSlaveMotorFlag);
-               GlobalVariable.ConfigPara.StopSlaveMotorFlag = (unsigned short) *value;
-               GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-           }
-       }
-    }
-}
-
-/*************************************************
-  Function              : RWBatSocLowRunBackWaitTime()
-  Description           : RWBatSocLowRunBackWaitTime
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.08.11
-  Additional Comments	  : BatSocLow±¨???Ê±£¬·µ»Ø´ó·ç±£»¤Î»µÄµÈ´ýÊ±???
-*************************************************/
-static void RWBatSocLowRunBackWaitTime(unsigned char R_or_RW, unsigned short *value)
-{
-	
-    if(R_or_RW == 0)
-    {
-        *value = GlobalVariable.ConfigPara.BatSocLowRunBackWaitTime;
-    }
-    else if(R_or_RW == 1)
-    {        
-       // LogOperation_ParameterChange( GlobalVariable.ConfigPara.BatteryHighTempProtectTriggerValue, *value );    
-
-	   if( (*value >= 0) && (*value <= 120) )	
-       {			
-          Log_AddParamChange(REG_BATSOCLOWRUNBACK_WAITTIME , *value, GlobalVariable.ConfigPara.BatSocLowRunBackWaitTime);								 				 
-          GlobalVariable.ConfigPara.BatSocLowRunBackWaitTime = (unsigned short) *value;
-          GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-	   }
-    }
-}
-
-
-
-/*******************************************************
-	commucation test
-*******************************************************/
-static void RCommuTestCrcErr(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = CommuTest_GetOne(0);
-    }
-}
-
-static void RCommuTestCrcOk(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = CommuTest_GetOne(1);
-    }
-}
-
-static void RCommuTestReply(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = CommuTest_GetOne(2);
-    }
-}
-
-static void RWCommuTestClearAll(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = 0;
-    }
-	else if(R_or_RW == 1)
-	{
-		if(0xaa00 == *value)
-		{
-			CommuTest_ClearAll();
-		}
-	}
-}
- 
-
-
-/*************************************************
-  Function              : RWYBTLoraParaEnable(unsigned char R_or_RW, unsigned short *value)
-  Description           : RWYBTLoraParaEnable
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Liuchengrun
-  Revision				      : V0.0
-  Modified Date			    : 2024.03.05
-  Additional Comments	  : ÊÕµ½ÉÏÎ»»úÏÂ·¢µÄÌØÊâ×Ö???£º0x6B6B;MCU¿ªÊ¼???È¡Bluetooth²ÎÊý
-                          MCU¶ÁÈ¡³É¹¦ºó£¬¸Ã¼Ä´æÆ÷????¸ÄÎª0x7B7B;Ê§°Ü??3B3B;
-                          ÉÏÎ»»ú???È¡??0x7B7Bºó£¬ÔÙÈ¥¼Ä´æ??220-230¶ÁÈ¡Bluetooth²ÎÊý
-*************************************************/
-static void RWYBTBluetoothParaEnable(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = GlobalVariable.SpecialCheck.ReadYBTBlueoothParaEnable;
-    }
-    else if(R_or_RW == 1)
-    {              
-        GlobalVariable.SpecialCheck.ReadYBTBlueoothParaEnable = (unsigned short) *value;
-    }
-}
-
-static void RBluetoothMACPara1(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = GlobalVariable.ConfigPara.Bluetooth_YBT_add1;
-    }
-}
-static void RBluetoothMACPara2(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = GlobalVariable.ConfigPara.Bluetooth_YBT_add2;
-    }
-}
-static void RBluetoothMACPara3(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = GlobalVariable.ConfigPara.Bluetooth_YBT_add3;
-    }
-}
-
-static void RBluetoothMACPara4(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = GlobalVariable.ConfigPara.Bluetooth_YBT_add4;
-    }
-}
-static void RBluetoothMACPara5(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = GlobalVariable.ConfigPara.Bluetooth_YBT_add5;
-    }
-}
-static void RBluetoothMACPara6(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = GlobalVariable.ConfigPara.Bluetooth_YBT_add6;
-    }
-}
-
-/*************************************************
-  Function              : RWLostComm_BatsocLow_TargetAngle()
-  Description           : RWLostComm_BatsocLow_TargetAngle
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : QuXiaoWen
-  Revision				      : V0.0
-  Modified Date			    : 2024.08.14
-  Additional Comments	  : ¶ÁÐ´µÍµçÁ¿»òÕßÊ§ÁªÊ±µÄ±£»¤½Ç¶È
-*************************************************/
-static void RWLostComm_BatsocLow_TargetAngle(unsigned char R_or_RW, unsigned short *value)
-{
-	
-    if(R_or_RW == 0)
-    {
-        *value = GlobalVariable.ConfigPara.LostComm_BatsocLow_TargetAngle;
-    }
-    else if(R_or_RW == 1)
-    {        
-       // LogOperation_ParameterChange( GlobalVariable.ConfigPara.BatteryHighTempProtectTriggerValue, *value );    
-
-	   if(*value >= 30 &&  *value <= 150)
-       {			
-          Log_AddParamChange(REG_LOSTCOMM_BATSOCLOW_TARGET_ANGLE, *value, GlobalVariable.ConfigPara.LostComm_BatsocLow_TargetAngle);								 				 
-          GlobalVariable.ConfigPara.LostComm_BatsocLow_TargetAngle = (unsigned short) *value;
-          GlobalVariable.WriteFlag.ConfigParaWrite = 1;//
-	   }
-    }
-}
-
-
-
-
-
-/*************************************************
-crcÍ³??????Êý
-*************************************************/
-
-static void RCommuTest_RecvID_Tracker_CrcOK(unsigned char R_or_RW, unsigned short *value)
-{	
-    if(R_or_RW == 0)
-    {
-        *value =  CommuTest_GetOne(3);
-    }
-}
-/*************************************************
-crcÍ³??????Êý
-*************************************************/
-
-static void RCommuTest_RecvID_Tracker_Reply(unsigned char R_or_RW, unsigned short *value)
-{	
-    if(R_or_RW == 0)
-    {
-        *value = CommuTest_GetOne(4);
-    }
-}
-/*************************************************
-crcÍ³??????Êý
-*************************************************/
-
-static void RCommuTest_RecvID_Tracker_CrcErr(unsigned char R_or_RW, unsigned short *value)
-{	
-    if(R_or_RW == 0)
-    {
-        *value = CommuTest_GetOne(5);
-    }
-}
-/*************************************************
-crcÍ³??????Êý
-*************************************************/
-
-static void RCommuTest_RecvID_00_CrcOK(unsigned char R_or_RW, unsigned short *value)
-{	
-    if(R_or_RW == 0)
-    {
-        *value = CommuTest_GetOne(6);
-    }
-}
-/*************************************************
-crcÍ³??????Êý
-*************************************************/
-
-static void RCommuTest_RecvID_00_CrcErr(unsigned char R_or_RW, unsigned short *value)
-{	
-    if(R_or_RW == 0)
-    {
-        *value = CommuTest_GetOne(7);
-    }
-}
-
-
-
-
-
-
-
-static void ReadUIRightPanelMasterSlaveAlarmsHighPart2(unsigned char R_or_RW, unsigned short *value )
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.UIRightPanelMasterSlaveAlarms[0])+1);
-    }
-}
-static void ReadUIRightPanelMasterSlaveAlarmsLowPart2(unsigned char R_or_RW, unsigned short *value )
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.UIRightPanelMasterSlaveAlarms[0]));
-    }
-}
-
-static void ReadUIRightPanelMasterSlaveAlarmsHighPart3(unsigned char R_or_RW, unsigned short *value )
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.UIRightPanelMasterSlaveAlarms[1])+1);
-    }
-}
-static void ReadUIRightPanelMasterSlaveAlarmsLowPart3(unsigned char R_or_RW, unsigned short *value )
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.UIRightPanelMasterSlaveAlarms[1]));
-    }
-}
-
-
-
-static void RWWarningAndFaultOfSlave_1(unsigned char R_or_RW, unsigned short *value )
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.PowerAndCommonSlaveAlarmsUpdate[0]));
-       // *value = 0xFFFF;
-    }
-}
-
-
-static void RWWarningAndFaultOfSlave_2(unsigned char R_or_RW, unsigned short *value )
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.PowerAndCommonSlaveAlarmsUpdate[1]));
-    }
-}
-
-static void RWWarningAndFaultOfSlave_3(unsigned char R_or_RW, unsigned short *value )
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.PowerAndCommonSlaveAlarmsUpdate[2]));
-    }
-}
-static void RWWarningAndFaultOfSlave_4(unsigned char R_or_RW, unsigned short *value )
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.PowerAndCommonSlaveAlarmsUpdate[3]));
-    }
-}
-
-static void RWWarningAndFaultOfSlave_5(unsigned char R_or_RW, unsigned short *value )
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.PowerAndCommonSlaveAlarmsUpdate[4]));
-    }
-}
-static void RWWarningAndFaultOfSlave_6(unsigned char R_or_RW, unsigned short *value )
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.PowerAndCommonSlaveAlarmsUpdate[5]));
-    }
-}
-static void RWWarningAndFaultOfSlave_7(unsigned char R_or_RW, unsigned short *value )
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.PowerAndCommonSlaveAlarmsUpdate[6]));
-    }
-}   
-static void RWWarningAndFaultOfSlave_8(unsigned char R_or_RW, unsigned short *value )
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.PowerAndCommonSlaveAlarmsUpdate[7]));
-    }
-}   
-static void RWWarningAndFaultOfSlave_9(unsigned char R_or_RW, unsigned short *value )
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.PowerAndCommonSlaveAlarmsUpdate[8]));
-    }
-}
-static void RWWarningAndFaultOfSlave_10(unsigned char R_or_RW, unsigned short *value )
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.PowerAndCommonSlaveAlarmsUpdate[9]));
-    }
-}
-static void RWWarningAndFaultOfSlave_11(unsigned char R_or_RW, unsigned short *value )
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.PowerAndCommonSlaveAlarmsUpdate[10]));
-    }
-}
-static void RWWarningAndFaultOfSlave_12(unsigned char R_or_RW, unsigned short *value )
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.PowerAndCommonSlaveAlarmsUpdate[11]));
-    }
-}   
-static void RWWarningAndFaultOfSlave_13(unsigned char R_or_RW, unsigned short *value )
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.PowerAndCommonSlaveAlarmsUpdate[12]));
-    }
-}
-static void RWWarningAndFaultOfSlave_14(unsigned char R_or_RW, unsigned short *value )
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.PowerAndCommonSlaveAlarmsUpdate[13]));
-    }
-}
-static void RWWarningAndFaultOfSlave_15(unsigned char R_or_RW, unsigned short *value )
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.PowerAndCommonSlaveAlarmsUpdate[14]));
-    }
-}
-static void RWWarningAndFaultOfSlave_16(unsigned char R_or_RW, unsigned short *value )
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.PowerAndCommonSlaveAlarmsUpdate[15]));
-    }
-}
-static void RWWarningAndFaultOfSlave_17(unsigned char R_or_RW, unsigned short *value )
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.PowerAndCommonSlaveAlarmsUpdate[16]));
-    }
-}
-static void RWWarningAndFaultOfSlave_18(unsigned char R_or_RW, unsigned short *value )
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.PowerAndCommonSlaveAlarmsUpdate[17]));
-    }
-}
-
-static void RWWarningAndFaultOfSlave_19(unsigned char R_or_RW, unsigned short *value )
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.PowerAndCommonSlaveAlarmsUpdate[18]));
-    }
-}
-
-static void RWWarningAndFaultOfSlave_20(unsigned char R_or_RW, unsigned short *value )
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.PowerAndCommonSlaveAlarmsUpdate[19]));
-    }
-}   
-
-
-
-
-
-static void RWStaticDiffAngle(unsigned char R_or_RW, unsigned short *value )
-{
-    if(R_or_RW == 0)
-    {
-		
-        *value = GlobalVariable.ConfigPara.staticDiffAngle;
-    }
-    else if((R_or_RW == 1)&&( *value >= 3.0f && *value <= 6.0f)&&(GlobalVariable.ConfigPara.staticDiffAngle != *value))
-    {
-    
-        Log_AddParamChange(REG_STATIC_DIFF_ANGLE, *value, GlobalVariable.ConfigPara.staticDiffAngle);
-        GlobalVariable.ConfigPara.staticDiffAngle = (unsigned short) *value;
-        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-    }
-}
-		
-
-static void RWMoveDiffAngle(unsigned char R_or_RW, unsigned short *value )
-{
-	  if(R_or_RW == 0)
-    {
-        *value = GlobalVariable.ConfigPara.moveDiffAngle;
-    }
-    else if((R_or_RW == 1)&&( *value >= 3.0f && *value <= 10.0f)&&(GlobalVariable.ConfigPara.moveDiffAngle!= *value))
-    {
-    
-        Log_AddParamChange(REG_MOVE_DIFF_ANGLE, *value, GlobalVariable.ConfigPara.moveDiffAngle);
-        GlobalVariable.ConfigPara.moveDiffAngle = (unsigned short) *value;
-        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-    }
-}
-
-/*************************************************
-  Function              : RWWeaherState(unsigned char R_or_RW, unsigned short *value)
-  Description           : RWWeaherState(unsigned char R_or_RW, unsigned short *value)
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2024.11.14
-  Additional Comments	  : ÌìÆø×´Ì¬
-                         1£ºÇçÌì(×Ô¶¯¸ú×Ù)
-                         3£º¹ý¶ÉÌìÆø(ÉÏÎçÍ£80¶È£¬ÏÂÎçÍ£100¶È)
-                         4£ºÒõÌì(Í£90¶È)
-*************************************************/
-static void RWWeaherState(unsigned char R_or_RW, unsigned short *value)
-{    
-	static unsigned short WeatherStateTemp = 0;
-	
-	if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&WeaherState));
-    }
-    else if(R_or_RW == 1)
-    {
-        *(((unsigned short *)&WeaherState)) = *value;
-			  
-		 WeaherStateTime     =  GlobalVariable.Time.TodayTime;			// µ±Ç°Ê±¼ä
-	     WeaherStateTimeFlag =  1;
-		 Log_AddParamChange(REG_WEATHERSTATE  , *value, WeatherStateTemp);	
-		 WeatherStateTemp = *value;
-    }	
-
-}
-
-
-
-//ÒÔÏÂÄÚ???ÎªÐÂ???¾«¼òÐ­???¹¦ÄÜ
-/*************************************************
-  Function              : RProtocol_Version()
-  Description           : RProtocol_Version
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.06.25
-  Additional Comments	  : Ð­???°æ±¾,RegAddr: 29;£¨¹©ÉÏÎ»»úºÍÍ¨???ÏäÇø·ÖÊ¹ÓÃ²»Í¬µÄÐ­???°æ±¾,Í¨???Ïä???³£???Ñ¯Ê±???ÒÔÖªµÀÊÇ·ñÖ§³ÖÐÂÐ­??????
-                         0xAAF2:???³ÖÐÂµÄ¾«¼òÐ­???£¬Í¬Ê±¼æÈÝ¾ÉµÄÐ­???
-                         ÆäËûÖµ£º??????³Ö¾ÉÐ­???
-*************************************************/
-static void RProtocol_Version(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = GlobalVariable.FixePara.ProtocolVersion;
-    }
-}
-/*************************************************
-  Function              : RProtocol_Version_S()
-  Description           : RProtocol_Version_S
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.06.25
-  Additional Comments	  : Ð­???°æ±¾,RegAddr: 29;£¨¹©ÉÏÎ»»úºÍÍ¨???ÏäÇø·ÖÊ¹ÓÃ²»Í¬µÄÐ­???°æ±¾,Í¨???Ïä???³£???Ñ¯Ê±???ÒÔÖªµÀÊÇ·ñÖ§³ÖÐÂÐ­??????
-                         0xAAF2:???³ÖÐÂµÄ¾«¼òÐ­???£¬Í¬Ê±¼æÈÝ¾ÉµÄÐ­???
-                         ÆäËûÖµ£º??????³Ö¾ÉÐ­???
-*************************************************/
-static void RProtocol_Version_S(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = GlobalVariable.FixePara.ProtocolVersion;
-    }
-}
-/*************************************************
-  Function              : RDeviceType_S()
-  Description           : RDeviceType_S
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.06.25
-Additional Comments	  : ¾«¼òÐ­???ÄÚµÄÉè???ÀàÐÍ£º
-*************************************************/
-static void RDeviceType_S(unsigned char R_or_RW, unsigned short *value )
-{
-    if(R_or_RW == 0)
-    {
-        *value = GlobalVariable.FixePara.DeviceType;
-    }
-}
-/*************************************************
-  Function              : RDeviceEdition_S()
-  Description           : RDeviceEdition_S
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.06.25
-Additional Comments	  : ¾«¼òÐ­???ÄÚµÄ´ó°æ???ºÅ£¬???8ÎªÈí¼þ°æ???ºÅ£¬???8Î»Îª???¼þ°æ???ºÅ£º
-*************************************************/
-static void RDeviceEdition_S(unsigned char R_or_RW, unsigned short *value )
-{
-    if(R_or_RW == 0)
-    {
-        *value = GlobalVariable.FixePara.DeviceEdition;
-    }
-}
-/*************************************************
-  Function              : RVersion1_S()
-  Description           : RVersion1_S
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.06.25
-Additional Comments	  : ¾«¼òÐ­???Ð¡°æ???ºÅ£»???8Î»ÎªÉè???ÀàÐÍ£¬???8Î»ÔÝÊ±²»??????
-*************************************************/
-static void RVersion1_S(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = (unsigned short)(GlobalVariable.FixePara.Version1);
-    }
-}
-/*************************************************
-  Function              : RVersion2_S()
-  Description           : RVersion2_S
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.06.25
-Additional Comments	  : ¾«¼òÐ­???Ð¡°æ???ºÅ£»???8Î»Îª·¢²¼°æ±¾ºÅ£¬???8Î»Îª²âÊÔ°æ±¾ºÅ£º
-*************************************************/
-static void RVersion2_S(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = (unsigned short)(GlobalVariable.FixePara.Version2);
-    }
-}
-/*************************************************
-  Function              : RPVBuckerVoltage_S
-  Description           : RPVBuckerVoltage_S
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.06.25
-Additional Comments	  : ¾«¼òÐ­???PV×é¼þµçÑ¹£¬·Å???10±¶£º
-*************************************************/
-static void RPVBuckerVoltage_S(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = (unsigned short)(GlobalVariable.PowerPara.PVBuckerVoltage * 10);
-    }
-}
-/*************************************************
-  Function              : RBatVoltage_S
-  Description           : RBatVoltage_S
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.06.25
-Additional Comments	  : ¾«¼òÐ­???µç³ØµçÑ¹£¬·Å???10±¶£º
-*************************************************/
-static void RBatVoltage_S(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = (unsigned short)(GlobalVariable.PowerPara.BatteryVoltage * 10);
-    }
-}
-/*************************************************
-  Function              : RBatSOCTemp_S()
-  Description           : RBatSOCTemp_S
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.06.25
-Additional Comments	  : ¾«¼òÐ­???µç³ØSOC(·Å´ó100???)/;
-*************************************************/
-static void RBatSOCTemp_S(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = 0x00FF & (unsigned char)(GlobalVariable.PowerPara.BatterySOC*100);
-        *value = *value << 8;
-        *value &= 0xFF00;
-        *value |= ((signed char)(GlobalVariable.PowerPara.BatteryTemperature) & 0x00FF);
-    }
-}
-/*************************************************
-  Function              : RTemp_S()
-  Description           : RTemp_S
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.06.26
-Additional Comments	  : ¾«¼òÐ­???Ö÷°åÎÂ¶È/;
-*************************************************/
-static void RTemp_S(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(unsigned short *)&GlobalVariable.Tmp.BoardTmp;
-    }
-}
-/*************************************************
-  Function              : RBatState_BatCurrent_S()
-  Description           : RBatState_BatCurrent_S
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.06.26
-Additional Comments	  : ¾«¼òÐ­???µç³Ø³äµç×´??/µç³ØµçÁ÷;
-*************************************************/
-static void RBatState_BatCurrent_S(unsigned char R_or_RW, unsigned short *value)
-{
-	  signed short temp = 0;
-	
-	  temp = (signed short)(GlobalVariable.PowerPara.BatteryCurrent*100);
-    
-    if(R_or_RW == 0)
-    {
-        *value = 0;
-        *value |= (*(unsigned char*)(&GlobalVariable.PowerPara.ChargeState)) << 12;
-			  *value |= *((unsigned short *)&temp);
-    }
-}
-/*************************************************
-  Function              : RWWorkMode1_S()
-  Description           : RWWorkMode1_S
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.06.26
-Additional Comments	  : ¾«¼òÐ­???¹¤×÷Ä£Ê½;
-*************************************************/
-static void RWWorkMode1_S(unsigned char R_or_RW, unsigned short *value )
-{
-	int i;
-
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.WorkMode.WorkMode));
-    }
-//    else if(R_or_RW == 1)
-//    {
-//       // LogOperation_ParameterChange( GlobalVariable.WorkMode.WorkMode, GlobalVariable.WorkModeBuffer.WorkMode );      
-//        *(((unsigned short *)&GlobalVariable.WorkModeBuffer.WorkMode)) = *value;
-
-//		if((GlobalVariable.WorkMode.WorkMode & 0xffff) != *value)
-//		{
-//	        Log_AddWorkModeChange(*value, GlobalVariable.WorkMode.WorkMode,LOG_WORK_MODE_RCV);
-//		}
-//		
-//		for(i = 0; i < sizeof(valid_mode)/sizeof(valid_mode[0]); i++)
-//		{
-//			if(*value == valid_mode[i])
-//			{
-//				break;
-//			}
-//		}
-//		
-//		if(i >= sizeof(valid_mode)/sizeof(valid_mode[0]))
-//		{
-//			return;	//·ÇÓÐÐ§Ä£Ê½Ö±½Ó·µ???
-//		}
-
-//		if((GlobalVariable.WorkModeBuffer.WorkMode & 0xFF) == 0xFF)
-//        {
-//            NVIC_SystemReset();
-//        }
-//        else if((GlobalVariable.WorkModeBuffer.WorkMode & 0xFF) == 0xFE)//Í£»úÄ£Ê½
-//        {
-//					GlobalVariable.WorkMode.WorkMode = GlobalVariable.WorkMode.WorkMode; //Èç¹ûÊÕµ½Í¨???ÏäÍ£»úÄ£Ê½£¬±£³ÖÔ­Ä£Ê½£¬²»Ïì???
-////            MotorAllStop();            /* Stop */
-////            GlobalVariable.WorkModeBuffer.WorkMode = AUTO_TRACKER_MODE; 
-////					  RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);	//Ê¹ÄÜPWRÍâ???Ê±???
-////	          
-////					  EXTI_InitTypeDef EXTI_InitStructure;
-//// 	          NVIC_InitTypeDef NVIC_InitStructure;
-////  	        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);	//Ê¹ÄÜ¸´ÓÃ¹¦ÄÜÊ±ÖÓ
-
-//					//						//GPIOE.2 ??????ÏßÒÔ¼°ÖÐ???³õ???»¯ÅäÖÃ   ÏÂ½µÑØ´¥???  LORA_RX : PA10
-////						GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource10);
-////					
-////						EXTI_InitStructure.EXTI_Line=EXTI_Line10;	//PA10
-////						EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;	
-////						EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling;
-////						EXTI_InitStructure.EXTI_LineCmd = ENABLE;
-////						EXTI_Init(&EXTI_InitStructure);	 	//¸ù¾ÝEXTI_InitStruct???Ö¸¶¨µÄ²ÎÊý³õÊ¼»¯Íâ???EXTI¼Ä´æ???
-
-////  	        NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;			//Ê¹ÄÜ°´¼üWK_UPËùÔÚµÄÍâ²¿??????Í¨µÀ
-////						NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;	//ÇÀÕ¼ÓÅÏÈ???2??? 
-////						NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x03;					//×ÓÓÅÏÈ¼¶3
-////						NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;								//Ê¹ÄÜÍâ²¿??????Í¨µÀ
-////						NVIC_Init(&NVIC_InitStructure); 
-////						
-////						IWDG_ReloadCounter(); 
-////						IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
-////						IWDG_SetPrescaler(IWDG_Prescaler_256);
-////						IWDG_SetReload(0xFFF); 
-////						IWDG_ReloadCounter();
-////						
-////						RTC_Local_Init();
-////						
-////						us_tick = SysTick->CTRL;
-////			      SysTick->CTRL  = 0; 
-////	          PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);//STOPÄ£Ê½
-////						OS_ERR err; 
-////						OSSchedLock(&err);
-////						while(1)
-////						{
-////								if(uc_rtcFlag==1)
-////								{
-////										uc_rtcFlag = 0;
-////										SysTick->CTRL = us_tick;
-////										SystemInit();
-////										OS_CPU_SysTickInit(720000); 
-////										IWDG_ReloadCounter();
-////										RCC_LSICmd(ENABLE);
-////										RTC_WaitForSynchro();	
-////										RTC_Local_Init();
-////										us_tick = SysTick->CTRL;
-////										SysTick->CTRL  = 0; 
-////										PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);//STOPÄ£Ê½
-////								}
-////						} 
-//        }
-//        else if ((GlobalVariable.WorkModeBuffer.WorkMode & 0xFF) == AUTO_AI_MODE)
-//        {
-//            GlobalVariable.WorkMode.WorkMode = GlobalVariable.WorkModeBuffer.WorkMode;
-//            GlobalVariable.AIPara.AIRemoteAngle=GlobalVariable.Motor[0].ActualAngle;
-//        }
-//        else
-//        {
-//            GlobalVariable.WorkMode.WorkMode = GlobalVariable.WorkModeBuffer.WorkMode;
-//        }
-//    }
-}
-/*************************************************
-  Function              : RWarningAndFault1_1_S()
-  Description           : RWarningAndFault1_1_S
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.06.26
-Additional Comments	  : ¾«¼òÐ­???Alarm; 
-*************************************************/
-static void RWarningAndFault1_1_S(unsigned char R_or_RW, unsigned short *value )
-{
-    if(R_or_RW == 0)
-    {
-//        *value = *(((unsigned short *)&GlobalVariable.MasterselfWarningAndFault)+1);
-        *value = *(((unsigned short *)&GlobalVariable.SystemWarningAndFaultUpdate)+1);
-    }
-}
-/*************************************************
-  Function              : RWarningAndFault1_2_S()
-  Description           : RWarningAndFault1_2_S
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.06.26
-Additional Comments	  : ¾«¼òÐ­???Alarm; 
-*************************************************/
-static void RWarningAndFault1_2_S(unsigned char R_or_RW, unsigned short *value )
-{
-    if(R_or_RW == 0)
-    {
-//        *value = *(((unsigned short *)&GlobalVariable.MasterselfWarningAndFault));
-        *value = *(((unsigned short *)&GlobalVariable.SystemWarningAndFaultUpdate));
-    }
-
-}
-/*************************************************
-  Function              : RMotorCurrent1_S()
-  Description           : RMotorCurrent1_S
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.06.26
-Additional Comments	  : ¾«¼òÐ­???µç»úµçÁ÷; 
-*************************************************/
-static void RMotorCurrent1_S(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = (short)(GlobalVariable.Motor[0].Motorcurrent * 10);
-    }
-} 
-/*************************************************
-  Function              : RTargetAngle1_S()
-  Description           : RTargetAngle1_S
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.06.26
-Additional Comments	  : ¾«¼òÐ­??????±ê???¶È,·Å´ó100±¶£» 
-*************************************************/
-static void RTargetAngle1_S(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = (unsigned short )(GlobalVariable.WorkMode.Target * 100);
-    }
-} 
-/*************************************************
-  Function              : RRealAngle1_S()
-  Description           : RRealAngle1_S
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.06.26
-Additional Comments	  : ¾«¼òÐ­???Êµ¼Ê½Ç¶È,·Å´ó100±¶£» 
-*************************************************/
-static void RRealAngle1_S(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = ( unsigned short )(GlobalVariable.Motor[0].ActualAngle * 100);
-    }
-}
-/*************************************************
-  Function              : RWWorkMode2_S()
-  Description           : RWWorkMode2_S
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.06.26
-Additional Comments	  : ¾«¼òÐ­???¹¤×÷Ä£Ê½;
-*************************************************/
-static void RWWorkMode2_S(unsigned char R_or_RW, unsigned short *value )
-{
-}
-/*************************************************
-  Function              : RWarningAndFault1_1_S()
-  Description           : RWarningAndFault1_1_S
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.06.26
-Additional Comments	  : ¾«¼òÐ­???Alarm; 
-*************************************************/
-static void RWarningAndFault2_1_S(unsigned char R_or_RW, unsigned short *value )
-{
-
-}
-/*************************************************
-  Function              : RWarningAndFault1_2_S()
-  Description           : RWarningAndFault1_2_S
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.06.26
-Additional Comments	  : ¾«¼òÐ­???Alarm; 
-*************************************************/
-static void RWarningAndFault2_2_S(unsigned char R_or_RW, unsigned short *value )
-{
-
-}
-/*************************************************
-  Function              : RMotorCurrent1_S()
-  Description           : RMotorCurrent1_S
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.06.26
-Additional Comments	  : ¾«¼òÐ­???µç»úµçÁ÷; 
-*************************************************/
-static void RMotorCurrent2_S(unsigned char R_or_RW, unsigned short *value)
-{
-
-} 
-/*************************************************
-  Function              : RTargetAngle1_S()
-  Description           : RTargetAngle1_S
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.06.26
-Additional Comments	  : ¾«¼òÐ­??????±ê???¶È,·Å´ó100±¶£» 
-*************************************************/
-static void RTargetAngle2_S(unsigned char R_or_RW, unsigned short *value)
-{
-
-} 
-/*************************************************
-  Function              : RRealAngle2_S()
-  Description           : RRealAngle2_S
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.06.26
-Additional Comments	  : ¾«¼òÐ­??????±ê???¶È,·Å´ó100±¶£» 
-*************************************************/
-static void RRealAngle2_S(unsigned char R_or_RW, unsigned short *value)
-{
-
-}
-/*************************************************
-  Function              : RWAIRemoteTarget1_S()
-  Description           : RWAIRemoteTarget1_S
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.06.26
-Additional Comments	  : ¾«¼òÐ­???Ô¶³Ì???±ê???¶È1??? 
-*************************************************/
-static void RWAIRemoteTarget1_S(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = (unsigned short)GlobalVariable.AIPara.AIRemoteAngle;
-    }
-//    else if(R_or_RW == 1)
-//    {
-//       // LogOperation_ParameterChange( GlobalVariable.AIPara.AIRemoteAngle, *value );   
-//       Log_AddParamChange(384, *value, (unsigned short)GlobalVariable.AIPara.AIRemoteAngle);
-//        GlobalVariable.AIPara.AIRemoteAngle = (float)*value;
-//        GlobalVariable.AIPara.AIModeDelayCount = 0;
-//    }
-}
-/*************************************************
-  Function              : RWAIRemoteTarget2_S()
-  Description           : RWAIRemoteTarget2_S
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.06.26
-Additional Comments	  : ¾«¼òÐ­???Ô¶³Ì???±ê???¶È2??? 
-*************************************************/
-static void RWAIRemoteTarget2_S(unsigned char R_or_RW, unsigned short *value)
-{
-
-}
-/*************************************************
-  Function              : RWRemoteWindDirect_S()
-  Description           : RWRemoteWindDirect_S
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.06.26
-Additional Comments	  : ¾«¼òÐ­???Ô¶³Ì·çÏò???
-*************************************************/
-static void RWRemoteWindDirect_S(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = GlobalVariable.Weather.RemoteWindDirect;
-    }
-//    else if(R_or_RW == 1)
-//    {
-//    	Log_AddParamChange(387, *value, GlobalVariable.Weather.RemoteWindDirect);
-//        GlobalVariable.Weather.RemoteWindDirect = *value;
-//    }
-}
-/*************************************************
-  Function              : RWRemoteWindSpeed_S()
-  Description           : RWRemoteWindSpeed_S
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.06.26
-Additional Comments	  : ¾«¼òÐ­???Ô¶³Ì·çËÙ£»
-*************************************************/
-static void RWRemoteWindSpeed_S(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = GlobalVariable.Weather.RemoteWindSpeed;
-    }
-//    else if(R_or_RW == 1)
-//    {
-//      //  LogOperation_ParameterChange( GlobalVariable.Weather.RemoteWindSpeed, *value );    
-//      Log_AddParamChange(386, *value, GlobalVariable.Weather.RemoteWindSpeed);
-//        GlobalVariable.Weather.RemoteWindSpeed = *value;
-//    }
-}
-/*************************************************
-  Function              : RWLongitude1_S()
-  Description           : RWLongitude1_S
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.06.26
-Additional Comments	  : ¾«¼òÐ­???¾­¶È??? 
-*************************************************/
-/* Longitude */
-static void RWLongitude1_S(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.Longitude)+1);
-    }
-//    else if(R_or_RW == 1)
-//    {
-//    	Log_AddParamChange(388, *value, *(((unsigned short *)&GlobalVariable.ConfigPara.Longitude)+1));
-//        *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.Longitude)+1) = *value;
-//    }
-}
-/*************************************************
-  Function              : RWLongitude2_S()
-  Description           : RWLongitude2_S
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.06.26
-Additional Comments	  : ¾«¼òÐ­???¾­¶È??? 
-*************************************************/
-static void RWLongitude2_S(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.Longitude));
-    }
-//    else if(R_or_RW == 1)
-//    {
-//        *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.Longitude)) = *value;
-//      //  LogOperation_ParameterChange( GlobalVariable.ConfigPara.Longitude, GlobalVariable.ConfigParaBuffer.Longitude );      
-//        
-//        if(GlobalVariable.ConfigParaBuffer.Longitude >= -180.0
-//            &&GlobalVariable.ConfigParaBuffer.Longitude <= 180.0 )
-//        {
-//        	Log_AddParamChange(389, *value, *(((unsigned short *)&GlobalVariable.ConfigPara.Longitude)));
-//            GlobalVariable.ConfigPara.Longitude = GlobalVariable.ConfigParaBuffer.Longitude;
-//            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-//        }
-//    }
-}
-
-/*************************************************
-  Function              : RWLatitude1_S()
-  Description           : RWLatitude1_S
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.06.26
-Additional Comments	  : ¾«¼òÐ­??????¶È£» 
-*************************************************/
-static void RWLatitude1_S(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.Latitude)+1);
-    }
-//    else if(R_or_RW == 1)
-//    {
-//        *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.Latitude)+1) = *value;
-//    }
-}
-/*************************************************
-  Function              : RWLatitude2_S()
-  Description           : RWLatitude2_S
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.06.26
-Additional Comments	  : ¾«¼òÐ­??????¶È£» 
-*************************************************/
-static void RWLatitude2_S(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.Latitude));
-    }
-//    else if(R_or_RW == 1)
-//    {
-//        *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.Latitude)) = *value;
-//        if(GlobalVariable.ConfigParaBuffer.Latitude >= -90.0 
-//            && GlobalVariable.ConfigParaBuffer.Latitude <= 90.0)
-//        {
-//            Log_AddParamChange(390, *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.Latitude)+1), *(((unsigned short *)&GlobalVariable.ConfigPara.Latitude)+1));
-//        	Log_AddParamChange(391, *value, *(((unsigned short *)&GlobalVariable.ConfigPara.Latitude)));
-//            GlobalVariable.ConfigPara.Latitude = GlobalVariable.ConfigParaBuffer.Latitude;
-//            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-//        }
-//    }
-}
-/*************************************************
-  Function              : RWTimeZone1_S()
-  Description           : RWTimeZone1_S
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.06.26
-Additional Comments	  : ¾«¼òÐ­???Ê±Çø??? 
-*************************************************/
-static void RWTimeZone1_S(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.TimeZone)+1);
-    }
-//    else if(R_or_RW == 1)
-//    {
-//        *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.TimeZone)+1) = *value;
-//    }
-}
-/*************************************************
-  Function              : RWTimeZone2_S()
-  Description           : RWTimeZone2_S
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.06.26
-Additional Comments	  : ¾«¼òÐ­???Ê±Çø??? 
-*************************************************/
-static void RWTimeZone2_S(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.TimeZone));
-    }
-//    else if(R_or_RW == 1)
-//    {
-//        *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.TimeZone)) = *value;
-//       // LogOperation_ParameterChange( GlobalVariable.ConfigPara.TimeZone, GlobalVariable.ConfigParaBuffer.TimeZone );      
-//        if(GlobalVariable.ConfigParaBuffer.TimeZone >= -12.0
-//            && GlobalVariable.ConfigParaBuffer.TimeZone <= 12.0)
-//        {
-//            Log_AddParamChange(392, *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.TimeZone)+1), *(((unsigned short *)&GlobalVariable.ConfigPara.TimeZone)+1));
-//        	Log_AddParamChange(393, *value, *(((unsigned short *)&GlobalVariable.ConfigPara.TimeZone)));
-//            GlobalVariable.ConfigPara.TimeZone = GlobalVariable.ConfigParaBuffer.TimeZone;
-//            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-//        }
-//    }
-}
-/*************************************************
-  Function              : RWTimeYearMonth_S()
-  Description           : RWTimeYearMonth_S
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.06.27
-Additional Comments	  : ¾«¼òÐ­???Äê£¬ÔÂ£» Äê£º???8Î»£»ÔÂ£º???8???
-*************************************************/
-static void RWTimeYearMonth_S(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = ((GlobalVariable.Time.Year % 2000) << 8) | (GlobalVariable.Time.Month);
-    }
-//    else if(R_or_RW == 1)
-//    {
-//      //  LogOperation_ParameterChange( GlobalVariable.TimeBuffer.Year, *value );    
-//        GlobalVariable.TimeBuffer.Year = 2000 + (*value >> 8); 
-//			  GlobalVariable.TimeBuffer.Month = (*value & 0xFF);
-//        GlobalVariable.WriteFlag.TimeWrite = 2;
-//    }
-}
-/*************************************************
-  Function              : RWTimeDayHour_S()
-  Description           : RWTimeDayHour_S
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.06.27
-Additional Comments	  : ¾«¼òÐ­???ÈÕ£¬Ê±£» ÈÕ£º???8Î»£»Ê±£º???8???
-*************************************************/
-static void RWTimeDayHour_S(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = ((GlobalVariable.Time.Day) << 8) | (GlobalVariable.Time.Hour);
-    }
-//    else if(R_or_RW == 1)
-//    {
-//      //  LogOperation_ParameterChange( GlobalVariable.TimeBuffer.Year, *value );      
-//        GlobalVariable.TimeBuffer.Day =  (*value >> 8); 
-//			  GlobalVariable.TimeBuffer.Hour = (*value & 0xFF);
-//        GlobalVariable.WriteFlag.TimeWrite = 2;
-//    }
-} 
-/*************************************************
-  Function              : RWTimeMinuteSecond_S()
-  Description           : RWTimeMinuteSecond_S
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.06.27
-Additional Comments	  : ¾«¼òÐ­???·Ö£¬Ãë£» ·Ö£º???8Î»£»Ãë£º???8???
-*************************************************/
-static void RWTimeMinuteSecond_S(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = ((GlobalVariable.Time.Minute) << 8) | (GlobalVariable.Time.Second);
-    }
-//    else if(R_or_RW == 1)
-//    {
-//      //  LogOperation_ParameterChange( GlobalVariable.TimeBuffer.Year, *value );      
-//        GlobalVariable.TimeBuffer.Minute =  (*value >> 8); 
-//			  GlobalVariable.TimeBuffer.Second = (*value & 0xFF);
-//        GlobalVariable.WriteFlag.TimeWrite = 2;
-//    }
-}
-/*************************************************
-  Function              : RElevationAngle1_S()
-  Description           : RElevationAngle1_S
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.06.27
-  Additional Comments	  : ¾«¼òÐ­???£¬Ì«Ñô¸ß¶È???1
-*************************************************/
-static void RElevationAngle1_S(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = GlobalVariable.AstronomyPara.ElevationAngle * 100;
-    }
-}
-/*************************************************
-  Function              : RAzimuthAngle1_S()
-  Description           : RAzimuthAngle1_S
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.06.27
-  Additional Comments	  : ¾«¼òÐ­???£¬Ì«Ñô·½Î»???1
-*************************************************/
-static void RAzimuthAngle1_S(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = GlobalVariable.AstronomyPara.AzimuthAngle * 100;
-    }
-}
-/*************************************************
-  Function              : RElevationAngle2_S()
-  Description           : RElevationAngle2_S
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.06.27
-  Additional Comments	  : ¾«¼òÐ­???£¬Ì«Ñô¸ß¶È???2
-*************************************************/
-static void RElevationAngle2_S(unsigned char R_or_RW, unsigned short *value)
-{
-   
-}
-/*************************************************
-  Function              : RAzimuthAngle2_S()
-  Description           : RAzimuthAngle2_S
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.06.27
-  Additional Comments	  : ¾«¼òÐ­???£¬Ì«Ñô·½Î»???2
-*************************************************/
-static void RAzimuthAngle2_S(unsigned char R_or_RW, unsigned short *value)
-{
- 
-}
-/*************************************************
-  Function              : RWComID_S()
-  Description           : RWComID_S
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.06.28
-  Additional Comments	  : ¾«¼òÐ­???£¬¿ØÖÆÆ÷ID
-*************************************************/
-static void RWComID_S(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.ComID));
-    }
-//    else if(R_or_RW == 1)
-//    {        
-//        if(*value >= 1 && *value < 255)
-//        {
-//            //LogOperation_ParameterChange( GlobalVariable.ConfigPara.ComID, *value );    
-//            Log_AddParamChange(401, *value, *(((unsigned short *)&GlobalVariable.ConfigPara.ComID)));
-//            GlobalVariable.ConfigPara.ComID =(unsigned char) *value;
-//            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-//        }
-//    }
-}
-/*************************************************
-  Function              : RWChannelSelect_S()
-  Description           : RWChannelSelect_S
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.06.28
-  Additional Comments	  : ¾«¼òÐ­???£¬Í¨µÀÑ¡Ôñ
-*************************************************/
-static void RWChannelSelect_S(unsigned char R_or_RW, unsigned short *value)
-{
-  
-}
-/*************************************************
-  Function              : RRWEWTracingAccuracy_S()
-  Description           : RWEWTracingAccuracy_S
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.06.28
-  Additional Comments	  : ¾«¼òÐ­???£¬¸ú???¾«¶È,·Å´ó100???
-*************************************************/
-static void RWEWTracingAccuracy_S(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = (unsigned short )(GlobalVariable.ConfigPara.EWTracingAccuracy * 100);
-    }
-//    else if(R_or_RW == 1)
-//    {
-//       
-//		  	GlobalVariable.ConfigPara.EWTracingAccuracy = (*value) * 0.01;
-//       // LogOperation_ParameterChange( GlobalVariable.ConfigPara.EWTracingAccuracy, GlobalVariable.ConfigParaBuffer.EWTracingAccuracy );      
-//        if(GlobalVariable.ConfigParaBuffer.EWTracingAccuracy >= 0.98
-//            && GlobalVariable.ConfigParaBuffer.EWTracingAccuracy <= 5.1)
-//        {
-//        	Log_AddParamChange(403, *value, (unsigned short )(GlobalVariable.ConfigPara.EWTracingAccuracy * 100));
-//            GlobalVariable.ConfigPara.EWTracingAccuracy = GlobalVariable.ConfigParaBuffer.EWTracingAccuracy;
-//            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-//        }
-//    }
-} 
-/*************************************************
-  Function              : RWHeatEnable_S()
-  Description           : RWHeatEnable_S
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.06.28
-  Additional Comments	  : ¾«¼òÐ­???£¬¼Ó???Ê¹ÄÜ
-*************************************************/
-static void RWHeatEnable_S(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.HeatEnable));
-    }
-//    else if(R_or_RW == 1)
-//    {        
-//       // LogOperation_ParameterChange( GlobalVariable.ConfigPara.HeatEnable, *value );   
-//        if((*value == 0) || (*value == 1))	
-//		{			
-//			Log_AddParamChange(404, *value, *(((unsigned short *)&GlobalVariable.ConfigPara.HeatEnable)));
-//          GlobalVariable.ConfigPara.HeatEnable =(unsigned short) *value;
-//          GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-//		}
-//    }
-} 
-/*************************************************
-  Function              : RWMotorOrientation_S()
-  Description           : RWMotorOrientation_S
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.06.28
-  Additional Comments	  : ¾«¼òÐ­???£¬µç»ú³¯???
-*************************************************/
-static void RWMotorOrientation_S(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = GlobalVariable.ConfigPara.MotorOrientation;
-    }
-//    else if(R_or_RW == 1)
-//    {
-//		if(*value == 0 || *value == 1)  //0£ºµç»ú³¯¶«£» 1£ºµç»ú³¯???
-//        {
-//            //LogOperation_ParameterChange( GlobalVariable.ConfigPara.MotorOrientation, *value ); 
-//            Log_AddParamChange(405, *value, GlobalVariable.ConfigPara.MotorOrientation);
-//            GlobalVariable.ConfigPara.MotorOrientation = *value;
-//            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-//        } 
-//    }
-} 
-/*************************************************
-  Function              : RWProtectCurrent_S()
-  Description           : RWProtectCurrent_S
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.06.28
-  Additional Comments	  : ¾«¼òÐ­???£¬µç»ú³¯???
-*************************************************/
-static void RWProtectCurrent_S(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = (unsigned short) (GlobalVariable.ConfigPara.MotorOverCurrentValue * 100);
-    }
-//    else if(R_or_RW == 1)
-//    {
-//        GlobalVariable.ConfigParaBuffer.MotorOverCurrentValue  = ((*value) * 0.01);
-//       // LogOperation_ParameterChange( GlobalVariable.ConfigPara.MotorOverCurrentValue, GlobalVariable.ConfigParaBuffer.MotorOverCurrentValue );      
-//      
-//        if( (GlobalVariable.ConfigParaBuffer.MotorOverCurrentValue > 0.19f) && 
-//            (GlobalVariable.ConfigParaBuffer.MotorOverCurrentValue < 20.1f )  ) //???6.1·Å´ó???20.1ÏÞÖÆ
-//        {
-//        	Log_AddParamChange(406, *value, (unsigned short) (GlobalVariable.ConfigPara.MotorOverCurrentValue * 100));
-//            GlobalVariable.ConfigPara.MotorOverCurrentValue = GlobalVariable.ConfigParaBuffer.MotorOverCurrentValue;
-//            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-//        }
-//    }
-} 
-/*************************************************
-  Function              : RWPVModuleWidth_S()
-  Description           : RWPVModuleWidth_S
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.06.28
-  Additional Comments	  : ¾«¼òÐ­???£¬×é¼þ???¶È
-*************************************************/
-static void RWPVModuleWidth_S(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = GlobalVariable.ConfigPara.PVModuleWidth * 100;
-    }
-//    else if(R_or_RW == 1)
-//    {
-//        GlobalVariable.ConfigParaBuffer.PVModuleWidth = (*value) * 0.01;
-//        //LogOperation_ParameterChange( GlobalVariable.ConfigPara.PVModuleWidth, GlobalVariable.ConfigParaBuffer.PVModuleWidth );      
-//        if((GlobalVariable.ConfigParaBuffer.PVModuleWidth >= 0.2) && (GlobalVariable.ConfigParaBuffer.PVModuleWidth <= 20.0) )
-//        {
-//        	Log_AddParamChange(407, *value, GlobalVariable.ConfigPara.PVModuleWidth * 100);
-//            GlobalVariable.ConfigPara.PVModuleWidth = GlobalVariable.ConfigParaBuffer.PVModuleWidth;
-//            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-//        }
-//    }
-} 
-/*************************************************
-  Function              : RWPostSpacing_S()
-  Description           : RWPostSpacing_S
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.06.28
-  Additional Comments	  : ¾«¼òÐ­???£¬Á¢Öù¼ä???
-*************************************************/
-static void RWPostSpacing_S(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = GlobalVariable.ConfigPara.PostSpacing * 100;
-    }
-//    else if(R_or_RW == 1)
-//    {
-//        GlobalVariable.ConfigParaBuffer.PostSpacing = (*value) * 0.01;
-//      //  LogOperation_ParameterChange( GlobalVariable.ConfigPara.PostSpacing, GlobalVariable.ConfigParaBuffer.PostSpacing );      
-//        if((GlobalVariable.ConfigParaBuffer.PostSpacing >= GlobalVariable.ConfigPara.PVModuleWidth) &&( GlobalVariable.ConfigParaBuffer.PostSpacing <= 50.0) )
-//        {
-//        	Log_AddParamChange(408, *value, GlobalVariable.ConfigPara.PostSpacing * 100);
-//            GlobalVariable.ConfigPara.PostSpacing = GlobalVariable.ConfigParaBuffer.PostSpacing;
-//        }
-//        else
-//        {
-//			Log_AddParamChange(408, (GlobalVariable.ConfigPara.PVModuleWidth - 0.1)*100, GlobalVariable.ConfigPara.PostSpacing * 100);
-//            GlobalVariable.ConfigPara.PostSpacing = GlobalVariable.ConfigPara.PVModuleWidth - 0.1;
-//        }
-//        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-//        
-//    }
-}
-/*************************************************
-  Function              : RWTerrainSlope1_S()
-  Description           : RWTerrainSlope1_S
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.06.28
-  Additional Comments	  : ¾«¼òÐ­???£¬ÉÏÆÂ¶È1
-*************************************************/
-static void RWTerrainSlope1_S(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = (signed short)GlobalVariable.ConfigPara.TerrainSlope * 100;
-    }
-//    else if(R_or_RW == 1)
-//    {
-//        GlobalVariable.ConfigParaBuffer.TerrainSlope = ((signed short)(*value)) * 0.01;
-//        if(GlobalVariable.ConfigParaBuffer.TerrainSlope >= -45.0f 
-//            && GlobalVariable.ConfigParaBuffer.TerrainSlope <= 45.0f)
-//        {
-//        	Log_AddParamChange(409, *value, GlobalVariable.ConfigPara.TerrainSlope * 100);
-//            GlobalVariable.ConfigPara.TerrainSlope = GlobalVariable.ConfigParaBuffer.TerrainSlope;
-//            
-//            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-//        }
-//    }
-} 
-/*************************************************
-  Function              : RWTerrainSlopeEvening1_S()
-  Description           : RWTerrainSlopeEvening1_S
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.06.28
-  Additional Comments	  : ¾«¼òÐ­???£¬ÏÂÆÂ¶È1
-*************************************************/
-static void RWTerrainSlopeEvening1_S(unsigned char R_or_RW, unsigned short *value)
-{
-   if(R_or_RW == 0)
-    {
-        *value = (signed short)(GlobalVariable.ConfigPara.TerrainSlopeEvening*100);
-    }
-//    else if(R_or_RW == 1)
-//    {     
-//         GlobalVariable.ConfigParaBuffer.TerrainSlopeEvening = ((signed short)(*value)) * 0.01;
-//		if(GlobalVariable.ConfigParaBuffer.TerrainSlopeEvening >= -45.0f 
-//            && GlobalVariable.ConfigParaBuffer.TerrainSlopeEvening <= 45.0f)
-//        {
-//        	Log_AddParamChange(410, *value, (signed short)(GlobalVariable.ConfigPara.TerrainSlopeEvening*100));
-//            GlobalVariable.ConfigPara.TerrainSlopeEvening = GlobalVariable.ConfigParaBuffer.TerrainSlopeEvening;           
-//            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-//        }
-//		else
-//		{
-//			Log_AddParamChange(410, (signed short)(GlobalVariable.ConfigPara.TerrainSlope*100), (signed short)(GlobalVariable.ConfigPara.TerrainSlopeEvening*100));
-//			  GlobalVariable.ConfigPara.TerrainSlopeEvening = GlobalVariable.ConfigPara.TerrainSlope;
-//			  GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-//		}
-//    }
-}
-/*************************************************
-  Function              : RWTerrainSlope2_S()
-  Description           : RWTerrainSlope2_S
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.06.28
-  Additional Comments	  : ¾«¼òÐ­???£¬ÉÏÆÂ¶È2
-*************************************************/
-static void RWTerrainSlope2_S(unsigned char R_or_RW, unsigned short *value)
-{
- 
-} 
-/*************************************************
-  Function              : RWTerrainSlopeEvening2_S()
-  Description           : RWTerrainSlopeEvening2_S
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.06.28
-  Additional Comments	  : ¾«¼òÐ­???£¬ÏÂÆÂ¶È2
-*************************************************/
-static void RWTerrainSlopeEvening2_S(unsigned char R_or_RW, unsigned short *value)
-{
-   
-} 
-/*************************************************
-  Function              : RWSouthNorthShiftAngle1_S()
-  Description           : RWSouthNorthShiftAngle1_S
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.06.28
-  Additional Comments	  : ¾«¼òÐ­???£¬ÄÏ±±ÏòÆ«ÒÆ½Ç¶È1
-*************************************************/
-static void RWSouthNorthShiftAngle1_S(unsigned char R_or_RW, unsigned short *value)
-{
-    short temp;
-	
-    if(R_or_RW == 0)
-    {
-        *value = *((( short *)&GlobalVariable.ConfigPara.SouthNorthShiftAngle));
-    }
-//    else if(R_or_RW == 1)
-//    {
-//			temp = (signed short )(*value);
-//		if( abs(temp) <= MAXABS_SOUTHNORTHSHIFTANGLE_PLUS100 )
-//       {
-//            //LogOperation_ParameterChange( GlobalVariable.ConfigPara.SouthNorthShiftAngle, *value );  
-//            Log_AddParamChange(413, *value, *((( short *)&GlobalVariable.ConfigPara.SouthNorthShiftAngle)));
-//            GlobalVariable.ConfigPara.SouthNorthShiftAngle = temp;
-//            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-//        }
-//    }
-} 
-/*************************************************
-  Function              : RWSouthNorthShiftAngle2_S()
-  Description           : RWSouthNorthShiftAngle2_S
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.06.28
-  Additional Comments	  : ¾«¼òÐ­???£¬ÄÏ±±ÏòÆ«ÒÆ½Ç¶È2
-*************************************************/
-static void RWSouthNorthShiftAngle2_S(unsigned char R_or_RW,unsigned short *value)
-{
-	
-} 
-/*************************************************
-  Function              : RWEWSoftLimitAngle_S()
-  Description           : RWEWSoftLimitAngle_S
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.06.28
-  Additional Comments	  : ¾«¼òÐ­???£¬¶«Î÷ÈíÏÞÎ»½Ç¶È£¬¸ß×Ö½Ú£º¶«ÏÞÎ»£»µÍ×Ö½Ú:Î÷ÏÞ???
-*************************************************/
-static void RWEWSoftLimitAngle_S(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = (((unsigned short)GlobalVariable.ConfigPara.ESoftLimitAngle) << 8 ) | ((unsigned short)GlobalVariable.ConfigPara.WSoftLimitAngle );
-    }
-//    else if(R_or_RW == 1)
-//    {   
-//         GlobalVariable.ConfigParaBuffer.ESoftLimitAngle  = ((*value) >> 8) * 1.00; //???8???
-//		GlobalVariable.ConfigParaBuffer.WSoftLimitAngle  = (*value & 0xFF) * 1.00; //???8???
-
-//       // LogOperation_ParameterChange( GlobalVariable.ConfigPara.ESoftLimitAngle, GlobalVariable.ConfigParaBuffer.ESoftLimitAngle );      
-//        if(GlobalVariable.ConfigParaBuffer.ESoftLimitAngle >= 29.9 )
-//        {
-//			Log_AddParamChange(415, *value, (((unsigned short)GlobalVariable.ConfigPara.ESoftLimitAngle) << 8 ) | ((unsigned short)GlobalVariable.ConfigPara.WSoftLimitAngle ));
-//            GlobalVariable.ConfigPara.ESoftLimitAngle = GlobalVariable.ConfigParaBuffer.ESoftLimitAngle;
-//            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-//        }
-//				
-//		if ( GlobalVariable.ConfigParaBuffer.WSoftLimitAngle <= 150.1)
-//		{
-//			Log_AddParamChange(415, *value, (((unsigned short)GlobalVariable.ConfigPara.ESoftLimitAngle) << 8 ) | ((unsigned short)GlobalVariable.ConfigPara.WSoftLimitAngle ));
-//			GlobalVariable.ConfigPara.WSoftLimitAngle = GlobalVariable.ConfigParaBuffer.WSoftLimitAngle;
-//            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-//		}
-//    }
-} 
-/*************************************************
-  Function              : RWCleaningDockAngle_S()
-  Description           : RWCleaningDockAngle_S
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.06.28
-  Additional Comments	  : ¾«¼òÐ­???£¬ÇåÏ´???¶È
-*************************************************/
-static void RWCleaningDockAngle_S(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = GlobalVariable.ConfigPara.CleaningDockAngle;
-    }
-//    else if(R_or_RW == 1)
-//    {
-//        if(*value >= 30 && *value <= 150)
-//        {
-//            //LogOperation_ParameterChange( GlobalVariable.ConfigPara.CleaningDockAngle, *value );  
-//            Log_AddParamChange(416, *value, GlobalVariable.ConfigPara.CleaningDockAngle);
-//            GlobalVariable.ConfigPara.CleaningDockAngle = *value;
-//            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-//        } 
-//    }
-}  
-/*************************************************
-  Function              : RWBackAngle_S()
-  Description           : RWBackAngle_S
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.06.28
-  Additional Comments	  : ¾«¼òÐ­???£¬???·µ½Ç¶È
-*************************************************/
-static void RWBackAngle_S(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.BackAngle));
-    }
-//    else if(R_or_RW == 1)
-//    {
-//        if(*value >= 59.9 && *value <= 120.1)
-//        {
-//            //LogOperation_ParameterChange( GlobalVariable.ConfigPara.BackAngle, *value );     
-//            Log_AddParamChange(417, *value, *(((unsigned short *)&GlobalVariable.ConfigPara.BackAngle)));
-//            *(((unsigned short *)&GlobalVariable.ConfigPara.BackAngle)) = *value;
-//            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-//        }
-//    }
-} 
-/*************************************************
-  Function              : RWNoComEnable_S()
-  Description           : RWNoComEnable_S
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.06.28
-  Additional Comments	  : ¾«¼òÐ­???£¬ÎÞÍ¨???Ê¹ÄÜ
-*************************************************/
-static void RWNoComEnable_S(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = GlobalVariable.ConfigPara.NoComEnable;
-    }
-//    else if(R_or_RW == 1)
-//    {
-//		if( (*value == 0) ||(*value == 1) )
-//		{
-//           //LogOperation_ParameterChange( GlobalVariable.ConfigPara.NoComEnable, *value );   
-//           Log_AddParamChange(418, *value, GlobalVariable.ConfigPara.NoComEnable);
-//           GlobalVariable.ConfigPara.NoComEnable = *value;
-//           GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-//		}
-//    }
-} 
-/*************************************************
-  Function              : RWUpWindSpeed_S()
-  Description           : RWUpWindSpeed_S
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.06.28
-  Additional Comments	  : ¾«¼òÐ­???£¬´ó·ç±£»¤Æô????????
-*************************************************/
-static void RWUpWindSpeed_S(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.UpWindSpeed));
-    }
-//    else if(R_or_RW == 1)
-//    {
-//        if(*value <= 40)
-//        {
-//            //LogOperation_ParameterChange( GlobalVariable.ConfigPara.UpWindSpeed, *value );   
-//            Log_AddParamChange(419, *value, *(((unsigned short *)&GlobalVariable.ConfigPara.UpWindSpeed)));
-//            *(((unsigned short *)&GlobalVariable.ConfigPara.UpWindSpeed)) = *value;
-//            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-//        }
-//    }
-}
-/*************************************************
-  Function              : RWUpStartTime_S()
-  Description           : RWUpStartTime_S
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.06.28
-  Additional Comments	  : ¾«¼òÐ­???£¬´ó·ç±£»¤Æô¶¯Ê±???
-*************************************************/
-static void RWUpStartTime_S(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.UpStartTime));
-    }
-//    else if(R_or_RW == 1)
-//    {
-//        if(*value <= 1000)
-//        {
-//            //LogOperation_ParameterChange( GlobalVariable.ConfigPara.UpStartTime, *value );    
-//            Log_AddParamChange(420, *value, *(((unsigned short *)&GlobalVariable.ConfigPara.UpStartTime)));
-//           *(((unsigned short *)&GlobalVariable.ConfigPara.UpStartTime)) = *value;
-//            GlobalVariable.WriteFlag.ConfigParaWrite = 1; 
-//        }
-//    }
-} 
-/*************************************************
-  Function              : RWLowWindSpeed_S()
-  Description           : RWLowWindSpeed_S
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.06.28
-  Additional Comments	  : ¾«¼òÐ­???£¬ÍË³ö´ó·ç±£»¤?????
-*************************************************/
-static void RWLowWindSpeed_S(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.LowWindSpeed));
-    }
-//    else if(R_or_RW == 1)
-//    {
-//        if(*value <= (GlobalVariable.ConfigPara.UpWindSpeed - 1))
-//        {
-//            //LogOperation_ParameterChange( GlobalVariable.ConfigPara.LowWindSpeed, *value );     
-//            Log_AddParamChange(421, *value, *(((unsigned short *)&GlobalVariable.ConfigPara.LowWindSpeed)));
-//            *(((unsigned short *)&GlobalVariable.ConfigPara.LowWindSpeed)) = *value;
-//        }
-//        else
-//        {
-//            //LogOperation_ParameterChange( GlobalVariable.ConfigPara.LowWindSpeed, GlobalVariable.ConfigPara.UpWindSpeed - 1 );  
-//            Log_AddParamChange(421, GlobalVariable.ConfigPara.UpWindSpeed - 1, *(((unsigned short *)&GlobalVariable.ConfigPara.LowWindSpeed)));
-//            *(((unsigned short *)&GlobalVariable.ConfigPara.LowWindSpeed)) = GlobalVariable.ConfigPara.UpWindSpeed - 1;
-//        }
-//        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-//    }
-} 
-/*************************************************
-  Function              : RWLowStopTime_S()
-  Description           : RWLowStopTime_S
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.06.28
-  Additional Comments	  : ¾«¼òÐ­???£¬ÍË³ö´ó·ç±£»¤Ê±???
-*************************************************/
-static void RWLowStopTime_S(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.LowStopTime));
-    }
-//    else if(R_or_RW == 1)
-//    {
-//        if(*value <= 1000)
-//        {
-//            //LogOperation_ParameterChange( GlobalVariable.ConfigPara.LowStopTime, *value );      
-//            Log_AddParamChange(422, *value, *(((unsigned short *)&GlobalVariable.ConfigPara.LowStopTime)));
-//            *(((unsigned short *)&GlobalVariable.ConfigPara.LowStopTime)) = *value;
-//            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-//        }
-//    }
-}
-/*************************************************
-  Function              : RWFacingWindStopFunction_Enable_S()
-  Description           : RWFacingWindStopFunction_Enable_S
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.06.28
-  Additional Comments	  : ¾«¼òÐ­???£¬Ó­·çÍ£¿¿Ê¹???
-*************************************************/
-static void RWFacingWindStopFunction_Enable_S(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = GlobalVariable.ConfigPara.FacingWindStopFunction_Enable;
-    }
-//    else if(R_or_RW == 1)
-//    {        
-//		if((*value == 0) || (*value == 1 ))
-//				{
-//           //LogOperation_ParameterChange( GlobalVariable.ConfigPara.FacingWindStopFunction_Enable, *value );      
-//           Log_AddParamChange(423, *value, GlobalVariable.ConfigPara.FacingWindStopFunction_Enable);
-//           GlobalVariable.ConfigPara.FacingWindStopFunction_Enable = (unsigned short) *value;
-//           GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-//		}
-//    }
-}
-/*************************************************
-  Function              : RWEWFacingWindAngle_S()
-  Description           : RWEWFacingWindAngle_S
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.06.28
-  Additional Comments	  : ¾«¼òÐ­???,¶«Î÷Ó­???Í£¿¿???¶È£¬¸ß×Ö½Ú£º¶«Ó­???Í£¿¿???£»µÍ×Ö½Ú£ºÎ÷Ó­·çÍ£¿¿???
-*************************************************/
-static void RWEWFacingWindAngle_S(unsigned char R_or_RW, unsigned short *value)
-{
-	  unsigned short E_TempAngle, W_TempAngle;
-    if(R_or_RW == 0)
-    {
-        *value = (GlobalVariable.ConfigPara.EFacingWindAngle << 8) | GlobalVariable.ConfigPara.WFacingWindAngle ;
-    }
-//    else if(R_or_RW == 1)
-//    {
-//		E_TempAngle = ((*value) >> 8); //¶«Ó­·ç???¶ÈÈ¡¸ß8???
-//		W_TempAngle = ((*value) & 0xFF); //Î÷Ó­·ç???¶ÈÈ¥µÍ8???
-
-//			  
-//		if((E_TempAngle >= 30) &&  (E_TempAngle <= 150) )
-//        {
-//			Log_AddParamChange(424, *value, (GlobalVariable.ConfigPara.EFacingWindAngle << 8) | GlobalVariable.ConfigPara.WFacingWindAngle);
-//            //LogOperation_ParameterChange( GlobalVariable.ConfigPara.EFacingWindAngle, E_TempAngle );      
-//           *(((unsigned short *)&GlobalVariable.ConfigPara.EFacingWindAngle)) = E_TempAngle;
-//            GlobalVariable.WriteFlag.ConfigParaWrite = 1; 
-//        } 
-//				
-//        if((W_TempAngle >= 30) &&  (W_TempAngle <= 150) )
-//        {
-//			Log_AddParamChange(424, *value, (GlobalVariable.ConfigPara.EFacingWindAngle << 8) | GlobalVariable.ConfigPara.WFacingWindAngle);
-//            //LogOperation_ParameterChange( GlobalVariable.ConfigPara.WFacingWindAngle, W_TempAngle );      
-//           *(((unsigned short *)&GlobalVariable.ConfigPara.WFacingWindAngle)) = W_TempAngle;
-//            GlobalVariable.WriteFlag.ConfigParaWrite = 1; 
-//        } 
-//    }
-} 
-/*************************************************
-  Function              : RWBatteryLowTriggerValue_S()
-  Description           : Battery Low Trigger Value_S  
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.06.29
-  Additional Comments	  : 
-*************************************************/
-static void RWBatteryLowTriggerValue_S(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = GlobalVariable.ConfigPara.Battery_Low_TriggerValue;
-    }
-//    else if(R_or_RW == 1)
-//    {        
-//		if((*value >= 1800) && (*value <= 2940))
-//		{
-//           //LogOperation_ParameterChange( GlobalVariable.ConfigPara.Battery_Low_TriggerValue, *value );    
-//           Log_AddParamChange(425, *value, GlobalVariable.ConfigPara.Battery_Low_TriggerValue);
-//           GlobalVariable.ConfigPara.Battery_Low_TriggerValue = (unsigned short) *value;
-//           GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-//		}
-//    }
-}
-
-/*************************************************
-  Function              : RWBatteryLowRecoveryValue_S()
-  Description           : RWBatteryLowRecoveryValue_S  
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.06.29
-  Additional Comments	  : 
-*************************************************/
-static void RWBatteryLowRecoveryValue_S(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = GlobalVariable.ConfigPara.Battery_Low_RecoveryValue;
-    }
-//    else if(R_or_RW == 1)
-//    {        
-//		if((*value >= 1800) && (*value <= 2940))
-//		{
-//           //LogOperation_ParameterChange( GlobalVariable.ConfigPara.Battery_Low_RecoveryValue, *value );      
-//           Log_AddParamChange(426, *value, GlobalVariable.ConfigPara.Battery_Low_RecoveryValue);
-//           GlobalVariable.ConfigPara.Battery_Low_RecoveryValue = (unsigned short) *value;
-//           GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-//		}
-//    }
-} 
-/*************************************************
-  Function              : RWBatteryEmptyTriggerValue_S()
-  Description           : Battery Empty Trigger Value_S  
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.06.29
-  Additional Comments	  : 
-*************************************************/
-static void RWBatteryEmptyTriggerValue_S(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = GlobalVariable.ConfigPara.Battery_Empty_TriggerValue;
-    }
-//    else if(R_or_RW == 1)
-//    {        
-//		if((*value >= 1800) && (*value <= 2940))
-//				{
-//            //LogOperation_ParameterChange( GlobalVariable.ConfigPara.Battery_Empty_TriggerValue, *value );      
-//            Log_AddParamChange(427, *value, GlobalVariable.ConfigPara.Battery_Empty_TriggerValue);
-//            GlobalVariable.ConfigPara.Battery_Empty_TriggerValue = (unsigned short) *value;
-//            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-//		}
-//    }
-}
-
-/*************************************************
-  Function              : RWBatteryEmptyRecoveryValue_S()
-  Description           : Battery Empty Recovery Value_S  
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.06.29
-  Additional Comments	  : 
-*************************************************/
-static void RWBatteryEmptyRecoveryValue_S(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = GlobalVariable.ConfigPara.Battery_Empty_RecoveryValue;
-    }
-//    else if(R_or_RW == 1)
-//    {        
-//		if((*value >= 1800) && (*value <= 2940))
-//		{
-//           //LogOperation_ParameterChange( GlobalVariable.ConfigPara.Battery_Empty_RecoveryValue, *value );    
-//           Log_AddParamChange(428, *value, GlobalVariable.ConfigPara.Battery_Empty_RecoveryValue);
-//           GlobalVariable.ConfigPara.Battery_Empty_RecoveryValue = (unsigned short) *value;
-//           GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-//		}
-//    }
-}
-/*************************************************
-  Function              : RWBatteryHighTemperatureProtection_TriggerValue()
-  Description           : RWBatteryHighTemperatureProtection_TriggerValue
-  Input                 : null       
-  Output                : null        
-  Return                : null
-  Engineer				      : Huruihong
-  Revision				      : V0.0
-  Modified Date			    : 2023.05.03
-  Additional Comments	  : porting by longcd
-*************************************************/
-static void RWBatteryHighTemperatureProtection_Value_S(unsigned char R_or_RW, unsigned short *value)
-{
-	  unsigned short TriggerValue_Temp, ExitValue_Temp;
-	
-    if(R_or_RW == 0)
-    {
-        *value = (GlobalVariable.ConfigPara.BatteryHighTempProtectTriggerValue << 8) | GlobalVariable.ConfigPara.BatteryHighTempProtectExitValue;
-    }
-//    else if(R_or_RW == 1)
-//    {        
-//		TriggerValue_Temp = (*value >> 8);
-//		ExitValue_Temp = (*value & 0xFF);
-//		// LogOperation_ParameterChange( GlobalVariable.ConfigPara.BatteryHighTempProtectTriggerValue, *value );  
-//		if( (TriggerValue_Temp >= 25) && (TriggerValue_Temp <= 80) )	
-//		{				 
-//		   Log_AddParamChange(429, *value, (GlobalVariable.ConfigPara.BatteryHighTempProtectTriggerValue << 8) | GlobalVariable.ConfigPara.BatteryHighTempProtectExitValue);
-//           GlobalVariable.ConfigPara.BatteryHighTempProtectTriggerValue = TriggerValue_Temp;
-//           GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-//	     
-//		}
-//			 
-//		if( (ExitValue_Temp >= 25) && (ExitValue_Temp <= 80) )	
-//		{				 
-//		   Log_AddParamChange(429, *value, (GlobalVariable.ConfigPara.BatteryHighTempProtectTriggerValue << 8) | GlobalVariable.ConfigPara.BatteryHighTempProtectExitValue);
-//           GlobalVariable.ConfigPara.BatteryHighTempProtectExitValue = ExitValue_Temp;
-//           GlobalVariable.WriteFlag.ConfigParaWrite = 1;
-//		}
-//    }
-}
-
-/*************************************************
-*************************************************/
-extern void SetCtrlCmd_QueryLora(void);
-static void RWLoraHardwareStatus(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = GlobalVariable.SpecialCheck.LoraHardwareStatus;
-    }
-    else if(R_or_RW == 1)
-    {
-		SetCtrlCmd_QueryLora();
-    }
-}
-/*************************************************
-×Ó°åµçÁ÷CH1,CH2
-*************************************************/
-static void RWVoutCurrentCh1(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = GlobalVariable.SpecialCheck.VoutCurrentCh1;
-    }
-//    else if(R_or_RW == 1)
-//    {
-//    }
-}
-static void RWVoutCurrentCh2(unsigned char R_or_RW, unsigned short *value)
-{
-    if(R_or_RW == 0)
-    {
-        *value = GlobalVariable.SpecialCheck.VoutCurrentCh2;
-    }
-//    else if(R_or_RW == 1)
-//    {
-//    }
-}
-
-/***************************************************************************************************
-                                Jump table
-***************************************************************************************************/
-void ASProtocolInit()
-{
-    RWRegister[0]   = RDeviceEdition;
-    RWRegister[1]   = RWWorkMode1;
-    RWRegister[2]   = RWWorkMode2;
-    RWRegister[3]   = RWarningAndFault1;
-    RWRegister[4]   = RWarningAndFault2;
-    RWRegister[5]   = RDeviceType;
-    RWRegister[6]   = RWChannelEnable1;
-    RWRegister[7]   = RElevationAngle1;
-    RWRegister[8]   = RElevationAngle2;
-    RWRegister[9]   = RAzimuthAngle1;
-    RWRegister[10]  = RAzimuthAngle2;
-    
-    if ( GlobalVariable.ConfigPara.isMasterController ==NO)//´Ó»ú
-    {
-        RWRegister[11]  = RTargetAngle1;
-        RWRegister[12]  = RTargetAngle2;
-    }
-
-    if ( GlobalVariable.ConfigPara.isMasterController == YES)//Ö÷»ú
-    {
-        RWRegister[11]  = RTargetAngle;     
-        RWRegister[12]  = RRealAngle;      //Motor0Êµ¼Ê½Ç¶È
-    }
-
- 
-
-
-    RWRegister[13]  = RRealAngle1;
-    RWRegister[14]  = RRealAngle2;
-	RWRegister[15]  = RRealAngle3;
-    RWRegister[16]  = RRealAngle4;
-    RWRegister[17]  = RRealAngle5;
-	RWRegister[18]  = RRealAngle6;    
-	
-    RWRegister[19]   = ReadUIRightPanelMasterSlaveAlarmsHighPart2;  
-    RWRegister[20]   = ReadUIRightPanelMasterSlaveAlarmsLowPart2;
-    RWRegister[21]   = ReadUIRightPanelMasterSlaveAlarmsHighPart3;
-    RWRegister[22]   = ReadUIRightPanelMasterSlaveAlarmsLowPart3;
-    
-    RWRegister[23]  = RWTimeYear;
-    RWRegister[24]  = RWTimeMonth;
-    RWRegister[25]  = RWTimeDay;
-    RWRegister[26]  = RWTimeHour;
-    RWRegister[27]  = RWTimeMinute;
-    RWRegister[28]  = RWTimeSecond;
-    //RWRegister[29]  = RProtocol_Version;//RWChannelEnable;
-    RWRegister[29]  = RWChannelEnable2;//;	
-
-		RWRegister[31]  = RWRemoteWindDirect;
-    RWRegister[33]  = RWRemoteWindSpeed;
-    RWRegister[34]  = RWAIRemoteTarget;
-    
-		RWRegister[35]  = RMotorCurrent3;//´Ó»ú£ºMotor3 current
-		RWRegister[36]  = RMotorCurrent4;
-		RWRegister[37]  = RMotorCurrent5;
-		RWRegister[38]  = RMotorCurrent6;  
-    RWRegister[39]  = RTemp;
-    RWRegister[40]  = RMotorCurrent;  
-		RWRegister[41]  = RMotorCurrent1;
-		RWRegister[42]  = RMotorCurrent2;
-   // RWRegister[41]  = RWLogEnable;                //log enable
-//    RWRegister[42]  = RWPIDTarget;                //pdi target
-    RWRegister[43]  = RWProtectCurrent1;
-    RWRegister[44]  = RWProtectCurrent2;
-    RWRegister[45]  = RWLongitude1;
-    RWRegister[46]  = RWLongitude2;
-    RWRegister[47]  = RWLatitude1;
-    RWRegister[48]  = RWLatitude2;
-    RWRegister[49]  = RWTimeZone1;
-    RWRegister[50]  = RWTimeZone2;
-    RWRegister[51]  = RWEWTracingAccuracy1;
-    RWRegister[52]  = RWEWTracingAccuracy2;
-	RWRegister[REG_BATTERY_LOW_TRIGGER_VALUE]  = RWBatteryLowTriggerValue;	 //Battery Low Trigger	Value
-	RWRegister[REG_BATTERY_LOW_RECORERY_VALUE]	= RWBatteryLowRecoveryValue;  //Battery Low Recovery Value    
-    RWRegister[55]  = RPVBuckerVoltage;
-    RWRegister[56]  = RBatState;
-    RWRegister[57]  = RBatSOCTemp;
-    RWRegister[58]  = RBatVoltage;
-    RWRegister[59]  = RBatCurrent;
-	RWRegister[REG_BATTERY_EMPTY_TRIGGER_VALUE] = RWBatteryEmptyTriggerValue;	 //Battery Empty Trigger  Value;
-    
-
-
-
-    	RWRegister[76]  = RWWeaherState; //ÌìÆøÖ¸Áî
-
-
-//    RWRegister[61]  = RWMotorOverCurrentValueG1;
-//    RWRegister[62]  = RWMotorOverCurrentTimeG1;
-//    RWRegister[63]  = RWMotorOverCurrentValueG2;
-//    RWRegister[64]  = RWMotorOverCurrentTimeG2;
-//    RWRegister[65]  = RWMotorOverCurrentValueG3;
-//    RWRegister[66]  = RWMotorOverCurrentTimeG3;
-//    RWRegister[67]  = RWMotorOverCurrentValueG4;
-//    RWRegister[68]  = RWMotorOverCurrentTimeG4;
-//    RWRegister[69]  = RWMotorOverCurrentValueG5;
-//    RWRegister[70]  = RWMotorOverCurrentTimeG5;
-//    RWRegister[71]  = RWMotorOverCurrentValueG6;
-//    RWRegister[72]  = RWMotorOverCurrentTimeG6;
-//    RWRegister[73]  = RWMotorOverCurrentValueG7;
-//    RWRegister[74]  = RWMotorOverCurrentTimeG7;
-//    RWRegister[75]  = RWMotorOverCurrentValueG8;
-//    RWRegister[76]  = RWMotorOverCurrentTimeG8;
-//    RWRegister[77]  = RWMotorOverCurrentValueG9;
-//    RWRegister[78]  = RWMotorOverCurrentTimeG9;
-//    RWRegister[79]  = RWMotorOverCurrentValueG10;
-//    RWRegister[80]  = RWMotorOverCurrentTimeG10;
-
-
-
-
-
-    RWRegister[81]  = RWComID;
-    RWRegister[82]  = RWPowerMode;
-//    RWRegister[83]  = RWPIDKP;                      //PID KP
-    RWRegister[84]  = RWCleaningDockAngle;
-	RWRegister[85]  = RWMotorOrientation;
-    RWRegister[86]  = RVersion1;
-    RWRegister[87]  = RVersion2;
-    RWRegister[88]  = RWRS485Enable;
-    RWRegister[89]  = RWPVModuleWidth1;
-    RWRegister[90]  = RWPVModuleWidth2;
-    RWRegister[91]  = RWPostSpacing1;
-    RWRegister[92]  = RWPostSpacing2;
-    RWRegister[93]  = RWTerrainSlope1;
-    RWRegister[94]  = RWTerrainSlope2;
-    RWRegister[95]  = RWTerrainSlopeEvening;
-	RWRegister[REG_BATTERY_EMPTY_RECORERY_VALUE ] = RWBatteryEmptyRecoveryValue;	//Battery Empty Recovery Value
-    
-    RWRegister[98]  = RWNoComEnable;
-    RWRegister[99]  = RWUpWindSpeed;
-    RWRegister[100] = RWUpStartTime;
-    RWRegister[101] = RWLowWindSpeed;
-    RWRegister[102] = RWLowStopTime;
-    
-    RWRegister[103] = RWESoftLimitAngle1;
-    RWRegister[104] = RWESoftLimitAngle2;
-    RWRegister[105] = RWWSoftLimitAngle1;
-    RWRegister[106] = RWWSoftLimitAngle2;
-    
-    RWRegister[107] = RWHeatEnable;                   //Heat
-//    RWRegister[108] = RWPIDKI;                        //PID KI
-//    RWRegister[109] = RWPIDKD;                        //PID KD
-//    RWRegister[110] = RWPIDSlope;                     //PID Slope
-    
-    RWRegister[111] = RWBackAngle;
-//    RWRegister[112] = RWEWindProtectionAngle;
-//    RWRegister[113] = RWWWindProtectionAngle;
-	  RWRegister[112] = RWComID2;
-		RWRegister[113] = RWComID3;		
-	
-	//RWRegister[114] = RWInstallPostion; //no define 
-	  RWRegister[115] = RWSouthNorthShiftAngle;
-    RWRegister[116] = RWFacingWindStopFunction_Enable;
-    RWRegister[117] = RWEFacingWindAngle;
-    RWRegister[118] = RWWFacingWindAngle;
-
-	//porting by longcd
-    RWRegister[REG_BATTERY_HIGHTEMPPRO_TRIGGER_VALUE] = RWBatteryHighTemperatureProtection_TriggerValue; //120:????????,
-    RWRegister[REG_BATTERY_HIGHTEMPPRO_EXIT_VALUE]    = RWBatteryHighTemperatureProtection_ExitValue; //121:?????????????????,??????,????????
-	
-	RWRegister[REG_BATSOCLOWRUNBACK_WAITTIME] = RWBatSocLowRunBackWaitTime; //125
-   
-    RWRegister[REG_LOSTCOMM_BATSOCLOW_TARGET_ANGLE] = RWLostComm_BatsocLow_TargetAngle; //139
-
-
-    RWRegister[REG_RCOMM_TEST_CRCERR] = RCommuTestCrcErr;//181
-	RWRegister[REG_RCOMM_TEST_CRCOK] = RCommuTestCrcOk;
-	RWRegister[REG_RCOMM_TEST_REPLAY] = RCommuTestReply;
-	RWRegister[REG_RWCOMM_TEST_CLEARALL] = RWCommuTestClearAll; //184
-	//RWRegister[186] = RWModbusBusyCnt;   //°¢²¼Ôú±È
-	RWRegister[187] = RCommuTest_RecvID_Tracker_CrcOK; 
-	RWRegister[188] = RCommuTest_RecvID_Tracker_Reply;
-	RWRegister[189] = RCommuTest_RecvID_Tracker_CrcErr;
-	RWRegister[190] = RCommuTest_RecvID_00_CrcOK;
-	RWRegister[191] = RCommuTest_RecvID_00_CrcErr;
-    
-
-    RWRegister[131] = RWComID4; //
-    RWRegister[132] = RWComID5;	
-
-    RWRegister[REG_STOP_ALL_SLAVEMOTOR] = RWStopAllSlaveMotor; 
-    RWRegister[REG_SET_CONTROLER_ROLE] = RWEnableMasterController;//149
-    RWRegister[REG_SUBSLAVE_COUNT] = RWsubSlaveCount;//
-    RWRegister[REG_SUBSLAVE_POWER_SUPPLY_ENABLE] = RWsubSlavePowerSupplyEnable;
-    RWRegister[REG_STATIC_DIFF_ANGLE] = RWStaticDiffAngle;//
-    RWRegister[REG_MOVE_DIFF_ANGLE] = RWMoveDiffAngle;//
-
-
-
-    RWRegister[199] = RWYBTLoraParaEnable;
-    RWRegister[200] = RWManufactor;
-    RWRegister[201] = RWDeviceIDH;
-    RWRegister[202] = RWDeviceIDL;
-    RWRegister[203] = RWDeviceNetID;
-    
-    RWRegister[204] = RWYBTadd3;
-    RWRegister[205] = RWYBTadd4;
-    RWRegister[206] = RWYBTChannel;
-    RWRegister[207] = RWYBTadd6;
-    RWRegister[208] = RWYBTkeyH;
-    RWRegister[209] = RWYBTkeyL;
-    
-    RWRegister[210] = RWJXYLbaudrate;
-    RWRegister[211] = RWJXYLparity;
-    RWRegister[212] = RWJXYLfq1;
-    RWRegister[213] = RWJXYLfq2;
-    RWRegister[214] = RWJXYLfq3;
-    RWRegister[215] = RWJXYLfactor;
-    RWRegister[216] = RWJXYLmode;
-    RWRegister[217] = RWJXYLbw;
-    RWRegister[218] = RWJXYLpower;
-		
-
-    //¶ÁÈ¡BluetoothÄ£¿é²ÎÊýµÄÖ¸??		
-    RWRegister[REG_YBT_BLUETOOTH_MAC_EN] = RWYBTBluetoothParaEnable;
-    RWRegister[221] = RBluetoothMACPara1;
-    RWRegister[222] = RBluetoothMACPara2;
-    RWRegister[223] = RBluetoothMACPara3;
-    RWRegister[224] = RBluetoothMACPara4;
-    RWRegister[225] = RBluetoothMACPara5;
-    RWRegister[226] = RBluetoothMACPara6;
-
-	  RWRegister[300] = RProtocol_Version_S;
-		RWRegister[301] = RDeviceType_S; //Éè???Àà???
-		RWRegister[302] = RDeviceEdition_S; //´ó°æ??????
-		RWRegister[303] = RVersion1_S; //Ð¡°æ??????1
-		RWRegister[304] = RVersion2_S; //Ð¡°æ??????2
-		RWRegister[305] = RPVBuckerVoltage_S; //PV×é¼þµçÑ¹ (Óë¾ÉÐ­???·Å´ó±¶Êý²»Ò»???)
-		RWRegister[306] = RBatVoltage_S; //µç³ØµçÑ¹ (Óë¾ÉÐ­???·Å´ó±¶Êý²»Ò»???)
-		RWRegister[307] = RBatSOCTemp_S;//µç³ØµçÁ¿/µç³ØÎÂ¶È
-		RWRegister[308] = RTemp_S;//Ö÷°åÎÂ¶È
-		RWRegister[309] = RBatState_BatCurrent_S; //³äµç×´Ì¬¡¢³äµçµç???
-    RWRegister[310] = RWWorkMode1_S;//¹¤×÷Ä£Ê½1
-		RWRegister[311] = RWarningAndFault1_1_S;//Òì³£ÐÅÏ¢1¡ª??1
-    RWRegister[312] = RWarningAndFault1_2_S;//Òì³£ÐÅÏ¢1-2
-		RWRegister[313] = RMotorCurrent1_S; //µç»úµçÁ÷1
-    RWRegister[314] = RTargetAngle1_S;//???±ê???¶È1
-		RWRegister[315] = RRealAngle1_S;//???±ê???¶È1
-		//316-321£¬???ÓÃ
-		RWRegister[316] = RWWorkMode2_S;//¹¤×÷Ä£Ê½2
-		RWRegister[317] = RWarningAndFault2_1_S;//Òì³£ÐÅÏ¢2¡ª??1
-    RWRegister[318] = RWarningAndFault2_2_S;//Òì³£ÐÅÏ¢2-2
-		RWRegister[319] = RMotorCurrent2_S; //µç»úµçÁ÷2
-    RWRegister[320] = RTargetAngle2_S;//???±ê???¶È2
-		RWRegister[321] = RRealAngle2_S;//???±ê???¶È2
-		
-		//ÓëÍ¨???ÏäÏà¹ØÐÂÔöÐ­???ÇëÔÚ´ËÇøÓò???¼Ó???322-384
-		
-		//Í¨???Ïä¡¢ÉÏÎ»»ú¶ÁÐ´:384-396
-		RWRegister[384]  = RWAIRemoteTarget1_S;//Ô¶³Ì???±ê???¶È1
-    RWRegister[385]  = RWAIRemoteTarget2_S;//Ô¶³Ì???±ê???¶È2,±¸ÓÃ
-		RWRegister[386]  = RWRemoteWindSpeed_S;//Ô¶³Ì·ç??
-		RWRegister[387]  = RWRemoteWindDirect_S;//Ô¶³Ì·çÏò
-
-	RWRegister[388]  = RWTimeYearMonth_S;//ÄêÔÂ
-	RWRegister[389]  = RWTimeDayHour_S;//ÈÕÊ±
-	RWRegister[390]  = RWTimeMinuteSecond_S;//·Ö???
-	RWRegister[391]  = RWLongitude1_S;//¾­¶È
-	RWRegister[392]  = RWLongitude2_S;//¾­¶È
-	RWRegister[393]  = RWLatitude1_S;//??????
-	RWRegister[394]  = RWLatitude2_S;//??????
-	RWRegister[395]  = RWTimeZone1_S;//Ê±Çø
-	RWRegister[396]  = RWTimeZone2_S;//Ê±Çø
-
-		RWRegister[397]  = RElevationAngle1_S; //¸ß¶È???1
-		RWRegister[398]  = RAzimuthAngle1_S; //·½Î»???1
-		
-    RWRegister[399]  = RElevationAngle2_S;//¸ß¶È???2£¬???ÓÃ
-    RWRegister[400]  = RAzimuthAngle2_S;//·½Î»???2£¬???ÓÃ
-		
-		//¿ØÖÆÆ÷ÄÚ²¿²ÎÊý£¬ÉÏÎ»»ú???Ð´
-		RWRegister[401]  = RWComID_S; //¿ØÖÆÆ÷ID
-		RWRegister[402]  = RWChannelSelect_S; //Í¨µÀÑ¡Ôñ£¬±£???
-		RWRegister[403]  = RWEWTracingAccuracy_S;//¸ú×Ù¾«¶È
-		RWRegister[404]  = RWHeatEnable_S;//¼ÓÈÈÊ¹ÄÜ
-		RWRegister[405]  = RWMotorOrientation_S;//µç»ú³¯Ïò
-		RWRegister[406]  = RWProtectCurrent_S;//±£»¤µçÁ÷
-		
-		RWRegister[407]  = RWPVModuleWidth_S;//×é¼þ¿í¶È
-		RWRegister[408]  = RWPostSpacing_S;//Á¢Öù¼ä¾à
-		RWRegister[409]  = RWTerrainSlope1_S;//ÉÏÆÂ???1
-    RWRegister[410]  = RWTerrainSlopeEvening1_S;//ÏÂÆÂ???1
-		RWRegister[411]  = RWTerrainSlope2_S;//ÉÏÆÂ???2
-    RWRegister[412]  = RWTerrainSlopeEvening2_S;//ÏÂÆÂ???2
-		
-		RWRegister[413]  = RWSouthNorthShiftAngle1_S;//ÄÏ±±ÏòÆ«ÒÆ???¶È1
-		RWRegister[414]  = RWSouthNorthShiftAngle2_S;//ÄÏ±±ÏòÆ«ÒÆ???¶È2
-		RWRegister[415]  = RWEWSoftLimitAngle_S;//¶«Î÷???ÏÞÎ»
-		RWRegister[416]  = RWCleaningDockAngle_S;//ÇåÏ´½Ç¶È
-		RWRegister[417]  = RWBackAngle_S;//Ò¹·µ½Ç¶È
-		RWRegister[418]  = RWNoComEnable_S;//ÎÞÍ¨???Ê¹ÄÜ
-		RWRegister[419]  = RWUpWindSpeed_S;//½øÈë´ó???±£»¤?????
-    RWRegister[420]  = RWUpStartTime_S;//½øÈë´ó???±£»¤Ê±???
-    RWRegister[421]  = RWLowWindSpeed_S;//ÍË³ö´ó·ç±£»¤?????
-    RWRegister[422]  = RWLowStopTime_S;//ÍË³ö´ó·ç±£»¤Ê±???
-		RWRegister[423]  = RWFacingWindStopFunction_Enable_S;//Ó­???Í£¿¿¹¦ÄÜÊ¹???
-		RWRegister[424]  = RWEWFacingWindAngle_S;//¶«Î÷Ó­???Í£¿¿???¶È
-		
-		RWRegister[425]  = RWBatteryLowTriggerValue_S;   //Battery Low Trigger  Value
-    RWRegister[426]  = RWBatteryLowRecoveryValue_S;  //Battery Low Recovery Value
-    RWRegister[427]  = RWBatteryEmptyTriggerValue_S;   //Battery Empty Trigger  Value;
-    RWRegister[428]  = RWBatteryEmptyRecoveryValue_S;   //Battery Empty Recovery Value
-	 
-	RWRegister[429]  = RWBatteryHighTemperatureProtection_Value_S; //¸ßÎÂ±£»¤ãÐÖµ£º¸ß×Ö½Ú£º???¶¯ãÐÖµ£»µÍ×Ö½Ú£ºÍË³öãÐ???
-
-	RWRegister[431]  = RWLoraHardwareStatus;
-	RWRegister[432]  = RWVoutCurrentCh1;
-	RWRegister[433]  = RWVoutCurrentCh2;
-
-
-
-}
-
-void ASQProtocolInit()
-{
-    RWRegisterQ[0]   = RWWorkMode2;
-    RWRegisterQ[1]   = RTargetAngle;
-    RWRegisterQ[2]   = RRealAngle;
-    RWRegisterQ[3]   = RWarningAndFault1;
-    RWRegisterQ[4]   = RWarningAndFault2;
-    
-}
-
-void ASLProtocolInit()
-{
-    RWRegisterL[0]   = RResetCount1;      //Reset count
-    RWRegisterL[1]   = RResetCount2;
-    RWRegisterL[2]   = RWLogWarningSum;   //log warning sum
-    RWRegisterL[3]   = RWAskWarningNo;    //log warning No
-    RWRegisterL[4]   = RWLogOperationSum; //log operation sum
-    RWRegisterL[5]   = RWAskOperationNo;  //log operation No
-    RWRegisterL[6]   = (void *)0;  //
-    RWRegisterL[7]   = (void *)0;  //
-    RWRegisterL[8]   = (void *)0;  //
-    RWRegisterL[9]   = RWLogReadNum;  //log¶ÁÈ¡ÐòºÅ
-}
-
-
-
-
-
-
-
-
-//baseAddr = 20,000;
-void ASSlaveProtocolInit(void)
-{
-  //´Ó»ú±¨???ÐÅ??? n*5+0:±¨???ÐÅ???1-1 n*5+1:±¨???ÐÅ???1-2 n*5+2:µç»úÊµ¼Ê½Ç¶È1 n*5+3:µç»úÊµ¼Ê½Ç¶È2 n*5+4:µç»úÊµ¼Ê½Ç¶È3
-    RWRegisterSlave[0*5+0] =  RWWarningAndFaultOfSlave_1;//´Ó»ú1µÄ±¨¾¯ÐÅ???
-    RWRegisterSlave[0*5+1] =  RRealAngle1;//´Ó»ú1Êµ¼Ê½Ç¶È
-    RWRegisterSlave[0*5+2] =  RMotorCurrent1;//´Ó»ú1µç»úµçÁ÷
-
-    RWRegisterSlave[1*5+0] =  RWWarningAndFaultOfSlave_2; 
-    RWRegisterSlave[1*5+1] =  RRealAngle2; //´Ó»ú2Êµ¼Ê½Ç¶È
-    RWRegisterSlave[1*5+2] =  RMotorCurrent2; //´Ó»ú2µç»úµçÁ÷
-
-    RWRegisterSlave[2*5+0] =  RWWarningAndFaultOfSlave_3;
-    RWRegisterSlave[2*5+1] =  RRealAngle3; //´Ó»ú3Êµ¼Ê½Ç¶È
-    RWRegisterSlave[2*5+2] =  RMotorCurrent3; //´Ó»ú3µç»úµçÁ÷
-
-    RWRegisterSlave[3*5+0] =  RWWarningAndFaultOfSlave_4;
-    RWRegisterSlave[3*5+1] =  RRealAngle4; //´Ó»ú4Êµ¼Ê½Ç¶È
-    RWRegisterSlave[3*5+2] =  RMotorCurrent4; //´Ó»ú4µç»úµçÁ÷
-
-    RWRegisterSlave[4*5+0] =  RWWarningAndFaultOfSlave_5;
-    RWRegisterSlave[4*5+1] =  RRealAngle5; //´Ó»ú5Êµ¼Ê½Ç¶È
-    RWRegisterSlave[4*5+2] =  RMotorCurrent5; //´Ó»ú5µç»úµçÁ÷
-
-    RWRegisterSlave[5*5+0] =  RWWarningAndFaultOfSlave_6;
-    RWRegisterSlave[5*5+1] =  RRealAngle6; //´Ó»ú6Êµ¼Ê½Ç¶È
-    RWRegisterSlave[5*5+2] =  RMotorCurrent6; //´Ó»ú6µç»úµçÁ÷
-
-    RWRegisterSlave[6*5+0] =  RWWarningAndFaultOfSlave_7;
-    RWRegisterSlave[6*5+1] =  RRealAngle7; //´Ó»ú7Êµ¼Ê½Ç¶È
-    RWRegisterSlave[6*5+2] =  RMotorCurrent7; //´Ó»ú7µç»úµçÁ÷
-
-    RWRegisterSlave[7*5+0] =  RWWarningAndFaultOfSlave_8;
-    RWRegisterSlave[7*5+1] =  RRealAngle8; //´Ó»ú8Êµ¼Ê½Ç¶È
-    RWRegisterSlave[7*5+2] =  RMotorCurrent8; //´Ó»ú8µç»úµçÁ÷
-
-    RWRegisterSlave[8*5+0] =  RWWarningAndFaultOfSlave_9;
-    RWRegisterSlave[8*5+1] =  RRealAngle9; //´Ó»ú9Êµ¼Ê½Ç¶È
-    RWRegisterSlave[8*5+2] =  RMotorCurrent9; //´Ó»ú9µç»úµçÁ÷
-
-    RWRegisterSlave[9*5+0] =  RWWarningAndFaultOfSlave_10;
-    RWRegisterSlave[9*5+1] =  RRealAngle10; //´Ó»ú10Êµ¼Ê½Ç¶È
-    RWRegisterSlave[9*5+2] =  RMotorCurrent10; //´Ó»ú10µç»úµçÁ÷
-
-    RWRegisterSlave[10*5+0] =  RWWarningAndFaultOfSlave_11;
-    RWRegisterSlave[10*5+1] =  RRealAngle11; //´Ó»ú11Êµ¼Ê½Ç¶È   
-    RWRegisterSlave[10*5+2] =  RMotorCurrent11; //´Ó»ú11µç»úµçÁ÷
-
-    RWRegisterSlave[11*5+0] = RWWarningAndFaultOfSlave_12;
-    RWRegisterSlave[11*5+1] = RRealAngle12; //´Ó»ú12Êµ¼Ê½Ç¶È
-    RWRegisterSlave[11*5+2] = RMotorCurrent12; //´Ó»ú12µç»úµçÁ÷
-
-    RWRegisterSlave[12*5+0] = RWWarningAndFaultOfSlave_13;
-    RWRegisterSlave[12*5+1] = RRealAngle13; //´Ó»ú13Êµ¼Ê½Ç¶È
-    RWRegisterSlave[12*5+2] = RMotorCurrent13; //´Ó»ú13µç»úµçÁ÷
-
-    RWRegisterSlave[13*5+0] = RWWarningAndFaultOfSlave_14;
-    RWRegisterSlave[13*5+1] = RRealAngle14; //´Ó»ú14Êµ¼Ê½Ç¶È
-    RWRegisterSlave[13*5+2] = RMotorCurrent14; //´Ó»ú14µç»úµçÁ÷
-
-    RWRegisterSlave[14*5+0] = RWWarningAndFaultOfSlave_15;
-    RWRegisterSlave[14*5+1] = RRealAngle15; //´Ó»ú15Êµ¼Ê½Ç¶È
-    RWRegisterSlave[14*5+2] = RMotorCurrent15; //´Ó»ú15µç»úµçÁ÷
-
-    RWRegisterSlave[15*5+0] = RWWarningAndFaultOfSlave_16;
-    RWRegisterSlave[15*5+1] = RRealAngle16; //´Ó»ú16Êµ¼Ê½Ç¶È
-    RWRegisterSlave[15*5+2] = RMotorCurrent16; //´Ó»ú16µç»úµçÁ÷
-
-    RWRegisterSlave[16*5+0] = RWWarningAndFaultOfSlave_17;
-    RWRegisterSlave[16*5+1] = RRealAngle17; //´Ó»ú17Êµ¼Ê½Ç¶È
-    RWRegisterSlave[16*5+2] = RMotorCurrent17; //´Ó»ú17µç»úµçÁ÷
-
-    RWRegisterSlave[17*5+0] = RWWarningAndFaultOfSlave_18;
-    RWRegisterSlave[17*5+1] = RRealAngle18; //´Ó»ú18Êµ¼Ê½Ç¶È
-    RWRegisterSlave[17*5+2] = RMotorCurrent18; //´Ó»ú18µç»úµçÁ÷
-
-    RWRegisterSlave[18*5+0] = RWWarningAndFaultOfSlave_19;
-    RWRegisterSlave[18*5+1] = RRealAngle19; //´Ó»ú19Êµ¼Ê½Ç¶È
-    RWRegisterSlave[18*5+2] = RMotorCurrent19; //´Ó»ú19µç»úµçÁ÷
-
-    RWRegisterSlave[19*5+0] = RWWarningAndFaultOfSlave_20;
-    RWRegisterSlave[19*5+1] = RRealAngle20; //´Ó»ú20Êµ¼Ê½Ç¶È
-    RWRegisterSlave[19*5+2] = RMotorCurrent20; //´Ó»ú20µç»úµçÁ÷
-
-}
-
-void *GetASProtocl()
-{
-    return RWRegister;
-}
-void *GetASQProtocl()
-{
-    return RWRegisterQ;
-}
-void *GetASLProtocl()
-{
-    return RWRegisterL;
-}
-
-void *GetASSlaveProtocl()
-{
-    return RWRegisterSlave;
-}
-
-
-
-
-
+#include "GlobalDefine.h"
+#include "ASProtocol.h"
+#include "BackupRegister.h"
+#include "RtcLocalModule.h"
+#include "os.h"
+#include "MotorControl.h"
+#include "log.h"
+#include "math.h"
+#include "Init.h"
+#include <stdlib.h>
+#include "ModbusFrame.h"
+#include "gd32f30x.h"
+#include <master_slave_comm.h>
+extern GlobalVariableDef GlobalVariable;
+
+/* Cross-context shared (Luna fatal-4 fix 2026-06-20):
+ *   - written by RTC ISR / EXTI
+ *   - read by main loop / low-power entry
+ *   Must be volatile. Use safe_read_/safe_write_ from safe_atomic.h
+ *   for any compound operation (read-modify-write, multi-byte).
+ *   Currently only referenced by commented-out code; retained for
+ *   future re-enable. */
+volatile unsigned short us_tick __attribute__((aligned(4))) = 0;
+volatile unsigned char  uc_rtcFlag = 0;
+
+extern uint16_t	WeaherState;
+
+extern float	WeaherStateTime;
+extern unsigned char	WeaherStateTimeFlag;
+
+
+
+
+static const uint8_t valid_mode[] = {		//æœ‰æ•ˆæ¨¡å¼�
+	MAINTENANCE_MODE,
+	CLEAN_MODE,
+	ANGLE_CALIBRATION_MODE,
+	AUTO_MODE,
+	AUTO_RAIN_MODE,
+	AUTO_SNOW_MODE,
+	AUTO_WIND_MODE,
+//	0x29,
+	AUTO_AI_MODE,
+	AUTO_FLOOD_MODE,
+	MANUAL_MODE,
+	MANUAL_EAST_MODE,
+	MANUAL_WEST_MODE,
+	0x00,
+	0xff,
+	0xfe
+};
+
+
+/***************************************************************************************************
+                                     Private Variable
+***************************************************************************************************/
+/*R-0, RW-1*/
+static int8_t (* RWRegister[RWREGISTER_SUM])(unsigned char R_or_RW, unsigned short *value)={(void *)0};
+static int8_t (* RWRegisterQ[5] )(unsigned char R_or_RW, unsigned short *value)={(void *)0};
+static int8_t (* RWRegisterL[10]  )(unsigned char R_or_RW, unsigned short *value)={(void *)0};
+static int8_t (* RWRegisterSlave[200] )(unsigned char R_or_RW, unsigned short *value)={(void *)0};
+
+/***************************************************************************************************
+                                Jump function
+***************************************************************************************************/
+
+static int8_t RDeviceEdition(unsigned char R_or_RW, unsigned short *value );
+static int8_t RWWorkMode1(unsigned char R_or_RW, unsigned short *value );
+static int8_t RWWorkMode2(unsigned char R_or_RW, unsigned short *value );
+static int8_t RWarningAndFault1(unsigned char R_or_RW, unsigned short *value );
+static int8_t RWarningAndFault2(unsigned char R_or_RW, unsigned short *value );
+static int8_t RDeviceType(unsigned char R_or_RW, unsigned short *value);
+static int8_t RWChannelEnable1(unsigned char R_or_RW, unsigned short *value);
+static int8_t RWChannelEnable2(unsigned char R_or_RW, unsigned short *value);
+
+static int8_t RElevationAngle1(unsigned char R_or_RW, unsigned short *value);
+static int8_t RElevationAngle2(unsigned char R_or_RW, unsigned short *value);
+static int8_t RAzimuthAngle1(unsigned char R_or_RW, unsigned short *value);
+static int8_t RAzimuthAngle2(unsigned char R_or_RW, unsigned short *value);
+static int8_t RTargetAngle1(unsigned char R_or_RW, unsigned short *value);
+static int8_t RTargetAngle2(unsigned char R_or_RW, unsigned short *value);
+static int8_t RRealAngle1(unsigned char R_or_RW, unsigned short *value);
+static int8_t RRealAngle2(unsigned char R_or_RW, unsigned short *value);
+static int8_t RWTimeYear(unsigned char R_or_RW, unsigned short *value);
+static int8_t RWTimeMonth(unsigned char R_or_RW, unsigned short *value);
+static int8_t RWTimeDay(unsigned char R_or_RW, unsigned short *value);
+static int8_t RWTimeHour(unsigned char R_or_RW, unsigned short *value);
+static int8_t RWTimeMinute(unsigned char R_or_RW, unsigned short *value);
+static int8_t RWTimeSecond(unsigned char R_or_RW, unsigned short *value);
+static int8_t RWRemoteWindSpeed(unsigned char R_or_RW, unsigned short *value);
+static int8_t RWRemoteWindDirect(unsigned char R_or_RW, unsigned short *value);
+
+static int8_t RWAIRemoteTarget(unsigned char R_or_RW, unsigned short *value);
+static int8_t RTemp(unsigned char R_or_RW, unsigned short *value);
+
+static int8_t RMotorCurrent(unsigned char R_or_RW, unsigned short *value);
+static int8_t RWProtectCurrent1(unsigned char R_or_RW, unsigned short *value);
+static int8_t RWProtectCurrent2(unsigned char R_or_RW, unsigned short *value);
+static int8_t RWLongitude1(unsigned char R_or_RW, unsigned short *value);
+static int8_t RWLongitude2(unsigned char R_or_RW, unsigned short *value);
+static int8_t RWLatitude1(unsigned char R_or_RW, unsigned short *value);
+static int8_t RWLatitude2(unsigned char R_or_RW, unsigned short *value);
+static int8_t RWTimeZone1(unsigned char R_or_RW, unsigned short *value);
+static int8_t RWTimeZone2(unsigned char R_or_RW, unsigned short *value);
+static int8_t RWEWTracingAccuracy1(unsigned char R_or_RW, unsigned short *value);
+static int8_t RWEWTracingAccuracy2(unsigned char R_or_RW, unsigned short *value);
+static int8_t RPVBuckerVoltage(unsigned char R_or_RW, unsigned short *value);
+static int8_t RBatState(unsigned char R_or_RW, unsigned short *value);
+static int8_t RBatSOCTemp(unsigned char R_or_RW, unsigned short *value);
+static int8_t RBatVoltage(unsigned char R_or_RW, unsigned short *value);
+static int8_t RBatCurrent(unsigned char R_or_RW, unsigned short *value);
+
+static int8_t RWComID(unsigned char R_or_RW, unsigned short *value);
+static int8_t RWPowerMode(unsigned char R_or_RW, unsigned short *value);
+static int8_t RWCleaningDockAngle(unsigned char R_or_RW, unsigned short *value);
+
+static int8_t RWPVModuleWidth1(unsigned char R_or_RW, unsigned short *value);
+static int8_t RWPVModuleWidth2(unsigned char R_or_RW, unsigned short *value);
+static int8_t RWPostSpacing1(unsigned char R_or_RW, unsigned short *value);
+static int8_t RWPostSpacing2(unsigned char R_or_RW, unsigned short *value);
+static int8_t RWTerrainSlope1(unsigned char R_or_RW, unsigned short *value);
+static int8_t RWTerrainSlope2(unsigned char R_or_RW, unsigned short *value);
+
+static int8_t RWUpWindSpeed(unsigned char R_or_RW, unsigned short *value);
+static int8_t RWUpStartTime(unsigned char R_or_RW, unsigned short *value);
+static int8_t RWLowWindSpeed(unsigned char R_or_RW, unsigned short *value);
+static int8_t RWLowStopTime(unsigned char R_or_RW, unsigned short *value);
+static int8_t RWESoftLimitAngle1(unsigned char R_or_RW, unsigned short *value);
+static int8_t RWESoftLimitAngle2(unsigned char R_or_RW, unsigned short *value);
+static int8_t RWWSoftLimitAngle1(unsigned char R_or_RW, unsigned short *value);
+static int8_t RWWSoftLimitAngle2(unsigned char R_or_RW, unsigned short *value);
+static int8_t RWBackAngle(unsigned char R_or_RW, unsigned short *value);    
+static int8_t RWEWindProtectionAngle(unsigned char R_or_RW, unsigned short *value);
+static int8_t RWWWindProtectionAngle(unsigned char R_or_RW, unsigned short *value);
+
+//static int8_t RWInstallPostion(unsigned char R_or_RW, unsigned short *value);
+static int8_t RWSouthNorthShiftAngle(unsigned char R_or_RW, unsigned short *value);
+static int8_t RWFacingWindStopFunction_Enable(unsigned char R_or_RW, unsigned short *value);
+static int8_t RWEFacingWindAngle(unsigned char R_or_RW, unsigned short *value);
+static int8_t RWWFacingWindAngle(unsigned char R_or_RW, unsigned short *value);
+
+static int8_t RDeviceEdition(unsigned char R_or_RW, unsigned short *value )
+{
+    if(R_or_RW == 0)
+    {
+        *value = GlobalVariable.FixePara.DeviceEdition;
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+static int8_t RWWorkMode1(unsigned char R_or_RW, unsigned short *value )
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.WorkMode.WorkMode)+1);
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {
+        *(((unsigned short *)&GlobalVariable.WorkModeBuffer.WorkMode)+1) = *value;
+		Log_AddParamChange(1, *value, GlobalVariable.WorkMode.WorkMode >> 16);
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+static int8_t RWWorkMode2(unsigned char R_or_RW, unsigned short *value )
+{
+	int i;
+
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.WorkMode.WorkMode));
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {
+        //LogOperation_ParameterChange( GlobalVariable.WorkMode.WorkMode, GlobalVariable.WorkModeBuffer.WorkMode );
+			if((GlobalVariable.Weather.RemoteWindSpeed == 20)
+				||((GlobalVariable.WorkMode.WorkMode & 0x00ff) == MOTOR_ALARM_MODE) )    //å¦‚æžœé«˜???é€Ÿæˆ–è€…æ•…éšœç”µæœºæ¨¡å¼�ï¼Œä¸�æ”¯æŒ�æ”¹æ¨¡å¼�,å¤�ä½�é™¤???
+			{
+				if(*value != 0xFF)
+				{
+			     return AS_CB_ERR_INVALID;
+				}
+			}
+        *(((unsigned short *)&GlobalVariable.WorkModeBuffer.WorkMode)) = *value;
+		if((GlobalVariable.WorkMode.WorkMode & 0xffff) != *value)
+		{
+	        Log_AddWorkModeChange(*value, GlobalVariable.WorkMode.WorkMode,LOG_WORK_MODE_RCV);
+		}
+		
+		for(i = 0; i < sizeof(valid_mode)/sizeof(valid_mode[0]); i++)
+		{
+			if(*value == valid_mode[i])
+			{
+				break;
+			}
+		}
+
+		
+		if(i >= sizeof(valid_mode)/sizeof(valid_mode[0]))
+		{
+			return AS_CB_ERR_INVALID;	//é�žæœ‰æ•ˆæ¨¡å¼�ç›´æŽ¥è¿”???
+		}
+		
+        if((GlobalVariable.WorkModeBuffer.WorkMode & 0xFF) == 0xFF)
+        {
+            NVIC_SystemReset();
+        }
+        else if((GlobalVariable.WorkModeBuffer.WorkMode & 0xFF) == 0xFE)//
+        {
+			GlobalVariable.WorkMode.WorkMode = GlobalVariable.WorkMode.WorkMode; //å¦‚æžœæ”¶åˆ°é€š???ç®±å�œæœºæ¨¡å¼�ï¼Œä¿�æŒ�åŽŸæ¨¡å¼�ï¼Œä¸�å“�?
+//            MotorAllStop();            /* Stop */
+//            GlobalVariable.WorkModeBuffer.WorkMode = AUTO_TRACKER_MODE; 
+//					  RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);	//ä½¿èƒ½PWRå¤–???æ—¶???
+//	          
+//					  EXTI_InitTypeDef EXTI_InitStructure;
+// 	          NVIC_InitTypeDef NVIC_InitStructure;
+//  	        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);	//ä½¿èƒ½å¤�ç”¨åŠŸèƒ½æ—¶é’Ÿ
+
+					//						//GPIOE.2 ??????çº¿ä»¥å�Šä¸­???åˆ�???åŒ–é…�ç½®   ä¸‹é™�æ²¿è§¦???  LORA_RX : PA10
+//						GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource10);
+//					
+//						EXTI_InitStructure.EXTI_Line=EXTI_Line10;	//PA10
+//						EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;	
+//						EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling;
+//						EXTI_InitStructure.EXTI_LineCmd = ENABLE;
+//						EXTI_Init(&EXTI_InitStructure);	 	//æ ¹æ�®EXTI_InitStruct???æŒ‡å®šçš„å�‚æ•°åˆ�å§‹åŒ–å¤–???EXTIå¯„å­˜???
+
+//  	        NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;			//ä½¿èƒ½æŒ‰é”®WK_UPæ‰€åœ¨çš„å¤–éƒ¨??????é€šé�“
+//						NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;	//æŠ¢å� ä¼˜å…ˆ???2??? 
+//						NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x03;					//å­�ä¼˜å…ˆçº§3
+//						NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;								//ä½¿èƒ½å¤–éƒ¨??????é€šé�“
+//						NVIC_Init(&NVIC_InitStructure); 
+//						
+//						IWDG_ReloadCounter(); 
+//						IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
+//						IWDG_SetPrescaler(IWDG_Prescaler_256);
+//						IWDG_SetReload(0xFFF); 
+//						IWDG_ReloadCounter();
+//						
+//						RTC_Local_Init();
+//						
+//						us_tick = SysTick->CTRL;
+//			      SysTick->CTRL  = 0; 
+//	          PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);//STOPæ¨¡å¼�
+//						OS_ERR err; 
+//						OSSchedLock(&err);
+//						while(1)
+//						{
+//								if(uc_rtcFlag==1)
+//								{
+//										uc_rtcFlag = 0;
+//										SysTick->CTRL = us_tick;
+//										SystemInit();
+//										OS_CPU_SysTickInit(720000); 
+//										IWDG_ReloadCounter();
+//										RCC_LSICmd(ENABLE);
+//										RTC_WaitForSynchro();	
+//										RTC_Local_Init();
+//										us_tick = SysTick->CTRL;
+//										SysTick->CTRL  = 0; 
+//										PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);//STOPæ¨¡å¼�
+//								}
+//						} 
+        }
+        // else if ((GlobalVariable.WorkModeBuffer.WorkMode & 0xFF) == AUTO_AI_MODE)
+        // {
+        //     GlobalVariable.WorkMode.WorkMode = GlobalVariable.WorkModeBuffer.WorkMode;
+        //     GlobalVariable.AIPara.AIRemoteAngle=GlobalVariable.Motor[0].ActualAngle;
+        // }
+        // else
+        // {
+        // if ( GlobalVariable.ConfigPara.isMasterController == YES)//powerSlave:stay in manual mode
+        // {
+
+        //     if ((GlobalVariable.WorkModeBuffer.WorkMode & 0xFF) == 0x00)
+        //     {
+        //         SetStopMotorToSlaves(); 
+        //     }
+        //     GlobalVariable.WorkMode.WorkMode = GlobalVariable.WorkModeBuffer.WorkMode; 
+        // }
+
+            else if ((GlobalVariable.WorkModeBuffer.WorkMode & 0xFF) == AUTO_AI_MODE)
+        {
+            GlobalVariable.WorkMode.WorkMode = GlobalVariable.WorkModeBuffer.WorkMode;
+            GlobalVariable.AIPara.AIRemoteAngle=GlobalVariable.Motor[0].ActualAngle;
+        }
+        else
+        {
+          if ( GlobalVariable.ConfigPara.isMasterController == YES)
+          {
+             //only masterController can change workMode,powerSlave:stay in manual mode
+            GlobalVariable.WorkMode.WorkMode = GlobalVariable.WorkModeBuffer.WorkMode;
+          }
+        }    
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+//void EXTI15_10_IRQHandler(void)
+//{
+//	  NVIC_SystemReset();
+//}
+
+static int8_t RWarningAndFault1(unsigned char R_or_RW, unsigned short *value ) //High
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.SystemWarningAndFaultUpdate)+1); //
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RWarningAndFault2(unsigned char R_or_RW, unsigned short *value )//low
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.SystemWarningAndFaultUpdate)); //
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+static int8_t RDeviceType(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = GlobalVariable.FixePara.DeviceType;
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+// ä½Žä½�é€šé�“ä½¿èƒ½0åˆ°15é€šé�“
+static int8_t RWChannelEnable1(uint8_t R_or_RW, uint16_t *value)
+{
+    uint32_t *cfg = &GlobalVariable.ConfigPara.ChannelEnable;
+    uint32_t *buf = &GlobalVariable.ConfigParaBuffer.ChannelEnable;
+
+    if (R_or_RW == 0)        // è¯»ä½Ž16 bit
+    {
+        *value = (uint16_t)(*cfg & 0xFFFF);
+    }
+    else                    // å†™ä½Ž16 bit
+    {
+        // å†™å…¥ä½Ž16bitåˆ° buffer
+        *buf = (*buf & 0xFFFF0000) | (*value & 0xFFFF);
+
+        if (GlobalVariable.ConfigPara.isMasterController == NO)
+        {
+            *cfg = 0x00000001;  // ä»ŽæŽ§å�ªå…�è®¸é€šé�“ 0
+        }
+        else
+        {
+            // æ›´æ–°é…�ç½®ï¼šä½Ž16ä½�
+            *cfg = (*cfg & 0xFFFF0000) | (*value & 0xFFFF);
+        }
+
+        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+// é«˜ä½�é€šé�“ä½¿èƒ½16-31é€šé�“
+static int8_t RWChannelEnable2(uint8_t R_or_RW, uint16_t *value)
+{
+    uint32_t *cfg = &GlobalVariable.ConfigPara.ChannelEnable;
+    uint32_t *buf = &GlobalVariable.ConfigParaBuffer.ChannelEnable;
+
+    if (R_or_RW == 0)        // è¯»é«˜16 bit
+    {
+        *value = (uint16_t)((*cfg >> 16) & 0xFFFF);
+    }
+    else                    // å†™é«˜16 bit
+    {
+        // å†™å…¥é«˜16bitåˆ° buffer
+        *buf = (*buf & 0x0000FFFF) | (((uint32_t)*value) << 16);
+
+        if (GlobalVariable.ConfigPara.isMasterController == NO)
+        {
+            *cfg = 0x00000000; // ä»ŽæŽ§å¼ºåˆ¶å…³é—­å…¨éƒ¨é€šé�“
+        }
+        else
+        {
+            uint16_t oldHigh = (uint16_t)((*cfg >> 16) & 0xFFFF);
+            uint16_t oldLow  = (uint16_t)(*cfg & 0xFFFF);
+
+            // å†™æ—¥å¿—
+            Log_AddParamChange(6,  *value,  oldHigh);
+            Log_AddParamChange(29, *value,  oldLow);
+
+            // æ›´æ–°é…�ç½®ï¼šé«˜16ä½�
+            *cfg = (*cfg & 0x0000FFFF) | (((uint32_t)*value) << 16);
+
+            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+        }
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+
+// static int8_t RWESoftLimitAngle1(unsigned char R_or_RW, unsigned short *value)
+// {
+//     if(R_or_RW == 0)
+//     {
+//         *value = *(((unsigned short *)&GlobalVariable.ConfigPara.ESoftLimitAngle)+1);
+//     }
+//     else if(R_or_RW == 1)
+//     {
+//         *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.ESoftLimitAngle)+1) = *value;
+//     }
+// }
+// static int8_t RWESoftLimitAngle2(unsigned char R_or_RW, unsigned short *value)
+// {
+//     if(R_or_RW == 0)
+//     {
+//         *value = *(((unsigned short *)&GlobalVariable.ConfigPara.ESoftLimitAngle));
+//     }
+//     else if(R_or_RW == 1)
+//     {   
+//         *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.ESoftLimitAngle)) = *value;
+//         if((GlobalVariable.ConfigParaBuffer.ESoftLimitAngle >  29.9f )
+//             && (GlobalVariable.ConfigParaBuffer.ESoftLimitAngle  < 150.1f) )
+//         {
+//             Log_AddParamChange(103, *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.ESoftLimitAngle)+1), *(((unsigned short *)&GlobalVariable.ConfigPara.ESoftLimitAngle)+1));
+// 			Log_AddParamChange(104, *value, *(((unsigned short *)&GlobalVariable.ConfigPara.ESoftLimitAngle)));
+//             GlobalVariable.ConfigPara.ESoftLimitAngle = GlobalVariable.ConfigParaBuffer.ESoftLimitAngle;
+//             GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+//         }
+        
+//     }
+// }
+
+
+
+
+
+
+
+
+
+
+
+
+static int8_t RElevationAngle1(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.AstronomyPara.ElevationAngle)+1);
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RElevationAngle2(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.AstronomyPara.ElevationAngle));
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RAzimuthAngle1(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.AstronomyPara.AzimuthAngle)+1);
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RAzimuthAngle2(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.AstronomyPara.AzimuthAngle));
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+static int8_t RTargetAngle(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+//        *value = *(((unsigned short *)&GlobalVariable.WorkMode.Target)+1);
+			   *value = GlobalVariable.WorkMode.Target * 100.0f;
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+
+static int8_t RTargetAngle1(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.WorkMode.Target)+1);
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RTargetAngle2(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.WorkMode.Target));
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+
+
+static int8_t RRealAngle(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = GlobalVariable.Motor[0].ActualAngle * 100.0f;
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RRealAngle1(unsigned char R_or_RW, unsigned short *value)
+{
+    if (YES == GlobalVariable.ConfigPara.isMasterController)
+    {   
+        if(R_or_RW == 0)
+        {
+                  if(((GlobalVariable.ConfigPara.ChannelEnable >> 1) & 0x01) == ENABLE)
+                    {
+                     *value = GlobalVariable.Motor[1].ActualAngle * 100.0f;
+                    }
+        return AS_CB_OK;
+    }
+    }
+    else
+    {
+        if(R_or_RW == 0)
+        {
+            *value = *(((unsigned short *)&GlobalVariable.Motor[0].ActualAngle)+1);
+        }
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RRealAngle2(unsigned char R_or_RW, unsigned short *value)
+{
+   if (YES == GlobalVariable.ConfigPara.isMasterController)
+    {
+        if(R_or_RW == 0)
+        {
+                  if(((GlobalVariable.ConfigPara.ChannelEnable >> 2) & 0x01) == ENABLE)
+                    {
+               *value = GlobalVariable.Motor[2].ActualAngle * 100.0f;
+                    }
+        return AS_CB_OK;
+    }
+    }
+    else
+    {
+        if(R_or_RW == 0)
+        {
+            *value = *(((unsigned short *)&GlobalVariable.Motor[0].ActualAngle));
+        }
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RRealAngle3(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+         if(((GlobalVariable.ConfigPara.ChannelEnable >> 3) & 0x01) == ENABLE)
+				{
+           *value = GlobalVariable.Motor[3].ActualAngle * 100.0f;
+				}
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RRealAngle4(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+         if(((GlobalVariable.ConfigPara.ChannelEnable >> 4) & 0x01) == ENABLE)
+				{
+           *value = GlobalVariable.Motor[4].ActualAngle * 100.0f;
+				}
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+static int8_t RRealAngle5(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+         if(((GlobalVariable.ConfigPara.ChannelEnable >> 5) & 0x01) == ENABLE)
+				{
+           *value = GlobalVariable.Motor[5].ActualAngle * 100.0f;
+				}
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RRealAngle6(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+         if(((GlobalVariable.ConfigPara.ChannelEnable >> 6) & 0x01) == ENABLE)
+				{
+           *value = GlobalVariable.Motor[6].ActualAngle * 100.0f;
+				}
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+
+static int8_t RRealAngle7(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+         if(((GlobalVariable.ConfigPara.ChannelEnable >> 7) & 0x01) == ENABLE)
+                {
+           *value = GlobalVariable.Motor[7].ActualAngle * 100.0f;
+                }
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RRealAngle8(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+         if(((GlobalVariable.ConfigPara.ChannelEnable >> 8) & 0x01) == ENABLE)
+                {
+           *value = GlobalVariable.Motor[8].ActualAngle * 100.0f;
+                }
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RRealAngle9(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+         if(((GlobalVariable.ConfigPara.ChannelEnable >> 9) & 0x01) == ENABLE)
+                {
+           *value = GlobalVariable.Motor[9].ActualAngle * 100.0f;
+                }
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}   
+static int8_t RRealAngle10(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+         if(((GlobalVariable.ConfigPara.ChannelEnable >> 10) & 0x01) == ENABLE)
+                {
+           *value = GlobalVariable.Motor[10].ActualAngle * 100.0f;
+                }
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RRealAngle11(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+         if(((GlobalVariable.ConfigPara.ChannelEnable >> 11) & 0x01) == ENABLE)
+                {
+           *value = GlobalVariable.Motor[11].ActualAngle * 100.0f;
+                }
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}   
+static int8_t RRealAngle12(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+         if(((GlobalVariable.ConfigPara.ChannelEnable >> 12) & 0x01) == ENABLE)
+                {
+           *value = GlobalVariable.Motor[12].ActualAngle * 100.0f;
+                }
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RRealAngle13(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+         if(((GlobalVariable.ConfigPara.ChannelEnable >> 13) & 0x01) == ENABLE)
+                {
+           *value = GlobalVariable.Motor[13].ActualAngle * 100.0f;
+                }
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}   
+static int8_t RRealAngle14(unsigned char R_or_RW, unsigned short *value   )
+{
+    if(R_or_RW == 0)
+    {
+         if(((GlobalVariable.ConfigPara.ChannelEnable >> 14) & 0x01) == ENABLE)
+                {
+           *value = GlobalVariable.Motor[14].ActualAngle * 100.0f;
+                }
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RRealAngle15(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+         if(((GlobalVariable.ConfigPara.ChannelEnable >> 15) & 0x01) == ENABLE)
+                {
+           *value = GlobalVariable.Motor[15].ActualAngle * 100.0f;
+                }
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}   
+static int8_t RRealAngle16(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+         if(((GlobalVariable.ConfigPara.ChannelEnable >> 16) & 0x01) == ENABLE)
+                {
+           *value = GlobalVariable.Motor[16].ActualAngle * 100.0f;
+                }
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+static int8_t RRealAngle17(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+         if(((GlobalVariable.ConfigPara.ChannelEnable >> 17) & 0x01) == ENABLE)
+                {
+           *value = GlobalVariable.Motor[17].ActualAngle * 100.0f;
+                }
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RRealAngle18(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+         if(((GlobalVariable.ConfigPara.ChannelEnable >> 18) & 0x01) == ENABLE)
+                {
+           *value = GlobalVariable.Motor[18].ActualAngle * 100.0f;
+                }
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}   
+static int8_t RRealAngle19(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+         if(((GlobalVariable.ConfigPara.ChannelEnable >> 19) & 0x01) == ENABLE)
+                {
+           *value = GlobalVariable.Motor[19].ActualAngle * 100.0f;
+                }
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RRealAngle20(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+         if(((GlobalVariable.ConfigPara.ChannelEnable >> 20) & 0x01) == ENABLE)
+                {
+           *value = GlobalVariable.Motor[20].ActualAngle * 100.0f;
+                }
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+
+
+
+
+
+static int8_t RWTimeYear(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = GlobalVariable.Time.Year;
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {
+        //LogOperation_ParameterChange( GlobalVariable.TimeBuffer.Year, *value );  
+        //Log_AddParamChange(23, *value, GlobalVariable.TimeBuffer.Year);
+        GlobalVariable.TimeBuffer.Year = *value;
+        GlobalVariable.WriteFlag.TimeWrite = 1;
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RWTimeMonth(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = GlobalVariable.Time.Month;
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {
+        //LogOperation_ParameterChange( GlobalVariable.TimeBuffer.Month, *value );   
+		//Log_AddParamChange(24, *value, GlobalVariable.TimeBuffer.Month);
+        GlobalVariable.TimeBuffer.Month = *value;
+        GlobalVariable.WriteFlag.TimeWrite = 1;
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RWTimeDay(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = GlobalVariable.Time.Day;
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {
+        //LogOperation_ParameterChange( GlobalVariable.TimeBuffer.Day, *value );  
+		//Log_AddParamChange(25, *value, GlobalVariable.TimeBuffer.Day);
+        GlobalVariable.TimeBuffer.Day = *value;
+        GlobalVariable.WriteFlag.TimeWrite = 1;
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RWTimeHour(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = GlobalVariable.Time.Hour;
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {
+        //LogOperation_ParameterChange( GlobalVariable.TimeBuffer.Hour, *value );    
+		//Log_AddParamChange(26, *value, GlobalVariable.TimeBuffer.Hour);
+        GlobalVariable.TimeBuffer.Hour = *value;
+        GlobalVariable.WriteFlag.TimeWrite = 1;
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RWTimeMinute(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = GlobalVariable.Time.Minute;
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {
+        //LogOperation_ParameterChange( GlobalVariable.TimeBuffer.Minute, *value );   
+		//Log_AddParamChange(27, *value, GlobalVariable.TimeBuffer.Minute);
+        GlobalVariable.TimeBuffer.Minute = *value;
+        GlobalVariable.WriteFlag.TimeWrite = 1;
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RWTimeSecond(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = GlobalVariable.Time.Second;
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {
+        //LogOperation_ParameterChange( GlobalVariable.TimeBuffer.Second, *value );    
+		//Log_AddParamChange(28, *value, GlobalVariable.TimeBuffer.Second);
+        GlobalVariable.TimeBuffer.Second = *value;
+        BKPWriteRTCUpdateFlag();
+        GlobalVariable.WriteFlag.TimeWrite = 1;
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+static int8_t RWRemoteWindDirect(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = GlobalVariable.Weather.RemoteWindDirect;
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {
+    	Log_AddParamChange(31, *value, GlobalVariable.Weather.RemoteWindDirect);
+        GlobalVariable.Weather.RemoteWindDirect = *value;
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+static int8_t RWRemoteWindSpeed(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = GlobalVariable.Weather.RemoteWindSpeed;
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {
+        //LogOperation_ParameterChange( GlobalVariable.Weather.RemoteWindSpeed, *value );
+			  
+			if(*value != GlobalVariable.Weather.RemoteWindSpeed)
+			{   
+				if(20 == *value || 20 == GlobalVariable.Weather.RemoteWindSpeed)
+                {
+					Log_AddParamChange(33, *value, GlobalVariable.Weather.RemoteWindSpeed);
+				}
+			}
+        GlobalVariable.Weather.RemoteWindSpeed = *value;
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+static int8_t RWAIRemoteTarget(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = (unsigned short)GlobalVariable.AIPara.AIRemoteAngle;
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {
+        //LogOperation_ParameterChange( GlobalVariable.AIPara.AIRemoteAngle, *value );   
+		Log_AddParamChange(34, *value, GlobalVariable.AIPara.AIRemoteAngle);
+        GlobalVariable.AIPara.AIRemoteAngle = (float)*value;
+        GlobalVariable.AIPara.AIModeDelayCount = 1;
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+static int8_t RTemp(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(unsigned short *)&GlobalVariable.Tmp.BoardTmp;
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+static int8_t RMotorCurrent(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = (short)(GlobalVariable.Motor[0].Motorcurrent * 10);  //
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RMotorCurrent1(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+			 if(((GlobalVariable.ConfigPara.ChannelEnable >> 1) & 0x01) == ENABLE)
+			 {
+          *value = (short)(GlobalVariable.Motor[1].Motorcurrent * 10);  //
+        //  *value = 3000;
+			 }
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RMotorCurrent2(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+       if(((GlobalVariable.ConfigPara.ChannelEnable >> 2) & 0x01) == ENABLE)
+			 {
+          *value = (short)(GlobalVariable.Motor[2].Motorcurrent * 10);  //
+			 }
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RMotorCurrent3(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+       if(((GlobalVariable.ConfigPara.ChannelEnable >> 3) & 0x01) == ENABLE)
+			 {
+          *value = (short)(GlobalVariable.Motor[3].Motorcurrent * 10);  //
+			 }
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RMotorCurrent4(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+       if(((GlobalVariable.ConfigPara.ChannelEnable >> 4) & 0x01) == ENABLE)
+			 {
+          *value = (short)(GlobalVariable.Motor[4].Motorcurrent * 10);  //
+			 }
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RMotorCurrent5(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+       if(((GlobalVariable.ConfigPara.ChannelEnable >> 5) & 0x01) == ENABLE)
+			 {
+          *value = (short)(GlobalVariable.Motor[5].Motorcurrent * 10);  //
+			 }
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RMotorCurrent6(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+       if(((GlobalVariable.ConfigPara.ChannelEnable >> 6) & 0x01) == ENABLE)
+			 {
+          *value = (short)(GlobalVariable.Motor[6].Motorcurrent * 10);  //
+			 }
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+static int8_t RMotorCurrent7(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+       if(((GlobalVariable.ConfigPara.ChannelEnable >> 7) & 0x01) == ENABLE)
+             {
+          *value = (short)(GlobalVariable.Motor[7].Motorcurrent * 10);  //
+             }
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}   
+static int8_t RMotorCurrent8(unsigned char R_or_RW, unsigned short *value )
+{
+    if(R_or_RW == 0)
+    {
+       if(((GlobalVariable.ConfigPara.ChannelEnable >> 8) & 0x01) == ENABLE)
+             {
+          *value = (short)(GlobalVariable.Motor[8].Motorcurrent * 10);  //
+             }
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RMotorCurrent9(unsigned char R_or_RW, unsigned short *value )
+{
+    if(R_or_RW == 0)
+    {
+       if(((GlobalVariable.ConfigPara.ChannelEnable >> 9) & 0x01) == ENABLE)
+             {
+          *value = (short)(GlobalVariable.Motor[9].Motorcurrent * 10);  //
+             }
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+} 
+static int8_t RMotorCurrent10(unsigned char R_or_RW, unsigned short *value )
+{
+    if(R_or_RW == 0)
+    {
+       if(((GlobalVariable.ConfigPara.ChannelEnable >> 10) & 0x01) == ENABLE)
+             {
+          *value = (short)(GlobalVariable.Motor[10].Motorcurrent * 10);  //
+             }
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RMotorCurrent11(unsigned char R_or_RW, unsigned short *value )
+{
+    if(R_or_RW == 0)
+    {
+       if(((GlobalVariable.ConfigPara.ChannelEnable >> 11) & 0x01) == ENABLE)
+             {
+          *value = (short)(GlobalVariable.Motor[11].Motorcurrent * 10);  //
+             }
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RMotorCurrent12(unsigned char R_or_RW, unsigned short *value )
+{
+    if(R_or_RW == 0)
+    {
+       if(((GlobalVariable.ConfigPara.ChannelEnable >> 12) & 0x01) == ENABLE)
+             {
+          *value = (short)(GlobalVariable.Motor[12].Motorcurrent * 10);  //
+             }
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}   
+static int8_t RMotorCurrent13(unsigned char R_or_RW, unsigned short *value )
+{
+    if(R_or_RW == 0)
+    {
+       if(((GlobalVariable.ConfigPara.ChannelEnable >> 13) & 0x01) == ENABLE)
+             {
+          *value = (short)(GlobalVariable.Motor[13].Motorcurrent * 10);  //
+             }
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RMotorCurrent14(unsigned char R_or_RW, unsigned short *value )
+{
+    if(R_or_RW == 0)
+    {
+       if(((GlobalVariable.ConfigPara.ChannelEnable >> 14) & 0x01) == ENABLE)
+             {
+          *value = (short)(GlobalVariable.Motor[14].Motorcurrent * 10);  //
+             }
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RMotorCurrent15(unsigned char R_or_RW, unsigned short *value )
+{
+    if(R_or_RW == 0)
+    {
+       if(((GlobalVariable.ConfigPara.ChannelEnable >> 15) & 0x01) == ENABLE)
+             {
+          *value = (short)(GlobalVariable.Motor[15].Motorcurrent * 10);  //
+             }
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RMotorCurrent16(unsigned char R_or_RW, unsigned short *value )
+{
+    if(R_or_RW == 0)
+    {
+       if(((GlobalVariable.ConfigPara.ChannelEnable >> 16) & 0x01) == ENABLE)
+             {
+          *value = (short)(GlobalVariable.Motor[16].Motorcurrent * 10);  //
+             }
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+} 
+
+static int8_t RMotorCurrent17(unsigned char R_or_RW, unsigned short *value )
+{
+    if(R_or_RW == 0)
+    {
+       if(((GlobalVariable.ConfigPara.ChannelEnable >> 17) & 0x01) == ENABLE)
+             {
+          *value = (short)(GlobalVariable.Motor[17].Motorcurrent * 10);  //
+             }
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RMotorCurrent18(unsigned char R_or_RW, unsigned short *value )
+{
+    if(R_or_RW == 0)
+    {
+       if(((GlobalVariable.ConfigPara.ChannelEnable >> 18) & 0x01) == ENABLE)
+             {
+          *value = (short)(GlobalVariable.Motor[18].Motorcurrent * 10);  //
+             }
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RMotorCurrent19(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+       if(((GlobalVariable.ConfigPara.ChannelEnable >> 19) & 0x01) == ENABLE)
+             {
+          *value = (short)(GlobalVariable.Motor[19].Motorcurrent * 10);  //
+             }
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RMotorCurrent20(unsigned char R_or_RW, unsigned short *value )
+{
+    if(R_or_RW == 0)
+    {
+       if(((GlobalVariable.ConfigPara.ChannelEnable >> 20) & 0x01) == ENABLE)
+             {
+          *value = (short)(GlobalVariable.Motor[20].Motorcurrent * 10);  //
+             }
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+
+
+
+static int8_t RWProtectCurrent1(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.MotorOverCurrentValue)+1);
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {
+        *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.MotorOverCurrentValue)+1) = *value;
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+static int8_t RWProtectCurrent2(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.MotorOverCurrentValue));
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {
+        *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.MotorOverCurrentValue)) = *value;
+        //LogOperation_ParameterChange( GlobalVariable.ConfigPara.MotorOverCurrentValue, GlobalVariable.ConfigParaBuffer.MotorOverCurrentValue ); 
+      
+        if( (GlobalVariable.ConfigParaBuffer.MotorOverCurrentValue > 0.19f) && 
+            (GlobalVariable.ConfigParaBuffer.MotorOverCurrentValue < 20.1f )  ) //???6.1æ”¾å¤§???20.1é™�åˆ¶
+        {
+            Log_AddParamChange(43, *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.MotorOverCurrentValue)+1), *(((unsigned short *)&GlobalVariable.ConfigPara.MotorOverCurrentValue)+1));
+        	Log_AddParamChange(44, *value, *(((unsigned short *)&GlobalVariable.ConfigPara.MotorOverCurrentValue)));
+            GlobalVariable.ConfigPara.MotorOverCurrentValue = GlobalVariable.ConfigParaBuffer.MotorOverCurrentValue;
+            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+
+    
+                GlobalVariable.SpecialCheck.MasterSetProCurrentToSlaveFlag = 1;
+
+            
+        }
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+/* Longitude */
+static int8_t RWLongitude1(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.Longitude)+1);
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {
+        *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.Longitude)+1) = *value;
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RWLongitude2(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.Longitude));
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {
+        *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.Longitude)) = *value;
+        if(GlobalVariable.ConfigParaBuffer.Longitude >= -180.0
+            &&GlobalVariable.ConfigParaBuffer.Longitude <= 180.0 )
+        {
+					if(fabs(GlobalVariable.ConfigParaBuffer.Longitude - GlobalVariable.ConfigPara.Longitude) >= 0.1f ) //???7.8??????
+					{
+						Log_AddParamChange(45, *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.Longitude)+1), *(((unsigned short *)&GlobalVariable.ConfigPara.Longitude)+1));
+      			        Log_AddParamChange(46, *value, *(((unsigned short *)&GlobalVariable.ConfigPara.Longitude)));						
+						GlobalVariable.ConfigPara.Longitude = GlobalVariable.ConfigParaBuffer.Longitude;
+                        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+					}  
+        }
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+/* Latitude */
+static int8_t RWLatitude1(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.Latitude)+1);
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {
+        *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.Latitude)+1) = *value;
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RWLatitude2(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.Latitude));
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {
+        *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.Latitude)) = *value;
+        if(GlobalVariable.ConfigParaBuffer.Latitude >= -90.0 
+            && GlobalVariable.ConfigParaBuffer.Latitude <= 90.0)
+        {
+            if(fabs(GlobalVariable.ConfigParaBuffer.Latitude - GlobalVariable.ConfigPara.Latitude) >= 0.1f )//???7.8??????
+            {
+                Log_AddParamChange(47, *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.Latitude)+1), *(((unsigned short *)&GlobalVariable.ConfigPara.Latitude)+1));
+                Log_AddParamChange(48, *value, *(((unsigned short *)&GlobalVariable.ConfigPara.Latitude)));					
+                GlobalVariable.ConfigPara.Latitude = GlobalVariable.ConfigParaBuffer.Latitude;
+                GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+            }       
+        }
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RWTimeZone1(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.TimeZone)+1);
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {
+//    	Log_AddParamChange(49, *value, *(((unsigned short *)&GlobalVariable.ConfigPara.TimeZone)+1));
+        *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.TimeZone)+1) = *value;
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RWTimeZone2(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.TimeZone));
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {
+        *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.TimeZone)) = *value;
+        if(GlobalVariable.ConfigParaBuffer.TimeZone >= -12.0
+            && GlobalVariable.ConfigParaBuffer.TimeZone <= 12.0)
+        {
+            if(fabs(GlobalVariable.ConfigParaBuffer.TimeZone - GlobalVariable.ConfigPara.TimeZone) >= 0.5f )
+            {
+                Log_AddParamChange(49, *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.TimeZone)+1), *(((unsigned short *)&GlobalVariable.ConfigPara.TimeZone)+1));
+                Log_AddParamChange(50,	*value, *(((unsigned short *)&GlobalVariable.ConfigPara.TimeZone)));
+
+                GlobalVariable.ConfigPara.TimeZone = GlobalVariable.ConfigParaBuffer.TimeZone;
+                GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+            }
+            
+        }
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RWEWTracingAccuracy1(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+         *value = *(((unsigned short *)&GlobalVariable.ConfigPara.EWTracingAccuracy)+1);
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {    	
+        *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.EWTracingAccuracy)+1) = *value;
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RWEWTracingAccuracy2(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.EWTracingAccuracy));
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {
+        *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.EWTracingAccuracy)) = *value;
+        if(GlobalVariable.ConfigParaBuffer.EWTracingAccuracy >= 0.98
+            && GlobalVariable.ConfigParaBuffer.EWTracingAccuracy <= 5.1)
+        {
+            Log_AddParamChange(51, *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.EWTracingAccuracy)+1), *(((unsigned short *)&GlobalVariable.ConfigPara.EWTracingAccuracy)+1));
+			Log_AddParamChange(52, *value, *(((unsigned short *)&GlobalVariable.ConfigPara.EWTracingAccuracy)));
+            GlobalVariable.ConfigPara.EWTracingAccuracy = GlobalVariable.ConfigParaBuffer.EWTracingAccuracy;
+            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+        }
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+static int8_t RPVBuckerVoltage(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = (unsigned short)(GlobalVariable.PowerPara.PVBuckerVoltage * 10);
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RBatState(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = 0;
+        *value |= *(unsigned char*)(&GlobalVariable.PowerPara.ChargeState);
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RBatSOCTemp(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = 0x00FF & (unsigned char)(GlobalVariable.PowerPara.BatterySOC*100);
+        *value = *value << 8;
+        *value &= 0xFF00;
+        *value |= ((signed char)(GlobalVariable.PowerPara.BatteryTemperature) & 0x00FF);
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RBatVoltage(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = (unsigned short)(GlobalVariable.PowerPara.BatteryVoltage*10);
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RBatCurrent(unsigned char R_or_RW, unsigned short *value)
+{
+    signed short temp = 0;
+    if(R_or_RW == 0)
+    {
+        temp = (signed short)(GlobalVariable.PowerPara.BatteryCurrent*100);
+        *value = *((unsigned short *)&temp);
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+static int8_t RVersion1(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = (unsigned short)(GlobalVariable.FixePara.Version1);
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RVersion2(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = (unsigned short)(GlobalVariable.FixePara.Version2);
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+static int8_t RWComID(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.ComID));
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {        
+          if (GlobalVariable.ConfigPara.isMasterController == 1)
+          {
+            if(*value >= 1 && *value < 255)
+            {
+                //LogOperation_ParameterChange( GlobalVariable.ConfigPara.ComID, *value );   
+                Log_AddParamChange(81, *value, GlobalVariable.ConfigPara.ComID);
+                GlobalVariable.ConfigPara.ComID =(unsigned char) *value;
+                GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+            }
+
+          }
+
+     else  if (GlobalVariable.ConfigPara.isMasterController == 0)
+        {
+            if(*value >= 2 && *value <=21)
+            {
+                //LogOperation_ParameterChange( GlobalVariable.ConfigPara.ComID, *value );   
+                Log_AddParamChange(81, *value, GlobalVariable.ConfigPara.ComID);
+                GlobalVariable.ConfigPara.ComID =(unsigned char) *value;
+                GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+            }
+        }
+        
+
+
+
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RWComID2(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.ComID2));
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {        
+        if(*value >= 1 && *value < 255)
+        {
+//            LogOperation_ParameterChange( GlobalVariable.ConfigPara.ComID, *value );     
+            Log_AddParamChange(112, *value, GlobalVariable.ConfigPara.ComID2);					
+            GlobalVariable.ConfigPara.ComID2 =(unsigned char) *value;
+            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+        }
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RWComID3(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.ComID3));
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {        
+        if(*value >= 1 && *value < 255)
+        {
+//            LogOperation_ParameterChange( GlobalVariable.ConfigPara.ComID, *value );      
+					  Log_AddParamChange(113, *value, GlobalVariable.ConfigPara.ComID3);	
+            GlobalVariable.ConfigPara.ComID3 =(unsigned char) *value;
+            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+        }
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+static int8_t RWComID4(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.ComID4));
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {        
+        if(*value >= 1 && *value < 255)
+        {
+//            LogOperation_ParameterChange( GlobalVariable.ConfigPara.ComID, *value );     
+            Log_AddParamChange(131, *value, GlobalVariable.ConfigPara.ComID4);					
+            GlobalVariable.ConfigPara.ComID4 =(unsigned char) *value;
+            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+        }
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RWComID5(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.ComID5));
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {        
+        if(*value >= 1 && *value < 255)
+        {
+//            LogOperation_ParameterChange( GlobalVariable.ConfigPara.ComID, *value );      
+					  Log_AddParamChange(132, *value, GlobalVariable.ConfigPara.ComID5);	
+            GlobalVariable.ConfigPara.ComID5 =(unsigned char) *value;
+            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+        }
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RWComID6(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.ComID6));
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {        
+        if(*value >= 1 && *value < 255)
+        {
+//            LogOperation_ParameterChange( GlobalVariable.ConfigPara.ComID, *value );
+					  Log_AddParamChange(133, *value, GlobalVariable.ConfigPara.ComID6);    
+            GlobalVariable.ConfigPara.ComID6 =(unsigned char) *value;
+            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+        }
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RWComID7(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.ComID7));
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {        
+        if(*value >= 1 && *value < 255)
+        {
+//            LogOperation_ParameterChange( GlobalVariable.ConfigPara.ComID, *value );
+					  Log_AddParamChange(134, *value, GlobalVariable.ConfigPara.ComID7);
+            GlobalVariable.ConfigPara.ComID7 =(unsigned char) *value;
+            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+        }
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RWComID8(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.ComID8));
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {        
+        if(*value >= 1 && *value < 255)
+        {
+//            LogOperation_ParameterChange( GlobalVariable.ConfigPara.ComID, *value );
+					  Log_AddParamChange(135, *value, GlobalVariable.ConfigPara.ComID8);
+            GlobalVariable.ConfigPara.ComID8 =(unsigned char) *value;
+            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+        }
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RWComID9(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.ComID9));
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {        
+        if(*value >= 1 && *value < 255)
+        {
+//            LogOperation_ParameterChange( GlobalVariable.ConfigPara.ComID, *value );
+                        Log_AddParamChange(136, *value, GlobalVariable.ConfigPara.ComID9);	
+                GlobalVariable.ConfigPara.ComID9 =(unsigned char) *value;
+                GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+            }
+        }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RWComID10(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.ComID10));
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {
+        if(*value >= 1 && *value < 255)
+        {
+//            LogOperation_ParameterChange( GlobalVariable.ConfigPara.ComID, *value );
+                        Log_AddParamChange(137, *value, GlobalVariable.ConfigPara.ComID10);	
+                GlobalVariable.ConfigPara.ComID10 =(unsigned char) *value;
+                GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+        }
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+static int8_t RWComID11(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.ComID11));
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {        
+        if(*value >= 1 && *value < 255)
+        {
+//            LogOperation_ParameterChange( GlobalVariable.ConfigPara.ComID, *value );
+					  Log_AddParamChange(138, *value, GlobalVariable.ConfigPara.ComID11);
+            GlobalVariable.ConfigPara.ComID11 =(unsigned char) *value;
+            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+        }
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+static int8_t RWComID12(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.ComID12));
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {        
+        if(*value >= 1 && *value < 255)
+        {
+//            LogOperation_ParameterChange( GlobalVariable.ConfigPara.ComID, *value );
+					  Log_AddParamChange(139, *value, GlobalVariable.ConfigPara.ComID12);
+            GlobalVariable.ConfigPara.ComID12 =(unsigned char) *value;
+            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+        }
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RWComID13(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.ComID13));
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {        
+        if(*value >= 1 && *value < 255)
+        {
+//            LogOperation_ParameterChange( GlobalVariable.ConfigPara.ComID, *value );
+			Log_AddParamChange(140, *value, GlobalVariable.ConfigPara.ComID13);
+            GlobalVariable.ConfigPara.ComID13 =(unsigned char) *value;
+            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+        }
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RWComID14(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.ComID14));
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {        
+        if(*value >= 1 && *value < 255)
+        {
+//            LogOperation_ParameterChange( GlobalVariable.ConfigPara.ComID, *value );
+					  Log_AddParamChange(141, *value, GlobalVariable.ConfigPara.ComID14);
+            GlobalVariable.ConfigPara.ComID14 =(unsigned char) *value;
+            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+        }
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RWComID15(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.ComID15));
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {        
+        if(*value >= 1 && *value < 255)
+        {   
+//            LogOperation_ParameterChange( GlobalVariable.ConfigPara.ComID, *value );
+                        Log_AddParamChange(142, *value, GlobalVariable.ConfigPara.ComID15);
+                GlobalVariable.ConfigPara.ComID15 =(unsigned char) *value;
+                GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+            }
+        }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RWComID16(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.ComID16));
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {        
+        if(*value >= 1 && *value < 255)
+        {
+//            LogOperation_ParameterChange( GlobalVariable.ConfigPara.ComID, *value );
+					  Log_AddParamChange(143, *value, GlobalVariable.ConfigPara.ComID16);
+            GlobalVariable.ConfigPara.ComID16 =(unsigned char) *value;
+            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+        }
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RWComID17(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.ComID17));
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {        
+        if(*value >= 1 && *value < 255)
+        {
+//            LogOperation_ParameterChange( GlobalVariable.ConfigPara.ComID, *value )
+					  Log_AddParamChange(144, *value, GlobalVariable.ConfigPara.ComID17);
+            GlobalVariable.ConfigPara.ComID17 =(unsigned char) *value;
+            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+        }
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RWComID18(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.ComID18));
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {
+        if(*value >= 1 && *value < 255)
+        {
+//            LogOperation_ParameterChange( GlobalVariable.ConfigPara.ComID, *value );
+                        Log_AddParamChange(145, *value, GlobalVariable.ConfigPara.ComID18);
+                GlobalVariable.ConfigPara.ComID18 =(unsigned char) *value;
+                GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+        }
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RWComID19(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.ComID19));
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {        
+        if(*value >= 1 && *value < 255)
+        {
+//            LogOperation_ParameterChange( GlobalVariable.ConfigPara.ComID, *value )
+                      Log_AddParamChange(146, *value, GlobalVariable.ConfigPara.ComID19);
+            GlobalVariable.ConfigPara.ComID19 =(unsigned char) *value;
+            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+        }
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RWComID20(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.ComID20));
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {        
+        if(*value >= 1 && *value < 255)
+        {
+//            LogOperation_ParameterChange( GlobalVariable.ConfigPara.ComID, *value );
+                        Log_AddParamChange(147, *value, GlobalVariable.ConfigPara.ComID20);	
+                GlobalVariable.ConfigPara.ComID20 =(unsigned char) *value;
+                GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+            }
+        }
+    return AS_CB_ERR_INVALID;
+}
+
+static int8_t RWComID21(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.ComID21));
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {        
+        if(*value >= 1 && *value < 255)
+        {
+//            LogOperation_ParameterChange( GlobalVariable.ConfigPara.ComID, *value );      
+					  Log_AddParamChange(148, *value, GlobalVariable.ConfigPara.ComID21);	
+            GlobalVariable.ConfigPara.ComID21 =(unsigned char) *value;
+            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+        }
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+static int8_t RWEnableMasterController(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.isMasterController));
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {        
+            if((*value) == NO) 
+            {
+                if(( GlobalVariable.ConfigPara.ComID >= 2) && (GlobalVariable.ConfigPara.ComID <= 21))
+                {
+                //
+                    Log_AddParamChange(REG_SET_CONTROLER_ROLE, *value, GlobalVariable.ConfigPara.isMasterController);	
+                    GlobalVariable.ConfigPara.isMasterController =(unsigned char) *value;
+                    FixedParaInit();//æ›´æ�¢å›ºä»¶ç‰ˆæœ¬å�·ï¼Œé€‚é…�ä¸»ä»Žè§’è‰²
+                    GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+                }
+              }
+            else if((*value) == YES)
+             {
+                 if(( GlobalVariable.ConfigPara.ComID >= 1) && (GlobalVariable.ConfigPara.ComID < 255))
+                 {
+
+          
+                Log_AddParamChange(REG_SET_CONTROLER_ROLE, *value, GlobalVariable.ConfigPara.isMasterController);	
+                GlobalVariable.ConfigPara.isMasterController =(unsigned char) *value;
+
+                FixedParaInit();//æ›´æ�¢å›ºä»¶ç‰ˆæœ¬å�·ï¼Œé€‚é…�ä¸»ä»Žè§’è‰²
+                GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+                }
+             }
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+static int8_t RWsubSlaveCount(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.subSlaveCount));
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {        
+        if((*value >= 1) &&( *value )< 30)
+        {
+		   Log_AddParamChange(REG_SUBSLAVE_COUNT, *value, GlobalVariable.ConfigPara.subSlaveCount);	
+            GlobalVariable.ConfigPara.subSlaveCount =(unsigned char) *value;
+            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+        }
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+
+
+static int8_t RWsubSlavePowerSupplyEnable(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.subSlavePowerSupplyEnable));
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {        
+        if((*value == YES) ||( *value ) == NO)
+        {
+		   Log_AddParamChange(REG_SUBSLAVE_POWER_SUPPLY_ENABLE, *value, GlobalVariable.ConfigPara.subSlavePowerSupplyEnable);	
+            GlobalVariable.ConfigPara.subSlavePowerSupplyEnable =(unsigned char) *value;
+            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+        }
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+
+/*************************************************
+  Function              : RWPIDKP()
+  Description           : PID KP  
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : tangtao
+  Revision				      : V0.0
+  Modified Date			    : 2021.10.08
+  Additional Comments	  : 
+*************************************************/
+//static int8_t RWPIDKP(unsigned char R_or_RW, unsigned short *value)
+//{
+//    if(R_or_RW == 0)
+//    {
+//        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.Pid_CurrKp));
+//    }
+//    else if(R_or_RW == 1)
+//    {        
+//        LogOperation_ParameterChange( GlobalVariable.ConfigPara.Pid_CurrKp, *value );      
+//        GlobalVariable.ConfigPara.Pid_CurrKp =(unsigned short) *value;
+//        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+//    }
+//}
+
+/*************************************************
+  Function              : RWPIDKI()
+  Description           : PID KI  
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : tangtao
+  Revision				      : V0.0
+  Modified Date			    : 2021.10.08
+  Additional Comments	  : 
+*************************************************/
+//static int8_t RWPIDKI(unsigned char R_or_RW, unsigned short *value)
+//{
+//    if(R_or_RW == 0)
+//    {
+//        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.Pid_CurrKi));
+//    }
+//    else if(R_or_RW == 1)
+//    {        
+//        LogOperation_ParameterChange( GlobalVariable.ConfigPara.Pid_CurrKi, *value );      
+//        GlobalVariable.ConfigPara.Pid_CurrKi =(unsigned short) *value;
+//        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+//    }
+//}
+
+/*************************************************
+  Function              : RWPIDKD()
+  Description           : PID KD 
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : tangtao
+  Revision				      : V0.0
+  Modified Date			    : 2021.10.08
+  Additional Comments	  : 
+*************************************************/
+//static int8_t RWPIDKD(unsigned char R_or_RW, unsigned short *value)
+//{
+//    if(R_or_RW == 0)
+//    {
+//        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.Pid_CurrKd));
+//    }
+//    else if(R_or_RW == 1)
+//    {        
+//        LogOperation_ParameterChange( GlobalVariable.ConfigPara.Pid_CurrKd, *value );      
+//        GlobalVariable.ConfigPara.Pid_CurrKd =(unsigned short) *value;
+//        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+//    }
+//}
+
+/*************************************************
+  Function              : RWPIDSlope()
+  Description           : PID Slope 
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : tangtao
+  Revision				      : V0.0
+  Modified Date			    : 2021.10.08
+  Additional Comments	  : 
+*************************************************/
+//static int8_t RWPIDSlope(unsigned char R_or_RW, unsigned short *value)
+//{
+//    if(R_or_RW == 0)
+//    {
+//        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.Pid_CurrSlope));
+//    }
+//    else if(R_or_RW == 1)
+//    {       
+//        LogOperation_ParameterChange( GlobalVariable.ConfigPara.Pid_CurrSlope, *value );      
+//        GlobalVariable.ConfigPara.Pid_CurrSlope =(unsigned short) *value;
+//        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+//    }
+//}
+
+
+
+static int8_t RWHeatEnable(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.HeatEnable));
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {        
+         if((*value == 0 )|| (*value == 1)) 
+         {
+		Log_AddParamChange(107, *value, GlobalVariable.ConfigPara.HeatEnable);
+        GlobalVariable.ConfigPara.HeatEnable =(unsigned short) *value;
+        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+         }
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+
+//static int8_t RWMotorOverCurrentValueG1(unsigned char R_or_RW, unsigned short *value)
+//{
+//    if(R_or_RW == 0)
+//    {
+//        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.MotorOverCurrentValueG1));
+//    }
+//    else if(R_or_RW == 1)
+//    {      
+//        LogOperation_ParameterChange( GlobalVariable.ConfigPara.MotorOverCurrentValueG1, *value );      
+//        GlobalVariable.ConfigPara.MotorOverCurrentValueG1 =(unsigned short) *value;
+//        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+//    }
+//}
+
+//static int8_t RWMotorOverCurrentTimeG1(unsigned char R_or_RW, unsigned short *value)
+//{
+//    if(R_or_RW == 0)
+//    {
+//        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.MotorOverCurrentTimeG1));
+//    }
+//    else if(R_or_RW == 1)
+//    {     
+//        LogOperation_ParameterChange( GlobalVariable.ConfigPara.MotorOverCurrentTimeG1, *value );      
+//        GlobalVariable.ConfigPara.MotorOverCurrentTimeG1 =(unsigned short) *value;
+//        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+//    }
+//}
+
+//static int8_t RWMotorOverCurrentValueG2(unsigned char R_or_RW, unsigned short *value)
+//{
+//    if(R_or_RW == 0)
+//    {
+//        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.MotorOverCurrentValueG2));
+//    }
+//    else if(R_or_RW == 1)
+//    {        
+//        LogOperation_ParameterChange( GlobalVariable.ConfigPara.MotorOverCurrentValueG2, *value );      
+//        GlobalVariable.ConfigPara.MotorOverCurrentValueG2 =(unsigned short) *value;
+//        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+//    }
+//}
+
+//static int8_t RWMotorOverCurrentTimeG2(unsigned char R_or_RW, unsigned short *value)
+//{
+//    if(R_or_RW == 0)
+//    {
+//        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.MotorOverCurrentTimeG2));
+//    }
+//    else if(R_or_RW == 1)
+//    {        
+//        LogOperation_ParameterChange( GlobalVariable.ConfigPara.MotorOverCurrentTimeG2, *value );      
+//        GlobalVariable.ConfigPara.MotorOverCurrentTimeG2 =(unsigned short) *value;
+//        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+//    }
+//}
+
+//static int8_t RWMotorOverCurrentValueG3(unsigned char R_or_RW, unsigned short *value)
+//{
+//    if(R_or_RW == 0)
+//    {
+//        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.MotorOverCurrentValueG3));
+//    }
+//    else if(R_or_RW == 1)
+//    {        
+//        LogOperation_ParameterChange( GlobalVariable.ConfigPara.MotorOverCurrentValueG3, *value );      
+//        GlobalVariable.ConfigPara.MotorOverCurrentValueG3 =(unsigned short) *value;
+//        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+//    }
+//}
+
+//static int8_t RWMotorOverCurrentTimeG3(unsigned char R_or_RW, unsigned short *value)
+//{
+//    if(R_or_RW == 0)
+//    {
+//        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.MotorOverCurrentTimeG3));
+//    }
+//    else if(R_or_RW == 1)
+//    {        
+//        LogOperation_ParameterChange( GlobalVariable.ConfigPara.MotorOverCurrentTimeG3, *value );      
+//        GlobalVariable.ConfigPara.MotorOverCurrentTimeG3 =(unsigned short) *value;
+//        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+//    }
+//}
+
+//static int8_t RWMotorOverCurrentValueG4(unsigned char R_or_RW, unsigned short *value)
+//{
+//    if(R_or_RW == 0)
+//    {
+//        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.MotorOverCurrentValueG4));
+//    }
+//    else if(R_or_RW == 1)
+//    {        
+//        LogOperation_ParameterChange( GlobalVariable.ConfigPara.MotorOverCurrentValueG4, *value );      
+//        GlobalVariable.ConfigPara.MotorOverCurrentValueG4 =(unsigned short) *value;
+//        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+//    }
+//}
+
+//static int8_t RWMotorOverCurrentTimeG4(unsigned char R_or_RW, unsigned short *value)
+//{
+//    if(R_or_RW == 0)
+//    {
+//        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.MotorOverCurrentTimeG4));
+//    }
+//    else if(R_or_RW == 1)
+//    {        
+//        LogOperation_ParameterChange( GlobalVariable.ConfigPara.MotorOverCurrentTimeG4, *value );      
+//        GlobalVariable.ConfigPara.MotorOverCurrentTimeG4 =(unsigned short) *value;
+//        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+//    }
+//}
+
+//static int8_t RWMotorOverCurrentValueG5(unsigned char R_or_RW, unsigned short *value)
+//{
+//    if(R_or_RW == 0)
+//    {
+//        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.MotorOverCurrentValueG5));
+//    }
+//    else if(R_or_RW == 1)
+//    {        
+//        LogOperation_ParameterChange( GlobalVariable.ConfigPara.MotorOverCurrentValueG5, *value );      
+//        GlobalVariable.ConfigPara.MotorOverCurrentValueG5 =(unsigned short) *value;
+//        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+//    }
+//}
+
+//static int8_t RWMotorOverCurrentTimeG5(unsigned char R_or_RW, unsigned short *value)
+//{
+//    if(R_or_RW == 0)
+//    {
+//        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.MotorOverCurrentTimeG5));
+//    }
+//    else if(R_or_RW == 1)
+//    {        
+//        LogOperation_ParameterChange( GlobalVariable.ConfigPara.MotorOverCurrentTimeG5, *value );      
+//        GlobalVariable.ConfigPara.MotorOverCurrentTimeG5 =(unsigned short) *value;
+//        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+//    }
+//}
+
+//static int8_t RWMotorOverCurrentValueG6(unsigned char R_or_RW, unsigned short *value)
+//{
+//    if(R_or_RW == 0)
+//    {
+//        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.MotorOverCurrentValueG6));
+//    }
+//    else if(R_or_RW == 1)
+//    {        
+//        LogOperation_ParameterChange( GlobalVariable.ConfigPara.MotorOverCurrentValueG6, *value );      
+//        GlobalVariable.ConfigPara.MotorOverCurrentValueG6 =(unsigned short) *value;
+//        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+//    }
+//}
+
+//static int8_t RWMotorOverCurrentTimeG6(unsigned char R_or_RW, unsigned short *value)
+//{
+//    if(R_or_RW == 0)
+//    {
+//        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.MotorOverCurrentTimeG6));
+//    }
+//    else if(R_or_RW == 1)
+//    {        
+//        LogOperation_ParameterChange( GlobalVariable.ConfigPara.MotorOverCurrentTimeG6, *value );      
+//        GlobalVariable.ConfigPara.MotorOverCurrentTimeG6 =(unsigned short) *value;
+//        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+//    }
+//}
+
+//static int8_t RWMotorOverCurrentValueG7(unsigned char R_or_RW, unsigned short *value)
+//{
+//    if(R_or_RW == 0)
+//    {
+//        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.MotorOverCurrentValueG7));
+//    }
+//    else if(R_or_RW == 1)
+//    {        
+//        LogOperation_ParameterChange( GlobalVariable.ConfigPara.MotorOverCurrentValueG7, *value );      
+//        GlobalVariable.ConfigPara.MotorOverCurrentValueG7 =(unsigned short) *value;
+//        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+//    }
+//}
+
+//static int8_t RWMotorOverCurrentTimeG7(unsigned char R_or_RW, unsigned short *value)
+//{
+//    if(R_or_RW == 0)
+//    {
+//        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.MotorOverCurrentTimeG7));
+//    }
+//    else if(R_or_RW == 1)
+//    {        
+//        LogOperation_ParameterChange( GlobalVariable.ConfigPara.MotorOverCurrentTimeG7, *value );      
+//        GlobalVariable.ConfigPara.MotorOverCurrentTimeG7 =(unsigned short) *value;
+//        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+//    }
+//}
+
+//static int8_t RWMotorOverCurrentValueG8(unsigned char R_or_RW, unsigned short *value)
+//{
+//    if(R_or_RW == 0)
+//    {
+//        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.MotorOverCurrentValueG8));
+//    }
+//    else if(R_or_RW == 1)
+//    {        
+//        LogOperation_ParameterChange( GlobalVariable.ConfigPara.MotorOverCurrentValueG8, *value );      
+//        GlobalVariable.ConfigPara.MotorOverCurrentValueG8 =(unsigned short) *value;
+//        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+//    }
+//}
+
+//static int8_t RWMotorOverCurrentTimeG8(unsigned char R_or_RW, unsigned short *value)
+//{
+//    if(R_or_RW == 0)
+//    {
+//        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.MotorOverCurrentTimeG8));
+//    }
+//    else if(R_or_RW == 1)
+//    {        
+//        LogOperation_ParameterChange( GlobalVariable.ConfigPara.MotorOverCurrentTimeG8, *value );      
+//        GlobalVariable.ConfigPara.MotorOverCurrentTimeG8 =(unsigned short) *value;
+//        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+//    }
+//}
+
+//static int8_t RWMotorOverCurrentValueG9(unsigned char R_or_RW, unsigned short *value)
+//{
+//    if(R_or_RW == 0)
+//    {
+//        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.MotorOverCurrentValueG9));
+//    }
+//    else if(R_or_RW == 1)
+//    {        
+//        LogOperation_ParameterChange( GlobalVariable.ConfigPara.MotorOverCurrentValueG9, *value );      
+//        GlobalVariable.ConfigPara.MotorOverCurrentValueG9 =(unsigned short) *value;
+//        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+//    }
+//}
+
+//static int8_t RWMotorOverCurrentTimeG9(unsigned char R_or_RW, unsigned short *value)
+//{
+//    if(R_or_RW == 0)
+//    {
+//        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.MotorOverCurrentTimeG9));
+//    }
+//    else if(R_or_RW == 1)
+//    {    
+//        LogOperation_ParameterChange( GlobalVariable.ConfigPara.MotorOverCurrentTimeG9, *value );      
+//        GlobalVariable.ConfigPara.MotorOverCurrentTimeG9 =(unsigned short) *value;
+//        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+//    }
+//}
+
+//static int8_t RWMotorOverCurrentValueG10(unsigned char R_or_RW, unsigned short *value)
+//{
+//    if(R_or_RW == 0)
+//    {
+//        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.MotorOverCurrentValueG10));
+//    }
+//    else if(R_or_RW == 1)
+//    {        
+//        LogOperation_ParameterChange( GlobalVariable.ConfigPara.MotorOverCurrentValueG10, *value );      
+//        GlobalVariable.ConfigPara.MotorOverCurrentValueG10 =(unsigned short) *value;
+//        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+//    }
+//}
+
+//static int8_t RWMotorOverCurrentTimeG10(unsigned char R_or_RW, unsigned short *value)
+//{
+//    if(R_or_RW == 0)
+//    {
+//        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.MotorOverCurrentTimeG10));
+//    }
+//    else if(R_or_RW == 1)
+//    {        
+//        LogOperation_ParameterChange( GlobalVariable.ConfigPara.MotorOverCurrentTimeG10, *value );      
+//        GlobalVariable.ConfigPara.MotorOverCurrentTimeG10 =(unsigned short) *value;
+//        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+//    }
+//}
+
+static int8_t RWPowerMode(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = GlobalVariable.ConfigPara.PowerMode;
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {
+        if(*value <= 3)
+        {
+        	Log_AddParamChange(82, *value, GlobalVariable.ConfigPara.PowerMode);
+            GlobalVariable.ConfigPara.PowerMode = *value;
+            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+        } 
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+static int8_t RWCleaningDockAngle(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = GlobalVariable.ConfigPara.CleaningDockAngle;
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {
+        if((*value >= 30) && (*value <= 150))
+        {
+            //LogOperation_ParameterChange( GlobalVariable.ConfigPara.CleaningDockAngle, *value );      
+			Log_AddParamChange(84, *value, GlobalVariable.ConfigPara.CleaningDockAngle);
+            GlobalVariable.ConfigPara.CleaningDockAngle = *value;
+            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+        } 
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+static int8_t RWMotorOrientation(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = GlobalVariable.ConfigPara.MotorOrientation;
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {
+			  if(*value == 0 || *value == 1)  //0ï¼šç”µæœºæœ�ä¸œï¼› 1ï¼šç”µæœºæœ�???
+        {
+            //LogOperation_ParameterChange( GlobalVariable.ConfigPara.MotorOrientation, *value );  
+			Log_AddParamChange(85, *value, GlobalVariable.ConfigPara.MotorOrientation);
+            GlobalVariable.ConfigPara.MotorOrientation = *value;
+            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+        } 
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+static int8_t RWRS485Enable(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = GlobalVariable.ConfigPara.RS485Enable;
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {
+        if((*value == 0 )|| (*value == 1)) 
+        {
+        //LogOperation_ParameterChange( GlobalVariable.ConfigPara.RS485Enable, *value ); 
+		Log_AddParamChange(88, *value, GlobalVariable.ConfigPara.RS485Enable);
+        GlobalVariable.ConfigPara.RS485Enable = *value;
+        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+        }
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+static int8_t RWNoComEnable(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = GlobalVariable.ConfigPara.NoComEnable;
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {
+          if((*value == 0 )|| (*value == 1)) 
+          {
+		Log_AddParamChange(98, *value, GlobalVariable.ConfigPara.NoComEnable);
+        GlobalVariable.ConfigPara.NoComEnable = *value;
+        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+          }
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+static int8_t RWPVModuleWidth1(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.PVModuleWidth)+1);
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {
+         *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.PVModuleWidth)+1) = *value;
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RWPVModuleWidth2(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.PVModuleWidth));
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {
+         *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.PVModuleWidth)) = *value;
+        if((GlobalVariable.ConfigParaBuffer.PVModuleWidth >= 0.2) && (GlobalVariable.ConfigParaBuffer.PVModuleWidth <= 20.0) )
+        {
+            Log_AddParamChange(89, *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.PVModuleWidth)+1), *(((unsigned short *)&GlobalVariable.ConfigPara.PVModuleWidth)+1));
+			Log_AddParamChange(90, *value, *(((unsigned short *)&GlobalVariable.ConfigPara.PVModuleWidth)));
+            GlobalVariable.ConfigPara.PVModuleWidth = GlobalVariable.ConfigParaBuffer.PVModuleWidth;
+            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+        }
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RWPostSpacing1(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.PostSpacing)+1);
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {
+        *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.PostSpacing)+1) = *value;
+    }
+    return AS_CB_ERR_INVALID;
+} 
+
+static int8_t RWPostSpacing2(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.PostSpacing));
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {
+        *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.PostSpacing)) = *value;
+
+        if((GlobalVariable.ConfigParaBuffer.PostSpacing >= GlobalVariable.ConfigPara.PVModuleWidth)
+        && (GlobalVariable.ConfigParaBuffer.PostSpacing <= 50.0) )
+        {
+		    	Log_AddParamChange(91, *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.PostSpacing)+1), *(((unsigned short *)&GlobalVariable.ConfigPara.PostSpacing)+1));
+	            Log_AddParamChange(92, *value, *(((unsigned short *)&GlobalVariable.ConfigPara.PostSpacing)));
+                GlobalVariable.ConfigPara.PostSpacing = GlobalVariable.ConfigParaBuffer.PostSpacing;
+                GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+        }
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RWTerrainSlope1(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.TerrainSlope)+1);
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {
+    	
+        *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.TerrainSlope)+1) = *value;
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RWTerrainSlope2(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.TerrainSlope));
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {
+        *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.TerrainSlope)) = *value;
+        if((GlobalVariable.ConfigParaBuffer.TerrainSlope >= -45.0f) 
+            && (GlobalVariable.ConfigParaBuffer.TerrainSlope <= 45.0f))
+        {
+            Log_AddParamChange(93, *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.TerrainSlope)+1), *(((unsigned short *)&GlobalVariable.ConfigPara.TerrainSlope)+1));
+			Log_AddParamChange(94, *value, *(((unsigned short *)&GlobalVariable.ConfigPara.TerrainSlope)));
+            GlobalVariable.ConfigPara.TerrainSlope = GlobalVariable.ConfigParaBuffer.TerrainSlope;            
+            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+        }
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+
+static int8_t RWUpWindSpeed(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.UpWindSpeed));
+        return AS_CB_OK;
+    }
+
+//    else if(R_or_RW == 1)
+//    {
+//        if(*value <= 40)
+//        {
+//            //LogOperation_ParameterChange( GlobalVariable.ConfigPara.UpWindSpeed, *value );   
+//			Log_AddParamChange(99, *value, GlobalVariable.ConfigPara.UpWindSpeed);
+//            *(((unsigned short *)&GlobalVariable.ConfigPara.UpWindSpeed)) = *value;
+//            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+//        }
+//    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RWUpStartTime(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.UpStartTime));
+        return AS_CB_OK;
+    }
+//    else if(R_or_RW == 1)
+//    {
+//        if(*value <= 1000)
+//        {
+//            //LogOperation_ParameterChange( GlobalVariable.ConfigPara.UpStartTime, *value );  
+//			Log_AddParamChange(100, *value, GlobalVariable.ConfigPara.UpStartTime);
+//           *(((unsigned short *)&GlobalVariable.ConfigPara.UpStartTime)) = *value;
+//            GlobalVariable.WriteFlag.ConfigParaWrite = 1; 
+//        }
+//    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RWLowWindSpeed(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.LowWindSpeed));
+        return AS_CB_OK;
+    }
+//    else if(R_or_RW == 1)
+//    {
+//        if(*value <= (GlobalVariable.ConfigPara.UpWindSpeed - 1))
+//        {
+//            //LogOperation_ParameterChange( GlobalVariable.ConfigPara.LowWindSpeed, *value );      
+//			Log_AddParamChange(101, *value, GlobalVariable.ConfigPara.LowWindSpeed);
+//            *(((unsigned short *)&GlobalVariable.ConfigPara.LowWindSpeed)) = *value;
+//        }
+//        else
+//        {
+//            //LogOperation_ParameterChange( GlobalVariable.ConfigPara.LowWindSpeed, GlobalVariable.ConfigPara.UpWindSpeed - 1 ); 
+//			Log_AddParamChange(101, GlobalVariable.ConfigPara.UpWindSpeed - 1, GlobalVariable.ConfigPara.LowWindSpeed);
+//            *(((unsigned short *)&GlobalVariable.ConfigPara.LowWindSpeed)) = GlobalVariable.ConfigPara.UpWindSpeed - 1;
+//        }
+//        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+//    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RWLowStopTime(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.LowStopTime));
+        return AS_CB_OK;
+    }
+//    else if(R_or_RW == 1)
+//    {
+//        if(*value <= 1000)
+//        {
+//            //LogOperation_ParameterChange( GlobalVariable.ConfigPara.LowStopTime, *value );      
+//			Log_AddParamChange(102, *value, GlobalVariable.ConfigPara.LowStopTime);
+//            *(((unsigned short *)&GlobalVariable.ConfigPara.LowStopTime)) = *value;
+//            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+//        }
+//    }
+    return AS_CB_ERR_INVALID;
+}
+
+static int8_t RWESoftLimitAngle1(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.ESoftLimitAngle)+1);
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {
+        *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.ESoftLimitAngle)+1) = *value;
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RWESoftLimitAngle2(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.ESoftLimitAngle));
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {   
+        *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.ESoftLimitAngle)) = *value;
+        if((GlobalVariable.ConfigParaBuffer.ESoftLimitAngle >  29.9f )
+            && (GlobalVariable.ConfigParaBuffer.ESoftLimitAngle  < 150.1f) )
+        {
+            Log_AddParamChange(103, *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.ESoftLimitAngle)+1), *(((unsigned short *)&GlobalVariable.ConfigPara.ESoftLimitAngle)+1));
+			Log_AddParamChange(104, *value, *(((unsigned short *)&GlobalVariable.ConfigPara.ESoftLimitAngle)));
+            GlobalVariable.ConfigPara.ESoftLimitAngle = GlobalVariable.ConfigParaBuffer.ESoftLimitAngle;
+            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+        }
+        
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RWWSoftLimitAngle1(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.WSoftLimitAngle)+1);
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {
+        *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.WSoftLimitAngle)+1) = *value;
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RWWSoftLimitAngle2(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.WSoftLimitAngle));
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {
+        *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.WSoftLimitAngle)) = *value;
+        if( (GlobalVariable.ConfigParaBuffer.WSoftLimitAngle > 29.9f)
+             && ( GlobalVariable.ConfigParaBuffer.WSoftLimitAngle < 150.1f))
+        {
+            Log_AddParamChange(105, *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.WSoftLimitAngle)+1), *(((unsigned short *)&GlobalVariable.ConfigPara.WSoftLimitAngle)+1));
+			Log_AddParamChange(106, *value, *(((unsigned short *)&GlobalVariable.ConfigPara.WSoftLimitAngle)));
+            GlobalVariable.ConfigPara.WSoftLimitAngle = GlobalVariable.ConfigParaBuffer.WSoftLimitAngle;
+            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+        }
+        
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RWBackAngle(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.BackAngle));
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {
+        if(*value >= 59.9 && *value <= 120.1)
+        {
+            //LogOperation_ParameterChange( GlobalVariable.ConfigPara.BackAngle, *value );    
+			Log_AddParamChange(111, *value, GlobalVariable.ConfigPara.BackAngle);
+            *(((unsigned short *)&GlobalVariable.ConfigPara.BackAngle)) = *value;
+            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+        }
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RWEWindProtectionAngle(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.EWindProtectionAngle));
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {
+        if(*value >= 60 && *value <= 90)
+        {
+           //LogOperation_ParameterChange( GlobalVariable.ConfigPara.EWindProtectionAngle, *value );   
+			Log_AddParamChange(112, *value, GlobalVariable.ConfigPara.EWindProtectionAngle);
+           *(((unsigned short *)&GlobalVariable.ConfigPara.EWindProtectionAngle)) = *value;
+            GlobalVariable.WriteFlag.ConfigParaWrite = 1; 
+        } 
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RWWWindProtectionAngle(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.WWindProtectionAngle));
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {
+        if(*value >= 90 && *value <= 120)
+        {
+            //LogOperation_ParameterChange( GlobalVariable.ConfigPara.WWindProtectionAngle, *value );     
+			Log_AddParamChange(113, *value, GlobalVariable.ConfigPara.WWindProtectionAngle);
+            *(((unsigned short *)&GlobalVariable.ConfigPara.WWindProtectionAngle)) = *value;
+            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+        }
+    }
+    return AS_CB_ERR_INVALID;
+}
+/***********************************************************************************
+ *å‡½æ•°å��ï¼šRWManufactor
+ *???  è¿°ï¼šè¯»å†™LORAåŽ‚???å�‚???
+ *???  å…¥ï¼šè¯»å†™æ ‡å¿—ä½�ã€�??
+ *è¿”å›žå€¼ï¼š
+ *???  æœŸï¼š2020-8-17
+ **********************************************************************************/
+static int8_t RWManufactor(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_manufactor));
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {
+        //LogOperation_ParameterChange( GlobalVariable.ConfigPara.Lora_manufactor, *value );  
+		Log_AddParamChange(200, *value,  GlobalVariable.ConfigPara.Lora_manufactor);
+        *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_manufactor)) = *value;
+        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+/***********************************************************************************
+ *å‡½æ•°å��ï¼šRWDeviceIDH
+ *???  è¿°ï¼šè¯»å†™LORAæ¨¡å�—IDå�‚æ•°
+ *???  å…¥ï¼šè¯»å†™æ ‡å¿—ä½�ã€�??
+ *è¿”å›žå€¼ï¼š
+ *???  æœŸï¼š2020-8-17
+ **********************************************************************************/
+static int8_t RWDeviceIDH(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_deviceIDH));
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {
+        //LogOperation_ParameterChange( GlobalVariable.ConfigPara.Lora_deviceIDH, *value );  
+		Log_AddParamChange(201, *value, GlobalVariable.ConfigPara.Lora_deviceIDH);
+        *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_deviceIDH)) = *value;
+        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+        GlobalVariable.WriteFlag.LoraParaWrite = 1;
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+/***********************************************************************************
+ *å‡½æ•°å��ï¼šRWDeviceIDL
+ *???  è¿°ï¼šè¯»å†™LORAæ¨¡å�—IDå�‚æ•°
+ *???  å…¥ï¼šè¯»å†™æ ‡å¿—ä½�ã€�??
+ *è¿”å›žå€¼ï¼š
+ *???  æœŸï¼š2020-8-17
+ **********************************************************************************/
+static int8_t RWDeviceIDL(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_deviceIDL));
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {
+        //LogOperation_ParameterChange( GlobalVariable.ConfigPara.Lora_deviceIDL, *value ); 
+		Log_AddParamChange(202, *value, GlobalVariable.ConfigPara.Lora_deviceIDL);
+        *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_deviceIDL)) = *value;
+        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+        GlobalVariable.WriteFlag.LoraParaWrite = 1;
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+/***********************************************************************************
+ *å‡½æ•°å��ï¼šRWDeviceNetID
+ *???  è¿°ï¼šè¯»å†™LORA net IDå�‚æ•°
+ *???  å…¥ï¼šè¯»å†™æ ‡å¿—ä½�ã€�??
+ *è¿”å›žå€¼ï¼š
+ *???  æœŸï¼š2020-8-17
+ **********************************************************************************/
+static int8_t RWDeviceNetID(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_deviceNetID));
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {
+        //LogOperation_ParameterChange( GlobalVariable.ConfigPara.Lora_deviceNetID, *value );  
+		Log_AddParamChange(203, *value, GlobalVariable.ConfigPara.Lora_deviceNetID);
+        *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_deviceNetID)) = *value;
+        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+        GlobalVariable.WriteFlag.LoraParaWrite = 1;
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+/***********************************************************************************
+ *å‡½æ•°å��ï¼šRWYBTadd3
+ *???  è¿°ï¼šè¯»å†™LORA æ˜“ä½°??? 03H å�‚æ•°
+ *???  å…¥ï¼šè¯»å†™æ ‡å¿—ä½�ã€�??
+ *è¿”å›žå€¼ï¼š
+ *???  æœŸï¼š2020-8-17
+ **********************************************************************************/
+static int8_t RWYBTadd3(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_ybt_add3));
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {
+        //LogOperation_ParameterChange( GlobalVariable.ConfigPara.Lora_ybt_add3, *value );    
+		Log_AddParamChange(204, *value, GlobalVariable.ConfigPara.Lora_ybt_add3);
+        *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_ybt_add3)) = *value;
+        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+        GlobalVariable.WriteFlag.LoraParaWrite = 1;
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+/***********************************************************************************
+ *å‡½æ•°å��ï¼šRWYBTadd4
+ *???  è¿°ï¼šè¯»å†™LORA æ˜“ä½°??? 04H å�‚æ•°
+ *???  å…¥ï¼šè¯»å†™æ ‡å¿—ä½�ã€�??
+ *è¿”å›žå€¼ï¼š
+ *???  æœŸï¼š2020-8-17
+ **********************************************************************************/
+static int8_t RWYBTadd4(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_ybt_add4));
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {
+        //LogOperation_ParameterChange( GlobalVariable.ConfigPara.Lora_ybt_add4, *value );    
+		Log_AddParamChange(205, *value, GlobalVariable.ConfigPara.Lora_ybt_add4);
+        *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_ybt_add4)) = *value;
+        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+        GlobalVariable.WriteFlag.LoraParaWrite = 1;
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+/***********************************************************************************
+ *å‡½æ•°å��ï¼šRWYBTChannel
+ *???  è¿°ï¼šè¯»å†™LORA æ˜“ä½°??? ä¿¡é�“ å�‚æ•°
+ *???  å…¥ï¼šè¯»å†™æ ‡å¿—ä½�ã€�??
+ *è¿”å›žå€¼ï¼š
+ *???  æœŸï¼š2020-8-17
+ **********************************************************************************/
+static int8_t RWYBTChannel(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_ybt_channel));
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {
+        //LogOperation_ParameterChange( GlobalVariable.ConfigPara.Lora_ybt_channel, *value );   
+		Log_AddParamChange(206, *value, GlobalVariable.ConfigPara.Lora_ybt_channel);
+        *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_ybt_channel)) = *value;
+        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+        GlobalVariable.WriteFlag.LoraParaWrite = 1;
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+/***********************************************************************************
+ *å‡½æ•°å��ï¼šRWYBTadd6
+ *???  è¿°ï¼šè¯»å†™LORA æ˜“ä½°??? 06H å�‚æ•°
+ *???  å…¥ï¼šè¯»å†™æ ‡å¿—ä½�ã€�??
+ *è¿”å›žå€¼ï¼š
+ *???  æœŸï¼š2020-8-17
+ **********************************************************************************/
+static int8_t RWYBTadd6(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_ybt_add6));
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {
+        //LogOperation_ParameterChange( GlobalVariable.ConfigPara.Lora_ybt_add6, *value );  
+		Log_AddParamChange(207, *value, GlobalVariable.ConfigPara.Lora_ybt_add6);
+        *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_ybt_add6)) = *value;
+        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+        GlobalVariable.WriteFlag.LoraParaWrite = 1;
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+/***********************************************************************************
+ *å‡½æ•°å��ï¼šRWYBTkeyH
+ *???  è¿°ï¼šè¯»å†™LORA æ˜“ä½°??? å¯†é’¥ å�‚æ•°
+ *???  å…¥ï¼šè¯»å†™æ ‡å¿—ä½�ã€�??
+ *è¿”å›žå€¼ï¼š
+ *???  æœŸï¼š2020-8-17
+ **********************************************************************************/
+static int8_t RWYBTkeyH(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_ybt_keyH));
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {
+        //LogOperation_ParameterChange( GlobalVariable.ConfigPara.Lora_ybt_keyH, *value );  
+		Log_AddParamChange(208, *value, GlobalVariable.ConfigPara.Lora_ybt_keyH);
+        *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_ybt_keyH)) = *value;
+        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+        GlobalVariable.WriteFlag.LoraParaWrite = 1;
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+/***********************************************************************************
+ *å‡½æ•°å��ï¼šRWYBTkeyL
+ *???  è¿°ï¼šè¯»å†™LORA æ˜“ä½°??? å¯†é’¥ å�‚æ•°
+ *???  å…¥ï¼šè¯»å†™æ ‡å¿—ä½�ã€�??
+ *è¿”å›žå€¼ï¼š
+ *???  æœŸï¼š2020-8-17
+ **********************************************************************************/
+static int8_t RWYBTkeyL(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_ybt_keyL));
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {
+        //LogOperation_ParameterChange( GlobalVariable.ConfigPara.Lora_ybt_keyL, *value );    
+		Log_AddParamChange(209, *value, GlobalVariable.ConfigPara.Lora_ybt_keyL);
+        *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_ybt_keyL)) = *value;
+        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+        GlobalVariable.WriteFlag.LoraParaWrite = 1;
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+/***********************************************************************************
+ *å‡½æ•°å��ï¼šRWJXYLbaudrate
+ *???  è¿°ï¼šè¯»å†™LORA æ�·è¿…æ˜“è�” æ³¢ç‰¹??? å�‚æ•°
+ *???  å…¥ï¼šè¯»å†™æ ‡å¿—ä½�ã€�??
+ *è¿”å›žå€¼ï¼š
+ *???  æœŸï¼š2020-8-17
+ **********************************************************************************/
+static int8_t RWJXYLbaudrate(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_jxyl_baudrate));
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {
+        //LogOperation_ParameterChange( GlobalVariable.ConfigPara.Lora_jxyl_baudrate, *value );   
+		Log_AddParamChange(210, *value, GlobalVariable.ConfigPara.Lora_jxyl_baudrate);
+        *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_jxyl_baudrate)) = *value;
+        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+        GlobalVariable.WriteFlag.LoraParaWrite = 1;
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+/***********************************************************************************
+ *å‡½æ•°å��ï¼šRWJXYLparity
+ *???  è¿°ï¼šè¯»å†™LORA æ�·è¿…æ˜“è�” æ ¡éªŒ å�‚æ•°
+ *???  å…¥ï¼šè¯»å†™æ ‡å¿—ä½�ã€�??
+ *è¿”å›žå€¼ï¼š
+ *???  æœŸï¼š2020-8-17
+ **********************************************************************************/
+static int8_t RWJXYLparity(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_jxyl_parity));
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {
+        //LogOperation_ParameterChange( GlobalVariable.ConfigPara.Lora_jxyl_parity, *value );  
+		Log_AddParamChange(211, *value, GlobalVariable.ConfigPara.Lora_jxyl_parity);
+        *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_jxyl_parity)) = *value;
+        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+        GlobalVariable.WriteFlag.LoraParaWrite = 1;
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+/***********************************************************************************
+ *å‡½æ•°å��ï¼šRWJXYLfq1
+ *???  è¿°ï¼šè¯»å†™LORA æ�·è¿…æ˜“è�” é¢‘çŽ‡ å�‚æ•°
+ *???  å…¥ï¼šè¯»å†™æ ‡å¿—ä½�ã€�??
+ *è¿”å›žå€¼ï¼š
+ *???  æœŸï¼š2020-8-17
+ **********************************************************************************/
+static int8_t RWJXYLfq1(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_jxyl_fq1));
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {
+        //LogOperation_ParameterChange( GlobalVariable.ConfigPara.Lora_jxyl_fq1, *value ); 
+		Log_AddParamChange(212, *value, GlobalVariable.ConfigPara.Lora_jxyl_fq1);
+        *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_jxyl_fq1)) = *value;
+        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+        GlobalVariable.WriteFlag.LoraParaWrite = 1;
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+/***********************************************************************************
+ *å‡½æ•°å��ï¼šRWJXYLfq2
+ *???  è¿°ï¼šè¯»å†™LORA æ�·è¿…æ˜“è�” é¢‘çŽ‡ å�‚æ•°
+ *???  å…¥ï¼šè¯»å†™æ ‡å¿—ä½�ã€�??
+ *è¿”å›žå€¼ï¼š
+ *???  æœŸï¼š2020-8-17
+ **********************************************************************************/
+static int8_t RWJXYLfq2(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_jxyl_fq2));
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {
+        //LogOperation_ParameterChange( GlobalVariable.ConfigPara.Lora_jxyl_fq2, *value );     
+		Log_AddParamChange(213, *value, GlobalVariable.ConfigPara.Lora_jxyl_fq2);
+        *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_jxyl_fq2)) = *value;
+        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+        GlobalVariable.WriteFlag.LoraParaWrite = 1;
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+/***********************************************************************************
+ *å‡½æ•°å��ï¼šRWJXYLfq3
+ *???  è¿°ï¼šè¯»å†™LORA æ�·è¿…æ˜“è�” é¢‘çŽ‡ å�‚æ•°
+ *???  å…¥ï¼šè¯»å†™æ ‡å¿—ä½�ã€�??
+ *è¿”å›žå€¼ï¼š
+ *???  æœŸï¼š2020-8-17
+ **********************************************************************************/
+static int8_t RWJXYLfq3(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_jxyl_fq3));
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {
+        //LogOperation_ParameterChange( GlobalVariable.ConfigPara.Lora_jxyl_fq3, *value ); 
+		Log_AddParamChange(214, *value, GlobalVariable.ConfigPara.Lora_jxyl_fq3);
+        *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_jxyl_fq3)) = *value;
+        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+        GlobalVariable.WriteFlag.LoraParaWrite = 1;
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+/***********************************************************************************
+ *å‡½æ•°å��ï¼šRWJXYLfactor
+ *???  è¿°ï¼šè¯»å†™LORA æ�·è¿…æ˜“è�” æ‰©???å› ??? å�‚æ•°
+ *???  å…¥ï¼šè¯»å†™æ ‡å¿—ä½�ã€�??
+ *è¿”å›žå€¼ï¼š
+ *???  æœŸï¼š2020-8-17
+ **********************************************************************************/
+static int8_t RWJXYLfactor(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_jxyl_factor));
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {
+        //LogOperation_ParameterChange( GlobalVariable.ConfigPara.Lora_jxyl_factor, *value ); 
+		Log_AddParamChange(215, *value, GlobalVariable.ConfigPara.Lora_jxyl_factor);
+        *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_jxyl_factor)) = *value;
+        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+        GlobalVariable.WriteFlag.LoraParaWrite = 1;
+    }
+    return AS_CB_ERR_INVALID;
+}
+ 
+/***********************************************************************************
+ *å‡½æ•°å��ï¼šRWJXYLmode
+ *???  è¿°ï¼šè¯»å†™LORA æ�·è¿…æ˜“è�” æ¨¡å¼� å�‚æ•°
+ *???  å…¥ï¼šè¯»å†™æ ‡å¿—ä½�ã€�??
+ *è¿”å›žå€¼ï¼š
+ *???  æœŸï¼š2020-8-17
+ **********************************************************************************/
+static int8_t RWJXYLmode(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_jxyl_mode));
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {
+        //LogOperation_ParameterChange( GlobalVariable.ConfigPara.Lora_jxyl_mode, *value );   
+		Log_AddParamChange(216, *value, GlobalVariable.ConfigPara.Lora_jxyl_mode);
+        *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_jxyl_mode)) = *value;
+        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+        GlobalVariable.WriteFlag.LoraParaWrite = 1;
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+/***********************************************************************************
+ *å‡½æ•°å��ï¼šRWJXYLmode
+ *???  è¿°ï¼šè¯»å†™LORA æ�·è¿…æ˜“è�” æ‰©???å¸¦??? å�‚æ•°
+ *???  å…¥ï¼šè¯»å†™æ ‡å¿—ä½�ã€�??
+ *è¿”å›žå€¼ï¼š
+ *???  æœŸï¼š2020-8-17
+ **********************************************************************************/
+static int8_t RWJXYLbw(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_jxyl_bw));
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {
+        //LogOperation_ParameterChange( GlobalVariable.ConfigPara.Lora_jxyl_bw, *value ); 
+		Log_AddParamChange(217, *value, GlobalVariable.ConfigPara.Lora_jxyl_bw);
+        *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_jxyl_bw)) = *value;
+        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+        GlobalVariable.WriteFlag.LoraParaWrite = 1;
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+/***********************************************************************************
+ *å‡½æ•°å��ï¼šRWJXYLpower
+ *???  è¿°ï¼šè¯»å†™LORA æ�·è¿…æ˜“è�” åŠŸçŽ‡ å�‚æ•°
+ *???  å…¥ï¼šè¯»å†™æ ‡å¿—ä½�ã€�??
+ *è¿”å›žå€¼ï¼š
+ *???  æœŸï¼š2020-8-17
+ **********************************************************************************/
+static int8_t RWJXYLpower(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_jxyl_power));
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {
+        //LogOperation_ParameterChange( GlobalVariable.ConfigPara.Lora_jxyl_power, *value ); 
+		Log_AddParamChange(218, *value, GlobalVariable.ConfigPara.Lora_jxyl_power);
+        *(((unsigned short *)&GlobalVariable.ConfigPara.Lora_jxyl_power)) = *value;
+        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+        GlobalVariable.WriteFlag.LoraParaWrite = 1;
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+/***********************************************************************************
+ *å‡½æ•°å��ï¼šRWTerrainSlopeDown
+ *???  è¿°ï¼š
+ *???  å…¥ï¼šè¯»å†™æ ‡å¿—ä½�ã€�??
+ *è¿”å›žå€¼ï¼š
+ *???  æœŸï¼š2021-8-17
+ **********************************************************************************/
+static int8_t RWTerrainSlopeEvening(unsigned char R_or_RW, unsigned short *value)
+{
+   if(R_or_RW == 0)
+    {
+        *value = (signed short)(GlobalVariable.ConfigPara.TerrainSlopeEvening*10);
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {     
+        GlobalVariable.ConfigParaBuffer.TerrainSlopeEvening = ((float)((signed short)(*value)))/10.0f;
+		if(GlobalVariable.ConfigParaBuffer.TerrainSlopeEvening >= -45.0f 
+            && GlobalVariable.ConfigParaBuffer.TerrainSlopeEvening <= 45.0f)
+        {
+			Log_AddParamChange(95, *value, (signed short)(GlobalVariable.ConfigPara.TerrainSlopeEvening*10));
+            GlobalVariable.ConfigPara.TerrainSlopeEvening = GlobalVariable.ConfigParaBuffer.TerrainSlopeEvening;           
+            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+        }
+		else
+		{
+			  Log_AddParamChange(95, (signed short)GlobalVariable.ConfigPara.TerrainSlope, (signed short)(GlobalVariable.ConfigPara.TerrainSlopeEvening*10));
+			  GlobalVariable.ConfigPara.TerrainSlopeEvening = GlobalVariable.ConfigPara.TerrainSlope;
+			  GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+		}
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+/*************************************************
+  Function              : RWBatteryLowTriggerValue()
+  Description           : Battery Low Trigger Value  
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.05.13
+  Additional Comments	  : [1800,2940],å¯¹åº”???è®¾ç”µåŽ‹èŒƒå›´[18V,29.4V]
+*************************************************/
+static int8_t RWBatteryLowTriggerValue(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = GlobalVariable.ConfigPara.Battery_Low_TriggerValue;
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {    
+        if(*value >= 1800 && *value <= 2940)
+		{					 
+           //LogOperation_ParameterChange( GlobalVariable.ConfigPara.Battery_Low_TriggerValue, *value );   
+		   Log_AddParamChange(REG_BATTERY_LOW_TRIGGER_VALUE, *value, GlobalVariable.ConfigPara.Battery_Low_TriggerValue);
+           GlobalVariable.ConfigPara.Battery_Low_TriggerValue = (unsigned short) *value;
+           GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+		}
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+/*************************************************
+  Function              : RWBatteryLowRecoveryValue()
+  Description           : Battery Low Recovery Value  
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.05.13
+  Additional Comments	  : [1800,2940],å¯¹åº”???è®¾ç”µåŽ‹èŒƒå›´[18V,29.4V]
+*************************************************/
+static int8_t RWBatteryLowRecoveryValue(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = GlobalVariable.ConfigPara.Battery_Low_RecoveryValue;
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {        
+		if(*value >= 1800 && *value <= 2940)
+		{	
+           //LogOperation_ParameterChange( GlobalVariable.ConfigPara.Battery_Low_RecoveryValue, *value );   
+		   Log_AddParamChange(REG_BATTERY_LOW_RECORERY_VALUE, *value, GlobalVariable.ConfigPara.Battery_Low_RecoveryValue);
+           GlobalVariable.ConfigPara.Battery_Low_RecoveryValue = (unsigned short) *value;
+           GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+		}
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+/*************************************************
+  Function              : RWBatteryEmptyTriggerValue()
+  Description           : Battery Empty Trigger Value  
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.05.13
+  Additional Comments	  : [1800,2940],å¯¹åº”???è®¾ç”µåŽ‹èŒƒå›´[18V,29.4V] 
+*************************************************/
+static int8_t RWBatteryEmptyTriggerValue(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = GlobalVariable.ConfigPara.Battery_Empty_TriggerValue;
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {      
+        if(*value >= 1800 && *value <= 2940)
+		{					
+           //LogOperation_ParameterChange( GlobalVariable.ConfigPara.Battery_Empty_TriggerValue, *value );     
+		   Log_AddParamChange(REG_BATTERY_EMPTY_TRIGGER_VALUE, *value, GlobalVariable.ConfigPara.Battery_Empty_TriggerValue);
+           GlobalVariable.ConfigPara.Battery_Empty_TriggerValue = (unsigned short) *value;
+           GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+		}
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+/*************************************************
+  Function              : RWBatteryEmptyRecoveryValue()
+  Description           : Battery Empty Recovery Value  
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.05.13
+  Additional Comments	  : [1800,2940],å¯¹åº”???è®¾ç”µåŽ‹èŒƒå›´[18V,29.4V]
+*************************************************/
+static int8_t RWBatteryEmptyRecoveryValue(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = GlobalVariable.ConfigPara.Battery_Empty_RecoveryValue;
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {        
+		if(*value >= 1800 && *value <= 2940)
+		{
+          //LogOperation_ParameterChange( GlobalVariable.ConfigPara.Battery_Empty_RecoveryValue, *value );     
+		  Log_AddParamChange(REG_BATTERY_EMPTY_RECORERY_VALUE, *value, GlobalVariable.ConfigPara.Battery_Empty_RecoveryValue);
+          GlobalVariable.ConfigPara.Battery_Empty_RecoveryValue = (unsigned short) *value;
+          GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+ GlobalVariable.SpecialCheck.MasterSetBatErrParaToSlaveFlag = 1;
+            
+		}
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+/*************************************************
+  Function              : RResetCount()
+  Description           : Reset Count 
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : tangtao
+  Revision				      : V0.0
+  Modified Date			    : 2021.10.08
+  Additional Comments	  : 
+*************************************************/
+static int8_t RResetCount1(unsigned char R_or_RW, unsigned short *value)
+{
+
+
+
+
+
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.Log.LogReset.ResetCount)+1);
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RResetCount2(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.Log.LogReset.ResetCount));
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+/*************************************************
+  Function              : RWLogEnable()
+  Description           : log enable 
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : tangtao
+  Revision				      : V0.0
+  Modified Date			    : 2021.10.08
+  Additional Comments	  : 
+*************************************************/
+static int8_t RWLogEnable(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = GlobalVariable.ConfigPara.LogEnable;
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {        
+        //LogOperation_ParameterChange( GlobalVariable.ConfigPara.LogEnable, *value );      
+		Log_AddParamChange(41, *value, GlobalVariable.ConfigPara.LogEnable);
+        GlobalVariable.ConfigPara.LogEnable = (unsigned short) *value;
+        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+/*************************************************
+  Function              : RWPIDTarget()
+  Description           : pid target 
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : tangtao
+  Revision				      : V0.0
+  Modified Date			    : 2021.10.08
+  Additional Comments	  : 
+*************************************************/
+//static int8_t RWPIDTarget(unsigned char R_or_RW, unsigned short *value)
+//{
+//    if(R_or_RW == 0)
+//    {
+//        *value = GlobalVariable.ConfigPara.Pid_Target;
+//    }
+//    else if(R_or_RW == 1)
+//    {        
+//        LogOperation_ParameterChange( GlobalVariable.ConfigPara.Pid_Target, *value );      
+//        GlobalVariable.ConfigPara.Pid_Target = (unsigned short) *value;
+//        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+//    }
+//}
+
+/*************************************************
+  Function              : RWAskOperationNo()
+  Description           : log Ask Operation No 
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : tangtao
+  Revision				      : V0.0
+  Modified Date			    : 2021.10.08
+  Additional Comments	  : 
+*************************************************/
+static int8_t RWAskOperationNo(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = GlobalVariable.Log.Ask_OperationNo ;
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {        
+        if( *value <= 100 )
+        {
+        	//Log_AddParamChange(10000 + 5, *value, GlobalVariable.Log.Ask_OperationNo);
+            GlobalVariable.Log.Ask_OperationNo = (unsigned short) *value;
+        }
+    }
+    return AS_CB_ERR_INVALID;
+}
+/*************************************************
+  Function              : 
+  Description           : from which num to read log
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : longcd
+  Revision				      : 
+  Modified Date			    : 
+  Additional Comments	  : 
+*************************************************/
+static int8_t RWLogReadNum(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = GlobalVariable.Log.read_num ;
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {        
+    	GlobalVariable.Log.read_num = *value;
+		Log_ReadToBuf(GlobalVariable.Log.read_num);
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+/*************************************************
+  Function              : RWLogOperationSum()
+  Description           : log Operation Sum
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : tangtao
+  Revision				      : V0.0
+  Modified Date			    : 2021.10.08
+  Additional Comments	  : 
+*************************************************/
+static int8_t RWLogOperationSum(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = (GlobalVariable.Log.LogOperation.Sum > 100) ? 100 : GlobalVariable.Log.LogOperation.Sum ;
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+/*************************************************
+  Function              : RWAskWarningNo()
+  Description           : log Ask Warning No 
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : tangtao
+  Revision				      : V0.0
+  Modified Date			    : 2021.10.08
+  Additional Comments	  : 
+*************************************************/
+static int8_t RWAskWarningNo(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = GlobalVariable.Log.Ask_WarningNo ;
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {        
+        if( *value <= 100 )
+        {
+            GlobalVariable.Log.Ask_WarningNo = (unsigned short) *value;
+        }
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+/*************************************************
+  Function              : RWLogWarningSum()
+  Description           : log Warning Sum
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : tangtao
+  Revision				      : V0.0
+  Modified Date			    : 2021.10.08
+  Additional Comments	  : 
+*************************************************/
+static int8_t RWLogWarningSum(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = (GlobalVariable.Log.LogWarning.Sum > 100) ? 100 : GlobalVariable.Log.LogWarning.Sum;
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+/*************************************************
+  Function              : RWInstallPostion()
+  Description           : RWInstallPostion
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2022.08.23
+  Additional Comments	  : 
+*************************************************/
+//static int8_t RWInstallPostion(unsigned char R_or_RW, unsigned short *value)
+//{
+
+//}
+/*************************************************
+  Function              : RWSouthNorthShiftAngle()
+  Description           : RWSouthNorthShiftAngle
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2022.08.25
+  Additional Comments	  : 
+*************************************************/
+static int8_t RWSouthNorthShiftAngle(unsigned char R_or_RW, unsigned short *value)
+{
+    short temp;
+	
+    if(R_or_RW == 0)
+    {
+        *value = *((( short *)&GlobalVariable.ConfigPara.SouthNorthShiftAngle));
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {
+			temp = (signed short )(*value);
+		if( abs(temp) <= MAXABS_SOUTHNORTHSHIFTANGLE_PLUS100 )
+       {
+            //LogOperation_ParameterChange( GlobalVariable.ConfigPara.SouthNorthShiftAngle, *value );  
+            Log_AddParamChange(413, *value, *((( short *)&GlobalVariable.ConfigPara.SouthNorthShiftAngle)));
+            GlobalVariable.ConfigPara.SouthNorthShiftAngle = temp;
+            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+        }
+    }
+    return AS_CB_ERR_INVALID;
+}
+/*************************************************
+  Function              : RWFacingWindStopFunction_Enable()
+  Description           : RWFacingWindStopFunction_Enable
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2022.08.30
+  Additional Comments	  : 
+*************************************************/
+static int8_t RWFacingWindStopFunction_Enable(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = GlobalVariable.ConfigPara.FacingWindStopFunction_Enable;
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {        
+        //LogOperation_ParameterChange( GlobalVariable.ConfigPara.FacingWindStopFunction_Enable, *value );      
+		Log_AddParamChange(116, *value, GlobalVariable.ConfigPara.FacingWindStopFunction_Enable);
+        GlobalVariable.ConfigPara.FacingWindStopFunction_Enable = (unsigned short) *value;
+        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+/*************************************************
+  Function              : RWYBTLoraParaEnable(unsigned char R_or_RW, unsigned short *value)
+  Description           : RWYBTLoraParaEnable
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.03.08
+  Additional Comments	  : æ”¶åˆ°ä¸Šä½�æœºä¸‹å�‘çš„ç‰¹æ®Šå­—???ï¼š0x6A6A;MCUå¼€å§‹???å�–Loraå�‚æ•°
+                          MCUè¯»å�–æˆ�åŠŸå�Žï¼Œè¯¥å¯„å­˜å™¨??????æ”¹ä¸º0x7A7A;
+                          ä¸Šä½�æœº???å�–???0x7A7Aå�Žï¼Œå†�åŽ»å¯„å­˜???201-209è¯»å�–Loraå�‚æ•°
+*************************************************/
+static int8_t RWYBTLoraParaEnable(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = GlobalVariable.SpecialCheck.ReadYBTLoraParaEnable;
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {              
+        GlobalVariable.SpecialCheck.ReadYBTLoraParaEnable = (unsigned short) *value;
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+
+/*************************************************
+  Function              : RWEFacingWindAngle(unsigned char R_or_RW, unsigned short *value)
+  Description           : RWEFacingWindAngle
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.01.09
+  Additional Comments	  : ä¸œè¿Žé£Žå�œé� ???åº¦ï¼Œå�¯è®¾èŒƒå›´å¤§äºŽç­‰???30???;
+*************************************************/
+static int8_t RWEFacingWindAngle(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.EFacingWindAngle));
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {
+        if(*value >= 30 &&  *value <= 150)
+        {
+            //LogOperation_ParameterChange( GlobalVariable.ConfigPara.EFacingWindAngle, *value );   
+			Log_AddParamChange(117, *value, GlobalVariable.ConfigPara.EFacingWindAngle);
+           *(((unsigned short *)&GlobalVariable.ConfigPara.EFacingWindAngle)) = *value;
+            GlobalVariable.WriteFlag.ConfigParaWrite = 1; 
+        } 
+    }
+    return AS_CB_ERR_INVALID;
+}
+/*************************************************
+  Function              : RWWFacingWindAngle(unsigned char R_or_RW, unsigned short *value)
+  Description           : RWWFacingWindAngle
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.01.09
+  Additional Comments	  : è¥¿è¿Žé£Žå�œé� ???åº¦ï¼Œå�¯è®¾èŒƒå›´å°�äºŽç­‰???150???;
+*************************************************/
+static int8_t RWWFacingWindAngle(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.WFacingWindAngle));
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {
+        if(*value >= 30 &&  *value <= 150)
+        {
+            //LogOperation_ParameterChange( GlobalVariable.ConfigPara.WFacingWindAngle, *value );      
+            Log_AddParamChange(118, *value, GlobalVariable.ConfigPara.WFacingWindAngle);
+           *(((unsigned short *)&GlobalVariable.ConfigPara.WFacingWindAngle)) = *value;
+            GlobalVariable.WriteFlag.ConfigParaWrite = 1; 
+        } 
+    }
+    return AS_CB_ERR_INVALID;
+}
+/*************************************************
+  Function              : RWBatteryHighTemperatureProtection_TriggerValue()
+  Description           : RWBatteryHighTemperatureProtection_TriggerValue
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.05.03
+  Additional Comments	  : porting by longcd
+*************************************************/
+static int8_t RWBatteryHighTemperatureProtection_TriggerValue(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = GlobalVariable.ConfigPara.BatteryHighTempProtectTriggerValue;
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {        
+       // LogOperation_ParameterChange( GlobalVariable.ConfigPara.BatteryHighTempProtectTriggerValue, *value );  
+       if( (*value >= 25) && (*value <= 80) )	
+       {				 
+       		Log_AddParamChange(REG_BATTERY_HIGHTEMPPRO_TRIGGER_VALUE, *value, GlobalVariable.ConfigPara.BatteryHighTempProtectTriggerValue);
+           GlobalVariable.ConfigPara.BatteryHighTempProtectTriggerValue = (unsigned short) *value;
+           GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+	   }
+    }
+    return AS_CB_ERR_INVALID;
+}
+/*************************************************
+  Function              : RWBatteryHighTemperatureProtection_ExitValue()
+  Description           : RWBatteryHighTemperatureProtection_ExitValue
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.05.03
+  Additional Comments	  : porting by longcd
+*************************************************/
+static int8_t RWBatteryHighTemperatureProtection_ExitValue(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = GlobalVariable.ConfigPara.BatteryHighTempProtectExitValue;
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {        
+       // LogOperation_ParameterChange( GlobalVariable.ConfigPara.BatteryHighTempProtectTriggerValue, *value );    
+       if( (*value >= 25) && (*value <= 80) )	
+       {			
+       		Log_AddParamChange(REG_BATTERY_HIGHTEMPPRO_EXIT_VALUE, *value, GlobalVariable.ConfigPara.BatteryHighTempProtectExitValue);
+          GlobalVariable.ConfigPara.BatteryHighTempProtectExitValue = (unsigned short) *value;
+          GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+	   }
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+static int8_t RWStopAllSlaveMotor(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = GlobalVariable.ConfigPara.StopSlaveMotorFlag;
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {        
+       // LogOperation_ParameterChange( GlobalVariable.ConfigPara.BatteryHighTempProtectTriggerValue, *value );    
+       //Ð´????????0????1????Ð´????????????????????????Ð´??
+       if( (*value == 0x01) || (*value == 0x00) )
+       {
+           if(*value != GlobalVariable.ConfigPara.StopSlaveMotorFlag)
+           {
+               Log_AddParamChange(REG_STOP_ALL_SLAVEMOTOR, *value, GlobalVariable.ConfigPara.StopSlaveMotorFlag);
+               GlobalVariable.ConfigPara.StopSlaveMotorFlag = (unsigned short) *value;
+               GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+           }
+       }
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+/*************************************************
+  Function              : RWBatSocLowRunBackWaitTime()
+  Description           : RWBatSocLowRunBackWaitTime
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.08.11
+  Additional Comments	  : BatSocLowæŠ¥???æ—¶ï¼Œè¿”å›žå¤§é£Žä¿�æŠ¤ä½�çš„ç­‰å¾…æ—¶???
+*************************************************/
+static int8_t RWBatSocLowRunBackWaitTime(unsigned char R_or_RW, unsigned short *value)
+{
+	
+    if(R_or_RW == 0)
+    {
+        *value = GlobalVariable.ConfigPara.BatSocLowRunBackWaitTime;
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {        
+       // LogOperation_ParameterChange( GlobalVariable.ConfigPara.BatteryHighTempProtectTriggerValue, *value );    
+
+	   if( (*value >= 0) && (*value <= 120) )	
+       {			
+          Log_AddParamChange(REG_BATSOCLOWRUNBACK_WAITTIME , *value, GlobalVariable.ConfigPara.BatSocLowRunBackWaitTime);								 				 
+          GlobalVariable.ConfigPara.BatSocLowRunBackWaitTime = (unsigned short) *value;
+          GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+	   }
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+
+
+/*******************************************************
+	commucation test
+*******************************************************/
+static int8_t RCommuTestCrcErr(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = CommuTest_GetOne(0);
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+static int8_t RCommuTestCrcOk(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = CommuTest_GetOne(1);
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+static int8_t RCommuTestReply(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = CommuTest_GetOne(2);
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+static int8_t RWCommuTestClearAll(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = 0;
+        return AS_CB_OK;
+    }
+	else if(R_or_RW == 1)
+	{
+		if(0xaa00 == *value)
+		{
+			CommuTest_ClearAll();
+		}
+	}
+    return AS_CB_ERR_INVALID;
+}
+ 
+
+
+/*************************************************
+  Function              : RWYBTLoraParaEnable(unsigned char R_or_RW, unsigned short *value)
+  Description           : RWYBTLoraParaEnable
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Liuchengrun
+  Revision				      : V0.0
+  Modified Date			    : 2024.03.05
+  Additional Comments	  : æ”¶åˆ°ä¸Šä½�æœºä¸‹å�‘çš„ç‰¹æ®Šå­—???ï¼š0x6B6B;MCUå¼€å§‹???å�–Bluetoothå�‚æ•°
+                          MCUè¯»å�–æˆ�åŠŸå�Žï¼Œè¯¥å¯„å­˜å™¨????æ”¹ä¸º0x7B7B;å¤±è´¥??3B3B;
+                          ä¸Šä½�æœº???å�–??0x7B7Bå�Žï¼Œå†�åŽ»å¯„å­˜??220-230è¯»å�–Bluetoothå�‚æ•°
+*************************************************/
+static int8_t RWYBTBluetoothParaEnable(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = GlobalVariable.SpecialCheck.ReadYBTBlueoothParaEnable;
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {              
+        GlobalVariable.SpecialCheck.ReadYBTBlueoothParaEnable = (unsigned short) *value;
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+static int8_t RBluetoothMACPara1(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = GlobalVariable.ConfigPara.Bluetooth_YBT_add1;
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RBluetoothMACPara2(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = GlobalVariable.ConfigPara.Bluetooth_YBT_add2;
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RBluetoothMACPara3(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = GlobalVariable.ConfigPara.Bluetooth_YBT_add3;
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+static int8_t RBluetoothMACPara4(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = GlobalVariable.ConfigPara.Bluetooth_YBT_add4;
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RBluetoothMACPara5(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = GlobalVariable.ConfigPara.Bluetooth_YBT_add5;
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RBluetoothMACPara6(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = GlobalVariable.ConfigPara.Bluetooth_YBT_add6;
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+/*************************************************
+  Function              : RWLostComm_BatsocLow_TargetAngle()
+  Description           : RWLostComm_BatsocLow_TargetAngle
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : QuXiaoWen
+  Revision				      : V0.0
+  Modified Date			    : 2024.08.14
+  Additional Comments	  : è¯»å†™ä½Žç”µé‡�æˆ–è€…å¤±è�”æ—¶çš„ä¿�æŠ¤è§’åº¦
+*************************************************/
+static int8_t RWLostComm_BatsocLow_TargetAngle(unsigned char R_or_RW, unsigned short *value)
+{
+	
+    if(R_or_RW == 0)
+    {
+        *value = GlobalVariable.ConfigPara.LostComm_BatsocLow_TargetAngle;
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {        
+       // LogOperation_ParameterChange( GlobalVariable.ConfigPara.BatteryHighTempProtectTriggerValue, *value );    
+
+	   if(*value >= 30 &&  *value <= 150)
+       {			
+          Log_AddParamChange(REG_LOSTCOMM_BATSOCLOW_TARGET_ANGLE, *value, GlobalVariable.ConfigPara.LostComm_BatsocLow_TargetAngle);								 				 
+          GlobalVariable.ConfigPara.LostComm_BatsocLow_TargetAngle = (unsigned short) *value;
+          GlobalVariable.WriteFlag.ConfigParaWrite = 1;//
+	   }
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+
+
+
+
+/*************************************************
+crcç»Ÿ??????æ•°
+*************************************************/
+
+static int8_t RCommuTest_RecvID_Tracker_CrcOK(unsigned char R_or_RW, unsigned short *value)
+{	
+    if(R_or_RW == 0)
+    {
+        *value =  CommuTest_GetOne(3);
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+/*************************************************
+crcç»Ÿ??????æ•°
+*************************************************/
+
+static int8_t RCommuTest_RecvID_Tracker_Reply(unsigned char R_or_RW, unsigned short *value)
+{	
+    if(R_or_RW == 0)
+    {
+        *value = CommuTest_GetOne(4);
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+/*************************************************
+crcç»Ÿ??????æ•°
+*************************************************/
+
+static int8_t RCommuTest_RecvID_Tracker_CrcErr(unsigned char R_or_RW, unsigned short *value)
+{	
+    if(R_or_RW == 0)
+    {
+        *value = CommuTest_GetOne(5);
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+/*************************************************
+crcç»Ÿ??????æ•°
+*************************************************/
+
+static int8_t RCommuTest_RecvID_00_CrcOK(unsigned char R_or_RW, unsigned short *value)
+{	
+    if(R_or_RW == 0)
+    {
+        *value = CommuTest_GetOne(6);
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+/*************************************************
+crcç»Ÿ??????æ•°
+*************************************************/
+
+static int8_t RCommuTest_RecvID_00_CrcErr(unsigned char R_or_RW, unsigned short *value)
+{	
+    if(R_or_RW == 0)
+    {
+        *value = CommuTest_GetOne(7);
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+
+
+
+
+
+
+static void ReadUIRightPanelMasterSlaveAlarmsHighPart2(unsigned char R_or_RW, unsigned short *value )
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.UIRightPanelMasterSlaveAlarms[0])+1);
+    }
+}
+static void ReadUIRightPanelMasterSlaveAlarmsLowPart2(unsigned char R_or_RW, unsigned short *value )
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.UIRightPanelMasterSlaveAlarms[0]));
+    }
+}
+
+static void ReadUIRightPanelMasterSlaveAlarmsHighPart3(unsigned char R_or_RW, unsigned short *value )
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.UIRightPanelMasterSlaveAlarms[1])+1);
+    }
+}
+static void ReadUIRightPanelMasterSlaveAlarmsLowPart3(unsigned char R_or_RW, unsigned short *value )
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.UIRightPanelMasterSlaveAlarms[1]));
+    }
+}
+
+
+
+static int8_t RWWarningAndFaultOfSlave_1(unsigned char R_or_RW, unsigned short *value )
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.PowerAndCommonSlaveAlarmsUpdate[0]));
+       // *value = 0xFFFF;
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+
+static int8_t RWWarningAndFaultOfSlave_2(unsigned char R_or_RW, unsigned short *value )
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.PowerAndCommonSlaveAlarmsUpdate[1]));
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+static int8_t RWWarningAndFaultOfSlave_3(unsigned char R_or_RW, unsigned short *value )
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.PowerAndCommonSlaveAlarmsUpdate[2]));
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RWWarningAndFaultOfSlave_4(unsigned char R_or_RW, unsigned short *value )
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.PowerAndCommonSlaveAlarmsUpdate[3]));
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+static int8_t RWWarningAndFaultOfSlave_5(unsigned char R_or_RW, unsigned short *value )
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.PowerAndCommonSlaveAlarmsUpdate[4]));
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RWWarningAndFaultOfSlave_6(unsigned char R_or_RW, unsigned short *value )
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.PowerAndCommonSlaveAlarmsUpdate[5]));
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RWWarningAndFaultOfSlave_7(unsigned char R_or_RW, unsigned short *value )
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.PowerAndCommonSlaveAlarmsUpdate[6]));
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}   
+static int8_t RWWarningAndFaultOfSlave_8(unsigned char R_or_RW, unsigned short *value )
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.PowerAndCommonSlaveAlarmsUpdate[7]));
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}   
+static int8_t RWWarningAndFaultOfSlave_9(unsigned char R_or_RW, unsigned short *value )
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.PowerAndCommonSlaveAlarmsUpdate[8]));
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RWWarningAndFaultOfSlave_10(unsigned char R_or_RW, unsigned short *value )
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.PowerAndCommonSlaveAlarmsUpdate[9]));
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RWWarningAndFaultOfSlave_11(unsigned char R_or_RW, unsigned short *value )
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.PowerAndCommonSlaveAlarmsUpdate[10]));
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RWWarningAndFaultOfSlave_12(unsigned char R_or_RW, unsigned short *value )
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.PowerAndCommonSlaveAlarmsUpdate[11]));
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}   
+static int8_t RWWarningAndFaultOfSlave_13(unsigned char R_or_RW, unsigned short *value )
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.PowerAndCommonSlaveAlarmsUpdate[12]));
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RWWarningAndFaultOfSlave_14(unsigned char R_or_RW, unsigned short *value )
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.PowerAndCommonSlaveAlarmsUpdate[13]));
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RWWarningAndFaultOfSlave_15(unsigned char R_or_RW, unsigned short *value )
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.PowerAndCommonSlaveAlarmsUpdate[14]));
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RWWarningAndFaultOfSlave_16(unsigned char R_or_RW, unsigned short *value )
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.PowerAndCommonSlaveAlarmsUpdate[15]));
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RWWarningAndFaultOfSlave_17(unsigned char R_or_RW, unsigned short *value )
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.PowerAndCommonSlaveAlarmsUpdate[16]));
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RWWarningAndFaultOfSlave_18(unsigned char R_or_RW, unsigned short *value )
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.PowerAndCommonSlaveAlarmsUpdate[17]));
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+static int8_t RWWarningAndFaultOfSlave_19(unsigned char R_or_RW, unsigned short *value )
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.PowerAndCommonSlaveAlarmsUpdate[18]));
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+static int8_t RWWarningAndFaultOfSlave_20(unsigned char R_or_RW, unsigned short *value )
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.PowerAndCommonSlaveAlarmsUpdate[19]));
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}   
+
+
+
+
+
+static int8_t RWStaticDiffAngle(unsigned char R_or_RW, unsigned short *value )
+{
+    if(R_or_RW == 0)
+    {
+		
+        *value = GlobalVariable.ConfigPara.staticDiffAngle;
+        return AS_CB_OK;
+    }
+    else if((R_or_RW == 1)&&( *value >= 3.0f && *value <= 6.0f)&&(GlobalVariable.ConfigPara.staticDiffAngle != *value))
+    {
+    
+        Log_AddParamChange(REG_STATIC_DIFF_ANGLE, *value, GlobalVariable.ConfigPara.staticDiffAngle);
+        GlobalVariable.ConfigPara.staticDiffAngle = (unsigned short) *value;
+        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+    }
+    return AS_CB_ERR_INVALID;
+}
+		
+
+static int8_t RWMoveDiffAngle(unsigned char R_or_RW, unsigned short *value )
+{
+	  if(R_or_RW == 0)
+    {
+        *value = GlobalVariable.ConfigPara.moveDiffAngle;
+        return AS_CB_OK;
+    }
+    else if((R_or_RW == 1)&&( *value >= 3.0f && *value <= 10.0f)&&(GlobalVariable.ConfigPara.moveDiffAngle!= *value))
+    {
+    
+        Log_AddParamChange(REG_MOVE_DIFF_ANGLE, *value, GlobalVariable.ConfigPara.moveDiffAngle);
+        GlobalVariable.ConfigPara.moveDiffAngle = (unsigned short) *value;
+        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+/*************************************************
+  Function              : RWWeaherState(unsigned char R_or_RW, unsigned short *value)
+  Description           : RWWeaherState(unsigned char R_or_RW, unsigned short *value)
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2024.11.14
+  Additional Comments	  : å¤©æ°”çŠ¶æ€�
+                         1ï¼šæ™´å¤©(è‡ªåŠ¨è·Ÿè¸ª)
+                         3ï¼šè¿‡æ¸¡å¤©æ°”(ä¸Šå�ˆå�œ80åº¦ï¼Œä¸‹å�ˆå�œ100åº¦)
+                         4ï¼šé˜´å¤©(å�œ90åº¦)
+*************************************************/
+static int8_t RWWeaherState(unsigned char R_or_RW, unsigned short *value)
+{    
+	static unsigned short WeatherStateTemp = 0;
+	
+	if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&WeaherState));
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {
+        *(((unsigned short *)&WeaherState)) = *value;
+			  
+		 WeaherStateTime     =  GlobalVariable.Time.TodayTime;			// å½“å‰�æ—¶é—´
+	     WeaherStateTimeFlag =  1;
+		 Log_AddParamChange(REG_WEATHERSTATE  , *value, WeatherStateTemp);	
+		 WeatherStateTemp = *value;
+    }
+    return AS_CB_ERR_INVALID;
+}
+
+
+
+//ä»¥ä¸‹å†…???ä¸ºæ–°???ç²¾ç®€å��???åŠŸèƒ½
+/*************************************************
+  Function              : RProtocol_Version()
+  Description           : RProtocol_Version
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.06.25
+  Additional Comments	  : å��???ç‰ˆæœ¬,RegAddr: 29;ï¼ˆä¾›ä¸Šä½�æœºå’Œé€š???ç®±åŒºåˆ†ä½¿ç”¨ä¸�å�Œçš„å��???ç‰ˆæœ¬,é€š???ç®±???å¸¸???è¯¢æ—¶???ä»¥çŸ¥é�“æ˜¯å�¦æ”¯æŒ�æ–°å��??????
+                         0xAAF2:???æŒ�æ–°çš„ç²¾ç®€å��???ï¼Œå�Œæ—¶å…¼å®¹æ—§çš„å��???
+                         å…¶ä»–å€¼ï¼š??????æŒ�æ—§å��???
+*************************************************/
+static int8_t RProtocol_Version(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = GlobalVariable.FixePara.ProtocolVersion;
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+/*************************************************
+  Function              : RProtocol_Version_S()
+  Description           : RProtocol_Version_S
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.06.25
+  Additional Comments	  : å��???ç‰ˆæœ¬,RegAddr: 29;ï¼ˆä¾›ä¸Šä½�æœºå’Œé€š???ç®±åŒºåˆ†ä½¿ç”¨ä¸�å�Œçš„å��???ç‰ˆæœ¬,é€š???ç®±???å¸¸???è¯¢æ—¶???ä»¥çŸ¥é�“æ˜¯å�¦æ”¯æŒ�æ–°å��??????
+                         0xAAF2:???æŒ�æ–°çš„ç²¾ç®€å��???ï¼Œå�Œæ—¶å…¼å®¹æ—§çš„å��???
+                         å…¶ä»–å€¼ï¼š??????æŒ�æ—§å��???
+*************************************************/
+static int8_t RProtocol_Version_S(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = GlobalVariable.FixePara.ProtocolVersion;
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+/*************************************************
+  Function              : RDeviceType_S()
+  Description           : RDeviceType_S
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.06.25
+Additional Comments	  : ç²¾ç®€å��???å†…çš„è®¾???ç±»åž‹ï¼š
+*************************************************/
+static int8_t RDeviceType_S(unsigned char R_or_RW, unsigned short *value )
+{
+    if(R_or_RW == 0)
+    {
+        *value = GlobalVariable.FixePara.DeviceType;
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+/*************************************************
+  Function              : RDeviceEdition_S()
+  Description           : RDeviceEdition_S
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.06.25
+Additional Comments	  : ç²¾ç®€å��???å†…çš„å¤§ç‰ˆ???å�·ï¼Œ???8ä¸ºè½¯ä»¶ç‰ˆ???å�·ï¼Œ???8ä½�ä¸º???ä»¶ç‰ˆ???å�·ï¼š
+*************************************************/
+static int8_t RDeviceEdition_S(unsigned char R_or_RW, unsigned short *value )
+{
+    if(R_or_RW == 0)
+    {
+        *value = GlobalVariable.FixePara.DeviceEdition;
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+/*************************************************
+  Function              : RVersion1_S()
+  Description           : RVersion1_S
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.06.25
+Additional Comments	  : ç²¾ç®€å��???å°�ç‰ˆ???å�·ï¼›???8ä½�ä¸ºè®¾???ç±»åž‹ï¼Œ???8ä½�æš‚æ—¶ä¸�??????
+*************************************************/
+static int8_t RVersion1_S(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = (unsigned short)(GlobalVariable.FixePara.Version1);
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+/*************************************************
+  Function              : RVersion2_S()
+  Description           : RVersion2_S
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.06.25
+Additional Comments	  : ç²¾ç®€å��???å°�ç‰ˆ???å�·ï¼›???8ä½�ä¸ºå�‘å¸ƒç‰ˆæœ¬å�·ï¼Œ???8ä½�ä¸ºæµ‹è¯•ç‰ˆæœ¬å�·ï¼š
+*************************************************/
+static int8_t RVersion2_S(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = (unsigned short)(GlobalVariable.FixePara.Version2);
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+/*************************************************
+  Function              : RPVBuckerVoltage_S
+  Description           : RPVBuckerVoltage_S
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.06.25
+Additional Comments	  : ç²¾ç®€å��???PVç»„ä»¶ç”µåŽ‹ï¼Œæ”¾???10å€�ï¼š
+*************************************************/
+static int8_t RPVBuckerVoltage_S(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = (unsigned short)(GlobalVariable.PowerPara.PVBuckerVoltage * 10);
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+/*************************************************
+  Function              : RBatVoltage_S
+  Description           : RBatVoltage_S
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.06.25
+Additional Comments	  : ç²¾ç®€å��???ç”µæ± ç”µåŽ‹ï¼Œæ”¾???10å€�ï¼š
+*************************************************/
+static int8_t RBatVoltage_S(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = (unsigned short)(GlobalVariable.PowerPara.BatteryVoltage * 10);
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+/*************************************************
+  Function              : RBatSOCTemp_S()
+  Description           : RBatSOCTemp_S
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.06.25
+Additional Comments	  : ç²¾ç®€å��???ç”µæ± SOC(æ”¾å¤§100???)/;
+*************************************************/
+static int8_t RBatSOCTemp_S(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = 0x00FF & (unsigned char)(GlobalVariable.PowerPara.BatterySOC*100);
+        *value = *value << 8;
+        *value &= 0xFF00;
+        *value |= ((signed char)(GlobalVariable.PowerPara.BatteryTemperature) & 0x00FF);
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+/*************************************************
+  Function              : RTemp_S()
+  Description           : RTemp_S
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.06.26
+Additional Comments	  : ç²¾ç®€å��???ä¸»æ�¿æ¸©åº¦/;
+*************************************************/
+static int8_t RTemp_S(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(unsigned short *)&GlobalVariable.Tmp.BoardTmp;
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+/*************************************************
+  Function              : RBatState_BatCurrent_S()
+  Description           : RBatState_BatCurrent_S
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.06.26
+Additional Comments	  : ç²¾ç®€å��???ç”µæ± å……ç”µçŠ¶??/ç”µæ± ç”µæµ�;
+*************************************************/
+static int8_t RBatState_BatCurrent_S(unsigned char R_or_RW, unsigned short *value)
+{
+	  signed short temp = 0;
+	
+	  temp = (signed short)(GlobalVariable.PowerPara.BatteryCurrent*100);
+    
+    if(R_or_RW == 0)
+    {
+        *value = 0;
+        *value |= (*(unsigned char*)(&GlobalVariable.PowerPara.ChargeState)) << 12;
+			  *value |= *((unsigned short *)&temp);
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+/*************************************************
+  Function              : RWWorkMode1_S()
+  Description           : RWWorkMode1_S
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.06.26
+Additional Comments	  : ç²¾ç®€å��???å·¥ä½œæ¨¡å¼�;
+*************************************************/
+static int8_t RWWorkMode1_S(unsigned char R_or_RW, unsigned short *value )
+{
+	int i;
+
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.WorkMode.WorkMode));
+        return AS_CB_OK;
+    }
+//    else if(R_or_RW == 1)
+//    {
+//       // LogOperation_ParameterChange( GlobalVariable.WorkMode.WorkMode, GlobalVariable.WorkModeBuffer.WorkMode );      
+//        *(((unsigned short *)&GlobalVariable.WorkModeBuffer.WorkMode)) = *value;
+
+//		if((GlobalVariable.WorkMode.WorkMode & 0xffff) != *value)
+//		{
+//	        Log_AddWorkModeChange(*value, GlobalVariable.WorkMode.WorkMode,LOG_WORK_MODE_RCV);
+//		}
+//		
+//		for(i = 0; i < sizeof(valid_mode)/sizeof(valid_mode[0]); i++)
+//		{
+//			if(*value == valid_mode[i])
+//			{
+//				break;
+//			}
+//		}
+//		
+//		if(i >= sizeof(valid_mode)/sizeof(valid_mode[0]))
+//		{
+//			return AS_CB_ERR_INVALID;	//é�žæœ‰æ•ˆæ¨¡å¼�ç›´æŽ¥è¿”???
+//		}
+
+//		if((GlobalVariable.WorkModeBuffer.WorkMode & 0xFF) == 0xFF)
+//        {
+//            NVIC_SystemReset();
+//        }
+//        else if((GlobalVariable.WorkModeBuffer.WorkMode & 0xFF) == 0xFE)//å�œæœºæ¨¡å¼�
+//        {
+//					GlobalVariable.WorkMode.WorkMode = GlobalVariable.WorkMode.WorkMode; //å¦‚æžœæ”¶åˆ°é€š???ç®±å�œæœºæ¨¡å¼�ï¼Œä¿�æŒ�åŽŸæ¨¡å¼�ï¼Œä¸�å“�???
+////            MotorAllStop();            /* Stop */
+////            GlobalVariable.WorkModeBuffer.WorkMode = AUTO_TRACKER_MODE; 
+////					  RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);	//ä½¿èƒ½PWRå¤–???æ—¶???
+////	          
+////					  EXTI_InitTypeDef EXTI_InitStructure;
+//// 	          NVIC_InitTypeDef NVIC_InitStructure;
+////  	        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);	//ä½¿èƒ½å¤�ç”¨åŠŸèƒ½æ—¶é’Ÿ
+
+//					//						//GPIOE.2 ??????çº¿ä»¥å�Šä¸­???åˆ�???åŒ–é…�ç½®   ä¸‹é™�æ²¿è§¦???  LORA_RX : PA10
+////						GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource10);
+////					
+////						EXTI_InitStructure.EXTI_Line=EXTI_Line10;	//PA10
+////						EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;	
+////						EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling;
+////						EXTI_InitStructure.EXTI_LineCmd = ENABLE;
+////						EXTI_Init(&EXTI_InitStructure);	 	//æ ¹æ�®EXTI_InitStruct???æŒ‡å®šçš„å�‚æ•°åˆ�å§‹åŒ–å¤–???EXTIå¯„å­˜???
+
+////  	        NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;			//ä½¿èƒ½æŒ‰é”®WK_UPæ‰€åœ¨çš„å¤–éƒ¨??????é€šé�“
+////						NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;	//æŠ¢å� ä¼˜å…ˆ???2??? 
+////						NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x03;					//å­�ä¼˜å…ˆçº§3
+////						NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;								//ä½¿èƒ½å¤–éƒ¨??????é€šé�“
+////						NVIC_Init(&NVIC_InitStructure); 
+////						
+////						IWDG_ReloadCounter(); 
+////						IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
+////						IWDG_SetPrescaler(IWDG_Prescaler_256);
+////						IWDG_SetReload(0xFFF); 
+////						IWDG_ReloadCounter();
+////						
+////						RTC_Local_Init();
+////						
+////						us_tick = SysTick->CTRL;
+////			      SysTick->CTRL  = 0; 
+////	          PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);//STOPæ¨¡å¼�
+////						OS_ERR err; 
+////						OSSchedLock(&err);
+////						while(1)
+////						{
+////								if(uc_rtcFlag==1)
+////								{
+////										uc_rtcFlag = 0;
+////										SysTick->CTRL = us_tick;
+////										SystemInit();
+////										OS_CPU_SysTickInit(720000); 
+////										IWDG_ReloadCounter();
+////										RCC_LSICmd(ENABLE);
+////										RTC_WaitForSynchro();	
+////										RTC_Local_Init();
+////										us_tick = SysTick->CTRL;
+////										SysTick->CTRL  = 0; 
+////										PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);//STOPæ¨¡å¼�
+////								}
+////						} 
+//        }
+//        else if ((GlobalVariable.WorkModeBuffer.WorkMode & 0xFF) == AUTO_AI_MODE)
+//        {
+//            GlobalVariable.WorkMode.WorkMode = GlobalVariable.WorkModeBuffer.WorkMode;
+//            GlobalVariable.AIPara.AIRemoteAngle=GlobalVariable.Motor[0].ActualAngle;
+//        }
+//        else
+//        {
+//            GlobalVariable.WorkMode.WorkMode = GlobalVariable.WorkModeBuffer.WorkMode;
+//        }
+//    }
+    return AS_CB_ERR_INVALID;
+}
+/*************************************************
+  Function              : RWarningAndFault1_1_S()
+  Description           : RWarningAndFault1_1_S
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.06.26
+Additional Comments	  : ç²¾ç®€å��???Alarm; 
+*************************************************/
+static int8_t RWarningAndFault1_1_S(unsigned char R_or_RW, unsigned short *value )
+{
+    if(R_or_RW == 0)
+    {
+//        *value = *(((unsigned short *)&GlobalVariable.MasterselfWarningAndFault)+1);
+        *value = *(((unsigned short *)&GlobalVariable.SystemWarningAndFaultUpdate)+1);
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+/*************************************************
+  Function              : RWarningAndFault1_2_S()
+  Description           : RWarningAndFault1_2_S
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.06.26
+Additional Comments	  : ç²¾ç®€å��???Alarm; 
+*************************************************/
+static int8_t RWarningAndFault1_2_S(unsigned char R_or_RW, unsigned short *value )
+{
+    if(R_or_RW == 0)
+    {
+//        *value = *(((unsigned short *)&GlobalVariable.MasterselfWarningAndFault));
+        *value = *(((unsigned short *)&GlobalVariable.SystemWarningAndFaultUpdate));
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+/*************************************************
+  Function              : RMotorCurrent1_S()
+  Description           : RMotorCurrent1_S
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.06.26
+Additional Comments	  : ç²¾ç®€å��???ç”µæœºç”µæµ�; 
+*************************************************/
+static int8_t RMotorCurrent1_S(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = (short)(GlobalVariable.Motor[0].Motorcurrent * 10);
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+} 
+/*************************************************
+  Function              : RTargetAngle1_S()
+  Description           : RTargetAngle1_S
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.06.26
+Additional Comments	  : ç²¾ç®€å��??????æ ‡???åº¦,æ”¾å¤§100å€�ï¼› 
+*************************************************/
+static int8_t RTargetAngle1_S(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = (unsigned short )(GlobalVariable.WorkMode.Target * 100);
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+} 
+/*************************************************
+  Function              : RRealAngle1_S()
+  Description           : RRealAngle1_S
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.06.26
+Additional Comments	  : ç²¾ç®€å��???å®žé™…è§’åº¦,æ”¾å¤§100å€�ï¼› 
+*************************************************/
+static int8_t RRealAngle1_S(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = ( unsigned short )(GlobalVariable.Motor[0].ActualAngle * 100);
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+/*************************************************
+  Function              : RWWorkMode2_S()
+  Description           : RWWorkMode2_S
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.06.26
+Additional Comments	  : ç²¾ç®€å��???å·¥ä½œæ¨¡å¼�;
+*************************************************/
+static int8_t RWWorkMode2_S(unsigned char R_or_RW, unsigned short *value )
+{
+    return AS_CB_ERR_INVALID;
+}
+/*************************************************
+  Function              : RWarningAndFault1_1_S()
+  Description           : RWarningAndFault1_1_S
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.06.26
+Additional Comments	  : ç²¾ç®€å��???Alarm; 
+*************************************************/
+static int8_t RWarningAndFault2_1_S(unsigned char R_or_RW, unsigned short *value )
+{
+    return AS_CB_ERR_INVALID;
+}
+/*************************************************
+  Function              : RWarningAndFault1_2_S()
+  Description           : RWarningAndFault1_2_S
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.06.26
+Additional Comments	  : ç²¾ç®€å��???Alarm; 
+*************************************************/
+static int8_t RWarningAndFault2_2_S(unsigned char R_or_RW, unsigned short *value )
+{
+    return AS_CB_ERR_INVALID;
+}
+/*************************************************
+  Function              : RMotorCurrent1_S()
+  Description           : RMotorCurrent1_S
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.06.26
+Additional Comments	  : ç²¾ç®€å��???ç”µæœºç”µæµ�; 
+*************************************************/
+static int8_t RMotorCurrent2_S(unsigned char R_or_RW, unsigned short *value)
+{
+    return AS_CB_ERR_INVALID;
+} 
+/*************************************************
+  Function              : RTargetAngle1_S()
+  Description           : RTargetAngle1_S
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.06.26
+Additional Comments	  : ç²¾ç®€å��??????æ ‡???åº¦,æ”¾å¤§100å€�ï¼› 
+*************************************************/
+static int8_t RTargetAngle2_S(unsigned char R_or_RW, unsigned short *value)
+{
+    return AS_CB_ERR_INVALID;
+} 
+/*************************************************
+  Function              : RRealAngle2_S()
+  Description           : RRealAngle2_S
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.06.26
+Additional Comments	  : ç²¾ç®€å��??????æ ‡???åº¦,æ”¾å¤§100å€�ï¼› 
+*************************************************/
+static int8_t RRealAngle2_S(unsigned char R_or_RW, unsigned short *value)
+{
+    return AS_CB_ERR_INVALID;
+}
+/*************************************************
+  Function              : RWAIRemoteTarget1_S()
+  Description           : RWAIRemoteTarget1_S
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.06.26
+Additional Comments	  : ç²¾ç®€å��???è¿œç¨‹???æ ‡???åº¦1??? 
+*************************************************/
+static int8_t RWAIRemoteTarget1_S(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = (unsigned short)GlobalVariable.AIPara.AIRemoteAngle;
+        return AS_CB_OK;
+    }
+//    else if(R_or_RW == 1)
+//    {
+//       // LogOperation_ParameterChange( GlobalVariable.AIPara.AIRemoteAngle, *value );   
+//       Log_AddParamChange(384, *value, (unsigned short)GlobalVariable.AIPara.AIRemoteAngle);
+//        GlobalVariable.AIPara.AIRemoteAngle = (float)*value;
+//        GlobalVariable.AIPara.AIModeDelayCount = 0;
+//    }
+    return AS_CB_ERR_INVALID;
+}
+/*************************************************
+  Function              : RWAIRemoteTarget2_S()
+  Description           : RWAIRemoteTarget2_S
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.06.26
+Additional Comments	  : ç²¾ç®€å��???è¿œç¨‹???æ ‡???åº¦2??? 
+*************************************************/
+static int8_t RWAIRemoteTarget2_S(unsigned char R_or_RW, unsigned short *value)
+{
+    return AS_CB_ERR_INVALID;
+}
+/*************************************************
+  Function              : RWRemoteWindDirect_S()
+  Description           : RWRemoteWindDirect_S
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.06.26
+Additional Comments	  : ç²¾ç®€å��???è¿œç¨‹é£Žå�‘???
+*************************************************/
+static int8_t RWRemoteWindDirect_S(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = GlobalVariable.Weather.RemoteWindDirect;
+        return AS_CB_OK;
+    }
+//    else if(R_or_RW == 1)
+//    {
+//    	Log_AddParamChange(387, *value, GlobalVariable.Weather.RemoteWindDirect);
+//        GlobalVariable.Weather.RemoteWindDirect = *value;
+//    }
+    return AS_CB_ERR_INVALID;
+}
+/*************************************************
+  Function              : RWRemoteWindSpeed_S()
+  Description           : RWRemoteWindSpeed_S
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.06.26
+Additional Comments	  : ç²¾ç®€å��???è¿œç¨‹é£Žé€Ÿï¼›
+*************************************************/
+static int8_t RWRemoteWindSpeed_S(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = GlobalVariable.Weather.RemoteWindSpeed;
+        return AS_CB_OK;
+    }
+//    else if(R_or_RW == 1)
+//    {
+//      //  LogOperation_ParameterChange( GlobalVariable.Weather.RemoteWindSpeed, *value );    
+//      Log_AddParamChange(386, *value, GlobalVariable.Weather.RemoteWindSpeed);
+//        GlobalVariable.Weather.RemoteWindSpeed = *value;
+//    }
+    return AS_CB_ERR_INVALID;
+}
+/*************************************************
+  Function              : RWLongitude1_S()
+  Description           : RWLongitude1_S
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.06.26
+Additional Comments	  : ç²¾ç®€å��???ç»�åº¦??? 
+*************************************************/
+/* Longitude */
+static int8_t RWLongitude1_S(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.Longitude)+1);
+        return AS_CB_OK;
+    }
+//    else if(R_or_RW == 1)
+//    {
+//    	Log_AddParamChange(388, *value, *(((unsigned short *)&GlobalVariable.ConfigPara.Longitude)+1));
+//        *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.Longitude)+1) = *value;
+//    }
+    return AS_CB_ERR_INVALID;
+}
+/*************************************************
+  Function              : RWLongitude2_S()
+  Description           : RWLongitude2_S
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.06.26
+Additional Comments	  : ç²¾ç®€å��???ç»�åº¦??? 
+*************************************************/
+static int8_t RWLongitude2_S(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.Longitude));
+        return AS_CB_OK;
+    }
+//    else if(R_or_RW == 1)
+//    {
+//        *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.Longitude)) = *value;
+//      //  LogOperation_ParameterChange( GlobalVariable.ConfigPara.Longitude, GlobalVariable.ConfigParaBuffer.Longitude );      
+//        
+//        if(GlobalVariable.ConfigParaBuffer.Longitude >= -180.0
+//            &&GlobalVariable.ConfigParaBuffer.Longitude <= 180.0 )
+//        {
+//        	Log_AddParamChange(389, *value, *(((unsigned short *)&GlobalVariable.ConfigPara.Longitude)));
+//            GlobalVariable.ConfigPara.Longitude = GlobalVariable.ConfigParaBuffer.Longitude;
+//            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+//        }
+//    }
+    return AS_CB_ERR_INVALID;
+}
+
+/*************************************************
+  Function              : RWLatitude1_S()
+  Description           : RWLatitude1_S
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.06.26
+Additional Comments	  : ç²¾ç®€å��??????åº¦ï¼› 
+*************************************************/
+static int8_t RWLatitude1_S(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.Latitude)+1);
+        return AS_CB_OK;
+    }
+//    else if(R_or_RW == 1)
+//    {
+//        *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.Latitude)+1) = *value;
+//    }
+    return AS_CB_ERR_INVALID;
+}
+/*************************************************
+  Function              : RWLatitude2_S()
+  Description           : RWLatitude2_S
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.06.26
+Additional Comments	  : ç²¾ç®€å��??????åº¦ï¼› 
+*************************************************/
+static int8_t RWLatitude2_S(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.Latitude));
+        return AS_CB_OK;
+    }
+//    else if(R_or_RW == 1)
+//    {
+//        *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.Latitude)) = *value;
+//        if(GlobalVariable.ConfigParaBuffer.Latitude >= -90.0 
+//            && GlobalVariable.ConfigParaBuffer.Latitude <= 90.0)
+//        {
+//            Log_AddParamChange(390, *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.Latitude)+1), *(((unsigned short *)&GlobalVariable.ConfigPara.Latitude)+1));
+//        	Log_AddParamChange(391, *value, *(((unsigned short *)&GlobalVariable.ConfigPara.Latitude)));
+//            GlobalVariable.ConfigPara.Latitude = GlobalVariable.ConfigParaBuffer.Latitude;
+//            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+//        }
+//    }
+    return AS_CB_ERR_INVALID;
+}
+/*************************************************
+  Function              : RWTimeZone1_S()
+  Description           : RWTimeZone1_S
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.06.26
+Additional Comments	  : ç²¾ç®€å��???æ—¶åŒº??? 
+*************************************************/
+static int8_t RWTimeZone1_S(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.TimeZone)+1);
+        return AS_CB_OK;
+    }
+//    else if(R_or_RW == 1)
+//    {
+//        *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.TimeZone)+1) = *value;
+//    }
+    return AS_CB_ERR_INVALID;
+}
+/*************************************************
+  Function              : RWTimeZone2_S()
+  Description           : RWTimeZone2_S
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.06.26
+Additional Comments	  : ç²¾ç®€å��???æ—¶åŒº??? 
+*************************************************/
+static int8_t RWTimeZone2_S(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.TimeZone));
+        return AS_CB_OK;
+    }
+//    else if(R_or_RW == 1)
+//    {
+//        *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.TimeZone)) = *value;
+//       // LogOperation_ParameterChange( GlobalVariable.ConfigPara.TimeZone, GlobalVariable.ConfigParaBuffer.TimeZone );      
+//        if(GlobalVariable.ConfigParaBuffer.TimeZone >= -12.0
+//            && GlobalVariable.ConfigParaBuffer.TimeZone <= 12.0)
+//        {
+//            Log_AddParamChange(392, *(((unsigned short *)&GlobalVariable.ConfigParaBuffer.TimeZone)+1), *(((unsigned short *)&GlobalVariable.ConfigPara.TimeZone)+1));
+//        	Log_AddParamChange(393, *value, *(((unsigned short *)&GlobalVariable.ConfigPara.TimeZone)));
+//            GlobalVariable.ConfigPara.TimeZone = GlobalVariable.ConfigParaBuffer.TimeZone;
+//            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+//        }
+//    }
+    return AS_CB_ERR_INVALID;
+}
+/*************************************************
+  Function              : RWTimeYearMonth_S()
+  Description           : RWTimeYearMonth_S
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.06.27
+Additional Comments	  : ç²¾ç®€å��???å¹´ï¼Œæœˆï¼› å¹´ï¼š???8ä½�ï¼›æœˆï¼š???8???
+*************************************************/
+static int8_t RWTimeYearMonth_S(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = ((GlobalVariable.Time.Year % 2000) << 8) | (GlobalVariable.Time.Month);
+        return AS_CB_OK;
+    }
+//    else if(R_or_RW == 1)
+//    {
+//      //  LogOperation_ParameterChange( GlobalVariable.TimeBuffer.Year, *value );    
+//        GlobalVariable.TimeBuffer.Year = 2000 + (*value >> 8); 
+//			  GlobalVariable.TimeBuffer.Month = (*value & 0xFF);
+//        GlobalVariable.WriteFlag.TimeWrite = 2;
+//    }
+    return AS_CB_ERR_INVALID;
+}
+/*************************************************
+  Function              : RWTimeDayHour_S()
+  Description           : RWTimeDayHour_S
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.06.27
+Additional Comments	  : ç²¾ç®€å��???æ—¥ï¼Œæ—¶ï¼› æ—¥ï¼š???8ä½�ï¼›æ—¶ï¼š???8???
+*************************************************/
+static int8_t RWTimeDayHour_S(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = ((GlobalVariable.Time.Day) << 8) | (GlobalVariable.Time.Hour);
+        return AS_CB_OK;
+    }
+//    else if(R_or_RW == 1)
+//    {
+//      //  LogOperation_ParameterChange( GlobalVariable.TimeBuffer.Year, *value );      
+//        GlobalVariable.TimeBuffer.Day =  (*value >> 8); 
+//			  GlobalVariable.TimeBuffer.Hour = (*value & 0xFF);
+//        GlobalVariable.WriteFlag.TimeWrite = 2;
+//    }
+    return AS_CB_ERR_INVALID;
+} 
+/*************************************************
+  Function              : RWTimeMinuteSecond_S()
+  Description           : RWTimeMinuteSecond_S
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.06.27
+Additional Comments	  : ç²¾ç®€å��???åˆ†ï¼Œç§’ï¼› åˆ†ï¼š???8ä½�ï¼›ç§’ï¼š???8???
+*************************************************/
+static int8_t RWTimeMinuteSecond_S(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = ((GlobalVariable.Time.Minute) << 8) | (GlobalVariable.Time.Second);
+        return AS_CB_OK;
+    }
+//    else if(R_or_RW == 1)
+//    {
+//      //  LogOperation_ParameterChange( GlobalVariable.TimeBuffer.Year, *value );      
+//        GlobalVariable.TimeBuffer.Minute =  (*value >> 8); 
+//			  GlobalVariable.TimeBuffer.Second = (*value & 0xFF);
+//        GlobalVariable.WriteFlag.TimeWrite = 2;
+//    }
+    return AS_CB_ERR_INVALID;
+}
+/*************************************************
+  Function              : RElevationAngle1_S()
+  Description           : RElevationAngle1_S
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.06.27
+  Additional Comments	  : ç²¾ç®€å��???ï¼Œå¤ªé˜³é«˜åº¦???1
+*************************************************/
+static int8_t RElevationAngle1_S(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = GlobalVariable.AstronomyPara.ElevationAngle * 100;
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+/*************************************************
+  Function              : RAzimuthAngle1_S()
+  Description           : RAzimuthAngle1_S
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.06.27
+  Additional Comments	  : ç²¾ç®€å��???ï¼Œå¤ªé˜³æ–¹ä½�???1
+*************************************************/
+static int8_t RAzimuthAngle1_S(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = GlobalVariable.AstronomyPara.AzimuthAngle * 100;
+        return AS_CB_OK;
+    }
+    return AS_CB_ERR_INVALID;
+}
+/*************************************************
+  Function              : RElevationAngle2_S()
+  Description           : RElevationAngle2_S
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.06.27
+  Additional Comments	  : ç²¾ç®€å��???ï¼Œå¤ªé˜³é«˜åº¦???2
+*************************************************/
+static int8_t RElevationAngle2_S(unsigned char R_or_RW, unsigned short *value)
+{
+    return AS_CB_ERR_INVALID;
+}
+/*************************************************
+  Function              : RAzimuthAngle2_S()
+  Description           : RAzimuthAngle2_S
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.06.27
+  Additional Comments	  : ç²¾ç®€å��???ï¼Œå¤ªé˜³æ–¹ä½�???2
+*************************************************/
+static int8_t RAzimuthAngle2_S(unsigned char R_or_RW, unsigned short *value)
+{
+    return AS_CB_ERR_INVALID;
+}
+/*************************************************
+  Function              : RWComID_S()
+  Description           : RWComID_S
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.06.28
+  Additional Comments	  : ç²¾ç®€å��???ï¼ŒæŽ§åˆ¶å™¨ID
+*************************************************/
+static int8_t RWComID_S(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.ComID));
+        return AS_CB_OK;
+    }
+//    else if(R_or_RW == 1)
+//    {        
+//        if(*value >= 1 && *value < 255)
+//        {
+//            //LogOperation_ParameterChange( GlobalVariable.ConfigPara.ComID, *value );    
+//            Log_AddParamChange(401, *value, *(((unsigned short *)&GlobalVariable.ConfigPara.ComID)));
+//            GlobalVariable.ConfigPara.ComID =(unsigned char) *value;
+//            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+//        }
+//    }
+    return AS_CB_ERR_INVALID;
+}
+/*************************************************
+  Function              : RWChannelSelect_S()
+  Description           : RWChannelSelect_S
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.06.28
+  Additional Comments	  : ç²¾ç®€å��???ï¼Œé€šé�“é€‰æ‹©
+*************************************************/
+static int8_t RWChannelSelect_S(unsigned char R_or_RW, unsigned short *value)
+{
+    return AS_CB_ERR_INVALID;
+}
+/*************************************************
+  Function              : RRWEWTracingAccuracy_S()
+  Description           : RWEWTracingAccuracy_S
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.06.28
+  Additional Comments	  : ç²¾ç®€å��???ï¼Œè·Ÿ???ç²¾åº¦,æ”¾å¤§100???
+*************************************************/
+static int8_t RWEWTracingAccuracy_S(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = (unsigned short )(GlobalVariable.ConfigPara.EWTracingAccuracy * 100);
+        return AS_CB_OK;
+    }
+//    else if(R_or_RW == 1)
+//    {
+//       
+//		  	GlobalVariable.ConfigPara.EWTracingAccuracy = (*value) * 0.01;
+//       // LogOperation_ParameterChange( GlobalVariable.ConfigPara.EWTracingAccuracy, GlobalVariable.ConfigParaBuffer.EWTracingAccuracy );      
+//        if(GlobalVariable.ConfigParaBuffer.EWTracingAccuracy >= 0.98
+//            && GlobalVariable.ConfigParaBuffer.EWTracingAccuracy <= 5.1)
+//        {
+//        	Log_AddParamChange(403, *value, (unsigned short )(GlobalVariable.ConfigPara.EWTracingAccuracy * 100));
+//            GlobalVariable.ConfigPara.EWTracingAccuracy = GlobalVariable.ConfigParaBuffer.EWTracingAccuracy;
+//            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+//        }
+//    }
+    return AS_CB_ERR_INVALID;
+} 
+/*************************************************
+  Function              : RWHeatEnable_S()
+  Description           : RWHeatEnable_S
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.06.28
+  Additional Comments	  : ç²¾ç®€å��???ï¼ŒåŠ ???ä½¿èƒ½
+*************************************************/
+static int8_t RWHeatEnable_S(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.HeatEnable));
+        return AS_CB_OK;
+    }
+//    else if(R_or_RW == 1)
+//    {        
+//       // LogOperation_ParameterChange( GlobalVariable.ConfigPara.HeatEnable, *value );   
+//        if((*value == 0) || (*value == 1))	
+//		{			
+//			Log_AddParamChange(404, *value, *(((unsigned short *)&GlobalVariable.ConfigPara.HeatEnable)));
+//          GlobalVariable.ConfigPara.HeatEnable =(unsigned short) *value;
+//          GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+//		}
+//    }
+    return AS_CB_ERR_INVALID;
+} 
+/*************************************************
+  Function              : RWMotorOrientation_S()
+  Description           : RWMotorOrientation_S
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.06.28
+  Additional Comments	  : ç²¾ç®€å��???ï¼Œç”µæœºæœ�???
+*************************************************/
+static int8_t RWMotorOrientation_S(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = GlobalVariable.ConfigPara.MotorOrientation;
+        return AS_CB_OK;
+    }
+//    else if(R_or_RW == 1)
+//    {
+//		if(*value == 0 || *value == 1)  //0ï¼šç”µæœºæœ�ä¸œï¼› 1ï¼šç”µæœºæœ�???
+//        {
+//            //LogOperation_ParameterChange( GlobalVariable.ConfigPara.MotorOrientation, *value ); 
+//            Log_AddParamChange(405, *value, GlobalVariable.ConfigPara.MotorOrientation);
+//            GlobalVariable.ConfigPara.MotorOrientation = *value;
+//            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+//        } 
+//    }
+    return AS_CB_ERR_INVALID;
+} 
+/*************************************************
+  Function              : RWProtectCurrent_S()
+  Description           : RWProtectCurrent_S
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.06.28
+  Additional Comments	  : ç²¾ç®€å��???ï¼Œç”µæœºæœ�???
+*************************************************/
+static int8_t RWProtectCurrent_S(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = (unsigned short) (GlobalVariable.ConfigPara.MotorOverCurrentValue * 100);
+        return AS_CB_OK;
+    }
+//    else if(R_or_RW == 1)
+//    {
+//        GlobalVariable.ConfigParaBuffer.MotorOverCurrentValue  = ((*value) * 0.01);
+//       // LogOperation_ParameterChange( GlobalVariable.ConfigPara.MotorOverCurrentValue, GlobalVariable.ConfigParaBuffer.MotorOverCurrentValue );      
+//      
+//        if( (GlobalVariable.ConfigParaBuffer.MotorOverCurrentValue > 0.19f) && 
+//            (GlobalVariable.ConfigParaBuffer.MotorOverCurrentValue < 20.1f )  ) //???6.1æ”¾å¤§???20.1é™�åˆ¶
+//        {
+//        	Log_AddParamChange(406, *value, (unsigned short) (GlobalVariable.ConfigPara.MotorOverCurrentValue * 100));
+//            GlobalVariable.ConfigPara.MotorOverCurrentValue = GlobalVariable.ConfigParaBuffer.MotorOverCurrentValue;
+//            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+//        }
+//    }
+    return AS_CB_ERR_INVALID;
+} 
+/*************************************************
+  Function              : RWPVModuleWidth_S()
+  Description           : RWPVModuleWidth_S
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.06.28
+  Additional Comments	  : ç²¾ç®€å��???ï¼Œç»„ä»¶???åº¦
+*************************************************/
+static int8_t RWPVModuleWidth_S(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = GlobalVariable.ConfigPara.PVModuleWidth * 100;
+        return AS_CB_OK;
+    }
+//    else if(R_or_RW == 1)
+//    {
+//        GlobalVariable.ConfigParaBuffer.PVModuleWidth = (*value) * 0.01;
+//        //LogOperation_ParameterChange( GlobalVariable.ConfigPara.PVModuleWidth, GlobalVariable.ConfigParaBuffer.PVModuleWidth );      
+//        if((GlobalVariable.ConfigParaBuffer.PVModuleWidth >= 0.2) && (GlobalVariable.ConfigParaBuffer.PVModuleWidth <= 20.0) )
+//        {
+//        	Log_AddParamChange(407, *value, GlobalVariable.ConfigPara.PVModuleWidth * 100);
+//            GlobalVariable.ConfigPara.PVModuleWidth = GlobalVariable.ConfigParaBuffer.PVModuleWidth;
+//            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+//        }
+//    }
+    return AS_CB_ERR_INVALID;
+} 
+/*************************************************
+  Function              : RWPostSpacing_S()
+  Description           : RWPostSpacing_S
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.06.28
+  Additional Comments	  : ç²¾ç®€å��???ï¼Œç«‹æŸ±é—´???
+*************************************************/
+static int8_t RWPostSpacing_S(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = GlobalVariable.ConfigPara.PostSpacing * 100;
+        return AS_CB_OK;
+    }
+//    else if(R_or_RW == 1)
+//    {
+//        GlobalVariable.ConfigParaBuffer.PostSpacing = (*value) * 0.01;
+//      //  LogOperation_ParameterChange( GlobalVariable.ConfigPara.PostSpacing, GlobalVariable.ConfigParaBuffer.PostSpacing );      
+//        if((GlobalVariable.ConfigParaBuffer.PostSpacing >= GlobalVariable.ConfigPara.PVModuleWidth) &&( GlobalVariable.ConfigParaBuffer.PostSpacing <= 50.0) )
+//        {
+//        	Log_AddParamChange(408, *value, GlobalVariable.ConfigPara.PostSpacing * 100);
+//            GlobalVariable.ConfigPara.PostSpacing = GlobalVariable.ConfigParaBuffer.PostSpacing;
+//        }
+//        else
+//        {
+//			Log_AddParamChange(408, (GlobalVariable.ConfigPara.PVModuleWidth - 0.1)*100, GlobalVariable.ConfigPara.PostSpacing * 100);
+//            GlobalVariable.ConfigPara.PostSpacing = GlobalVariable.ConfigPara.PVModuleWidth - 0.1;
+//        }
+//        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+//        
+//    }
+    return AS_CB_ERR_INVALID;
+}
+/*************************************************
+  Function              : RWTerrainSlope1_S()
+  Description           : RWTerrainSlope1_S
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.06.28
+  Additional Comments	  : ç²¾ç®€å��???ï¼Œä¸Šå�¡åº¦1
+*************************************************/
+static int8_t RWTerrainSlope1_S(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = (signed short)GlobalVariable.ConfigPara.TerrainSlope * 100;
+        return AS_CB_OK;
+    }
+//    else if(R_or_RW == 1)
+//    {
+//        GlobalVariable.ConfigParaBuffer.TerrainSlope = ((signed short)(*value)) * 0.01;
+//        if(GlobalVariable.ConfigParaBuffer.TerrainSlope >= -45.0f 
+//            && GlobalVariable.ConfigParaBuffer.TerrainSlope <= 45.0f)
+//        {
+//        	Log_AddParamChange(409, *value, GlobalVariable.ConfigPara.TerrainSlope * 100);
+//            GlobalVariable.ConfigPara.TerrainSlope = GlobalVariable.ConfigParaBuffer.TerrainSlope;
+//            
+//            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+//        }
+//    }
+    return AS_CB_ERR_INVALID;
+} 
+/*************************************************
+  Function              : RWTerrainSlopeEvening1_S()
+  Description           : RWTerrainSlopeEvening1_S
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.06.28
+  Additional Comments	  : ç²¾ç®€å��???ï¼Œä¸‹å�¡åº¦1
+*************************************************/
+static int8_t RWTerrainSlopeEvening1_S(unsigned char R_or_RW, unsigned short *value)
+{
+   if(R_or_RW == 0)
+    {
+        *value = (signed short)(GlobalVariable.ConfigPara.TerrainSlopeEvening*100);
+        return AS_CB_OK;
+    }
+//    else if(R_or_RW == 1)
+//    {     
+//         GlobalVariable.ConfigParaBuffer.TerrainSlopeEvening = ((signed short)(*value)) * 0.01;
+//		if(GlobalVariable.ConfigParaBuffer.TerrainSlopeEvening >= -45.0f 
+//            && GlobalVariable.ConfigParaBuffer.TerrainSlopeEvening <= 45.0f)
+//        {
+//        	Log_AddParamChange(410, *value, (signed short)(GlobalVariable.ConfigPara.TerrainSlopeEvening*100));
+//            GlobalVariable.ConfigPara.TerrainSlopeEvening = GlobalVariable.ConfigParaBuffer.TerrainSlopeEvening;           
+//            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+//        }
+//		else
+//		{
+//			Log_AddParamChange(410, (signed short)(GlobalVariable.ConfigPara.TerrainSlope*100), (signed short)(GlobalVariable.ConfigPara.TerrainSlopeEvening*100));
+//			  GlobalVariable.ConfigPara.TerrainSlopeEvening = GlobalVariable.ConfigPara.TerrainSlope;
+//			  GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+//		}
+//    }
+    return AS_CB_ERR_INVALID;
+}
+/*************************************************
+  Function              : RWTerrainSlope2_S()
+  Description           : RWTerrainSlope2_S
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.06.28
+  Additional Comments	  : ç²¾ç®€å��???ï¼Œä¸Šå�¡åº¦2
+*************************************************/
+static int8_t RWTerrainSlope2_S(unsigned char R_or_RW, unsigned short *value)
+{
+    return AS_CB_ERR_INVALID;
+} 
+/*************************************************
+  Function              : RWTerrainSlopeEvening2_S()
+  Description           : RWTerrainSlopeEvening2_S
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.06.28
+  Additional Comments	  : ç²¾ç®€å��???ï¼Œä¸‹å�¡åº¦2
+*************************************************/
+static int8_t RWTerrainSlopeEvening2_S(unsigned char R_or_RW, unsigned short *value)
+{
+    return AS_CB_ERR_INVALID;
+} 
+/*************************************************
+  Function              : RWSouthNorthShiftAngle1_S()
+  Description           : RWSouthNorthShiftAngle1_S
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.06.28
+  Additional Comments	  : ç²¾ç®€å��???ï¼Œå�—åŒ—å�‘å��ç§»è§’åº¦1
+*************************************************/
+static int8_t RWSouthNorthShiftAngle1_S(unsigned char R_or_RW, unsigned short *value)
+{
+    short temp;
+	
+    if(R_or_RW == 0)
+    {
+        *value = *((( short *)&GlobalVariable.ConfigPara.SouthNorthShiftAngle));
+        return AS_CB_OK;
+    }
+//    else if(R_or_RW == 1)
+//    {
+//			temp = (signed short )(*value);
+//		if( abs(temp) <= MAXABS_SOUTHNORTHSHIFTANGLE_PLUS100 )
+//       {
+//            //LogOperation_ParameterChange( GlobalVariable.ConfigPara.SouthNorthShiftAngle, *value );  
+//            Log_AddParamChange(413, *value, *((( short *)&GlobalVariable.ConfigPara.SouthNorthShiftAngle)));
+//            GlobalVariable.ConfigPara.SouthNorthShiftAngle = temp;
+//            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+//        }
+//    }
+    return AS_CB_ERR_INVALID;
+} 
+/*************************************************
+  Function              : RWSouthNorthShiftAngle2_S()
+  Description           : RWSouthNorthShiftAngle2_S
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.06.28
+  Additional Comments	  : ç²¾ç®€å��???ï¼Œå�—åŒ—å�‘å��ç§»è§’åº¦2
+*************************************************/
+static int8_t RWSouthNorthShiftAngle2_S(unsigned char R_or_RW,unsigned short *value)
+{
+    return AS_CB_ERR_INVALID;
+} 
+/*************************************************
+  Function              : RWEWSoftLimitAngle_S()
+  Description           : RWEWSoftLimitAngle_S
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.06.28
+  Additional Comments	  : ç²¾ç®€å��???ï¼Œä¸œè¥¿è½¯é™�ä½�è§’åº¦ï¼Œé«˜å­—èŠ‚ï¼šä¸œé™�ä½�ï¼›ä½Žå­—èŠ‚:è¥¿é™�???
+*************************************************/
+static int8_t RWEWSoftLimitAngle_S(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = (((unsigned short)GlobalVariable.ConfigPara.ESoftLimitAngle) << 8 ) | ((unsigned short)GlobalVariable.ConfigPara.WSoftLimitAngle );
+        return AS_CB_OK;
+    }
+//    else if(R_or_RW == 1)
+//    {   
+//         GlobalVariable.ConfigParaBuffer.ESoftLimitAngle  = ((*value) >> 8) * 1.00; //???8???
+//		GlobalVariable.ConfigParaBuffer.WSoftLimitAngle  = (*value & 0xFF) * 1.00; //???8???
+
+//       // LogOperation_ParameterChange( GlobalVariable.ConfigPara.ESoftLimitAngle, GlobalVariable.ConfigParaBuffer.ESoftLimitAngle );      
+//        if(GlobalVariable.ConfigParaBuffer.ESoftLimitAngle >= 29.9 )
+//        {
+//			Log_AddParamChange(415, *value, (((unsigned short)GlobalVariable.ConfigPara.ESoftLimitAngle) << 8 ) | ((unsigned short)GlobalVariable.ConfigPara.WSoftLimitAngle ));
+//            GlobalVariable.ConfigPara.ESoftLimitAngle = GlobalVariable.ConfigParaBuffer.ESoftLimitAngle;
+//            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+//        }
+//				
+//		if ( GlobalVariable.ConfigParaBuffer.WSoftLimitAngle <= 150.1)
+//		{
+//			Log_AddParamChange(415, *value, (((unsigned short)GlobalVariable.ConfigPara.ESoftLimitAngle) << 8 ) | ((unsigned short)GlobalVariable.ConfigPara.WSoftLimitAngle ));
+//			GlobalVariable.ConfigPara.WSoftLimitAngle = GlobalVariable.ConfigParaBuffer.WSoftLimitAngle;
+//            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+//		}
+//    }
+    return AS_CB_ERR_INVALID;
+} 
+/*************************************************
+  Function              : RWCleaningDockAngle_S()
+  Description           : RWCleaningDockAngle_S
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.06.28
+  Additional Comments	  : ç²¾ç®€å��???ï¼Œæ¸…æ´—???åº¦
+*************************************************/
+static int8_t RWCleaningDockAngle_S(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = GlobalVariable.ConfigPara.CleaningDockAngle;
+        return AS_CB_OK;
+    }
+//    else if(R_or_RW == 1)
+//    {
+//        if(*value >= 30 && *value <= 150)
+//        {
+//            //LogOperation_ParameterChange( GlobalVariable.ConfigPara.CleaningDockAngle, *value );  
+//            Log_AddParamChange(416, *value, GlobalVariable.ConfigPara.CleaningDockAngle);
+//            GlobalVariable.ConfigPara.CleaningDockAngle = *value;
+//            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+//        } 
+//    }
+    return AS_CB_ERR_INVALID;
+}  
+/*************************************************
+  Function              : RWBackAngle_S()
+  Description           : RWBackAngle_S
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.06.28
+  Additional Comments	  : ç²¾ç®€å��???ï¼Œ???è¿”è§’åº¦
+*************************************************/
+static int8_t RWBackAngle_S(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.BackAngle));
+        return AS_CB_OK;
+    }
+//    else if(R_or_RW == 1)
+//    {
+//        if(*value >= 59.9 && *value <= 120.1)
+//        {
+//            //LogOperation_ParameterChange( GlobalVariable.ConfigPara.BackAngle, *value );     
+//            Log_AddParamChange(417, *value, *(((unsigned short *)&GlobalVariable.ConfigPara.BackAngle)));
+//            *(((unsigned short *)&GlobalVariable.ConfigPara.BackAngle)) = *value;
+//            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+//        }
+//    }
+    return AS_CB_ERR_INVALID;
+} 
+/*************************************************
+  Function              : RWNoComEnable_S()
+  Description           : RWNoComEnable_S
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.06.28
+  Additional Comments	  : ç²¾ç®€å��???ï¼Œæ— é€š???ä½¿èƒ½
+*************************************************/
+static int8_t RWNoComEnable_S(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = GlobalVariable.ConfigPara.NoComEnable;
+        return AS_CB_OK;
+    }
+//    else if(R_or_RW == 1)
+//    {
+//		if( (*value == 0) ||(*value == 1) )
+//		{
+//           //LogOperation_ParameterChange( GlobalVariable.ConfigPara.NoComEnable, *value );   
+//           Log_AddParamChange(418, *value, GlobalVariable.ConfigPara.NoComEnable);
+//           GlobalVariable.ConfigPara.NoComEnable = *value;
+//           GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+//		}
+//    }
+    return AS_CB_ERR_INVALID;
+} 
+/*************************************************
+  Function              : RWUpWindSpeed_S()
+  Description           : RWUpWindSpeed_S
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.06.28
+  Additional Comments	  : ç²¾ç®€å��???ï¼Œå¤§é£Žä¿�æŠ¤å�¯????????
+*************************************************/
+static int8_t RWUpWindSpeed_S(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.UpWindSpeed));
+        return AS_CB_OK;
+    }
+//    else if(R_or_RW == 1)
+//    {
+//        if(*value <= 40)
+//        {
+//            //LogOperation_ParameterChange( GlobalVariable.ConfigPara.UpWindSpeed, *value );   
+//            Log_AddParamChange(419, *value, *(((unsigned short *)&GlobalVariable.ConfigPara.UpWindSpeed)));
+//            *(((unsigned short *)&GlobalVariable.ConfigPara.UpWindSpeed)) = *value;
+//            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+//        }
+//    }
+    return AS_CB_ERR_INVALID;
+}
+/*************************************************
+  Function              : RWUpStartTime_S()
+  Description           : RWUpStartTime_S
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.06.28
+  Additional Comments	  : ç²¾ç®€å��???ï¼Œå¤§é£Žä¿�æŠ¤å�¯åŠ¨æ—¶???
+*************************************************/
+static int8_t RWUpStartTime_S(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.UpStartTime));
+        return AS_CB_OK;
+    }
+//    else if(R_or_RW == 1)
+//    {
+//        if(*value <= 1000)
+//        {
+//            //LogOperation_ParameterChange( GlobalVariable.ConfigPara.UpStartTime, *value );    
+//            Log_AddParamChange(420, *value, *(((unsigned short *)&GlobalVariable.ConfigPara.UpStartTime)));
+//           *(((unsigned short *)&GlobalVariable.ConfigPara.UpStartTime)) = *value;
+//            GlobalVariable.WriteFlag.ConfigParaWrite = 1; 
+//        }
+//    }
+    return AS_CB_ERR_INVALID;
+} 
+/*************************************************
+  Function              : RWLowWindSpeed_S()
+  Description           : RWLowWindSpeed_S
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.06.28
+  Additional Comments	  : ç²¾ç®€å��???ï¼Œé€€å‡ºå¤§é£Žä¿�æŠ¤?????
+*************************************************/
+static int8_t RWLowWindSpeed_S(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.LowWindSpeed));
+        return AS_CB_OK;
+    }
+//    else if(R_or_RW == 1)
+//    {
+//        if(*value <= (GlobalVariable.ConfigPara.UpWindSpeed - 1))
+//        {
+//            //LogOperation_ParameterChange( GlobalVariable.ConfigPara.LowWindSpeed, *value );     
+//            Log_AddParamChange(421, *value, *(((unsigned short *)&GlobalVariable.ConfigPara.LowWindSpeed)));
+//            *(((unsigned short *)&GlobalVariable.ConfigPara.LowWindSpeed)) = *value;
+//        }
+//        else
+//        {
+//            //LogOperation_ParameterChange( GlobalVariable.ConfigPara.LowWindSpeed, GlobalVariable.ConfigPara.UpWindSpeed - 1 );  
+//            Log_AddParamChange(421, GlobalVariable.ConfigPara.UpWindSpeed - 1, *(((unsigned short *)&GlobalVariable.ConfigPara.LowWindSpeed)));
+//            *(((unsigned short *)&GlobalVariable.ConfigPara.LowWindSpeed)) = GlobalVariable.ConfigPara.UpWindSpeed - 1;
+//        }
+//        GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+//    }
+    return AS_CB_ERR_INVALID;
+} 
+/*************************************************
+  Function              : RWLowStopTime_S()
+  Description           : RWLowStopTime_S
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.06.28
+  Additional Comments	  : ç²¾ç®€å��???ï¼Œé€€å‡ºå¤§é£Žä¿�æŠ¤æ—¶???
+*************************************************/
+static int8_t RWLowStopTime_S(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = *(((unsigned short *)&GlobalVariable.ConfigPara.LowStopTime));
+        return AS_CB_OK;
+    }
+//    else if(R_or_RW == 1)
+//    {
+//        if(*value <= 1000)
+//        {
+//            //LogOperation_ParameterChange( GlobalVariable.ConfigPara.LowStopTime, *value );      
+//            Log_AddParamChange(422, *value, *(((unsigned short *)&GlobalVariable.ConfigPara.LowStopTime)));
+//            *(((unsigned short *)&GlobalVariable.ConfigPara.LowStopTime)) = *value;
+//            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+//        }
+//    }
+    return AS_CB_ERR_INVALID;
+}
+/*************************************************
+  Function              : RWFacingWindStopFunction_Enable_S()
+  Description           : RWFacingWindStopFunction_Enable_S
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.06.28
+  Additional Comments	  : ç²¾ç®€å��???ï¼Œè¿Žé£Žå�œé� ä½¿???
+*************************************************/
+static int8_t RWFacingWindStopFunction_Enable_S(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = GlobalVariable.ConfigPara.FacingWindStopFunction_Enable;
+        return AS_CB_OK;
+    }
+//    else if(R_or_RW == 1)
+//    {        
+//		if((*value == 0) || (*value == 1 ))
+//				{
+//           //LogOperation_ParameterChange( GlobalVariable.ConfigPara.FacingWindStopFunction_Enable, *value );      
+//           Log_AddParamChange(423, *value, GlobalVariable.ConfigPara.FacingWindStopFunction_Enable);
+//           GlobalVariable.ConfigPara.FacingWindStopFunction_Enable = (unsigned short) *value;
+//           GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+//		}
+//    }
+    return AS_CB_ERR_INVALID;
+}
+/*************************************************
+  Function              : RWEWFacingWindAngle_S()
+  Description           : RWEWFacingWindAngle_S
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.06.28
+  Additional Comments	  : ç²¾ç®€å��???,ä¸œè¥¿è¿Ž???å�œé� ???åº¦ï¼Œé«˜å­—èŠ‚ï¼šä¸œè¿Ž???å�œé� ???ï¼›ä½Žå­—èŠ‚ï¼šè¥¿è¿Žé£Žå�œé� ???
+*************************************************/
+static int8_t RWEWFacingWindAngle_S(unsigned char R_or_RW, unsigned short *value)
+{
+	  unsigned short E_TempAngle, W_TempAngle;
+    if(R_or_RW == 0)
+    {
+        *value = (GlobalVariable.ConfigPara.EFacingWindAngle << 8) | GlobalVariable.ConfigPara.WFacingWindAngle ;
+        return AS_CB_OK;
+    }
+//    else if(R_or_RW == 1)
+//    {
+//		E_TempAngle = ((*value) >> 8); //ä¸œè¿Žé£Ž???åº¦å�–é«˜8???
+//		W_TempAngle = ((*value) & 0xFF); //è¥¿è¿Žé£Ž???åº¦åŽ»ä½Ž8???
+
+//			  
+//		if((E_TempAngle >= 30) &&  (E_TempAngle <= 150) )
+//        {
+//			Log_AddParamChange(424, *value, (GlobalVariable.ConfigPara.EFacingWindAngle << 8) | GlobalVariable.ConfigPara.WFacingWindAngle);
+//            //LogOperation_ParameterChange( GlobalVariable.ConfigPara.EFacingWindAngle, E_TempAngle );      
+//           *(((unsigned short *)&GlobalVariable.ConfigPara.EFacingWindAngle)) = E_TempAngle;
+//            GlobalVariable.WriteFlag.ConfigParaWrite = 1; 
+//        } 
+//				
+//        if((W_TempAngle >= 30) &&  (W_TempAngle <= 150) )
+//        {
+//			Log_AddParamChange(424, *value, (GlobalVariable.ConfigPara.EFacingWindAngle << 8) | GlobalVariable.ConfigPara.WFacingWindAngle);
+//            //LogOperation_ParameterChange( GlobalVariable.ConfigPara.WFacingWindAngle, W_TempAngle );      
+//           *(((unsigned short *)&GlobalVariable.ConfigPara.WFacingWindAngle)) = W_TempAngle;
+//            GlobalVariable.WriteFlag.ConfigParaWrite = 1; 
+//        } 
+//    }
+    return AS_CB_ERR_INVALID;
+} 
+/*************************************************
+  Function              : RWBatteryLowTriggerValue_S()
+  Description           : Battery Low Trigger Value_S  
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.06.29
+  Additional Comments	  : 
+*************************************************/
+static int8_t RWBatteryLowTriggerValue_S(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = GlobalVariable.ConfigPara.Battery_Low_TriggerValue;
+        return AS_CB_OK;
+    }
+//    else if(R_or_RW == 1)
+//    {        
+//		if((*value >= 1800) && (*value <= 2940))
+//		{
+//           //LogOperation_ParameterChange( GlobalVariable.ConfigPara.Battery_Low_TriggerValue, *value );    
+//           Log_AddParamChange(425, *value, GlobalVariable.ConfigPara.Battery_Low_TriggerValue);
+//           GlobalVariable.ConfigPara.Battery_Low_TriggerValue = (unsigned short) *value;
+//           GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+//		}
+//    }
+    return AS_CB_ERR_INVALID;
+}
+
+/*************************************************
+  Function              : RWBatteryLowRecoveryValue_S()
+  Description           : RWBatteryLowRecoveryValue_S  
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.06.29
+  Additional Comments	  : 
+*************************************************/
+static int8_t RWBatteryLowRecoveryValue_S(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = GlobalVariable.ConfigPara.Battery_Low_RecoveryValue;
+        return AS_CB_OK;
+    }
+//    else if(R_or_RW == 1)
+//    {        
+//		if((*value >= 1800) && (*value <= 2940))
+//		{
+//           //LogOperation_ParameterChange( GlobalVariable.ConfigPara.Battery_Low_RecoveryValue, *value );      
+//           Log_AddParamChange(426, *value, GlobalVariable.ConfigPara.Battery_Low_RecoveryValue);
+//           GlobalVariable.ConfigPara.Battery_Low_RecoveryValue = (unsigned short) *value;
+//           GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+//		}
+//    }
+    return AS_CB_ERR_INVALID;
+} 
+/*************************************************
+  Function              : RWBatteryEmptyTriggerValue_S()
+  Description           : Battery Empty Trigger Value_S  
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.06.29
+  Additional Comments	  : 
+*************************************************/
+static int8_t RWBatteryEmptyTriggerValue_S(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = GlobalVariable.ConfigPara.Battery_Empty_TriggerValue;
+        return AS_CB_OK;
+    }
+//    else if(R_or_RW == 1)
+//    {        
+//		if((*value >= 1800) && (*value <= 2940))
+//				{
+//            //LogOperation_ParameterChange( GlobalVariable.ConfigPara.Battery_Empty_TriggerValue, *value );      
+//            Log_AddParamChange(427, *value, GlobalVariable.ConfigPara.Battery_Empty_TriggerValue);
+//            GlobalVariable.ConfigPara.Battery_Empty_TriggerValue = (unsigned short) *value;
+//            GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+//		}
+//    }
+    return AS_CB_ERR_INVALID;
+}
+
+/*************************************************
+  Function              : RWBatteryEmptyRecoveryValue_S()
+  Description           : Battery Empty Recovery Value_S  
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.06.29
+  Additional Comments	  : 
+*************************************************/
+static int8_t RWBatteryEmptyRecoveryValue_S(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = GlobalVariable.ConfigPara.Battery_Empty_RecoveryValue;
+        return AS_CB_OK;
+    }
+//    else if(R_or_RW == 1)
+//    {        
+//		if((*value >= 1800) && (*value <= 2940))
+//		{
+//           //LogOperation_ParameterChange( GlobalVariable.ConfigPara.Battery_Empty_RecoveryValue, *value );    
+//           Log_AddParamChange(428, *value, GlobalVariable.ConfigPara.Battery_Empty_RecoveryValue);
+//           GlobalVariable.ConfigPara.Battery_Empty_RecoveryValue = (unsigned short) *value;
+//           GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+//		}
+//    }
+    return AS_CB_ERR_INVALID;
+}
+/*************************************************
+  Function              : RWBatteryHighTemperatureProtection_TriggerValue()
+  Description           : RWBatteryHighTemperatureProtection_TriggerValue
+  Input                 : null       
+  Output                : null        
+  Return                : null
+  Engineer				      : Huruihong
+  Revision				      : V0.0
+  Modified Date			    : 2023.05.03
+  Additional Comments	  : porting by longcd
+*************************************************/
+static int8_t RWBatteryHighTemperatureProtection_Value_S(unsigned char R_or_RW, unsigned short *value)
+{
+	  unsigned short TriggerValue_Temp, ExitValue_Temp;
+	
+    if(R_or_RW == 0)
+    {
+        *value = (GlobalVariable.ConfigPara.BatteryHighTempProtectTriggerValue << 8) | GlobalVariable.ConfigPara.BatteryHighTempProtectExitValue;
+        return AS_CB_OK;
+    }
+//    else if(R_or_RW == 1)
+//    {        
+//		TriggerValue_Temp = (*value >> 8);
+//		ExitValue_Temp = (*value & 0xFF);
+//		// LogOperation_ParameterChange( GlobalVariable.ConfigPara.BatteryHighTempProtectTriggerValue, *value );  
+//		if( (TriggerValue_Temp >= 25) && (TriggerValue_Temp <= 80) )	
+//		{				 
+//		   Log_AddParamChange(429, *value, (GlobalVariable.ConfigPara.BatteryHighTempProtectTriggerValue << 8) | GlobalVariable.ConfigPara.BatteryHighTempProtectExitValue);
+//           GlobalVariable.ConfigPara.BatteryHighTempProtectTriggerValue = TriggerValue_Temp;
+//           GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+//	     
+//		}
+//			 
+//		if( (ExitValue_Temp >= 25) && (ExitValue_Temp <= 80) )	
+//		{				 
+//		   Log_AddParamChange(429, *value, (GlobalVariable.ConfigPara.BatteryHighTempProtectTriggerValue << 8) | GlobalVariable.ConfigPara.BatteryHighTempProtectExitValue);
+//           GlobalVariable.ConfigPara.BatteryHighTempProtectExitValue = ExitValue_Temp;
+//           GlobalVariable.WriteFlag.ConfigParaWrite = 1;
+//		}
+//    }
+    return AS_CB_ERR_INVALID;
+}
+
+/*************************************************
+*************************************************/
+extern void SetCtrlCmd_QueryLora(void);
+static int8_t RWLoraHardwareStatus(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = GlobalVariable.SpecialCheck.LoraHardwareStatus;
+        return AS_CB_OK;
+    }
+    else if(R_or_RW == 1)
+    {
+		SetCtrlCmd_QueryLora();
+    }
+    return AS_CB_ERR_INVALID;
+}
+/*************************************************
+å­�æ�¿ç”µæµ�CH1,CH2
+*************************************************/
+static int8_t RWVoutCurrentCh1(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = GlobalVariable.SpecialCheck.VoutCurrentCh1;
+        return AS_CB_OK;
+    }
+//    else if(R_or_RW == 1)
+//    {
+//    }
+    return AS_CB_ERR_INVALID;
+}
+static int8_t RWVoutCurrentCh2(unsigned char R_or_RW, unsigned short *value)
+{
+    if(R_or_RW == 0)
+    {
+        *value = GlobalVariable.SpecialCheck.VoutCurrentCh2;
+        return AS_CB_OK;
+    }
+//    else if(R_or_RW == 1)
+//    {
+//    }
+    return AS_CB_ERR_INVALID;
+}
+
+/***************************************************************************************************
+                                Jump table
+***************************************************************************************************/
+void ASProtocolInit()
+{
+    RWRegister[0]   = RDeviceEdition;
+    RWRegister[1]   = RWWorkMode1;
+    RWRegister[2]   = RWWorkMode2;
+    RWRegister[3]   = RWarningAndFault1;
+    RWRegister[4]   = RWarningAndFault2;
+    RWRegister[5]   = RDeviceType;
+    RWRegister[6]   = RWChannelEnable1;
+    RWRegister[7]   = RElevationAngle1;
+    RWRegister[8]   = RElevationAngle2;
+    RWRegister[9]   = RAzimuthAngle1;
+    RWRegister[10]  = RAzimuthAngle2;
+    
+    if ( GlobalVariable.ConfigPara.isMasterController ==NO)//ä»Žæœº
+    {
+        RWRegister[11]  = RTargetAngle1;
+        RWRegister[12]  = RTargetAngle2;
+    }
+
+    if ( GlobalVariable.ConfigPara.isMasterController == YES)//ä¸»æœº
+    {
+        RWRegister[11]  = RTargetAngle;     
+        RWRegister[12]  = RRealAngle;      //Motor0å®žé™…è§’åº¦
+    }
+
+ 
+
+
+    RWRegister[13]  = RRealAngle1;
+    RWRegister[14]  = RRealAngle2;
+	RWRegister[15]  = RRealAngle3;
+    RWRegister[16]  = RRealAngle4;
+    RWRegister[17]  = RRealAngle5;
+	RWRegister[18]  = RRealAngle6;    
+	
+    RWRegister[19]   = ReadUIRightPanelMasterSlaveAlarmsHighPart2;  
+    RWRegister[20]   = ReadUIRightPanelMasterSlaveAlarmsLowPart2;
+    RWRegister[21]   = ReadUIRightPanelMasterSlaveAlarmsHighPart3;
+    RWRegister[22]   = ReadUIRightPanelMasterSlaveAlarmsLowPart3;
+    
+    RWRegister[23]  = RWTimeYear;
+    RWRegister[24]  = RWTimeMonth;
+    RWRegister[25]  = RWTimeDay;
+    RWRegister[26]  = RWTimeHour;
+    RWRegister[27]  = RWTimeMinute;
+    RWRegister[28]  = RWTimeSecond;
+    //RWRegister[29]  = RProtocol_Version;//RWChannelEnable;
+    RWRegister[29]  = RWChannelEnable2;//;	
+
+		RWRegister[31]  = RWRemoteWindDirect;
+    RWRegister[33]  = RWRemoteWindSpeed;
+    RWRegister[34]  = RWAIRemoteTarget;
+    
+		RWRegister[35]  = RMotorCurrent3;//ä»Žæœºï¼šMotor3 current
+		RWRegister[36]  = RMotorCurrent4;
+		RWRegister[37]  = RMotorCurrent5;
+		RWRegister[38]  = RMotorCurrent6;  
+    RWRegister[39]  = RTemp;
+    RWRegister[40]  = RMotorCurrent;  
+		RWRegister[41]  = RMotorCurrent1;
+		RWRegister[42]  = RMotorCurrent2;
+   // RWRegister[41]  = RWLogEnable;                //log enable
+//    RWRegister[42]  = RWPIDTarget;                //pdi target
+    RWRegister[43]  = RWProtectCurrent1;
+    RWRegister[44]  = RWProtectCurrent2;
+    RWRegister[45]  = RWLongitude1;
+    RWRegister[46]  = RWLongitude2;
+    RWRegister[47]  = RWLatitude1;
+    RWRegister[48]  = RWLatitude2;
+    RWRegister[49]  = RWTimeZone1;
+    RWRegister[50]  = RWTimeZone2;
+    RWRegister[51]  = RWEWTracingAccuracy1;
+    RWRegister[52]  = RWEWTracingAccuracy2;
+	RWRegister[REG_BATTERY_LOW_TRIGGER_VALUE]  = RWBatteryLowTriggerValue;	 //Battery Low Trigger	Value
+	RWRegister[REG_BATTERY_LOW_RECORERY_VALUE]	= RWBatteryLowRecoveryValue;  //Battery Low Recovery Value    
+    RWRegister[55]  = RPVBuckerVoltage;
+    RWRegister[56]  = RBatState;
+    RWRegister[57]  = RBatSOCTemp;
+    RWRegister[58]  = RBatVoltage;
+    RWRegister[59]  = RBatCurrent;
+	RWRegister[REG_BATTERY_EMPTY_TRIGGER_VALUE] = RWBatteryEmptyTriggerValue;	 //Battery Empty Trigger  Value;
+    
+
+
+
+    	RWRegister[76]  = RWWeaherState; //å¤©æ°”æŒ‡ä»¤
+
+
+//    RWRegister[61]  = RWMotorOverCurrentValueG1;
+//    RWRegister[62]  = RWMotorOverCurrentTimeG1;
+//    RWRegister[63]  = RWMotorOverCurrentValueG2;
+//    RWRegister[64]  = RWMotorOverCurrentTimeG2;
+//    RWRegister[65]  = RWMotorOverCurrentValueG3;
+//    RWRegister[66]  = RWMotorOverCurrentTimeG3;
+//    RWRegister[67]  = RWMotorOverCurrentValueG4;
+//    RWRegister[68]  = RWMotorOverCurrentTimeG4;
+//    RWRegister[69]  = RWMotorOverCurrentValueG5;
+//    RWRegister[70]  = RWMotorOverCurrentTimeG5;
+//    RWRegister[71]  = RWMotorOverCurrentValueG6;
+//    RWRegister[72]  = RWMotorOverCurrentTimeG6;
+//    RWRegister[73]  = RWMotorOverCurrentValueG7;
+//    RWRegister[74]  = RWMotorOverCurrentTimeG7;
+//    RWRegister[75]  = RWMotorOverCurrentValueG8;
+//    RWRegister[76]  = RWMotorOverCurrentTimeG8;
+//    RWRegister[77]  = RWMotorOverCurrentValueG9;
+//    RWRegister[78]  = RWMotorOverCurrentTimeG9;
+//    RWRegister[79]  = RWMotorOverCurrentValueG10;
+//    RWRegister[80]  = RWMotorOverCurrentTimeG10;
+
+
+
+
+
+    RWRegister[81]  = RWComID;
+    RWRegister[82]  = RWPowerMode;
+//    RWRegister[83]  = RWPIDKP;                      //PID KP
+    RWRegister[84]  = RWCleaningDockAngle;
+	RWRegister[85]  = RWMotorOrientation;
+    RWRegister[86]  = RVersion1;
+    RWRegister[87]  = RVersion2;
+    RWRegister[88]  = RWRS485Enable;
+    RWRegister[89]  = RWPVModuleWidth1;
+    RWRegister[90]  = RWPVModuleWidth2;
+    RWRegister[91]  = RWPostSpacing1;
+    RWRegister[92]  = RWPostSpacing2;
+    RWRegister[93]  = RWTerrainSlope1;
+    RWRegister[94]  = RWTerrainSlope2;
+    RWRegister[95]  = RWTerrainSlopeEvening;
+	RWRegister[REG_BATTERY_EMPTY_RECORERY_VALUE ] = RWBatteryEmptyRecoveryValue;	//Battery Empty Recovery Value
+    
+    RWRegister[98]  = RWNoComEnable;
+    RWRegister[99]  = RWUpWindSpeed;
+    RWRegister[100] = RWUpStartTime;
+    RWRegister[101] = RWLowWindSpeed;
+    RWRegister[102] = RWLowStopTime;
+    
+    RWRegister[103] = RWESoftLimitAngle1;
+    RWRegister[104] = RWESoftLimitAngle2;
+    RWRegister[105] = RWWSoftLimitAngle1;
+    RWRegister[106] = RWWSoftLimitAngle2;
+    
+    RWRegister[107] = RWHeatEnable;                   //Heat
+//    RWRegister[108] = RWPIDKI;                        //PID KI
+//    RWRegister[109] = RWPIDKD;                        //PID KD
+//    RWRegister[110] = RWPIDSlope;                     //PID Slope
+    
+    RWRegister[111] = RWBackAngle;
+//    RWRegister[112] = RWEWindProtectionAngle;
+//    RWRegister[113] = RWWWindProtectionAngle;
+	  RWRegister[112] = RWComID2;
+		RWRegister[113] = RWComID3;		
+	
+	//RWRegister[114] = RWInstallPostion; //no define 
+	  RWRegister[115] = RWSouthNorthShiftAngle;
+    RWRegister[116] = RWFacingWindStopFunction_Enable;
+    RWRegister[117] = RWEFacingWindAngle;
+    RWRegister[118] = RWWFacingWindAngle;
+
+	//porting by longcd
+    RWRegister[REG_BATTERY_HIGHTEMPPRO_TRIGGER_VALUE] = RWBatteryHighTemperatureProtection_TriggerValue; //120:????????,
+    RWRegister[REG_BATTERY_HIGHTEMPPRO_EXIT_VALUE]    = RWBatteryHighTemperatureProtection_ExitValue; //121:?????????????????,??????,????????
+	
+	RWRegister[REG_BATSOCLOWRUNBACK_WAITTIME] = RWBatSocLowRunBackWaitTime; //125
+   
+    RWRegister[REG_LOSTCOMM_BATSOCLOW_TARGET_ANGLE] = RWLostComm_BatsocLow_TargetAngle; //139
+
+
+    RWRegister[REG_RCOMM_TEST_CRCERR] = RCommuTestCrcErr;//181
+	RWRegister[REG_RCOMM_TEST_CRCOK] = RCommuTestCrcOk;
+	RWRegister[REG_RCOMM_TEST_REPLAY] = RCommuTestReply;
+	RWRegister[REG_RWCOMM_TEST_CLEARALL] = RWCommuTestClearAll; //184
+	//RWRegister[186] = RWModbusBusyCnt;   //é˜¿å¸ƒæ‰Žæ¯”
+	RWRegister[187] = RCommuTest_RecvID_Tracker_CrcOK; 
+	RWRegister[188] = RCommuTest_RecvID_Tracker_Reply;
+	RWRegister[189] = RCommuTest_RecvID_Tracker_CrcErr;
+	RWRegister[190] = RCommuTest_RecvID_00_CrcOK;
+	RWRegister[191] = RCommuTest_RecvID_00_CrcErr;
+    
+
+    RWRegister[131] = RWComID4; //
+    RWRegister[132] = RWComID5;	
+
+    RWRegister[REG_STOP_ALL_SLAVEMOTOR] = RWStopAllSlaveMotor; 
+    RWRegister[REG_SET_CONTROLER_ROLE] = RWEnableMasterController;//149
+    RWRegister[REG_SUBSLAVE_COUNT] = RWsubSlaveCount;//
+    RWRegister[REG_SUBSLAVE_POWER_SUPPLY_ENABLE] = RWsubSlavePowerSupplyEnable;
+    RWRegister[REG_STATIC_DIFF_ANGLE] = RWStaticDiffAngle;//
+    RWRegister[REG_MOVE_DIFF_ANGLE] = RWMoveDiffAngle;//
+
+
+
+    RWRegister[199] = RWYBTLoraParaEnable;
+    RWRegister[200] = RWManufactor;
+    RWRegister[201] = RWDeviceIDH;
+    RWRegister[202] = RWDeviceIDL;
+    RWRegister[203] = RWDeviceNetID;
+    
+    RWRegister[204] = RWYBTadd3;
+    RWRegister[205] = RWYBTadd4;
+    RWRegister[206] = RWYBTChannel;
+    RWRegister[207] = RWYBTadd6;
+    RWRegister[208] = RWYBTkeyH;
+    RWRegister[209] = RWYBTkeyL;
+    
+    RWRegister[210] = RWJXYLbaudrate;
+    RWRegister[211] = RWJXYLparity;
+    RWRegister[212] = RWJXYLfq1;
+    RWRegister[213] = RWJXYLfq2;
+    RWRegister[214] = RWJXYLfq3;
+    RWRegister[215] = RWJXYLfactor;
+    RWRegister[216] = RWJXYLmode;
+    RWRegister[217] = RWJXYLbw;
+    RWRegister[218] = RWJXYLpower;
+		
+
+    //è¯»å�–Bluetoothæ¨¡å�—å�‚æ•°çš„æŒ‡??		
+    RWRegister[REG_YBT_BLUETOOTH_MAC_EN] = RWYBTBluetoothParaEnable;
+    RWRegister[221] = RBluetoothMACPara1;
+    RWRegister[222] = RBluetoothMACPara2;
+    RWRegister[223] = RBluetoothMACPara3;
+    RWRegister[224] = RBluetoothMACPara4;
+    RWRegister[225] = RBluetoothMACPara5;
+    RWRegister[226] = RBluetoothMACPara6;
+
+	  RWRegister[300] = RProtocol_Version_S;
+		RWRegister[301] = RDeviceType_S; //è®¾???ç±»???
+		RWRegister[302] = RDeviceEdition_S; //å¤§ç‰ˆ??????
+		RWRegister[303] = RVersion1_S; //å°�ç‰ˆ??????1
+		RWRegister[304] = RVersion2_S; //å°�ç‰ˆ??????2
+		RWRegister[305] = RPVBuckerVoltage_S; //PVç»„ä»¶ç”µåŽ‹ (ä¸Žæ—§å��???æ”¾å¤§å€�æ•°ä¸�ä¸€???)
+		RWRegister[306] = RBatVoltage_S; //ç”µæ± ç”µåŽ‹ (ä¸Žæ—§å��???æ”¾å¤§å€�æ•°ä¸�ä¸€???)
+		RWRegister[307] = RBatSOCTemp_S;//ç”µæ± ç”µé‡�/ç”µæ± æ¸©åº¦
+		RWRegister[308] = RTemp_S;//ä¸»æ�¿æ¸©åº¦
+		RWRegister[309] = RBatState_BatCurrent_S; //å……ç”µçŠ¶æ€�ã€�å……ç”µç”µ???
+    RWRegister[310] = RWWorkMode1_S;//å·¥ä½œæ¨¡å¼�1
+		RWRegister[311] = RWarningAndFault1_1_S;//å¼‚å¸¸ä¿¡æ�¯1â€”??1
+    RWRegister[312] = RWarningAndFault1_2_S;//å¼‚å¸¸ä¿¡æ�¯1-2
+		RWRegister[313] = RMotorCurrent1_S; //ç”µæœºç”µæµ�1
+    RWRegister[314] = RTargetAngle1_S;//???æ ‡???åº¦1
+		RWRegister[315] = RRealAngle1_S;//???æ ‡???åº¦1
+		//316-321ï¼Œ???ç”¨
+		RWRegister[316] = RWWorkMode2_S;//å·¥ä½œæ¨¡å¼�2
+		RWRegister[317] = RWarningAndFault2_1_S;//å¼‚å¸¸ä¿¡æ�¯2â€”??1
+    RWRegister[318] = RWarningAndFault2_2_S;//å¼‚å¸¸ä¿¡æ�¯2-2
+		RWRegister[319] = RMotorCurrent2_S; //ç”µæœºç”µæµ�2
+    RWRegister[320] = RTargetAngle2_S;//???æ ‡???åº¦2
+		RWRegister[321] = RRealAngle2_S;//???æ ‡???åº¦2
+		
+		//ä¸Žé€š???ç®±ç›¸å…³æ–°å¢žå��???è¯·åœ¨æ­¤åŒºåŸŸ???åŠ ???322-384
+		
+		//é€š???ç®±ã€�ä¸Šä½�æœºè¯»å†™:384-396
+		RWRegister[384]  = RWAIRemoteTarget1_S;//è¿œç¨‹???æ ‡???åº¦1
+    RWRegister[385]  = RWAIRemoteTarget2_S;//è¿œç¨‹???æ ‡???åº¦2,å¤‡ç”¨
+		RWRegister[386]  = RWRemoteWindSpeed_S;//è¿œç¨‹é£Ž??
+		RWRegister[387]  = RWRemoteWindDirect_S;//è¿œç¨‹é£Žå�‘
+
+	RWRegister[388]  = RWTimeYearMonth_S;//å¹´æœˆ
+	RWRegister[389]  = RWTimeDayHour_S;//æ—¥æ—¶
+	RWRegister[390]  = RWTimeMinuteSecond_S;//åˆ†???
+	RWRegister[391]  = RWLongitude1_S;//ç»�åº¦
+	RWRegister[392]  = RWLongitude2_S;//ç»�åº¦
+	RWRegister[393]  = RWLatitude1_S;//??????
+	RWRegister[394]  = RWLatitude2_S;//??????
+	RWRegister[395]  = RWTimeZone1_S;//æ—¶åŒº
+	RWRegister[396]  = RWTimeZone2_S;//æ—¶åŒº
+
+		RWRegister[397]  = RElevationAngle1_S; //é«˜åº¦???1
+		RWRegister[398]  = RAzimuthAngle1_S; //æ–¹ä½�???1
+		
+    RWRegister[399]  = RElevationAngle2_S;//é«˜åº¦???2ï¼Œ???ç”¨
+    RWRegister[400]  = RAzimuthAngle2_S;//æ–¹ä½�???2ï¼Œ???ç”¨
+		
+		//æŽ§åˆ¶å™¨å†…éƒ¨å�‚æ•°ï¼Œä¸Šä½�æœº???å†™
+		RWRegister[401]  = RWComID_S; //æŽ§åˆ¶å™¨ID
+		RWRegister[402]  = RWChannelSelect_S; //é€šé�“é€‰æ‹©ï¼Œä¿�???
+		RWRegister[403]  = RWEWTracingAccuracy_S;//è·Ÿè¸ªç²¾åº¦
+		RWRegister[404]  = RWHeatEnable_S;//åŠ çƒ­ä½¿èƒ½
+		RWRegister[405]  = RWMotorOrientation_S;//ç”µæœºæœ�å�‘
+		RWRegister[406]  = RWProtectCurrent_S;//ä¿�æŠ¤ç”µæµ�
+		
+		RWRegister[407]  = RWPVModuleWidth_S;//ç»„ä»¶å®½åº¦
+		RWRegister[408]  = RWPostSpacing_S;//ç«‹æŸ±é—´è·�
+		RWRegister[409]  = RWTerrainSlope1_S;//ä¸Šå�¡???1
+    RWRegister[410]  = RWTerrainSlopeEvening1_S;//ä¸‹å�¡???1
+		RWRegister[411]  = RWTerrainSlope2_S;//ä¸Šå�¡???2
+    RWRegister[412]  = RWTerrainSlopeEvening2_S;//ä¸‹å�¡???2
+		
+		RWRegister[413]  = RWSouthNorthShiftAngle1_S;//å�—åŒ—å�‘å��ç§»???åº¦1
+		RWRegister[414]  = RWSouthNorthShiftAngle2_S;//å�—åŒ—å�‘å��ç§»???åº¦2
+		RWRegister[415]  = RWEWSoftLimitAngle_S;//ä¸œè¥¿???é™�ä½�
+		RWRegister[416]  = RWCleaningDockAngle_S;//æ¸…æ´—è§’åº¦
+		RWRegister[417]  = RWBackAngle_S;//å¤œè¿”è§’åº¦
+		RWRegister[418]  = RWNoComEnable_S;//æ— é€š???ä½¿èƒ½
+		RWRegister[419]  = RWUpWindSpeed_S;//è¿›å…¥å¤§???ä¿�æŠ¤?????
+    RWRegister[420]  = RWUpStartTime_S;//è¿›å…¥å¤§???ä¿�æŠ¤æ—¶???
+    RWRegister[421]  = RWLowWindSpeed_S;//é€€å‡ºå¤§é£Žä¿�æŠ¤?????
+    RWRegister[422]  = RWLowStopTime_S;//é€€å‡ºå¤§é£Žä¿�æŠ¤æ—¶???
+		RWRegister[423]  = RWFacingWindStopFunction_Enable_S;//è¿Ž???å�œé� åŠŸèƒ½ä½¿???
+		RWRegister[424]  = RWEWFacingWindAngle_S;//ä¸œè¥¿è¿Ž???å�œé� ???åº¦
+		
+		RWRegister[425]  = RWBatteryLowTriggerValue_S;   //Battery Low Trigger  Value
+    RWRegister[426]  = RWBatteryLowRecoveryValue_S;  //Battery Low Recovery Value
+    RWRegister[427]  = RWBatteryEmptyTriggerValue_S;   //Battery Empty Trigger  Value;
+    RWRegister[428]  = RWBatteryEmptyRecoveryValue_S;   //Battery Empty Recovery Value
+	 
+	RWRegister[429]  = RWBatteryHighTemperatureProtection_Value_S; //é«˜æ¸©ä¿�æŠ¤é˜ˆå€¼ï¼šé«˜å­—èŠ‚ï¼š???åŠ¨é˜ˆå€¼ï¼›ä½Žå­—èŠ‚ï¼šé€€å‡ºé˜ˆ???
+
+	RWRegister[431]  = RWLoraHardwareStatus;
+	RWRegister[432]  = RWVoutCurrentCh1;
+	RWRegister[433]  = RWVoutCurrentCh2;
+
+
+
+}
+
+void ASQProtocolInit()
+{
+    RWRegisterQ[0]   = RWWorkMode2;
+    RWRegisterQ[1]   = RTargetAngle;
+    RWRegisterQ[2]   = RRealAngle;
+    RWRegisterQ[3]   = RWarningAndFault1;
+    RWRegisterQ[4]   = RWarningAndFault2;
+    
+}
+
+void ASLProtocolInit()
+{
+    RWRegisterL[0]   = RResetCount1;      //Reset count
+    RWRegisterL[1]   = RResetCount2;
+    RWRegisterL[2]   = RWLogWarningSum;   //log warning sum
+    RWRegisterL[3]   = RWAskWarningNo;    //log warning No
+    RWRegisterL[4]   = RWLogOperationSum; //log operation sum
+    RWRegisterL[5]   = RWAskOperationNo;  //log operation No
+    RWRegisterL[6]   = (void *)0;  //
+    RWRegisterL[7]   = (void *)0;  //
+    RWRegisterL[8]   = (void *)0;  //
+    RWRegisterL[9]   = RWLogReadNum;  //logè¯»å�–åº�å�·
+}
+
+
+
+
+
+
+
+
+//baseAddr = 20,000;
+void ASSlaveProtocolInit(void)
+{
+  //ä»ŽæœºæŠ¥???ä¿¡??? n*5+0:æŠ¥???ä¿¡???1-1 n*5+1:æŠ¥???ä¿¡???1-2 n*5+2:ç”µæœºå®žé™…è§’åº¦1 n*5+3:ç”µæœºå®žé™…è§’åº¦2 n*5+4:ç”µæœºå®žé™…è§’åº¦3
+    RWRegisterSlave[0*5+0] =  RWWarningAndFaultOfSlave_1;//ä»Žæœº1çš„æŠ¥è­¦ä¿¡???
+    RWRegisterSlave[0*5+1] =  RRealAngle1;//ä»Žæœº1å®žé™…è§’åº¦
+    RWRegisterSlave[0*5+2] =  RMotorCurrent1;//ä»Žæœº1ç”µæœºç”µæµ�
+
+    RWRegisterSlave[1*5+0] =  RWWarningAndFaultOfSlave_2; 
+    RWRegisterSlave[1*5+1] =  RRealAngle2; //ä»Žæœº2å®žé™…è§’åº¦
+    RWRegisterSlave[1*5+2] =  RMotorCurrent2; //ä»Žæœº2ç”µæœºç”µæµ�
+
+    RWRegisterSlave[2*5+0] =  RWWarningAndFaultOfSlave_3;
+    RWRegisterSlave[2*5+1] =  RRealAngle3; //ä»Žæœº3å®žé™…è§’åº¦
+    RWRegisterSlave[2*5+2] =  RMotorCurrent3; //ä»Žæœº3ç”µæœºç”µæµ�
+
+    RWRegisterSlave[3*5+0] =  RWWarningAndFaultOfSlave_4;
+    RWRegisterSlave[3*5+1] =  RRealAngle4; //ä»Žæœº4å®žé™…è§’åº¦
+    RWRegisterSlave[3*5+2] =  RMotorCurrent4; //ä»Žæœº4ç”µæœºç”µæµ�
+
+    RWRegisterSlave[4*5+0] =  RWWarningAndFaultOfSlave_5;
+    RWRegisterSlave[4*5+1] =  RRealAngle5; //ä»Žæœº5å®žé™…è§’åº¦
+    RWRegisterSlave[4*5+2] =  RMotorCurrent5; //ä»Žæœº5ç”µæœºç”µæµ�
+
+    RWRegisterSlave[5*5+0] =  RWWarningAndFaultOfSlave_6;
+    RWRegisterSlave[5*5+1] =  RRealAngle6; //ä»Žæœº6å®žé™…è§’åº¦
+    RWRegisterSlave[5*5+2] =  RMotorCurrent6; //ä»Žæœº6ç”µæœºç”µæµ�
+
+    RWRegisterSlave[6*5+0] =  RWWarningAndFaultOfSlave_7;
+    RWRegisterSlave[6*5+1] =  RRealAngle7; //ä»Žæœº7å®žé™…è§’åº¦
+    RWRegisterSlave[6*5+2] =  RMotorCurrent7; //ä»Žæœº7ç”µæœºç”µæµ�
+
+    RWRegisterSlave[7*5+0] =  RWWarningAndFaultOfSlave_8;
+    RWRegisterSlave[7*5+1] =  RRealAngle8; //ä»Žæœº8å®žé™…è§’åº¦
+    RWRegisterSlave[7*5+2] =  RMotorCurrent8; //ä»Žæœº8ç”µæœºç”µæµ�
+
+    RWRegisterSlave[8*5+0] =  RWWarningAndFaultOfSlave_9;
+    RWRegisterSlave[8*5+1] =  RRealAngle9; //ä»Žæœº9å®žé™…è§’åº¦
+    RWRegisterSlave[8*5+2] =  RMotorCurrent9; //ä»Žæœº9ç”µæœºç”µæµ�
+
+    RWRegisterSlave[9*5+0] =  RWWarningAndFaultOfSlave_10;
+    RWRegisterSlave[9*5+1] =  RRealAngle10; //ä»Žæœº10å®žé™…è§’åº¦
+    RWRegisterSlave[9*5+2] =  RMotorCurrent10; //ä»Žæœº10ç”µæœºç”µæµ�
+
+    RWRegisterSlave[10*5+0] =  RWWarningAndFaultOfSlave_11;
+    RWRegisterSlave[10*5+1] =  RRealAngle11; //ä»Žæœº11å®žé™…è§’åº¦   
+    RWRegisterSlave[10*5+2] =  RMotorCurrent11; //ä»Žæœº11ç”µæœºç”µæµ�
+
+    RWRegisterSlave[11*5+0] = RWWarningAndFaultOfSlave_12;
+    RWRegisterSlave[11*5+1] = RRealAngle12; //ä»Žæœº12å®žé™…è§’åº¦
+    RWRegisterSlave[11*5+2] = RMotorCurrent12; //ä»Žæœº12ç”µæœºç”µæµ�
+
+    RWRegisterSlave[12*5+0] = RWWarningAndFaultOfSlave_13;
+    RWRegisterSlave[12*5+1] = RRealAngle13; //ä»Žæœº13å®žé™…è§’åº¦
+    RWRegisterSlave[12*5+2] = RMotorCurrent13; //ä»Žæœº13ç”µæœºç”µæµ�
+
+    RWRegisterSlave[13*5+0] = RWWarningAndFaultOfSlave_14;
+    RWRegisterSlave[13*5+1] = RRealAngle14; //ä»Žæœº14å®žé™…è§’åº¦
+    RWRegisterSlave[13*5+2] = RMotorCurrent14; //ä»Žæœº14ç”µæœºç”µæµ�
+
+    RWRegisterSlave[14*5+0] = RWWarningAndFaultOfSlave_15;
+    RWRegisterSlave[14*5+1] = RRealAngle15; //ä»Žæœº15å®žé™…è§’åº¦
+    RWRegisterSlave[14*5+2] = RMotorCurrent15; //ä»Žæœº15ç”µæœºç”µæµ�
+
+    RWRegisterSlave[15*5+0] = RWWarningAndFaultOfSlave_16;
+    RWRegisterSlave[15*5+1] = RRealAngle16; //ä»Žæœº16å®žé™…è§’åº¦
+    RWRegisterSlave[15*5+2] = RMotorCurrent16; //ä»Žæœº16ç”µæœºç”µæµ�
+
+    RWRegisterSlave[16*5+0] = RWWarningAndFaultOfSlave_17;
+    RWRegisterSlave[16*5+1] = RRealAngle17; //ä»Žæœº17å®žé™…è§’åº¦
+    RWRegisterSlave[16*5+2] = RMotorCurrent17; //ä»Žæœº17ç”µæœºç”µæµ�
+
+    RWRegisterSlave[17*5+0] = RWWarningAndFaultOfSlave_18;
+    RWRegisterSlave[17*5+1] = RRealAngle18; //ä»Žæœº18å®žé™…è§’åº¦
+    RWRegisterSlave[17*5+2] = RMotorCurrent18; //ä»Žæœº18ç”µæœºç”µæµ�
+
+    RWRegisterSlave[18*5+0] = RWWarningAndFaultOfSlave_19;
+    RWRegisterSlave[18*5+1] = RRealAngle19; //ä»Žæœº19å®žé™…è§’åº¦
+    RWRegisterSlave[18*5+2] = RMotorCurrent19; //ä»Žæœº19ç”µæœºç”µæµ�
+
+    RWRegisterSlave[19*5+0] = RWWarningAndFaultOfSlave_20;
+    RWRegisterSlave[19*5+1] = RRealAngle20; //ä»Žæœº20å®žé™…è§’åº¦
+    RWRegisterSlave[19*5+2] = RMotorCurrent20; //ä»Žæœº20ç”µæœºç”µæµ�
+
+}
+
+void *GetASProtocl()
+{
+    return RWRegister;
+}
+void *GetASQProtocl()
+{
+    return RWRegisterQ;
+}
+void *GetASLProtocl()
+{
+    return RWRegisterL;
+}
+
+void *GetASSlaveProtocl()
+{
+    return RWRegisterSlave;
+}
+
+
+
+
+
