745 lines
21 KiB
C
745 lines
21 KiB
C
#include "proto_Para_Modbus.h"
|
|
#include "string.h"
|
|
#include "bsp_Uart.h"
|
|
#include "os_timer.h"
|
|
|
|
#include "stdio.h"
|
|
|
|
#include "app.h"
|
|
#include "bsp_W5500.h"
|
|
#include "proto_HSMS.h"
|
|
#include "bsp_Flash.h"
|
|
#include "bsp_Wdg.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 ... 16:
|
|
{
|
|
Usr_Flash.FlashData.SN[Addr - 12] = Value;
|
|
Usr_Flash.Write();
|
|
}break;
|
|
/*IP地址*/
|
|
case 17 ... 20:
|
|
{
|
|
W5500.IP_Addr[Addr - 17] = Value;
|
|
Usr_Flash.FlashData.IP_Addr[Addr - 17] = Value;
|
|
}break;
|
|
/*端口号*/
|
|
case 21:
|
|
{
|
|
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 22 ... 25:
|
|
{
|
|
W5500.Sub_Mask[Addr - 22] = Value;
|
|
Usr_Flash.FlashData.Sub_Mask[Addr - 22] = Value;
|
|
}break;
|
|
case 26:
|
|
{
|
|
HSMS.Flash_ConfigData.Device_Id = Value;
|
|
Usr_Flash.FlashData.Devic_Id = Value;
|
|
Wdg.Feed();
|
|
W5500.Init();
|
|
Wdg.Feed();
|
|
Usr_Flash.Write();
|
|
}break;
|
|
|
|
/* 网关设置*/
|
|
case 27 ... 30:
|
|
{
|
|
W5500.Gateway_IP[Addr - 27] = Value;
|
|
Usr_Flash.FlashData.Gateway_IP[Addr - 27] = Value;
|
|
W5500.Init();
|
|
Usr_Flash.Write();
|
|
} break;
|
|
|
|
/* 设备 SN */
|
|
case 100 ... 107:
|
|
{
|
|
Usr_Flash.FlashData.Device_SN[Addr - 100] = modbus_u16_to_ascii_u16(Value);
|
|
} break;
|
|
|
|
/* 报警机台和位置 */
|
|
case 108 ... 115:
|
|
{
|
|
Usr_Flash.FlashData.Device_Model[Addr - 108] = modbus_u16_to_ascii_u16(Value);
|
|
} break;
|
|
|
|
/* 设备型号 */
|
|
case 116 ... 123:
|
|
{
|
|
Usr_Flash.FlashData.Device_ID[Addr - 116] = modbus_u16_to_ascii_u16(Value);
|
|
} break;
|
|
|
|
/* 机台软件版本号 */
|
|
case 124 ... 131:
|
|
{
|
|
Usr_Flash.FlashData.Version[Addr - 124] = modbus_u16_to_ascii_u16(Value);
|
|
} break;
|
|
|
|
/* 厂商名称 */
|
|
case 132 ... 139:
|
|
{
|
|
Usr_Flash.FlashData.Manufacturer[Addr - 132] = modbus_u16_to_ascii_u16(Value);
|
|
} break;
|
|
|
|
/* 机台名称 */
|
|
case 140 ... 147:
|
|
{
|
|
Usr_Flash.FlashData.Station_Name[Addr - 140] = modbus_u16_to_ascii_u16(Value);
|
|
} break;
|
|
|
|
/* 腔体名称 */
|
|
case 148 ... 155:
|
|
{
|
|
Usr_Flash.FlashData.Chamber_Name[Addr - 148] = modbus_u16_to_ascii_u16(Value);
|
|
} break;
|
|
|
|
/* 机台类型 */
|
|
case 156 ... 163:
|
|
{
|
|
Usr_Flash.FlashData.Station_Type[Addr - 156] = modbus_u16_to_ascii_u16(Value);
|
|
Usr_Flash.Write();
|
|
} break;
|
|
|
|
/* 预留 Alarm_info */
|
|
case 164 ... 183:
|
|
{
|
|
Usr_Flash.FlashData.Alarm_info[Addr - 164] = Value;
|
|
Usr_Flash.Write();
|
|
} break;
|
|
|
|
/* 预留 Data_ID1 */
|
|
case 184:
|
|
{
|
|
Usr_Flash.FlashData.Data_ID1 = Value;
|
|
Usr_Flash.Write();
|
|
} break;
|
|
|
|
/* 预留 Collection_event_ID1 */
|
|
case 185:
|
|
{
|
|
Usr_Flash.FlashData.Collection_event_ID1 = Value;
|
|
Usr_Flash.Write();
|
|
} break;
|
|
|
|
/* 预留 Report_ID1 */
|
|
case 186:
|
|
{
|
|
Usr_Flash.FlashData.Report_ID1 = Value;
|
|
Usr_Flash.Write();
|
|
} break;
|
|
|
|
/* 预留 Alarm_ID */
|
|
case 187:
|
|
{
|
|
Usr_Flash.FlashData.Alarm_ID = Value;
|
|
Usr_Flash.Write();
|
|
} break;
|
|
|
|
/* 预留 Alarm_Type */
|
|
case 188 ... 194:
|
|
{
|
|
Usr_Flash.FlashData.Alarm_Type[Addr - 188] = Value;
|
|
Usr_Flash.Write();
|
|
} break;
|
|
|
|
/* 预留 Begin_Warning */
|
|
case 195 ... 201:
|
|
{
|
|
Usr_Flash.FlashData.Begin_Warning[Addr - 195] = Value;
|
|
Usr_Flash.Write();
|
|
} break;
|
|
|
|
/* 预留 IDS */
|
|
case 202 ... 212:
|
|
{
|
|
Usr_Flash.FlashData.IDS[Addr - 202] = Value;
|
|
Usr_Flash.Write();
|
|
} break;
|
|
|
|
/* 预留 Over_Trigger */
|
|
case 213 ... 221:
|
|
{
|
|
Usr_Flash.FlashData.Over_Trigger[Addr - 213] = Value;
|
|
Usr_Flash.Write();
|
|
} break;
|
|
|
|
/* 预留 Equipment */
|
|
case 222 ... 226:
|
|
{
|
|
Usr_Flash.FlashData.Equipment[Addr - 222] = Value;
|
|
Usr_Flash.Write();
|
|
} break;
|
|
|
|
/* 预留 E9 */
|
|
case 227 ... 245:
|
|
{
|
|
Usr_Flash.FlashData.E9[Addr - 227] = Value;
|
|
Usr_Flash.Write();
|
|
} break;
|
|
|
|
/* 预留 Device_Type */
|
|
case 246:
|
|
{
|
|
Usr_Flash.FlashData.Device_Type = Value;
|
|
Usr_Flash.Write();
|
|
} break;
|
|
|
|
/* 预留 Sensor */
|
|
case 247:
|
|
{
|
|
Usr_Flash.FlashData.Sensor = Value;
|
|
Usr_Flash.Write();
|
|
} break;
|
|
|
|
/* 预留 Alarm_value */
|
|
case 248:
|
|
{
|
|
Usr_Flash.FlashData.Alarm_value = Value;
|
|
Usr_Flash.Write();
|
|
} break;
|
|
|
|
/* 预留 Alarm_ubit */
|
|
case 249:
|
|
{
|
|
Usr_Flash.FlashData.Alarm_ubit = Value;
|
|
Usr_Flash.Write();
|
|
} break;
|
|
|
|
/* 预留 Start_Time */
|
|
case 250 ... 260:
|
|
{
|
|
Usr_Flash.FlashData.Start_Time[Addr - 250] = Value;
|
|
Usr_Flash.Write();
|
|
} break;
|
|
|
|
/* 预留 Alarm_Time */
|
|
case 261 ... 266:
|
|
{
|
|
Usr_Flash.FlashData.Alarm_Time[Addr - 261] = Value;
|
|
Usr_Flash.Write();
|
|
} break;
|
|
|
|
/* 预留 Alarm */
|
|
case 267 ... 272:
|
|
{
|
|
Usr_Flash.FlashData.Alarm[Addr - 267] = Value;
|
|
Usr_Flash.Write();
|
|
} break;
|
|
|
|
/* 预留 Data_ID2 */
|
|
case 273:
|
|
{
|
|
Usr_Flash.FlashData.Data_ID2 = Value;
|
|
Usr_Flash.Write();
|
|
} break;
|
|
|
|
/* 预留 Collection_event_ID2 */
|
|
case 274:
|
|
{
|
|
Usr_Flash.FlashData.Collection_event_ID2 = Value;
|
|
Usr_Flash.Write();
|
|
} break;
|
|
|
|
/* 预留 Report_ID2 */
|
|
case 275:
|
|
{
|
|
Usr_Flash.FlashData.Report_ID2 = Value;
|
|
Usr_Flash.Write();
|
|
} break;
|
|
|
|
/* 预留 Sub_Device_Type */
|
|
case 276 ... 277:
|
|
{
|
|
Usr_Flash.FlashData.Sub_Device_Type[Addr - 276] = Value;
|
|
Usr_Flash.Write();
|
|
} break;
|
|
|
|
/* 预留 Sub_Device_State */
|
|
case 278 ... 279:
|
|
{
|
|
Usr_Flash.FlashData.Sub_Device_State[Addr - 278] = Value;
|
|
Usr_Flash.Write();
|
|
} break;
|
|
|
|
/* 预留 State_Change_Time */
|
|
case 280 ... 281:
|
|
{
|
|
Usr_Flash.FlashData.State_Change_Time[Addr - 280] = Value;
|
|
Usr_Flash.Write();
|
|
} 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 ... 16:
|
|
{
|
|
Data = Usr_Flash.FlashData.SN[Addr - 12];
|
|
}break;
|
|
/*IP地址*/
|
|
case 17 ... 20:
|
|
{
|
|
Data = W5500.IP_Addr[Addr - 17];
|
|
}break;
|
|
/*端口号*/
|
|
case 21:
|
|
{
|
|
Data = W5500.W5500_Class[0].ConfigData.Port[0] << 8 | W5500.W5500_Class[0].ConfigData.Port[1];
|
|
}break;
|
|
/*子网掩码*/
|
|
case 22 ... 25:
|
|
{
|
|
Data = W5500.Sub_Mask[Addr - 22];
|
|
}break;
|
|
/*SECS2协议设备ID*/
|
|
case 26:
|
|
{
|
|
Data = HSMS.Flash_ConfigData.Device_Id;
|
|
}break;
|
|
|
|
/* 网关*/
|
|
case 27 ... 30:
|
|
{
|
|
Data = W5500.Gateway_IP[Addr - 27];
|
|
} break;
|
|
|
|
/* 设备 SN */
|
|
case 100 ... 107:
|
|
{
|
|
Data = Usr_Flash.FlashData.Device_SN[Addr - 100];
|
|
Data = ascii_u16_to_modbus_u16(Data);
|
|
} break;
|
|
|
|
/* 报警机台和位置 */
|
|
case 108 ... 115:
|
|
{
|
|
Data = Usr_Flash.FlashData.Device_Model[Addr - 108];
|
|
Data = ascii_u16_to_modbus_u16(Data);
|
|
} break;
|
|
|
|
/* 设备型号 */
|
|
case 116 ... 123:
|
|
{
|
|
Data = Usr_Flash.FlashData.Device_ID[Addr - 116];
|
|
Data = ascii_u16_to_modbus_u16(Data);
|
|
} break;
|
|
|
|
/* 机台软件版本号 */
|
|
case 124 ... 131:
|
|
{
|
|
Data = Usr_Flash.FlashData.Version[Addr - 124];
|
|
Data = ascii_u16_to_modbus_u16(Data);
|
|
} break;
|
|
|
|
/* 厂商名称 */
|
|
case 132 ... 139:
|
|
{
|
|
Data = Usr_Flash.FlashData.Manufacturer[Addr - 132];
|
|
Data = ascii_u16_to_modbus_u16(Data);
|
|
} break;
|
|
|
|
/* 机台名称 */
|
|
case 140 ... 147:
|
|
{
|
|
Data = Usr_Flash.FlashData.Station_Name[Addr - 140];
|
|
Data = ascii_u16_to_modbus_u16(Data);
|
|
} break;
|
|
|
|
/* 腔体名称 */
|
|
case 148 ... 155:
|
|
{
|
|
Data = Usr_Flash.FlashData.Chamber_Name[Addr - 148];
|
|
Data = ascii_u16_to_modbus_u16(Data);
|
|
} break;
|
|
|
|
/* 机台类型 */
|
|
case 156 ... 163:
|
|
{
|
|
Data = Usr_Flash.FlashData.Station_Type[Addr - 156];
|
|
Data = ascii_u16_to_modbus_u16(Data);
|
|
} break;
|
|
|
|
/* 预留 Alarm_info */
|
|
case 164 ... 183:
|
|
{
|
|
Data = Usr_Flash.FlashData.Alarm_info[Addr - 164];
|
|
} break;
|
|
|
|
/* 预留 Data_ID1 */
|
|
case 184:
|
|
{
|
|
Data = Usr_Flash.FlashData.Data_ID1;
|
|
} break;
|
|
|
|
/* 预留 Collection_event_ID1 */
|
|
case 185:
|
|
{
|
|
Data = Usr_Flash.FlashData.Collection_event_ID1;
|
|
} break;
|
|
|
|
/* 预留 Report_ID1 */
|
|
case 186:
|
|
{
|
|
Data = Usr_Flash.FlashData.Report_ID1;
|
|
} break;
|
|
|
|
/* 预留 Alarm_ID */
|
|
case 187:
|
|
{
|
|
Data = Usr_Flash.FlashData.Alarm_ID;
|
|
} break;
|
|
|
|
/* 预留 Alarm_Type */
|
|
case 188 ... 194:
|
|
{
|
|
Data = Usr_Flash.FlashData.Alarm_Type[Addr - 188];
|
|
} break;
|
|
|
|
/* 预留 Begin_Warning */
|
|
case 195 ... 201:
|
|
{
|
|
Data = Usr_Flash.FlashData.Begin_Warning[Addr - 195];
|
|
} break;
|
|
|
|
/* 预留 IDS */
|
|
case 202 ... 212:
|
|
{
|
|
Data = Usr_Flash.FlashData.IDS[Addr - 202];
|
|
} break;
|
|
|
|
/* 预留 Over_Trigger */
|
|
case 213 ... 221:
|
|
{
|
|
Data = Usr_Flash.FlashData.Over_Trigger[Addr - 213];
|
|
} break;
|
|
|
|
/* 预留 Equipment */
|
|
case 222 ... 226:
|
|
{
|
|
Data = Usr_Flash.FlashData.Equipment[Addr - 222];
|
|
} break;
|
|
|
|
/* 预留 E9 */
|
|
case 227 ... 245:
|
|
{
|
|
Data = Usr_Flash.FlashData.E9[Addr - 227];
|
|
} break;
|
|
|
|
/* 预留 Device_Type */
|
|
case 246:
|
|
{
|
|
Data = Usr_Flash.FlashData.Device_Type;
|
|
} break;
|
|
|
|
/* 预留 Sensor */
|
|
case 247:
|
|
{
|
|
Data = Usr_Flash.FlashData.Sensor;
|
|
} break;
|
|
|
|
/* 预留 Alarm_value */
|
|
case 248:
|
|
{
|
|
Data = Usr_Flash.FlashData.Alarm_value;
|
|
} break;
|
|
|
|
/* 预留 Alarm_ubit */
|
|
case 249:
|
|
{
|
|
Data = Usr_Flash.FlashData.Alarm_ubit;
|
|
} break;
|
|
|
|
/* 预留 Start_Time */
|
|
case 250 ... 260:
|
|
{
|
|
Data = Usr_Flash.FlashData.Start_Time[Addr - 250];
|
|
} break;
|
|
|
|
/* 预留 Alarm_Time */
|
|
case 261 ... 266:
|
|
{
|
|
Data = Usr_Flash.FlashData.Alarm_Time[Addr - 261];
|
|
} break;
|
|
|
|
/* 预留 Alarm */
|
|
case 267 ... 272:
|
|
{
|
|
Data = Usr_Flash.FlashData.Alarm[Addr - 267];
|
|
} break;
|
|
|
|
/* 预留 Data_ID2 */
|
|
case 273:
|
|
{
|
|
Data = Usr_Flash.FlashData.Data_ID2;
|
|
} break;
|
|
|
|
/* 预留 Collection_event_ID2 */
|
|
case 274:
|
|
{
|
|
Data = Usr_Flash.FlashData.Collection_event_ID2;
|
|
} break;
|
|
|
|
/* 预留 Report_ID2 */
|
|
case 275:
|
|
{
|
|
Data = Usr_Flash.FlashData.Report_ID2;
|
|
} break;
|
|
|
|
/* 预留 Sub_Device_Type */
|
|
case 276 ... 277:
|
|
{
|
|
Data = Usr_Flash.FlashData.Sub_Device_Type[Addr - 276];
|
|
} break;
|
|
|
|
/* 预留 Sub_Device_State */
|
|
case 278 ... 279:
|
|
{
|
|
Data = Usr_Flash.FlashData.Sub_Device_State[Addr - 278];
|
|
} break;
|
|
|
|
/* 预留 State_Change_Time */
|
|
case 280 ... 281:
|
|
{
|
|
Data = Usr_Flash.FlashData.State_Change_Time[Addr - 280];
|
|
} break;
|
|
|
|
default:
|
|
Data = 0;
|
|
}
|
|
return Data;
|
|
}
|