3kmenu2.c

来自「嵌入式开发 嵌入式开发 嵌入式开发」· C语言 代码 · 共 1,816 行 · 第 1/5 页

C
1,816
字号
			{	CommandData[jcnl].Cmd6[3]=0x02;} //计算值和设定值 预套准需要限位
			else
			{	CommandData[jcnl].Cmd6[3]=0x03;} //重复值 暂停
			SendCnlData(jcnl, 0x06);
			SetFlags_ytz(jcnl, 1); //___本通道预套准工作开始
		}
	}
	delay(200); //___为了确保下位机都得到自己的工作方式通知所进行的延时
	for(jcnl=1; jcnl<VarST3000.UnitCounts; jcnl++)
	{
		if( unit[jcnl].submenu1.unitworksnum.i==VarST3000.jobAB &&
			unit[jcnl].submenu1.unitworksnum.j)
		{	SendCnlData(jcnl, 0x0C);}
	}
}

/******************************
 描述: 调用预套准提示信息框
 参数:
 	-iFRESH 1表示有按钮刷新 0表示从其他屏幕停止
******************************/
void StopYtz(const unsigned char iSER, const unsigned char iFRESH)
{
	int jcnl;
	unsigned char vSEL,hSEL;
	unsigned char vSingleTurns,sty_b=(VarST3000.Language?0x01:0x03);
	if(iSER==1)
	{	vSEL=ytzVSELa; hSEL=ytzHSELa;}
	else
	{	vSEL=ytzVSELb; hSEL=ytzHSELb;}
	//___通知停止
	for(jcnl=1; jcnl<VarST3000.UnitCounts; jcnl++)
	{
		if( unit[jcnl].submenu1.unitworksnum.i==iSER &&
			unit[jcnl].submenu1.unitworksnum.j)
		{	memset(CommandData[jcnl].CmdC, 0, 6); //___清除电机调整命令缓冲
			SendCnlData(jcnl, 0x0C); //___通知下位机单元电机不调整
			SetFlags_ytz(jcnl, 0); //___清除预套准进行标志
		}
	}
	delay(1000); //___为了确保下位机都得到自己的工作方式通知所进行的延时
	for(jcnl=1; jcnl<VarST3000.UnitCounts; jcnl++)
	{
		if( unit[jcnl].submenu1.unitworksnum.i==iSER &&
			unit[jcnl].submenu1.unitworksnum.j)
		{
			vSingleTurns=(iSER==1?unit[jcnl].submenu1.bitTurns.turnsoflabsA:unit[jcnl].submenu1.bitTurns.turnsoflabsB);
			if(vSingleTurns==3)
			{	CommandData[jcnl].Cmd6[3]=0x01;} //___单标记
			else
			{	CommandData[jcnl].Cmd6[3]=0x00;} //___正常套色
			SendCnlData(jcnl, 0x06);
		}
	}
	//___更新界面显示 (在预套准工作屏幕)
	if(iFRESH)
	{
		//___停止按钮禁用
		StartStop_button(1, (sty_b|0x10)); delay(15);
		StartStop_button(1, (sty_b|0x04));
		//___开始按钮激活
		StartStop_button(0, sty_b);
		//___激活预套准依据参数选择按钮
		if(vSEL==0) //___纵向重复值
		{	hjYTZButton(2, sty_b); hjYTZButton(3, sty_b);}
		else if(vSEL==1) //___纵向计算值
		{	hjYTZButton(1, sty_b); hjYTZButton(3, sty_b);}
		else //if(vSEL==2) //___纵向设定值
		{	hjYTZButton(1, sty_b); hjYTZButton(2, sty_b);}
		if(hSEL==0) //___横向重复值
		{	hjYTZButton(5, sty_b);}
		else //if(hSEL==1) //___横向设定值
		{	hjYTZButton(4, sty_b);}
	}
}

