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 + -
显示快捷键?