📄 staticstop.c
字号:
#include "global.h"
uchar IsExistEleOnLine();
uchar IsLouExistDistOrInsel();
uchar IsExistDistOrInsel(uchar cEIdx);
uchar IsStaticStopPos();
void SetStaticStopFloor()
{
L_GaoFeng *pZaoGF = &(m_pL_Data->ZaoGF);
L_GaoFeng *pWanGF = &(m_pL_Data->WanGF);
L_SysTime *pSysTime = &(m_pL_Data->mSysTime);
E_DianTi *pEleData;
// E_WaiHu *pWaiHu = &(m_pE_InputData->mWaiHu);
uchar m_cENum = m_pL_Data->cENum;
uchar i=0;
uchar cHour = 0;
uchar cMinute = 0;
uchar cSecond = 0;
uchar cMinBottomLIdx = 0; //最小的可到最低层
uchar cMaxTopLIdx = 0; //最大的可到最高层
uchar m_cLNum = 0;
uchar m_cCanDistEleCount = 0;
uchar interval = 0; //静态停靠的间隔楼层
uchar cEleIdx=0;
schar cInSelIdx=0;
//静态超时时间
uint overtime = 0;
if(IsLouExistDistOrInsel()){ //有外呼分配或内选
m_IsExistWaiInFlg=1;
// mE_InputData.mDianTi[0].TongXun.bZhiShi=1;
}else{ //无外呼分配或内选
//是否一次性数据传输完毕(为静态分配争取时间;注意一定要正确设定最高层最底层)
if(m_once_param_over_flg==1)
return;
m_IsExistWaiInFlg=0;
//静态超时时间
overtime = m_pTimer->lJingTaiTimer/1000;
if((overtime>=m_pL_Data->nTKYanChiTime)){ //"静态超时时间"超过"静态停靠延迟时间"
//若已经在静态停靠层就位,返回
if(IsStaticStopPos())
return;
//取得系统时间(已取得)
// CTime time = CTime::GetCurrentTime();
// pSysTime->mHourMinSec.cHour = m_time;
// pSysTime->mHourMinSec.cMinute = m_minute;
//取得能分配的电梯数(一票否决的电梯不记)
cMinBottomLIdx = GetMinBottomFloor() - 1; //最小的可到最低层
cMaxTopLIdx = GetMaxTopFloor() - 1; //最大的可到最高层
m_cLNum = cMaxTopLIdx - cMinBottomLIdx + 1;
m_cCanDistEleCount = GetCanDistEleCount();
interval = m_cLNum/(m_cCanDistEleCount); //静态停靠的间隔楼层
//设置内选数据(三时段处理方式暂时相同)
if(IsPeekTime(pSysTime,pZaoGF)){
cEleIdx=0;
for(i=0; i<m_cENum; i++){
if(m_InterData[i].bVeto==0){
pEleData = &(m_pE_InputData->mDianTi[i]);
cInSelIdx = LNum_MAX_UNDERGROUND+cEleIdx*interval-pEleData->cJuDiCengShu-LNum_MAX_UNDERGROUND+1;
if((cInSelIdx>0)&&(cInSelIdx<=mE_InputData.mDianTi[i].cXueXiCengShu)){ //所发内选必须限定在1-最大楼层范围之内
m_SendStaticInSelDataFlg[i]=1;
choose_out[i]=cInSelIdx;
yes_no[i]=1;
}
cEleIdx++;
}else{
}
}
}else if(IsPeekTime(pSysTime,pWanGF)){ //晚高峰
cEleIdx=0;
for(i=0; i<m_cENum; i++){
if(m_InterData[i].bVeto==0){
pEleData = &(m_pE_InputData->mDianTi[i]);
cInSelIdx = LNum_MAX_UNDERGROUND+cEleIdx*interval-pEleData->cJuDiCengShu-LNum_MAX_UNDERGROUND+1;
if((cInSelIdx>0)&&(cInSelIdx<=mE_InputData.mDianTi[i].cXueXiCengShu)){ //所发内选必须限定在1-最大楼层范围之内
m_SendStaticInSelDataFlg[i]=1;
choose_out[i]=cInSelIdx;
yes_no[i]=1;
}
cEleIdx++;
}else{
}
}
}else{ //其他时段
cEleIdx=0;
for(i=0; i<m_cENum; i++){
if(m_InterData[i].bVeto==0){
pEleData = &(m_pE_InputData->mDianTi[i]);
cInSelIdx = LNum_MAX_UNDERGROUND+cEleIdx*interval-pEleData->cJuDiCengShu-LNum_MAX_UNDERGROUND+1;
if((cInSelIdx>0)&&(cInSelIdx<=mE_InputData.mDianTi[i].cXueXiCengShu)){ //所发内选必须限定在1-最大楼层范围之内
m_SendStaticInSelDataFlg[i]=1;
choose_out[i]=cInSelIdx;
yes_no[i]=1;
}
cEleIdx++;
}else{
}
}
}
}else{ //静态时间未到
//do nothing
}
}
}
//所有群控电梯是否有外呼分配或内选
uchar IsLouExistDistOrInsel()
{
uchar m_cENum = m_pL_Data->cENum;
uchar i=0;
for(i=0; i<m_cENum; i++){
if(IsExistDistOrInsel(i)){
return 1;
}
}
return 0;
}
//设置高峰停靠层(仅在从上向下运行时,停在高峰停靠层)
void SetPeekStopFloor()
{
L_GaoFeng *pZaoGF = &(m_pL_Data->ZaoGF);
L_GaoFeng *pWanGF = &(m_pL_Data->WanGF);
L_SysTime *pSysTime = &(m_pL_Data->mSysTime);
E_FangXiang *pFangXiang /*= &(pEleData->FangXiang)*/;
E_DianTi *pEleData;
uchar m_cENum = m_pL_Data->cENum;
uchar i=0;
uchar cHour = 0;
uchar cMinute = 0;
uchar cSecond = 0;
uchar cInSelIdx=0;
if(IsPeekTime(pSysTime,pZaoGF)){ //早高峰
for(i=0; i<m_cENum; i++){
if(m_InterData[i].bVeto==0){
pEleData = &(m_pE_InputData->mDianTi[i]);
pFangXiang = &(pEleData->FangXiang);
if(GetArrayData(pEleData->bNeiXuan, pEleData->cZaoGFCeng)==0)
if((pFangXiang->bShang==0)&&(pFangXiang->bXia==1)){
cInSelIdx = pEleData->cZaoGFCeng-LNum_MAX_UNDERGROUND;
// cInSelIdx = pEleData->cZaoGFCeng;
m_SendPeekInSelDataFlg[i]=1;
choose_out[i]=cInSelIdx;
yes_no[i]=1;
}
}
}
}else if(IsPeekTime(pSysTime,pWanGF)){ //晚高峰
}else{ //其他时段
}
}
//是否至少有一路电梯群控在线
uchar IsExistEleOnLine()
{
uchar m_cENum = m_pL_Data->cENum;
uchar i=0;
for(i=0; i<m_cENum; i++){
if(e_online[i]==1){
return 1;
}
}
return 0;
}
//当前层以上是否有外呼或内选
//2004.05.20 added by LHM
uchar IsExistCurFloorUp(uchar cEIdx)
{
E_DianTi *pEleData = &(m_pE_InputData->mDianTi[cEIdx]);
// E_WaiHu *pWaiHu = &(m_pE_InputData->mWaiHu);//外呼分配数据
E_XiangYing *pXiangYing = &(m_pE_OutputData->mXiangYing[cEIdx]);//外呼分配数据
uchar cTopFloor = pEleData->cZuiGaoCeng-1;
uchar cBottomFloor = pEleData->cZuiDiCeng-1;
uchar cCurFloorIdx = pEleData->cDangQianCeng-1;
uchar i=0;
// if(cCurFloorIdx==cTopFloor)
// return 0;
for(i=(cCurFloorIdx+1); i<=cTopFloor; i++){
if((GetArrayData(pXiangYing->bShang, i)==1) || (GetArrayData(pEleData->bNeiXuan, i)==1))
return 1;
}
// for(i=0; i<ARRAY_BYTENUM; i++){
// if((pXiangYing->bShang[i]==1) || (pXiangYing->bXia[i]==1) || (pEleData->bNeiXuan[i]==1))
// return 1;
// }
//end
return 0;
}
//当前层以下是否有外呼或内选
//2004.05.20 added by LHM
uchar IsExistCurFloorDown(uchar cEIdx)
{
E_DianTi *pEleData = &(m_pE_InputData->mDianTi[cEIdx]);
// E_WaiHu *pWaiHu = &(m_pE_InputData->mWaiHu);//外呼分配数据
E_XiangYing *pXiangYing = &(m_pE_OutputData->mXiangYing[cEIdx]);//外呼分配数据
uchar cTopFloor = pEleData->cZuiGaoCeng-1;
uchar cBottomFloor = pEleData->cZuiDiCeng-1;
uchar cCurFloorIdx = pEleData->cDangQianCeng-1;
uchar i=0;
if(cCurFloorIdx==cBottomFloor)
return 0;
for(i=(cCurFloorIdx-1); i<=cBottomFloor; i--){
if((GetArrayData(pXiangYing->bXia, i)==1) || (GetArrayData(pEleData->bNeiXuan, i)==1))
return 1;
}
// for(i=0; i<ARRAY_BYTENUM; i++){
// if((pXiangYing->bShang[i]==1) || (pXiangYing->bXia[i]==1) || (pEleData->bNeiXuan[i]==1))
// return 1;
// }
//end
return 0;
}
//第cEIdx电梯是否有外呼分配或内选
uchar IsExistDistOrInsel(uchar cEIdx)
{
E_DianTi *pEleData = &(m_pE_InputData->mDianTi[cEIdx]);
E_XiangYing *pXiangYing = &(m_pE_OutputData->mXiangYing[cEIdx]);//外呼分配数据
uchar cTopFloor = pEleData->cZuiGaoCeng-1;
uchar cBottomFloor = pEleData->cZuiDiCeng-1;
uchar i=0;
//2004.05.12 LHM
// for(i=cBottomFloor; i<=cTopFloor; i++){
// if((GetArrayData(pXiangYing->bShang, i)==1) || (GetArrayData(pXiangYing->bXia, i)==1) || (GetArrayData(pEleData->bNeiXuan, i)==1))
// return 1;
// }
for(i=0; i<ARRAY_BYTENUM; i++){
if((pXiangYing->bShang[i]!=0) || (pXiangYing->bXia[i]!=0) || (pEleData->bNeiXuan[i]!=0))
return 1;
}
//end
return 0;
}
//各电梯是否在静态停靠层停靠
uchar IsStaticStopPos()
{
E_DianTi *pEleData;
uchar cMinBottomLIdx = GetMinBottomFloor() - 1; //最小的可到最低层
uchar cMaxTopLIdx = GetMaxTopFloor() - 1; //最大的可到最高层
uchar m_cLNum = cMaxTopLIdx - cMinBottomLIdx + 1;
uchar m_cCanDistEleCount = GetCanDistEleCount();
uchar m_cENum = m_pL_Data->cENum;
uchar interval = m_cLNum/(m_cCanDistEleCount); //静态停靠层间隔
uchar accCnt = 0;
uchar i=0;
uchar j=0;
for(i=0; i<m_cCanDistEleCount; i++){
if(i==0){
for(j=0; j<m_cENum; j++){
pEleData = &(m_pE_InputData->mDianTi[j]);
if((pEleData->cDangQianCeng==(LNum_MAX_UNDERGROUND+1))&&(m_InterData[j].bVeto==0)){
accCnt++;
//若有两部及以上电梯停靠在同一层,只记一部
break;
}
}
}else if((i!=(m_cCanDistEleCount-1)) && (i!=0)){
for(j=0; j<m_cENum; j++){
pEleData = &(m_pE_InputData->mDianTi[j]);
if((pEleData->cDangQianCeng==(LNum_MAX_UNDERGROUND+i*interval+1))&&(m_InterData[j].bVeto==0)){
accCnt++;
//若有两部及以上电梯停靠在同一层,只记一部
break;
}
}
}else{ //最高层
for(j=0; j<m_cENum; j++){
pEleData = &(m_pE_InputData->mDianTi[j]);
if((pEleData->cDangQianCeng==(cMaxTopLIdx+1))&&(m_InterData[j].bVeto==0)){
accCnt++;
//若有两部及以上电梯停靠在同一层,只记一部
break;
}
}
}
}
if(accCnt==m_cCanDistEleCount)
return 1;
else
return 0;
return 1;
}
//判断当前时间是否是高峰时间
uchar IsPeekTime(L_SysTime *pSysTime, L_GaoFeng *pGaoFeng)
{
uchar ret=0;
uint nHour=0;
uint nMinute=0;
uint nsystime=0;
uint nstarttime=0;
uint nendtime=0;
//构造自定义的时间变量
nHour=pSysTime->mHourMinSec.cHour;
nMinute=pSysTime->mHourMinSec.cMinute;
nsystime=(nHour<<8)|nMinute;
nHour=pGaoFeng->lStartTime.cHour;
nMinute=pGaoFeng->lStartTime.cMinute;
nstarttime=(nHour<<8)|nMinute;
nHour=pGaoFeng->lEndTime.cHour;
nMinute=pGaoFeng->lEndTime.cMinute;
nendtime=(nHour<<8)|nMinute;
if(nsystime>=nstarttime && nsystime<=nendtime){
ret=1;
}else{
ret=0;
}
return ret;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -