3kmenu2.c

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

C
1,816
字号
        sprintf(szE, "%02d", unit[cNewSEL22].submenu1.ColorNum);
        Edit(160, 95+45*cNewSEL22, 125, 35, 0x4f, szE);
        cOldSEL22=cNewSEL22;
        bFlagsINPUT22=0x01; g_Klength=2; g_Kmask=0x03; ClearKBuffer();
        break;
    case 2: // 纵向报警
        if( bFlagsINPUT22&0x10 )
        {   SyncC_Disp22(0, (VarST3000.jobAB==1?SysSet.CofBanA:SysSet.CofBanB));}
        if(cNewSEL22!=cOldSEL22)
        {   //恢复原先选择的
            memset(szB, 0, 20);
            sprintf(szB, "%dU", cOldSEL22+1);
            Button(50, 95+45*cOldSEL22, 90, 35, 0x81, szB, 192, 192, 192);
            memset(szE, 0, 20);
            sprintf(szE, "%4.2f", unit[cOldSEL22].submenu1.v_alarm/100.0);
            Edit(160, 95+45*cOldSEL22, 125, 35, 0x0f, szE);
        }
        //当前选中
        memset(szB, 0, 20);
        sprintf(szB, "%dU", cNewSEL22+1);
        Button(50, 95+45*cNewSEL22, 90, 35, 0x91, szB, 192, 192, 192);
        memset(szE, 0, 20);
        sprintf(szE, "%4.2f", unit[cNewSEL22].submenu1.v_alarm/100.0);
        Edit(160, 95+45*cNewSEL22, 125, 35, 0x4f, szE);
        cOldSEL22=cNewSEL22;
        bFlagsINPUT22=0x01; g_Klength=3; g_Kmask=0x02; ClearKBuffer();
        break;
    case 3: // 波门地址
        if(bFlagsINPUT22&0x10)
        {   SyncC_Disp22(0, (VarST3000.jobAB==1?SysSet.CofBanA:SysSet.CofBanB));}
        if(cNewSEL22!=cOldSEL22)
        {   //恢复原先选择的
            memset(szB, 0, 20);
            sprintf(szB, "%dU", cOldSEL22+1);
            Button(50, 95+45*cOldSEL22, 90, 35, 0x81, szB, 192, 192, 192);
            memset(szE, 0, 20);
            sprintf(szE, "%5d", unit[cOldSEL22].submenu1.addressofwav);
            Edit(160, 95+45*cOldSEL22, 125, 35, 0x0f, szE);
        }
        //当前选中
        memset(szB, 0, 20);
        sprintf(szB, "%dU", cNewSEL22+1);
        Button(50, 95+45*cNewSEL22, 90, 35, 0x91, szB, 192, 192, 192);
        memset(szE, 0, 20);
        sprintf(szE, "%5d", unit[cNewSEL22].submenu1.addressofwav);
        Edit(160, 95+45*cNewSEL22, 125, 35, 0x4f, szE);
        cOldSEL22=cNewSEL22;
        bFlagsINPUT22=0x01; g_Klength=4; g_Kmask=0x03; ClearKBuffer();
        break;
    case 4: // 波门宽度
        if(bFlagsINPUT22&0x10)
        {   SyncC_Disp22(0, (VarST3000.jobAB==1?SysSet.CofBanA:SysSet.CofBanB));}
        if(cNewSEL22!=cOldSEL22)
        {   //恢复原先选择的
            memset(szB, 0, 20);
            sprintf(szB, "%dU", cOldSEL22+1);
            Button(50, 95+45*cOldSEL22, 90, 35, 0x81, szB, 192, 192, 192);
            memset(szE, 0, 20);
            sprintf(szE, "%5d", unit[cOldSEL22].submenu2.ValueWidth);
            Edit(160, 95+45*cOldSEL22, 125, 35, 0x0f, szE);
        }
        //当前选中
        memset(szB, 0, 20);
        sprintf(szB, "%dU", cNewSEL22+1);
        Button(50, 95+45*cNewSEL22, 90, 35, 0x91, szB, 192, 192, 192);
        memset(szE, 0, 20);
        sprintf(szE, "%5d", unit[cNewSEL22].submenu2.ValueWidth);
        Edit(160, 95+45*cNewSEL22, 125, 35, 0x4f, szE);
        cOldSEL22=cNewSEL22;
        bFlagsINPUT22=0x01; g_Klength=2; g_Kmask=0x03; ClearKBuffer();
        break;
    default:
        if( bFlagsINPUT22&0x10 )
        {   SyncC_Disp22(0, (VarST3000.jobAB==1?SysSet.CofBanA:SysSet.CofBanB));}
        cOldSEL22=cNewSEL22;
        bFlagsINPUT22=0x00; g_Klength=0; g_Kmask=0x03; ClearKBuffer();
        break;
    }
}

