Files
SmartBin_STM_Woer/STM32_4路称重_Git提交精简工程/src/HARDWARE/DEVICE/deviceSet.c
T

1695 lines
43 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.
/*************************** (C) COPYRIGHT 2017 CXHY ****************************
* 文件名 device.c
* 描 述 :外部设备控制检测
* 版 本 V1.0
* 作 者 XuZhongPing
* 日 期 2017/09/04
*********************************************************************************/
#include "deviceSet.h"
#include "device.h"
#include "usart1.h"
#include "usart2.h"
#include "delay.h"
#include "timer.h"
#include "data_typedef.h"
#include "tcp_protocol.h"
#include "lcd.h"
#include "display.h"
#include "stmflash.h"
#include "qr_code.h"
#include "scale.h"
/*
***********************************************************************
* 函 数 名: ShowRecyclingType
* 功能说明: 显示回收箱类型
* 形 参:type -> 可回收物类型
* 返 回 值: 无
***********************************************************************
*/
void ShowRecyclingType(uint8_t type)
{
switch(type)
{
case PAPER:
printf("纸类");
break;
case PLASTIC:
printf("塑料");
break;
case GLASS:
printf("玻璃");
break;
case METAL:
printf("金属");
break;
case RECYCLED:
printf("可回收物");
break;
case KITCHEN:
printf("厨余");
break;
case SMALL_BOTTLE:
printf("小塑料瓶子");
break;
case BIG_BOTTLE:
printf("大塑料瓶子");
break;
case CANS:
printf("易拉罐");
break;
case BATTERY:
printf("电池");
break;
case FABRIC:
printf("织物");
break;
case BOOK:
printf("书本");
break;
case NEWSPAPER:
printf("报纸");
break;
case KITCHEN_1:
printf("厨余1");
break;
case KITCHEN_2:
printf("厨余2");
break;
case PLASTIC_2:
printf("塑料2");
break;
case OTHER:
printf("其它");
break;
case HARMFUL:
printf("有害");
break;
case DRY_WASTES:
printf("干垃圾");
break;
case WET_WASTES:
printf("湿垃圾");
break;
default:
printf("未知(%d)", type);
break;
}
}
/*
***********************************************************************
* 函 数 名: DeviceInfoShow
* 功能说明: 设备信息显示
* 形 参:无
* 返 回 值: 无
***********************************************************************
*/
void DeviceInfoShow(void)
{
printf("\r\n设备信息:\r\n");
printf("------------\r\n");
printf("软件%s\r\n", VersionStr);
switch(deviceType)
{
case SINGLE_CLASSIFICATION:
printf("设备类型: “一分类设备” (");
ShowRecyclingType(devChannel1Type);
printf(")\r\n");
break;
case DOUBLE_CLASSIFICATION:
printf("设备类型: “两分类设备” (");
ShowRecyclingType(devChannel1Type);
printf("、");
ShowRecyclingType(devChannel2Type);
printf(")\r\n");
break;
case DOUBLE_CLASSIFICATION_BOTTLE:
printf("设备类型: “两分类设备_含瓶类” (");
ShowRecyclingType(devChannel1Type);
printf("、");
ShowRecyclingType(devChannel2Type);
printf(")\r\n");
break;
case THREE_CLASSIFICATION:
printf("设备类型: “三分类设备” (");
ShowRecyclingType(devChannel1Type);
printf("、");
ShowRecyclingType(devChannel2Type);
printf("、");
ShowRecyclingType(devChannel3Type);
printf(")\r\n");
break;
case FOUR_CLASSIFICATION:
printf("设备类型: “四分类设备” (");
ShowRecyclingType(devChannel1Type);
printf("、");
ShowRecyclingType(devChannel2Type);
printf("、");
ShowRecyclingType(devChannel3Type);
printf("、");
ShowRecyclingType(devChannel4Type);
printf(")\r\n");
break;
}
Screen_ShowDeviceInfo(VersionStr, devChannel1Type, devChannel2Type, devChannel3Type, devChannel4Type);
printf("---------------------------\r\n");
}
/*
***********************************************************************
* 函 数 名: SetDefaultOverflowAlarmParam
* 功能说明: 设置满溢报警默认参数
* 形 参:无
* 返 回 值: 无
***********************************************************************
*/
void SetDefaultOverflowAlarmParam(void)
{
switch(deviceType)
{
case SINGLE_CLASSIFICATION: //单分类
break;
case DOUBLE_CLASSIFICATION: //两分类
break;
case DOUBLE_CLASSIFICATION_BOTTLE: //两分类含瓶子
break;
default:
break;
}
// printf("\r\n设置默认满溢参数: h1 = %d; H1 = %d; A1 = %d; h2 = %d; H2 = %d; A2 = %d;\r\n",
// setDistance_L_DepthVal, setDistance_L_MaxVal, setDistance_L_AlarmPercent,
// setDistance_R_DepthVal, setDistance_R_MaxVal, setDistance_R_AlarmPercent);
}
/*
***********************************************************************
* 函 数 名: DeviceSetParamInit
* 功能说明: 设备设置参数初始化
* 形 参:无
* 返 回 值: 无
***********************************************************************
*/
void DeviceSetParamInit(void)
{
setDeviceType = deviceType;
setDevChannelNumbers = devChannelNumbers;
setDevChannel1Type = devChannel1Type;
setDevChannel2Type = devChannel2Type;
setDevChannel3Type = devChannel3Type;
setDevChannel4Type = devChannel4Type;
setPassword = password; //要设置的设备操作密码
setCustomerID = customerID; //客户号(用于控制谁可以打开收运清理门)
setDevChannel1DisDepthVal = devChannel1DisDepthVal;
setDevChannel1DisMaxVal = devChannel1DisMaxVal;
setDevChannel1DisAlarmPercent = devChannel1DisAlarmPercent;
setDevChannel2DisDepthVal = devChannel2DisDepthVal;
setDevChannel2DisMaxVal = devChannel2DisMaxVal;
setDevChannel2DisAlarmPercent = devChannel2DisAlarmPercent;
setDevChannel3DisDepthVal = devChannel3DisDepthVal;
setDevChannel3DisMaxVal = devChannel3DisMaxVal;
setDevChannel3DisAlarmPercent = devChannel3DisAlarmPercent;
setDevChannel4DisDepthVal = devChannel4DisDepthVal;
setDevChannel4DisMaxVal = devChannel4DisMaxVal;
setDevChannel4DisAlarmPercent = devChannel4DisAlarmPercent;
setDisableICCardFunStatus = disableICCardFunStatus; //设置“禁用IC卡用户”功能标志位
setEnableCleanQRCodeStatus = enableCleanQRCodeStatus; //设置“启用收运卡二维码开门”标志
printf("\r\n设备设置参数初始化完成!!!\r\n");
printf("\r\nSetParam:\r\n");
printf("P=%d; ID=%d; DevType=%d; Cnt=%d\r\n",
setPassword,
setCustomerID,
setDeviceType,
setDevChannelNumbers);
printf("T1=%d, h1=%d, H1=%d, A1=%d\r\n",
setDevChannel1Type, setDevChannel1DisDepthVal, setDevChannel1DisMaxVal, setDevChannel1DisAlarmPercent);
printf("T2=%d, h2=%d, H2=%d, A2=%d\r\n",
setDevChannel2Type, setDevChannel2DisDepthVal, setDevChannel2DisMaxVal, setDevChannel2DisAlarmPercent);
printf("T3=%d, h3=%d, H3=%d, A3=%d\r\n",
setDevChannel3Type, setDevChannel3DisDepthVal, setDevChannel3DisMaxVal, setDevChannel3DisAlarmPercent);
printf("T4=%d, h4=%d, H4=%d, A4=%d\r\n",
setDevChannel4Type, setDevChannel4DisDepthVal, setDevChannel4DisMaxVal, setDevChannel4DisAlarmPercent);
printf("ICE=%d, ICQR=%d\r\n", setDisableICCardFunStatus, setEnableCleanQRCodeStatus);
}
/*
***********************************************************************
* 函 数 名: DeviceParamInit
* 功能说明: 设备参数初始化
* 形 参:无
* 返 回 值: 无
***********************************************************************
*/
void DeviceParamInit(void)
{
password = setPassword;
customerID = setCustomerID;
deviceType = setDeviceType;
devChannelNumbers = setDevChannelNumbers;
devChannel1Type = setDevChannel1Type;
devChannel2Type = setDevChannel2Type;
devChannel3Type = setDevChannel3Type;
devChannel4Type = setDevChannel4Type;
#ifdef FOUR_DROP_PORTS
deviceType = FOUR_CLASSIFICATION;
devChannelNumbers = 4;
setDeviceType = deviceType;
setDevChannelNumbers = devChannelNumbers;
#endif
devChannel1DisDepthVal = setDevChannel1DisDepthVal;
devChannel1DisMaxVal = setDevChannel1DisMaxVal;
devChannel1DisAlarmPercent = setDevChannel1DisAlarmPercent;
devChannel2DisDepthVal = setDevChannel2DisDepthVal;
devChannel2DisMaxVal = setDevChannel2DisMaxVal;
devChannel2DisAlarmPercent = setDevChannel2DisAlarmPercent;
devChannel3DisDepthVal = setDevChannel3DisDepthVal;
devChannel3DisMaxVal = setDevChannel3DisMaxVal;
devChannel3DisAlarmPercent = setDevChannel3DisAlarmPercent;
devChannel4DisDepthVal = setDevChannel4DisDepthVal;
devChannel4DisMaxVal = setDevChannel4DisMaxVal;
devChannel4DisAlarmPercent = setDevChannel4DisAlarmPercent;
disableICCardFunStatus = setDisableICCardFunStatus;
enableCleanQRCodeStatus = setEnableCleanQRCodeStatus;
printf("\r\nDevice Param Init OK!!!\r\n");
printf("\r\nCurParam:\r\n");
printf("P=%d; ID=%d; DevType=%d; Cnt=%d\r\n",
password,
customerID,
deviceType,
devChannelNumbers);
printf("T1=%d, h1=%d, H1=%d, A1=%d\r\n",
devChannel1Type, devChannel1DisDepthVal, devChannel1DisMaxVal, devChannel1DisAlarmPercent);
printf("T2=%d, h2=%d, H2=%d, A2=%d\r\n",
devChannel2Type, devChannel2DisDepthVal, devChannel2DisMaxVal, devChannel2DisAlarmPercent);
printf("T3=%d, h3=%d, H3=%d, A3=%d\r\n",
devChannel3Type, devChannel3DisDepthVal, devChannel3DisMaxVal, devChannel3DisAlarmPercent);
printf("T4=%d, h4=%d, H4=%d, A4=%d\r\n",
devChannel4Type, devChannel4DisDepthVal, devChannel4DisMaxVal, devChannel4DisAlarmPercent);
printf("ICE=%d, ICQR=%d\r\n", disableICCardFunStatus, enableCleanQRCodeStatus);
}
//-----------------------------------------------------------------------------------
//通过二维码设置设备参数
/*
***********************************************************************
* 函 数 名: StrToInt
* 功能说明: 字符串转整型数据(带格式校验)
* 形 参:str -> 待转换的字符串
* 返 回 值: 转换后的整型数据,当格式不正确时返回0xFFFFFFFF
***********************************************************************
*/
uint32_t StrToInt(char *str)
{
uint32_t res = 0xFFFFFFFF;
if(strlen(str) < 10) //要转换的内容长度小于10位数
{
if(strspn(str, "0123456789") == strlen(str)) //校验内容是不是都由数字组成
{
res = atoi(str);
}else{
res = 0xFFFFFFFF;
printf("\r\n内容格式错误\r\n");
}
}
return res;
}
/*
***********************************************************************
* 函 数 名: StrArrToIntArr
* 功能说明: 字符串数组转换成整形数组
* 形 参:strArr -> 待转换的字符串数组
intArr -> 转换后的整形数组
len -> 要转的数组长度
* 返 回 值: 转换成功返回1,失败返0
***********************************************************************
*/
uint8_t StrArrToIntArr(char strArr[][16], uint32_t intArr[], uint8_t len)
{
uint8_t i = 0;
uint32_t temp;
// printf("\r\nstrArr[i] = {", strArr[i]);
for(i = 0; i < len; i++)
{
// printf("%s, ", strArr[i]);
temp = StrToInt(strArr[i]); //将字符串转换成整型数据
if(temp != 0xFFFFFFFF)
{
intArr[i] = temp;
}else{
printf("\r\nwrong format\r\n");
return 0;
}
}
// printf("}\r\n");
return 1;
}
/*
***********************************************************************
* 函 数 名: StringSplit
* 功能说明: 字符串拆分
* 形 参:str -> 待处理字符串
* 返 回 值: 正常分离返回1,错误返回0
***********************************************************************
*/
uint8_t StringSplit(char *str)
{
uint8_t res = 0;
uint8_t i = 0;
uint32_t temp = 0xFFFFFFFF;
static uint8_t preSetParamCmd = 0; //上一次的命令码
char *token;
memset(setParamList, 0x00, 16*16);
//分解出各参数
printf("\r\n分离参数!\r\n");
setParamCount = 0;
token = strtok(str, ",");
while (token != NULL)
{
// printf("\r\nparam%d %s\r\n", setParamCount, token);
if(strlen(token) < 16)
{
strcpy(setParamList[setParamCount], token);
token = strtok(NULL, ",");
setParamCount++;
}else{
printf("\r\n参数分离出错!长度过长\r\n");
return 0;
}
}
printf("\r\nlen = %d, dataList: {", setParamCount);
for(i = 0; i < setParamCount; i++)
{
printf("%s, ", setParamList[i]);
}
printf("}\r\n");
//分解出命令码
temp = StrToInt(setParamList[0]); //将字符串转换成整型数据
if(temp != 0xFFFFFFFF)
{
setParamCmd = temp; //保存参数设置指令码
res = 1;
printf("\r\ncmd = %d\r\n", setParamCmd);
if((preSetParamCmd != setParamCmd) && (setParamCmd != 1))
{
if(setParamCmd != 1)
{
setParamChangeMark = 1;
printf("\r\n指令有变化!\r\n");
}
preSetParamCmd = setParamCmd;
}
}else{
res = 0;
printf("\r\n命令错误\r\n");
}
return res;
}
/*
***********************************************************************
* 函 数 名: SetParamDecode
* 功能说明: 设置参数解码
* 形 参:无
* 返 回 值: 无
***********************************************************************
*/
void SetParamDecode(uint8_t *pSetParamStr)
{
uint32_t temp = 0xFFFFFFFF;
char paramBuf[128];
uint32_t intDataArr[16];
uint8_t i = 0;
uint8_t len = 0;
uint8_t decodeOkMark = 0;
char *p;
char *pParam;
char *token;
p = (char*)strstr((const char*)pSetParamStr, ":");
pParam = p+1;
memset(paramBuf, 0x00, 128);
strcpy(paramBuf, pParam); //先备份设置的参数内容
decodeOkMark = StringSplit(paramBuf); //拆分出各参数
//判断是否为正常的设置命令
if(decodeOkMark == 1)
{
printf("\r\nsetCmd = %d\r\n", setParamCmd);
switch(setParamCmd)
{
case 1: //管理密码确认
printf("\r\nSET --> 管理密码确认!\r\n");
printf("\r\nlist[1]%s\r\n", setParamList[1]);
temp = StrToInt(setParamList[1]); //将字符串转换成整型数据
if(temp != 0xFFFFFFFF)
{
getConfirmPassword = temp;
getConfirmPasswordMark = 1; //标志已经取得待确认的密码
printf("\r\n密码为:%d\r\n", getConfirmPassword);
}else{
getConfirmPasswordMark = 0;
printf("\r\n确认密码内容格式错误\r\n");
break;
}
break;
case 2: //密码修改
printf("\r\nSET --> 密码修改!\r\n");
printf("\r\nlist[1]%s\r\n", setParamList[1]);
temp = StrToInt(setParamList[1]); //将字符串转换成整型数据
if(temp != 0xFFFFFFFF)
{
getPassword = temp;
getPasswordMark = 1; //标志已经取得待确认的密码
printf("\r\n密码为:%d\r\n", getPassword);
}else{
getPasswordMark = 0;
printf("\r\n设置密码内容格式错误\r\n");
break;
}
break;
case 3: //设备类型设置
printf("\r\nSET --> 设备类型设置!\r\n");
//设备类型
printf("\r\nlist[1]%s\r\n", setParamList[1]);
temp = StrToInt(setParamList[1]); //将字符串转换成整型数据
if(temp != 0xFFFFFFFF)
{
getDeviceType = temp;
printf("\r\n设备类型为:%d\r\n", getDeviceType);
}else{
getDeviceTypeMark = 0;
printf("\r\n设置类型内容格式错误\r\n");
break;
}
//投口通道数量
printf("\r\nlist[2]%s\r\n", setParamList[2]);
temp = StrToInt(setParamList[2]); //将字符串转换成整型数据
if(temp != 0xFFFFFFFF)
{
getDevChannelNumbers = temp;
printf("\r\n设备投口通道数量为:%d\r\n", getDevChannelNumbers);
}else{
getDeviceTypeMark = 0;
printf("\r\n设备投口通道数量内容格式错误\r\n");
break;
}
temp = StrArrToIntArr(&setParamList[3], intDataArr, getDevChannelNumbers);
if(temp == 1)
{
if(getDevChannelNumbers == 1) //1分类
{
getDevChannel1Type = intDataArr[0];
getDeviceTypeMark = 1; //单投口设备则标志解码成功
printf("\r\n回收类型1%d\r\n", getDevChannel1Type);
}else if(getDevChannelNumbers == 2){ //2分类
getDevChannel1Type = intDataArr[0];
getDevChannel2Type = intDataArr[1];
getDeviceTypeMark = 1; //标志解码成功
printf("\r\n回收类型2%d, %d\r\n", getDevChannel1Type, getDevChannel2Type);
}else if(getDevChannelNumbers == 3){ //3分类
getDevChannel1Type = intDataArr[0];
getDevChannel2Type = intDataArr[1];
getDevChannel3Type = intDataArr[2];
getDeviceTypeMark = 1; //标志解码成功
printf("\r\n回收类型3%d, %d, %d\r\n", getDevChannel1Type, getDevChannel2Type, getDevChannel3Type);
}else if(getDevChannelNumbers == 4){ //4分类
getDevChannel1Type = intDataArr[0];
getDevChannel2Type = intDataArr[1];
getDevChannel3Type = intDataArr[2];
getDevChannel4Type = intDataArr[3];
getDeviceTypeMark = 1; //标志解码成功
printf("\r\n回收类型4%d, %d, %d, %d\r\n", getDevChannel1Type, getDevChannel2Type, getDevChannel3Type, getDevChannel4Type);
}else{}
}else{
getDeviceTypeMark = 0;
printf("\r\n设置回收类型内容格式错误\r\n");
break;
}
break;
case 4: //设备客户号设置
printf("\r\nSET --> 设备客户号设置!\r\n");
printf("\r\nlist[1]%s\r\n", setParamList[1]);
temp = StrToInt(setParamList[1]); //将字符串转换成整型数据
if(temp != 0xFFFFFFFF)
{
getCustomerID = temp;
getCustomerIDMark = 1; //标志已经取得待确认的密码
printf("\r\n客户号为:%d\r\n", getCustomerID);
}else{
getCustomerIDMark = 0;
printf("\r\n设置客户号内容格式错误\r\n");
}
break;
case 5:
break;
case 6: //启用/停用“禁用的IC卡不能开门”功能设置
printf("\r\nSET -->(禁用的IC卡不能开门)功能设置!\r\n");
printf("\r\nlist[1]%s\r\n", setParamList[1]);
temp = StrToInt(setParamList[1]); //将字符串转换成整型数据
if(temp != 0xFFFFFFFF)
{
getDisableICCardFunStatus = temp;
getDisableICCardFunMark = 1; //标志已经取得待确认的密码
printf("\r\n状态为:%d\r\n", getDisableICCardFunStatus);
break;
}else{
getDisableICCardFunMark = 0;
printf("\r\n设置(禁用的IC卡不能开门)内容格式错误\r\n");
break;
}
break;
case 7: //启用/停用“收运二维码开门”功能设置
printf("\r\nSET -->(收运二维码开门)功能设置!\r\n");
printf("\r\nlist[1]%s\r\n", setParamList[1]);
temp = StrToInt(setParamList[1]); //将字符串转换成整型数据
if(temp != 0xFFFFFFFF)
{
getEnableCleanQRCodeStatus = temp;
getEnableCleanQRCodeMark = 1; //标志已经取得待确认的密码
printf("\r\n状态为:%d\r\n", getEnableCleanQRCodeStatus);
break;
}else{
getEnableCleanQRCodeMark = 0;
printf("\r\n设置(收运二维码开门)内容格式错误\r\n");
break;
}
break;
case 13: //满溢报警参数设置
printf("\r\nSET -->(满溢参数)功能设置!\r\n");
//投口通道数量
printf("\r\nlist[1]%s\r\n", setParamList[1]);
temp = StrToInt(setParamList[1]); //将字符串转换成整型数据
if(temp != 0xFFFFFFFF)
{
getDevChannelNumbers = temp;
printf("\r\n设备投口通道数量为:%d\r\n", getDevChannelNumbers);
}else{
getDeviceTypeMark = 0;
printf("\r\n设备投口通道数量内容格式错误\r\n");
break;
}
temp = StrArrToIntArr(&setParamList[2], intDataArr, getDevChannelNumbers*3);
if(temp == 1)
{
if(getDevChannelNumbers == 1) //1分类
{
getDevChannel1DisDepthVal = intDataArr[0];
getDevChannel1DisMaxVal = intDataArr[1];
getDevChannel1DisAlarmPercent = intDataArr[2];
getOverflowSetMark = 1; //单投口设备则标志解码成功
printf("\r\nOF1: %d, %d, %d\r\n", getDevChannel1DisDepthVal, getDevChannel1DisMaxVal, getDevChannel1DisAlarmPercent);
}else if(getDevChannelNumbers == 2){ //2分类
getDevChannel1DisDepthVal = intDataArr[0];
getDevChannel1DisMaxVal = intDataArr[1];
getDevChannel1DisAlarmPercent = intDataArr[2];
getDevChannel2DisDepthVal = intDataArr[3];
getDevChannel2DisMaxVal = intDataArr[4];
getDevChannel2DisAlarmPercent = intDataArr[5];
getOverflowSetMark = 1; //标志解码成功
printf("\r\nOF1: %d, %d, %d; OF2: %d, %d, %d\r\n", getDevChannel1DisDepthVal, getDevChannel1DisMaxVal, getDevChannel1DisAlarmPercent,
getDevChannel2DisDepthVal, getDevChannel2DisMaxVal, getDevChannel2DisAlarmPercent);
}else if(getDevChannelNumbers == 3){ //3分类
getDevChannel1DisDepthVal = intDataArr[0];
getDevChannel1DisMaxVal = intDataArr[1];
getDevChannel1DisAlarmPercent = intDataArr[2];
getDevChannel2DisDepthVal = intDataArr[3];
getDevChannel2DisMaxVal = intDataArr[4];
getDevChannel2DisAlarmPercent = intDataArr[5];
getDevChannel3DisDepthVal = intDataArr[6];
getDevChannel3DisMaxVal = intDataArr[7];
getDevChannel3DisAlarmPercent = intDataArr[8];
getOverflowSetMark = 1; //标志解码成功
printf("\r\nOF1: %d, %d, %d; OF2: %d, %d, %d; OF3: %d, %d, %d\r\n",
getDevChannel1DisDepthVal, getDevChannel1DisMaxVal, getDevChannel1DisAlarmPercent,
getDevChannel2DisDepthVal, getDevChannel2DisMaxVal, getDevChannel2DisAlarmPercent,
getDevChannel3DisDepthVal, getDevChannel3DisMaxVal, getDevChannel3DisAlarmPercent);
}else if(getDevChannelNumbers == 4){ //4分类
getDevChannel1DisDepthVal = intDataArr[0];
getDevChannel1DisMaxVal = intDataArr[1];
getDevChannel1DisAlarmPercent = intDataArr[2];
getDevChannel2DisDepthVal = intDataArr[3];
getDevChannel2DisMaxVal = intDataArr[4];
getDevChannel2DisAlarmPercent = intDataArr[5];
getDevChannel3DisDepthVal = intDataArr[6];
getDevChannel3DisMaxVal = intDataArr[7];
getDevChannel3DisAlarmPercent = intDataArr[8];
getDevChannel4DisDepthVal = intDataArr[9];
getDevChannel4DisMaxVal = intDataArr[10];
getDevChannel4DisAlarmPercent = intDataArr[11];
getOverflowSetMark = 1; //标志解码成功
printf("\r\nOF1: %d, %d, %d; OF2: %d, %d, %d; OF3: %d, %d, %d; OF4: %d, %d, %d\r\n",
getDevChannel1DisDepthVal, getDevChannel1DisMaxVal, getDevChannel1DisAlarmPercent,
getDevChannel2DisDepthVal, getDevChannel2DisMaxVal, getDevChannel2DisAlarmPercent,
getDevChannel3DisDepthVal, getDevChannel3DisMaxVal, getDevChannel3DisAlarmPercent,
getDevChannel4DisDepthVal, getDevChannel4DisMaxVal, getDevChannel4DisAlarmPercent);
}else{}
}else{
getDeviceTypeMark = 0;
printf("\r\n设置满溢参数内容格式错误\r\n");
break;
}
break;
case 30: //称盘校准
printf("\r\nSET --> 称盘校准!\r\n");
printf("\r\nlist[1]%s\r\n", setParamList[1]);
temp = StrToInt(setParamList[1]); //将字符串转换成整型数据
if(temp != 0xFFFFFFFF)
{
getScaleNum = temp;
getScaleCalibrationMark = 1; //标志已经取得待确认的密码
printf("\r\n称盘编号为:%d\r\n", getScaleNum);
}else{
getConfirmPasswordMark = 0;
printf("\r\n校准称盘操作内容格式错误\r\n");
break;
}
break;
case 31: //临时开收运清理门二维码
printf("\r\nSET --> 临时开门!\r\n");
printf("\r\nlist[1]%s\r\n", setParamList[1]);
temp = StrToInt(setParamList[1]); //将字符串转换成整型数据
if(temp != 0xFFFFFFFF)
{
getBoxOpenMark = 1; //标志已经取得待确认的密码
printf("\r\n开门编号为:%d\r\n", getScaleNum);
}else{
getBoxOpenMark = 0;
printf("\r\n临时开门操作内容格式错误\r\n");
break;
}
break;
case 56: //密码强制修改
printf("\r\nSET --> 密码强制修改!\r\n");
printf("\r\nlist[1]%s\r\n", setParamList[1]);
temp = StrToInt(setParamList[1]); //将字符串转换成整型数据
if(temp != 0xFFFFFFFF)
{
getPassword = temp;
getForceChangeMark = 1; //标志已经取得待确认的密码
printf("\r\n密码为:%d\r\n", getPassword);
}else{
getForceChangeMark = 0;
printf("\r\n强制设置密码内容格式错误\r\n");
break;
}
break;
case 100: //设备参数恢复出厂设置
printf("\r\nSET --> 设备参数恢复出厂设置!\r\n");
getDeviceParamResetMark = 1;
break;
default:
break;
}
}
}
/*
***********************************************************************
* 函 数 名: PasswordCheck
* 功能说明: 密码校验
* 形 参:无
* 返 回 值: 1:密码确认成功,0:密码未确认
***********************************************************************
*/
uint8_t PasswordCheck(void)
{
uint8_t res = 0;
if(getConfirmPasswordMark == 1)
{
getConfirmPasswordMark = 0;
if(password == getConfirmPassword)
{
printf("\r\n密码校验正确!\r\n");
res = 1;
}else{
printf("\r\n密码校验错误!\r\n");
res = 0;
}
}
return res;
}
/*
***********************************************************************
* 函 数 名: PasswordSetTask
* 功能说明: 密码修改设置任务
* 形 参:无
* 返 回 值: 无
***********************************************************************
*/
void PasswordSetTask(void)
{
static uint8_t setStep = 0x00;
switch(setStep)
{
case 0x00:
if(getPasswordMark == 1)
{
getPasswordMark = 0;
getConfirmPasswordMark = 0;
setParamChangeMark = 0;
setStep = 0x01;
}
break;
case 0x01:
if(getConfirmPasswordMark == 1)
{
getConfirmPasswordMark = 0;
if(password == getConfirmPassword)
{
printf("\r\n密码校验正确!\r\n");
setPassword = getPassword;
printf("\r\n密码修改成功!\r\n");
setParamSaveMark = 1; //标志有参数进行了修改,需要进行保存
setStep = 0x00;
break;
}else{
printf("\r\n密码校验错误!\r\n");
break;
}
}
if(setParamChangeMark == 1)
{
setParamChangeMark = 0;
setStep = 0x00;
printf("\r\n参数设置命令有切换!!\r\n");
break;
}
break;
default:
break;
}
}
/*
***********************************************************************
* 函 数 名: PasswordCastSetTask
* 功能说明: 密码强制修改设置任务
* 形 参:无
* 返 回 值: 无
***********************************************************************
*/
void PasswordCastSetTask(void)
{
static uint8_t setStep = 0x00;
switch(setStep)
{
case 0x00:
if(getForceChangeMark == 1)
{
getForceChangeMark = 0;
setPassword = getPassword;
setParamSaveMark = 1; //标志有参数进行了修改,需要进行保存
printf("\r\n密码强制修改成功!\r\n");
setStep = 0x00;
}
break;
default:
break;
}
}
/*
***********************************************************************
* 函 数 名: DeviceTypeSetTask
* 功能说明: 设备类型设置任务
* 形 参:无
* 返 回 值: 无
***********************************************************************
*/
void DeviceTypeSetTask(void)
{
static uint8_t setStep = 0x00;
switch(setStep)
{
case 0x00:
if(getDeviceTypeMark == 1)
{
getDeviceTypeMark = 0;
getConfirmPasswordMark = 0;
setParamChangeMark = 0;
printf("\r\n已取得类型,等待确认密码!\r\n");
setStep = 0x01;
}
break;
case 0x01:
if(getConfirmPasswordMark == 1)
{
getConfirmPasswordMark = 0;
if(password == getConfirmPassword)
{
printf("\r\n密码校验正确!\r\n");
setDeviceType = getDeviceType;
setDevChannelNumbers = getDevChannelNumbers;
setDevChannel1Type = getDevChannel1Type;
setDevChannel2Type = getDevChannel2Type;
setDevChannel3Type = getDevChannel3Type;
setDevChannel4Type = getDevChannel4Type;
// SetDefaultOverflowAlarmParam(); //当设备类型有变化时则要重新设置满溢报警参数
setParamSaveMark = 1; //标志有参数进行了修改,需要进行保存
setStep = 0x00;
break;
}else{
printf("\r\n密码校验错误!\r\n");
break;
}
}
if(setParamChangeMark == 1)
{
setParamChangeMark = 0;
setStep = 0x00;
printf("\r\n参数设置命令有切换!!\r\n");
break;
}
break;
default:
break;
}
}
/*
***********************************************************************
* 函 数 名: CustomerIdSetTask
* 功能说明: 设备客户号设置任务
* 形 参:无
* 返 回 值: 无
***********************************************************************
*/
void CustomerIdSetTask(void)
{
static uint8_t setStep = 0x00;
switch(setStep)
{
case 0x00:
if(getCustomerIDMark == 1)
{
getCustomerIDMark = 0;
getConfirmPasswordMark = 0;
setParamChangeMark = 0;
setStep = 0x01;
}
break;
case 0x01:
if(getConfirmPasswordMark == 1)
{
getConfirmPasswordMark = 0;
if(password == getConfirmPassword)
{
printf("\r\n密码校验正确!\r\n");
setCustomerID = getCustomerID;
printf("\r\n客户号修改成功!\r\n");
setParamSaveMark = 1; //标志有参数进行了修改,需要进行保存
setStep = 0x00;
break;
}else{
printf("\r\n密码校验错误!\r\n");
break;
}
}
if(setParamChangeMark == 1)
{
setParamChangeMark = 0;
setStep = 0x00;
printf("\r\n参数设置命令有切换!!\r\n");
break;
}
break;
default:
break;
}
}
/*
***********************************************************************
* 函 数 名: DisableICCardFunSetTask
* 功能说明: 启用/停用“禁用的IC卡不能开门”功能设置
* 形 参:无
* 返 回 值: 无
***********************************************************************
*/
void DisableICCardFunSetTask(void)
{
static uint8_t setStep = 0x00;
switch(setStep)
{
case 0x00:
if(getDisableICCardFunMark == 1)
{
getDisableICCardFunMark = 0;
getConfirmPasswordMark = 0;
setParamChangeMark = 0;
setStep = 0x01;
}
break;
case 0x01:
if(getConfirmPasswordMark == 1)
{
getConfirmPasswordMark = 0;
if(password == getConfirmPassword)
{
printf("\r\n密码校验正确!\r\n");
setDisableICCardFunStatus = getDisableICCardFunStatus;
printf("\r\n“禁用的IC卡不能开门”功能修改成功!\r\n");
if(setDisableICCardFunStatus == 1)
{
printf("\r\n停用!\r\n");
}else{
printf("\r\n启用!\r\n");
}
setParamSaveMark = 1; //标志有参数进行了修改,需要进行保存
setStep = 0x00;
break;
}else{
printf("\r\n密码校验错误!\r\n");
break;
}
}
if(setParamChangeMark == 1)
{
setParamChangeMark = 0;
setStep = 0x00;
printf("\r\n参数设置命令有切换!!\r\n");
break;
}
break;
default:
break;
}
}
/*
***********************************************************************
* 函 数 名: DisableICCardFunSetTask
* 功能说明: 启用/停用“收运二维码开门”功能设置
* 形 参:无
* 返 回 值: 无
***********************************************************************
*/
void EnableCleanQRCodeSetTask(void)
{
static uint8_t setStep = 0x00;
switch(setStep)
{
case 0x00:
if(getEnableCleanQRCodeMark == 1)
{
getEnableCleanQRCodeMark = 0;
getConfirmPasswordMark = 0;
setParamChangeMark = 0;
setStep = 0x01;
}
break;
case 0x01:
if(getConfirmPasswordMark == 1)
{
getConfirmPasswordMark = 0;
if(password == getConfirmPassword)
{
printf("\r\n密码校验正确!\r\n");
setEnableCleanQRCodeStatus = getEnableCleanQRCodeStatus;
printf("\r\n“收运二维码开门”功能修改成功!\r\n");
if(setEnableCleanQRCodeStatus == 1)
{
printf("\r\n启用!\r\n");
}else{
printf("\r\n停用!\r\n");
}
setParamSaveMark = 1; //标志有参数进行了修改,需要进行保存
setStep = 0x00;
break;
}else{
printf("\r\n密码校验错误!\r\n");
break;
}
}
if(setParamChangeMark == 1)
{
setParamChangeMark = 0;
setStep = 0x00;
printf("\r\n参数设置命令有切换!!\r\n");
break;
}
break;
default:
break;
}
}
/*
***********************************************************************
* 函 数 名: OverflowSetTask
* 功能说明: 满溢参数设置任务
* 形 参:无
* 返 回 值: 无
***********************************************************************
*/
void OverflowSetTask(void)
{
static uint8_t setStep = 0x00;
switch(setStep)
{
case 0x00:
if(getOverflowSetMark == 1)
{
getOverflowSetMark = 0;
getConfirmPasswordMark = 0;
setParamChangeMark = 0;
printf("\r\n已取得类型,等待确认密码!\r\n");
setStep = 0x01;
}
break;
case 0x01:
if(getConfirmPasswordMark == 1)
{
getConfirmPasswordMark = 0;
if(password == getConfirmPassword)
{
printf("\r\n密码校验正确!\r\n");
setDevChannel1DisDepthVal = getDevChannel1DisDepthVal;
setDevChannel1DisMaxVal = getDevChannel1DisMaxVal;
setDevChannel1DisAlarmPercent = getDevChannel1DisAlarmPercent;
setDevChannel2DisDepthVal = getDevChannel2DisDepthVal;
setDevChannel2DisMaxVal = getDevChannel2DisMaxVal;
setDevChannel2DisAlarmPercent = getDevChannel2DisAlarmPercent;
setDevChannel3DisDepthVal = getDevChannel3DisDepthVal;
setDevChannel3DisMaxVal = getDevChannel3DisMaxVal;
setDevChannel3DisAlarmPercent = getDevChannel3DisAlarmPercent;
setDevChannel4DisDepthVal = getDevChannel4DisDepthVal;
setDevChannel4DisMaxVal = getDevChannel4DisMaxVal;
setDevChannel4DisAlarmPercent = getDevChannel4DisAlarmPercent;
// SetDefaultOverflowAlarmParam(); //当设备类型有变化时则要重新设置满溢报警参数
setParamSaveMark = 1; //标志有参数进行了修改,需要进行保存
setStep = 0x00;
break;
}else{
printf("\r\n密码校验错误!\r\n");
break;
}
}
if(setParamChangeMark == 1)
{
setParamChangeMark = 0;
setStep = 0x00;
printf("\r\n参数设置命令有切换!!\r\n");
break;
}
break;
default:
break;
}
}
/*
***********************************************************************
* 函 数 名: ScaleCalibrationTask
* 功能说明: 称盘校准任务
* 形 参:无
* 返 回 值: 无
***********************************************************************
*/
void ScaleCalibrationTask(void)
{
static uint8_t setStep = 0x00;
static timer waitingTimer;
static timer waitingTimer1S;
static timer waitingExitTimer;
static uint8_t timer_ok = 0;
if(timer_ok == 0)
{
timer_ok = 1;
timer_set(&waitingTimer, CLOCK_SECOND*3);
timer_set(&waitingTimer1S, CLOCK_SECOND*1);
timer_set(&waitingExitTimer, CLOCK_SECOND*20);
}
switch(setStep)
{
case 0x00: //初始状态
if(getScaleCalibrationMark == 1)
{
getScaleCalibrationMark = 0;
getConfirmPasswordMark = 0; //确认密码标志清零
setParamChangeMark = 0; //指令切换标志清零
setStep = 0x01;
}
break;
case 0x01: //校验密码
if(getConfirmPasswordMark == 1)
{
getConfirmPasswordMark = 0;
if(password == getConfirmPassword)
{
printf("\r\n密码校验正确!\r\n");
printf("\r\n开启称盘校准!\r\n");
setStep = 0x02;
break;
}else{
printf("\r\n密码校验错误!\r\n");
break;
}
}
if(setParamChangeMark == 1)
{
setParamChangeMark = 0;
setStep = 0x00;
printf("\r\n参数设置命令有切换!!\r\n");
break;
}
break;
case 0x02: //正在启动进入校准
Screen_ScaleCalibraEnter(getScaleNum); //显示正在校准
if(getScaleNum == 0)
{
if(deviceWorkStatus == 1)
{
Screen_Default();
}else{
Screen_DeviceDisable();
}
setStep = 0x00;
break;
}
scaleNum = getScaleNum;
getCalibraZeroMark1 = 0;
getCalibraZeroMark2 = 0;
beep_contSlowBeepMark = 1;
M_S_CommandSend(0xA1);
timer_restart(&waitingExitTimer);
setStep = 0x03;
break;
case 0x3: //等待称重模块回应取得零点
if(timer_expired(&waitingExitTimer))
{
printf("\r\n取得校准零点超时退出!\r\n");
beep_contSlowBeepMark = 0;
setStep = 0x10;
}
switch(getScaleNum)
{
case 1: //称盘1
if(getCalibraZeroMark1 == 1)
{
printf("\r\n收到称1校准零点!\r\n");
Screen_ScaleCalibraStart(getScaleNum);
getCalibraParamOkMark1 = 0;
beep_contSlowBeepMark = 0;
beep_contFastBeepMark = 1;
timer_restart(&waitingExitTimer);
setStep = 0x04;
break;
}
break;
case 2: //称盘2
if(getCalibraZeroMark2 == 1)
{
printf("\r\n收到称2校准零点!\r\n");
Screen_ScaleCalibraStart(getScaleNum);
getCalibraParamOkMark2 = 0;
beep_contSlowBeepMark = 0;
beep_contFastBeepMark = 1;
timer_restart(&waitingExitTimer);
setStep = 0x04;
break;
}
break;
default:
setStep = 0x00;
break;
}
break;
case 0x04: //等待校准完成
if(timer_expired(&waitingExitTimer))
{
printf("\r\n取得校准零点超时退出!\r\n");
beep_contFastBeepMark = 0;
setStep = 0x10;
break;
}
switch(getScaleNum)
{
case 1: //称盘1
if(getCalibraParamOkMark1 == 1)
{
printf("\r\n收到称1校准完成!\r\n");
Screen_ScaleCalibraFinish(getScaleNum);
beep_contFastBeepMark = 0;
beep_longBeepMark = 1;
timer_restart(&waitingTimer);
setStep = 0x05;
break;
}
break;
case 2: //称盘2
if(getCalibraParamOkMark2 == 1)
{
printf("\r\n收到称2校准完成!\r\n");
Screen_ScaleCalibraFinish(getScaleNum);
beep_contFastBeepMark = 0;
beep_longBeepMark = 1;
timer_restart(&waitingTimer);
setStep = 0x05;
break;
}
break;
default:
setStep = 0x00;
break;
}
break;
case 0x05: //退出
if(timer_expired(&waitingTimer))
{
beep_contSlowBeepMark = 0;
beep_contFastBeepMark = 0;
if(deviceWorkStatus == 1)
{
Screen_Default();
}else{
Screen_DeviceDisable();
}
setStep = 0x00;
}
break;
case 0x10: //校准失败重启称重模块电源
// ScalePowerOFF(1);
// ScalePowerOFF(2);
M_S_CommandSend(0xA5);
timer_restart(&waitingTimer1S);
setStep = 0x11;
break;
case 0x11: //校准失败重启称重模块电源
if(timer_expired(&waitingTimer1S))
{
// ScalePowerON(1);
// ScalePowerON(2);
setStep = 0x05;
}
break;
default:
break;
}
}
/*
***********************************************************************
* 函 数 名: BoxOpenSetTask
* 功能说明: 临时打开收运清理门操作任务
* 形 参:无
* 返 回 值: 无
***********************************************************************
*/
void BoxOpenSetTask(void)
{
static uint8_t setStep = 0x00;
switch(setStep)
{
case 0x00:
if(getBoxOpenMark == 1)
{
getBoxOpenMark = 0;
boxOpenMark = 1;
printf("\r\n准备打开收运门!\r\n");
setStep = 0x00;
}
break;
default:
break;
}
}
// void BoxOpenSetTask(void)
// {
// static uint8_t setStep = 0x00;
//
// switch(setStep)
// {
// case 0x00:
// if(getBoxOpenMark == 1)
// {
// getBoxOpenMark = 0;
// getConfirmPasswordMark = 0;
// setParamChangeMark = 0;
// setStep = 0x01;
// }
// break;
//
// case 0x01:
// if(getConfirmPasswordMark == 1)
// {
// getConfirmPasswordMark = 0;
// if(password == getConfirmPassword)
// {
// printf("\r\n密码校验正确!\r\n");
// boxOpenMark = 1;
// printf("\r\n准备打开收运门!\r\n");
// setStep = 0x00;
// break;
// }else{
// printf("\r\n密码校验错误!\r\n");
// break;
// }
// }
//
// if(setParamChangeMark == 1)
// {
// setParamChangeMark = 0;
// setStep = 0x00;
// printf("\r\n参数设置命令有切换!!\r\n");
// break;
// }
// break;
//
// default:
// break;
// }
// }
/*
***********************************************************************
* 函 数 名: DeviceParamResetTask
* 功能说明: 设备参数恢复出厂设置
* 形 参:无
* 返 回 值: 无
***********************************************************************
*/
void DeviceParamResetTask(void)
{
static uint8_t setStep = 0x00;
switch(setStep)
{
case 0x00:
if(getDeviceParamResetMark == 1)
{
getDeviceParamResetMark = 0;
getConfirmPasswordMark = 0;
setParamChangeMark = 0;
setStep = 0x01;
}
break;
case 0x01:
if(PasswordCheck() == 1)
{
printf("\r\n开始恢复设备参数!\r\n");
ResetDeviceConfig();
beep_shortBeepMark = 1;
// DeviceConfigParamInit(); //设备配置参数初始化
getDeviceParamResetMark = 0;
setStep = 0x10;
break;
}
if(setParamChangeMark == 1)
{
setParamChangeMark = 0;
getDeviceParamResetMark = 0;
setStep = 0x00;
printf("\r\n参数设置命令有切换!!\r\n");
break;
}
break;
case 0x10:
while(1); //参数恢复完成后重启系统
break;
default:
break;
}
}
/*
***********************************************************************
* 函 数 名: ParamSaveTask
* 功能说明: 设备参数保存任务(有参数修改确认,则需要进行保存)
* 形 参:无
* 返 回 值: 无
***********************************************************************
*/
void ParamSaveTask(void)
{
static uint8_t setStep = 0x00;
static timer waitingTimer;
static uint8_t timer_ok = 0;
if(timer_ok == 0)
{
timer_ok = 1;
timer_set(&waitingTimer, CLOCK_SECOND*2); //创建1个定时器,用于电磁锁开启时间控制
}
switch(setStep)
{
case 0x00:
if(setParamSaveMark == 1)
{
setParamSaveMark = 0;
SaveDeviceConfig();
DeviceParamInit(); //参数有变动,则重新初始化设备参数
CalcOverflowStartPointParam();
DeviceInfoShow();
setStep = 0x01;
timer_restart(&waitingTimer);
}
break;
case 0x01:
if(timer_expired(&waitingTimer))
{
if(deviceWorkStatus == 1)
{
Screen_Default();
}else{
Screen_DeviceDisable();
}
setStep = 0x00;
}
break;
case 0x02:
break;
default:
break;
}
}
/*
***********************************************************************
* 函 数 名: ParamSetTask
* 功能说明: 参数设置任务
* 形 参:无
* 返 回 值: 无
***********************************************************************
*/
void ParamSetTask(void)
{
if(devSetQrCodeState == 1)
{
printf("\r\n进入参数设置操作---->\r\n");
devSetQrCodeState = 0;
SetParamDecode(codeBuf); //设置二维码参数解码
}
PasswordSetTask(); //密码修改任务
PasswordCastSetTask(); //强制修改密码任务
DeviceTypeSetTask(); //设备类型设置任务
CustomerIdSetTask(); //客户号设置任务
DisableICCardFunSetTask(); //启用/停用“禁用的IC卡不能开门”功能设置任务
EnableCleanQRCodeSetTask(); //启用/停用“收运二维码开门”功能设置任务
OverflowSetTask(); //满溢参数设置任务
ScaleCalibrationTask(); //称盘校准操作任务
BoxOpenSetTask(); //临时打开收运清理门操作任务
DeviceParamResetTask(); //设备参数恢复出厂设置任务
ParamSaveTask(); //设备参数保存任务
}
/******************** (C) COPYRIGHT 2017 CXHY *****END OF FILE*******************/