Files
secs2-SJ/usr/protocol/proto_Para_Modbus.c
T
2026-09-09 14:54:40 +08:00

895 lines
25 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#include "proto_Para_Modbus.h"
#include "string.h"
#include "bsp_Uart.h"
#include "os_timer.h"
#include "stdio.h"
#include "test_echo.h"
#include "app.h"
#include "bsp_W5500.h"
#include "bsp_W5500_1.h"
#include "proto_HSMS.h"
#include "bsp_Flash.h"
#include "bsp_Wdg.h"
#include "bsp_DS1302.h"
static ModbusAnalysisData_t ModbusAnalysisData;//指令解析结构体
static ModbusCommunicationSendBuf_t SendStruct;//发送结构体
static void ModbusCommunicationDataReceive(u8 *pData, u16 len,void *other_data);
static void ModbusCommunicationDataSend(u8 *pData, u16 len);
static void proto_Modbus_Init(void);
static void proto_Modbus_Task(void);
static ModbusErrorCode_e ModbusCommunicationDataWrite(u16 Addr, u16 Value);
static u16 ModbusCommunicationDataRead(u16 Addr);
proto_Modbus_t Para_Modbus=
{
.ID = 0x01,
.DataRead = ModbusCommunicationDataRead,
.DataWrite = ModbusCommunicationDataWrite,
.DataAnalysis = ModbusCommunicationDataReceive,
.Init = proto_Modbus_Init,
.Task = proto_Modbus_Task,
};
static proto_Modbus_t *pModbus = &Para_Modbus;
static bsp_Uart_t *rx_uart = NULL;
static void ModbusCommunicationDataSend(u8 *pData, u16 Len)
{
if(&COM_Uart1 == rx_uart)
{
COM_Uart1.Send(&COM_Uart1,pData,Len);
}
else if(&COM_Uart2 == rx_uart)
{
COM_Uart2.Send(&COM_Uart2,pData,Len);
}
}
static void proto_Modbus_Init(void)
{
COM_Uart1.Rx_DataAnalysis = ModbusCommunicationDataReceive;
COM_Uart2.Rx_DataAnalysis = ModbusCommunicationDataReceive;
}
static void proto_Modbus_Task(void)
{
}
static void ModbusCommunicationDataReceive(u8 *pData, u16 len,void *other_data)
{
ModbusErrorCode_e ErrorCode;
u8 inx;
u16 TempAddr, TempData, Crc16;
if (0 == ModbusAnalysis(&ModbusAnalysisData, pData, len))//检查数据长度 校验是否正确
return;
if (pModbus->ID != ModbusAnalysisData.ID)//判断ID是否正确
return;
ErrorCode = ModbusErrorCode_Success;
rx_uart = (bsp_Uart_t *)other_data;
/* //检查地址是否超出范围
if ((ModbusAnalysisData.StartAddress >= MODBUS_REG_LEN) || (ModbusAnalysisData.RegNumber >= MODBUS_REG_LEN) ||
(ModbusAnalysisData.StartAddress + ModbusAnalysisData.RegNumber >= MODBUS_REG_LEN))
{
ErrorCode = ModbusErrorCode_IllegalAddr;
goto Error;
}
*/
switch (ModbusAnalysisData.Func)
{
case 0x03:
case 0x04:
{
TempAddr = ModbusAnalysisData.StartAddress;
SendStruct.SendBuffer[0] = ModbusAnalysisData.ID;
SendStruct.SendBuffer[1] = ModbusAnalysisData.Func;
SendStruct.SendBuffer[2] = 2 * ModbusAnalysisData.RegNumber;
for (inx = 0; inx < ModbusAnalysisData.RegNumber; inx++)
{
TempData = ModbusCommunicationDataRead(TempAddr);
SendStruct.SendBuffer[3 + 2 * inx] = (TempData >> 8) & 0xff;
SendStruct.SendBuffer[4 + 2 * inx] = TempData & 0xff;
TempAddr++;
}
Crc16 = ModbusCrc16(SendStruct.SendBuffer, 3 + SendStruct.SendBuffer[2]);
SendStruct.SendBuffer[3 + SendStruct.SendBuffer[2]] = Crc16 & 0xff;
SendStruct.SendBuffer[4 + SendStruct.SendBuffer[2]] = (Crc16 >> 8) & 0xff;
SendStruct.Len = 5 + SendStruct.SendBuffer[2];
}goto Success;
/*特殊协议*/
case 0x41:
{
TempAddr = ModbusAnalysisData.StartAddress;
SendStruct.SendBuffer[0] = ModbusAnalysisData.ID;
SendStruct.SendBuffer[1] = ModbusAnalysisData.Func;
SendStruct.SendBuffer[2] = ModbusAnalysisData.StartAddress >> 8;
SendStruct.SendBuffer[3] = ModbusAnalysisData.StartAddress & 0xff;
SendStruct.SendBuffer[4] = (2 * ModbusAnalysisData.RegNumber) >> 8;
SendStruct.SendBuffer[5] = (2 * ModbusAnalysisData.RegNumber) & 0xff;
for (inx = 0; inx < ModbusAnalysisData.RegNumber; inx++)
{
TempData = ModbusCommunicationDataRead(TempAddr);
SendStruct.SendBuffer[6 + 2 * inx] = (TempData >> 8) & 0xff;
SendStruct.SendBuffer[7 + 2 * inx] = TempData & 0xff;
TempAddr++;
}
Crc16 = ModbusCrc16(SendStruct.SendBuffer, 6 + 2 * ModbusAnalysisData.RegNumber);
SendStruct.SendBuffer[6 + 2 * ModbusAnalysisData.RegNumber] = Crc16 & 0xff;
SendStruct.SendBuffer[7 + 2 * ModbusAnalysisData.RegNumber] = (Crc16 >> 8) & 0xff;
SendStruct.Len = 8 + 2 * ModbusAnalysisData.RegNumber;
}goto Success;
case 0x06:
{
TempAddr = ModbusAnalysisData.StartAddress;
TempData = (ModbusAnalysisData.wDataAddress[0] << 8) | ModbusAnalysisData.wDataAddress[1];
ErrorCode = ModbusCommunicationDataWrite(TempAddr, TempData);
if (ErrorCode)
{
goto Error;
}
SendStruct.Len = 8;
SendStruct.SendBuffer[0] = ModbusAnalysisData.ID;
SendStruct.SendBuffer[1] = ModbusAnalysisData.Func;
SendStruct.SendBuffer[2] = ModbusAnalysisData.StartAddress >> 8;
SendStruct.SendBuffer[3] = ModbusAnalysisData.StartAddress & 0xff;
SendStruct.SendBuffer[4] = ModbusAnalysisData.wDataAddress[0];
SendStruct.SendBuffer[5] = ModbusAnalysisData.wDataAddress[1];
Crc16 = ModbusCrc16(SendStruct.SendBuffer, 6);
SendStruct.SendBuffer[6] = Crc16 & 0xff;
SendStruct.SendBuffer[7] = (Crc16 >> 8) & 0xff;
}break;
case 0x10:
{
TempAddr = ModbusAnalysisData.StartAddress;
for (inx = 0; inx < ModbusAnalysisData.RegNumber; inx++)
{
TempData = ModbusAnalysisData.wDataAddress[2 * inx];
TempData = (TempData << 8) | ModbusAnalysisData.wDataAddress[2 * inx + 1];
ErrorCode = ModbusCommunicationDataWrite(TempAddr, TempData);
TempAddr++;
if (ErrorCode)
{
goto Error;
}
}
SendStruct.Len = 8;
SendStruct.SendBuffer[0] = ModbusAnalysisData.ID;
SendStruct.SendBuffer[1] = ModbusAnalysisData.Func;
SendStruct.SendBuffer[2] = ModbusAnalysisData.StartAddress >> 8;
SendStruct.SendBuffer[3] = ModbusAnalysisData.StartAddress & 0xff;
SendStruct.SendBuffer[4] = ModbusAnalysisData.RegNumber >> 8;
SendStruct.SendBuffer[5] = ModbusAnalysisData.RegNumber & 0xff;
Crc16 = ModbusCrc16(SendStruct.SendBuffer, 6);
SendStruct.SendBuffer[6] = Crc16 & 0xff;
SendStruct.SendBuffer[7] = (Crc16 >> 8) & 0xff;
}
break;
default:
{
ErrorCode = ModbusErrorCode_IllegalFunction;
}
goto Error;
}
Success:
ModbusCommunicationDataSend(SendStruct.SendBuffer, SendStruct.Len);
return;
Error:
SendStruct.Len = 5;
SendStruct.SendBuffer[0] = ModbusAnalysisData.ID;
SendStruct.SendBuffer[1] = ModbusAnalysisData.Func | 0x80;
SendStruct.SendBuffer[2] = ErrorCode;
Crc16 = ModbusCrc16(SendStruct.SendBuffer, 3);
SendStruct.SendBuffer[3] = Crc16 & 0xff;
SendStruct.SendBuffer[4] = (Crc16 >> 8) & 0xff;
ModbusCommunicationDataSend(SendStruct.SendBuffer, SendStruct.Len);
}
/*modbus接收到的u16转换为ascii的u16 实际为对调高低字节*/
static u16 modbus_u16_to_ascii_u16(u16 modbus_u16)
{
return (modbus_u16 << 8) | (modbus_u16 >> 8);
}
/*ascii的u16 转换为modbus u16发送 实际为对调高低字节*/
static u16 ascii_u16_to_modbus_u16(u16 modbus_u16)
{
return (modbus_u16 << 8) | (modbus_u16 >> 8);
}
/******************************************
* 函数: ModbusCommunicationDataWrite
* 功能: Modbus写寄存器
* 参数: Addr: 地址
Value:数据
* 返回: 无
* 描述: 无
******************************************/
static ModbusErrorCode_e ModbusCommunicationDataWrite(u16 Addr, u16 Value)
{
ModbusErrorCode_e ErrorCode;
ErrorCode = ModbusErrorCode_Success;
switch(Addr)
{
/*SN*/
case 12 ... 21:
{
Usr_Flash.FlashData.SN[Addr - 12] = Value;
Usr_Flash.Write();
}break;
/*IP地址*/
case 22 ... 25:
{
W5500.IP_Addr[Addr - 22] = Value;
Usr_Flash.FlashData.IP_Addr[Addr - 22] = Value;
}break;
/*端口号*/
case 26:
{
W5500.W5500_Class[0].ConfigData.Port[0] = Value >> 8;
W5500.W5500_Class[0].ConfigData.Port[1] = Value & 0x00ff;
Usr_Flash.FlashData.Port[0] = Value >> 8;
Usr_Flash.FlashData.Port[1] = Value & 0x00ff;
}break;
/*子网掩码*/
case 27 ... 30:
{
W5500.Sub_Mask[Addr - 27] = Value;
Usr_Flash.FlashData.Sub_Mask[Addr - 27] = Value;
}break;
case 31:
{
HSMS.Flash_ConfigData.Device_Id = Value;
Usr_Flash.FlashData.Devic_Id = Value;
}break;
/* 网关设置*/
case 32 ... 35:
{
W5500.Gateway_IP[Addr - 32] = Value;
Usr_Flash.FlashData.Gateway_IP[Addr - 32] = Value;
Wdg.Feed();
W5500.Init();
Wdg.Feed();
Usr_Flash.Write();
} break;
/*时间设置*/
case 36:
{
DS1302.Time.Year = Value % 2000;
}break;
case 37:
{
DS1302.Time.Month = Value;
}break;
case 38:
{
DS1302.Time.Day = Value;
}break;
case 39:
{
DS1302.Time.Hour = Value;
}break;
case 40:
{
DS1302.Time.Minute = Value;
}break;
case 41:
{
DS1302.Time.Second = Value;
DS1302.Set(&DS1302.Time);
}break;
case 42 ... 45:
{
W5500_1.IP_Addr[Addr - 42] = Value;
Usr_Flash.FlashData.IP_Addr_1[Addr - 42] = Value;
}break;
case 46:
{
W5500_1.W5500_Class[0].ConfigData.Port[0] = Value >> 8;
W5500_1.W5500_Class[0].ConfigData.Port[1] = Value & 0x00ff;
Usr_Flash.FlashData.Port_1[0] = Value >> 8;
Usr_Flash.FlashData.Port_1[1] = Value & 0x00ff;
}break;
case 47 ... 50:
{
W5500_1.Sub_Mask[Addr - 47] = Value;
Usr_Flash.FlashData.Sub_Mask_1[Addr - 47] = Value;
}break;
case 51 ... 54:
{
W5500_1.Gateway_IP[Addr - 51] = Value;
Usr_Flash.FlashData.Gateway_IP_1[Addr - 51] = Value;
Wdg.Feed();
W5500_1.Init();
Wdg.Feed();
Usr_Flash.Write();
}break;
case 55 ... 58:
{
W5500_1.W5500_Class[0].ConfigData.DIP[Addr - 55] = Value;
Usr_Flash.FlashData.IP_Addr_2[Addr - 55] = Value;
}break;
case 59:
{
W5500_1.W5500_Class[0].ConfigData.DPort[0] = Value >> 8;
W5500_1.W5500_Class[0].ConfigData.DPort[1] = Value & 0x00ff;
Usr_Flash.FlashData.Port_2[0] = Value >> 8;
Usr_Flash.FlashData.Port_2[1] = Value & 0x00ff;
Wdg.Feed();
W5500_1.Init();
Wdg.Feed();
Usr_Flash.Write();
}
/* 设备 SN */
case 100 ... 111:
{
Usr_Flash.FlashData.Device_SN[Addr - 100] = modbus_u16_to_ascii_u16(Value);
Usr_Flash.Write();
} break;
/* 机台和位置(Device_Model) */
case 112 ... 123:
{
Usr_Flash.FlashData.Device_Model[Addr - 112] = modbus_u16_to_ascii_u16(Value);
Usr_Flash.Write();
} break;
/* 设备类型(Station_Type) */
case 124 ... 135:
{
Usr_Flash.FlashData.Station_Type[Addr - 124] = modbus_u16_to_ascii_u16(Value);
Usr_Flash.Write();
} break;
/* 设备型号(Device_ID) */
case 136 ... 147:
{
Usr_Flash.FlashData.Device_ID[Addr - 136] = modbus_u16_to_ascii_u16(Value);
Usr_Flash.Write();
} break;
/* 软件版本(Version) */
case 148 ... 159:
{
Usr_Flash.FlashData.Version[Addr - 148] = modbus_u16_to_ascii_u16(Value);
Usr_Flash.Write();
} break;
/* 厂商名称(Manufacturer) */
case 160 ... 171:
{
Usr_Flash.FlashData.Manufacturer[Addr - 160] = modbus_u16_to_ascii_u16(Value);
Usr_Flash.Write();
} break;
/* 机台名称(Station_Name) */
case 172 ... 183:
{
Usr_Flash.FlashData.Station_Name[Addr - 172] = modbus_u16_to_ascii_u16(Value);
Usr_Flash.Write();
} break;
/* 腔体名称(Chamber_Name) */
case 184 ... 195:
{
Usr_Flash.FlashData.Chamber_Name[Addr - 184] = modbus_u16_to_ascii_u16(Value);
Usr_Flash.Write();
} break;
/* ========== 后续参数顺延 ========== */
/* Alarm_info (20个) */
case 196 ... 215:
{
Usr_Flash.FlashData.Alarm_info[Addr - 196] = Value;
Usr_Flash.Write();
} break;
/* Data_ID1 */
case 216:
{
Usr_Flash.FlashData.Data_ID1 = Value;
Usr_Flash.Write();
} break;
/* Collection_event_ID1 */
case 217:
{
Usr_Flash.FlashData.Collection_event_ID1 = Value;
Usr_Flash.Write();
} break;
/* Report_ID1 */
case 218:
{
Usr_Flash.FlashData.Report_ID1 = Value;
Usr_Flash.Write();
} break;
/* Alarm_ID */
case 219:
{
Usr_Flash.FlashData.Alarm_ID = Value;
Usr_Flash.Write();
} break;
/* Alarm_Type (7个) */
case 220 ... 226:
{
Usr_Flash.FlashData.Alarm_Type[Addr - 220] = Value;
Usr_Flash.Write();
} break;
/* Begin_Warning (7个) */
case 227 ... 233:
{
Usr_Flash.FlashData.Begin_Warning[Addr - 227] = Value;
Usr_Flash.Write();
} break;
/* IDS (11个) */
case 234 ... 244:
{
Usr_Flash.FlashData.IDS[Addr - 234] = Value;
Usr_Flash.Write();
} break;
/* Over_Trigger (9个) */
case 245 ... 253:
{
Usr_Flash.FlashData.Over_Trigger[Addr - 245] = Value;
Usr_Flash.Write();
} break;
/* Equipment (5个) */
case 254 ... 258:
{
Usr_Flash.FlashData.Equipment[Addr - 254] = Value;
Usr_Flash.Write();
} break;
/* E9 (19个) */
case 259 ... 277:
{
Usr_Flash.FlashData.E9[Addr - 259] = Value;
Usr_Flash.Write();
} break;
/* Device_Type */
case 278:
{
Usr_Flash.FlashData.Device_Type = Value;
Usr_Flash.Write();
} break;
/* Sensor */
case 279:
{
Usr_Flash.FlashData.Sensor = Value;
Usr_Flash.Write();
} break;
/* Alarm_value */
case 280:
{
Usr_Flash.FlashData.Alarm_value = Value;
Usr_Flash.Write();
} break;
/* Alarm_ubit */
case 281:
{
Usr_Flash.FlashData.Alarm_ubit = Value;
Usr_Flash.Write();
} break;
/* Start_Time (11个) */
case 282 ... 292:
{
Usr_Flash.FlashData.Start_Time[Addr - 282] = Value;
Usr_Flash.Write();
} break;
/* Alarm_Time (6个) */
case 293 ... 298:
{
Usr_Flash.FlashData.Alarm_Time[Addr - 293] = Value;
Usr_Flash.Write();
} break;
/* Alarm (6个) */
case 299 ... 304:
{
Usr_Flash.FlashData.Alarm[Addr - 299] = Value;
Usr_Flash.Write();
} break;
/* Data_ID2 */
case 305:
{
Usr_Flash.FlashData.Data_ID2 = Value;
Usr_Flash.Write();
} break;
/* Collection_event_ID2 */
case 306:
{
Usr_Flash.FlashData.Collection_event_ID2 = Value;
Usr_Flash.Write();
} break;
/* Report_ID2 */
case 307:
{
Usr_Flash.FlashData.Report_ID2 = Value;
Usr_Flash.Write();
} break;
/* Sub_Device_Type (2个) */
case 308 ... 309:
{
Usr_Flash.FlashData.Sub_Device_Type[Addr - 308] = Value;
Usr_Flash.Write();
} break;
/* Sub_Device_State (2个) */
case 310 ... 311:
{
Usr_Flash.FlashData.Sub_Device_State[Addr - 310] = Value;
Usr_Flash.Write();
} break;
/* State_Change_Time (2个) */
case 312 ... 313:
{
Usr_Flash.FlashData.State_Change_Time[Addr - 312] = Value;
Usr_Flash.Write();
} break;
case 1000: // 测试开关
{
Usr_Flash.test = Value;
Usr_Flash.Write();
test_echo_switch(Usr_Flash.test);
} break;
}
return ErrorCode;
}
/******************************************
* 函数: ModbusCommunicationDataRead
* 功能: Modbus读寄存器数据
* 参数: Addr: 地址
* 返回: 地址对应的数据
* 描述: 无
******************************************/
static u16 ModbusCommunicationDataRead(u16 Addr)
{
u8 *p_u8Data;
u16 Data;
u16 *pData;
switch(Addr)
{
/*SV*/
case 0 ... 11:
{
p_u8Data = &SwVersion[Addr * 2];
Data = p_u8Data[1] | p_u8Data[0] << 8;
}break;
/*SN*/
case 12 ... 21:
{
Data = Usr_Flash.FlashData.SN[Addr - 12];
}break;
/*IP地址*/
case 22 ... 25:
{
Data = W5500.IP_Addr[Addr - 22];
}break;
/*端口号*/
case 26:
{
Data = W5500.W5500_Class[0].ConfigData.Port[0] << 8 | W5500.W5500_Class[0].ConfigData.Port[1];
}break;
/*子网掩码*/
case 27 ... 30:
{
Data = W5500.Sub_Mask[Addr - 27];
}break;
/*SECS2协议设备ID*/
case 31:
{
Data = HSMS.Flash_ConfigData.Device_Id;
}break;
/* 网关*/
case 32 ... 35:
{
Data = W5500.Gateway_IP[Addr - 32];
} break;
/*时间*/
case 36:
{
Data = (DS1302.Time.Year) + 2000;
}break;
case 37:
{
Data = DS1302.Time.Month;
}break;
case 38:
{
Data = DS1302.Time.Day;
}break;
case 39:
{
Data = DS1302.Time.Hour;
}break;
case 40:
{
Data = DS1302.Time.Minute;
}break;
case 41:
{
Data = DS1302.Time.Second;
}break;
case 42 ... 45:
{
Data = W5500_1.IP_Addr[Addr - 42];
}break;
case 46:
{
Data = W5500_1.W5500_Class[0].ConfigData.Port[0] << 8 | W5500_1.W5500_Class[0].ConfigData.Port[1];
}break;
case 47 ... 50:
{
Data = W5500_1.Sub_Mask[Addr - 47];
}break;
case 51 ... 54:
{
Data = W5500_1.Gateway_IP[Addr - 51];
}break;
case 55 ... 58:
{
Data = W5500_1.W5500_Class[0].ConfigData.DIP[Addr - 55];
}break;
case 59:
{
Data = W5500_1.W5500_Class[0].ConfigData.DPort[0] << 8 | W5500_1.W5500_Class[0].ConfigData.DPort[1];
}break;
/* ========== 字符串字段(每个12个寄存器) ========== */
/* 设备 SN */
case 100 ... 111:
{
Data = Usr_Flash.FlashData.Device_SN[Addr - 100];
Data = ascii_u16_to_modbus_u16(Data);
} break;
/* 机台和位置(Device_Model) */
case 112 ... 123:
{
Data = Usr_Flash.FlashData.Device_Model[Addr - 112];
Data = ascii_u16_to_modbus_u16(Data);
} break;
/* 设备类型(Station_Type) */
case 124 ... 135:
{
Data = Usr_Flash.FlashData.Station_Type[Addr - 124];
Data = ascii_u16_to_modbus_u16(Data);
} break;
/* 设备型号(Device_ID) */
case 136 ... 147:
{
Data = Usr_Flash.FlashData.Device_ID[Addr - 136];
Data = ascii_u16_to_modbus_u16(Data);
} break;
/* 软件版本(Version) */
case 148 ... 159:
{
Data = Usr_Flash.FlashData.Version[Addr - 148];
Data = ascii_u16_to_modbus_u16(Data);
} break;
/* 厂商名称(Manufacturer) */
case 160 ... 171:
{
Data = Usr_Flash.FlashData.Manufacturer[Addr - 160];
Data = ascii_u16_to_modbus_u16(Data);
} break;
/* 机台名称(Station_Name) */
case 172 ... 183:
{
Data = Usr_Flash.FlashData.Station_Name[Addr - 172];
Data = ascii_u16_to_modbus_u16(Data);
} break;
/* 腔体名称(Chamber_Name) */
case 184 ... 195:
{
Data = Usr_Flash.FlashData.Chamber_Name[Addr - 184];
Data = ascii_u16_to_modbus_u16(Data);
} break;
/* ========== 后续参数顺延 ========== */
/* Alarm_info (20个) */
case 196 ... 215:
{
Data = Usr_Flash.FlashData.Alarm_info[Addr - 196];
} break;
/* Data_ID1 */
case 216:
{
Data = Usr_Flash.FlashData.Data_ID1;
} break;
/* Collection_event_ID1 */
case 217:
{
Data = Usr_Flash.FlashData.Collection_event_ID1;
} break;
/* Report_ID1 */
case 218:
{
Data = Usr_Flash.FlashData.Report_ID1;
} break;
/* Alarm_ID */
case 219:
{
Data = Usr_Flash.FlashData.Alarm_ID;
} break;
/* Alarm_Type (7个) */
case 220 ... 226:
{
Data = Usr_Flash.FlashData.Alarm_Type[Addr - 220];
} break;
/* Begin_Warning (7个) */
case 227 ... 233:
{
Data = Usr_Flash.FlashData.Begin_Warning[Addr - 227];
} break;
/* IDS (11个) */
case 234 ... 244:
{
Data = Usr_Flash.FlashData.IDS[Addr - 234];
} break;
/* Over_Trigger (9个) */
case 245 ... 253:
{
Data = Usr_Flash.FlashData.Over_Trigger[Addr - 245];
} break;
/* Equipment (5个) */
case 254 ... 258:
{
Data = Usr_Flash.FlashData.Equipment[Addr - 254];
} break;
/* E9 (19个) */
case 259 ... 277:
{
Data = Usr_Flash.FlashData.E9[Addr - 259];
} break;
/* Device_Type */
case 278:
{
Data = Usr_Flash.FlashData.Device_Type;
} break;
/* Sensor */
case 279:
{
Data = Usr_Flash.FlashData.Sensor;
} break;
/* Alarm_value */
case 280:
{
Data = Usr_Flash.FlashData.Alarm_value;
} break;
/* Alarm_ubit */
case 281:
{
Data = Usr_Flash.FlashData.Alarm_ubit;
} break;
/* Start_Time (11个) */
case 282 ... 292:
{
Data = Usr_Flash.FlashData.Start_Time[Addr - 282];
} break;
/* Alarm_Time (6个) */
case 293 ... 298:
{
Data = Usr_Flash.FlashData.Alarm_Time[Addr - 293];
} break;
/* Alarm (6个) */
case 299 ... 304:
{
Data = Usr_Flash.FlashData.Alarm[Addr - 299];
} break;
/* Data_ID2 */
case 305:
{
Data = Usr_Flash.FlashData.Data_ID2;
} break;
/* Collection_event_ID2 */
case 306:
{
Data = Usr_Flash.FlashData.Collection_event_ID2;
} break;
/* Report_ID2 */
case 307:
{
Data = Usr_Flash.FlashData.Report_ID2;
} break;
/* Sub_Device_Type (2个) */
case 308 ... 309:
{
Data = Usr_Flash.FlashData.Sub_Device_Type[Addr - 308];
} break;
/* Sub_Device_State (2个) */
case 310 ... 311:
{
Data = Usr_Flash.FlashData.Sub_Device_State[Addr - 310];
} break;
/* State_Change_Time (2个) */
case 312 ... 313:
{
Data = Usr_Flash.FlashData.State_Change_Time[Addr - 312];
} break;
case 1000:
{
Data = Usr_Flash.test;
} break;
default:
Data = 0;
}
return Data;
}