Ejemplo n.º 1
0
int
graph_is_edge (graph_t *g, int a, int b)
{
    int aa, bb;
    unsigned long pos;

    aa = a;
    bb = b;
    if (a == b)
    {
        return 0;
    }

    pos = (unsigned long)BITPOS(aa, bb, g->nodes);
    return (int)BitValue(g->barray, pos);
}
Ejemplo n.º 2
0
bool Sudoku::ScreenPossibility(int pos_x, int pos_y)
{
    bool Modification = false;
    GridLimits Lim;
    int i,j;
    Lim.SetLimits(pos_x, pos_y);
    int possib = possibilities[pos_y-1][pos_x-1];
    //int possib = POS_ALL;
    // for variation in +ve x
    for(i= pos_y - 1, j = pos_x - 1; j < 9; ++j  )
        if(DeleteValue(Grid[i][j], possib))  Modification = true;

    // for variation in -ve x
    for(i= pos_y - 1, j = pos_x - 1; j >= 0; --j )
        if(DeleteValue(Grid[i][j], possib))  Modification = true;

    // for variation in +ve y
    for(i= pos_y - 1, j = pos_x - 1; i < 9; ++i  )
        if(DeleteValue(Grid[i][j], possib))  Modification = true;

    // for variation in -ve y
    for(i= pos_y - 1, j = pos_x - 1; i >= 0; --i )
        if(DeleteValue(Grid[i][j], possib))  Modification = true;

    for(i = Lim.Y_Top; i  <= Lim.Y_End; ++i  )
        for(j = Lim.X_Top; j  <= Lim.X_End; ++j  )
                DeleteValue(Grid[i][j], possib);

    possibilities[pos_y-1][pos_x-1] = possib;

    if (possib == 0x0) // sets the trigger for zero possibilities
        ZeroPossibilities = true;
    //(possibilityCount[pos_y - 1][pos_x -1] -= count);
    //std::cout<<possibilityCount[pos_y - 1][pos_x -1];
    if(SinglePossibilityElement(possib))
        {
            Grid[pos_y-1][pos_x-1] = BitValue(possibilities[pos_y - 1][pos_x -1]);
            //std::cout<<"\n\n Got You!" <<  possibilities[pos_y - 1][pos_x -1]<<"\n";
        }
    return Modification;
}
Ejemplo n.º 3
0
/* returns degress of a node */
int 
graph_node_degree (graph_t *g, int a)
{
    int i, n;
    unsigned int aa, bb;
    unsigned long pos;

    n = 0;
    for (i = 0; i < g->nodes; i++)
    {
        aa = (unsigned int)a;
        bb = (unsigned int)i;
        pos = 0;
        pos = (unsigned long)BITPOS(aa,bb,g->nodes); 
        if (BitValue(g->barray,pos) && (a != i))
        {
            n++;
        }
    }
    return n;
}
Ejemplo n.º 4
0
void 
print_graph (graph_t *g)
{
    int n;
    int i;
    unsigned long pos;
    int j = 0;

    n = g->nodes;
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < n; j++)
        {
            if (j > i)
            {
                pos = (unsigned long)BITPOS(i,j,g->nodes);
                if (BitValue(g->barray, pos))
                {
                    printf ("e %2d %2d\n", i, j);
                }
            }
        }
    }
}
Ejemplo n.º 5
0
uchar AngleMode(void)
{
#define CON_ANGLEMODE_POINT_VI      0   // 80
#define CON_ANGLEMODE_POINT_DELAY1  100
#define CON_ANGLEMODE_POINT_DELAY2  120
#define CON_ANGLEMODE_POINT_DELAY3  140
#define CON_ANGLEMODE_POINT_DELAY4  160
#define CON_ANGLEMODE_POINT_VV      1   // 180
#define CON_ANGLEMODE_POINT_MAX     2   // 250
    uchar n;
    u16 uiTemp;
        // AA    第0 秒不处理    AAA
    if(0==RSOFT_RTC_SECOND)
    {
        return DLT_RET_SUCC;
    }
    else
    {
        {
            if(ucAde7878CfModeTime<CON_ADE7878_CFMODE_TIME_MAX)
            {
                return DLT_RET_SUCC;
            }
            if(CON_ANGLEMODE_POINT_VI==ucAngleModePoint)
            {
// AA----各相电压和各相电流之间的夹角--->Start----AAA
                for(n=0;n<3;n++)
                { 
                    if(1==ReadADReg(TB_AD7878_ANGLE[n],2, &Wr_data[0]))
                    { 
						uiTemp=Wr_data[0];
						uiTemp=uiTemp*256+Wr_data[1];
						uiTemp = ((ulong)uiTemp)*7042/10000;
                        // 当前相电流小于启动电流或者当前相电压欠压,不判断该相角度
                        if(0==JudjeFunction05Ib(n))
                        {
                            uiTemp=0;
                        }
                        if(BitValue(n)==(ucVoltageLowStatusABC&BitValue(n)))
                        {
                            uiTemp=0;
                        }
                        IntToData2BCD(uiTemp,&RAM[RAM_CURRENT_ANGLE_AV_AI+CON_ANGLE_DATA_LEN*n]);// xxxx dot xxxx
                    }
                }
                if(PROGFUNCTION_TYPE_METER_TYPE==METERTYPE_3_3)
                {
                    memset(&RAM[RAM_CURRENT_ANGLE_AV_AI+CON_ANGLE_DATA_LEN*1], 0x00, CON_ANGLE_DATA_LEN);
                }
// AA----各相电压和各相电流之间的夹角--->End----AAA
                /*if(1!=ReadADRegResumeData(AD_VIRTUALREG_CHECKSUMSAVE0,4,&Wr_data[0]))
                {
                    memset(&Wr_data[0], 0xff, 4);
                }
                if(4==TestZeroNum(&Wr_data[0], 4))
                {
                    ReadADReg(AD_COMPMODE,2,&Wr_data[0]);
                    Wr_data[0]=0x02;
                }
                else*/
                {
                    Wr_data[0]=0x02;
                    Wr_data[1]=0x3f;
                }
                WriteADReg(&Wr_data[0],AD_COMPMODE,2);
//              Delay(41000);//aaa 30mS=41000   aaa             
            }   
            /*if(CON_ANGLEMODE_POINT_DELAY1==ucAngleModePoint)
            {
                SysDelayMs(7);
            }
            if(CON_ANGLEMODE_POINT_DELAY2==ucAngleModePoint)
            {
                SysDelayMs(7);
            }
            if(CON_ANGLEMODE_POINT_DELAY3==ucAngleModePoint)
            {
                SysDelayMs(7);
            }
            if(CON_ANGLEMODE_POINT_DELAY4==ucAngleModePoint)
            {
                SysDelayMs(7);
            }*/
            if(CON_ANGLEMODE_POINT_VV==ucAngleModePoint)
            {
// AA----A相电压和各相电压之间的夹角--->Start----AAA
                if(PROGFUNCTION_TYPE_METER_TYPE==METERTYPE_3_3)
                {
                    // AA----ANGLE0=AC----AA
                    if(1==ReadADReg(TB_AD7878_ANGLE[0],2, &Wr_data[0]))
                    { 
						uiTemp=Wr_data[0];
						uiTemp=uiTemp*256+Wr_data[1];
						uiTemp = ((ulong)uiTemp)*7042/10000;
                        IntToData2BCD(uiTemp,&RAM[RAM_CURRENT_ANGLE_AV_AV+CON_ANGLE_DATA_LEN*2]);// xxxx dot xxxx
                    }
                    
                    memset(&RAM[RAM_CURRENT_ANGLE_AV_AV+CON_ANGLE_DATA_LEN*0], 0x00, CON_ANGLE_DATA_LEN);
                    memset(&RAM[RAM_CURRENT_ANGLE_AV_AV+CON_ANGLE_DATA_LEN*1], 0x00, CON_ANGLE_DATA_LEN);
                    if((0x05&ucVoltageLowStatusABC))
                    {
                        memset(&RAM[RAM_CURRENT_ANGLE_AV_AV+CON_ANGLE_DATA_LEN*2], 0x00, CON_ANGLE_DATA_LEN);
                    }
                    
                }
                else
                {
                    // AA----A------AA
                    memset(&RAM[RAM_CURRENT_ANGLE_AV_AV+CON_ANGLE_DATA_LEN*0], 0x00, CON_ANGLE_DATA_LEN);
                    // AA----ANGLE2=AB----AA
                    if(1==ReadADReg(TB_AD7878_ANGLE[2],2, &Wr_data[0]))
                    { 
						uiTemp=Wr_data[0];
						uiTemp=uiTemp*256+Wr_data[1];
						uiTemp = ((ulong)uiTemp)*7042/10000;
                        IntToData2BCD(uiTemp,&RAM[RAM_CURRENT_ANGLE_AV_AV+CON_ANGLE_DATA_LEN*1]);// xxxx dot xxxx
                    }
                    if(0x01&ucVoltageLowStatusABC)
                    {
                        memset(&RAM[RAM_CURRENT_ANGLE_AV_AV+CON_ANGLE_DATA_LEN*1], 0x00, CON_ANGLE_DATA_LEN);
                        // AA----ANGLE0=AC----AA
                        if(1==ReadADReg(TB_AD7878_ANGLE[1],2, &Wr_data[0]))
                        { 
							uiTemp=Wr_data[0];
							uiTemp=uiTemp*256+Wr_data[1];
							uiTemp = ((ulong)uiTemp)*7042/10000;
                            IntToData2BCD(uiTemp,&RAM[RAM_CURRENT_ANGLE_AV_AV+CON_ANGLE_DATA_LEN*2]);// xxxx dot xxxx
                        }
                    }
                    else
                    {
                        // AA----ANGLE0=AC----AA
                        if(1==ReadADReg(TB_AD7878_ANGLE[0],2, &Wr_data[0]))
                        { 
							uiTemp=Wr_data[0];
							uiTemp=uiTemp*256+Wr_data[1];
							uiTemp = ((ulong)uiTemp)*7042/10000;
                            IntToData2BCD(uiTemp,&RAM[RAM_CURRENT_ANGLE_AV_AV+CON_ANGLE_DATA_LEN*2]);// xxxx dot xxxx
                        }
                    }
                    if(0x03==(0x03&ucVoltageLowStatusABC))
                    {
                        memset(&RAM[RAM_CURRENT_ANGLE_AV_AV+CON_ANGLE_DATA_LEN*0], 0x00, CON_ANGLE_DATA_LEN);
                        memset(&RAM[RAM_CURRENT_ANGLE_AV_AV+CON_ANGLE_DATA_LEN*1], 0x00, CON_ANGLE_DATA_LEN);
                        memset(&RAM[RAM_CURRENT_ANGLE_AV_AV+CON_ANGLE_DATA_LEN*2], 0x00, CON_ANGLE_DATA_LEN);
                    }
                    if(0x02==(0x02&ucVoltageLowStatusABC))
                    {
                        memset(&RAM[RAM_CURRENT_ANGLE_AV_AV+CON_ANGLE_DATA_LEN*1], 0x00, CON_ANGLE_DATA_LEN);
                    }
                    if(0x04==(0x04&ucVoltageLowStatusABC))
                    {
                        memset(&RAM[RAM_CURRENT_ANGLE_AV_AV+CON_ANGLE_DATA_LEN*2], 0x00, CON_ANGLE_DATA_LEN);
                    }
                }
// AA----A相电压和各相电压之间的夹角--->End---AAA
// AA----A相电压和各相电流之间的夹角--->Start----AAA
                //AA           ANGLE --->AV and AI
                RAM[RAM_CURRENT_ANGLE_AI_AV+0]=RAM[RAM_CURRENT_ANGLE_AV_AI+0];
                RAM[RAM_CURRENT_ANGLE_AI_AV+1]=RAM[RAM_CURRENT_ANGLE_AV_AI+1];
                //AA           ANGLE --->AV and BI
                if(PROGFUNCTION_TYPE_METER_TYPE==METERTYPE_3_3)
                {
                    memset(&RAM[RAM_CURRENT_ANGLE_AI_AV+CON_ANGLE_DATA_LEN*1], 0x00, CON_ANGLE_DATA_LEN);
                }
                else
                {
                    uiTemp=ValueHexFromRam2Bcd(RAM_CURRENT_ANGLE_AV_AV+CON_ANGLE_DATA_LEN*1+0)+ValueHexFromRam2Bcd(RAM_CURRENT_ANGLE_AV_AI+CON_ANGLE_DATA_LEN*1+0);
                    uiTemp=uiTemp%3600;
                    IntToData2BCD(uiTemp,&RAM[RAM_CURRENT_ANGLE_AI_AV+CON_ANGLE_DATA_LEN*1]);
                }
                //AA           ANGLE --->AV and BI
                uiTemp=ValueHexFromRam2Bcd(RAM_CURRENT_ANGLE_AV_AV+CON_ANGLE_DATA_LEN*2+0)+ValueHexFromRam2Bcd(RAM_CURRENT_ANGLE_AV_AI+CON_ANGLE_DATA_LEN*2+0);
                uiTemp=uiTemp%3600;
                IntToData2BCD(uiTemp,&RAM[RAM_CURRENT_ANGLE_AI_AV+CON_ANGLE_DATA_LEN*2]);
// AA----A相电压和各相电流之间的夹角--->End----AAA

// AA----三相三线电压相序判断--->Start----AAA
/*   
// AA  关于三相三线电压逆向序判断的分析  AA
// AA  在一般的情况下,三相三线的AC相位差都是300度左右  AA
// AA  在逆相序的情况下,三相三线的AC的相位差在60度  AA
// AA  所以,个人认为,要是小于180度,则认为是逆相序了。  AA
// AA    AA
*/
                if(PROGFUNCTION_TYPE_METER_TYPE==METERTYPE_3_3)
                {
                    if(0==(0x05&ucVoltageLowStatusABC))
                    {
                        uiTemp=ValueHexFromRam2Bcd(RAM_CURRENT_ANGLE_AV_AV+CON_ANGLE_DATA_LEN*2+0);
                        if(uiTemp<1800)
                        
                        {
                            status_5460_1=0x80;
                        }
                        else
                        {
                            status_5460_1=0x00;
                        }
                    }
                }
                else
                {
                    //三相三线是错的,但四线是准的
                    if(1==ReadADReg(AD_STATUS1,4, &Wr_data[0]))
                    {
                        if((0x8&Wr_data[1])==0)
                        {
                            status_5460_1=0x00;
                        }
                        else
                        {
                            status_5460_1=0x80;
                        }
                    }
                    memset(&Wr_data[0], 0xFF, 4);
                    WriteADReg(&Wr_data[0], AD_STATUS1, 4);
                } 

// AA----三相三线电压相序判断--->End----AAA




// AA----三线四线电流相序判断--->Start----AAA
                if(PROGFUNCTION_TYPE_METER_TYPE!=METERTYPE_3_3)
                //  AA  ----三相四线的情况下-------   AAA
                {
                    if((0==ucVoltageLowStatusABC)&&(0==(0x80&status_5460_1)))
                    //  AA  ----不断相的情况下-------   AAA
                    {
                        if(3==(JudjeFunction05Ib(0)+JudjeFunction05Ib(1)+JudjeFunction05Ib(2)))
                        //  AA  ----电流比较大的情况下-------   AAA
                        {
/*   
// AA  关于电流逆向序的分析  AA
// AA  |  各种类型  -->     3者关系 | 相序   |AA

// AA  |   A>B A>C B>C  -->     A>B>C       | ERR    |  AA 
// AA  |   A>B A>C B<C  -->     A>C>B       | OK     |  AA 

// AA  |   A>B A<C B>C  -->     ERR         | ERR    |  AA 
// AA  |   A>B A<C B<C  -->     C>A>B       | ERR    |  AA 


// AA  |   A<B A>C B>C  -->     B>A>C       | OK     |  AA 
// AA  |   A<B A>C B<C  -->     ERR         | ERR    |  AA 

// AA  |   A<B A<C B>C  -->     B>C>A       | ERR    |  AA 
// AA  |   A<B A<C B<C  -->     C>B>A       | OK     |  AA 

// AA  通过分析,判定只有3 种情况下电流不逆向序  AA
// AA  其他情况下,电流都是逆向序的  AA

*/
                            ORDERCURRENTSTATUS_NO;
                            if(Bcd2DataToInt(&RAM[RAM_CURRENT_ANGLE_AI_AV+CON_ANGLE_DATA_LEN*0])>Bcd2DataToInt(&RAM[RAM_CURRENT_ANGLE_AI_AV+CON_ANGLE_DATA_LEN*1])) // a>b
                            {
                                if(Bcd2DataToInt(&RAM[RAM_CURRENT_ANGLE_AI_AV+CON_ANGLE_DATA_LEN*1])>Bcd2DataToInt(&RAM[RAM_CURRENT_ANGLE_AI_AV+CON_ANGLE_DATA_LEN*2]))     // b>c
                                {
                                    ORDERCURRENTSTATUS_YES; // A>B>C
                                }
                                if(Bcd2DataToInt(&RAM[RAM_CURRENT_ANGLE_AI_AV+CON_ANGLE_DATA_LEN*2])>Bcd2DataToInt(&RAM[RAM_CURRENT_ANGLE_AI_AV+CON_ANGLE_DATA_LEN*0]))     // b>c
                                {
                                    ORDERCURRENTSTATUS_YES; // C>A>B
                                }
                            }
                            else
                            {
                                if((Bcd2DataToInt(&RAM[RAM_CURRENT_ANGLE_AI_AV+CON_ANGLE_DATA_LEN*1])>Bcd2DataToInt(&RAM[RAM_CURRENT_ANGLE_AI_AV+CON_ANGLE_DATA_LEN*2]))
                                    &&(Bcd2DataToInt(&RAM[RAM_CURRENT_ANGLE_AI_AV+CON_ANGLE_DATA_LEN*2])>Bcd2DataToInt(&RAM[RAM_CURRENT_ANGLE_AI_AV+CON_ANGLE_DATA_LEN*0])))
                                {
                                    ORDERCURRENTSTATUS_YES; // B>C>A
                                }
                            }
                        }
                    }
                }
// AA----三线四线电流相序判断--->End----AAA
                else
// AA----三相三线电流相序判断--->Start----AAA
                {

                    if((0==(0x05&ucVoltageLowStatusABC))&&(2==(JudjeFunction05Ib(0)+JudjeFunction05Ib(2))))
                    {
                        
                        uiTemp=ValueHexFromRam2Bcd(RAM_CURRENT_ANGLE_AI_AV+CON_ANGLE_DATA_LEN*2+0);
                        if(uiTemp<ValueHexFromRam2Bcd(RAM_CURRENT_ANGLE_AI_AV+CON_ANGLE_DATA_LEN*0+0))
                        {
                            uiTemp=uiTemp+3600;
                        }
                        uiTemp=uiTemp-ValueHexFromRam2Bcd(RAM_CURRENT_ANGLE_AI_AV+CON_ANGLE_DATA_LEN*0+0);
                        
                        if(uiTemp<1800)
                        
                        {
                            ORDERCURRENTSTATUS_YES;
                        }
                        else
                        {
                            ORDERCURRENTSTATUS_NO;
                        }
                    }
                    
                }
// AA----三相三线电流相序判断--->End----AAA
                
                /*if(1!=ReadADRegResumeData(AD_VIRTUALREG_CHECKSUMSAVE0,4,&Wr_data[0]))
                {
                    memset(&Wr_data[0], 0xff, 4);
                }
                if(4==TestZeroNum(&Wr_data[0], 4))
                {
                    ReadADReg(AD_COMPMODE,2,&Wr_data[0]);
                    Wr_data[0] =0x00;
                }
                else*/
                {
                    Wr_data[0]=0x00;
                    Wr_data[1]=0x3f;
                }
                WriteADReg(&Wr_data[0],AD_COMPMODE,2);
            }
            ucAngleModePoint++;
            if(ucAngleModePoint>=CON_ANGLEMODE_POINT_MAX)
            {
                ucAngleModePoint=0;
            }
        }
    }
    return DLT_RET_SUCC;
}