/***
 设定指定通道的预套准工作状态记录
 -iCNL 通道号
 -iDAT 1置位; 0清除
***/
void SetFlags_ytz(const int iCNL, const int iDAT)
{
    unsigned uVAL=0x0001;
    if( iDAT )
    {   EntireStatus.EntireYtzFlags = EntireStatus.EntireYtzFlags|(uVAL<<iCNL);}
    else
    {
        uVAL<<=iCNL;
        uVAL^=0xFFFF;
        EntireStatus.EntireYtzFlags&=uVAL;
    }
}

/***
 查询本通道是否在预套准工作
***/
int GetFlags_ytz(const int iCNL)
{
    unsigned uVAL=0x0001;
    return ( (EntireStatus.EntireYtzFlags&(uVAL<<iCNL)) ? 1 : 0 );
}

/***
 描述: 查询指定系的预套准工作是否属于进行阶段
 返回: 
    -2 表示没有通道
    -1 表示有预套准
    -0 表示没有预套准
***/
int GetJOB_ytz(const int jobID)
{
    int t,tCountCU=0;
    unsigned uVAL=0x0001;
    for(t=1; t<VarST3000.UnitCounts; t++)
    {
        if( unit[t].submenu1.unitworksnum.i==jobID &&
            unit[t].submenu1.unitworksnum.j )
        {
            tCountCU++;
            if( EntireStatus.EntireYtzFlags&(uVAL<<t) )
            {   return 1;}
        }
    }
    if( !tCountCU ) {   return 2;}
    return 0;
}

/***
 统计出指定系属的工作通道数
***/
int CountJOBCU(const int jobID)
{
    int t,iret=0;
    for(t=1; t<VarST3000.UnitCounts; t++)
    {
        if( unit[t].submenu1.unitworksnum.i==jobID &&
            unit[t].submenu1.unitworksnum.j )
        {   iret++;}
    }
    return(iret);
}