/***
 AB系按钮切换
***/
void RespSEL_jobAB(const int mID)
{
    switch( mID )
    {
    case 1: // 预套准
        if( VarST3000.jobAB==1 )
        {   // jobA -> jobB
            VarST3000.jobAB=2;
            Button(170, 130, 80, 35, 0x81, "B", 192, 192, 192);
            // AD采样
            OUT7&=0xfc;
            if( SysSet.CofBanB>=5000 ) {   OUT7|=0x01;}
            outportb(0x302, OUT7);
        }
        else //if( VarST3000.jobAB==2 )
        {   // jobB -> jobA
            VarST3000.jobAB=1;
            Button(170, 130, 80, 35, 0x81, "A", 192, 192, 192);
            // AD采样
            OUT7&=0xfc;
            OUT7|=0x02;
            if( SysSet.CofBanA>=5000 ) {   OUT7|=0x01;}
            outportb(0x302, OUT7);
        }
        UpdateScr21();
        break;
    case 2: // 套色设置
        {
            int t,ytzStatus=0;
            if( VarST3000.jobAB==1 )
            {   // jobA -> jobB
                // 首先查询B系是否在预套准中
                // 如果是 不能转入B系
                // 否则相应的参数修改将带来新的命令下发干扰
                ytzStatus=GetJOB_ytz(2);
                if( ytzStatus==1 )
                {   // 在进行预套准
                    if( wrkMsgBox(3)==1 ) {   StopYtz(2, 0);}
                    else {   break;}
                }
                // 通过如上限定 则可以转入B系 进行参数设置
                VarST3000.jobAB=2;
                Button(20, 80, 70, 45, 0x81, "B", 192, 192, 192);
                OUT7&=0xfc;
                if( SysSet.CofBanB>=5000 ) {   OUT7|=0x01;}
                outportb(0x302, OUT7);
                // 标记排列形式
                trnSEL=SysSet.bitTurns.TurnofLabsB;
                for(t=1; t<=5; t++)
                {   SetSTurnsBDISP_M22(t, ((t==trnSEL) ? 1 : 0));}
                // 标记形式
                ShowAllShapeBTN();
                mrkSEL=SysSet.bitShape.ShapeB;
                _SyncShapeSEL(mrkSEL, 1);
                // 刷新版周长显示
                SyncC_Disp22(0, SysSet.CofBanB);
            }
            else //if( VarST3000.jobAB==2 )
            {   // jobB -> jobA
                // 首先查询A系是否在预套准中
                // 如果是 不能转入A系
                // 否则相应的参数修改将带来新的命令下发干扰
                ytzStatus=GetJOB_ytz(1);
                if( ytzStatus==1 )
                {   // 在进行预套准
                    if( wrkMsgBox(2)==1 ) {   StopYtz(1, 0);}
                    else {   break;}
                }
                // 通过如上限定 则可以转入A系 进行参数设置
                VarST3000.jobAB=1;
                Button(20, 80, 70, 45, 0x81, "A", 192, 192, 192);
                OUT7&=0xfc;
                OUT7|=0x02;
                if( SysSet.CofBanA>=5000 ) {   OUT7|=0x01;}
                outportb(0x302, OUT7);
                // 标记排列形式
                trnSEL=SysSet.bitTurns.TurnofLabsA;
                for(t=1; t<=5; t++)
                {   SetSTurnsBDISP_M22(t, ((t==trnSEL) ? 1 : 0));}
                // 标记形式
                ShowAllShapeBTN();
                mrkSEL=SysSet.bitShape.ShapeA;
                _SyncShapeSEL(mrkSEL, 1);
                // 刷新版周长显示
                SyncC_Disp22(0, SysSet.CofBanA);
            }
            // 刷新参数内容
            SyncSimPSEL22(1);
            bFlagsINPUT22=0x00;
        }
        break;
    case 3: // 波形界面
        {
            int t,ico,ytzStatus=0;
            unsigned tCofBan;
            unsigned char bSTL,szB[10];
            if( VarST3000.jobAB==1 )
            {   // jobA -> jobB
                // 首先查询B系是否在预套准中
                // 如果是 不能转入B系
                // 否则相应的参数修改将带来新的命令下发干扰
                ytzStatus=GetJOB_ytz(2);
                if( ytzStatus==1 )
                {   // 在进行预套准
                    if( wrkMsgBox(3)==1 ) {   StopYtz(2, 0);}
                    else {   break;}
                }
                VarST3000.jobAB=2;
                tCofBan=SysSet.CofBanB;
            }
            else
            {   // jobB -> jobA
                // 首先查询A系是否在预套准中
                // 如果是 不能转入A系
                // 否则相应的参数修改将带来新的命令下发干扰
                ytzStatus=GetJOB_ytz(1);
                if( ytzStatus==1 )
                {   // 在进行预套准
                    if( wrkMsgBox(2)==1 ) {   StopYtz(1, 0);}
                    else {   break;}
                }
                VarST3000.jobAB=1;
                tCofBan=SysSet.CofBanA;
            }
            // A/D采样
            OUT7&=0xfc;
            if( tCofBan>=5000 ) {   OUT7|=0x01;}
            if( VarST3000.jobAB==1 ) {   OUT7|=0x02;}
            outportb(0x302, OUT7);
            // 系属
            Button(30, 100, 85, 45, 0x81, ((VarST3000.jobAB==1) ? "A" : "B"), 192, 192, 192);
            // 清除丢失色棒
            SyncLapseMark(0);
            // 波形显示比例 1X
            if( tCofBan>=5000 ) {   Scaling=MaxScale=4;}
            else {   Scaling=MaxScale=2;}
            Button(870, 310, 85, 45, 0x00, NULL, 192, 192, 192);            
            ShowICO3232(13, 894, 316);
            // 如果原来通道有效 关闭模拟总线
            if( UnitSEL_Old )
            {
                CommandData[UnitSEL_Old-1].Cmd6[6]&=0xfe;
                SendCnlData(UnitSEL_Old-1, 0x06);
            }
            // 整机工作状态
            GetEntireAuto(VarST3000.jobAB);
            _SetAllWS_M23();
            // 整机智能
            GetEntireIntelligent(VarST3000.jobAB);
            _SetAllSA_M23();
            // 清除调整框背景
            Bar(AlrAdjBox_M23_X, AlrAdjBox_M23_Y,
                AlrAdjBox_M23_X+AlrAdjBox_M23_W, AlrAdjBox_M23_Y+AlrAdjBox_M23_H, 192, 192, 192);
            // 通道 以首个有效工作通道作为默认选中通道
            UnitSEL_Old=UnitSEL=0;
            // 绘制所有系内通道(可以点击) 和非本系的通道按钮(不可点击)
            for(t=1; t<VarST3000.UnitCounts; t++)
            {
                memset(szB, 0, 10);
                sprintf(szB, "%dU", t+1);
                if( unit[t].submenu1.unitworksnum.i==VarST3000.jobAB &&
                    unit[t].submenu1.unitworksnum.j )
                {
                    bSTL=0x81;
                    if( !UnitSEL )
                    {   UnitSEL=t+1; UnitSEL_Old=UnitSEL;}
                    SetWrkMark23(t, 1);
                }
                else
                {
                    bSTL=0x85;
                    SetWrkMark23(t, 0);
                }
                if( UnitSEL==(t+1) ) {   bSTL|=0x10;}
                if( t<7 )
                {   Button(150, 50+50*t, 75, 35, bSTL, szB, 192, 192, 192);}
                else
                {   Button(270, 50+50*(t-6), 75, 35, bSTL, szB, 192, 192, 192);}
            }
            if( UnitSEL )
            {
                // 通道手动寻址开关
                if( SysSet.AddEnable )
                {   ico=12; bSTL=0x10;}
                else
                {   ico=11; bSTL=0x00;}
                Button(870, 240, 85, 45, bSTL, NULL, 192, 192, 192);                
                ShowICO3232(ico, 894, 246);
                _SetVWS_M23(); // 通道纵向自动手动按钮
                _SetHWS_M23(); // 通道横向自动手动按钮
                _SetCnlSA_M23(); // 通道本组智能按钮
                // 误差修正框内容对应通道显示
                if( unit[UnitSEL-1].submenu1.bitfield.hcontrol )
                {   // 横向开
                    wjrUAdj323(AlrAdjBox_M23_X+AlrAdjBox_M23_W/2-25, AlrAdjBox_M23_Y, BES_SHOW);
                    wjrDAdj323(AlrAdjBox_M23_X+AlrAdjBox_M23_W/2-25, AlrAdjBox_M23_Y+AlrAdjBox_M23_H-25, BES_SHOW);
                    wjrLAdj323(AlrAdjBox_M23_X, AlrAdjBox_M23_Y+AlrAdjBox_M23_H/2-25, BES_SHOW);
                    wjrRAdj323(AlrAdjBox_M23_X+AlrAdjBox_M23_W-25, AlrAdjBox_M23_Y+AlrAdjBox_M23_H/2-25, BES_SHOW);
                    DispVAdj_M23();
                    DispHAdj_M23();
                    DispHErr_M23(vRealErr[UnitSEL-1], hRealErr[UnitSEL-1]);
                }
                else
                {
                    wjrUAdj323(AlrAdjBox_M23_X+AlrAdjBox_M23_W/2-25, AlrAdjBox_M23_Y, BES_SHOW);
                    wjrDAdj323(AlrAdjBox_M23_X+AlrAdjBox_M23_W/2-25, AlrAdjBox_M23_Y+AlrAdjBox_M23_H-25, BES_SHOW);
                    DispVAdj_M23();
                    DispVErr_M23(vRealErr[UnitSEL-1]);
                }
                ResetWavAttrib(UnitSEL-1, 0);
                DrawWAVbk();
                DrawRuler();
                DispGateAddr(); // 波门地址
                DrawGate(); // 波门
                // 通知该色组将模拟总线打开
                CommandData[UnitSEL-1].Cmd6[6]|=0x01;
                SendCnlData(UnitSEL-1, 0x06);
            }
            else
            {
                // 通道纵向手动自动按钮 (默认显示手动)
                Button(870, 100, 85, 45, 0x00, NULL, 192, 192, 192);
                ShowICO3232(7, 894, 106); // VertManu.OperationType
                // 通道横向手动自动按钮 (默认显示手动)
                Button(870, 170, 85, 45, 0x00, NULL, 192, 192, 192);
                ShowICO3232(9, 894, 176); // HorzManu.OperationType
                // 本组智能开关按钮 (默认显示本组智能关)
                Button(870, 380, 85, 45, 0x00, NULL, 192, 192, 192);
                ShowICO3232(16, 894, 386); // Shut this chanel's aptitude
                // 通道手动寻址开关 (如果没有通道显示成关)
                Button(870, 240, 85, 45, 0x00, NULL, 192, 192, 192);
                ShowICO3232(11, 894, 246); // Lock ManuAddressing.
                ResetWavAttrib(1, 0);
                DrawWAVbk();
                DrawRuler();
            }
        }
        break;
    default:
        break;
    }
}

/***
 同步刷新色标排列形式
***/
void SyncT_Disp22(void)
{
    int jcnl;
    if( VarST3000.jobAB==1 )
    {   // A系属
        for(jcnl=1; jcnl<VarST3000.UnitCounts; jcnl++)
        {
            if(unit[jcnl].submenu1.unitworksnum.i==1)
            {   SyncTurnsDISP(jcnl, unit[jcnl].submenu1.bitTurns.turnsoflabsA);}
        }
    }
    else
    {   // B系属
        for(jcnl=1; jcnl<VarST3000.UnitCounts; jcnl++)
        {
            if(unit[jcnl].submenu1.unitworksnum.i==2 )
            {   SyncTurnsDISP(jcnl, unit[jcnl].submenu1.bitTurns.turnsoflabsB);}
        }
    }
}

/***
 响应参数输入
***/
void RespP_INPUT22(void)
{
	int NO,vinteger;
	char	szE[20];
	long	vlong;
	float	vfloat;
	switch(g_SimParaID)
	{
	case 1:	//标准色序
		NO=RespNumKBoard();
		if(NO!=100)
		{
			if(NO==205)	//ENTER
			{
				if(strlen(Dispbuf))

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?