917 lines
40 KiB
C
917 lines
40 KiB
C
#include "APPDEF.H"
|
||
#include "stdio.h"
|
||
#include "string.h"
|
||
#include "math.h"
|
||
uint8_t pageNum = 13;
|
||
extern void DataPrint(uint8_t *buf, uint8_t len);
|
||
extern uint8_t DataInbuf[60u];
|
||
extern osSemaphoreId semDataBack;
|
||
extern float Temperature;
|
||
//
|
||
|
||
struct Pset Set;
|
||
uint8_t DataLogValue[100]; // 当前数据记录
|
||
//
|
||
uint8_t MaxWeight;
|
||
uint8_t MaxTemp;
|
||
float Resolution;
|
||
float ResolutionWater;
|
||
|
||
float StartWeight = 0;
|
||
float StopWeight = 0;
|
||
float WaterPercent = 0.0f;
|
||
float WeightOld = 0.0f;
|
||
uint16_t CountNochange = 0;
|
||
uint16_t CountDelay = 0;
|
||
uint8_t SCount = 0;
|
||
uint16_t SRange = 100;
|
||
float DisData = 0;
|
||
uint8_t NameBuf[40];
|
||
uint8_t startTime[20];
|
||
bool Finisflag = false;
|
||
//
|
||
|
||
void FM24DataCRC()
|
||
{
|
||
FM24_Read(RW_Set, (uint8_t *)&Set, sizeof(Set));
|
||
FM24_Read(RW_Set, (uint8_t *)&Set, sizeof(Set));
|
||
FM24_Read(CalibrateWeight2Set, (uint8_t *)&CalibrateWeight2, sizeof(CalibrateWeight2));
|
||
if (CalibrateWeight2.WeightSlope < 0.0000001) {
|
||
CalibrateWeight2.WeightSlope = 0.0000001;
|
||
}
|
||
if ((CRCHead != Set.CRC_Head) || (CRCEnd != Set.CRC_Tail)) { // 如果EEPROM中的数据未初始化或异常,则重新写入默认值
|
||
Set.CRC_Head = CRCHead;
|
||
Set.AutoTimeStop = 60; // 60秒
|
||
Set.AutoWeightChange = 5; // 5mg
|
||
Set.TempSet = 105; // 105℃
|
||
Set.TimeStop = 5; // 5分钟
|
||
Set.AutoStyle = 0; // 停机方式 自动停机
|
||
Set.FastStyle = 0; // 干燥模式 快速
|
||
Set.FilterQ = 5; // 滤波器信任度
|
||
Set.SensorQ = 2; // 传感器信任度
|
||
Set.HoldTime = 5; // 稳定时间 5秒
|
||
Set.RuBianLiang = 6; // 蠕变量
|
||
Set.RuBianTime = 8; // 蠕变时间
|
||
Set.ZeroTrack = 0; // 零点跟踪
|
||
Set.TempDelta = 0; // 校准温度差
|
||
Set.WeightSet = 0; // 校准重量
|
||
Set.BaudRate = 9600; // 波特率
|
||
Set.SW0 = false; // 自定义开关1
|
||
Set.SW1 = false; // 自定义开关2
|
||
Set.SW2 = false; // 自定义开关3
|
||
Set.PercentChange = false; // 默认显示含水量
|
||
sprintf((char *)Set.Title, "测试结果"); // 标题
|
||
sprintf((char *)Set.TitleOne, "山东云唐智能科技有限公司"); // 标题1
|
||
sprintf((char *)Set.TitleTwo, ""); // 标题2
|
||
sprintf((char *)Set.TitleThree, ""); // 标题3
|
||
sprintf((char *)Set.UserName, "实验室"); // 用户名
|
||
sprintf((char *)Set.UserPwd, "123456"); // 密码
|
||
Set.CRC_Tail = CRCEnd;
|
||
// FM24_Write(RW_Set, (uint8_t *)&Set, sizeof(Set));
|
||
CalibrateWeight2.WeightSlope = 0.0000818f;
|
||
CalibrateWeight2.WeightZero = 745430;
|
||
// FM24_Write(CalibrateWeight2Set, (uint8_t *)&CalibrateWeight2, sizeof(CalibrateWeight2));
|
||
}
|
||
}
|
||
//bool t17Dis = false;
|
||
//uint16_t t17DisCount =0;
|
||
bool t18Dis = false;
|
||
uint16_t t18DisCount =0;
|
||
osSemaphoreId semDataChange;
|
||
void DataUnpack(const void *p_arg)
|
||
{
|
||
static uint8_t buf[150]__attribute__((at(0x20000000 + 0x1000)));
|
||
osSemaphoreDef(semDataChange);
|
||
semDataChange = osSemaphoreCreate(osSemaphore(semDataChange), 0);
|
||
uint8_t i, j;
|
||
for (;;) //
|
||
{
|
||
osSemaphoreWait(semDataBack, osWaitForever);
|
||
switch ((DataInbuf[1] << 8) | (DataInbuf[2])) // 页面控件ID
|
||
{
|
||
case 0x0002: // 开始按钮
|
||
if (weightChanging) {
|
||
sprintf((char *)buf, "play 1,3,0\xFF\xFF\xFF\0");
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
// sprintf((char *)buf, "t17.txt=\"传感器不稳定\"\xFF\xFF\xFF\0");
|
||
// DataPrint(buf, strlen((const char *)buf));
|
||
// t17Dis = true;
|
||
// t17DisCount =0;
|
||
break;
|
||
}
|
||
if (WeightData2 < 1) {
|
||
sprintf((char *)buf, "play 1,6,0\xFF\xFF\xFF\0");
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
// sprintf((char *)buf, "t17.txt=\"样品重量过轻\"\xFF\xFF\xFF\0");
|
||
// DataPrint(buf, strlen((const char *)buf));
|
||
// t17Dis = true;
|
||
// t17DisCount =0;
|
||
break;
|
||
}
|
||
if (WeightData2 > MaxWeight) {
|
||
sprintf((char *)buf, "play 1,7,0\xFF\xFF\xFF\0");
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
// sprintf((char *)buf, "t17.txt=\"样品重量过重\"\xFF\xFF\xFF\0");
|
||
// DataPrint(buf, strlen((const char *)buf));
|
||
// t17Dis = true;
|
||
// t17DisCount =0;
|
||
break;
|
||
}
|
||
if (SafeCheck())
|
||
{ // 请关闭加热仓
|
||
sprintf((char *)buf, "play 1,8,0\xFF\xFF\xFF\0");
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
// sprintf((char *)buf, "t17.txt=\"请关闭加热仓\"\xFF\xFF\xFF\0");
|
||
// DataPrint(buf, strlen((const char *)buf));
|
||
// t17Dis = true;
|
||
// t17DisCount =0;
|
||
break;
|
||
}
|
||
|
||
sprintf((char *)buf, "play 1,5,0\xFF\xFF\xFF\0");
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
osDelay(100);
|
||
pageNum = 1;
|
||
sprintf((char *)startTime, "%04d-%02d-%02d %02d:%02d", (DataInbuf[4] << 8 | DataInbuf[3]), DataInbuf[5], DataInbuf[6], DataInbuf[7], DataInbuf[8]);
|
||
for (i = 0; i < strlen((const char *)(&DataInbuf[9])) - 1; i++) {
|
||
NameBuf[i] = DataInbuf[i + 9];
|
||
}
|
||
break;
|
||
case 0x0016: // 定时停机时间
|
||
{
|
||
uint16_t TimeSt = DataInbuf[3] + (DataInbuf[4] << 8);
|
||
if (TimeSt == 0) {
|
||
Set.TimeStop = 1;
|
||
} else if (TimeSt > 99) {
|
||
Set.TimeStop = 99;
|
||
} else {
|
||
Set.TimeStop = TimeSt;
|
||
}
|
||
sprintf((char *)buf, "main.n0.val=%d\xFF\xFF\xFF\0", Set.TimeStop);
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
}
|
||
FM24_Write(RW_Set, (uint8_t *)&Set, sizeof(Set));
|
||
break;
|
||
case 0x0017: // 干燥温度
|
||
{
|
||
uint16_t TempSe = DataInbuf[3] + (DataInbuf[4] << 8);
|
||
if (TempSe < 40) {
|
||
Set.TempSet = 40;
|
||
} else if (TempSe > MaxTemp) {
|
||
Set.TempSet = MaxTemp;
|
||
} else {
|
||
Set.TempSet = TempSe;
|
||
}
|
||
sprintf((char *)buf, "main.n1.val=%d\xFF\xFF\xFF\0", Set.TempSet);
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
}
|
||
FM24_Write(RW_Set, (uint8_t *)&Set, sizeof(Set));
|
||
break;
|
||
case 0x0014: // 称重调零
|
||
i = 0;
|
||
osDelay(100);
|
||
sprintf((char *)buf, "tsw b1,0\xFF\xFF\xFF\0");
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
do {
|
||
i++;
|
||
if (fabs(CalibrateWeight2.WeightZero - ADvalue2filter) > 10) {
|
||
CalibrateWeight2.WeightZero = ADvalue2filter;
|
||
osDelay(600);
|
||
} else {
|
||
sprintf((char *)buf, "t18.txt=\"调零成功\"\xFF\xFF\xFF\0");
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
t18Dis = true;
|
||
t18DisCount =0;
|
||
break;
|
||
}
|
||
} while (i < 12);
|
||
if( i >= 12)
|
||
{
|
||
sprintf((char *)buf, "t18.txt=\"调零失败\"\xFF\xFF\xFF\0");
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
t18Dis = true;
|
||
t18DisCount =0;
|
||
}
|
||
sprintf((char *)buf, "tsw b1,1\xFF\xFF\xFF\0");
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
FM24_Write(CalibrateWeight2Set, (uint8_t *)&CalibrateWeight2, sizeof(CalibrateWeight2));
|
||
break;
|
||
case 0x0022: // 停机方式
|
||
Set.AutoStyle = DataInbuf[3];
|
||
FM24_Write(RW_Set, (uint8_t *)&Set, sizeof(Set));
|
||
break;
|
||
case 0x0023: // 干燥模式
|
||
Set.FastStyle = DataInbuf[3];
|
||
FM24_Write(RW_Set, (uint8_t *)&Set, sizeof(Set));
|
||
break;
|
||
case 0x0101: // 停止/返回按钮
|
||
if ((Set.AutoStyle == 1) && (!Finisflag)) {
|
||
Finisflag = true;
|
||
} else {
|
||
Finisflag = false;
|
||
pageNum = 0;
|
||
}
|
||
break;
|
||
case 0x0129: // 保存
|
||
sprintf((char *)buf, "DataDeal.DataLog.insert(\"%s^%s^%.3fg^%.3fg^%.2f%%^%.2f%%\")\xFF\xFF\xFF\0", NameBuf, startTime, StartWeight, StopWeight, WaterPercent, 100.0f - WaterPercent);
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
sprintf((char *)buf, "RunPage.t8.txt=\"保存成功!\"\xFF\xFF\xFF\0");
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
break;
|
||
case 0x012A: // 打印
|
||
sprintf((char *)buf, "/****************************/\r\n %s\r\n\0", Set.Title);
|
||
USART2Print(buf, strlen((const char *)buf));
|
||
if (Set.SW0) {
|
||
sprintf((char *)buf, " %s\r\n\0", Set.TitleOne);
|
||
USART2Print(buf, strlen((const char *)buf));
|
||
}
|
||
if (Set.SW1) {
|
||
sprintf((char *)buf, " %s\r\n\0", Set.TitleTwo);
|
||
USART2Print(buf, strlen((const char *)buf));
|
||
}
|
||
if (Set.SW2) {
|
||
sprintf((char *)buf, " %s\r\n\0", Set.TitleThree);
|
||
USART2Print(buf, strlen((const char *)buf));
|
||
}
|
||
sprintf((char *)buf, " 样品名:%s\r\n 测试时间:%s\r\n 起始重量:%.3fg\r\n 结束重量: %.3fg\r\n 含水量: %.2f%% \r\n 含固量: %.2f%%\r\n \0", NameBuf, startTime, StartWeight, StopWeight, WaterPercent, 100.0f - WaterPercent);
|
||
USART2Print(buf, strlen((const char *)buf));
|
||
sprintf((char *)buf, "/****************************/\r\n\r\n\r\n\r\n \0");
|
||
USART2Print(buf, strlen((const char *)buf));
|
||
break;
|
||
case 0x012B: // 查询
|
||
break;
|
||
case 0x012C://含固量含水量
|
||
Set.PercentChange = !Set.PercentChange;
|
||
FM24_Write(RW_Set, (uint8_t *)&Set, sizeof(Set));
|
||
break;
|
||
case 0x0201: // 称重设置
|
||
sprintf((char *)buf, "page WeightSet\xFF\xFF\xFF\0");
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
pageNum = 3;
|
||
sprintf((char *)buf, "WeightSet.cb5.val=%d\xFF\xFF\xFF\0", Set.FilterQ);
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
sprintf((char *)buf, "WeightSet.cb4.val=%d\xFF\xFF\xFF\0", Set.RuBianLiang);
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
sprintf((char *)buf, "WeightSet.cb3.val=%d\xFF\xFF\xFF\0", Set.SensorQ);
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
sprintf((char *)buf, "WeightSet.cb2.val=%d\xFF\xFF\xFF\0", Set.RuBianTime);
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
sprintf((char *)buf, "WeightSet.cb1.val=%d\xFF\xFF\xFF\0", Set.HoldTime);
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
sprintf((char *)buf, "WeightSet.cb0.val=%d\xFF\xFF\xFF\0", Set.ZeroTrack);
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
sprintf((char *)buf, "WeightSet.n0.val=%d\xFF\xFF\xFF\0", Set.AutoTimeStop);
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
sprintf((char *)buf, "WeightSet.n1.val=%d\xFF\xFF\xFF\0", Set.AutoWeightChange);
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
break;
|
||
case 0x0202: // 标定设置
|
||
pageNum = 4;
|
||
break;
|
||
case 0x0203: // 打印设置
|
||
pageNum = 5;
|
||
break;
|
||
case 0x0206: // 系统设置
|
||
pageNum = 8;
|
||
sprintf((char *)buf, "SysSet.t14.txt=\"%s\"\xFF\xFF\xFF\0", Set.UserName);
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
sprintf((char *)buf, "SysSet.t0.txt=\"\"\xFF\xFF\xFF\0");
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
break;
|
||
case 0x0207: // 返回
|
||
pageNum = 0;
|
||
break;
|
||
case 0x030C: // 滤波器信任度
|
||
Set.FilterQ = DataInbuf[3];
|
||
FM24_Write(RW_Set, (uint8_t *)&Set, sizeof(Set));
|
||
break;
|
||
case 0x030A: // 传感器信任度
|
||
Set.SensorQ = DataInbuf[3];
|
||
FM24_Write(RW_Set, (uint8_t *)&Set, sizeof(Set));
|
||
break;
|
||
case 0x0308: // 稳定时间
|
||
Set.HoldTime = DataInbuf[3];
|
||
FM24_Write(RW_Set, (uint8_t *)&Set, sizeof(Set));
|
||
break;
|
||
case 0x030B: // 蠕变量
|
||
Set.RuBianLiang = DataInbuf[3];
|
||
FM24_Write(RW_Set, (uint8_t *)&Set, sizeof(Set));
|
||
break;
|
||
case 0x0309: // 蠕变时间
|
||
Set.RuBianTime = DataInbuf[3];
|
||
FM24_Write(RW_Set, (uint8_t *)&Set, sizeof(Set));
|
||
break;
|
||
case 0x0307: // 零点跟踪
|
||
Set.ZeroTrack = DataInbuf[3];
|
||
FM24_Write(RW_Set, (uint8_t *)&Set, sizeof(Set));
|
||
break;
|
||
case 0x0301: // 自动停机时间
|
||
if(DataInbuf[3] <= 5)
|
||
{
|
||
Set.AutoTimeStop = 5;
|
||
}
|
||
else
|
||
if(DataInbuf[3] > 120)
|
||
{
|
||
Set.AutoTimeStop = 120;
|
||
}
|
||
else
|
||
{
|
||
Set.AutoTimeStop = DataInbuf[3];
|
||
}
|
||
FM24_Write(RW_Set, (uint8_t *)&Set, sizeof(Set));
|
||
break;
|
||
case 0x0302: // 自动停机重量
|
||
if(DataInbuf[3] <= 5)
|
||
{
|
||
Set.AutoWeightChange = 5;
|
||
}
|
||
else
|
||
if(DataInbuf[3] > 200)
|
||
{
|
||
Set.AutoWeightChange = 200;
|
||
}
|
||
else
|
||
{
|
||
Set.AutoWeightChange = DataInbuf[3];
|
||
}
|
||
FM24_Write(RW_Set, (uint8_t *)&Set, sizeof(Set));
|
||
break;
|
||
case 0x0310: // 返回
|
||
pageNum = 2;
|
||
break;
|
||
case 0x0401:
|
||
Set.TempDelta = (DataInbuf[3] + (DataInbuf[4] << 8)) / 10.0f - (Temperature - Set.TempDelta);
|
||
FM24_Write(RW_Set, (uint8_t *)&Set, sizeof(Set));
|
||
break;
|
||
case 0x0403:
|
||
CalibrateWeight2.WeightSlope = ((DataInbuf[3] + (DataInbuf[4] << 8) + (DataInbuf[5] << 16) + (DataInbuf[6] << 24)) / 10000.0f) / ((int32_t)ADvalue2filter - (int32_t)CalibrateWeight2.WeightZero);
|
||
FM24_Write(CalibrateWeight2Set, (uint8_t *)&CalibrateWeight2, sizeof(CalibrateWeight2));
|
||
break;
|
||
case 0x0406:
|
||
CalibrateWeight2.WeightZero = ADvalue2filter;
|
||
break;
|
||
case 0x040A: // 返回
|
||
pageNum = 2;
|
||
break;
|
||
case 0x0501:
|
||
for (i = 0; i < strlen((const char *)(&DataInbuf[3])) - 1; i++) {
|
||
Set.Title[i] = DataInbuf[i + 3];
|
||
}
|
||
Set.Title[i] = '\0';
|
||
FM24_Write(RW_Set, (uint8_t *)&Set, sizeof(Set));
|
||
break;
|
||
case 0x0502:
|
||
for (i = 0; i < strlen((const char *)(&DataInbuf[3])) - 1; i++) {
|
||
Set.TitleOne[i] = DataInbuf[i + 3];
|
||
}
|
||
Set.TitleOne[i] = '\0';
|
||
FM24_Write(RW_Set, (uint8_t *)&Set, sizeof(Set));
|
||
break;
|
||
case 0x0503:
|
||
for (i = 0; i < strlen((const char *)(&DataInbuf[3])) - 1; i++) {
|
||
Set.TitleTwo[i] = DataInbuf[i + 3];
|
||
}
|
||
Set.TitleTwo[i] = '\0';
|
||
FM24_Write(RW_Set, (uint8_t *)&Set, sizeof(Set));
|
||
break;
|
||
case 0x0504:
|
||
for (i = 0; i < strlen((const char *)(&DataInbuf[3])) - 1; i++) {
|
||
Set.TitleThree[i] = DataInbuf[i + 3];
|
||
}
|
||
Set.TitleThree[i] = '\0';
|
||
FM24_Write(RW_Set, (uint8_t *)&Set, sizeof(Set));
|
||
break;
|
||
case 0x0506:
|
||
Set.SW0 = DataInbuf[3];
|
||
FM24_Write(RW_Set, (uint8_t *)&Set, sizeof(Set));
|
||
break;
|
||
case 0x0507:
|
||
|
||
switch(DataInbuf[3] + (DataInbuf[4] << 8) + (DataInbuf[5] << 16) + (DataInbuf[6] << 24) )
|
||
{
|
||
case 0:
|
||
Set.BaudRate = 1200;
|
||
break;
|
||
case 1:
|
||
Set.BaudRate = 2400;
|
||
break;
|
||
case 2:
|
||
Set.BaudRate = 4800;
|
||
break;
|
||
case 3:
|
||
Set.BaudRate = 9600;
|
||
break;
|
||
case 4:
|
||
Set.BaudRate = 19200;
|
||
break;
|
||
case 5:
|
||
Set.BaudRate = 38400;
|
||
break;
|
||
case 6:
|
||
Set.BaudRate = 57600;
|
||
break;
|
||
case 7:
|
||
default:
|
||
Set.BaudRate = 115200;
|
||
break;
|
||
|
||
}
|
||
FM24_Write(RW_Set, (uint8_t *)&Set, sizeof(Set));
|
||
BIOS_USART2_Init(Set.BaudRate);
|
||
break;
|
||
case 0x0512:
|
||
Set.SW1 = DataInbuf[3];
|
||
FM24_Write(RW_Set, (uint8_t *)&Set, sizeof(Set));
|
||
break;
|
||
case 0x0513:
|
||
Set.SW2 = DataInbuf[3];
|
||
FM24_Write(RW_Set, (uint8_t *)&Set, sizeof(Set));
|
||
break;
|
||
case 0x050E: // 返回
|
||
pageNum = 2;
|
||
break;
|
||
case 0x0704:
|
||
// 打印
|
||
for (i = 0; i < strlen((const char *)(&DataInbuf[3])) - 1; i++) {
|
||
DataLogValue[i] = DataInbuf[i + 3];
|
||
}
|
||
uint8_t NameBufSelect[30];
|
||
uint8_t startTimeSelect[30];
|
||
uint8_t StartWeightSelect[20];
|
||
uint8_t StopWeightSelect[20];
|
||
uint8_t WaterPercentSelect[20];
|
||
uint8_t WaterPercentSelect_1[20];
|
||
i = 0;
|
||
j = 0;
|
||
do {
|
||
NameBufSelect[j++] = DataLogValue[i++];
|
||
} while (DataLogValue[i] != '^');
|
||
i++;
|
||
j = 0;
|
||
do {
|
||
startTimeSelect[j++] = DataLogValue[i++];
|
||
} while (DataLogValue[i] != '^');
|
||
i++;
|
||
j = 0;
|
||
do {
|
||
StartWeightSelect[j++] = DataLogValue[i++];
|
||
} while (DataLogValue[i] != '^');
|
||
i++;
|
||
j = 0;
|
||
do {
|
||
StopWeightSelect[j++] = DataLogValue[i++];
|
||
} while (DataLogValue[i] != '^');
|
||
i++;
|
||
j = 0;
|
||
do {
|
||
WaterPercentSelect[j++] = DataLogValue[i++];
|
||
} while (DataLogValue[i] != '^');
|
||
i++;
|
||
j = 0;
|
||
do {
|
||
WaterPercentSelect_1[j++] = DataLogValue[i++];
|
||
} while (i < strlen((const char *)DataLogValue));
|
||
sprintf((char *)buf, "/****************************/\r\n %s\r\n\0", Set.Title);
|
||
USART2Print(buf, strlen((const char *)buf));
|
||
osDelay(200);
|
||
if (Set.SW0) {
|
||
sprintf((char *)buf, " %s\r\n\0", Set.TitleOne);
|
||
USART2Print(buf, strlen((const char *)buf));
|
||
osDelay(200);
|
||
}
|
||
if (Set.SW1) {
|
||
sprintf((char *)buf, " %s\r\n\0", Set.TitleTwo);
|
||
USART2Print(buf, strlen((const char *)buf));
|
||
osDelay(200);
|
||
}
|
||
if (Set.SW2) {
|
||
sprintf((char *)buf, " %s\r\n\0", Set.TitleThree);
|
||
USART2Print(buf, strlen((const char *)buf));
|
||
osDelay(200);
|
||
}
|
||
sprintf((char *)buf, " 样品名:%s\r\n 测试时间:%s\r\n 起始重量:%s\r\n 结束重量: %s\r\n 含水量: %s \r\n 含固量: %s\r\n \0", NameBufSelect, startTimeSelect, StartWeightSelect, StopWeightSelect, WaterPercentSelect, WaterPercentSelect_1 );
|
||
USART2Print(buf, strlen((const char *)buf));
|
||
osDelay(200);
|
||
sprintf((char *)buf, "/****************************/\r\n\r\n\r\n\r\n \0");
|
||
USART2Print(buf, strlen((const char *)buf));
|
||
break;
|
||
case 0x0801:
|
||
sprintf((char *)buf, "page SysSet\xFF\xFF\xFF\0");
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
break;
|
||
case 0x0802:
|
||
sprintf((char *)buf, "page VL\xFF\xFF\xFF\0");
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
break;
|
||
case 0x0803:
|
||
sprintf((char *)buf, "page About\xFF\xFF\xFF\0");
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
break;
|
||
case 0x0809:
|
||
j = 0;
|
||
uint8_t NameBuf[16];
|
||
uint8_t PwdBuf[16];
|
||
i = 3;
|
||
do {
|
||
NameBuf[j++] = DataInbuf[i++];
|
||
} while (DataInbuf[i] != '^');
|
||
j = 0;
|
||
i++;
|
||
do {
|
||
PwdBuf[j++] = DataInbuf[i++];
|
||
} while (i < strlen((const char *)DataInbuf) - 1);
|
||
if ((strcmp((const char *)NameBuf, (const char *)Set.UserName) == 0) && (strcmp((const char *)PwdBuf, (const char *)Set.UserPwd) == 0)) {
|
||
sprintf((char *)buf, "UserLogIn.t14.txt=%s\xFF\xFF\xFF\0", NameBuf);
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
sprintf((char *)buf, "UserLogIn.t0.txt=\"\"\xFF\xFF\xFF\0");
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
sprintf((char *)buf, "UserLogIn.t3.txt=\"\"\xFF\xFF\xFF\0");
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
sprintf((char *)buf, "page UserLogIn\xFF\xFF\xFF\0");
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
pageNum = 9;
|
||
} else {
|
||
sprintf((char *)buf, "play 1,1,0\xFF\xFF\xFF\0");
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
}
|
||
break;
|
||
case 0x0909:
|
||
j = 0;
|
||
i = 3;
|
||
do {
|
||
NameBuf[j++] = DataInbuf[i++];
|
||
} while (DataInbuf[i] != '^');
|
||
j = 0;
|
||
i++;
|
||
do {
|
||
PwdBuf[j++] = DataInbuf[i++];
|
||
} while (i < strlen((const char *)DataInbuf) - 1);
|
||
strcpy((char *)Set.UserName, (const char *)NameBuf);
|
||
strcpy((char *)Set.UserPwd, (const char *)PwdBuf);
|
||
FM24_Write(RW_Set, (uint8_t *)&Set, sizeof(Set));
|
||
case 0x0C00:
|
||
pageNum = 0;
|
||
break;
|
||
case 0x0C01:
|
||
sprintf((char *)buf, "LogIn.t14.txt=\"%s\"\xFF\xFF\xFF\0", Set.UserName);
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
break;
|
||
case 0x0D05:
|
||
j = 0;
|
||
i = 3;
|
||
do {
|
||
NameBuf[j++] = DataInbuf[i++];
|
||
} while (DataInbuf[i] != '^');
|
||
j = 0;
|
||
i++;
|
||
do {
|
||
PwdBuf[j++] = DataInbuf[i++];
|
||
} while (i < strlen((const char *)DataInbuf) - 1);
|
||
if ((strcmp((const char *)NameBuf, (const char *)Set.UserName) == 0) && (strcmp((const char *)PwdBuf, (const char *)Set.UserPwd) == 0)) {
|
||
sprintf((char *)buf, "page main\xFF\xFF\xFF\0");
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
pageNum = 0;
|
||
} else {
|
||
sprintf((char *)buf, "play 1,1,0\xFF\xFF\xFF\0");
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
}
|
||
default:
|
||
break;
|
||
}
|
||
osSemaphoreRelease(semDataChange);
|
||
}
|
||
}
|
||
|
||
#include "math.h"
|
||
extern float OutputMax; uint32_t LastTick, lostTick;
|
||
uint8_t Err = 0;
|
||
void Moisturing(const void *p_arg)
|
||
{
|
||
static uint8_t buf[150]__attribute__((at(0x20000000 + 0x1200)));
|
||
uint8_t TempRefresh = 0;
|
||
uint16_t SRangeTemp = 100;
|
||
bool PercentChg = Set.PercentChange;
|
||
FM24DataCRC();
|
||
osDelay(1000);
|
||
CalibrateWeight2.WeightZero = ADvalue2filter;
|
||
BIOS_USART2_Init(Set.BaudRate);
|
||
float WeightDataS = 0;
|
||
sprintf((char *)buf, "main.t6.txt=\"Max=%dg D=%1.3fg\"\xFF\xFF\xFF\0", MaxWeight, Resolution);
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
osDelay(300);
|
||
sprintf((char *)buf, "RunPage.t6.txt=\"Max=%dg D=%1.3fg\"\xFF\xFF\xFF\0", MaxWeight, Resolution);
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
for (;;) {
|
||
if (pageNum == 0) // 主界面
|
||
{
|
||
sprintf((char *)buf, "main.cb1.val=%d\xFF\xFF\xFF\0", Set.FastStyle);
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
sprintf((char *)buf, "main.n1.val=%d\xFF\xFF\xFF\0", Set.TempSet);
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
sprintf((char *)buf, "main.cb0.val=%d\xFF\xFF\xFF\0", Set.AutoStyle);
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
sprintf((char *)buf, "main.n0.val=%d\xFF\xFF\xFF\0", Set.TimeStop);
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
WeightDataS = (float)(((int32_t)((WeightData2+Resolution / 2) / Resolution)) * Resolution);
|
||
if (WeightDataS <= MaxWeight) {
|
||
sprintf((char *)buf, "main.t0.txt=\"%3.3f\"\xFF\xFF\xFF\0", WeightDataS);
|
||
} else {
|
||
sprintf((char *)buf, "main.t0.txt=\"---.---\"\xFF\xFF\xFF\0");
|
||
}
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
sprintf((char *)buf, "main.t5.txt=\"%s\"\xFF\xFF\xFF\0", Set.UserName);
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
|
||
sprintf((char *)buf, "main.t12.txt=\"%3.0f\"\xFF\xFF\xFF\0", Temperature);
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
sprintf((char *)buf, "page main\xFF\xFF\xFF\0");
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
while (pageNum == 0) {
|
||
// if(t17Dis == true)
|
||
// {
|
||
// if(t17DisCount ++ > 5)
|
||
// {
|
||
// t17Dis = false;
|
||
// t17DisCount = 0;
|
||
// sprintf((char *)buf, "t17.txt=\" \"\xFF\xFF\xFF\0");
|
||
// DataPrint(buf, strlen((const char *)buf));
|
||
// osDelay(100);
|
||
// }
|
||
// }
|
||
// else
|
||
// {
|
||
// t17DisCount = 0;
|
||
// }
|
||
if(t18Dis == true)
|
||
{
|
||
if(t18DisCount ++ > 5)
|
||
{
|
||
t18Dis = false;
|
||
t18DisCount = 0;
|
||
sprintf((char *)buf, "t18.txt=\" \"\xFF\xFF\xFF\0");
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
osDelay(100);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
t18DisCount = 0;
|
||
}
|
||
|
||
WeightDataS = (float)(((int32_t)((WeightData2+Resolution / 2) / Resolution)) * Resolution);
|
||
if (WeightDataS <= MaxWeight) {
|
||
sprintf((char *)buf, "main.t0.txt=\"%3.3f\"\xFF\xFF\xFF\0", WeightDataS);
|
||
} else {
|
||
sprintf((char *)buf, "main.t0.txt=\"---.---\"\xFF\xFF\xFF\0");
|
||
}
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
if (TempRefresh++ > 3) {
|
||
TempRefresh = 0;
|
||
sprintf((char *)buf, "main.t12.txt=\"%3.0f\"\xFF\xFF\xFF\0", Temperature);
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
}
|
||
osSemaphoreWait(semDataChange, 300);
|
||
}
|
||
}
|
||
if (pageNum == 1) // 运行界面
|
||
{
|
||
CountDelay = 0;
|
||
CountNochange = 0;
|
||
WeightDataS = (float)(((int32_t)((WeightData2+Resolution / 2) / Resolution)) * Resolution);
|
||
StartWeight = WeightDataS;
|
||
switch (Set.FastStyle) {
|
||
case 0:
|
||
OutputMax = 1;
|
||
break;
|
||
case 1:
|
||
OutputMax = 0.75;
|
||
break;
|
||
case 2:
|
||
OutputMax = 0.5;
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
sprintf((char *)buf, "RunPage.t7.txt=\"%s\"\xFF\xFF\xFF\0", Set.PercentChange?"含固量":"含水量");
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
sprintf((char *)buf, "RunPage.t5.txt=\"%s\"\xFF\xFF\xFF\0", Set.UserName);
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
sprintf((char *)buf, "RunPage.t14.txt=\"%s\"\xFF\xFF\xFF\0", NameBuf);
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
sprintf((char *)buf, "RunPage.cb0.val=%d\xFF\xFF\xFF\0", Set.FastStyle);
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
sprintf((char *)buf, "RunPage.n2.val=%d\xFF\xFF\xFF\0", Set.TempSet);
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
sprintf((char *)buf, "RunPage.cb1.val=%d\xFF\xFF\xFF\0", Set.AutoStyle);
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
sprintf((char *)buf, "RunPage.n3.val=%d\xFF\xFF\xFF\0", Set.TimeStop);
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
if (SafeCheck()) { // 请关闭加热仓
|
||
sprintf((char *)buf, "play 1,8,0\xFF\xFF\xFF\0");
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
do {
|
||
osDelay(300);
|
||
} while ((SafeCheck()) && (pageNum == 1));
|
||
}
|
||
Pump_OutCmd(true);
|
||
osSemaphoreWait(semDataChange, 800);
|
||
sprintf((char *)buf, "cle s0.id,0\xFF\xFF\xFF\0");
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
sprintf((char *)buf, "page RunPage\xFF\xFF\xFF\0");
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
sprintf((char *)buf, "cle s0.id,0\xFF\xFF\xFF\0");
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
sprintf((char *)buf, "va0.val=0\xFF\xFF\xFF\0");
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
sprintf((char *)buf, "tm0.en=1\xFF\xFF\xFF\0");
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
DisData = WeightOld = WeightDataS;
|
||
// 定间隔延时
|
||
const uint32_t oneTick = osKernelSysTickMicroSec(1000u); // 微秒计时 oneTick 1ms
|
||
|
||
LastTick = osKernelSysTick();
|
||
// osDelay(60000);
|
||
// lostTick = (osKernelSysTick() - LastTick)/oneTick;
|
||
do {
|
||
if (SafeCheck()) { // 请关闭加热仓
|
||
sprintf((char *)buf, "play 1,8,0\xFF\xFF\xFF\0");
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
Pump_OutCmd(false);
|
||
do {
|
||
osDelay(300);
|
||
} while ((SafeCheck()) && (pageNum == 1));
|
||
Pump_OutCmd(true);
|
||
}
|
||
// 计算已经逝去的tick计时单位
|
||
lostTick = (uint32_t)(osKernelSysTick() + oneTick / 2 - LastTick) / oneTick;
|
||
// 计算余下需要的延时周期(设定间隔时间:300ms)
|
||
if (lostTick < 300u) {
|
||
osDelay(300u - lostTick);
|
||
LastTick = osKernelSysTick();
|
||
} else { // 已经逝去的时间超过设定的间隔,重新计算时间起点后少量延时。
|
||
osDelay(30);
|
||
LastTick = osKernelSysTick();
|
||
}
|
||
|
||
StopWeight = DisData;
|
||
switch (Set.AutoStyle) {
|
||
case 0: // 自动模式
|
||
if (CountNochange++ > Set.AutoTimeStop * (1000 / 300)) // 当计数器大于设定时间时,停止加热
|
||
{
|
||
Finisflag = true;
|
||
}
|
||
break;
|
||
case 1: // 手动模式
|
||
break;
|
||
case 2: // 定时模式
|
||
if (CountDelay++ > Set.TimeStop * 60 * (1000 / 300)) // 当计数器大于设定时间时,停止加热)
|
||
{
|
||
Finisflag = true;
|
||
}
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
if (Finisflag) {
|
||
sprintf((char *)buf, "RunPage.tm0.en=0\xFF\xFF\xFF\0");
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
Pump_OutCmd(false);
|
||
sprintf((char *)buf, "RunPage.t8.txt=\"测试已完成!\"\xFF\xFF\xFF\0");
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
sprintf((char *)buf, "play 1,4,0\xFF\xFF\xFF\0");
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
sprintf((char *)buf, "tsw b0,1\xFF\xFF\xFF\0");
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
sprintf((char *)buf, "tsw b3,1\xFF\xFF\xFF\0");
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
sprintf((char *)buf, "tsw b1,1\xFF\xFF\xFF\0");
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
do {
|
||
osSemaphoreWait(semDataChange, osWaitForever);
|
||
} while (pageNum == 1);
|
||
}
|
||
WeightDataS = (float)(((int32_t)((WeightData2 + Resolution / 2) / Resolution)) * Resolution);
|
||
if( WeightData2 >= 0)
|
||
{
|
||
if (WeightOld - WeightDataS > Resolution) // 当重量变化大于0.001g时,更新数据 (只能减不能加)
|
||
{
|
||
DisData = WeightDataS;
|
||
}
|
||
if (WeightOld - WeightDataS > Set.AutoWeightChange / 1000) // 当重量变化大于x.xxxg时,计数器清零
|
||
{
|
||
CountNochange = 0;
|
||
DisData = WeightOld = WeightDataS;
|
||
}
|
||
if (StartWeight != 0) {
|
||
WaterPercent = (float)(((uint32_t)(((StartWeight - DisData) / StartWeight * 100.0f) / ResolutionWater)) * ResolutionWater);
|
||
}
|
||
}
|
||
sprintf((char *)buf, "RunPage.t0.txt=\"%3.3f\"\xFF\xFF\xFF\0", DisData);
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
sprintf((char *)buf, "RunPage.t12.txt=\"%3.0f\"\xFF\xFF\xFF\0", Temperature);
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
if( PercentChg != Set.PercentChange )
|
||
{
|
||
PercentChg = Set.PercentChange;
|
||
sprintf((char *)buf, "RunPage.t7.txt=\"%s\"\xFF\xFF\xFF\0", Set.PercentChange?"含固量":"含水量");
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
}
|
||
sprintf((char *)buf, "RunPage.t17.txt=\"%2.2f%%\"\xFF\xFF\xFF\0", Set.PercentChange?100.0f-WaterPercent:WaterPercent);
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
sprintf((char *)buf, "RunPage.j0.val=%d\xFF\xFF\xFF\0", (uint8_t)WaterPercent);
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
if (SCount++ >= 3) {
|
||
SCount = 0;
|
||
if (WaterPercent <= 38.0f) {
|
||
SRangeTemp = 200;
|
||
}
|
||
if (WaterPercent > 38.0f && WaterPercent < 76.0f) {
|
||
SRangeTemp = 100;
|
||
}
|
||
if (WaterPercent > 76.0f) {
|
||
SRangeTemp = 70;
|
||
}
|
||
if (SRangeTemp != SRange) {
|
||
SRange = SRangeTemp;
|
||
sprintf((char *)buf, "s0.dis=%d\xFF\xFF\xFF\0", SRange);
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
}
|
||
sprintf((char *)buf, "add s0.id,0,%d\xFF\xFF\xFF\0", (uint8_t)(WaterPercent / 100.0f * 255));
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
}
|
||
} while (pageNum == 1);
|
||
sprintf((char *)buf, "tm0.en=0\xFF\xFF\xFF\0");
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
Pump_OutCmd(false);
|
||
}
|
||
if (pageNum == 3) // 称重设置
|
||
{
|
||
if(osSemaphoreWait(semDataChange, 300) > 0)
|
||
{
|
||
osDelay(50);
|
||
sprintf((char *)buf, "WeightSet.cb5.val=%d\xFF\xFF\xFF\0", Set.FilterQ);
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
sprintf((char *)buf, "WeightSet.cb4.val=%d\xFF\xFF\xFF\0", Set.RuBianLiang);
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
sprintf((char *)buf, "WeightSet.cb3.val=%d\xFF\xFF\xFF\0", Set.SensorQ);
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
sprintf((char *)buf, "WeightSet.cb2.val=%d\xFF\xFF\xFF\0", Set.RuBianTime);
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
sprintf((char *)buf, "WeightSet.cb1.val=%d\xFF\xFF\xFF\0", Set.HoldTime);
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
sprintf((char *)buf, "WeightSet.cb0.val=%d\xFF\xFF\xFF\0", Set.ZeroTrack);
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
sprintf((char *)buf, "WeightSet.n0.val=%d\xFF\xFF\xFF\0", Set.AutoTimeStop);
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
sprintf((char *)buf, "WeightSet.n1.val=%d\xFF\xFF\xFF\0", Set.AutoWeightChange);
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
}
|
||
}
|
||
if (pageNum == 4) // 校准设置
|
||
{
|
||
sprintf((char *)buf, "Calibration.t8.txt=\"%3.4f\"\xFF\xFF\xFF\0", WeightData2);
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
sprintf((char *)buf, "Calibration.t6.txt=\"%3.0f\"\xFF\xFF\xFF\0", Temperature);
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
osSemaphoreWait(semDataChange, 300);
|
||
}
|
||
if (pageNum == 5) // 打印设置
|
||
{
|
||
sprintf((char *)buf, "Print.cb0.txt=\"%d\"\xFF\xFF\xFF\0", Set.BaudRate);
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
sprintf((char *)buf, "Print.bt0.val=%d\xFF\xFF\xFF\0", Set.SW0 ? 1 : 0);
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
sprintf((char *)buf, "Print.bt1.val=%d\xFF\xFF\xFF\0", Set.SW1 ? 1 : 0);
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
sprintf((char *)buf, "Print.bt2.val=%d\xFF\xFF\xFF\0", Set.SW2 ? 1 : 0);
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
sprintf((char *)buf, "Print.t5.txt=\"%s\"\xFF\xFF\xFF\0", Set.Title);
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
sprintf((char *)buf, "Print.t6.txt=\"%s\"\xFF\xFF\xFF\0", Set.TitleOne);
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
sprintf((char *)buf, "Print.t7.txt=\"%s\"\xFF\xFF\xFF\0", Set.TitleTwo);
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
sprintf((char *)buf, "Print.t8.txt=\"%s\"\xFF\xFF\xFF\0", Set.TitleThree);
|
||
DataPrint(buf, strlen((const char *)buf));
|
||
osSemaphoreWait(semDataChange, 300);
|
||
}
|
||
if (pageNum == 6) // 数据记录
|
||
{
|
||
osSemaphoreWait(semDataChange, 300);
|
||
}
|
||
}
|
||
}
|
||
osThreadDef(Moisturing, osPriorityNormal, 1, 0);
|
||
void MoisturingRun()
|
||
{
|
||
osThreadCreate(osThread(Moisturing), NULL);
|
||
}
|
||
|
||
osThreadDef(DataUnpack, osPriorityNormal, 1, 0);
|
||
void HMICMDInit()
|
||
{
|
||
osThreadCreate(osThread(DataUnpack), NULL);
|
||
MoisturingRun();
|
||
}
|