/******************************
 描述: 预套准开始 AB系
******************************/
void StartYtz(void)
{
	int   jcnl;
	char  tSZ[10];
	long  vLONG;
	float vFLOAT;
	unsigned char vSEL,hSEL;
	unsigned char sty_b=(VarST3000.Language?0x01:0x03);
	unsigned int vCBRec=(VarST3000.jobAB==1?SysSet.CofBanA:SysSet.CofBanB);
	if(VarST3000.jobAB==1)
	{	vSEL=ytzVSELa; hSEL=ytzHSELa;}
	else
	{	vSEL=ytzVSELb; hSEL=ytzHSELb;}
	//___开始按钮禁用
	StartStop_button(0, (sty_b|0x10)); delay(15);
	StartStop_button(0, (sty_b|0x04));
	//___停止按钮激活
	StartStop_button(1, sty_b);
	//___清除本系属内的C号命令缓冲区
	for(jcnl=1; jcnl<VarST3000.UnitCounts; jcnl++)
	{
		if( unit[jcnl].submenu1.unitworksnum.i==VarST3000.jobAB &&
			unit[jcnl].submenu1.unitworksnum.j)
		{	memset(CommandData[jcnl].CmdC, 0x00, 6);} //___清除电机调整命令缓冲
	}
	//___开始对纵向下发内容进行填充
	switch(vSEL)
	{
	case 0: //___纵向重复值
		hjYTZButton(2, (sty_b|0x04)); //___纵向计算值禁止使用
		hjYTZButton(3, (sty_b|0x04)); //___纵向设定值禁止使用
		for(jcnl=1; jcnl<VarST3000.UnitCounts; jcnl++)
		{
			if( unit[jcnl].submenu1.unitworksnum.i==VarST3000.jobAB &&
				unit[jcnl].submenu1.unitworksnum.j)
			{	memset(tSZ, 0, 10);
				sprintf(tSZ, "%6.2f", unit[jcnl].submenu6.VRepeatValue/100.0);
				Edit(270, 138+40*jcnl, 85, 32, 0x00, NULL);
				Edit(370, 138+40*jcnl, 85, 32, 0x05, tSZ);
				vLONG = unit[jcnl].submenu6.VRepeatValue*100/SysSet.VCoef;
				//___填充命令缓冲区
				if(vLONG<0)
				{	vLONG*=-1;
					CommandData[jcnl].CmdC[0] =(unsigned char)(vLONG/65536L);
					CommandData[jcnl].CmdC[0]|=0x80;
					CommandData[jcnl].CmdC[1] =(unsigned char)((vLONG%65536L)/256);
					CommandData[jcnl].CmdC[2] =(unsigned char)(vLONG%256);
				}
				else
				{
					CommandData[jcnl].CmdC[0] =(unsigned char)(vLONG/65536L);
					CommandData[jcnl].CmdC[1] =(unsigned char)((vLONG%65536L)/256);
					CommandData[jcnl].CmdC[2] =(unsigned char)(vLONG%256);
				}
			}
		}
		break;
	case 1: //___纵向计算值
		hjYTZButton(1, (sty_b|0x04)); //___纵向重复值禁止使用
		hjYTZButton(3, (sty_b|0x04)); //___纵向设定值禁止使用
		for(jcnl=1; jcnl<VarST3000.UnitCounts; jcnl++)
		{
			if( unit[jcnl].submenu1.unitworksnum.i==VarST3000.jobAB &&
				unit[jcnl].submenu1.unitworksnum.j)
			{
				vFLOAT=unit[jcnl].submenu6.length/100.0+0.005;
				if(vFLOAT<50) { vFLOAT+=(vCBRec/10.0);}
				//___计算出下发的命令
				vLONG =vFLOAT*100;
				vLONG =vLONG*100/SysSet.VCoef;
				//___更新界面的显示
				memset(tSZ, 0, 10);
				sprintf(tSZ, "%8.2f", vFLOAT);
				Edit(370, 138+40*jcnl, 85, 32, 0x05, tSZ);
				Edit(270, 138+40*jcnl, 85, 32, 0x05, "0.00");
				//___填充命令缓冲区
				if(vLONG<0)
				{	vLONG*=-1;
					CommandData[jcnl].CmdC[0] =(unsigned char)(vLONG/65536L);
					CommandData[jcnl].CmdC[0]|=0x80;
					CommandData[jcnl].CmdC[1] =(unsigned char)((vLONG%65536L)/256);
					CommandData[jcnl].CmdC[2] =(unsigned char)(vLONG%256);
				}
				else
				{
					CommandData[jcnl].CmdC[0] =(unsigned char)(vLONG/65536L);
					CommandData[jcnl].CmdC[1] =(unsigned char)((vLONG%65536L)/256);
					CommandData[jcnl].CmdC[2] =(unsigned char)(vLONG%256);
				}
			}
		}
		break;
	case 2: //___纵向设定值
		hjYTZButton(1, (sty_b|0x04)); //___纵向重复值禁止使用
		hjYTZButton(2, (sty_b|0x04)); //___纵向计算值禁止使用
		for(jcnl=1; jcnl<VarST3000.UnitCounts; jcnl++)
		{
			if( unit[jcnl].submenu1.unitworksnum.i==VarST3000.jobAB &&
				unit[jcnl].submenu1.unitworksnum.j)
			{
				//___更新界面显示
				memset(tSZ, 0, 10);
				sprintf(tSZ, "%6.2f", unit[jcnl].submenu6.VSetupValue/100.0);
				Edit(370, 138+40*jcnl, 85, 32, 0x05, tSZ);
				Edit(270, 138+40*jcnl, 85, 32, 0x05, "0.00");
				vLONG =unit[jcnl].submenu6.VSetupValue*100/SysSet.VCoef;
				//___填充命令缓冲区
				if(vLONG<0)
				{	vLONG*=-1;
					CommandData[jcnl].CmdC[0] =(unsigned char)(vLONG/65536L);
					CommandData[jcnl].CmdC[0]|=0x80;
					CommandData[jcnl].CmdC[1] =(unsigned char)((vLONG%65536L)/256);
					CommandData[jcnl].CmdC[2] =(unsigned char)(vLONG%256);
				}
				else
				{
					CommandData[jcnl].CmdC[0] =(unsigned char)(vLONG/65536L);
					CommandData[jcnl].CmdC[1] =(unsigned char)((vLONG%65536L)/256);
					CommandData[jcnl].CmdC[2] =(unsigned char)(vLONG%256);
				}
			}
		}
		break;
	default:
		break;
	}
	//___开始对横向下发内容进行填充
	switch(hSEL)
	{
	case 0: //___横向重复值
		hjYTZButton(5, (sty_b|0x04)); //___横向设定值禁止使用
		for(jcnl=1; jcnl<VarST3000.UnitCounts; jcnl++)
		{
			if( unit[jcnl].submenu1.unitworksnum.i==VarST3000.jobAB &&
				unit[jcnl].submenu1.unitworksnum.j &&
				unit[jcnl].submenu1.bitfield.hcontrol)
			{
				memset(tSZ, 0, 10);
				sprintf(tSZ, "%6.2f", unit[jcnl].submenu6.HRepeatValue/100.0);
				Edit(570, 138+40*jcnl, 85, 32, 0x05, tSZ);
				Edit(470, 138+40*jcnl, 85, 32, 0x00, NULL);
				vLONG =unit[jcnl].submenu6.HRepeatValue*100/SysSet.HCoef;
				//___填充命令缓冲区
				if(vLONG<0)
				{	vLONG*=-1;
					CommandData[jcnl].CmdC[3] =(unsigned char)(vLONG/65536L);
					CommandData[jcnl].CmdC[3]|=0x80;
					CommandData[jcnl].CmdC[4] =(unsigned char)((vLONG%65536L)/256);
					CommandData[jcnl].CmdC[5] =(unsigned char)(vLONG%256);
				}
				else
				{
					CommandData[jcnl].CmdC[3] =(unsigned char)(vLONG/65536L);
					CommandData[jcnl].CmdC[4] =(unsigned char)((vLONG%65536L)/256);
					CommandData[jcnl].CmdC[5] =(unsigned char)(vLONG%256);
				}
			}
		}
		break;
	case 1: //___横向设定值
		hjYTZButton(4, (sty_b|0x04)); //___横向重复值禁止使用
		for(jcnl=1; jcnl<VarST3000.UnitCounts; jcnl++)
		{
			if( unit[jcnl].submenu1.unitworksnum.i==VarST3000.jobAB &&
				unit[jcnl].submenu1.unitworksnum.j &&
				unit[jcnl].submenu1.bitfield.hcontrol)
			{
				memset(tSZ, 0, 10);
				//sprintf(tSZ, "%6.2f", unit[jcnl].submenu6.HSetupValue/100.0);
				sprintf(tSZ, "%6.2f", (unit[jcnl].submenu6.HSetupValue+unit[jcnl].submenu6.HMaxValue)/100.0);
				Edit(570, 138+40*jcnl, 85, 32, 0x05, tSZ);
				Edit(470, 138+40*jcnl, 85, 32, 0x05, "0.00");
				//vLONG =unit[jcnl].submenu6.HSetupValue*100/SysSet.HCoef;
				vLONG= (unit[jcnl].submenu6.HSetupValue+unit[jcnl].submenu6.HMaxValue)*100/SysSet.HCoef;
				//___填充命令缓冲区
				if(vLONG<0)
				{	vLONG*=-1;
					CommandData[jcnl].CmdC[3] =(unsigned char)(vLONG/65536L);
					CommandData[jcnl].CmdC[3]|=0x80;
					CommandData[jcnl].CmdC[4] =(unsigned char)((vLONG%65536L)/256);
					CommandData[jcnl].CmdC[5] =(unsigned char)(vLONG%256);
				}
				else
				{
					CommandData[jcnl].CmdC[3] =(unsigned char)(vLONG/65536L);
					CommandData[jcnl].CmdC[4] =(unsigned char)((vLONG%65536L)/256);
					CommandData[jcnl].CmdC[5] =(unsigned char)(vLONG%256);
				}
			}
		}
		break;
	default:
		break;
	}
	//___开始发送工作命令
	if( VarST3000.jobAB==1 )
	{	EntireStatus.EntireAuto_A=0; EntireStatus.EntireIntelligent_A=0;} //___如果在A系工作 则整机手动 整机智能关
	else
	{	EntireStatus.EntireAuto_B=0; EntireStatus.EntireIntelligent_B=0;} //___如果在B系工作 则整机手动 整机智能关
	for(jcnl=1; jcnl<VarST3000.UnitCounts; jcnl++)
	{
		if( unit[jcnl].submenu1.unitworksnum.i==VarST3000.jobAB &&
			unit[jcnl].submenu1.unitworksnum.j)
		{
			//___如果确定要开始预套准 则必须关闭原来处于自动运作的电机 和智能寻址
			unit[jcnl].submenu1.bitfield.autowork=0;
			CommandData[jcnl].Cmd6[1]&=0xf9; //1111 1001 本组智能和整机智能关闭
			unit[jcnl].submenu1.bitfield.hand_auto=0;
			CommandData[jcnl].Cmd6[2]&=0xfc; //1111 1100
			if( unit[jcnl].submenu1.bitfield.hcontrol )
			{	unit[jcnl].submenu1.bitfield.h_motorruning=0;
				CommandData[jcnl].Cmd6[6]&=0xdf;}
			//___开始设置预套准
			if( (vSEL==1) || (vSEL==2) )

⌨️ 快捷键说明

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