MS-DTU/Anjiehui7_TTS_ST_V2.4_LOCAL/User/form.c

3982 lines
87 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 "includes.h"
#include "drv_dtu.h"
// 窗口ID
typedef enum
{
FORM_ID_START, // 启动界面
FORM_ID_METER, // 表盘显示
FORM_ID_PWD, // 输密码界面
FORM_ID_000, // 主菜单
FORM_ID_100, // PSN设置
FORM_ID_200, // 储罐信息设置
FORM_ID_210, // 储罐类型设置
FORM_ID_220, // 介质设置
FORM_ID_230, // 长度设置
FORM_ID_240, // 直径设置
FORM_ID_250, // 充装比设置
FORM_ID_251, // 低液位百分比设置
FORM_ID_260, // 密度设置
FORM_ID_270, // 压力报警低点设置
FORM_ID_271, // 压力报警高点设置
FORM_ID_280, // 容积显示
FORM_ID_285, // 4~20mA输出液位高度该功能无实际客户应用该项菜单改为选择4-20mA输出方式
FORM_ID_290, // Modbus通信地址设置
FORM_ID_300, // 上报周期设置
FORM_ID_310, // 采集周期设置
FORM_ID_320, // 发送周期设置
FORM_ID_400, // 标定界面
FORM_ID_410, // 电容标定
FORM_ID_411, // C1100pF标定
FORM_ID_412, // C2400pF标定
FORM_ID_413, // 零点标定
FORM_ID_420, // 压力标定
FORM_ID_421, // 低压力标定
FORM_ID_422, // 高压力标定
FORM_ID_430, // 温度标定
FORM_ID_431, // 低温度标定
FORM_ID_432, // 高温度标定
FORM_ID_500, // 量程设置
FORM_ID_510, // 电容量程
FORM_ID_511, // 底电容设置
FORM_ID_512, // 增长电容设置
FORM_ID_520, // 压力量程
FORM_ID_521, // 压力低量程设置
FORM_ID_522, // 压力高量程设置
FORM_ID_530, // 温度量程
FORM_ID_531, // 温度低量程设置
FORM_ID_532, // 温度高量程设置
FORM_ID_600, // 系统信息
FORM_ID_700, // 查看真空度
} TForm_Id;
void Change_Form(TForm_Id formId);
uint32_t Comm_Sample();
// 主界面参数
typedef struct
{
u8 blinkVisible; // 闪烁状态:亮或熄
u8 menuIdx[3]; // 各级菜单当前项
u8 privilege; // 操作权限0-查询1-设置参数2-标定
u8 meterPage; // 表盘显示页面测量页面、GPRS/GPS页面1、GPRS/GPS页面2、标定页面
u8 infoPage; // 信息显示页面:软件版本、硬件版本
u8 caliIdx; // 标定传感器路数
} TForm_Params;
TForm_Params formParam;
// 是否允许充装
volatile uint8_t Charge_Enabled = 0, last_Charge_Enabled = 0, Anti_Enabled = 1;
volatile uint32_t Charge_Pulse_Time = 0, Anti_Pulse_Time = 0;
// 是否允许报警
volatile uint8_t Alarm_Enabled = 1, Low_Alarm_Enabled = 1, Leak_Alarm_Enabled = 1;
volatile uint8_t Press_Alarm_Enabled = 1, Low_Press_Alarm_Enabled = 1, ExtPress_Alarm_Enabled = 1, Low_ExtPress_Alarm_Enabled = 1;
volatile uint8_t Alarm_Output = 0, Low_Alarm_Output = 0, Leak_Alarm_Output = 0;
volatile uint8_t Press_Alarm_Output = 0, Low_Press_Alarm_Output = 0, ExtPress_Alarm_Output = 0, Low_ExtPress_Alarm_Output = 0;
// 是否匹配槽车
volatile uint8_t Truck_Matched = 0, Truck_Charging = 0;
volatile uint8_t Match_Charging = 1; // 回持区间,未充满
// 充液泵控制
volatile uint32_t Pump_Stop_Time = 0;
volatile uint8_t Pump_Stop_posState = 0;
volatile uint32_t Pump_Stop_Longitude = 0, Pump_Stop_Latitude = 0;
// 手动启动充装
volatile uint8_t Manual_Charing = 0;
// 是否在测试界面
uint8_t MeterInSamplePage()
{
return (formParam.meterPage == 3);
}
// 检查当前显示单位是否合法,如不合法则移到最近的合法单位上, 不保存
void Check_L_Unit(u8 key)
{
while(((dcBuff.configBottle.dispMode == DISP_MODE_DPRESS || dcBuff.configBottle.dispMode == DISP_MODE_KG) && dcBuff.configDisplay.L_Unit == UNIT_L)
|| ((dcBuff.configBottle.dispMode == DISP_MODE_DPRESS || dcBuff.configBottle.dispMode == DISP_MODE_L) && dcBuff.configDisplay.L_Unit == UNIT_KG)
|| ((dcBuff.configDisplay.op_USE_CAPACITY_SENSOR || dcBuff.configDisplay.op_USE_HEIGHT_LEVEL || dcBuff.configDisplay.op_USE_PCT_LEVEL)
&& (dcBuff.configDisplay.L_Unit == UNIT_KPA || dcBuff.configDisplay.L_Unit == UNIT_MMH2O))
|| (dcBuff.configDisplay.op_DISP_MMWC_ONLY && dcBuff.configDisplay.L_Unit != UNIT_MMH2O)
)
{
if(key == KEY_UP)
{
if(dcBuff.configDisplay.L_Unit >= UNIT_MMH2O)
dcBuff.configDisplay.L_Unit = UNIT_KPA;
else
dcBuff.configDisplay.L_Unit++;
}
else
{
if(dcBuff.configDisplay.L_Unit <= UNIT_KPA)
dcBuff.configDisplay.L_Unit = UNIT_MMH2O;
else
dcBuff.configDisplay.L_Unit--;
}
}
}
// 显示容积百分比(指针)
void Meter_DispNeedle()
{
u8 needle;
if(dcBuff.sampleData.staDPress.notConnect)
{
Disp_WriteNeedle(0);
}
else if(dcBuff.sampleData.staDPress.underFlow)
{
Disp_WriteNeedle(0);
}
else if(dcBuff.sampleData.staDPress.overFlow)
{
Disp_WriteNeedle(0);
}
else
{
// 百分比10段显示
needle = (u8) ((dcBuff.sampleData.volumePct / 100 + 5) / 10);
Disp_WriteNeedle(needle);
}
}
// 显示差压数据
void Meter_DispDiffData()
{
s8 text[10];
float quotient = 0;
Disp_Fld1PointOff();
Disp_Fld1MultiOff();
if(dcBuff.sampleData.staDPress.notConnect)
{
Disp_Fld1Text("---");
}
else if(dcBuff.sampleData.staDPress.underFlow)
{
Disp_Fld1Text("-EE");
}
else if(dcBuff.sampleData.staDPress.overFlow)
{
Disp_Fld1Text("+EE");
}
else
{
if(dcBuff.sampleData.diff >= 10000)
{
// 显示x10不显示小数点
Disp_Fld1MultiOn();
quotient = dcBuff.sampleData.diff / 10;
sprintf(text, "%d", (uint16_t) quotient);
Disp_Fld1Text(text);
}
else if(dcBuff.sampleData.diff >= 1000) // 不显示小数
{
sprintf(text, "%d", (uint16_t) (dcBuff.sampleData.diff));
Disp_Fld1Text(text);
}
else if(dcBuff.sampleData.diff >= 100) // 显示1位小数
{
sprintf(text, "%d", (uint16_t) (dcBuff.sampleData.diff * 10));
Disp_Fld1Text(text);
Disp_Fld1PointOn(1);
}
else if(dcBuff.sampleData.diff >= 10) // 显示2位小数
{
sprintf(text, "%d", (uint16_t) (dcBuff.sampleData.diff * 100));
Disp_Fld1Text(text);
Disp_Fld1PointOn(2);
}
else // 显示3位小数
{
sprintf(text, "%04d", (uint16_t) (dcBuff.sampleData.diff * 1000));
Disp_Fld1Text(text);
Disp_Fld1PointOn(3);
}
}
}
// 显示液位数据
void Meter_DispLevelData()
{
s8 text[10];
float quotient = 0;
Disp_Fld1PointOff();
Disp_Fld1MultiOff();
if(dcBuff.sampleData.staDPress.notConnect)
{
Disp_Fld1Text("---");
}
else if(dcBuff.sampleData.staDPress.underFlow)
{
Disp_Fld1Text("-EE");
}
else if(dcBuff.sampleData.staDPress.overFlow)
{
Disp_Fld1Text("+EE");
}
else
{
if(dcBuff.sampleData.height >= 10000)
{
// 显示x10, 不显示小数点
Disp_Fld1MultiOn();
quotient = dcBuff.sampleData.height / 10;
sprintf(text, "%d", (uint16_t) quotient);
Disp_Fld1Text(text);
}
else // 不显示小数
{
sprintf(text, "%d", (uint16_t) (dcBuff.sampleData.height));
Disp_Fld1Text(text);
}
}
}
// 显示质量数据
void Meter_DispQualityData()
{
s8 text[10];
float quotient = 0;
Disp_Fld1PointOff();
Disp_Fld1MultiOff();
if(dcBuff.sampleData.staDPress.notConnect)
{
Disp_Fld1Text("---");
}
else if(dcBuff.sampleData.staDPress.underFlow)
{
Disp_Fld1Text("-EE");
}
else if(dcBuff.sampleData.staDPress.overFlow)
{
Disp_Fld1Text("+EE");
}
else
{
if(dcBuff.sampleData.weight >= 10000 * 1000)
{
// 显示x10不显示小数点
Disp_Fld1MultiOn();
quotient = ((float) dcBuff.sampleData.weight) / 1000 / 10;
sprintf(text, "%d", (uint16_t) quotient);
Disp_Fld1Text(text);
}
else if(dcBuff.sampleData.weight >= 1000 * 1000) // 不显示小数
{
sprintf(text, "%d", (uint16_t) (dcBuff.sampleData.weight / 1000));
Disp_Fld1Text(text);
}
else if(dcBuff.sampleData.weight >= 100 * 1000) // 显示1位小数
{
sprintf(text, "%d", (uint16_t) (dcBuff.sampleData.weight / 100));
Disp_Fld1Text(text);
Disp_Fld1PointOn(1);
}
else if(dcBuff.sampleData.weight >= 10 * 1000) // 显示2位小数
{
sprintf(text, "%d", (uint16_t) (dcBuff.sampleData.weight / 10));
Disp_Fld1Text(text);
Disp_Fld1PointOn(2);
}
else // 显示3位小数
{
sprintf(text, "%04d", (uint16_t) (dcBuff.sampleData.weight));
Disp_Fld1Text(text);
Disp_Fld1PointOn(3);
}
}
}
// 显示mmWC数据
void Meter_DispmmH2OData()
{
s8 text[10];
float mmH2O = KPa2mmH2O(dcBuff.sampleData.diff);
float quotient = 0;
Disp_Fld1PointOff();
Disp_Fld1MultiOff();
if(dcBuff.sampleData.staDPress.notConnect)
{
Disp_Fld1Text("---");
}
else if(dcBuff.sampleData.staDPress.underFlow)
{
Disp_Fld1Text("-EE");
}
else if(dcBuff.sampleData.staDPress.overFlow)
{
Disp_Fld1Text("+EE");
}
else
{
if(mmH2O >= 10000)
{
// 显示x10, 不显示小数点
Disp_Fld1MultiOn();
quotient = mmH2O / 10;
sprintf(text, "%d", (uint16_t) quotient);
Disp_Fld1Text(text);
}
else // 不显示小数
{
sprintf(text, "%d", (uint16_t) (mmH2O));
Disp_Fld1Text(text);
}
}
}
// 显示体积数据
void Meter_DispVolumeData()
{
s8 text[10];
float quotient = 0;
Disp_Fld1PointOff();
Disp_Fld1MultiOff();
if(dcBuff.sampleData.staDPress.notConnect)
{
Disp_Fld1Text("---");
}
else if(dcBuff.sampleData.staDPress.underFlow)
{
Disp_Fld1Text("-EE");
}
else if(dcBuff.sampleData.staDPress.overFlow)
{
Disp_Fld1Text("+EE");
}
else
{
if(dcBuff.sampleData.volume >= 10000 * 1000)
{
// 显示x10, 不显示小数点
Disp_Fld1MultiOn();
quotient = ((float) dcBuff.sampleData.volume) / 1000 / 10;
sprintf(text, "%d", (uint16_t) quotient);
Disp_Fld1Text(text);
}
else if(dcBuff.sampleData.volume >= 1000 * 1000) // 不显示小数点
{
sprintf(text, "%d", (uint16_t) (dcBuff.sampleData.volume / 1000));
Disp_Fld1Text(text);
}
else if(dcBuff.sampleData.volume >= 100 * 1000) // 显示1位小数
{
sprintf(text, "%d", (uint16_t) (dcBuff.sampleData.volume / 100));
Disp_Fld1Text(text);
Disp_Fld1PointOn(1);
}
else if(dcBuff.sampleData.volume >= 10 * 1000) // 显示2位小数
{
sprintf(text, "%d", (uint16_t) (dcBuff.sampleData.volume / 10));
Disp_Fld1Text(text);
Disp_Fld1PointOn(2);
}
else // 显示3位小数
{
sprintf(text, "%04d", (uint16_t) (dcBuff.sampleData.volume));
Disp_Fld1Text(text);
Disp_Fld1PointOn(3);
}
}
}
// 显示百分比数据
void Meter_DispPercentData()
{
s8 text[10];
Disp_Fld1PointOff();
Disp_Fld1MultiOff();
if(dcBuff.sampleData.staDPress.notConnect)
{
Disp_Fld1Text("---");
}
else if(dcBuff.sampleData.staDPress.underFlow)
{
Disp_Fld1Text("-EE");
}
else if(dcBuff.sampleData.staDPress.overFlow)
{
Disp_Fld1Text("+EE");
}
else if(dcBuff.sampleData.staDPress.full)
{
Disp_Fld1Text("FULL");
}
else
{
if(dcBuff.sampleData.volumePct >= 10000)
{
sprintf(text, "%d", (uint16_t) (dcBuff.sampleData.volumePct / 100));
Disp_Fld1Text(text);
}
else
{
sprintf(text, "%03d", (uint16_t) (dcBuff.sampleData.volumePct / 10));
// 至少要显示两位数字
if(text[0] == '0')
Disp_Fld1Text(text + 1);
else
Disp_Fld1Text(text);
Disp_Fld1PointOn(1);
}
}
}
// 显示压力数据
void Meter_DispPres1Data()
{
s8 text[10];
Disp_Fld3PointOff();
if(dcBuff.sampleData.staPress.notConnect)
{
Disp_Fld3Text("---");
}
else if(dcBuff.sampleData.staPress.underFlow)
{
Disp_Fld3Text("-EE");
}
else if(dcBuff.sampleData.staPress.overFlow)
{
Disp_Fld3Text("+EE");
}
else
{
sprintf(text, "%03d", (uint16_t) ((dcBuff.sampleData.pressure + 5) / 10));
Disp_Fld3Text(text);
Disp_Fld3PointOn(2);
}
}
void Meter_DispPres2Data()
{
s8 text[10];
Disp_Fld2PointOff();
if(dcBuff.sampleData.staExtPress[0].notConnect)
{
Disp_Fld2Text("---");
}
else if(dcBuff.sampleData.staExtPress[0].underFlow)
{
Disp_Fld2Text("-EE");
}
else if(dcBuff.sampleData.staExtPress[0].overFlow)
{
Disp_Fld2Text("+EE");
}
else
{
sprintf(text, "%03d", (uint16_t) ((dcBuff.sampleData.extPressure[0] + 5) / 10));
Disp_Fld2Text(text);
Disp_Fld2PointOn(2);
}
}
// 显示温度数据
void Meter_DispTemp1Data()
{
s8 text[10];
if(dcBuff.sampleData.staExtTempr[0].notConnect)
{
Disp_Fld2Text("---");
}
else if(dcBuff.sampleData.staExtTempr[0].underFlow)
{
Disp_Fld2Text("-EE");
}
else if(dcBuff.sampleData.staExtTempr[0].overFlow)
{
Disp_Fld2Text("+EE");
}
else
{
sprintf(text, "%d", dcBuff.sampleData.extTempr[0]);
Disp_Fld2Text(text);
}
}
// 显示温度数据
void Meter_DispTemp2Data()
{
s8 text[10];
if(dcBuff.sampleData.staExtTempr[1].notConnect)
{
Disp_Fld3Text("---");
}
else if(dcBuff.sampleData.staExtTempr[1].underFlow)
{
Disp_Fld3Text("-EE");
}
else if(dcBuff.sampleData.staExtTempr[1].overFlow)
{
Disp_Fld3Text("+EE");
}
else
{
sprintf(text, "%d", dcBuff.sampleData.extTempr[1]);
Disp_Fld3Text(text);
}
}
// 显示真空数据
void Meter_DispVacuData()
{
s8 text[10];
// 隐藏真空显示
if(dcBuff.configBottle.hideVacu)
return;
// 如无真空计则不显示
if(dcBuff.sampleData.vacuum[0].staVacuum == VACUUM_STATUS_COMM_FAULT)
return;
if(dcBuff.sampleData.vacuum[0].staVacuum == VACUUM_STATUS_FAULT || dcBuff.sampleData.vacuum[0].vacuum > 99.99999999)
Disp_Fld4Text("+EE");
else if(dcBuff.sampleData.vacuum[0].vacuum > 0.00999999)
{
if(dcBuff.sampleData.vacuum[0].vacuum > 9.99999999)
{
sprintf(text, "%03d", (uint16_t) (dcBuff.sampleData.vacuum[0].vacuum * 10));
// 至少要显示两位数字
if(text[0] == '0')
Disp_Fld4Text(text + 1);
else
Disp_Fld4Text(text);
Disp_Fld4PointOn(1);
}
else
{
sprintf(text, "%03d", (uint16_t) (dcBuff.sampleData.vacuum[0].vacuum * 100));
Disp_Fld4Text(text);
Disp_Fld4PointOn(2);
}
}
else
Disp_Fld4Text("-EE");
// 显示单位
Disp_Fld4UnitOn(UNIT_PTV_PA);
}
// 刷新状态信息gprs信号联网电池电量
void Meter_RefreshStatus()
{
Disp_WriteBattery((dcBuff.dtuData.batPct + 16) / 33);
Disp_WriteStrength((dcBuff.dtuData.rssi + 12) / 25);
Disp_WriteCommunication(!VCC_POWER_STATUS() && dcBuff.dtuData.batLow);
Disp_WriteAlarm(0);
Disp_WriteError(0);
if(!dcBuff.configDisplay.op_ANTI_NORM_OPEN)
Disp_WriteFill(Charge_Enabled || (Manual_Charing && Truck_Matched));
else
Disp_WriteFill(IS_NORM_OPEN_ENABLED());
Disp_WritePower(VCC_POWER_STATUS());
Disp_WriteGPS(dcBuff.dtuData.posState);
Disp_WriteRF(RF_initStatus);
}
void Meter_DispData()
{
if(!dcBuff.configDisplay.op_DISP_MMWC_ONLY)
{
Meter_DispNeedle();
if(dcBuff.configDisplay.L_Unit == UNIT_KPA)
Meter_DispDiffData();
else if(dcBuff.configDisplay.L_Unit == UNIT_KG)
Meter_DispQualityData();
else if(dcBuff.configDisplay.L_Unit == UNIT_L)
Meter_DispVolumeData();
else if(dcBuff.configDisplay.L_Unit == UNIT_MMH2O)
Meter_DispmmH2OData();
else
Meter_DispPercentData();
}
else
Meter_DispmmH2OData();
if(!dcBuff.configDisplay.op_LEVEL_SENSOR_ONLY)
{
Meter_DispVacuData();
if(dcBuff.sampleData.staPress.notConnect && !dcBuff.sampleData.staExtTempr[1].notConnect)
Meter_DispTemp2Data();
else
Meter_DispPres1Data();
if(dcBuff.sampleData.staExtTempr[0].notConnect && !dcBuff.sampleData.staExtPress[0].notConnect)
Meter_DispPres2Data();
else
Meter_DispTemp1Data();
}
}
void Meter_Disp()
{
s8 text[7] = "";
u8 i;
// 清屏
Disp_Clear();
Meter_RefreshStatus();
if(formParam.meterPage == 0)
{
if(!dcBuff.configDisplay.op_DISP_MMWC_ONLY)
Disp_SwitchSource(dcBuff.configBottle.source); // 显示液源
if(dcBuff.configDisplay.op_DISP_MMWC_ONLY)
Disp_SwitchDiffUnit(MODE_DIFF, UNIT_MMH2O); // 显示单位
else
Disp_SwitchDiffUnit(MODE_DIFF, dcBuff.configDisplay.L_Unit); // 显示单位
if(!dcBuff.configDisplay.op_LEVEL_SENSOR_ONLY)
{
Disp_Fld4UnitOff();
if(dcBuff.sampleData.staExtTempr[0].notConnect && !dcBuff.sampleData.staExtPress[0].notConnect)
Disp_Fld2UnitOn(UNIT_PT_MPA);
else
Disp_Fld2UnitOn(UNIT_PT_C);
if(dcBuff.sampleData.staPress.notConnect && !dcBuff.sampleData.staExtTempr[1].notConnect)
Disp_Fld3UnitOn(UNIT_PT_C);
else
Disp_Fld3UnitOn(UNIT_PT_MPA);
}
Meter_DispData();
if(Charge_Enabled)
Disp_Fld4Text("FIL");
else if(!dcBuff.configDisplay.op_SEND_GPS_DATA && !dcBuff.configDisplay.op_BOX_VER
&& Truck_Matched && Truck_Charging)
{
Disp_Fld4Text("FIL");
}
}
else if(formParam.meterPage == 1)
{
// 发送成功次数
sprintf(text, "%d", dcBuff.powerInfo.gprsSuccCount % 10000);
// sprintf(text, "%d %d", Motion_Detected, Motion_Status);
Disp_Fld1Text(text);
// 定位时间
sprintf(text, "%02d%02d%02d", dcBuff.dtuData.sysTime.hour, dcBuff.dtuData.sysTime.minute,
dcBuff.dtuData.sysTime.second);
for(i = 0; i < 6; i++)
Disp_DispChar(4 + i, text[i]);
Disp_Fld2PointOn(1);
Disp_Fld3PointOn(2);
// 电池电压
sprintf(text, "%03d", dcBuff.dtuData.batVoltage / 10);
Disp_Fld4Text(text);
Disp_Fld4PointOn(2);
}
else if(formParam.meterPage == 2)
{
// GPRS错误代码
Disp_Fld1Text(dcBuff.powerInfo.gprsFailCode);
// sprintf(text, "%d", SYS_RSTSTS); // 复位原因;
// Disp_Fld1Text(text);
// 定位日期
sprintf(text, "%02d%02d%02d", dcBuff.dtuData.sysTime.year, dcBuff.dtuData.sysTime.month,
dcBuff.dtuData.sysTime.day);
for(i = 0; i < 6; i++)
Disp_DispChar(4 + i, text[i]);
Disp_Fld2PointOn(1);
Disp_Fld3PointOn(2);
// 发送失败次数
sprintf(text, "%d", (dcBuff.powerInfo.gprsSendCount - dcBuff.powerInfo.gprsSuccCount) % 1000);
Disp_Fld4Text(text);
}
else // 显示测量值
{
// 显示KPa
Disp_SwitchDiffUnit(MODE_DIFF, UNIT_KPA);
Meter_DispDiffData();
// 显示温度和压力
if(dcBuff.sampleData.staExtTempr[0].notConnect && !dcBuff.sampleData.staExtPress[0].notConnect)
{
Disp_Fld2UnitOn(UNIT_PT_MPA);
Meter_DispPres2Data();
}
else
{
Disp_Fld2UnitOn(UNIT_PT_C);
Meter_DispTemp1Data();
}
if(dcBuff.sampleData.staPress.notConnect && !dcBuff.sampleData.staExtTempr[1].notConnect)
{
Disp_Fld3UnitOn(UNIT_PT_C);
Meter_DispTemp2Data();
}
else
{
Disp_Fld3UnitOn(UNIT_PT_MPA);
Meter_DispPres1Data();
}
// 提示测试界面
Disp_WriteAlarm(1);
Disp_WriteError(1);
Disp_WriteFill(0);
}
}
void Meter_Write_Bat_Volt(float volt)
{
}
// ********************************************
// 以下为窗口界面实现
// ********************************************
// 查询菜单
const char menu_000_items[][5] =
{
"PSN", "PARA", "PERI", "CALI", "RANG", "INFO",
};
// 设置菜单
const char menu_001_items[][5] =
{
"PARA",
};
// 标定菜单
const char menu_002_items[][5] =
{
"PSN", "PERI", "CALI", "RANG",
};
// 储罐信息菜单
const char menu_200_items[][12][5] =
{
{"TYPE", "SRC", "LEN", "DIE", "PCT", "LPCT", "DENS", "ALAR", "ALAH", "VOL", "4-20", "ADDR"},
{"TYPE", "SRC", "LEN", "DIE", "PCT", "LPCT", "DENS", "VOL", "4-20", "ADDR"}
};
// 储罐类型选项
const char menu_210_items[][5] =
{
"STAN", "LIE", "BALL"
};
// 介质选项
const char menu_220_items[][5] =
{
"LNG", "O2", "N2", "AR", "CO2", "H2", "CNG", "HE", "C2H4", "LPG", "NH3", "PENT", "POPO"
};
// 4-20mA输出方式选项
const char menu_285_items[][5] =
{
"RANG", "PCT"
};
// 上报周期菜单
const char menu_300_items[][5] =
{
"CAPT", "SEND"
};
// 标定菜单
const char menu_400_items[][5][5] =
{
{"DIFF", "PRS1", "PRS2", "TEP1", "TEP2"},
//{"CAP", "PRS1", "PRS2", "TEP1", "TEP2"}
{"PRS1", "PRS2", "TEP1", "TEP2"}
};
// 电容标定菜单
const char menu_410_items[][3][5] =
{
{"LO", "HIGH", "OFFS"}, // 低点、高点、偏移(零点)
{"C1", "C2"}
};
// 压力标定菜单
const char menu_420_items[][5] =
{
"LO", "HIGH"
};
// 温度标定菜单
const char menu_430_items[][2][5] =
{
{"LO", "HIGH"},
{"CALT", "CALR"}
};
// 量程菜单
const char menu_500_items[][4][5] =
{
{"DIFF", "PRS1", "PRS2", "TEP1"},
{"CAP", "PRS1", "PRS2", "TEP1"}
};
// 电容量程菜单
const char menu_510_items[][2][5] =
{
{"LO", "HIGH"},
{"BASE", "REF"}
};
// 压力量程菜单
const char menu_520_items[][5] =
{
"LO", "HIGH"
};
// 温度量程菜单
const char menu_530_items[][5] =
{
"LO", "HIGH"
};
// 函数类型定义:事件
typedef void (*TEvent)(void);
typedef void (*TKeyEvent)(u8);
// 窗口控件结构
typedef struct
{
// 控件
TButton Button1; // 按钮:自动测量
TEditBox Edit2; // 编辑框:输入(与选择框二选一)
TSelectBox Select3; // 选择框:输入(与编辑框二选一)
TButton Button4; // 按钮YES
TButton Button5; // 按钮ESC
// 事件
TEvent OnButton1; // 按钮1回调函数
TEvent OnButton4; // 按钮4回调函数
TEvent OnButton5; // 按钮5回调函数
TEvent OnTimeOut; // 超时回调函数(自动返回主界面)
TEvent OnDrawOthers;// 绘制屏幕上除控件以外的其它文字或符号,直接调用底层函数实现
TKeyEvent OnKey; // 默认按键处理
// 属性
u8 cursorId; // 当前控件0-无1-Button12-Edit2, 3-Select34-Button4, 5-Button5
} TForm;
volatile u32 Form_timer = 0; // 最近动作时间,用于超时处理
volatile u16 Form_timeout = 4; // 超时时间
volatile u8 Form_timeouted = 0; // 是否已执行超时动作
// 窗口结构
TForm form;
void Form_ResetTimer()
{
S_RTC_TIME_DATA_T sRTC;
// 获取当前时间
RTC_GetDateAndTime(&sRTC);
// 计算自上次gps定位以来的时间
Form_timer = Calc_SecondsFromYear(INITIAL_YEAR, sRTC.u32Year, sRTC.u32Month, sRTC.u32Day,
sRTC.u32Hour, sRTC.u32Minute, sRTC.u32Second);
Form_timeouted = 0;
}
// 设置焦点控件
void Form_SetFocus()
{
if(form.cursorId == 1)
Button_SetFocus(&form.Button1);
else if(form.cursorId == 2)
EditBox_SetFocus(&form.Edit2);
else if(form.cursorId == 3)
SelectBox_SetFocus(&form.Select3);
else if(form.cursorId == 4)
Button_SetFocus(&form.Button4);
else if(form.cursorId == 5)
Button_SetFocus(&form.Button5);
else
Disp_ClearCursor();
}
// 切换到第一个控件
void Form_FocusFirst()
{
if(!form.Button1.hide)
form.cursorId = 1;
else if(!form.Edit2.hide)
form.cursorId = 2;
else if(!form.Select3.hide)
form.cursorId = 3;
else if(!form.Button4.hide)
form.cursorId = 4;
else if(!form.Button5.hide)
form.cursorId = 5;
else
form.cursorId = 0;
// 设置焦点控件
Form_SetFocus();
}
// 切换到下一个控件
void Form_FocusNext()
{
if(form.cursorId == 1)
{
if(!form.Edit2.hide)
form.cursorId = 2;
else if(!form.Select3.hide)
form.cursorId = 3;
else if(!form.Button4.hide)
form.cursorId = 4;
else if(!form.Button5.hide)
form.cursorId = 5;
}
else if(form.cursorId == 2)
{
if(!form.Select3.hide)
form.cursorId = 3;
else if(!form.Button4.hide)
form.cursorId = 4;
else if(!form.Button5.hide)
form.cursorId = 5;
else if(!form.Button1.hide)
form.cursorId = 1;
}
else if(form.cursorId == 3)
{
if(!form.Button4.hide)
form.cursorId = 4;
else if(!form.Button5.hide)
form.cursorId = 5;
else if(!form.Button1.hide)
form.cursorId = 1;
else if(!form.Edit2.hide)
form.cursorId = 2;
}
else if(form.cursorId == 4)
{
if(!form.Button5.hide)
form.cursorId = 5;
else if(!form.Button1.hide)
form.cursorId = 1;
else if(!form.Edit2.hide)
form.cursorId = 2;
else if(!form.Select3.hide)
form.cursorId = 3;
}
else if(form.cursorId == 5)
{
if(!form.Button1.hide)
form.cursorId = 1;
else if(!form.Edit2.hide)
form.cursorId = 2;
else if(!form.Select3.hide)
form.cursorId = 3;
else if(!form.Button4.hide)
form.cursorId = 4;
}
// 设置焦点控件
Form_SetFocus();
}
void Form_OnKey(u8 key)
{
if(form.cursorId == 1 && Button_OnKey(&form.Button1, key) != KEY_INVALID)
{
if(key == KEY_FUNC)
Form_FocusNext();
else if(key == KEY_SET && form.OnButton1 != NULL)
form.OnButton1();
return;
}
if(form.cursorId == 2 && EditBox_OnKey(&form.Edit2, key) != KEY_INVALID)
{
if(key == KEY_FUNC)
Form_FocusNext();
return;
}
if(form.cursorId == 3 && SelectBox_OnKey(&form.Select3, key) != KEY_INVALID)
{
if(key == KEY_FUNC)
Form_FocusNext();
return;
}
if(form.cursorId == 4 && Button_OnKey(&form.Button4, key) != KEY_INVALID)
{
if(key == KEY_FUNC)
Form_FocusNext();
else if(key == KEY_SET && form.OnButton4 != NULL)
form.OnButton4();
return;
}
if(form.cursorId == 5 && Button_OnKey(&form.Button5, key) != KEY_INVALID)
{
if(key == KEY_FUNC)
Form_FocusNext();
else if(key == KEY_SET && form.OnButton5 != NULL)
form.OnButton5();
return;
}
if(form.OnKey != NULL)
form.OnKey(key);
}
// 刷新控件
void Form_RefreshCtrls()
{
if(!form.Button1.hide)
Button_Refresh(&form.Button1);
if(!form.Edit2.hide)
EditBox_Refresh(&form.Edit2);
if(!form.Select3.hide)
SelectBox_Refresh(&form.Select3);
if(!form.Button4.hide)
Button_Refresh(&form.Button4);
if(!form.Button5.hide)
Button_Refresh(&form.Button5);
}
void Form_Refresh()
{
if(form.OnDrawOthers != NULL)
form.OnDrawOthers();
Form_RefreshCtrls();
// 实际写屏
HT1621_Refresh();
}
void Form_OnTimer()
{
S_RTC_TIME_DATA_T sRTC;
// 切换闪烁状态
formParam.blinkVisible = !formParam.blinkVisible;
Disp_SetBlinkVisible(formParam.blinkVisible);
// 处理超时
if(form.OnTimeOut != NULL && !Form_timeouted)
{
// 获取当前时间
RTC_GetDateAndTime(&sRTC);
// 计算自上次gps定位以来的时间
if(Calc_SecondsFromYear(INITIAL_YEAR, sRTC.u32Year, sRTC.u32Month, sRTC.u32Day,
sRTC.u32Hour, sRTC.u32Minute, sRTC.u32Second) >= Form_timer + Form_timeout)
{
Form_timeouted = 1;
form.OnTimeOut();
}
}
Form_Refresh();
}
// ********************************************
// 以下为各个功能界面函数
// ********************************************
// 默认超时查看30秒设置60秒标定120秒
#define OPERATE_TIMEOUT (formParam.privilege == 0 ? 30 : (formParam.privilege == 1 ? 60 : 120))
#define METER_DISP_TIMEOUT 4 // 正常界面4秒钟休眠
#define METER_TEST_TIMEOUT 60 // 测试界面1分钟休眠
// 超时:进入主界面
void Form_Return2Meter()
{
formParam.menuIdx[0] = 0;
formParam.menuIdx[1] = 0;
formParam.menuIdx[2] = 0;
formParam.meterPage = 0;
Change_Form(FORM_ID_METER);
}
// 启动界面进入,或功能界面返回到设置菜单
void Form_Return2_000()
{
formParam.menuIdx[1] = 0;
formParam.menuIdx[2] = 0;
Change_Form(FORM_ID_000);
}
// ********************************************
// 启动界面
// ********************************************
void Form_Start_OnDrawOthers()
{
char psn[20];
u8 i;
// 显示13位PSN号
sprintf(psn, "20%02d%02d%02d%02d%03d", dcBuff.configBottle.PSN[0], dcBuff.configBottle.PSN[1],
dcBuff.configBottle.PSN[2], dcBuff.configBottle.PSN[3],
(dcBuff.configBottle.PSN[4] << 8) | dcBuff.configBottle.PSN[5]);
for(i = 0; i < 13; i++)
Disp_DispChar(i, psn[i]);
}
// 无控件4秒超时
void Form_Start_Create()
{
memset(&form, 0, sizeof(form));
// 控件
Button_Hide(&form.Button1);
EditBox_Hide(&form.Edit2);
SelectBox_Hide(&form.Select3);
Button_Hide(&form.Button4);
Button_Hide(&form.Button5);
Form_timeout = 4; // 4秒超时
// 事件回调
form.OnDrawOthers = Form_Start_OnDrawOthers;
form.OnTimeOut = Form_Return2Meter;
}
// ********************************************
// 主界面
// ********************************************
void Form_Meter_OnDrawOthers()
{
// 显示表盘全部数据
Meter_Disp();
// 贴片厂测试软件打开
// Disp_WriteAlarm(1);
// Disp_WriteError(1);
// Disp_WriteFill(1);
// Disp_WritePower(1);
// Disp_WriteGPS(1);
// Disp_WriteRF(1);
}
// 主界面超时
void Form_Meter_OnTimeOut()
{
if(formParam.meterPage == 3)
{
formParam.meterPage = 0;
Form_timeout = METER_DISP_TIMEOUT;
// 刷新屏幕
xSemaphoreGive(Key_Semaphore);
}
// 允许休眠
LCD_Disabled = 1;
}
void Form_Meter_OnKey(u8 key)
{
// 按FUNC键进入查询或设置界面
if(key == KEY_FUNC)
{
formParam.privilege = 0;
Change_Form(FORM_ID_PWD);
}
// 防过充
else if(key == KEY_SET)
{
if(IS_ALARM_ON() && formParam.meterPage == 0)
{
// 手动关闭报警
KZ_ALARM_OFF();
if(dcBuff.configDisplay.op_ALARM_OUTPUT && Alarm_Output)
Alarm_Enabled = 0;
if(dcBuff.configDisplay.op_LOW_ALARM_OUTPUT && Low_Alarm_Output)
Low_Alarm_Enabled = 0;
if(dcBuff.configDisplay.op_LEAK_ALARM_OUTPUT && Leak_Alarm_Output)
Leak_Alarm_Enabled = 0;
if(dcBuff.configDisplay.op_PRESS_ALARM_OUTPUT && Press_Alarm_Output)
Press_Alarm_Enabled = 0;
if(dcBuff.configDisplay.op_LOW_PRESS_ALARM_OUTPUT && Low_Press_Alarm_Output)
Low_Press_Alarm_Enabled = 0;
if(dcBuff.powerInfo.hardVer.major == 232 && ExtPress_Alarm_Output)
ExtPress_Alarm_Enabled = 0;
if(dcBuff.powerInfo.hardVer.major == 232 && Low_ExtPress_Alarm_Output)
Low_ExtPress_Alarm_Enabled = 0;
Alarm_Output = 0;
Low_Alarm_Output = 0;
Leak_Alarm_Output = 0;
Press_Alarm_Output = 0;
Low_Press_Alarm_Output = 0;
ExtPress_Alarm_Output = 0;
Low_ExtPress_Alarm_Output = 0;
}
if(dcBuff.configDisplay.op_LOW_ALARM_OUTPUT && formParam.meterPage == 0)
{
// 手动关闭报警
if(Low_Alarm_Enabled && IS_ALARM_ON())
{
Low_Alarm_Enabled = 0;
KZ_ALARM_OFF();
}
}
if(dcBuff.configDisplay.op_LEAK_ALARM_OUTPUT && formParam.meterPage == 0)
{
// 手动关泄露报警
if(Leak_Alarm_Enabled && IS_ALARM_ON())
{
Leak_Alarm_Enabled = 0;
KZ_ALARM_OFF();
}
}
if(dcBuff.configDisplay.op_ANTI_OVERFILL && formParam.meterPage == 0)
{
// 手动开关充装
Charge_Enabled = !Charge_Enabled;
if(Charge_Enabled)
Wakeup_SetAlarm(1);
// 采集数据
Sample_Notify();
}
if(dcBuff.configDisplay.op_ANTI_NORM_OPEN && formParam.meterPage == 0)
{
// 手动断电,常开电磁阀打开
KZ_NORM_OPEN_ENABLE();
}
if(RF_initStatus && !dcBuff.configDisplay.op_SEND_GPS_DATA && !dcBuff.configDisplay.op_BOX_VER && formParam.meterPage == 0)
{
printf("********* Manual_Charing = 1 ****\r\n");
Manual_Charing = 1;
Wakeup_SetAlarm(1);
// 采集数据
Sample_Notify();
}
}
else if(key == KEY_DOWN)
{
if(formParam.meterPage >= 3)
formParam.meterPage = 0;
else
formParam.meterPage++;
if(formParam.meterPage == 3)
Form_timeout = METER_TEST_TIMEOUT;
else
Form_timeout = METER_DISP_TIMEOUT;
}
else if(key == KEY_UP)
{
if(formParam.meterPage == 0)
{
if(dcBuff.configDisplay.L_Unit >= UNIT_MMH2O)
dcBuff.configDisplay.L_Unit = UNIT_KPA;
else
dcBuff.configDisplay.L_Unit++;
// 保存
Config_SaveConfig();
// 检查合法性
Check_L_Unit(key);
}
else if((formParam.meterPage == 1 || formParam.meterPage == 2) && Key_Wakeup)
{
// 清除错误代码
strcpy(dcBuff.powerInfo.gprsFailCode, "");
dcBuff.powerInfo.gprsSuccCount = 0;
dcBuff.powerInfo.gprsSendCount = 0;
if(formParam.meterPage == 1)
{
// 强制上传
DTU_dataConn = 1;
}
else
{
// 强制连接维护平台
DTU_ldmsConn = 1;
// 强制定位
GPS_Located = 0;
GPS_Locate = 1;
}
// 并发送
DTU_semSync = 1;
}
}
}
// 无控件
void Form_Meter_Create()
{
memset(&form, 0, sizeof(form));
// 控件
Button_Hide(&form.Button1);
EditBox_Hide(&form.Edit2);
SelectBox_Hide(&form.Select3);
Button_Hide(&form.Button4);
Button_Hide(&form.Button5);
Form_timeout = METER_DISP_TIMEOUT;
// 事件回调
form.OnDrawOthers = Form_Meter_OnDrawOthers;
form.OnTimeOut = Form_Meter_OnTimeOut;
form.OnKey = Form_Meter_OnKey;
}
// ********************************************
// 输密码界面
// ********************************************
// 确认按钮
void Form_Pwd_OnButton4()
{
// 不输入密码,进入查询界面
if(strcmp(form.Edit2.text, "oooo") == 0)
{
formParam.privilege = 0;
Form_Return2_000();
}
// 输入密码1设置储罐参数
else if(strcmp(form.Edit2.text, dcBuff.configDisplay.pwd1) == 0)
{
formParam.privilege = 1;
//Form_Return2_000();
Change_Form(FORM_ID_200); // 一级菜单只有一项,直接进入二级菜单(储罐参数设置)
}
// 输入密码2设置标定等参数
else if(strcmp(form.Edit2.text, dcBuff.configDisplay.pwd2) == 0)
{
formParam.privilege = 2;
Form_Return2_000();
}
// 输入密码3查看真空度
else if(strcmp(form.Edit2.text, "2323") == 0)
{
formParam.privilege = 0;
Change_Form(FORM_ID_700);
}
// 输入错误密码:返回主界面
else
Form_Return2Meter();
}
void Form_Pwd_Create()
{
memset(&form, 0, sizeof(form));
// 控件
Button_Hide(&form.Button1);
EditBox_Create(&form.Edit2, 0, 4, 4, "oooo");
SelectBox_Hide(&form.Select3);
Button_Create(&form.Button4, 4, 3, "YES");
Button_Create(&form.Button5, 7, 3, "ESC");
Form_timeout = OPERATE_TIMEOUT;
// 事件回调
form.OnButton4 = Form_Pwd_OnButton4;
form.OnButton5 = Form_Return2Meter;
form.OnTimeOut = Form_Return2Meter;
}
// ********************************************
// 设置菜单界面
// ********************************************
// 确认按钮
void Form_000_OnButton4()
{
// 保存选项序号
formParam.menuIdx[0] = form.Select3.idx;
if(formParam.privilege == 0)
{
switch(form.Select3.idx)
{
case 0: // 设置PSN
Change_Form(FORM_ID_100);
break;
case 1: // 设置储罐参数
Change_Form(FORM_ID_200);
break;
case 2: // 设置上报周期
Change_Form(FORM_ID_300);
break;
case 3: // 标定
if(!dcBuff.configDisplay.op_LEVEL_SENSOR_ONLY)
Change_Form(FORM_ID_400);
else
Change_Form(FORM_ID_410);
break;
case 4: // 量程
if(!dcBuff.configDisplay.op_LEVEL_SENSOR_ONLY)
Change_Form(FORM_ID_500);
else
Change_Form(FORM_ID_510);
break;
case 5: // 信息
Change_Form(FORM_ID_600);
break;
default:
break;
}
}
else if(formParam.privilege == 1) // 这个地方不会执行到,因为一级菜单只有一项,故直接进入二级菜单
{
switch(form.Select3.idx)
{
case 0: // 设置储罐参数
Change_Form(FORM_ID_200);
break;
default:
break;
}
}
else
{
switch(form.Select3.idx)
{
case 0: // 设置PSN
Change_Form(FORM_ID_100);
break;
case 1: // 设置上报周期
Change_Form(FORM_ID_300);
break;
case 2: // 标定
if(!dcBuff.configDisplay.op_LEVEL_SENSOR_ONLY)
Change_Form(FORM_ID_400);
else
Change_Form(FORM_ID_410);
break;
case 3: // 量程
if(!dcBuff.configDisplay.op_LEVEL_SENSOR_ONLY)
Change_Form(FORM_ID_500);
else
Change_Form(FORM_ID_510);
break;
default:
break;
}
}
}
void Form_000_Create()
{
memset(&form, 0, sizeof(form));
// 控件
Button_Hide(&form.Button1);
EditBox_Hide(&form.Edit2);
if(formParam.privilege == 0)
SelectBox_Create(&form.Select3, 0, 4, 6, menu_000_items, formParam.menuIdx[0]);
else if(formParam.privilege == 1)
SelectBox_Create(&form.Select3, 0, 4, 1, menu_001_items, formParam.menuIdx[0]);
else
SelectBox_Create(&form.Select3, 0, 4, 4, menu_002_items, formParam.menuIdx[0]);
Button_Create(&form.Button4, 4, 3, "YES");
Button_Create(&form.Button5, 7, 3, "ESC");
Form_timeout = OPERATE_TIMEOUT;
// 事件回调
form.OnButton4 = Form_000_OnButton4;
form.OnButton5 = Form_Return2Meter;
form.OnTimeOut = Form_Return2Meter;
}
// ********************************************
// 设置PSN界面
// ********************************************
// 确认按钮
void Form_100_OnButton4()
{
char psn[20];
u16 serial;
// 保存PSN
strcpy(psn, form.Edit2.text);
serial = atoi(psn + 10);
dcBuff.configBottle.PSN[5] = serial & 0xFF;
dcBuff.configBottle.PSN[4] = serial >> 8;
psn[10] = 0;
dcBuff.configBottle.PSN[3] = atoi(psn + 8);
psn[8] = 0;
dcBuff.configBottle.PSN[2] = atoi(psn + 6);
psn[6] = 0;
dcBuff.configBottle.PSN[1] = atoi(psn + 4);
psn[4] = 0;
dcBuff.configBottle.PSN[0] = atoi(psn + 2);
dcBuff.configBottle.updateFlag = 1; // 参数更新标志
// 保存
Config_SaveConfig();
// 返回上级菜单
Form_Return2_000();
}
void Form_100_Create()
{
char psn[20];
// 显示13位PSN号
sprintf(psn, "20%02d%02d%02d%02d%03d", dcBuff.configBottle.PSN[0], dcBuff.configBottle.PSN[1],
dcBuff.configBottle.PSN[2], dcBuff.configBottle.PSN[3],
(dcBuff.configBottle.PSN[4] << 8) | dcBuff.configBottle.PSN[5]);
memset(&form, 0, sizeof(form));
// 控件
Button_Hide(&form.Button1);
EditBox_Create(&form.Edit2, 0, 4, 13, psn);
SelectBox_Hide(&form.Select3);
if(formParam.privilege == 2)
Button_Create(&form.Button4, 4, 3, "YES");
else
{
Button_Hide(&form.Button4);
EditBox_ReadOnly(&form.Edit2);
}
Button_Create(&form.Button5, 7, 3, "ESC");
Form_timeout = OPERATE_TIMEOUT;
// 事件回调
form.OnButton4 = Form_100_OnButton4;
form.OnButton5 = Form_Return2_000;
form.OnTimeOut = Form_Return2Meter;
}
// ********************************************
// 储罐参数设置界面
// ********************************************
// 确认按钮
void Form_200_OnButton4()
{
// 保存选项序号
formParam.menuIdx[1] = form.Select3.idx;
switch(form.Select3.idx)
{
case 0: // 类型
Change_Form(FORM_ID_210);
break;
case 1: // 液源
Change_Form(FORM_ID_220);
break;
case 2: // 长度
Change_Form(FORM_ID_230);
break;
case 3: // 直径
Change_Form(FORM_ID_240);
break;
case 4: // 充装比
Change_Form(FORM_ID_250);
break;
case 5: // 低液位百分比
Change_Form(FORM_ID_251);
break;
case 6: // 密度
Change_Form(FORM_ID_260);
break;
case 7: // 压力报警低点
if(!dcBuff.configDisplay.op_LEVEL_SENSOR_ONLY)
Change_Form(FORM_ID_270);
else// 容积
Change_Form(FORM_ID_280);
break;
case 8: // 压力报警高点
if(!dcBuff.configDisplay.op_LEVEL_SENSOR_ONLY)
Change_Form(FORM_ID_271);
else // 4~20mA输出液位高度
Change_Form(FORM_ID_285);
break;
case 9: // 容积
if(!dcBuff.configDisplay.op_LEVEL_SENSOR_ONLY)
Change_Form(FORM_ID_280);
else // Modbus通信地址
Change_Form(FORM_ID_290);
break;
case 10:// 4~20mA输出液位高度
if(!dcBuff.configDisplay.op_LEVEL_SENSOR_ONLY)
Change_Form(FORM_ID_285);
break;
case 11: // Modbus通信地址
if(!dcBuff.configDisplay.op_LEVEL_SENSOR_ONLY)
Change_Form(FORM_ID_290);
break;
default:
break;
}
}
void Form_200_Create()
{
memset(&form, 0, sizeof(form));
// 控件
Button_Hide(&form.Button1);
EditBox_Hide(&form.Edit2);
SelectBox_Create(&form.Select3, 0, 4, dcBuff.configDisplay.op_LEVEL_SENSOR_ONLY ? 10 : 12,
menu_200_items[dcBuff.configDisplay.op_LEVEL_SENSOR_ONLY], formParam.menuIdx[1]);
Button_Create(&form.Button4, 4, 3, "YES");
Button_Create(&form.Button5, 7, 3, "ESC");
Form_timeout = OPERATE_TIMEOUT;
// 事件回调
form.OnButton4 = Form_200_OnButton4;
if(formParam.privilege == 0)
form.OnButton5 = Form_Return2_000;
else // 无一级菜单
form.OnButton5 = Form_Return2Meter;
form.OnTimeOut = Form_Return2Meter;
}
// 返回上级菜单
void Form_Return2_200()
{
formParam.menuIdx[2] = 0;
Change_Form(FORM_ID_200);
}
// ********************************************
// 储罐类型设置界面
// ********************************************
// 确认按钮
void Form_210_OnButton4()
{
// 保存类型
dcBuff.configBottle.type = form.Select3.idx;
dcBuff.configBottle.updateFlag = 1; // 参数更新标志
// 保存
Config_SaveConfig();
// 返回上级菜单
Form_Return2_200();
}
void Form_210_Create()
{
memset(&form, 0, sizeof(form));
// 控件
Button_Hide(&form.Button1);
EditBox_Hide(&form.Edit2);
SelectBox_Create(&form.Select3, 0, 4, 3, menu_210_items, dcBuff.configBottle.type);
if(formParam.privilege == 1)
Button_Create(&form.Button4, 4, 3, "YES");
else
{
Button_Hide(&form.Button4);
SelectBox_ReadOnly(&form.Select3);
}
Button_Create(&form.Button5, 7, 3, "ESC");
Form_timeout = OPERATE_TIMEOUT;
// 事件回调
form.OnButton4 = Form_210_OnButton4;
form.OnButton5 = Form_Return2_200;
form.OnTimeOut = Form_Return2Meter;
}
// ********************************************
// 液源设置界面
// ********************************************
// 确认按钮
void Form_220_OnButton4()
{
// 保存液源
dcBuff.configBottle.source = form.Select3.idx;
dcBuff.configBottle.updateFlag = 1; // 参数更新标志
// 保存
Config_SaveConfig();
// 返回上级菜单
Form_Return2_200();
}
void Form_220_Create()
{
memset(&form, 0, sizeof(form));
// 控件
Button_Hide(&form.Button1);
EditBox_Hide(&form.Edit2);
SelectBox_Create(&form.Select3, 0, 4, 13, menu_220_items, dcBuff.configBottle.source);
if(formParam.privilege == 1)
Button_Create(&form.Button4, 4, 3, "YES");
else
{
Button_Hide(&form.Button4);
SelectBox_ReadOnly(&form.Select3);
}
Button_Create(&form.Button5, 7, 3, "ESC");
Form_timeout = OPERATE_TIMEOUT;
// 事件回调
form.OnButton4 = Form_220_OnButton4;
form.OnButton5 = Form_Return2_200;
form.OnTimeOut = Form_Return2Meter;
}
// ********************************************
// 储罐长度设置界面
// ********************************************
// 确认按钮
void Form_230_OnButton4()
{
// 保存长度
dcBuff.configBottle.len = atoi(form.Edit2.text);
dcBuff.configBottle.updateFlag = 1; // 参数更新标志
// 保存
Config_SaveConfig();
// 返回上级菜单
Form_Return2_200();
}
void Form_230_Create()
{
char len[8];
sprintf(len, "%05d", dcBuff.configBottle.len);
memset(&form, 0, sizeof(form));
// 控件
Button_Hide(&form.Button1);
EditBox_Create(&form.Edit2, 0, 4, 5, len);
SelectBox_Hide(&form.Select3);
if(formParam.privilege == 1)
Button_Create(&form.Button4, 4, 3, "YES");
else
{
Button_Hide(&form.Button4);
EditBox_ReadOnly(&form.Edit2);
}
Button_Create(&form.Button5, 7, 3, "ESC");
Form_timeout = OPERATE_TIMEOUT;
// 事件回调
form.OnButton4 = Form_230_OnButton4;
form.OnButton5 = Form_Return2_200;
form.OnTimeOut = Form_Return2Meter;
}
// ********************************************
// 储罐直径设置界面
// ********************************************
// 确认按钮
void Form_240_OnButton4()
{
// 保存直径
dcBuff.configBottle.diameter = atoi(form.Edit2.text);
dcBuff.configBottle.updateFlag = 1; // 参数更新标志
// 保存
Config_SaveConfig();
// 返回上级菜单
Form_Return2_200();
}
void Form_240_Create()
{
char diameter[8];
sprintf(diameter, "%05d", dcBuff.configBottle.diameter);
memset(&form, 0, sizeof(form));
// 控件
Button_Hide(&form.Button1);
EditBox_Create(&form.Edit2, 0, 4, 5, diameter);
SelectBox_Hide(&form.Select3);
if(formParam.privilege == 1)
Button_Create(&form.Button4, 4, 3, "YES");
else
{
Button_Hide(&form.Button4);
EditBox_ReadOnly(&form.Edit2);
}
Button_Create(&form.Button5, 7, 3, "ESC");
Form_timeout = OPERATE_TIMEOUT;
// 事件回调
form.OnButton4 = Form_240_OnButton4;
form.OnButton5 = Form_Return2_200;
form.OnTimeOut = Form_Return2Meter;
}
// ********************************************
// 充装比设置界面
// ********************************************
// 确认按钮
void Form_250_OnButton4()
{
// 保存充装比
dcBuff.configBottle.fullPct = atoi(form.Edit2.text) * 100;
dcBuff.configBottle.updateFlag = 1; // 参数更新标志
// 保存
Config_SaveConfig();
// 返回上级菜单
Form_Return2_200();
}
void Form_250_Create()
{
char fullPct[8];
sprintf(fullPct, "%02d", dcBuff.configBottle.fullPct / 100);
memset(&form, 0, sizeof(form));
// 控件
Button_Hide(&form.Button1);
EditBox_Create(&form.Edit2, 1, 2, 2, fullPct);
SelectBox_Hide(&form.Select3);
if(formParam.privilege == 1)
Button_Create(&form.Button4, 4, 3, "YES");
else
{
Button_Hide(&form.Button4);
EditBox_ReadOnly(&form.Edit2);
}
Button_Create(&form.Button5, 7, 3, "ESC");
Form_timeout = OPERATE_TIMEOUT;
// 事件回调
form.OnButton4 = Form_250_OnButton4;
form.OnButton5 = Form_Return2_200;
form.OnTimeOut = Form_Return2Meter;
}
// ********************************************
// 低液位百分比设置界面
// ********************************************
// 确认按钮
void Form_251_OnButton4()
{
// 保存充装比
dcBuff.configBottle.emptyPct = atoi(form.Edit2.text) * 100;
dcBuff.configBottle.updateFlag = 1; // 参数更新标志
// 保存
Config_SaveConfig();
// 返回上级菜单
Form_Return2_200();
}
void Form_251_Create()
{
char emptyPct[8];
sprintf(emptyPct, "%02d", dcBuff.configBottle.emptyPct / 100);
memset(&form, 0, sizeof(form));
// 控件
Button_Hide(&form.Button1);
EditBox_Create(&form.Edit2, 1, 2, 2, emptyPct);
SelectBox_Hide(&form.Select3);
if(formParam.privilege == 1)
Button_Create(&form.Button4, 4, 3, "YES");
else
{
Button_Hide(&form.Button4);
EditBox_ReadOnly(&form.Edit2);
}
Button_Create(&form.Button5, 7, 3, "ESC");
Form_timeout = OPERATE_TIMEOUT;
// 事件回调
form.OnButton4 = Form_251_OnButton4;
form.OnButton5 = Form_Return2_200;
form.OnTimeOut = Form_Return2Meter;
}
// ********************************************
// 液体密度设置界面
// ********************************************
// 确认按钮
void Form_260_OnButton4()
{
// 保存密度
Config_SetDensity(dcBuff.configBottle.source, atoi(form.Edit2.text) * 0.001);
dcBuff.configBottle.updateFlag = 1; // 参数更新标志
// 保存
Config_SaveConfig();
// 返回上级菜单
Form_Return2_200();
}
void Form_260_Create()
{
char density[8];
sprintf(density, "%04d", (uint16_t) (Config_GetDensity(dcBuff.configBottle.source) * 1000));
memset(&form, 0, sizeof(form));
// 控件
Button_Hide(&form.Button1);
EditBox_Create(&form.Edit2, 0, 4, 4, density);
SelectBox_Hide(&form.Select3);
if(formParam.privilege == 1)
Button_Create(&form.Button4, 4, 3, "YES");
else
{
Button_Hide(&form.Button4);
EditBox_ReadOnly(&form.Edit2);
}
Button_Create(&form.Button5, 7, 3, "ESC");
Form_timeout = OPERATE_TIMEOUT;
// 事件回调
form.OnButton4 = Form_260_OnButton4;
form.OnButton5 = Form_Return2_200;
form.OnTimeOut = Form_Return2Meter;
}
// ********************************************
// 压力报警低点设置界面
// ********************************************
void Form_DispPoint2()
{
Disp_Fld1MultiOff();
Disp_Fld1PointOn(2);
}
void Form_DispPoint1()
{
Disp_Fld1MultiOff();
Disp_Fld1PointOn(1);
}
// 确认按钮
void Form_270_OnButton4()
{
// 保存报警参数
dcBuff.configBottle.warnPress = atoi(form.Edit2.text) * 10;
dcBuff.configBottle.updateFlag = 1; // 参数更新标志
// 保存
Config_SaveConfig();
// 返回上级菜单
Form_Return2_200();
}
void Form_270_Create()
{
char warnPress[8];
sprintf(warnPress, "%03d", dcBuff.configBottle.warnPress / 10);
memset(&form, 0, sizeof(form));
// 控件
Button_Hide(&form.Button1);
EditBox_Create(&form.Edit2, 1, 3, 3, warnPress);
SelectBox_Hide(&form.Select3);
if(formParam.privilege == 1)
Button_Create(&form.Button4, 4, 3, "YES");
else
{
Button_Hide(&form.Button4);
EditBox_ReadOnly(&form.Edit2);
}
Button_Create(&form.Button5, 7, 3, "ESC");
Form_timeout = OPERATE_TIMEOUT;
// 事件回调
form.OnDrawOthers = Form_DispPoint2;
form.OnButton4 = Form_270_OnButton4;
form.OnButton5 = Form_Return2_200;
form.OnTimeOut = Form_Return2Meter;
}
// ********************************************
// 压力报警高点设置界面
// ********************************************
// 确认按钮
void Form_271_OnButton4()
{
// 保存报警参数
dcBuff.configBottle.warnPressH = atoi(form.Edit2.text) * 10;
dcBuff.configBottle.updateFlag = 1; // 参数更新标志
// 保存
Config_SaveConfig();
// 返回上级菜单
Form_Return2_200();
}
void Form_271_Create()
{
char warnPressH[8];
sprintf(warnPressH, "%03d", dcBuff.configBottle.warnPressH / 10);
memset(&form, 0, sizeof(form));
// 控件
Button_Hide(&form.Button1);
EditBox_Create(&form.Edit2, 1, 3, 3, warnPressH);
SelectBox_Hide(&form.Select3);
if(formParam.privilege == 1)
Button_Create(&form.Button4, 4, 3, "YES");
else
{
Button_Hide(&form.Button4);
EditBox_ReadOnly(&form.Edit2);
}
Button_Create(&form.Button5, 7, 3, "ESC");
Form_timeout = OPERATE_TIMEOUT;
// 事件回调
form.OnDrawOthers = Form_DispPoint2;
form.OnButton4 = Form_271_OnButton4;
form.OnButton5 = Form_Return2_200;
form.OnTimeOut = Form_Return2Meter;
}
// ********************************************
// 储罐容积显示界面
// ********************************************
void Form_280_Create()
{
char volumeTotal[8];
Calculate_Theoretical_Params();
sprintf(volumeTotal, "%06d", Theoretical_Param.v);
memset(&form, 0, sizeof(form));
// 控件
Button_Hide(&form.Button1);
EditBox_Create(&form.Edit2, 0, 4, 6, volumeTotal);
SelectBox_Hide(&form.Select3);
Button_Hide(&form.Button4);
EditBox_ReadOnly(&form.Edit2);
Button_Create(&form.Button5, 7, 3, "ESC");
Form_timeout = OPERATE_TIMEOUT;
// 事件回调
form.OnButton4 = Form_Return2_200;
form.OnButton5 = Form_Return2_200;
form.OnTimeOut = Form_Return2Meter;
}
#if 0
// ********************************************
// 4~20mA输出液位高度设置界面
// ********************************************
void Form_285_OnButton1()
{
// 自动采集差压值
if(Comm_Sample())
{
sprintf(form.Edit2.text, "%05d", (uint16_t) KPa2mmH2O(dcBuff.sampleData.diff));
form.cursorId = 4; // 光标到确认按钮
}
else
form.cursorId = 5; // 光标到返回按钮
Form_SetFocus();
}
// 确认按钮
void Form_285_OnButton4()
{
dcBuff.configSensor.levelOutMMWC = atoi(form.Edit2.text);
// 保存
Config_SaveConfig();
// 返回上级菜单
Form_Return2_200();
}
void Form_285_Create()
{
char mmWC[10];
sprintf(mmWC, "%05d", dcBuff.configSensor.levelOutMMWC);
memset(&form, 0, sizeof(form));
// 控件
EditBox_Create(&form.Edit2, 0, 4, 5, mmWC);
SelectBox_Hide(&form.Select3);
if(formParam.privilege == 1)
{
Button_Create(&form.Button1, 10, 3, "AUT");
Button_Create(&form.Button4, 4, 3, "YES");
}
else
{
Button_Hide(&form.Button1);
Button_Hide(&form.Button4);
EditBox_ReadOnly(&form.Edit2);
}
Button_Create(&form.Button5, 7, 3, "ESC");
Form_timeout = OPERATE_TIMEOUT;
// 事件回调
form.OnButton1 = Form_285_OnButton1;
form.OnButton4 = Form_285_OnButton4;
form.OnButton5 = Form_Return2_200;
form.OnTimeOut = Form_Return2Meter;
}
#else
// ********************************************
// 4~20mA输出液位输出方式设置界面
// ********************************************
// 确认按钮
void Form_285_OnButton4()
{
dcBuff.configDisplay.op_420MA_OUT_PCT = form.Select3.idx;
// 保存
Config_SaveConfig();
// 返回上级菜单
Form_Return2_200();
}
void Form_285_Create()
{
memset(&form, 0, sizeof(form));
// 控件
Button_Hide(&form.Button1);
EditBox_Hide(&form.Edit2);
SelectBox_Create(&form.Select3, 0, 4, 2, menu_285_items, dcBuff.configDisplay.op_420MA_OUT_PCT);
if(formParam.privilege == 1)
Button_Create(&form.Button4, 4, 3, "YES");
else
{
Button_Hide(&form.Button4);
SelectBox_ReadOnly(&form.Select3);
}
Button_Create(&form.Button5, 7, 3, "ESC");
Form_timeout = OPERATE_TIMEOUT;
// 事件回调
form.OnButton4 = Form_285_OnButton4;
form.OnButton5 = Form_Return2_200;
form.OnTimeOut = Form_Return2Meter;
}
#endif
// ********************************************
// Modbus通信地址设置界面
// ********************************************
// 确认按钮
void Form_290_OnButton4()
{
int16_t addr = atoi(form.Edit2.text);
if(addr < 1 || addr > 247)
{
form.cursorId = 2;
Form_SetFocus();
return;
}
dcBuff.configBottle.addr = addr;
// 保存
Config_SaveConfig();
// 返回上级菜单
Form_Return2_200();
}
void Form_290_Create()
{
char addr[10];
sprintf(addr, "%03d", dcBuff.configBottle.addr);
memset(&form, 0, sizeof(form));
// 控件
Button_Hide(&form.Button1);
EditBox_Create(&form.Edit2, 1, 3, 3, addr);
SelectBox_Hide(&form.Select3);
if(formParam.privilege == 1)
Button_Create(&form.Button4, 4, 3, "YES");
else
{
Button_Hide(&form.Button4);
EditBox_ReadOnly(&form.Edit2);
}
Button_Create(&form.Button5, 7, 3, "ESC");
Form_timeout = OPERATE_TIMEOUT;
// 事件回调
form.OnButton4 = Form_290_OnButton4;
form.OnButton5 = Form_Return2_200;
form.OnTimeOut = Form_Return2Meter;
}
// ********************************************
// 周期设置界面
// ********************************************
// 确认按钮
void Form_300_OnButton4()
{
// 保存选项序号
formParam.menuIdx[1] = form.Select3.idx;
switch(form.Select3.idx)
{
case 0: // 采集周期
Change_Form(FORM_ID_310);
break;
case 1: // 发送周期
Change_Form(FORM_ID_320);
break;
default:
break;
}
}
void Form_300_Create()
{
memset(&form, 0, sizeof(form));
// 控件
Button_Hide(&form.Button1);
EditBox_Hide(&form.Edit2);
SelectBox_Create(&form.Select3, 0, 4, 2, menu_300_items, formParam.menuIdx[1]);
Button_Create(&form.Button4, 4, 3, "YES");
Button_Create(&form.Button5, 7, 3, "ESC");
Form_timeout = OPERATE_TIMEOUT;
// 事件回调
form.OnButton4 = Form_300_OnButton4;
form.OnButton5 = Form_Return2_000;
form.OnTimeOut = Form_Return2Meter;
}
void Form_Return2_300()
{
formParam.menuIdx[2] = 0;
Change_Form(FORM_ID_300);
}
// ********************************************
// 采集周期设置界面
// ********************************************
// 确认按钮
void Form_310_OnButton4()
{
// 保存周期
dcBuff.configData.intervalSample = atoi(form.Edit2.text);
dcBuff.configBottle.updateFlag = 1; // 参数更新标志
// 保存
Config_SaveConfig();
// 返回上级菜单
Form_Return2_300();
}
void Form_310_Create()
{
char intervalSample[8];
sprintf(intervalSample, "%04d", dcBuff.configData.intervalSample);
memset(&form, 0, sizeof(form));
// 控件
Button_Hide(&form.Button1);
EditBox_Create(&form.Edit2, 0, 4, 4, intervalSample);
SelectBox_Hide(&form.Select3);
if(formParam.privilege == 2)
Button_Create(&form.Button4, 4, 3, "YES");
else
{
Button_Hide(&form.Button4);
EditBox_ReadOnly(&form.Edit2);
}
Button_Create(&form.Button5, 7, 3, "ESC");
Form_timeout = OPERATE_TIMEOUT;
// 事件回调
form.OnButton4 = Form_310_OnButton4;
form.OnButton5 = Form_Return2_300;
form.OnTimeOut = Form_Return2Meter;
}
// ********************************************
// 上报周期设置界面
// ********************************************
// 确认按钮
void Form_320_OnButton4()
{
// 保存周期
dcBuff.configData.intervalTrans = atoi(form.Edit2.text);
dcBuff.configBottle.updateFlag = 1; // 参数更新标志
// 保存
Config_SaveConfig();
// 返回上级菜单
Form_Return2_300();
}
void Form_320_Create()
{
char intervalTrans[8];
sprintf(intervalTrans, "%06d", dcBuff.configData.intervalTrans);
memset(&form, 0, sizeof(form));
// 控件
Button_Hide(&form.Button1);
EditBox_Create(&form.Edit2, 0, 4, 6, intervalTrans);
SelectBox_Hide(&form.Select3);
if(formParam.privilege == 2)
Button_Create(&form.Button4, 4, 3, "YES");
else
{
Button_Hide(&form.Button4);
EditBox_ReadOnly(&form.Edit2);
}
Button_Create(&form.Button5, 7, 3, "ESC");
Form_timeout = OPERATE_TIMEOUT;
// 事件回调
form.OnButton4 = Form_320_OnButton4;
form.OnButton5 = Form_Return2_300;
form.OnTimeOut = Form_Return2Meter;
}
// ********************************************
// 标定界面
// ********************************************
// 确认按钮
void Form_400_OnButton4()
{
// 保存选项序号
formParam.menuIdx[1] = form.Select3.idx;
switch(form.Select3.idx)
{
case 0:
if(!dcBuff.configDisplay.op_USE_CAPACITY_SENSOR) // 差压标定
Change_Form(FORM_ID_410);
else // 压力1标定
{
formParam.caliIdx = 0;
Change_Form(FORM_ID_420);
}
break;
case 1:
if(!dcBuff.configDisplay.op_USE_CAPACITY_SENSOR) // 压力1标定
{
formParam.caliIdx = 0;
Change_Form(FORM_ID_420);
}
else // 压力2标定
{
formParam.caliIdx = 1;
Change_Form(FORM_ID_420);
}
break;
case 2:
if(!dcBuff.configDisplay.op_USE_CAPACITY_SENSOR) // 压力2标定
{
formParam.caliIdx = 1;
Change_Form(FORM_ID_420);
}
else // 温度1标定
{
formParam.caliIdx = 0;
Change_Form(FORM_ID_430);
}
break;
case 3:
if(!dcBuff.configDisplay.op_USE_CAPACITY_SENSOR) // 温度1标定
{
formParam.caliIdx = 0;
Change_Form(FORM_ID_430);
}
else // 温度2标定
{
formParam.caliIdx = 1;
Change_Form(FORM_ID_430);
}
break;
case 4:
if(!dcBuff.configDisplay.op_USE_CAPACITY_SENSOR) // 温度2标定
{
formParam.caliIdx = 1;
Change_Form(FORM_ID_430);
}
break;
default:
break;
}
}
void Form_400_Create()
{
memset(&form, 0, sizeof(form));
// 控件
Button_Hide(&form.Button1);
EditBox_Hide(&form.Edit2);
// 3线制温度传感器无须标定(从v84开始不区分2线/3线制)
// SelectBox_Create(&form.Select3, 0, 4, dcBuff.configDisplay.op_PT100_3LINE ? 3 : 5, menu_400_items[dcBuff.configDisplay.op_USE_CAPACITY_SENSOR], formParam.menuIdx[1]);
SelectBox_Create(&form.Select3, 0, 4, dcBuff.configDisplay.op_USE_CAPACITY_SENSOR ? 4 : 5, menu_400_items[dcBuff.configDisplay.op_USE_CAPACITY_SENSOR], formParam.menuIdx[1]);
Button_Create(&form.Button4, 4, 3, "YES");
Button_Create(&form.Button5, 7, 3, "ESC");
Form_timeout = OPERATE_TIMEOUT;
// 事件回调
form.OnButton4 = Form_400_OnButton4;
form.OnButton5 = Form_Return2_000;
form.OnTimeOut = Form_Return2Meter;
}
// 返回按钮
void Form_Return2_400()
{
formParam.menuIdx[2] = 0;
Change_Form(FORM_ID_400);
}
// ********************************************
// 电容标定界面
// ********************************************
// 确认按钮
void Form_410_OnButton4()
{
// 保存选项序号
formParam.menuIdx[2] = form.Select3.idx;
switch(form.Select3.idx)
{
case 0: // C1电容标定
Change_Form(FORM_ID_411);
break;
case 1: // C2电容标定
Change_Form(FORM_ID_412);
break;
case 2: // 偏移(零点)标定
Change_Form(FORM_ID_413);
break;
default:
break;
}
}
void Form_410_Create()
{
memset(&form, 0, sizeof(form));
// 控件
Button_Hide(&form.Button1);
EditBox_Hide(&form.Edit2);
SelectBox_Create(&form.Select3, 0, 4, dcBuff.configDisplay.op_USE_CAPACITY_SENSOR ? 2 : 3,
menu_410_items[dcBuff.configDisplay.op_USE_CAPACITY_SENSOR], formParam.menuIdx[2]);
Button_Create(&form.Button4, 4, 3, "YES");
Button_Create(&form.Button5, 7, 3, "ESC");
Form_timeout = OPERATE_TIMEOUT;
// 事件回调
form.OnButton4 = Form_410_OnButton4;
if(!dcBuff.configDisplay.op_LEVEL_SENSOR_ONLY)
form.OnButton5 = Form_Return2_400;
else
form.OnButton5 = Form_Return2_000;
form.OnTimeOut = Form_Return2Meter;
}
// 返回按钮
void Form_Return2_410()
{
Change_Form(FORM_ID_410);
}
// ********************************************
// C1电容标定界面
// ********************************************
void Form_411_OnButton1()
{
// 自动采集电容AD值
if(Comm_Sample())
{
sprintf(form.Edit2.text, "%04d", dcBuff.sampleData.adDPress);
form.cursorId = 4; // 光标到确认按钮
}
else
form.cursorId = 5; // 光标到返回按钮
Form_SetFocus();
}
// 确认按钮
void Form_411_OnButton4()
{
// 保存C1
if(!dcBuff.configDisplay.op_USE_CAPACITY_SENSOR)
dcBuff.configSensor.sensorDPress.zeroValue = atoi(form.Edit2.text);
else
dcBuff.configSensor.sensorCap.c1ADC = atoi(form.Edit2.text);
// 保存
Config_SaveConfig();
// 返回上级菜单
Form_Return2_410();
}
void Form_411_Create()
{
char c1[10];
if(!dcBuff.configDisplay.op_USE_CAPACITY_SENSOR)
sprintf(c1, "%04d", dcBuff.configSensor.sensorDPress.zeroValue);
else
sprintf(c1, "%04d", dcBuff.configSensor.sensorCap.c1ADC);
memset(&form, 0, sizeof(form));
// 控件
EditBox_Create(&form.Edit2, 0, 4, 4, c1);
SelectBox_Hide(&form.Select3);
if(formParam.privilege == 2)
{
Button_Create(&form.Button1, 10, 3, "AUT");
Button_Create(&form.Button4, 4, 3, "YES");
}
else
{
Button_Hide(&form.Button1);
Button_Hide(&form.Button4);
EditBox_ReadOnly(&form.Edit2);
}
Button_Create(&form.Button5, 7, 3, "ESC");
Form_timeout = OPERATE_TIMEOUT;
// 事件回调
form.OnButton1 = Form_411_OnButton1;
form.OnButton4 = Form_411_OnButton4;
form.OnButton5 = Form_Return2_410;
form.OnTimeOut = Form_Return2Meter;
}
// ********************************************
// C2电容标定界面
// ********************************************
// 确认按钮
void Form_412_OnButton4()
{
// 保存C2
if(!dcBuff.configDisplay.op_USE_CAPACITY_SENSOR)
dcBuff.configSensor.sensorDPress.fullValue = atoi(form.Edit2.text);
else
dcBuff.configSensor.sensorCap.c2ADC = atoi(form.Edit2.text);
// 保存
Config_SaveConfig();
// 返回上级菜单
Form_Return2_410();
}
void Form_412_Create()
{
char c2[10];
if(!dcBuff.configDisplay.op_USE_CAPACITY_SENSOR)
sprintf(c2, "%04d", dcBuff.configSensor.sensorDPress.fullValue);
else
sprintf(c2, "%04d", dcBuff.configSensor.sensorCap.c2ADC);
memset(&form, 0, sizeof(form));
// 控件
EditBox_Create(&form.Edit2, 0, 4, 4, c2);
SelectBox_Hide(&form.Select3);
if(formParam.privilege == 2)
{
Button_Create(&form.Button1, 10, 3, "AUT");
Button_Create(&form.Button4, 4, 3, "YES");
}
else
{
Button_Hide(&form.Button1);
Button_Hide(&form.Button4);
EditBox_ReadOnly(&form.Edit2);
}
Button_Create(&form.Button5, 7, 3, "ESC");
Form_timeout = OPERATE_TIMEOUT;
// 事件回调
form.OnButton1 = Form_411_OnButton1;
form.OnButton4 = Form_412_OnButton4;
form.OnButton5 = Form_Return2_410;
form.OnTimeOut = Form_Return2Meter;
}
// ********************************************
// 偏移(零点)标定界面
// ********************************************
// 确认按钮
void Form_413_OnButton4()
{
int32_t range = dcBuff.configSensor.sensorDPress.fullValue - dcBuff.configSensor.sensorDPress.zeroValue;
dcBuff.configSensor.sensorDPress.zeroValue = atoi(form.Edit2.text);
dcBuff.configSensor.sensorDPress.fullValue = dcBuff.configSensor.sensorDPress.zeroValue + range;
// 保存
Config_SaveConfig();
// 返回上级菜单
Form_Return2_410();
}
void Form_413_Create()
{
char c1[10];
sprintf(c1, "%04d", dcBuff.configSensor.sensorDPress.zeroValue);
memset(&form, 0, sizeof(form));
// 控件
EditBox_Create(&form.Edit2, 0, 4, 4, c1);
SelectBox_Hide(&form.Select3);
if(formParam.privilege == 2)
{
Button_Create(&form.Button1, 10, 3, "AUT");
Button_Create(&form.Button4, 4, 3, "YES");
}
else
{
Button_Hide(&form.Button1);
Button_Hide(&form.Button4);
EditBox_ReadOnly(&form.Edit2);
}
Button_Create(&form.Button5, 7, 3, "ESC");
Form_timeout = OPERATE_TIMEOUT;
// 事件回调
form.OnButton1 = Form_411_OnButton1;
form.OnButton4 = Form_413_OnButton4;
form.OnButton5 = Form_Return2_410;
form.OnTimeOut = Form_Return2Meter;
}
// ********************************************
// 压力标定界面
// ********************************************
// 确认按钮
void Form_420_OnButton4()
{
// 保存选项序号
formParam.menuIdx[2] = form.Select3.idx;
switch(form.Select3.idx)
{
case 0: // 低压力标定
Change_Form(FORM_ID_421);
break;
case 1: // 高压力标定
Change_Form(FORM_ID_422);
break;
default:
break;
}
}
void Form_420_Create()
{
memset(&form, 0, sizeof(form));
// 控件
Button_Hide(&form.Button1);
EditBox_Hide(&form.Edit2);
SelectBox_Create(&form.Select3, 0, 4, 2, menu_420_items, formParam.menuIdx[2]);
Button_Create(&form.Button4, 4, 3, "YES");
Button_Create(&form.Button5, 7, 3, "ESC");
Form_timeout = OPERATE_TIMEOUT;
// 事件回调
form.OnButton4 = Form_420_OnButton4;
form.OnButton5 = Form_Return2_400;
form.OnTimeOut = Form_Return2Meter;
}
// 返回按钮
void Form_Return2_420()
{
Change_Form(FORM_ID_420);
}
// ********************************************
// 低压力标定界面
// ********************************************
void Form_421_OnButton1()
{
// 自动采集压力AD值
if(Comm_Sample())
{
if(formParam.caliIdx == 0)
sprintf(form.Edit2.text, "%04d", dcBuff.sampleData.adPress);
else
sprintf(form.Edit2.text, "%04d", dcBuff.sampleData.adExtPress[0]);
form.cursorId = 4; // 光标到确认按钮
}
else
form.cursorId = 5; // 光标到返回按钮
Form_SetFocus();
}
// 确认按钮
void Form_421_OnButton4()
{
// 保存低压力
if(formParam.caliIdx == 0)
dcBuff.configSensor.sensorPress.zeroValue = atoi(form.Edit2.text);
else
dcBuff.configSensor.sensorEPress[0].zeroValue = atoi(form.Edit2.text);
// 保存
Config_SaveConfig();
// 返回上级菜单
Form_Return2_420();
}
void Form_421_Create()
{
char press[10];
if(formParam.caliIdx == 0)
sprintf(press, "%04d", dcBuff.configSensor.sensorPress.zeroValue);
else
sprintf(press, "%04d", dcBuff.configSensor.sensorEPress[0].zeroValue);
memset(&form, 0, sizeof(form));
// 控件
EditBox_Create(&form.Edit2, 0, 4, 4, press);
SelectBox_Hide(&form.Select3);
if(formParam.privilege == 2)
{
Button_Create(&form.Button1, 10, 3, "AUT");
Button_Create(&form.Button4, 4, 3, "YES");
}
else
{
Button_Hide(&form.Button1);
Button_Hide(&form.Button4);
EditBox_ReadOnly(&form.Edit2);
}
Button_Create(&form.Button5, 7, 3, "ESC");
Form_timeout = OPERATE_TIMEOUT;
// 事件回调
form.OnButton1 = Form_421_OnButton1;
form.OnButton4 = Form_421_OnButton4;
form.OnButton5 = Form_Return2_420;
form.OnTimeOut = Form_Return2Meter;
}
// ********************************************
// 高压力标定界面
// ********************************************
// 确认按钮
void Form_422_OnButton4()
{
// 保存高压力
if(formParam.caliIdx == 0)
dcBuff.configSensor.sensorPress.fullValue = atoi(form.Edit2.text);
else
dcBuff.configSensor.sensorEPress[0].fullValue = atoi(form.Edit2.text);
// 保存
Config_SaveConfig();
// 返回上级菜单
Form_Return2_420();
}
void Form_422_Create()
{
char press[10];
if(formParam.caliIdx == 0)
sprintf(press, "%04d", dcBuff.configSensor.sensorPress.fullValue);
else
sprintf(press, "%04d", dcBuff.configSensor.sensorEPress[0].fullValue);
memset(&form, 0, sizeof(form));
// 控件
EditBox_Create(&form.Edit2, 0, 4, 4, press);
SelectBox_Hide(&form.Select3);
if(formParam.privilege == 2)
{
Button_Create(&form.Button1, 10, 3, "AUT");
Button_Create(&form.Button4, 4, 3, "YES");
}
else
{
Button_Hide(&form.Button1);
Button_Hide(&form.Button4);
EditBox_ReadOnly(&form.Edit2);
}
Button_Create(&form.Button5, 7, 3, "ESC");
Form_timeout = OPERATE_TIMEOUT;
// 事件回调
form.OnButton1 = Form_421_OnButton1;
form.OnButton4 = Form_422_OnButton4;
form.OnButton5 = Form_Return2_420;
form.OnTimeOut = Form_Return2Meter;
}
// ********************************************
// 温度标定界面
// ********************************************
// 确认按钮
void Form_430_OnButton4()
{
// 保存选项序号
formParam.menuIdx[2] = form.Select3.idx;
switch(form.Select3.idx)
{
case 0: // 低温标定
Change_Form(FORM_ID_431);
break;
case 1: // 高温标定
Change_Form(FORM_ID_432);
break;
default:
break;
}
}
void Form_430_Create()
{
memset(&form, 0, sizeof(form));
// 控件
Button_Hide(&form.Button1);
EditBox_Hide(&form.Edit2);
if(formParam.caliIdx == 0)
SelectBox_Create(&form.Select3, 0, 4, 2, menu_430_items[dcBuff.configDisplay.op_USE_PT100_SENSOR], formParam.menuIdx[2]);
else
SelectBox_Create(&form.Select3, 0, 4, 2, menu_430_items[1], formParam.menuIdx[2]);
Button_Create(&form.Button4, 4, 3, "YES");
Button_Create(&form.Button5, 7, 3, "ESC");
Form_timeout = OPERATE_TIMEOUT;
// 事件回调
form.OnButton4 = Form_430_OnButton4;
form.OnButton5 = Form_Return2_400;
form.OnTimeOut = Form_Return2Meter;
}
// 返回按钮
void Form_Return2_430()
{
Change_Form(FORM_ID_430);
}
// ********************************************
// 低温标定界面
// ********************************************
void Form_431_OnButton1()
{
// 自动采集温度AD值
if(Comm_Sample())
{
sprintf(form.Edit2.text, "%04d", dcBuff.sampleData.adExtTempr[formParam.caliIdx]);
form.cursorId = 4; // 光标到确认按钮
}
else
form.cursorId = 5; // 光标到返回按钮
Form_SetFocus();
}
// 确认按钮
void Form_431_OnButton4()
{
if(formParam.caliIdx == 0 && !dcBuff.configDisplay.op_USE_PT100_SENSOR)
// 保存低温度
dcBuff.configSensor.sensorMTempr[formParam.caliIdx].zeroValue = atoi(form.Edit2.text);
else
// 保存校准温度
dcBuff.configSensor.sensorPTempr[formParam.caliIdx].calibrateT = atoi(form.Edit2.text);
// 保存
Config_SaveConfig();
// 返回上级菜单
Form_Return2_430();
}
void Form_431_Create()
{
char tempr[10];
if(formParam.caliIdx == 0 && !dcBuff.configDisplay.op_USE_PT100_SENSOR)
sprintf(tempr, "%04d", dcBuff.configSensor.sensorMTempr[formParam.caliIdx].zeroValue);
else
sprintf(tempr, "%04d", dcBuff.configSensor.sensorPTempr[formParam.caliIdx].calibrateT);
memset(&form, 0, sizeof(form));
// 控件
EditBox_Create(&form.Edit2, 0, 4, 4, tempr);
SelectBox_Hide(&form.Select3);
if(formParam.privilege == 2)
{
if(formParam.caliIdx == 0 && !dcBuff.configDisplay.op_USE_PT100_SENSOR)
Button_Create(&form.Button1, 10, 3, "AUT");
else
Button_Hide(&form.Button1);
Button_Create(&form.Button4, 4, 3, "YES");
}
else
{
Button_Hide(&form.Button1);
Button_Hide(&form.Button4);
EditBox_ReadOnly(&form.Edit2);
}
Button_Create(&form.Button5, 7, 3, "ESC");
Form_timeout = OPERATE_TIMEOUT;
// 事件回调
if(formParam.caliIdx == 0 && !dcBuff.configDisplay.op_USE_PT100_SENSOR)
form.OnButton1 = Form_431_OnButton1;
else
form.OnDrawOthers = Form_DispPoint1;
form.OnButton4 = Form_431_OnButton4;
form.OnButton5 = Form_Return2_430;
form.OnTimeOut = Form_Return2Meter;
}
// ********************************************
// 高温标定界面
// ********************************************
void Form_432_OnButton1()
{
// 自动采集温度AD值
if(Comm_Sample())
{
if(formParam.caliIdx == 0 && !dcBuff.configDisplay.op_USE_PT100_SENSOR)
sprintf(form.Edit2.text, "%04d", dcBuff.sampleData.adExtTempr[formParam.caliIdx]);
else
{
if(dcBuff.configDisplay.op_DIFF_RESIST)
sprintf(form.Edit2.text, "%04d", (int16_t) dcBuff.sampleData.adExtTempr[formParam.caliIdx]); // 显示:Ω
else
sprintf(form.Edit2.text, "%04d", (int16_t) PT100_CalResit(dcBuff.sampleData.adExtTempr[formParam.caliIdx], 0)); // 显示:Ω
}
form.cursorId = 4; // 光标到确认按钮
}
else
form.cursorId = 5; // 光标到返回按钮
Form_SetFocus();
}
// 确认按钮
void Form_432_OnButton4()
{
if(formParam.caliIdx == 0 && !dcBuff.configDisplay.op_USE_PT100_SENSOR)
// 保存高温度
dcBuff.configSensor.sensorMTempr[formParam.caliIdx].fullValue = atoi(form.Edit2.text);
else
// 保存校准电阻
dcBuff.configSensor.sensorPTempr[formParam.caliIdx].calibrateR = atoi(form.Edit2.text) * 10; // 保存0.1Ω
// 保存
Config_SaveConfig();
// 返回上级菜单
Form_Return2_430();
}
void Form_432_Create()
{
char tempr[10];
if(formParam.caliIdx == 0 && !dcBuff.configDisplay.op_USE_PT100_SENSOR)
sprintf(tempr, "%04d", dcBuff.configSensor.sensorMTempr[formParam.caliIdx].fullValue);
else
sprintf(tempr, "%04d", dcBuff.configSensor.sensorPTempr[formParam.caliIdx].calibrateR / 10); // 显示:Ω
memset(&form, 0, sizeof(form));
// 控件
EditBox_Create(&form.Edit2, 0, 4, 4, tempr);
SelectBox_Hide(&form.Select3);
if(formParam.privilege == 2)
{
Button_Create(&form.Button1, 10, 3, "AUT");
Button_Create(&form.Button4, 4, 3, "YES");
}
else
{
Button_Hide(&form.Button1);
Button_Hide(&form.Button4);
EditBox_ReadOnly(&form.Edit2);
}
Button_Create(&form.Button5, 7, 3, "ESC");
Form_timeout = OPERATE_TIMEOUT;
// 事件回调
if(formParam.caliIdx == 0 && dcBuff.configDisplay.op_USE_PT100_SENSOR)
{
//form.OnDrawOthers = Form_DispPoint1; // 不显示小数点
}
form.OnButton1 = Form_432_OnButton1;
form.OnButton4 = Form_432_OnButton4;
form.OnButton5 = Form_Return2_430;
form.OnTimeOut = Form_Return2Meter;
}
// ********************************************
// 量程设置界面
// ********************************************
// 确认按钮
void Form_500_OnButton4()
{
// 保存选项序号
formParam.menuIdx[1] = form.Select3.idx;
switch(form.Select3.idx)
{
case 0: // 电容量程
Change_Form(FORM_ID_510);
break;
case 1: // 压力量程
case 2:
formParam.caliIdx = form.Select3.idx - 1;
Change_Form(FORM_ID_520);
break;
case 3: // 温度量程
formParam.caliIdx = form.Select3.idx - 3;
Change_Form(FORM_ID_530);
break;
default:
break;
}
}
void Form_500_Create()
{
memset(&form, 0, sizeof(form));
// 控件
Button_Hide(&form.Button1);
EditBox_Hide(&form.Edit2);
// PT100温度传感器不设置量程
SelectBox_Create(&form.Select3, 0, 4, dcBuff.configDisplay.op_USE_PT100_SENSOR ? 3 : 4, menu_500_items[dcBuff.configDisplay.op_USE_CAPACITY_SENSOR], formParam.menuIdx[1]);
Button_Create(&form.Button4, 4, 3, "YES");
Button_Create(&form.Button5, 7, 3, "ESC");
Form_timeout = OPERATE_TIMEOUT;
// 事件回调
form.OnButton4 = Form_500_OnButton4;
form.OnButton5 = Form_Return2_000;
form.OnTimeOut = Form_Return2Meter;
}
// 返回按钮
void Form_Return2_500()
{
formParam.menuIdx[2] = 0;
Change_Form(FORM_ID_500);
}
// ********************************************
// 电容设置界面
// ********************************************
// 确认按钮
void Form_510_OnButton4()
{
// 保存选项序号
formParam.menuIdx[2] = form.Select3.idx;
switch(form.Select3.idx)
{
case 0: // 底电容设置
Change_Form(FORM_ID_511);
break;
case 1: // 增长电容设置
Change_Form(FORM_ID_512);
break;
default:
break;
}
}
void Form_510_Create()
{
memset(&form, 0, sizeof(form));
// 控件
Button_Hide(&form.Button1);
EditBox_Hide(&form.Edit2);
SelectBox_Create(&form.Select3, 0, 4, 2, menu_510_items[dcBuff.configDisplay.op_USE_CAPACITY_SENSOR], formParam.menuIdx[2]);
Button_Create(&form.Button4, 4, 3, "YES");
Button_Create(&form.Button5, 7, 3, "ESC");
Form_timeout = OPERATE_TIMEOUT;
// 事件回调
form.OnButton4 = Form_510_OnButton4;
if(!dcBuff.configDisplay.op_LEVEL_SENSOR_ONLY)
form.OnButton5 = Form_Return2_500;
else
form.OnButton5 = Form_Return2_000;
form.OnTimeOut = Form_Return2Meter;
}
// 返回按钮
void Form_Return2_510()
{
Change_Form(FORM_ID_510);
}
// ********************************************
// 底电容设置界面
// ********************************************
void Form_511_OnButton1()
{
// 自动采集电容值
if(Comm_Sample())
{
sprintf(form.Edit2.text, "%04d", (int16_t) (dcBuff.sampleData.diff * 10));
form.cursorId = 4; // 光标到确认按钮
}
else
form.cursorId = 5; // 光标到返回按钮
Form_SetFocus();
}
// 确认按钮
void Form_511_OnButton4()
{
// 保存底电容
if(!dcBuff.configDisplay.op_USE_CAPACITY_SENSOR)
dcBuff.configSensor.sensorDPress.lowRange = atoi(form.Edit2.text);
else
dcBuff.configSensor.sensorCap.baseC = atoi(form.Edit2.text);
// 保存
Config_SaveConfig();
// 返回上级菜单
Form_Return2_510();
}
void Form_511_Create()
{
char baseC[10];
if(!dcBuff.configDisplay.op_USE_CAPACITY_SENSOR)
sprintf(baseC, "%04d", dcBuff.configSensor.sensorDPress.lowRange);
else
sprintf(baseC, "%04d", dcBuff.configSensor.sensorCap.baseC);
memset(&form, 0, sizeof(form));
// 控件
EditBox_Create(&form.Edit2, 0, 4, 4, baseC);
SelectBox_Hide(&form.Select3);
if(formParam.privilege == 2)
{
if(!dcBuff.configDisplay.op_USE_CAPACITY_SENSOR)
Button_Hide(&form.Button1);
else
Button_Create(&form.Button1, 10, 3, "AUT");
Button_Create(&form.Button4, 4, 3, "YES");
}
else
{
Button_Hide(&form.Button1);
Button_Hide(&form.Button4);
EditBox_ReadOnly(&form.Edit2);
}
Button_Create(&form.Button5, 7, 3, "ESC");
Form_timeout = OPERATE_TIMEOUT;
// 事件回调
form.OnButton1 = Form_511_OnButton1;
form.OnButton4 = Form_511_OnButton4;
form.OnButton5 = Form_Return2_510;
form.OnTimeOut = Form_Return2Meter;
if(dcBuff.configDisplay.op_USE_CAPACITY_SENSOR)
form.OnDrawOthers = Form_DispPoint1;
}
// ********************************************
// 增长电容设置界面
// ********************************************
void Form_512_OnButton1()
{
const float e = e_Src[dcBuff.configBottle.source];
uint32_t d = dcBuff.configBottle.diameter;
uint16_t refC;
if(dcBuff.configBottle.type == BOTTLE_TYPE_STAND)
d = dcBuff.configBottle.len + dcBuff.configBottle.lenExtra * 2 + dcBuff.configBottle.diameter / 2;
// 自动计算增长电容
refC = (uint16_t) (Adc_Sensor_Tables[0].k * (d - Adc_Sensor_Tables[0].nl_len) * (e - 1) * 10);
sprintf(form.Edit2.text, "%04d", refC);
form.cursorId = 4; // 光标到确认按钮
Form_SetFocus();
}
// 确认按钮
void Form_512_OnButton4()
{
// 保存底电容
if(!dcBuff.configDisplay.op_USE_CAPACITY_SENSOR)
dcBuff.configSensor.sensorDPress.highRangeX10 = atoi(form.Edit2.text);
else
dcBuff.configSensor.sensorCap.refC = atoi(form.Edit2.text);
// 保存
Config_SaveConfig();
// 返回上级菜单
Form_Return2_510();
}
void Form_512_Create()
{
char refC[10];
if(!dcBuff.configDisplay.op_USE_CAPACITY_SENSOR)
sprintf(refC, "%04d", dcBuff.configSensor.sensorDPress.highRangeX10);
else
sprintf(refC, "%04d", dcBuff.configSensor.sensorCap.refC);
memset(&form, 0, sizeof(form));
// 控件
EditBox_Create(&form.Edit2, 0, 4, 4, refC);
SelectBox_Hide(&form.Select3);
if(formParam.privilege == 2)
{
if(!dcBuff.configDisplay.op_USE_CAPACITY_SENSOR)
Button_Hide(&form.Button1);
else
Button_Create(&form.Button1, 10, 3, "AUT");
Button_Create(&form.Button4, 4, 3, "YES");
}
else
{
Button_Hide(&form.Button1);
Button_Hide(&form.Button4);
EditBox_ReadOnly(&form.Edit2);
}
Button_Create(&form.Button5, 7, 3, "ESC");
Form_timeout = OPERATE_TIMEOUT;
// 事件回调
form.OnButton1 = Form_512_OnButton1;
form.OnButton4 = Form_512_OnButton4;
form.OnButton5 = Form_Return2_510;
form.OnTimeOut = Form_Return2Meter;
if(dcBuff.configDisplay.op_USE_CAPACITY_SENSOR || dcBuff.configSensor.sensorDPress.ishighRangeX10)
form.OnDrawOthers = Form_DispPoint1;
}
// ********************************************
// 压力量程设置界面
// ********************************************
// 确认按钮
void Form_520_OnButton4()
{
// 保存选项序号
formParam.menuIdx[2] = form.Select3.idx;
switch(form.Select3.idx)
{
case 0: // 压力低量程设置
Change_Form(FORM_ID_521);
break;
case 1: // 压力高量程设置
Change_Form(FORM_ID_522);
break;
default:
break;
}
}
void Form_520_Create()
{
memset(&form, 0, sizeof(form));
// 控件
Button_Hide(&form.Button1);
EditBox_Hide(&form.Edit2);
SelectBox_Create(&form.Select3, 0, 4, 2, menu_520_items, formParam.menuIdx[2]);
Button_Create(&form.Button4, 4, 3, "YES");
Button_Create(&form.Button5, 7, 3, "ESC");
Form_timeout = OPERATE_TIMEOUT;
// 事件回调
form.OnButton4 = Form_520_OnButton4;
form.OnButton5 = Form_Return2_500;
form.OnTimeOut = Form_Return2Meter;
}
// 返回按钮
void Form_Return2_520()
{
Change_Form(FORM_ID_520);
}
// ********************************************
// 压力低量程设置界面
// ********************************************
// 确认按钮
void Form_521_OnButton4()
{
// 保存压力低量程
if(formParam.caliIdx == 0)
dcBuff.configSensor.sensorPress.lowRange = atoi(form.Edit2.text) * 10;
else
dcBuff.configSensor.sensorEPress[0].lowRange = atoi(form.Edit2.text) * 10;
// 保存
Config_SaveConfig();
// 返回上级菜单
Form_Return2_520();
}
void Form_521_Create()
{
char range[10];
if(formParam.caliIdx == 0)
sprintf(range, "%03d", dcBuff.configSensor.sensorPress.lowRange / 10);
else
sprintf(range, "%03d", dcBuff.configSensor.sensorEPress[0].lowRange / 10);
memset(&form, 0, sizeof(form));
// 控件
Button_Hide(&form.Button1);
EditBox_Create(&form.Edit2, 1, 3, 3, range);
SelectBox_Hide(&form.Select3);
if(formParam.privilege == 2)
Button_Create(&form.Button4, 4, 3, "YES");
else
{
Button_Hide(&form.Button4);
EditBox_ReadOnly(&form.Edit2);
}
Button_Create(&form.Button5, 7, 3, "ESC");
Form_timeout = OPERATE_TIMEOUT;
// 事件回调
form.OnDrawOthers = Form_DispPoint2;
form.OnButton4 = Form_521_OnButton4;
form.OnButton5 = Form_Return2_520;
form.OnTimeOut = Form_Return2Meter;
}
// ********************************************
// 压力高量程设置界面
// ********************************************
// 确认按钮
void Form_522_OnButton4()
{
// 保存压力高量程
if(formParam.caliIdx == 0)
dcBuff.configSensor.sensorPress.highRange = atoi(form.Edit2.text) * 10;
else
dcBuff.configSensor.sensorEPress[0].highRange = atoi(form.Edit2.text) * 10;
// 保存
Config_SaveConfig();
// 返回上级菜单
Form_Return2_520();
}
void Form_522_Create()
{
char range[10];
if(formParam.caliIdx == 0)
sprintf(range, "%03d", dcBuff.configSensor.sensorPress.highRange / 10);
else
sprintf(range, "%03d", dcBuff.configSensor.sensorEPress[0].highRange / 10);
memset(&form, 0, sizeof(form));
// 控件
Button_Hide(&form.Button1);
EditBox_Create(&form.Edit2, 1, 3, 3, range);
SelectBox_Hide(&form.Select3);
if(formParam.privilege == 2)
Button_Create(&form.Button4, 4, 3, "YES");
else
{
Button_Hide(&form.Button4);
EditBox_ReadOnly(&form.Edit2);
}
Button_Create(&form.Button5, 7, 3, "ESC");
Form_timeout = OPERATE_TIMEOUT;
// 事件回调
form.OnDrawOthers = Form_DispPoint2;
form.OnButton4 = Form_522_OnButton4;
form.OnButton5 = Form_Return2_520;
form.OnTimeOut = Form_Return2Meter;
}
// ********************************************
// 温度量程设置界面
// ********************************************
// 确认按钮
void Form_530_OnButton4()
{
// 保存选项序号
formParam.menuIdx[2] = form.Select3.idx;
switch(form.Select3.idx)
{
case 0: // 温度低量程设置
Change_Form(FORM_ID_531);
break;
case 1: // 温度高量程设置
Change_Form(FORM_ID_532);
break;
default:
break;
}
}
void Form_530_Create()
{
memset(&form, 0, sizeof(form));
// 控件
Button_Hide(&form.Button1);
EditBox_Hide(&form.Edit2);
SelectBox_Create(&form.Select3, 0, 4, 2, menu_530_items, formParam.menuIdx[2]);
Button_Create(&form.Button4, 4, 3, "YES");
Button_Create(&form.Button5, 7, 3, "ESC");
Form_timeout = OPERATE_TIMEOUT;
// 事件回调
form.OnButton4 = Form_530_OnButton4;
form.OnButton5 = Form_Return2_500;
form.OnTimeOut = Form_Return2Meter;
}
// 返回按钮
void Form_Return2_530()
{
Change_Form(FORM_ID_530);
}
// ********************************************
// 温度低量程设置界面
// ********************************************
void Form_531_OnDrawOthers()
{
Disp_DispChar(0, '-');
}
// 确认按钮
void Form_531_OnButton4()
{
// 保存温度低量程
dcBuff.configSensor.sensorMTempr[formParam.caliIdx].lowRange = -atoi(form.Edit2.text);
// 保存
Config_SaveConfig();
// 返回上级菜单
Form_Return2_530();
}
void Form_531_Create()
{
char range[10];
sprintf(range, "%03d", -dcBuff.configSensor.sensorMTempr[formParam.caliIdx].lowRange);
memset(&form, 0, sizeof(form));
// 控件
Button_Hide(&form.Button1);
EditBox_Create(&form.Edit2, 1, 3, 3, range);
SelectBox_Hide(&form.Select3);
if(formParam.privilege == 2)
Button_Create(&form.Button4, 4, 3, "YES");
else
{
Button_Hide(&form.Button4);
EditBox_ReadOnly(&form.Edit2);
}
Button_Create(&form.Button5, 7, 3, "ESC");
Form_timeout = OPERATE_TIMEOUT;
// 事件回调
form.OnDrawOthers = Form_531_OnDrawOthers;
form.OnButton4 = Form_531_OnButton4;
form.OnButton5 = Form_Return2_530;
form.OnTimeOut = Form_Return2Meter;
}
// ********************************************
// 温度高量程设置界面
// ********************************************
// 确认按钮
void Form_532_OnButton4()
{
// 保存温度高量程
dcBuff.configSensor.sensorMTempr[formParam.caliIdx].highRange = atoi(form.Edit2.text);
// 保存
Config_SaveConfig();
// 返回上级菜单
Form_Return2_530();
}
void Form_532_Create()
{
char range[10];
sprintf(range, "%03d", dcBuff.configSensor.sensorMTempr[formParam.caliIdx].highRange);
memset(&form, 0, sizeof(form));
// 控件
Button_Hide(&form.Button1);
EditBox_Create(&form.Edit2, 1, 3, 3, range);
SelectBox_Hide(&form.Select3);
if(formParam.privilege == 2)
Button_Create(&form.Button4, 4, 3, "YES");
else
{
Button_Hide(&form.Button4);
EditBox_ReadOnly(&form.Edit2);
}
Button_Create(&form.Button5, 7, 3, "ESC");
Form_timeout = OPERATE_TIMEOUT;
// 事件回调
form.OnButton4 = Form_532_OnButton4;
form.OnButton5 = Form_Return2_530;
form.OnTimeOut = Form_Return2Meter;
}
// ********************************************
// 系统信息界面
// ********************************************
void Form_600_OnDrawOthers()
{
char version[8];
if(formParam.infoPage == 0)
{
sprintf(version, "%02d%02d", dcBuff.displayInfo.softDate.month, dcBuff.displayInfo.softDate.day);
Disp_Fld1Text(version);
sprintf(version, "%3d", dcBuff.displayInfo.softVer.minor);
Disp_Fld2Text(version);
}
else
{
sprintf(version, "%4d", dcBuff.displayInfo.hardVer.major);
Disp_Fld1Text(version);
sprintf(version, "%3d", dcBuff.displayInfo.hardVer.minor);
Disp_Fld2Text(version);
}
}
// 确认按钮
void Form_600_OnButton5()
{
// 复位
VCC_GSM_OFF();
delay_ms(200);
NVIC_SystemReset();
}
void Form_600_OnKey(u8 key)
{
if(key == KEY_DOWN)
{
if(formParam.infoPage >= 1)
formParam.infoPage = 0;
else
formParam.infoPage++;
}
}
void Form_600_Create()
{
memset(&form, 0, sizeof(form));
// 默认显示软件版本
formParam.infoPage = 0;
// 控件
Button_Create(&form.Button1, 10, 3, "ESC");
EditBox_Hide(&form.Edit2);
SelectBox_Hide(&form.Select3);
Button_Hide(&form.Button4);
Button_Create(&form.Button5, 7, 3, "RST");
Form_timeout = OPERATE_TIMEOUT;
// 事件回调
form.OnDrawOthers = Form_600_OnDrawOthers;
form.OnButton1 = Form_Return2_000;
form.OnButton5 = Form_600_OnButton5;
form.OnTimeOut = Form_Return2Meter;
form.OnKey = Form_600_OnKey;
}
// ********************************************
// 查看真空度界面
// ********************************************
void Form_700_OnDrawOthers()
{
s8 text[10];
Disp_Fld1MultiOff();
// 如无真空计则不显示
if(dcBuff.sampleData.vacuum[0].staVacuum == VACUUM_STATUS_COMM_FAULT)
Disp_Fld1Text("---");
else if(dcBuff.sampleData.vacuum[0].staVacuum == VACUUM_STATUS_FAULT || dcBuff.sampleData.vacuum[0].vacuum > 99.99999999)
Disp_Fld1Text("+EE");
else if(dcBuff.sampleData.vacuum[0].vacuum > 0.00999999)
{
sprintf(text, "%04d", (uint16_t) (dcBuff.sampleData.vacuum[0].vacuum * 100));
// 至少要显示3位数字
if(text[0] == '0')
Disp_Fld1Text(text + 1);
else
Disp_Fld1Text(text);
Disp_Fld1PointOn(2);
}
else
Disp_Fld1Text("-EE");
// 提示真空度
Disp_Fld4Text("vac");
Disp_SwitchDiffUnit(MODE_VACU, UNIT_PTV_PA); // 显示单位
}
void Form_700_OnButton5()
{
while(Sample_Busy())
osDelay(1);
Config_Vacuum_Request = 1; // 强制测量真空度
Config_Sample_Request = 1;
// 采集数据
Sample_Notify();
while(Config_Sample_Request)
osDelay(1);
form.cursorId = 4; // 光标到返回按钮
Form_SetFocus();
}
void Form_700_Create()
{
memset(&form, 0, sizeof(form));
// 控件
Button_Hide(&form.Button1);
EditBox_Hide(&form.Edit2);
SelectBox_Hide(&form.Select3);
Button_Create(&form.Button4, 7, 3, "ESC");
Button_Create(&form.Button5, 4, 3, "AUT");
Form_timeout = OPERATE_TIMEOUT;
// 事件回调
form.OnDrawOthers = Form_700_OnDrawOthers;
form.OnButton4 = Form_Return2Meter;
form.OnButton5 = Form_700_OnButton5;
form.OnTimeOut = Form_Return2Meter;
}
// ********************************************
// 切换各个功能界面
// ********************************************
void Change_Form(TForm_Id formId)
{
// 清屏
Disp_Clear();
switch(formId)
{
case FORM_ID_START: // 启动界面
Form_Start_Create();
break;
case FORM_ID_METER: // 表盘显示
Form_Meter_Create();
break;
case FORM_ID_PWD: // 输入密码
Form_Pwd_Create();
break;
case FORM_ID_000: // 设置菜单
Form_000_Create();
break;
case FORM_ID_100: // PSN设置
Form_100_Create();
break;
case FORM_ID_200: // 储罐信息设置
Form_200_Create();
break;
case FORM_ID_210: // 储罐类型设置
Form_210_Create();
break;
case FORM_ID_220: // 介质设置
Form_220_Create();
break;
case FORM_ID_230: // 长度设置
Form_230_Create();
break;
case FORM_ID_240: // 直径设置
Form_240_Create();
break;
case FORM_ID_250: // 充装比设置
Form_250_Create();
break;
case FORM_ID_251: // 低液位百分比设置
Form_251_Create();
break;
case FORM_ID_260: // 密度设置
Form_260_Create();
break;
case FORM_ID_270: // 压力报警低点设置
Form_270_Create();
break;
case FORM_ID_271: // 压力报警高点设置
Form_271_Create();
break;
case FORM_ID_280: // 容积显示
Form_280_Create();
break;
case FORM_ID_285: // 4~20mA输出液位高度
Form_285_Create();
break;
case FORM_ID_290: // Modbus通信地址
Form_290_Create();
break;
case FORM_ID_300: // 上报周期设置
Form_300_Create();
break;
case FORM_ID_310: // 采集周期设置
Form_310_Create();
break;
case FORM_ID_320: // 发送周期设置
Form_320_Create();
break;
case FORM_ID_400: // 标定界面
Form_400_Create();
break;
case FORM_ID_410: // 电容标定
Form_410_Create();
break;
case FORM_ID_411: // C1100pF标定
Form_411_Create();
break;
case FORM_ID_412: // C2400pF标定
Form_412_Create();
break;
case FORM_ID_413: // 偏移(零点)标定
Form_413_Create();
break;
case FORM_ID_420: // 压力标定
Form_420_Create();
break;
case FORM_ID_421: // 低压力标定
Form_421_Create();
break;
case FORM_ID_422: // 高压力标定
Form_422_Create();
break;
case FORM_ID_430: // 温度标定
Form_430_Create();
break;
case FORM_ID_431: // 低温度标定
Form_431_Create();
break;
case FORM_ID_432: // 高温度标定
Form_432_Create();
break;
case FORM_ID_500: // 量程设置
Form_500_Create();
break;
case FORM_ID_510: // 电容量程
Form_510_Create();
break;
case FORM_ID_511: // 底电容设置
Form_511_Create();
break;
case FORM_ID_512: // 增长电容设置
Form_512_Create();
break;
case FORM_ID_520: // 压力量程
Form_520_Create();
break;
case FORM_ID_521: // 压力低量程设置
Form_521_Create();
break;
case FORM_ID_522: // 压力高量程设置
Form_522_Create();
break;
case FORM_ID_530: // 温度量程
Form_530_Create();
break;
case FORM_ID_531: // 温度低量程设置
Form_531_Create();
break;
case FORM_ID_532: // 温度高量程设置
Form_532_Create();
break;
case FORM_ID_600: // 系统信息
Form_600_Create();
break;
case FORM_ID_700: // 查看真空度
Form_700_Create();
break;
default:
break;
}
if(form.cursorId != 0)
{
// 指定控件设置焦点
Form_SetFocus();
}
else
{
// 第一个控件设置焦点
Form_FocusFirst();
}
// 重置超时计数
Form_ResetTimer();
}
void Form_Start()
{
// 初始化
memset(&formParam, 0, sizeof(formParam));
// 检查合法性
Check_L_Unit(KEY_UP);
// 启动界面
Change_Form(FORM_ID_START);
}
uint32_t Comm_Sample()
{
while(Sample_Busy())
osDelay(1);
Config_Sample_Request = 1;
// 采集数据
Sample_Notify();
while(Config_Sample_Request)
osDelay(1);
return TRUE;
}