📄 stepcali.cpp
字号:
Def_Stp_Para[i+1] =LOBYTE(Tmp);
Tmp=GetPrivateProfileInt("Motor_Move","Max_Vec",2500,InitDir2);
Def_Stp_Para[i+2] =HIBYTE(Tmp); //最高速度
Def_Stp_Para[i+3] =LOBYTE(Tmp);
Tmp=GetPrivateProfileInt("Motor_Move","Max_Acc",100,InitDir2);
Def_Stp_Para[i+4] =HIBYTE(Tmp); //加速度最大值
Def_Stp_Para[i+5] =LOBYTE(Tmp);
Tmp=GetPrivateProfileInt("Motor_Move","Max_Acc_Stp",500,InitDir2);
Def_Stp_Para[i+6] =HIBYTE(Tmp); //最大加速步数
Def_Stp_Para[i+7] =LOBYTE(Tmp);
i=130; //扫描
Tmp=GetPrivateProfileInt("Motor_Scan","Start_Vec",30000,InitDir2);
Def_Stp_Para[i+0] =HIBYTE(Tmp); //启动速度
Def_Stp_Para[i+1] =LOBYTE(Tmp);
Tmp=GetPrivateProfileInt("Motor_Scan","Max_Vec",20000,InitDir2);
Def_Stp_Para[i+2] =HIBYTE(Tmp); //最高速度
Def_Stp_Para[i+3] =LOBYTE(Tmp);
Tmp=GetPrivateProfileInt("Motor_Scan","Max_Acc",100,InitDir2);
Def_Stp_Para[i+4] =HIBYTE(Tmp); //加速度最大值
Def_Stp_Para[i+5] =LOBYTE(Tmp);
Tmp=GetPrivateProfileInt("Motor_Scan","Max_Acc_Stp",100,InitDir2);
Def_Stp_Para[i+6] =HIBYTE(Tmp); //最大加速步数
Def_Stp_Para[i+7] =LOBYTE(Tmp);
//***台面坐标缺省参数mm***
i=138;
Tmp=GetPrivateProfileInt("Plant_Para","Max_X_Wid",841,InitDir2);
Def_Stp_Para[i+0] =HIBYTE(Tmp); //X方向最大宽度
Def_Stp_Para[i+1] =LOBYTE(Tmp);
Tmp=GetPrivateProfileInt("Plant_Para","Max_Y_Len",841,InitDir2);
Def_Stp_Para[i+2] =HIBYTE(Tmp); //Y方向最大长度
Def_Stp_Para[i+3] =LOBYTE(Tmp);
Tmp=GetPrivateProfileInt("Plant_Para","Zero_Pos",10,InitDir2);
Def_Stp_Para[i+4] =HIBYTE(Tmp); //扫描零点位置
Def_Stp_Para[i+5] =LOBYTE(Tmp);
Tmp=GetPrivateProfileInt("Plant_Para","White_Pos",0,InitDir2);
Def_Stp_Para[i+6] =HIBYTE(Tmp); //校正白线位置
Def_Stp_Para[i+7] =LOBYTE(Tmp);
Tmp=GetPrivateProfileInt("Plant_Para","Black_Pos",0,InitDir2);
Def_Stp_Para[i+8] =HIBYTE(Tmp); //校正黑线位置
Def_Stp_Para[i+9] =LOBYTE(Tmp);
//***DSP软件延时周期数缺省参数***
Tmp=GetPrivateProfileInt("DSP_Para","Wait_Per",2,InitDir2);
Def_Stp_Para[148] =LOBYTE(Tmp);
}
//---------------- 2004.2.23 初始化感光系数 ------------//
// 读jiaose.ini文件,初始化Def_Stp_Para数组中的感光参数 //
//------------------------------------------------------------------//
void Stp_GanG_INI()
{
int i,Tmp,Max;
//感光目标码
i=150;
Tmp=GetPrivateProfileInt("CCD_Gang_Dly","GangCode",500,InitDir2);
Max=GetPrivateProfileInt("CCD_Gang_Dly","GangCMAX",800,InitDir2);
if(Tmp<200) Tmp=200; //有效性检查
else if(Tmp>Max) Tmp=Max;
Def_Stp_Para[i+0] =HIBYTE(Tmp);
Def_Stp_Para[i+1] =LOBYTE(Tmp);
//附加感光时间参数
i=150+8;
int j;
char TmpStr[5];
strcpy(TmpStr,"CCD1");
for (j=1;j<=8;j++)
{
TmpStr[3]=LOBYTE(0x30+j);
Tmp=GetPrivateProfileInt("CCD_Gang_Add",TmpStr,100,InitDir2);
R_Check(&Tmp,0,255); //附加感光时间设置值进行范围(0~255)检查
Def_Stp_Para[i] =LOBYTE(Tmp);
i=i+1;
}
//感光延迟时间参数
int R,G,B;
char RStr[3],GStr[3],BStr[3];
i=150+16;
strcpy(RStr,"R1");
strcpy(GStr,"G1");
strcpy(BStr,"B1");
for (j=1;j<=8;j++)
{
RStr[1]=LOBYTE(0x30+j);
GStr[1]=LOBYTE(0x30+j);
BStr[1]=LOBYTE(0x30+j);
R=GetPrivateProfileInt("CCD_Gang_Dly",RStr,10,InitDir2);
G=GetPrivateProfileInt("CCD_Gang_Dly",GStr,10,InitDir2);
B=GetPrivateProfileInt("CCD_Gang_Dly",BStr,10,InitDir2);
RGB_Check(&R,&G,&B,0,255); //对感光时间R、G、B进行范围(1~254)检查
Def_Stp_Para[i+0] =LOBYTE(R);
Def_Stp_Para[i+1] =LOBYTE(G);
Def_Stp_Para[i+2] =LOBYTE(B);
i=i+3;
}
}
//---------------- 2004.2.23 初始化静态偏移系数 ------------//
// 读jiaose.ini文件,初始化Def_Stp_Para数组中的静态偏移参数 //
//------------------------------------------------------------------//
void Stp_Offset_INI()
{
// ***** 静态偏移下传参数 (设置值为-31~+31,下传值为0~+63) *****
int R,G,B;
int R1,G1,B1;
char RStr[3],GStr[3],BStr[3];
int i=150+40;
strcpy(RStr,"R1");
strcpy(GStr,"G1");
strcpy(BStr,"B1");
for (int j=1;j<=8;j++)
{
RStr[1]=LOBYTE(0x30+j);
GStr[1]=LOBYTE(0x30+j);
BStr[1]=LOBYTE(0x30+j);
R=GetPrivateProfileInt("CCD_Offset",RStr,0,InitDir2);
G=GetPrivateProfileInt("CCD_Offset",GStr,0,InitDir2);
B=GetPrivateProfileInt("CCD_Offset",BStr,0,InitDir2);
RGB_Chk_ChgP(R,G,B,-31,31,32,&R1,&G1,&B1); //对静态偏移R、G、B进行范围(-31~+31)检查,设置值为负值时,将-1~-31转换成33~63
Def_Stp_Para[i+0] =LOBYTE(R1); //CCD1
Def_Stp_Para[i+1] =LOBYTE(G1);
Def_Stp_Para[i+2] =LOBYTE(B1);
i=i+3;
}
}
//---------------- 2004.2.23 初始化静态增益及偏色系数 ---------------------//
// 读jiaose.ini文件,初始化Def_Stp_Para数组中的静态增益及偏色系数参数 //
//---------------------------------------------------------------------------//
void Stp_GanPs_INI()
{
//增益目标码
int GangCode=GetPrivateProfileInt("CCD_Gang_Dly","GangCode",200,InitDir2);
int GainCode=GetPrivateProfileInt("CCD_Gain","GainCode",980,InitDir2);
int GainCMAX=GetPrivateProfileInt("CCD_Gain","GainCMAX",1000,InitDir2);
if (GainCode<GangCode) GainCode=GangCode; //增益目标码不能小于感光目标码
else if (GainCode>GainCMAX) GainCode=GainCMAX;
Def_Stp_Para[152] =HIBYTE(GainCode); //增益目标码
Def_Stp_Para[153] =LOBYTE(GainCode);
int i,j,Tmp;
//增益系数
int R,G,B;
char RStr[3],GStr[3],BStr[3];
i=150+64;
strcpy(RStr,"R1");
strcpy(GStr,"G1");
strcpy(BStr,"B1");
for (j=1;j<=8;j++)
{
RStr[1]=LOBYTE(0x30+j);
GStr[1]=LOBYTE(0x30+j);
BStr[1]=LOBYTE(0x30+j);
R=GetPrivateProfileInt("CCD_Gain",RStr,0,InitDir2);
G=GetPrivateProfileInt("CCD_Gain",GStr,0,InitDir2);
B=GetPrivateProfileInt("CCD_Gain",BStr,0,InitDir2);
RGB_Check(&R,&G,&B,0,0x1f); //对静态增益R、G、B进行范围(0~0x1f)检查
Def_Stp_Para[i+0] =LOBYTE(R);
Def_Stp_Para[i+1] =LOBYTE(G);
Def_Stp_Para[i+2] =LOBYTE(B);
i=i+3;
}
//增益范围系数
i=150+88; //起始位置=150+88,每头一字节
char TmpStr[5];
strcpy(TmpStr,"CCD1");
for (j=1;j<=5;j++)
{
TmpStr[3]=LOBYTE(0x30+j);
Tmp=GetPrivateProfileInt("CCD_Gan_Range",TmpStr,3,InitDir2);
Def_Stp_Para[i] =LOBYTE(Tmp);
i=i+1;
}
/* ***** 偏色调整系数下传参数 *****
1. 作用:对增益目标码进行比例增加(系数为正)或比例减小(系数为负)
2. 最大值:取决于增益目标码GainCode,即Max_Lim=((1024÷GainCode)-1)×100
3. 最小值:取决于感光目标码GangCode,即Min_Lim=((GangCode÷GainCode)-1)×100
4. 最大调整范围:感光目标码GangCode~最大目标码1024
5. 系数的最大范围:Min_Lim~Max_Lim
6. 在显示和输入时为原始值,在jiaose.ini文件中也为原始值(正负)。
7. 在Def_Stp_Para缓冲区中保存的及下传的为加100偏移之后的正数。
*/
int PS_Min,PS_Max;
PS_Max=(int)(100*((1024.0/GainCode)-1.0)); //偏色系数的最大值
PS_Min=(int)(100*(((1.0*GangCode)/(1.0*GainCode))-1.0)); //偏色系数的最小值(负值)
if (PS_Max >155) PS_Max = 155;
if (PS_Min <-99) PS_Min = -99;
//将计算的偏色系数上下限值写入配置文件
char str[36];
sprintf(str, "%d", PS_Min); //最小值
WritePrivateProfileString("CCD_PSAdj","Ps_Min", str, InitDir2);
sprintf(str, "%d", PS_Max); //最大值
WritePrivateProfileString("CCD_PSAdj","Ps_Max", str, InitDir2);
i=150+120;
Def_Stp_Para[i+3] =LOBYTE(PS_Max+100); //下传最大值
Def_Stp_Para[i+4] =LOBYTE(PS_Min+100); //下传最小值
//整体偏色系数
R=GetPrivateProfileInt("CCD_PSAdj","ZTR",0,InitDir2);
G=GetPrivateProfileInt("CCD_PSAdj","ZTG",0,InitDir2);
B=GetPrivateProfileInt("CCD_PSAdj","ZTB",0,InitDir2);
RGB_Check(&R,&G,&B,PS_Min,PS_Max); //对偏色系数R、G、B进行范围检查
Def_Stp_Para[i+0] =LOBYTE(R+100); //R通道整体
Def_Stp_Para[i+1] =LOBYTE(G+100); //G通道整体
Def_Stp_Para[i+2] =LOBYTE(B+100); //B通道整体
//单头偏色系数
i=150+96;
strcpy(RStr,"R1");
strcpy(GStr,"G1");
strcpy(BStr,"B1");
for (j=1;j<=8;j++)
{
RStr[1]=LOBYTE(0x30+j);
GStr[1]=LOBYTE(0x30+j);
BStr[1]=LOBYTE(0x30+j);
R=GetPrivateProfileInt("CCD_PSAdj",RStr,0,InitDir2);
G=GetPrivateProfileInt("CCD_PSAdj",GStr,0,InitDir2);
B=GetPrivateProfileInt("CCD_PSAdj",BStr,0,InitDir2);
RGB_Check(&R,&G,&B,PS_Min,PS_Max); //对偏色系数R、G、B进行范围检查
Def_Stp_Para[i+0] =LOBYTE(R+100);
Def_Stp_Para[i+1] =LOBYTE(G+100);
Def_Stp_Para[i+2] =LOBYTE(B+100);
i=i+3;
}
}
//----------------------------- 2004.3.24 ----------------------------------//
// 读jiaose.ini文件,初始化Def_Stp_Para数组中的: //
// 1. 分步校正控制参数 //
// 2. 动态增益均值滤波控制参数 //
//--------------------------------------------------------------------------//
void Stp_Cai_CtrP_INI()
{
int i,Tmp;
//***分步校正控制参数***
i=150+125;
Tmp=GetPrivateProfileInt("Cali_Ctr_Para","Max_F_Num",10,InitDir2);
Def_Stp_Para[i+0] =LOBYTE(Tmp); //最大值查找的次数
Tmp=GetPrivateProfileInt("Cali_Ctr_Para","Min_F_Num",10,InitDir2);
Def_Stp_Para[i+1] =LOBYTE(Tmp); //最小值查找的次数
Tmp=GetPrivateProfileInt("Cali_Ctr_Para","GangG_Err",32,InitDir2);
Def_Stp_Para[i+2] =LOBYTE(Tmp); //感光门限
Tmp=GetPrivateProfileInt("Cali_Ctr_Para","SOff_Err",6,InitDir2);
Def_Stp_Para[i+3] =LOBYTE(Tmp); //静态偏移门限
Tmp=GetPrivateProfileInt("Cali_Ctr_Para","SGain_err",16,InitDir2);
Def_Stp_Para[i+4] =LOBYTE(Tmp); //静态增益门限
Tmp=GetPrivateProfileInt("Cali_Ctr_Para","PGain_err",12,InitDir2);
Def_Stp_Para[i+5] =LOBYTE(Tmp); //动态增益门限
//***动态增益均值滤波控制参数***
i=150+134;
Tmp=GetPrivateProfileInt("PGain_Aver_Para","Aver_P_Ena",0,InitDir2);
Def_Stp_Para[i+0] =LOBYTE(Tmp); //均值滤波处理允许=0xA5-->允许
Tmp=GetPrivateProfileInt("PGain_Aver_Para","Aver_Num",8,InitDir2);
Def_Stp_Para[i+1] =LOBYTE(Tmp); //均值范围:N
Tmp=GetPrivateProfileInt("PGain_Aver_Para","Aver_Num_MI",3,InitDir2);
Def_Stp_Para[i+2] =LOBYTE(Tmp); //N值的2的幂次方 以方便求平均值
Tmp=GetPrivateProfileInt("PGain_Aver_Para","Aver_Err",32,InitDir2);
Def_Stp_Para[i+3] =LOBYTE(Tmp); //象点值偏差r(下传值 折半匹配时,动态增益效果值与各通道目标码的偏差范围)
}
//----------------2004.2.23---------------------//
// 对输入参数R进行范围(Min~Max)检查 //
//----------------------------------------------//
void R_Check(int *R,int Min,int Max)
{
if(*R<Min) *R=Min;
else if(*R>Max) *R=Max;
}
//----------------2004.2.23---------------------//
// 对输入参数R、G、B进行范围(Min~Max)检查 //
//----------------------------------------------//
void RGB_Check(int *R,int *G,int *B,int Min,int Max)
{
if(*R<Min) *R=Min;
else if(*R>Max) *R=Max;
if(*G<Min) *G=Min;
else if(*G>Max) *G=Max;
if(*B<Min) *B=Min;
else if(*B>Max) *B=Max;
}
//----------------2004.2.23 供下传--------------//
// 对输入参数R、G、B进行范围(Min~Max)检查 //
// 若值为负,则将其转换成正数:R=Base-R //
// R、G、B-->R1、G1、B1 //
//----------------------------------------------//
void RGB_Chk_ChgP(int R,int G,int B,int Min,int Max,int Base,int *R1,int *G1,int *B1)
{
*R1=R;
*G1=G;
*B1=B;
if(*R1<Min) *R1=Min; //设置值的范围检查
else if(*R1>Max) *R1=Max;
if(*G1<Min) *G1=Min;
else if(*G1>Max) *G1=Max;
if(*B1<Min) *B1=Min;
else if(*B1>Max) *B1=Max;
if (*R1<0) *R1=Base-*R1; //设置值为负值时,将-1~-31转换成33~63
if (*G1<0) *G1=Base-*G1;
if (*B1<0) *B1=Base-*B1;
}
//----------------2004.2.23 供窗口显示----------//
// 对上传参数R、G、B进行范围转换 //
// 若R>=Base,则将其转换成:R=Base-R //
//----------------------------------------------//
void RGB_Chk_ChgN(int *R,int *G,int *B,int Base)
{
if (*R>=Base) *R=Base-*R; //将32~63转换成0~-31,供窗口显示
if (*G>=Base) *G=Base-*G;
if (*B>=Base) *B=Base-*B;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -