📄 distribute.c
字号:
cIsExistNeiXuan=1;
}
// }
}else if(cCurFloorIdx<cLIdx){
for(j=(cCurFloorIdx+1); j<=(cLIdx-1); j++){
if(GetArrayData(pEleData->bNeiXuan, j)==1)
cIsExistNeiXuan=1;
}
}else{
cIsExistNeiXuan=0;
}
}else if((pFangXiang->bShang==0)&&(pFangXiang->bXia==1)){
// for(j=cBottomFloor; j<=(cLIdx-1); j++){
if(cCurFloorIdx>cLIdx){
for(j=(cLIdx+1); j<=(cCurFloorIdx-1); j++){
if(GetArrayData(pEleData->bNeiXuan, j)==1){
cIsExistNeiXuan=1;
}
}
}else if(cCurFloorIdx<cLIdx){
// if(cCurFloorIdx==cBottomFloor){
// cIsExistNeiXuan=0;
// }else{
for(j=cBottomFloor; j<=(cCurFloorIdx-1); j++){
if(GetArrayData(pEleData->bNeiXuan, j)==1)
cIsExistNeiXuan=1;
}
// }
}else{
cIsExistNeiXuan=0;
}
}else{
cIsExistNeiXuan=0;
}
}
if(cIsExistNeiXuan==1)
return 0; //不是"最后一个外呼分配且"中间"无内选"
else
return 1; //最后一个外呼分配且"中间"无内选
return 1; //仅为语法检查
}
/*
//外呼是否是某电梯最后一个外呼分配(当前层与最后一个外呼之间无内选)
uchar IsLastOneDistribution(uchar cLIdx, uchar updown_flg)
{
uchar m_cLNum = LNum_MAX;
uchar m_cENum = m_pL_Data->cENum;
uchar i=0,j=0;
uchar count=0;
E_DianTi *pEleData;
E_FangXiang *pFangXiang; //方向数据
E_XiangYing *pXiangYing; //外呼分配数据
uchar cCurFloorIdx; //当前层
uchar cTopFloor = pEleData->cZuiGaoCeng-1; //可到最高层(-1是因为楼层计数从1开始)
uchar cBottomFloor = pEleData->cZuiDiCeng-1; //可到最底层(-1是因为楼层计数从1开始)
uchar cJudgeStart=0;
uchar cJudgeEnd=0;
uchar cIsExistNeiXuan=0;
for(i=0; i<m_cENum; i++){
pEleData = &(m_pE_InputData->mDianTi[i]);
pFangXiang = &(pEleData->FangXiang); //方向数据
pXiangYing = &(m_pE_OutputData->mXiangYing[i]); //外呼分配数据
cCurFloorIdx = pEleData->cDangQianCeng-1; //当前层
cTopFloor = pEleData->cZuiGaoCeng-1; //可到最高层(-1是因为楼层计数从1开始)
cBottomFloor= pEleData->cZuiDiCeng-1; //可到最底层(-1是因为楼层计数从1开始)
cIsExistNeiXuan=0;
if(updown_flg ==D_Up){ //上呼
// if(pXiangYing->bShang[cLIdx]==1){
if(GetArrayData(pXiangYing->bShang, cLIdx)==1){
count=0;
//第i部电梯的外呼分配数
for(j=0; j<m_cLNum; j++){
// if(pXiangYing->bShang[j]==1)
if(GetArrayData(pXiangYing->bShang, j)==1)
count++;
// if(pXiangYing->bXia[j]==1)
if(GetArrayData(pXiangYing->bXia, j)==1)
count++;
}
//当前层沿着运行方向是否有内选
if((pFangXiang->bShang==1)&&(pXiangYing->bXia==0)){
if(cCurFloorIdx>cLIdx){
if(cCurFloorIdx==cTopFloor){
cIsExistNeiXuan=0;
}else{
for(j=cCurFloorIdx; j<=cTopFloor; j++){
if(GetArrayData(pEleData->bNeiXuan, j)==1)
cIsExistNeiXuan=1;
}
}
}else if(cCurFloorIdx<cLIdx){
for(j=cCurFloorIdx; j<=(cLIdx-1); j++){
if(GetArrayData(pEleData->bNeiXuan, j)==1)
cIsExistNeiXuan=1;
}
}else{
cIsExistNeiXuan=0;
}
}else if((pFangXiang->bShang==0)&&(pFangXiang->bXia==1)){
if(cCurFloorIdx>cLIdx){
for(j=(cLIdx-1); j<=cCurFloorIdx; j++){
if(GetArrayData(pEleData->bNeiXuan, j)==1)
cIsExistNeiXuan=1;
}
}else if(cCurFloorIdx<cLIdx){
if(cIsExistNeiXuan==cBottomFloor){
cIsExistNeiXuan=0;
}else{
for(j=cBottomFloor; j<=cCurFloorIdx; j++){
if(GetArrayData(pEleData->bNeiXuan, j)==1)
cIsExistNeiXuan=1;
}
}
}else{
cIsExistNeiXuan=0;
}
}
if((count==1) && (cIsExistNeiXuan==0)) //最后一个外呼分配(当前层与最后一个外呼之间无内选)
return 1;
// else
// return 0;
}
}else{ //下呼
// if(pXiangYing->bXia[cLIdx]==1){
if(GetArrayData(pXiangYing->bXia, cLIdx)==1){
count=0;
//第i部电梯的外呼分配数
for(j=0; j<m_cLNum; j++){
// if(pXiangYing->bShang[j]==1)
if(GetArrayData(pXiangYing->bShang, j)==1)
count++;
// if(pXiangYing->bXia[j]==1)
if(GetArrayData(pXiangYing->bXia, j)==1)
count++;
}
//当前层与外呼层之间是否有内选
if((pFangXiang->bShang==1)&&(pFangXiang->bXia==0)){
if(cCurFloorIdx>cLIdx){
if(cCurFloorIdx==cTopFloor){
cIsExistNeiXuan=0;
}else{
for(j=cCurFloorIdx; j<=cTopFloor; j++){
if(GetArrayData(pEleData->bNeiXuan, j)==1)
cIsExistNeiXuan=1;
}
}
}else if(cCurFloorIdx<cLIdx){
for(j=cCurFloorIdx; j<=(cLIdx-1); j++){
if(GetArrayData(pEleData->bNeiXuan, j)==1)
cIsExistNeiXuan=1;
}
}else{
cIsExistNeiXuan=0;
}
}else if((pFangXiang->bShang==0)&&(pFangXiang->bXia==1)){
// for(j=cBottomFloor; j<=(cLIdx-1); j++){
if(cCurFloorIdx>cLIdx){
for(j=(cLIdx+1); j<=cCurFloorIdx; j++){
if(GetArrayData(pEleData->bNeiXuan, j)==1){
cIsExistNeiXuan=1;
}
}
}else if(cCurFloorIdx<cLIdx){
if(cCurFloorIdx==cBottomFloor){
cIsExistNeiXuan=0;
}else{
for(j=cBottomFloor; j<=cCurFloorIdx; j++){
if(GetArrayData(pEleData->bNeiXuan, j)==1)
cIsExistNeiXuan=1;
}
}
}else{
cIsExistNeiXuan=0;
}
}
// if(i==2){
// mE_InputData.mDianTi[0].TongXun.bZhiShi=count;
// mE_InputData.mDianTi[3].TongXun.bZhiShi=cIsExistNeiXuan;
// P1_7=0;
// }
if((count==1) && (cIsExistNeiXuan==0)) //最后一个外呼分配
return 1;
// else
// return 0;
}
}
}
return 0;
}
*/
//外呼层是否是某运行中的电梯"当前指向的"目标层
uchar IsSomeoneNextStopFloor(uchar cLIdx, uchar updown_flg)
{
uchar m_cLNum = LNum_MAX;
uchar m_cENum = m_pL_Data->cENum;
uchar i=0;
E_DianTi *pEleData;
E_XiangYing *pXiangYing;
for(i=0; i<m_cENum; i++){
pEleData = &(m_pE_InputData->mDianTi[i]);
pXiangYing = &(m_pE_OutputData->mXiangYing[i]);
if(pEleData->bDongOrJing == 1){ //运动中
if((m_nNextStopLIdx[i]==cLIdx) && (m_bDirect[i]==updown_flg) && (m_InterData[i].bVeto==0)){
if((updown_flg==1)&&(GetArrayData(pXiangYing->bShang, cLIdx)==1))
return 1;
if((updown_flg==0)&&(GetArrayData(pXiangYing->bXia, cLIdx)==1))
return 1;
}
}
}
return 0;
}
//LHM dyn_test temp 动态测试专用(移植时不删除)
void SetNearNextStopFloorLIdx(uchar cEIdx)
{
E_DianTi *pEleData = &(m_pE_InputData->mDianTi[cEIdx]);
E_FangXiang *pFangXiang = &(pEleData->FangXiang);
E_Men *pMen = &(pEleData->Men);
E_MenTime *pMenTime = &(pEleData->MenTime);
E_XiangYing *pXiangYing = &(m_pE_OutputData->mXiangYing[cEIdx]);
uchar cTopFloor = pEleData->cZuiGaoCeng-1; //最高层(-1是因为楼层计数从1开始)
uchar cBottomFloor = pEleData->cZuiDiCeng-1; //最底层(-1是因为楼层计数从1开始)
uchar cNextStopLIdx=0xFE; //下一停靠层索引(0xFF代表搜索完毕)
uchar cCurFloorIdx = pEleData->cDangQianCeng-1;
uchar cStartFloorIdx= pEleData->cDangQianCeng-1;
uint time=0; //时间
uchar bStartDirect=0; //初始搜索方向
uchar bDirect=0; //搜索方向(1:上 0:下)
uchar bEnd=0; //搜索结束标记(1:结束 0:未结束)
uchar cStartSearchEnd=0;
//设定初始搜索方向(搜索方向应该与电梯运动方向一致)
if(pFangXiang->bShang==1 && pFangXiang->bXia==0){ //方向向上,搜索方向按"上->下->上"
bStartDirect = D_Up;
bDirect = D_Up;
}
else if(pFangXiang->bShang==0 && pFangXiang->bXia==1){//方向向下,搜索方向按"下->上->下"
bStartDirect = D_Down;
bDirect = D_Down;
}else{ //无方向,确定运动趋势方向
bStartDirect = GetNoDirectEleTrend(cEIdx);
// bDirect = GetNoDirectEleTrend(cEIdx);
bDirect = bStartDirect;
}
if(cStartFloorIdx == cTopFloor){ //当前层为最高层,搜索方向向下
bStartDirect = D_Down;
bDirect = D_Down;
}
else if(cStartFloorIdx == cBottomFloor){ //当前层为最底层,搜索方向向下
bStartDirect = D_Up;
bDirect = D_Up;
}
//若当前层正好有外呼,判断该电梯是否可以立即响应该外呼,以下情况视为可以立即响应:
//1)外呼层=电梯当前层,无方向
//2)外呼层=电梯当前层,运行方向与外呼方向一致,关门未到位
if(((pFangXiang->bShang==1)&&(pFangXiang->bXia==0)) &&(pEleData->Men.bGuanMenDaoWei==0) &&
((GetArrayData(pXiangYing->bShang, cCurFloorIdx)==1)||(GetArrayData(pEleData->bNeiXuan, cCurFloorIdx)==1)) ){ //都为上向,关门未到位
m_nNextStopLIdx[cEIdx] = cCurFloorIdx;
bDirect = 1; //需确认
m_bDirect[cEIdx] = bDirect;
return;
}else if(((pFangXiang->bShang==0)&&(pFangXiang->bXia==1)) &&(pEleData->Men.bGuanMenDaoWei==0) &&
((GetArrayData(pXiangYing->bXia, cCurFloorIdx)==1)||(GetArrayData(pEleData->bNeiXuan, cCurFloorIdx)==1)) ){ //都为下向,关门未到位
m_nNextStopLIdx[cEIdx] = cCurFloorIdx;
bDirect = 0; //需确认
m_bDirect[cEIdx] = bDirect;
return;
}else if((pFangXiang->bShang==0)&&(pFangXiang->bXia==0)&&((GetArrayData(pXiangYing->bShang,cCurFloorIdx)==1)||(GetArrayData(pXiangYing->bXia,cCurFloorIdx)==1)||(GetArrayData(pEleData->bNeiXuan, cCurFloorIdx)==1))){ //无方向时
m_nNextStopLIdx[cEIdx] = cCurFloorIdx;
if(GetArrayData(pXiangYing->bShang, cCurFloorIdx)==1)
bDirect = 1;
else if(GetArrayData(pXiangYing->bXia, cCurFloorIdx)==1)
bDirect = 0;
m_bDirect[cEIdx] = bDirect;
return;
}
cNextStopLIdx = GetNextStopLIdx(cEIdx, cStartFloorIdx, bStartDirect, &bDirect, &cStartSearchEnd);
m_nNextStopLIdx[cEIdx] = cNextStopLIdx; //最近的下一停靠层
m_bDirect[cEIdx] = bDirect; //方向
}
//2004.11.25 added by LHM 检查3状态(全部在线电梯发生后应消外呼,部分在线电梯消外呼点灯消外呼分配)
void Check3states(void)
{
uchar m_cENum = m_pL_Data->cENum;
uchar i=0;
uchar j=0;
uchar online_count=0;
uchar online_occur_count=0;
for(i=0; i<m_cENum; i++){
if(e_online[i]==1){
online_count++;
if( (mE_InputData.mDianTi[i].TeBie.bJianXiu==0)&&
(mE_InputData.mDianTi[i].TeBie.bSuoTi==0)&&
(mE_InputData.mDianTi[i].TeBie.bXiaoFang==0)){
}else{
//确保取消所有外呼点灯外呼分配
for(j=0; j<ARRAY_BYTENUM; j++){
mE_OutputData.mDeng[i].bShang[j]=0;
mE_OutputData.mDeng[i].bXia[j]=0;
mE_OutputData.mXiangYing[i].bShang[j]=0;
mE_OutputData.mXiangYing[i].bXia[j]=0;
}
online_occur_count++;
}
}
}
//3状态全部发生时的处理
if(online_count<=online_occur_count){
for(i=0; i<ARRAY_BYTENUM; i++){
mE_InputData.mWaiHu.bShang[i]=0;
mE_InputData.mWaiHu.bXia[i]=0;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -