1 Star 0 Fork 0

jsshinechow/JW

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
test.c 99.96 KB
一键复制 编辑 原始数据 按行查看 历史
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033
/*test.c,各种测试函数*/
extern const unsigned short c_SystemPowerStd[];
extern GATE_PEAK GatePeak;
#if C_MAX_DOT_NUMBER > C_SCREEN_WIDTH
u_short dac_line[C_MAX_DOT_NUMBER];
#else
u_short dac_line[C_SCREEN_WIDTH];
#endif
u_short daccurve[C_SCREEN_WIDTH];
int TestMenu(void)
{
if(MGetSystemMode() == 1)return C_FALSE;
int xpos = ( C_HORIDOT_SCREEN - C_CCHAR_HDOT * 9 ) / 8 * 8;
int ypos = C_COORVPOSI;
int keycode;
int char_len = 6;
int row_number = 6;
u_int row_height = 24;
int retvalue = 0;
#if C_MAKELIB == 1
row_number = 6;
#elif C_DEVTYPE == 4 || C_DEVTYPE == 20 || C_DEVTYPE == 5
row_number = 4;
#elif C_DEVTYPE == 3 || C_DEVTYPE == 8 || C_DEVTYPE == 11 || C_DEVTYPE == 12
row_number = 4;
#else
row_number = 7;
#endif
ClearEnvelope(); //清包络或峰值
MSetAcquisitionEnable(0,C_SETMODE_SETSAVE);
MSetHardEchoShow(0,C_SETMODE_SETSAVE);
ClearEnvelope();
SystemParaStore();
ChannelParaStore();
MSetColor(C_CR_MENU);
EraseDrawRectangle(xpos, ypos, xpos+ (char_len+1)*C_CCHAR_HDOT, ypos + row_number * row_height) ;
CMenuOut(xpos + C_ECHAR_HDOT,ypos+4,_TestMenu_A1,char_len,row_number,row_height); /*在指定位置根据每行字符数、行数、行高写菜单*/
MSetColor(C_CR_UNDO);
MSetSystemMode(1,0); //设置成自动调节状态
keycode = MenuKeyReturn(row_number,3); /*出现菜单时,按不大于keymax的键返回,mode=0其它键无效,=1确认键有效,=2返回键有效,=3确认返回键有效*/
//;MCoorDraw(C_COORHPOSI ,C_COORVPOSI , C_COORHEIGHT , C_COORWIDTH ); /*画坐标,清除波形区内容*/
MChannelRenovate();
DisplayPrompt(15);
switch (keycode)
{
case 1:
retvalue = TestMenuOffset();
break;
case 2:
retvalue = C_TRUE;
if( DisplayQuery(1) == 1)
{
if( TestMenuOffset() == C_FALSE)
{
retvalue = C_FALSE;
}
}
if(retvalue == C_TRUE)retvalue = TestMenuAngle();
break;
case 3:
MSetTestStatus(C_MAKE_DACAVG,0); //设置成制作DAC
retvalue = TestMenuDac();
break;
case 4:
MSetTestStatus(C_MAKE_DACAVG,1); //设置成制作AVG
retvalue = TestMenuDac();
break;
/*case 5:
#if C_DEVTYPE != 3 && C_DEVTYPE != 8 && C_DEVTYPE != 12 && C_DEVTYPE != 11
TestMenuFft();
#else
TestMenuSystem();
#endif
retvalue = C_FALSE;
break;
case 6:
#if C_MAKELIB == 1
retvalue = TestMenuSensitivity();
#else
TestFlawHigh(); //测高
retvalue = C_FALSE;
#endif
break;
case 7:
retvalue = TestMenuSystem();
break;
case 8:
break;
case 9:
retvalue = TestMenuThick();
break;*/
case C_KEYCOD_RETURN:
break;
}
if( retvalue == C_FALSE)
{
SystemParaRestore();
ChannelParaRestore();
}
else
{
SystemParaStore();
ChannelParaStore();
}
MKeyRlx();
MSetSystemMode(0,C_SETMODE_SETSAVE); //设置成测试状态
MSetSystem();
MSetAcquisition(1);
ScreenRenovate();
DrawDac(0);
return C_TRUE;
}
int TestMenuOffset(void)
{
int xpos = ( C_HORIDOT_SCREEN - C_CCHAR_HDOT * 8 - C_ECHAR_HDOT * 13) / 8 * 8;
int ypos = C_COORVPOSI;
u_int para_xpos,para_ypos;
u_int testrange[3]; //待测声程值
u_int offset;
int deci_len, number = 1;
//u_short* cpText;
//u_int crow_height = 24;
int retvalue = -1;
u_int row_height = 24;
int keycode;
DisplayPrompt(15);
MSetColor(C_CR_MENU);
CMenuOut(0,0,_TestMenu_A1+1,5,1,row_height);
EraseDrawRectangle(xpos, ypos, xpos+ 14*C_CCHAR_HDOT, ypos + 4 * row_height) ;
CEMenuOut(xpos + C_ECHAR_HDOT,ypos+4,_TestMenu_AB1,8,4,row_height);
MSetColor(C_CR_UNDO);
para_xpos = xpos + 8 * C_CCHAR_HDOT; /*写参数,位置水平方向右移*/
para_ypos = ypos + 4;
offset = C_OFF_TEMP + 0;
MCopyProtectedMemory( testrange, (void*)offset, 12, PM_COPY_READ);
testrange[2] = 0;
while(retvalue == -1)
{
/*声速*/
xpos = para_xpos;
ypos = para_ypos + row_height *0 ;
WriteSpeed(xpos,ypos+C_ECHAR_VDOT+1 );
/*一次声程*/
ypos = para_ypos + row_height *1 ;
WriteLongness(xpos,ypos+C_ECHAR_VDOT+1,testrange[1],5,1);
/*
if( MGetUnitType() > 0)
{//单位inch
Write_Number(xpos,ypos+C_ECHAR_VDOT+1 ,testrange[1],6,3,0);
EMenuOut(xpos + 6 * C_ECHAR_VDOT,ypos+8,"inch",4,1,8);
}
else
{
Write_Number(xpos,ypos+C_ECHAR_VDOT+1 ,testrange[1],6,1,0);
EMenuOut(xpos + 6 * C_ECHAR_VDOT,ypos+8,"mm ",4,1,8);
}
//*/
/*二次声程*/
ypos = para_ypos + row_height *2 ;
WriteLongness(xpos,ypos+C_ECHAR_VDOT+1,testrange[2],5,1);
/*
if( MGetUnitType() > 0)
{//单位inch
Write_Number(xpos,ypos+C_ECHAR_VDOT+1 ,testrange[2],6,3,0);
EMenuOut(xpos + 6 * C_ECHAR_VDOT,ypos+8,"inch",4,1,8);
}
else
{
Write_Number(xpos,ypos+C_ECHAR_VDOT+1 ,testrange[2],6,1,0);
EMenuOut(xpos + 6 * C_ECHAR_VDOT,ypos+8,"mm ",4,1,8);
}
//*/
keycode = MenuKeyReturn(3,3); /*出现菜单时,按不大于keymax的键返回,mode=0其它键无效,=1确认键有效,=2返回键有效,=3确认返回键有效*/
ypos = para_ypos + row_height * (keycode - 1);
switch (keycode)
{
case 1:
if( MGetUnitType() > 0)deci_len = 2;//单位inch
else deci_len = 0;
number = 0;
if ( Input_Number(xpos,ypos,&number,4, &deci_len,0) == 1)
{
MSetSpeed(number,C_SETMODE_SAVE); /*设置当前通道 */
}
break;
case 2:
if( MGetUnitType() > 0)deci_len = 3;//单位inch
else deci_len = 1;
number = 0;
if ( Input_Number(xpos,ypos,&number,4, &deci_len,0) == 1)
{
testrange[1] = number;
///if( MGetProbeMode() == C_P_TRANSMISSION)testrange[2] = number * 3;
///else testrange[2] = number * 2;
}
break;
case 3:
if( MGetUnitType() > 0)deci_len = 3;//单位inch
else deci_len = 1;
number = 0;
if ( Input_Number(xpos,ypos,&number,4, &deci_len,0) == 1)
{
testrange[2] = number;
}
break;
case C_KEYCOD_RETURN:
retvalue = 0;
break;
case C_KEYCOD_CONFIRM:
if( testrange[1] > 10)
{
retvalue = 1;
offset = C_OFF_TEMP + 0;
MCopyProtectedMemory( (void*)offset, testrange, 12, PM_COPY_WRITE);
}
break;
}
}
if(retvalue == 1)
{
MSetTestStatus(C_TEST_DAC,0); //设置测试状态,DAC作
MSetTestStatus(C_TEST_AVG,0); //设置测试状态,AVG作
MSetFunctionMode(0,C_FUNCTION_ALL);
MSetSystem();
MChannelRenovate(); //本通道屏幕参数刷表
while(1)
{
if (TestOffset(testrange[1],testrange[2],0) == C_FALSE)return C_FALSE;
///if( DisplayQuery(12) == 1)
return C_TRUE;
}
}
return C_FALSE;
}
int TestOffset(u_int testrange1,u_int testrange2,u_int mode)
{
/*
t = ( R2*T1 - R1 * T2)/( R2 - R1) = T1 - (T2-T1)R1/(R2-R1)
*/
GateMax.Amp = 0; //最高波置初值为0
int gain = 400,range = 1000,offset = 0, offset0 = 0, delay = 0,speed = MGetSpeed();
u_int echotime = 0;
u_int gateamp;
u_int char_len,row_number,crow_height;
//int number,deci_len;
int xpos,ypos,menu_xpos,menu_ypos;
int confirm_num = 0;
u_int preElapsedtime;
int retvalue = C_TRUE;
int keycode;
int gatetype = 0;
//int i;
u_int testrange0 = testrange1;
MKeyRlx();
MSetEchoMode(0,C_SETMODE_SAVE);
if( MGetProbeMode() == C_DPROBE )
{
offset0 = 160*800/( testrange1 + testrange2 );
if( offset0 > 160 * 8)offset0 = (offset0 - 160 * 8)/2 + 160 * 8;
if( offset0 > 160 * 4)offset0 = (offset0 - 160 * 4)/2 + 160 * 4;
if( offset0 > 160 * 2)offset0 = (offset0 - 160 * 2)/2 + 160 * 2;;
MSetGatePara(C_COORHORIUNIT * 4-2,C_COORHORIUNIT * 4,120,0,C_SETMODE_SETSAVE);
}
else MSetGatePara(C_COORHORIUNIT * 4-2,C_COORHORIUNIT * 2,120,0,C_SETMODE_SETSAVE);
MSetBGateMode(0,C_SETMODE_SETSAVE);
MSetGatePara(C_COORHORIUNIT * 4,C_COORHORIUNIT * 2,0,1,C_SETMODE_SETSAVE);
range = testrange0 * 10/4; //放在第4格
// if( MGetProbeMode() == C_P_TRANSMISSION)range /= 2;
MSetPara(gain,0,0,2,range,offset0,delay,MGetAngle(0),speed);
// MSetPulseMode(0,C_SETMODE_SAVE);
MSetSystem();
MChannelRenovate(); //本通道屏幕参数刷表
MSetFunctionMode(0,C_FUNCTION_ALL);
MSetAcquisition(1);
char_len = 7;
row_number = 3;
crow_height = 24;
menu_xpos = C_COORHORIUNIT * 10-(char_len+1)*C_CCHAR_HDOT;
menu_ypos = C_COORVPOSI + 1;
MSetColor(C_CR_MENU);
EraseDrawRectangle(menu_xpos, menu_ypos, C_COORHORIUNIT * 10, menu_ypos + crow_height * row_number) ;
CEMenuOut(menu_xpos + C_ECHAR_HDOT,menu_ypos + 4, _TestMenu_AB3 ,char_len,row_number,crow_height); /*在指定位置根据每行字符数、行数、行高写菜单*/
WriteLongness(menu_xpos + 11 * C_ECHAR_HDOT, menu_ypos + 3,testrange0,4/*总长*/,0/*是否写单位*/);
if( MGetUnitType() > 0)EMenuOut(menu_xpos + 11 * C_ECHAR_HDOT, menu_ypos + 12,"in",2,1,8);
else EMenuOut(menu_xpos + 11 * C_ECHAR_HDOT, menu_ypos + 12,"mm",2,1,8);
///Write_Number(menu_xpos + 11 * C_ECHAR_HDOT,menu_ypos + 4 ,testrange0,4,1,0);
MSetColor(C_CR_UNDO);
xpos = 0;
ypos = 0;
ClearCursor(2);
MSetGateParaInit(); //门内最高波设初值
preElapsedtime = GetElapsedTime(); //开始测试时间
///MSetSystemMode(1,0); //设置成自动调节状态
DisplayPrompt(15);
MSetColor(C_CR_MENU);
CMenuOut(0,0,_TestMenu_A1+1,5,1,24);
while (1)
{
if (!MGetFunctionMode(C_ECHOMAX_MEMORY))
{
if(MAdjustGain(0,1,MGetAmpStdMax()/2,MGetAmpStdMax()))
{
MSetGateParaInit(); //门内最高波设初值
}
}
keycode = MGetKeyCode(0);
MParaRenovate(0);
gateamp = MGetAmpMax(gatetype);
if(!MGetFunctionMode(C_ECHOMAX_MEMORY))
{
if(MGetGateParaMax(gatetype) == C_TRUE)
{
ClearCursor(2);
xpos = GateMax.Pos;
ypos = C_COORVPOSI + C_COORHEIGHT - 2 - GateMax.Amp ;
if(GateMax.Amp < C_COORHEIGHT) DrawCursor(xpos,ypos,2);
}
}
else
{
xpos = GateMax.Pos;
ypos = C_COORVPOSI + C_COORHEIGHT - 2 - GateMax.Amp ;
}
if(false )//2004-8-13日改,下面语句段不执行
//if(gateamp < 40 * 2 && MGetBaseGain() + MGetCompGain() >= C_MAX_ADJUSTGAIN && GetElapsedTime() > preElapsedtime + 1000 * 30 * 1 )
{
//增益已达80dB,门内仍无回波,且开始已30s
ClearCursor(2);
GateMax.Amp = 0;
// xpos = C_COORHORIUNIT * 6-(char_len+1)*C_CCHAR_HDOT;
// ypos = C_COORVPOSI + 1;
if(GetElapsedTime() > preElapsedtime + 1000 * 40 * 1 )
{
//如开始测试后90s仍无回波,此时应进行自动寻波
MGateDraw();
MSetGatePara(C_COORHORIUNIT * 2,C_COORHORIUNIT * 8,120,0,C_SETMODE_SETSAVE);
MSetRange(MGetRange(1)*2,C_SETMODE_SETSAVE); //当前范围乘2
MSetColor(C_CR_MENU);
CEMenuOut(menu_xpos + C_ECHAR_HDOT,menu_ypos + 4, _TestMenu_AB5 ,char_len,row_number,crow_height); /*在指定位置根据每行字符数、行数、行高写菜单*/
//提示:请将探头置于恰当位置仪器开始自动调节参量
BuzzerOn(20); /*蜂鸣0.1 * time 秒,如果参数time=0则转换当前蜂鸣状态*/
MAdjustGain(0,0,MGetAmpStdMax(),MGetAmpStdMax()) ;
if( MGetAmpMax(gatetype) >= 40 * 2)
{
range = MGetAmpDist1(gatetype) * 10 /6.5 ;
MSetRange(range,C_SETMODE_SETSAVE); //当前范围
WriteRange(C_RANGE_HPOSI,C_RANGE_VPOSI);
}
MSetGatePara(C_COORHORIUNIT * 6,C_COORHORIUNIT * 2,120,0,C_SETMODE_SETSAVE);
MGateDraw();
offset = MGetOffset();
speed = MGetSpeed(); //从新开始
MSetRange( MGetRange(1),C_SETMODE_SETSAVE); //当前范围乘2
gateamp = 1; //临时用作标志,第gateamp次调整零点
GateMax.Amp = 1; //临时用作标志,第GateMax.Amp次调整声速
while( MGetAmpMax(gatetype) < 40 * 2)
{
//Write_Number(0,10,speed,5,0,0);
offset = MGetOffset();
while( MGetAmpMax(gatetype) < 40 * 2 )
{
if( gateamp%2 == 1)
{
offset += 16 * 1; //0.1us
if ( offset > C_MAX_OFFSET )
{
offset = MGetOffset();
gateamp++; //调整次数变为2
}
}
else
{
offset -= 16 * 1; //0.1us
if(offset < 80 * 1)break;
}
MSetOffset(offset,C_SETMODE_SETSAVE);
//Write_Number(0,0,offset,5,0,0);
ExpendTime(100);
}
if ( MGetAmpMax(gatetype) < 40 * 2 && GateMax.Amp%2 == 1 )
{
//奇数次调整声速
speed += 100;
if( speed >= 10000)
{
GateMax.Amp ++;
speed = MGetSpeed(); //从新开始
}
}
else if(GateMax.Amp%2 == 1 )
{
speed -= 100;
if( speed < 1000)
{
GateMax.Amp ++;
speed = MGetSpeed(); //从新开始
EraseDrawRectangle(menu_xpos, menu_ypos, C_COORHORIUNIT * 10, ypos + row_number * crow_height) ;
MSetColor(C_CR_MENU);
CEMenuOut(menu_xpos + C_ECHAR_HDOT,menu_ypos + 4, _TestMenu_AB6 ,char_len,row_number,crow_height); /*在指定位置根据每行字符数、行数、行高写菜单*/
//提示:()确认参数输入正确且探头良好并放在试块上
BuzzerOn(20); /*蜂鸣0.1 * time 秒,如果参数time=0则转换当前蜂鸣状态*/
MSetOffset(MGetOffset(),C_SETMODE_SETSAVE);
MSetSpeed(MGetSpeed(),C_SETMODE_SETSAVE);
while ( MAnyKeyReturn() != C_KEYCOD_CONFIRM );
break;
}
}
MSetSpeed(speed,C_SETMODE_SETSAVE);
}
if( MGetAmpMax(gatetype) >= 40 * 2)
{
MSetSpeed(speed,C_SETMODE_SETSAVE);
MSetOffset(offset,C_SETMODE_SETSAVE);
}
preElapsedtime = GetElapsedTime();
GateMax.Amp = 0;
}
else if(GetElapsedTime() > preElapsedtime + 1000 * 30 * 1 )
{
//如开始测试后30s仍无回波,此时进行提示
ExpendTime( 100 * 1); //延时1s
MSetColor(C_CR_MENU);
CEMenuOut(menu_xpos + C_ECHAR_HDOT,menu_ypos + 4, _TestMenu_AB4 ,char_len,row_number,crow_height); /*在指定位置根据每行字符数、行数、行高写菜单*/
//提示:请将探头置于恰当位置使反射体回波处于门内
BuzzerOn(10) ; /*峰鸣0.1 * 10 秒*/
ExpendTime( 100 * 2); //延时1s
}
if( MGetAmpMax(gatetype) > 40 * 2)
{
MSetSpeed(speed,C_SETMODE_SETSAVE);
MSetOffset(offset,C_SETMODE_SETSAVE);
}
EraseDrawRectangle(menu_xpos, menu_ypos, C_COORHORIUNIT * 10, menu_ypos + row_number * crow_height) ;
MSetColor(C_CR_MENU);
CEMenuOut(menu_xpos + C_ECHAR_HDOT,menu_ypos + 4, _TestMenu_AB3 ,char_len,row_number,crow_height); /*在指定位置根据每行字符数、行数、行高写菜单*/
WriteLongness(menu_xpos + 11 * C_ECHAR_HDOT, menu_ypos + 3,testrange0,4/*总长*/,0/*是否写单位*/);
if( MGetUnitType() > 0)EMenuOut(menu_xpos + 11 * C_ECHAR_HDOT, menu_ypos + 12,"in",2,1,8);
else EMenuOut(menu_xpos + 11 * C_ECHAR_HDOT, menu_ypos + 12,"mm",2,1,8);
/// Write_Number(menu_xpos + 11 * C_ECHAR_HDOT,menu_ypos + 4 ,testrange0,4,1,0);
MKeyRlx();
}
//if(keycode >=0 && keycode < C_KEYCODMAX)
// BuzzerOn(1); ///*峰鸣0.1 * 1 秒*/
if(keycode == C_KEYCOD_CONFIRM && confirm_num == 0)
{
//t = ( R2*T1 - R1 * T2)/( R2 - R1) = T1 - (T2-T1)R1/(R2-R1)
MKeyRlx();
confirm_num++;
ClearCursor(2);
//echotime = MGetAmpTime(gatetype);
//testrange0 = MGetAmpDist(gatetype);
echotime = GateMax.Time;
testrange0 = GateMax.Dist;
//
offset = echotime - testrange1*C_SAMPLE_FREQ/speed;//先按预置声速和一次波时间算出零点
if( testrange2 <= testrange1 )
{
//如果二次声程小于一次声程或为0,则只测一次
confirm_num++;
break;
}
else
{
//range = MGetRange(3) + (testrange2 + testrange0 - 2*testrange1) * 100/40; //放在第4格
range = (testrange2 + testrange0 - testrange1) * 100/40; //放在第4格
testrange0 = testrange2;
// if( MGetProbeMode() == C_P_TRANSMISSION)range /= 2;
gain = MGetBaseGain()+120;
MSetRange(range,C_SETMODE_SETSAVE);
MSetBaseGain(gain,C_SETMODE_SAVE);
MSetSystem();
if( MGetProbeMode() == C_DPROBE )MSetGatePara(C_COORHORIUNIT * 4-7,C_COORHORIUNIT * 3,120,0,C_SETMODE_SETSAVE);
else MSetGatePara(C_COORHORIUNIT * 4-7,C_COORHORIUNIT * 1.5,120,0,C_SETMODE_SETSAVE);
if( !MGetFunctionMode(C_ECHOMAX_MEMORY))ClearCursor(2);
else ClearEnvelope();
MChannelRenovate(); //本通道屏幕参数刷表
//WriteRange(C_RANGE_HPOSI,C_RANGE_VPOSI);
//WriteScale(); //标度
GateMax.Amp = 0;
//MGateDraw();
//MGateDraw();
char_len = 7;
row_number = 3;
crow_height = 24;
EraseDrawRectangle(menu_xpos, menu_ypos, C_COORHORIUNIT * 10, menu_ypos + crow_height * row_number) ;
MSetColor(C_CR_MENU);
CEMenuOut(menu_xpos + C_ECHAR_HDOT,menu_ypos + 4, _TestMenu_AB3 ,char_len,row_number,crow_height); /*在指定位置根据每行字符数、行数、行高写菜单*/
xpos = C_COORHORIUNIT * 10-(char_len+1)*C_CCHAR_HDOT;
ypos = C_COORVPOSI + 1;
WriteLongness(xpos + 11 * C_ECHAR_HDOT, ypos + 3,testrange0,4/*总长*/,0/*是否写单位*/);
if( MGetUnitType() > 0)EMenuOut(xpos + 11 * C_ECHAR_HDOT, ypos + 12,"in",2,1,8);
else EMenuOut(xpos + 11 * C_ECHAR_HDOT, ypos + 12,"mm",2,1,8);
///Write_Number(xpos + 11 * C_ECHAR_HDOT,ypos + 4 ,testrange0,4,1,0);
}
}
else if(keycode == C_KEYCOD_CONFIRM && confirm_num == 1)
{
MKeyRlx();
confirm_num++;
//offset = MGetAmpTime(gatetype) - echotime ; //T2 - T1
offset = GateMax.Time - echotime ; //T2 - T1
offset = echotime - testrange1 * offset / (testrange2 - testrange1);
///t = ( R2*T1 - R1 * T2)/( R2 - R1) = T1 - (T2-T1)R1/(R2-R1)
speed = testrange1 * C_SAMPLE_FREQ/(echotime - offset);
if(MGetAngle(0)<=350)//小角度探头由输入的垂直声程、标称角度获得距离后再计算声速
speed=(int)((float)(testrange1 * C_SAMPLE_FREQ) * ((float)(10000) / (float)(MGetAngle(3))) / (float)(echotime - offset));
MSetSpeed(speed,C_SETMODE_SETSAVE);
break;
}
else if(keycode == C_KEYCOD_RETURN)
{
if( DisplayQuery(4) == 1)
{
retvalue = C_FALSE;
//SystemParaRestore();
//ChannelParaRestore();
break;
}
}
else if (keycode == C_KEYCOD_FUNCTION)
{
if( !MGetFunctionMode(C_ECHOMAX_MEMORY))ClearCursor(2);
else ClearEnvelope();
MSetFunctionMode(MGetFunctionMode(C_ECHOMAX_MEMORY)+1,C_ECHOMAX_MEMORY);
MSetGateParaInit(); //门内最高波设初值
MKeyRlx();
}
else if(keycode == C_KEYCOD_BASEGAIN )//&& GetSameKeyTime() > 20)MAdjustGain(0,0,MGetAmpStdMax(),MGetAmpStdMax());
{
MAdjustGain(0,0,MGetAmpStdMax(),MGetAmpStdMax());
MSetGateParaInit(); //门内最高波设初值
MKeyRlx();
}
/* else if(keycode == C_KEYCOD_BASEGAIN)
{
if (GetSameKeyTime() > 20)
{
MAdjustGain(0,0,MGetAmpStdMax(),MGetAmpStdMax());
}
else
{
GainChange();
MSetColor(C_CR_MENU);
CMenuOut(0,0,_TestMenu_A1+1,5,1,crow_height);
}
}
//*/
else if (keycode == C_KEYCOD_GATE)
{
GateChange();
//CMenuOut(0,0,_TestMenu_A1+1,5,1,crow_height);
}
else if (keycode == C_KEYCOD_RANGE)
{
RangeChange();
//CMenuOut(0,0,_TestMenu_A1+1,5,1,crow_height);
}
//else if (keycode == C_KEYCOD_OFFSET)
//{
// OffsetChange();
//}
else continue;
DisplayPrompt(15);
MSetColor(C_CR_MENU);
CMenuOut(0,0,_TestMenu_A1+1,5,1,24);
//ExpendTime(10);
}
if( confirm_num > 1)
{
// if( MGetProbeMode() == C_P_TRANSMISSION)offset /= 2;
MSetOffset(offset + MGetOffset(),C_SETMODE_SETSAVE);
if( MGetProbeMode() == C_APROBE )
{
//斜探头
char_len = 8;
row_number = 2;
crow_height = 24;
menu_xpos = C_COORHORIUNIT * 10-(char_len+1)*C_CCHAR_HDOT;
menu_ypos = C_COORVPOSI + 1;
//;MCoorDraw(C_COORHPOSI ,C_COORVPOSI , C_COORHEIGHT , C_COORWIDTH ); /*画坐标,清除波形区内容*/
MChannelRenovate();
EraseDrawRectangle(menu_xpos, menu_ypos, C_COORHORIUNIT * 10, menu_ypos + row_number * crow_height) ;
MSetColor(C_CR_MENU);
CEMenuOut(menu_xpos + C_ECHAR_HDOT,menu_ypos + 4, _TestMenu_AB7,char_len,row_number,crow_height);
int number,deci_len;
if( MGetUnitType() > 0)deci_len = 3;//单位inch
else deci_len = 1;
number = testrange1;
menu_xpos = menu_xpos+10*C_ECHAR_HDOT;
menu_ypos = C_COORVPOSI + 37;
while(1)
{
if( Input_Number(menu_xpos, menu_ypos,&number,2, &deci_len,0) != 1)break;
else
{
if( number <= testrange1)
{
///Write_Number(menu_xpos, menu_ypos, number, 2, 1, 0);
WriteLongness(menu_xpos,menu_ypos,number,4,1);
MSetForward(testrange1-number,C_SETMODE_SAVE);
break;
}
else DisplayPrompt(4);
}
}
}
MSetTestStatus(C_TEST_OFFSET,1); //设置测试状态,零点已测
MSetGatePara(C_COORHORIUNIT * 3, C_COORHORIUNIT * 2 ,120,0,C_SETMODE_SETSAVE);
// MChannelRenovate(); //本通道屏幕参数刷表
//SystemParaStore();
//ChannelParaStore();
retvalue = C_TRUE;
}
MKeyRlx();
range = testrange1 * 100/40; //放在第6.5格
MSetRange(range,C_SETMODE_SETSAVE);
WriteScale(); //标度
MSetFunctionMode(0,C_ECHOMAX_MEMORY);
return retvalue;
}
int TestMenuAngle(void)
{
int xpos = ( C_HORIDOT_SCREEN - C_CCHAR_HDOT * 11 - C_ECHAR_HDOT * 10) / 8 * 8;
int ypos = C_COORVPOSI;
u_int para_xpos,para_ypos;
u_int testrange[2]; //[0]反射体深度,[1]反射体直径,
u_int offset;
int deci_len, number = 1;
int retvalue = -1;
u_int row_height = 24;
int keycode;
ScreenRenovate();
DisplayPrompt(15);
MSetColor(C_CR_MENU);
CMenuOut(0,0,_TestMenu_A1+7,5,1,row_height);
EraseDrawRectangle(xpos, ypos, xpos+ 14*C_CCHAR_HDOT, ypos + 4 * row_height) ;
CEMenuOut(xpos + C_ECHAR_HDOT,ypos+4,_TestMenu_AC1,9,4,row_height); /*在指定位置根据每行字符数、行数、行高写菜单*/
MSetColor(C_CR_UNDO);
offset = C_OFF_TEMP + 20;
MCopyProtectedMemory( testrange, (void*)offset, 8, PM_COPY_READ);
para_xpos = xpos + 9 * C_CCHAR_HDOT; /*写参数,位置水平方向右移*/
para_ypos = ypos + 4;
while(retvalue == -1)
{
/*直径 */
xpos = para_xpos;
ypos = para_ypos + row_height *0 ;
WriteLongness(xpos,ypos+C_ECHAR_VDOT+1,testrange[0],5,1);
/*
if( MGetUnitType() > 0)
{//单位inch
Write_Number(xpos,ypos+C_ECHAR_VDOT+1 ,testrange[0],4,3,0);
EMenuOut(xpos + 6 * C_ECHAR_VDOT,ypos+8,"in",2,1,8);
}
else
{
Write_Number(xpos,ypos+C_ECHAR_VDOT+1 ,testrange[0],4,1,0);
EMenuOut(xpos + 6 * C_ECHAR_VDOT,ypos+8,"mm",2,1,8);
}
//*/
/*深度*/
ypos = para_ypos + row_height *1 ;
WriteLongness(xpos,ypos+C_ECHAR_VDOT+1,testrange[1],5,1);
/*
if( MGetUnitType() > 0)
{//单位inch
Write_Number(xpos,ypos+C_ECHAR_VDOT+1 ,testrange[1],4,3,0);
EMenuOut(xpos + 6 * C_ECHAR_VDOT,ypos+8,"in",2,1,8);
}
else
{
Write_Number(xpos,ypos+C_ECHAR_VDOT+1 ,testrange[1],4,1,0);
EMenuOut(xpos + 6 * C_ECHAR_VDOT,ypos+8,"mm",2,1,8);
}
//*/
/*标称K值\折射*/
xpos = para_xpos ;
ypos = para_ypos + row_height *2;
Write_Number(xpos + 0 * C_ECHAR_HDOT,ypos+C_ECHAR_VDOT+1 ,( MGetAngle(1) + 50)/100,4,2,0);
Write_Ascii(xpos + 4 * C_ECHAR_HDOT,ypos+C_ECHAR_VDOT+1 ,'/');
Write_Number(xpos + 5 * C_ECHAR_HDOT,ypos+C_ECHAR_VDOT+1 ,MGetAngle(0),4,1,0);
Write_Ascii(xpos + 9 * C_ECHAR_HDOT,ypos+C_ECHAR_VDOT+1 ,130);
keycode = MenuKeyReturn(3,3); /*出现菜单时,按不大于keymax的键返回,mode=0其它键无效,=1确认键有效,=2返回键有效,=3确认返回键有效*/
ypos = para_ypos + row_height * (keycode - 1);
switch (keycode)
{
case 1:
if( MGetUnitType() > 0)deci_len = 3;//单位inch
else deci_len = 1;
number = 0;
if ( Input_Number(xpos,ypos,&number,4, &deci_len,0) == 1)
testrange[0] = number;
break;
case 2:
if( MGetUnitType() > 0)deci_len = 3;//单位inch
else deci_len = 1;
number = 0;
if ( Input_Number(xpos,ypos,&number,4, &deci_len,0) == 1)
testrange[1] = number;
break;
case 3:
deci_len = 2;
number = 0;
if ( Input_Number(xpos,ypos,&number,2, &deci_len,0) == 1)
{
if(number<1000) /*斜探头输入K值*/
MSetKvalue(number,C_SETMODE_SAVE);
else MSetAngle(number/10,C_SETMODE_SAVE); /*设置当前通道 */
}
break;
case C_KEYCOD_RETURN:
retvalue = 0;
break;
case C_KEYCOD_CONFIRM:
retvalue = 1;
offset = C_OFF_TEMP + 20;
MCopyProtectedMemory( (void*)offset, testrange, 8, PM_COPY_WRITE);
break;
}
}
if(retvalue == 1 && MGetAngle(0) > 0)
{
while(1)
{
if (TestAngle(testrange[0],testrange[1]) == C_FALSE)return C_FALSE;
///if( DisplayQuery(12) == 1)
return C_TRUE;
}
}
else if(retvalue == 1 && MGetAngle(0) == 0)return C_TRUE;
return C_FALSE;
}
int TestAngle(u_int diameter,u_int depth) //直径、深度
{
GateMax.Amp = 0; //最高波置初值为0
int gain = 600,range = 1000,angle;
//u_int echotime;
u_int gateamp;
u_int char_len,row_number,crow_height;
//int number,deci_len;
int xpos,ypos;
u_int preElapsedtime;
int retvalue = C_TRUE;
int keycode;
int gatetype = 0;
double dAngle;
u_int testrange0 = depth * 10000 / MGetAngle(3) - diameter/2;
//MGetAngle(3) = 34.2
//depth = 0.03
MSetAcquisition(1);
MKeyRlx();
MSetScaleMode(2,0);
MSetFunctionMode(0,C_FUNCTION_ALL);
MSetDelay(0,C_SETMODE_SAVE);
MSetBaseGain(gain,C_SETMODE_SAVE);
MSetCompGain(0,C_SETMODE_SAVE);
MSetSurfGain(0,C_SETMODE_SAVE);
MSetEchoMode(0,C_SETMODE_SAVE);
MSetGatePara(C_COORHORIUNIT * 6,C_COORHORIUNIT * 2,120,0,C_SETMODE_SETSAVE);
MSetBGateMode(0,C_SETMODE_SETSAVE);
MSetGatePara(C_COORHORIUNIT * 6,C_COORHORIUNIT * 2,0,1,C_SETMODE_SETSAVE);
range = testrange0 * 100/70; //放在第7格
MSetRange(range,C_SETMODE_SAVE);
MSetSystem();
MChannelRenovate(); //本通道屏幕参数刷表
char_len = 7;
row_number = 3;
crow_height = 24;
xpos = C_COORHORIUNIT * 6-(char_len+1)*C_CCHAR_HDOT;
ypos = C_COORVPOSI + 1;
EraseDrawRectangle(xpos, ypos, C_COORHORIUNIT * 6, ypos + crow_height * row_number) ;
MSetColor(C_CR_MENU);
CEMenuOut(xpos + C_ECHAR_HDOT,ypos + 4, _TestMenu_AC3 ,char_len,row_number,crow_height); /*在指定位置根据每行字符数、行数、行高写菜单*/
WriteLongness(xpos + 11 * C_ECHAR_HDOT, ypos + 4,depth,4/*总长*/,0/*是否写单位*/);
if( MGetUnitType() > 0)EMenuOut(xpos + 11 * C_ECHAR_HDOT, ypos + 12,"in",2,1,8);
else EMenuOut(xpos + 11 * C_ECHAR_HDOT, ypos + 12,"mm",2,1,8);
/// Write_Number(xpos + 11 * C_ECHAR_HDOT,ypos + 4 ,depth,4,1,0);
GateMax.Amp = 0;
xpos = 0;
ypos = 0;
ClearCursor(2);
preElapsedtime = GetElapsedTime(); //开始测试时间
///MSetSystemMode(1,0); //设置成自动调节状态
xpos = 0;
ypos = 0;
ClearCursor(2);
DisplayPrompt(15);
MSetColor(C_CR_MENU);
CMenuOut(0,0,_TestMenu_A1+7,5,1,24);
while (1)
{
if( !MGetFunctionMode(C_ECHOMAX_MEMORY) )
{
if (MAdjustGain(0,1,MGetAmpStdMax()/2,MGetAmpStdMax()+10) )
{
GateMax.Amp = 0; //增益自动调节过
}
}
MParaRenovate(0);
keycode = MGetKeyCode(0);
gateamp = MGetAmpMax(gatetype);
if(!MGetFunctionMode(C_ECHOMAX_MEMORY))
{
if(MGetGateParaMax(gatetype) == C_TRUE)
{
ClearCursor(2);
xpos = GateMax.Pos;
ypos = C_COORVPOSI + C_COORHEIGHT - 2 - GateMax.Amp ;
if(GateMax.Amp < C_COORHEIGHT) DrawCursor(xpos,ypos,2);
}
}
else
{
xpos = GateMax.Pos;
ypos = C_COORVPOSI + C_COORHEIGHT - 2 - GateMax.Amp ;
}
dAngle = acos( (float)depth / (float)( GateMax.Time * MGetSpeed() /(C_SAMPLE_FREQ) + diameter / 2) ) ;
Write_Number(C_ECHAR_HDOT*10,0,(int)( 1800 * dAngle/C_PI),4,1,0);
Write_Number(C_ECHAR_HDOT*10,8,(int)( 100*tanf(dAngle) + 0.5),4,2,0);
if(keycode == C_KEYCOD_CONFIRM)
{
ClearCursor(2);
MKeyRlx();
angle = (int)( 1800.0 * dAngle/C_PI +0.5 );
MSetAngle(angle,0);
MSetTestStatus(C_TEST_ANGLE,1); //设置测试状态,K值已测
//SystemParaStore();
//ChannelParaStore();
retvalue = C_TRUE;
break;
}
else if(keycode == C_KEYCOD_RETURN)
{
if( DisplayQuery(4) == 1)
{
retvalue = C_FALSE;
// SystemParaRestore();
// ChannelParaRestore();
break;
}
}
else if (keycode == C_KEYCOD_FUNCTION)
{
if( !MGetFunctionMode(C_ECHOMAX_MEMORY))ClearCursor(2);
else ClearEnvelope();
MSetFunctionMode(MGetFunctionMode(C_ECHOMAX_MEMORY)+1,C_ECHOMAX_MEMORY);
MSetGateParaInit(); //门内最高波设初值
MKeyRlx();
}
else if(keycode == C_KEYCOD_BASEGAIN )//&& GetSameKeyTime() > 20)MAdjustGain(0,0,MGetAmpStdMax(),MGetAmpStdMax());
{
MAdjustGain(0,0,MGetAmpStdMax(),MGetAmpStdMax());
MSetGateParaInit(); //门内最高波设初值
MKeyRlx();
}
//; else if(keycode == C_KEYCOD_BASEGAIN && GetSameKeyTime() > 20)MAdjustGain(0,0,MGetAmpStdMax(),MGetAmpStdMax());
else if( keycode == C_KEYCOD_GATE || keycode == C_KEYCOD_BASEGAIN || keycode == C_KEYCOD_RANGE )
{
if( KeyManage(keycode,1) == C_KEYCOD_RETURN) MKeyRlx();
DisplayPrompt(15);
MSetColor(C_CR_MENU);
CMenuOut(0,0,_TestMenu_A1+7,5,1,24);
}
}
MSetFunctionMode(0,C_ECHOMAX_MEMORY);
MKeyRlx();
return retvalue;
}
extern int iItem;
int TestMenuDac(void)
{
int xpos = ( C_HORIDOT_SCREEN - C_CCHAR_HDOT * 8 - C_ECHAR_HDOT * 9) / 8 * 8;
int ypos = C_COORVPOSI;
u_int para_xpos,para_ypos;
u_int testrange[3]; //最大深度、直径、长度
u_int offset;
int deci_len, number = 1;
int retvalue = -1;
u_int row_height = 24;
int keycode;
if( MGetTestStatus(C_MAKE_DACAVG) == 0 )
{
if(MGetTestStatus(C_TEST_OFFSET)==0&&(MGetProbeMode()==0||MGetProbeMode()==2))
{
if( DisplayQuery(1) == 1)///零点声速
{
if( TestMenuOffset() == C_FALSE)
{
retvalue = C_FALSE;
MChannelRenovate();
MSetSystemMode(0,0); //设置成自动调节状态
return 0;
}
}
}
else if((MGetTestStatus(C_TEST_OFFSET)==0||MGetTestStatus(C_TEST_ANGLE)==0)&&(MGetProbeMode()==1||MGetProbeMode()==4))
{
if( DisplayQuery(2) == 1)
{
if( TestMenuOffset() == C_FALSE)
{
retvalue = C_FALSE;
MChannelRenovate();
MSetSystemMode(0,0); //设置成自动调节状态
return 0;
}
if( TestMenuAngle() == C_FALSE )
{
retvalue = C_FALSE;
MSetSystemMode(0,0); //设置成自动调节状态
ScreenRenovate();
return 0;
}
}
}
}
else
{
/*if( DisplayQuery(1) == 1)
{
if( TestMenuOffset() == C_FALSE)
{
retvalue = C_FALSE;
MChannelRenovate();
MSetSystemMode(0,0); //设置成自动调节状态
return 0;
}
}*/
}
MSetGatePara(C_COORHORIUNIT * 6,C_COORHORIUNIT * 2,120,0,C_SETMODE_SETSAVE);
MSetGatePara(C_COORHORIUNIT * 6,C_COORHORIUNIT * 2,0,1,C_SETMODE_SETSAVE);
MSetSystem();
ScreenRenovate(); //本通道屏幕参数刷表
MSetColor(C_CR_MENU);
DisplayPrompt(15);
if( MGetTestStatus(C_MAKE_DACAVG) == 0 )
CMenuOut(0,0,_TestMenu_A1+13,5,1,row_height);
else
CMenuOut(0,0,_TestMenu_A1+19,5,1,row_height);
EraseDrawRectangle(xpos, ypos, xpos+ 11*C_CCHAR_HDOT + C_ECHAR_HDOT, ypos + 4 * row_height) ;
if( MGetTestStatus(C_MAKE_DACAVG) == 0 )
CEMenuOut(xpos + C_ECHAR_HDOT,ypos+4,_TestMenu_AD1A,7,4,row_height); /*在指定位置根据每行字符数、行数、行高写菜单*/
else
CEMenuOut(xpos + C_ECHAR_HDOT,ypos+4,_TestMenu_AD1,7,4,row_height); /*在指定位置根据每行字符数、行数、行高写菜单*/
MSetColor(C_CR_UNDO);
para_xpos = xpos + 7 * C_CCHAR_HDOT; /*写参数,位置水平方向右移*/
para_ypos = ypos + 4;
offset = C_OFF_TEMP + 30;
MCopyProtectedMemory( testrange, (void*)offset, 12, PM_COPY_READ);
while(retvalue == -1)
{
/*最大深度*/
xpos = para_xpos;
ypos = para_ypos + row_height *0 ;
WriteLongness(xpos,ypos+C_ECHAR_VDOT+1,testrange[0],5,1);
/*
if( MGetUnitType() > 0)
{//单位inch
Write_Number(xpos,ypos+C_ECHAR_VDOT+1 ,testrange[0],6,3,0);
EMenuOut(xpos + 6 * C_ECHAR_VDOT,ypos+8,"in",2,1,8);
}
else
{
Write_Number(xpos,ypos+C_ECHAR_VDOT+1 ,testrange[0],6,1,0);
EMenuOut(xpos + 6 * C_ECHAR_VDOT,ypos+8,"mm",2,1,8);
}
//*/
/*反射体直径*/
ypos = para_ypos + row_height *1 ;
/// WriteLongness(xpos,ypos+C_ECHAR_VDOT+1,testrange[1],5,1);
Write_Number(xpos,ypos+C_ECHAR_VDOT+1 ,testrange[1],6,1,0);
EMenuOut(xpos + 6 * C_ECHAR_VDOT,ypos+8,"mm",2,1,8);
/*
if( MGetUnitType() > 0)
{//单位inch
Write_Number(xpos,ypos+C_ECHAR_VDOT+1 ,testrange[1],6,3,0);
EMenuOut(xpos + 6 * C_ECHAR_VDOT,ypos+8,"in",2,1,8);
}
else
{
Write_Number(xpos,ypos+C_ECHAR_VDOT+1 ,testrange[1],6,1,0);
EMenuOut(xpos + 6 * C_ECHAR_VDOT,ypos+8,"mm",2,1,8);
}
//*/
/*反射体长度*/
ypos = para_ypos + row_height *2 ;
if( MGetTestStatus(C_MAKE_DACAVG) == 0 )
{
/// WriteLongness(xpos,ypos+C_ECHAR_VDOT+1,testrange[2],5,1);
Write_Number(xpos,ypos+C_ECHAR_VDOT+1 ,testrange[2],6,1,0);
EMenuOut(xpos + 6 * C_ECHAR_VDOT,ypos+8,"mm",2,1,8);
/*
if( MGetUnitType() > 0)
{//单位inch
Write_Number(xpos,ypos+C_ECHAR_VDOT+1 ,testrange[2],6,3,0);
EMenuOut(xpos + 6 * C_ECHAR_VDOT,ypos+8,"in",2,1,8);
}
else
{
Write_Number(xpos,ypos+C_ECHAR_VDOT+1 ,testrange[2],6,1,0);
EMenuOut(xpos + 6 * C_ECHAR_VDOT,ypos+8,"mm",2,1,8);
}
//*/
//keycode = MenuKeyReturn(3,3); /*出现菜单时,按不大于keymax的键返回,mode=0其它键无效,=1确认键有效,=2返回键有效,=3确认返回键有效*/
while(true)
{
keycode = MAnyKeyReturn();
if( ( keycode >= 1 && keycode <= 3)||
keycode == C_KEYCOD_CONFIRM || keycode == C_KEYCOD_DEL || keycode == C_KEYCOD_RETURN )
break;
}
}
else
{
testrange[2] = 0;
// keycode = MenuKeyReturn(2,3); /*出现菜单时,按不大于keymax的键返回,mode=0其它键无效,=1确认键有效,=2返回键有效,=3确认返回键有效*/
while(true)
{
keycode = MAnyKeyReturn();
if( MGetTestStatus(C_MAKE_DACAVG) != 0 && keycode == C_KEYCOD_DEL)continue;
if( ( keycode >= 1 && keycode <= 2)||
keycode == C_KEYCOD_CONFIRM || keycode == C_KEYCOD_DEL || keycode == C_KEYCOD_RETURN )
break;
}
}
ypos = para_ypos + row_height * (keycode - 1);
if( MGetUnitType() > 0)deci_len = 3;//单位inch
else deci_len = 1;
switch (keycode)
{
case 1:
number = 0;
if ( Input_Number(xpos,ypos,&number,5, &deci_len,0) == 1)
{
testrange[0] = number;
}
break;
case 2:
deci_len = 1;
number = 0;
if ( Input_Number(xpos,ypos,&number,4, &deci_len,0) == 1)
{
///if( number <= 200)
testrange[1] = number;
}
break;
case 3:
deci_len = 1;
number = 0;
if ( Input_Number(xpos,ypos,&number,4, &deci_len,0) == 1)
{
///if( number <= 1000)
testrange[2] = number;
}
break;
case C_KEYCOD_RETURN:
retvalue = 0;
break;
case C_KEYCOD_CONFIRM:
case C_KEYCOD_DEL:
if( MGetUnitType() > 0)
{
if( testrange[0] < 10 || testrange[0] > 50000 || testrange[1] > (int)(1000/0.254) || testrange[2] > (int)(1000/0.254))
{
DisplayPrompt(4);
DisplayPrompt(15);
if( MGetTestStatus(C_MAKE_DACAVG) == 0 )
CMenuOut(0,0,_TestMenu_A1+13,5,1,row_height);
else
CMenuOut(0,0,_TestMenu_A1+19,5,1,row_height);
break;
}
}
else if(MGetUnitType() ==0&&iItem!=7)
{
if( testrange[0] < 10 || testrange[0] > 50000 || testrange[1] > 1000 || testrange[2] > 1000)
{
DisplayPrompt(4);
DisplayPrompt(15);
if( MGetTestStatus(C_MAKE_DACAVG) == 0 )
CMenuOut(0,0,_TestMenu_A1+13,5,1,row_height);
else
CMenuOut(0,0,_TestMenu_A1+19,5,1,row_height);
break;
}
}
else if(MGetUnitType() ==0&&iItem==7)
{
if( testrange[0] < 10 || testrange[0] > 85000 || testrange[1] > 1000 || testrange[2] > 1000)
{
DisplayPrompt(4);
DisplayPrompt(15);
if( MGetTestStatus(C_MAKE_DACAVG) == 0 )
CMenuOut(0,0,_TestMenu_A1+13,5,1,row_height);
else
CMenuOut(0,0,_TestMenu_A1+19,5,1,row_height);
break;
}
}
retvalue = 1;
if( C_KEYCOD_DEL == keycode )retvalue = 2;
offset = C_OFF_TEMP + 30;
MCopyProtectedMemory( (void*)offset, testrange, 12, PM_COPY_WRITE);
break;
}
}
if(retvalue >= 1)
{
while(1)
{
if( retvalue > 1)retvalue = Dac.num;
else retvalue = 0;
if (TestDac(testrange[0],testrange[1],testrange[2],retvalue) == C_FALSE) return C_FALSE;
///if( DisplayQuery(12) == 1)
{
SystemParaStore();
ChannelParaStore();
return C_TRUE;
}
}
}
MSetSystem();
return C_FALSE;
}
extern int iItem;
int TestDac(u_int depthmax,u_int diameter,u_int length,short test_num )//最大深度、反射体直径、长度
{
int gain = 500,range = 1000;
u_int gateamp;
u_char* sampbuffer;
u_int char_len,row_number,crow_height;
//int number,deci_len;
int xpos,ypos,menu_xpos,menu_ypos;
u_int preElapsedtime;
int retvalue = C_TRUE;
int keycode,rotary;
int gatetype = 0;
u_short dac_db[10],dac_dist[10];
short SameKeyTime;
int temp,i,j;
// int offset;
int oldbasegain;
// int newbasegain;
if( depthmax > 1500 && MGetPulseMode() == 0) MSetPulseMode(1,C_SETMODE_SETSAVE);
MSetAcquisition(1);
MSetFunctionMode(0,C_FUNCTION_ALL);
ClearCursor(2);
MKeyRlx();
Dac.num = test_num ; //选中波次数
for(i=0; i< 10; i++)
{
// Dac.db[i] = 0;
// Dac.dist[i] = 0;
dac_db[i] = Dac.db[i] ;
dac_dist[i] = Dac.dist[i] ;
}
if( test_num == 0)
{
if(iItem==7)MSetScaleMode(2,0);
else MSetScaleMode(0,0);
MSetDelay(0,C_SETMODE_SAVE);
MSetBaseGain(gain,C_SETMODE_SETSAVE);
MSetCompGain(0,C_SETMODE_SAVE);
MSetSurfGain(0,C_SETMODE_SAVE);
MSetGatePara(C_COORHORIUNIT * 1,C_COORHORIUNIT * 8,0,1,C_SETMODE_SETSAVE);
}
else
{
diameter = Dac.diameter ;
length = Dac.length;//最大深度、反射体直径、长度
}
MSetEchoMode(0,C_SETMODE_SAVE);
MSetBGateMode(0,C_SETMODE_SETSAVE);
range = depthmax * 100/80; //放在第8格
MSetRange(range,C_SETMODE_SAVE);
MSetSystem();
if( MGetTestStatus(C_MAKE_DACAVG) == 0 )
{
MSetGatePara(C_COORHORIUNIT * 0.8,C_COORHORIUNIT*15.1/2,140,0,C_SETMODE_SETSAVE);
}
else
{
MSetGatePara(C_COORHORIUNIT * 7.5,C_COORHORIUNIT * 1,140,0,C_SETMODE_SETSAVE);
}
ScreenRenovate(); //本通道屏幕参数刷表
DrawDac(0);
DisplayPrompt(15);
WritePeakPrompt( MGetBGateMode(),-1);
char_len = 7;
row_number = 2;
crow_height = 24;
MSetColor(C_CR_MENU);
if( MGetTestStatus(C_MAKE_DACAVG) == 0 )
{
CMenuOut(0,0,_TestMenu_A1+13,5,1,24);
menu_xpos = C_COORHORIUNIT * 11-(char_len+1)*C_CCHAR_HDOT;
menu_ypos = C_COORVPOSI ;
}
else
{
CMenuOut(0,0,_TestMenu_A1+19,5,1,24);
menu_xpos = 0;
menu_ypos = C_COORVPOSI ;
}
EraseDrawRectangle(menu_xpos, menu_ypos, menu_xpos + (char_len+1)*C_CCHAR_HDOT, menu_ypos + crow_height * row_number) ;
MSetColor(C_CR_MENU);
if(test_num > 0)CEMenuOut(menu_xpos + C_ECHAR_HDOT,menu_ypos + 4, _TestMenu_AD5 ,char_len,row_number,crow_height);
else CEMenuOut(menu_xpos + C_ECHAR_HDOT,menu_ypos + 4, _TestMenu_AD2 ,char_len,row_number,crow_height);
preElapsedtime = GetElapsedTime(); //开始测试时间
MSetSystemMode(1,0); //设置成自动调节状态
MSetTestStatus(C_TEST_DAC,0); //设置测试状态,DAC作
MSetTestStatus(C_TEST_AVG,0); //设置测试状态,AVG作
GateMax.Amp = 0; //最高波置初值为0
xpos = 0;
ypos = 0;
if( MGetUnitType() > 0)
{
diameter = diameter*254/1000;
length = length*254/1000;//最大深度、反射体直径、长度
}
while (test_num == 0)
{
MParaRenovate(1);
if (MAdjustGain(0,(test_num+2)/3,MGetAmpStdMax()/2,MGetAmpStdMax()))
{
GateMax.Amp = 0; //增益自动调节过
}
if( GateMax.Amp == 0)
{
DrawDac(0);
GateMax.Amp = 1;
}
gateamp = MGetAmpMax(gatetype);
if ( MGetGateParaMax( gatetype) == C_TRUE )
{
ClearCursor(2);
xpos = GateMax.Pos;
ypos = C_COORVPOSI + C_COORHEIGHT - 2 - GateMax.Amp ;
if(GateMax.Amp < C_COORHEIGHT) DrawCursor(xpos,ypos,2);
}
keycode = MGetKeyCode(0);
if(keycode != C_KEYCODMAX) break;
else if( MGetRotary(-1) != 0)break;
}
oldbasegain = MGetBaseGain();
short linegain[6];
for(i = 0 ; i < 6; i++)
{
linegain[i] = MGetLineGain(i);
}
for(i = 0 ; i < 6; i++)
{
MSetLineGain(i,0);
}
while(1)
{
MParaRenovate(1);
if(GateMax.Amp == 0)
{
//; newbasegain = MGetBaseGain();
//; MSetBaseGain(oldbasegain,C_SETMODE_SAVE);
//; DrawDac(1);
//; MSetBaseGain(newbasegain,C_SETMODE_SAVE);
//; DrawDac(1);
EraseDrawRectangle(menu_xpos, menu_ypos, menu_xpos + (char_len+1)*C_CCHAR_HDOT, menu_ypos + crow_height * row_number) ;
MSetColor(C_CR_MENU);
if(test_num > 0)CEMenuOut(menu_xpos + C_ECHAR_HDOT,menu_ypos + 4, _TestMenu_AD5 ,char_len,row_number,crow_height);
else CEMenuOut(menu_xpos + C_ECHAR_HDOT,menu_ypos + 4, _TestMenu_AD2 ,char_len,row_number,crow_height);
GateMax.Amp = 1;
}
keycode = MGetKeyCode(0);
gateamp = MGetAmpMax(gatetype);
if ( !MGetFunctionMode(C_ECHOMAX_MEMORY))
{
if( MGetGateParaMax( gatetype) == C_TRUE )
{
ClearCursor(2);
xpos = GateMax.Pos;
ypos = C_COORVPOSI + C_COORHEIGHT - 2 - GateMax.Amp ;
if(GateMax.Amp < C_COORHEIGHT)DrawCursor(xpos,ypos,2);
}
}
else
{
xpos = GateMax.Pos;
ypos = C_COORVPOSI + C_COORHEIGHT - 2 - GateMax.Amp ;
}
if(keycode == C_KEYCODMAX)
{
/*
rotary = MGetRotary(-2);
if(rotary > 0)rotary = 1;
else if( rotary < 0)rotary = -1;
if( rotary != 0)
{
BaseGainPlus(20*rotary);
WriteBaseGain(C_BASEGAIN_HPOSI,C_BASEGAIN_VPOSI);
}
rotary = MGetRotary(1);
if( rotary > 0 )keycode = C_KEYCOD_PLUS;
else if( rotary < 0)keycode = C_KEYCOD_MINUS;
else continue;
/*/
rotary = MGetRotary(-1);
if( rotary > 0 )keycode = C_KEYCOD_PLUS;
else if( rotary < 0 )keycode = C_KEYCOD_MINUS;
else continue;
//*/
}
else rotary = 0;
SameKeyTime = TestSameKeyTime(keycode,GetElapsedTime(),C_SAMEKEYTIME);
oldbasegain = MGetBaseGain();
if( keycode == C_KEYCOD_CONFIRM && test_num != 0)
{
ClearCursor(2);
if(MGetTestStatus(C_MAKE_DACAVG) == 0)
MSetTestStatus(C_TEST_DAC,1); //设置测试状态,DAC已作
else
{
MSetTestStatus(C_TEST_AVG,1); //设置测试状态,AVG已作
if( MGetCurveNumber() > 3)MSetCurveNumber(3);//AVG不超过3根线
MSetAvgMode(1,C_SETMODE_SAVE);
}
MSetEquivalentDays(1,1);
range = (int)( ( depthmax * 100/80 )/50.0+0.9)*50; //放在第8格
MSetRange(range,C_SETMODE_SAVE);
Dac.diameter = diameter;
Dac.length = length;//最大深度、反射体直径、长度
/// MSetParaLock(1, C_LOCK_OFFSET); //零点k值声速都被保护
/// MSetParaLock(1, C_LOCK_PROBE); //通道参量都被保护
retvalue = C_TRUE;
break;
}
else if(keycode == C_KEYCOD_RETURN)
{
if( DisplayQuery(4) == 1)
{
ClearCursor(2);
retvalue = C_FALSE;
SystemParaRestore();
ChannelParaRestore();
break;
}
}
else if( (gateamp > 5 || MGetFunctionMode(C_ECHOMAX_MEMORY) ) && (keycode == C_KEYCOD_MINUS || keycode == C_KEYCOD_PLUS || ( keycode == C_KEYCOD_CONFIRM && MGetTestStatus(C_MAKE_DACAVG) && test_num == 0 ) ) )
{
int search = 1;
u_char echobuff[C_LEN_SAMP+1] ;
u_int offset = C_OFF_SAMP ;
if( MGetFunctionMode(C_ECHOMAX_MEMORY) ) search = 0;
MSetAcquisitionEnable(0,C_SETMODE_SETSAVE);
MCopyProtectedMemory( echobuff, (void*)offset, C_LEN_SAMP, PM_COPY_READ);
sampbuffer = GetSampleBuffer();
//; ClearCursor(2);
if(keycode == C_KEYCOD_CONFIRM)keycode = C_KEYCOD_PLUS;
if( search )
{
if(keycode == C_KEYCOD_PLUS)xpos-= 2;
else if(keycode == C_KEYCOD_MINUS)xpos+= 2; //使得当前最高波能第一次被选中
}
EraseDrawRectangle(menu_xpos, menu_ypos, menu_xpos + (char_len+1)*C_CCHAR_HDOT, menu_ypos + crow_height * row_number);
MSetColor(C_CR_MENU);
CEMenuOut(menu_xpos + C_ECHAR_HDOT,menu_ypos + 4, _TestMenu_AD3 ,char_len,row_number,crow_height);
ExpendTime(10);
MKeyRlx();
while( xpos > 0 ) //当SearchPeak返回-1时表示未能找到最高波
{
if(keycode == C_KEYCOD_MINUS || keycode == C_KEYCOD_PLUS)
{
if( !search )
{
search = 1;
sampbuffer = echobuff;
}
else
{
ClearCursor(2);
sampbuffer = GetSampleBuffer();
xpos = SearchPeak(sampbuffer,xpos,keycode);
}
if( xpos <= 0 || xpos >= 280)break;
ypos = C_COORVPOSI + C_COORHEIGHT - 2 - *(sampbuffer + xpos);
DrawCursor(xpos,ypos,2);
ExpendTime(20);
}
if(keycode == C_KEYCOD_CONFIRM)
{
ClearCursor(2);
if( test_num > 0)DrawDac(1); //参数为1表示清DAC
if(MGetTestStatus(C_MAKE_DACAVG) == 1 )test_num = 0;
dac_dist[test_num] = MGetRange(3) * xpos / C_COORWIDTH; //得到采样点距离
if( MGetUnitType() > 0)dac_dist[test_num] = dac_dist[test_num] *254/1000;//花成MM
///gateamp = *(sampbuffer + xpos) * 100 / 98;
gateamp = *(sampbuffer + xpos) ;
dac_db[test_num] = MGetBaseGain() + MGetCompGain() + (int)( 200 * ( log10(255) - log10(gateamp) ) );
//需化为128%=255时的增益值
if(MGetTestStatus(C_MAKE_DACAVG) == 1 )
{
//test_num = 0;
if( test_num < 1 )
{
if( diameter < 5)
{
//大平底
if( MGetUnitType() > 0)
{
i = (int)( 200.0*log10(2.0*(MGetSpeed()*254/1000)* dac_dist[0]/( MGetFrequence() * 100.0*C_PI*4) ) + 0.5 );
}
else
{
i = (int)( 200.0*log10(2.0*MGetSpeed()* dac_dist[0]/( MGetFrequence() * 100.0*C_PI*4) ) + 0.5 );
}
//Write_Number(10,30,MGetSpeed(),8,0,0);
//Write_Number(10,40,dac_dist[0],8,0,0);
//Write_Number(10,50,(int)( MGetFrequence() * 100.0*C_PI*4),8,0,0);
//Write_Number(10,60,200*MGetSpeed()* dac_dist[0]/( MGetFrequence() * 100.0*C_PI*4),8,0,0);
//Write_Number(10,70,200*log10(2.0*MGetSpeed()* dac_dist[0]/( MGetFrequence() * 100.0*C_PI*4) ),8,0,0);
// i -= 24;
dac_db[0] += i;
}
else
{
//平底孔
i = (int)( 400.0 * log10(diameter/20.0) + 0.5);
dac_db[0] += i;
}
test_num++;
}
}
else test_num++;
for(i = 0; i < test_num-1; i++)
{
//
if( Mabsi( dac_dist[i] - dac_dist[test_num-1] ) < 15 ) //两点间距小于2mm
{
test_num--;
dac_db[i] = dac_db[test_num];
break;
}
}
for(i = 0; i < test_num; i++)
{
//对所有点按浅深顺序排列
for(j = i+1; j < test_num; j++)
{
if(dac_dist[i] > dac_dist[j] )
{
temp = dac_dist[i];
dac_dist[i] = dac_dist[j];
dac_dist[j] = temp;
temp = dac_db[i];
dac_db[i] = dac_db[j];
dac_db[j] = temp;
}
}
}
for(i = 1; i < test_num; i++) //对两点间过于靠近的点删除一个
{
if( Mabsi( dac_dist[i-1] - dac_dist[i] ) < 15 ) //两点间距小于2mm
{
test_num--;
for(j = i; j< test_num ; j++)
{
dac_dist[j] = dac_dist[j+1];
dac_db[j] = dac_db[j+1];
}
}
}
if(test_num == 10) //点数过多,对部分靠近的点进行合并
{
temp = (dac_dist[9] - dac_dist[0])/10;
for(i = 1; i < 9; i++) //第1点和第10点不进行处理
{
if(dac_dist[i] - dac_dist[i-1] <= temp )
{
//如两点间距小于10点平均距离,则删除后一点
test_num--;
for(j = i; j< test_num ; j++)
{
dac_dist[j] = dac_dist[j+1];
dac_db[j] = dac_db[j+1];
}
break;
}
}
}
Dac.num = test_num; //选中波次数
for(i=0; i< 10; i++)
{
Dac.db[i] = dac_db[i];
Dac.dist[i] = dac_dist[i];
}
//offset = C_OFF_DAC + 0*C_SIZE_SHORT;
//MCopyProtectedMemory((void*)offset,dac_db, 10*C_SIZE_SHORT, PM_COPY_WRITE);
//offset = C_OFF_DAC + 10*C_SIZE_SHORT;
//MCopyProtectedMemory((void*)offset,dac_dist, 10*C_SIZE_SHORT, PM_COPY_WRITE);
//offset = C_OFF_DAC + 20*C_SIZE_SHORT;
//MCopyProtectedMemory((void*)offset,&test_num, 1*C_SIZE_SHORT, PM_COPY_WRITE);
// offset = C_OFF_DAC ;
// MCopyProtectedMemory((void*)offset, &Dac, C_LEN_DAC, PM_COPY_WRITE);
DrawDac(0); //参数为0表示画DAC
GateMax.Amp = 1;
break;
}
else if(keycode == C_KEYCOD_RETURN)
{
ClearCursor(2);
break;
}
while(true)
{
keycode = MGetKeyCode(20);
if(keycode == C_KEYCODMAX)
{
rotary = MGetRotary(-1);
if( rotary > 0 )keycode = C_KEYCOD_PLUS;
else if( rotary < 0)keycode = C_KEYCOD_MINUS;
else continue;
break;
}
if( keycode == C_KEYCOD_PLUS || keycode == C_KEYCOD_MINUS || keycode == C_KEYCOD_RETURN || keycode == C_KEYCOD_CONFIRM )
{
rotary = 0;
break;
}
else continue;
}
if( MGetFunctionMode(C_ECHOMAX_MEMORY))ClearEnvelope();
}
ExpendTime(200);//延时0.2s
MSetGateParaInit(); //门内最高波设初值
MSetAcquisitionEnable(1,C_SETMODE_SETSAVE);
}
else if (keycode == C_KEYCOD_FUNCTION)
{
if( !MGetFunctionMode(C_ECHOMAX_MEMORY))ClearCursor(2);
else ClearEnvelope();
MSetFunctionMode(MGetFunctionMode(C_ECHOMAX_MEMORY)+1,C_ECHOMAX_MEMORY);
MSetGateParaInit(); //门内最高波设初值
MKeyRlx();
}
else if(keycode == C_KEYCOD_BASEGAIN && SameKeyTime > C_SAMEKEYTIME)
{
GainChange();
MSetColor(C_CR_MENU);
DisplayPrompt(15);
MSetColor(C_CR_MENU);
if( MGetTestStatus(C_MAKE_DACAVG) == 0 )
CMenuOut(0,0,_TestMenu_A1+13,5,1,24);
else
CMenuOut(0,0,_TestMenu_A1+19,5,1,24);
GateMax.Amp = 0;
MKeyRlx();
}
else if(keycode == C_KEYCOD_BASEGAIN )//&& GetSameKeyTime() > 20)MAdjustGain(0,0,MGetAmpStdMax(),MGetAmpStdMax());
{
if( !MGetFunctionMode(C_ECHOMAX_MEMORY))ClearCursor(2);
else ClearEnvelope();
DrawDac(1);
MAdjustGain(0,0,MGetAmpStdMax(),MGetAmpStdMax());
MSetGateParaInit(); //门内最高波设初值
GateMax.Amp = 0;
DrawDac(0);
MKeyRlx();
}
else if (keycode == C_KEYCOD_DEL)
{
int num = 0;
if( !MGetFunctionMode(C_ECHOMAX_MEMORY))ClearCursor(2);
EraseDrawRectangle(menu_xpos, menu_ypos, menu_xpos + (char_len+1)*C_CCHAR_HDOT, menu_ypos + crow_height * row_number);
MSetColor(C_CR_MENU);
CEMenuOut(menu_xpos + C_ECHAR_HDOT,menu_ypos + 4, _TestMenu_AD6 ,char_len,row_number,crow_height);
ExpendTime(10);
MKeyRlx();
xpos = dac_dist[num] * C_COORWIDTH/MGetRange(3); //得到采样点距离
gateamp = pow(10, ( (int)( 200 * log10(255) ) - dac_db[num] + MGetBaseGain() + MGetCompGain() ) /200.0 );
while(true)
{
ypos = C_COORVPOSI + C_COORHEIGHT - 2 - gateamp;
DrawCursor(xpos,ypos,2);
while(true)
{
keycode = MGetKey();
if(keycode == C_KEYCODMAX)
{
rotary = MGetRotary(-1);
if( rotary > 0 )keycode = C_KEYCOD_PLUS;
else if( rotary < 0)keycode = C_KEYCOD_MINUS;
else continue;
break;
}
else if( keycode == C_KEYCOD_PLUS || keycode == C_KEYCOD_MINUS || keycode == C_KEYCOD_DEL || keycode == C_KEYCOD_CONFIRM )
break;
}
if( keycode == C_KEYCOD_PLUS )
{
gateamp+=3;
}
else if(keycode == C_KEYCOD_MINUS)
{
gateamp-=3;
}
else if(keycode == C_KEYCOD_DEL)
{
num++;
if( num >= test_num)num = 0;
ClearCursor(2);
xpos = dac_dist[num] * C_COORWIDTH/MGetRange(3); //得到采样点距离
gateamp = pow(10, ( (int)( 200 * log10(255) ) - dac_db[num] + MGetBaseGain() + MGetCompGain() ) /200.0 );
MKeyRlx();
continue;
}
else if( keycode == C_KEYCOD_CONFIRM)
{
ClearCursor(2);
MKeyRlx();
break;
}
ClearCursor(2);
dac_db[num] = MGetBaseGain() + MGetCompGain() + (int)( 200 * ( log10(255) - log10(gateamp) ) );
for(i=0; i< 10; i++)
{
Dac.db[i] = dac_db[i];
Dac.dist[i] = dac_dist[i];
}
DrawDac(-1);
}
MSetGateParaInit(); //门内最高波设初值
MKeyRlx();
}
// else if(keycode == C_KEYCOD_BASEGAIN && GetSameKeyTime() > 20)MAdjustGain(0,0,MGetAmpStdMax(),MGetAmpStdMax());
else if( keycode == C_KEYCOD_GATE || keycode == C_KEYCOD_BASEGAIN || keycode == C_KEYCOD_RANGE )
{
if( MGetFunctionMode(C_ECHOMAX_MEMORY))ClearEnvelope();
if( KeyManage(keycode,1) == C_KEYCOD_RETURN) MKeyRlx();
oldbasegain = MGetBaseGain();
DisplayPrompt(15);
MSetColor(C_CR_MENU);
if( MGetTestStatus(C_MAKE_DACAVG) == 0 )
CMenuOut(0,0,_TestMenu_A1+13,5,1,24);
else
CMenuOut(0,0,_TestMenu_A1+19,5,1,24);
GateMax.Amp = 0;
}
else continue;
EraseDrawRectangle(menu_xpos, menu_ypos, menu_xpos + (char_len+1)*C_CCHAR_HDOT, menu_ypos + crow_height * row_number) ;
MSetColor(C_CR_MENU);
if(test_num > 0)CEMenuOut(menu_xpos + C_ECHAR_HDOT,menu_ypos + 4, _TestMenu_AD5 ,char_len,row_number,crow_height);
else CEMenuOut(menu_xpos + C_ECHAR_HDOT,menu_ypos + 4, _TestMenu_AD2 ,char_len,row_number,crow_height);
}
for(i = 0 ; i < 6; i++)
{
MSetLineGain(i,linegain[i]);
}
MSetFunctionMode(0,C_ECHOMAX_MEMORY);
MKeyRlx();
return retvalue;
}
int TestMenuStandard(void)
{
return 0;
}
int TestMenuThick(void)
{
return 0;
}
int TestMenuSystem(void)
{
return MenuMonthTest();//月性能校验
}
int CalcuDac(void)
{
int offset;
short test_num = 0; //选中波次数
int dac_db[10+2],dac_dist[10+2]; //在画DAC曲线时增加关尾两点,其值与原头尾相同
// u_short dac_line[308*2];
//int basegain;
int i,j;
int dist1,dist2;
int delay,range;
//int step = 20;
//offset = C_OFF_DAC + 0*C_SIZE_SHORT;
//MCopyProtectedMemory(dac_db, (void*)offset,10*C_SIZE_SHORT, PM_COPY_READ);
//offset = C_OFF_DAC + 10*C_SIZE_SHORT;
//MCopyProtectedMemory(dac_dist, (void*)offset,10*C_SIZE_SHORT, PM_COPY_READ);
//offset = C_OFF_DAC + 20*C_SIZE_SHORT;
//MCopyProtectedMemory(&test_num, (void*)offset,1*C_SIZE_SHORT, PM_COPY_READ);
//ffset = C_OFF_DAC;
//opyProtectedMemory( &Dac, (void*)offset, C_LEN_DAC, PM_COPY_READ);
test_num = Dac.num ; //选中波次数
if(test_num < 1 || test_num > 10)return -1;
range = MGetRange(3);
if( MGetUnitType() > 0)range = range*254/1000;
delay = MGetDelay(3);
if( MGetUnitType() > 0)delay = delay*254/1000;
for(i=0; i< 10; i++)
{
dac_db[i] = Dac.db[i];
dac_dist[i] = Dac.dist[i];
}
if( MGetTestStatus(C_MAKE_DACAVG) == 1 || MGetTestStatus(C_TEST_AVG) == 1)
{
//AVG
if( dac_dist[0] <= 3 * MGetNearField() )
{
// 第一点在三倍近场区内
for(i = test_num; i > 0; i--) //所点向后移一点,增加头
{
dac_dist[i] = dac_dist[i-1];
dac_db[i] = dac_db[i-1];
}
}
else
{
// 第一点在三倍近场区外
for(i = test_num + 1; i > 1; i--) //所有点向后移两点,增加头
{
dac_dist[i] = dac_dist[i-2];
dac_db[i] = dac_db[i-2];
}
test_num++;
if( 3 * MGetNearField() < dac_dist[2]/5) dac_dist[1] = dac_dist[2]/5;
else dac_dist[1] = 3 * MGetNearField();//第2点为3倍近场区
dac_db[1] = 400*( log10(dac_dist[2]) - log10(dac_dist[1]) ) + 2 * MGetAttenuate(dac_dist[1]/10) * ( dac_dist[2] - dac_dist[1] );
if( dac_db[1] >= dac_db[2] )dac_db[1] = 0;
else dac_db[1] = dac_db[2] - dac_db[1] ;
dac_dist[0] = 0;
dac_db[0] = dac_db[1];
}
dac_dist[0] = 0; //增加的头距离为0,dB数与原第一点相同
test_num++;
dac_dist[test_num] = range + delay;//MGetRange(3) + MGetDelay(3); //最后一点为当前最大声程
///if( MGetUnitType() > 0)dac_dist[test_num] = dac_dist[test_num] *254/1000;//化成MM
if(dac_dist[test_num] >= 3 * dac_dist[test_num -1] )
{
//最后一个测试点距屏幕右端非常大,增加一点
test_num++;
dac_dist[test_num] = dac_dist[test_num-1];
dac_dist[test_num - 1] = 2 * dac_dist[test_num - 2];
dac_db[test_num - 1] = dac_db[test_num - 2] + 120 + 2 * MGetAttenuate(dac_dist[test_num-1]/10) * dac_dist[test_num - 2] ;
}
dac_db[test_num] = dac_db[test_num - 1] + 400*( log10(dac_dist[test_num]) - log10(dac_dist[test_num - 1]) ) + 2 * MGetAttenuate(dac_dist[test_num-1]/10) * ( dac_dist[test_num] - dac_dist[test_num - 1] );
test_num++; //增加一头一尾共两点
}
else
{
//DAC
for(i = test_num; i > 0; i--) //所点向后移一点,增加头
{
dac_dist[i] = dac_dist[i-1];
dac_db[i] = dac_db[i-1];
}
dac_dist[0] = 0; //增加的头距离为0,dB数与原第一点相同
test_num++;
dac_dist[test_num] = range + delay;//MGetRange(3) + MGetDelay(3); //最后一点为当前最大声程
///if( MGetUnitType() > 0)dac_dist[test_num] = dac_dist[test_num] *254/1000;//化成MM
dac_db[test_num] = dac_db[test_num-1];
test_num++; //增加一头一尾共两点
}
for(i = 1; i< test_num ; i++)
{
//对延时进行处理
//if(MGetDelay(3) < dac_dist[i])
if( delay < dac_dist[i])
{
//有延时,延掉i-1个点
dac_db[i-1] = GetMiddleValue(dac_dist[i-1],dac_db[i-1],dac_dist[i],dac_db[i],delay );//MGetDelay(3) );
dac_dist[i-1] = delay;//MGetDelay(3);
test_num = test_num - (i - 1); //测试点减少i-1个点
for(j = 0; j<test_num ; j++)
{
//将延时点前去除
dac_dist[j] = dac_dist[j+i-1];
dac_db[j] = dac_db[j+i-1];
}
break;
}
}
for(i = 1 ; i < test_num; i++)
{
if( dac_dist[i] >delay + range)// MGetDelay(3)+MGetRange(3) )
{
dac_db[i] = GetMiddleValue(dac_dist[i-1],dac_db[i-1],dac_dist[i],dac_db[i], delay+range);//MGetDelay(3)+MGetRange(3) );
dac_dist[i] = delay+range;//MGetDelay(3)+MGetRange(3);
test_num = i+1;
break;
}
}
for(i = 0; i < test_num; i++)
{
if(dac_db[i] > 65535 )dac_db[i] = 65535;
else if(dac_db[i] < 0 )dac_db[i] = 0;
}
dist2 = 0;
dac_line[dist2] = dac_db[0];
//Write_Number(10,30,22,4,0,0);
//*
for(i = 1, j=0, offset = C_OFF_DACDB; i< test_num && dist2 < C_SCREEN_WIDTH-1; i++)
{
//将距离值化为屏幕上的点
dist1 = dist2 ;
/// dist2 = ( dac_dist[i] - MGetDelay(3) ) * C_COORWIDTH / MGetRange(3);
dist2 = ( dac_dist[i] - delay ) * C_COORWIDTH / range;
if( dist2 >= C_SCREEN_WIDTH)
{
dac_line[C_SCREEN_WIDTH-1] = GetMiddleValue(dist1,dac_line[0],dist2,dac_db[i], C_SCREEN_WIDTH-1 );
dist2 = C_SCREEN_WIDTH-1;
}
else dac_line[dist2] = dac_db[i];
j = dist2 - dist1;
dac_line[j] = dac_line[dist2];
GetLine_TwoDot(dac_line,0,j);
// dist2--;
// j--;
MCopyProtectedMemory((void*)offset, dac_line, (j+1)*C_SIZE_SHORT, PM_COPY_WRITE);
dac_line[0] = dac_line[j];
offset += (j)*C_SIZE_SHORT;
}
/*/
offset = C_OFF_DACDB;
MCopyProtectedMemory( dac_line, (void*)offset,C_SCREEN_WIDTH*C_SIZE_SHORT, PM_COPY_READ);
for( i = 1 ; i < C_SCREEN_WIDTH - 1; i++)
{
dac_line[i] /=4;
}
DrawCurver(dac_line,0,C_COORWIDTH);
if( i >= test_num && dist2 < C_SCREEN_WIDTH-1)
{
dist1 = dist2 ;
dist2 = C_SCREEN_WIDTH;
j = dist2 - dist1;
dac_line[0] = dac_line[j] = dac_line[dist2] = dac_line[dist1];
//Write_Number(10,30,24,4,0,0);
GetLine_TwoDot(dac_line,0,j);
MCopyProtectedMemory((void*)offset, dac_line, (j)*C_SIZE_SHORT, PM_COPY_WRITE);
}
offset = C_OFF_DACDB;
MCopyProtectedMemory( dac_line, (void*)offset,C_SCREEN_WIDTH*C_SIZE_SHORT, PM_COPY_READ);
for( i = 1 ; i < C_SCREEN_WIDTH - 1; i++)
{
if( (dac_line[i] > dac_line[i-1] && dac_line[i] > dac_line[i+1]) || (dac_line[i] < dac_line[i-1] && dac_line[i] < dac_line[i+1]) )
dac_line[i] = ( dac_line[i-1] + dac_line[i])/2;
}
offset = C_OFF_DACDB;
MCopyProtectedMemory( (void*)offset, dac_line, C_SCREEN_WIDTH*C_SIZE_SHORT, PM_COPY_WRITE);
for(i = 1, j=0, offset = C_OFF_DACDB; i< test_num ; i++)
{ //将距离值化为屏幕上的点
dist1 = dist2 ;
dist2 = ( dac_dist[i] - MGetDelay(3) ) * C_COORWIDTH / MGetRange(3);
j = dist2 - dist1;
if( dist2 > C_COORWIDTH)
{
dac_line[C_COORWIDTH] = GetMiddleValue(dist1,dac_line[dist1],dist2,dac_db[i], C_HORIDOT_SCREEN );
//Write_Number(10,30,23,4,0,0);
GetLine_TwoDot(dac_line,dist1,C_COORWIDTH);
break;
}
dac_line[dist2] = dac_db[i];
//Write_Number(10,30,24,4,0,0);
GetLine_TwoDot(dac_line,dist1,dist2);
// MCopyProtectedMemory((void*)offset, dac_line, (dist2 - dist1)*C_SIZE_SHORT, PM_COPY_WRITE);
//Write_Number(10,30,25,4,0,0);
}
//*/
//Write_Number(10,30,26,4,0,0);
/// offset = C_OFF_DACDB;
/// MCopyProtectedMemory((void*)offset, dac_line, C_LEN_DACDB, PM_COPY_WRITE);
//Write_Number(10,30,27,4,0,0);
return 2;
}
int DrawDac2(int mode) //画和或计算DAC曲线,mode=0计算,=1不
{
return 1;
}
int DrawDac(int mode) //画和或计算DAC曲线,mode=0计算,=1不
{
int offset;
int basegain;
int i;
int dist1,dist2;
int step = 7;
// u_short dac_line[308*2];
// u_int dac_temp;
int retvalue = -1;
//#define C_EXPF 1.848489938
//#define C_EXPF 1.319249827
int test_num;
double dTemp;
// int xpos, ypos;
u_char pzText[2] = " ";
//; if( MGetDacShowMode() > 0)return DrawDac2(mode);//可以显示从低到高的DAC曲线
pzText[0] = 'z' + 14;
retvalue = 0;
if( (MGetSystemMode() == 0 && MGetTestStatus(C_TEST_DAC) == 0 && MGetTestStatus(C_TEST_AVG) == 0 )|| MGetEchoMode() == C_RF_WAVE)
{
//Write_Number(10,30,1,4,0,0);
retvalue = -1; //不在自动调节状态,也未制作DAC\AVG,无射频
}
test_num = Dac.num;
if( test_num < 1)retvalue = -1;
if(mode <= 0 && retvalue != -1)
{
if( CalcuDac() < 0)retvalue = -1;
}
if( retvalue == -1 )
{
if( MGetEchoMode() != C_RF_WAVE && MGetFunctionMode(C_DEPTH_COMPENSATE) ) //返回测试状态<0=未测>=0已测,
{
dist1 = 0;
dist2 = C_COORWIDTH-1;
dac_line[dist2] = (u_int)( 160 / Mexpf(C_EXPF*( MGetDepthGain() )/200.0, C_SIZE_SHORT) + 0.5 );
//Write_Number( 100,30,dac_line[dist1],10,0,0);
dac_line[dist1] = 160;
GetLine_TwoDot(dac_line,dist1,dist2);
//MDacGatePeak();
#if ( C_DEVLIB == 1 || C_DEVLIB == 2 || C_DEVLIB == 23 || C_DEVLIB == 24)
dac_coe = 160.0/(double)dac_line[0];
for(i = 0; i < 280; i++)
{
if( dac_line[i] < 256) dactable[i] = (int)( dac_coe*dac_line[i] + 0.5);
else dactable[i] = 255;
}
MActivateDac(1);
#endif
}
return retvalue;
}
//Write_Number(10,30,4,4,0,0);
//if( (MGetSystemMode() == 1 || MGetTestStatus(C_TEST_DAC) == 1 || MGetTestStatus(C_TEST_AVG) == 1) )
#if ( C_DEVLIB == 1 || C_DEVLIB == 2 || C_DEVLIB == 23 || C_DEVLIB == 24)
if( MGetSystemMode() == 0 && MGetFunctionMode(C_DEPTH_COMPENSATE))
{
offset = C_OFF_DACDB;
MCopyProtectedMemory( dac_line, (void*)offset, C_LEN_DACDB, PM_COPY_READ);
basegain = MGetBaseGain() + 481.31; //基准增益
dist2 = 0;
//dac_line[dist2] = (u_int)expf( C_EXPF*( basegain - dac_line[dist2] )/200.0) ;
dac_line[dist2] = (u_int)Mexpf(C_EXPF*( basegain - dac_line[dist2] )/200.0, C_SIZE_SHORT) ;
while(dist2 <= C_COORWIDTH)
{
dist1 = dist2;
dist2 += step;
//dac_line[dist2] = (u_int)expf(C_EXPF*( basegain - dac_line[dist2] )/200.0) ;
dac_line[dist2] = (u_int)Mexpf(C_EXPF*( basegain - dac_line[dist2] )/200.0, C_SIZE_SHORT) ;
GetLine_TwoDot(dac_line,dist1,dist2);
}
for(i = 0 ; i < C_COORWIDTH; i ++ )
{
if(dac_line[i] >= C_COORHEIGHT)dac_line[i] = C_COORHEIGHT - 1;
}
//MDacGatePeak();
dac_coe = 160.0/(double)dac_line[0];
for(i = 0; i < 280; i++)
{
if( dac_line[i] < 256)dactable[i] = (int)( dac_coe*dac_line[i] + 0.5);
else dactable[i] = 255;
}
///Write_Number(10,30,4000,4,0,0);
MActivateDac(1);
}
else
{
for(i = 0; i < 280; i++)
{
dactable[i] = 160;
}
MActivateDac(0);
}
//-------dac-------
#endif
//Write_Number(10,30,5,4,0,0);
offset = C_OFF_DACDB;
MCopyProtectedMemory( dac_line, (void*)offset, C_LEN_DACDB, PM_COPY_READ);
if( (MGetSystemMode() == 1 && MGetTestStatus(C_TEST_DAC) == 0 && MGetTestStatus(C_TEST_AVG) == 0) )
{
basegain = MGetBaseGain()+MGetCompGain() + 481.31; //基准增益
}
else
{
basegain = MGetBaseGain() + MGetCompGain() +MGetLineGain(0) + 481.31; //基准增益,应加上判废线
}
dist2 = 0;
//dac_line[dist2] = (u_int)expf( C_EXPF*( basegain - dac_line[dist2] )/200.0) ;
dac_line[dist2] = (u_int)Mexpf(C_EXPF*( basegain - dac_line[dist2] )/200.0, C_SIZE_SHORT) ;
if(MGetFunctionMode(C_DEPTH_COMPENSATE) == 1)
{
dist1 = dist2;
dist2 = C_COORWIDTH;
dac_line[dist2] = dac_line[dist1];
GetLine_TwoDot(dac_line,dist1,dist2);
}
else
// 0.011512925465
{
while(dist2 < C_SCREEN_WIDTH)
{
dist1 = dist2;
dist2 += step;
//dac_line[dist2] = (u_int)expf(C_EXPF*( basegain - dac_line[dist2] )/200.0) ;
dac_line[dist2] = (u_int)Mexpf(C_EXPF*( basegain - dac_line[dist2] )/200.0, C_SIZE_SHORT) ;
//dac_line[dist2] = (u_int)exp( (0.011512925465*( basegain - dac_line[dist2] ) ) );
//dac_line[dist2] = (u_int)pow(10.0,( basegain - dac_line[dist2] )/200.0) ;
GetLine_TwoDot(dac_line,dist1,dist2);
}
}
if( mode < 0) DrawCurver(daccurve,0,C_COORWIDTH);
for( i = 0; i < C_SCREEN_WIDTH; i++)daccurve[i] = dac_line[i];
DrawCurver(daccurve,0,C_COORWIDTH);
if( MGetSystemMode() == 1 )return 1;
//Write_Number(10,30,6,4,0,0);
int line;
for(line = 1; line < MGetCurveNumber(); line++)
{
if( MGetLineGain(line) != MGetLineGain(line-1) )
{
dTemp = expf( 2.302585*( MGetLineGain(line-1) - MGetLineGain(line) )/200.0) ;
// dTemp = expf( (0.011512925465*( MGetLineGain(line-1) - MGetLineGain(line) ) ) );
dac_line[0] = (int)( dac_line[0]/dTemp + 0.5);
for(i = 4 ; i < C_COORWIDTH+4; i+=4)
{
dac_line[i] = (int)( dac_line[i]/dTemp + 0.5);
dac_line[i-2] = ( (int)( dac_line[i-4] + dac_line[i] ) ) >> 1;
dac_line[i-3] = ( (int)( dac_line[i-4] + dac_line[i-2] ) ) >>1;
dac_line[i-1] = ( (int)( dac_line[i-2] + dac_line[i] ) ) >>1;
}
DrawCurver( dac_line,0,C_COORWIDTH);
}
}
return 1;
}
int GetMiddleValue(int dist1,int db1,int dist2,int db2,int dist)
{
//由两点得中间点的当量
int retvalue ;
if(dist >= dist1 && dist <= dist2 && dist1 != dist2)
{
retvalue = ( dist - dist1 ) * ( db2 - db1 )/( dist2 - dist1 ) + db1;
}
else retvalue = -1; //返回-1表示输入参数有误
return retvalue ;
}
int GetLine_TwoDot(u_short line[],int dist1,int dist2)
{
//*
int dist;
double k;
if( dist1 > dist2 + 1 )
{
dist = dist1;
dist1 = dist2;
dist2 = dist;
}
else if( dist1 >= dist2 - 1)return -1;
if( dist2 >= 280)dist2 = 280;
k = (double)( line[dist2] - line[dist1])/(double)(dist2 - dist1);
for( dist = 1 ; dist1 + dist < dist2; dist++)
{
line[dist1 + dist] = (int)( dist*k + line[dist1] );
}
/*/
int dist = ( (dist1 + dist2) / 2 );
if( dist > dist1 )
{
line[dist] = ( ( line[dist1] + line[dist2] ) / 2 );
GetLine_TwoDot(line,dist1,dist);
GetLine_TwoDot(line,dist,dist2);
}
//*/
return 1;
}
void GetCenterPoint(int dist1,int db1,int dist2,int db2)
{
int dist = ( (dist1 + dist2) >> 1);
int db = ( (db1 + db2) >> 1);
if( dist > dist1)
{
GetCenterPoint(dist1,db1,dist,db);
}
}
void GetDacCompensateTable(void)
{
}
int TestMenuFft(void)
{
return C_FALSE;
}
int TestMenuSensitivity(void)//灵敏度校验
{
return C_FALSE;
}
int TestSensitivity(u_int depth/*反射体深度*/, u_int stdamp/*基准波高度*/, int mode/*0可调增益,1不可调*/)
{
return 1;
}
int ManualMonthTest(void)//人工月性能校验
{
u_int gain,range,offset,delay,speed;
int retvalue = C_FALSE;
u_int echotime;
// int i,j;
int keycode;
u_int gateamp;
u_int xpos,ypos;//,menu_xpos,menu_ypos;
u_int char_len,row_number,crow_height;//,row_height;
u_int gatetype = 0;
u_short _Prompt_TB1[] =
{
CH(5039),CH(3887),CH(4852),CH(3660),CH(4254),CH(2215),CH(1866),CH(4252)
};// 仪器性能手动测试
MSetProbeMode(0,C_SETMODE_SETSAVE);
gain = 300;
range = 1250;
offset = 0;
delay = 0;
speed = 5960;
MSetPara(gain,0,0,2,range,offset,delay,0,speed);
MSetEchoMode(0,C_SETMODE_SAVE);
MSetPulseMode(1,C_SETMODE_SAVE);
MSetBandMode(0,C_SETMODE_SAVE);
MSetGatePara(C_COORHORIUNIT * 3.8,C_COORHORIUNIT * 1.2,120,0,C_SETMODE_SETSAVE);
MSetGatePara(C_COORHORIUNIT * 4,C_COORHORIUNIT * 1,0,1,C_SETMODE_SETSAVE);
MSetSystem();
MSetAcquisition(1); /*设置采样与否,0不采样1采样*/
MChannelRenovate(); //本通道屏幕参数刷表
char_len = 11;
row_number = 2;
crow_height = 24;
xpos = 280-(char_len+1)*C_CCHAR_HDOT;
ypos = C_COORVPOSI+1;
EraseDrawRectangle(xpos, ypos, 280, ypos+crow_height * row_number) ;
MSetColor(C_CR_MENU);
CEMenuOut(xpos + C_ECHAR_HDOT,ypos + 4, _Menu_Power1 ,char_len,row_number,crow_height);
CEMenuOut(0,0, _Prompt_TB1 ,8,1,16);
GateMax.Amp = 0; //
xpos = 0;
ypos = 0;
ClearCursor(2);
while (1)
{
if (MAdjustGain(0,2,120,120) )
{
GateMax.Amp = 0; //增益自动调节过
}
MParaRenovate(1);
keycode = MGetKeyCode(10);
gateamp = MGetAmpMax(gatetype);
if ( MGetGateParaMax(gatetype) == C_TRUE )
{
ClearCursor(2);
xpos = GateMax.Pos;
ypos = C_COORVPOSI + C_COORHEIGHT - 2 - GateMax.Amp ;
if(GateMax.Amp < C_COORHEIGHT)DrawCursor(xpos,ypos,2);
}
if(keycode == C_KEYCOD_CONFIRM)
{
ClearCursor(2);
echotime = MGetAmpTime(gatetype);
MGateDraw();
MSetGatePara(C_COORHORIUNIT * 7.8,C_COORHORIUNIT * 1.2,120,0,C_SETMODE_SETSAVE);//门暂移到第8格
MGateDraw();
MKeyRlx();
MAdjustGain(0,0,80,160);
ExpendTime(10);
offset = 2 * echotime - MGetAmpTime(gatetype);
MSetOffset(offset,C_SETMODE_SETSAVE);
speed = 500*C_SAMPLE_FREQ/(echotime - offset);
MSetSpeed(speed,C_SETMODE_SETSAVE);
range = 2500;
MSetRange(range,C_SETMODE_SAVE);
MSetSystem();
MChannelRenovate(); //本通道屏幕参数刷表
break;
}
else if(keycode == C_KEYCOD_RETURN)
{
if( DisplayQuery(4) == 1)
{
MSetAcquisition(0);
return retvalue;
}
}
}
keycode = C_KEYCODMAX;
MSetColor(C_CR_MENU);
CEMenuOut(0,0, _Prompt_TB1 ,8,1,16);
while(true)
{
if(keycode == C_KEYCOD_GATE || keycode == C_KEYCOD_RANGE || keycode == C_KEYCOD_BASEGAIN )
{
keycode = KeyManage(keycode,1);
}
else if( keycode == C_KEYCOD_RETURN)
{
if( DisplayQuery(4) == 1)
{
MSetAcquisition(0);
break;
}
}
else
{
keycode = MGetKeyCode(0);
MSetColor(C_CR_MENU);
CEMenuOut(0,0, _Prompt_TB1 ,8,1,16);
}
MParaRenovate(1);
}
return 1;
}
int MenuMonthTest(void)//月性能校验
{
return 1;
}
int WeldSetup(void)
{
return 1;
}
int ShowWeld(short lxpos,short lypos,short width,short height,short angle,int dist)
{
return 1;
}
int JWTestOffset(void)
{
int xpos = ( C_HORIDOT_SCREEN - C_CCHAR_HDOT * 8 - C_ECHAR_HDOT * 13) / 8 * 8;
int ypos = C_COORVPOSI;
u_int para_xpos,para_ypos;
u_int testrange[3]; //待测声程值
u_int offset;
int deci_len, number = 1;
int retvalue = -1;
u_int row_height = 24;
int keycode;
DisplayPrompt(15);
MSetColor(C_CR_MENU);
CMenuOut(0,0,_TestMenu_A1+1,5,1,row_height);
EraseDrawRectangle(xpos, ypos, xpos+ 14*C_CCHAR_HDOT, ypos + 3 * row_height) ;
CEMenuOut(xpos + C_ECHAR_HDOT,ypos+4,_TestMenu_AB1,8,2,row_height);
CEMenuOut(xpos + C_ECHAR_HDOT,ypos+4+2*row_height,_TestMenu_AB1+8*3,8,1,row_height);
MSetColor(C_CR_UNDO);
para_xpos = xpos + 8 * C_CCHAR_HDOT; /*写参数,位置水平方向右移*/
para_ypos = ypos + 4;
offset = C_OFF_TEMP + 0;
MCopyProtectedMemory( testrange, (void*)offset, 12, PM_COPY_READ);
while(retvalue == -1)
{
/*声速*/
xpos = para_xpos;
ypos = para_ypos + row_height *0 ;
WriteSpeed(xpos,ypos+C_ECHAR_VDOT+1 );
/*一次声程*/
ypos = para_ypos + row_height *1 ;
WriteLongness(xpos,ypos+C_ECHAR_VDOT+1,testrange[1],5,1);
keycode = MenuKeyReturn(2,3); /*出现菜单时,按不大于keymax的键返回,mode=0其它键无效,=1确认键有效,=2返回键有效,=3确认返回键有效*/
ypos = para_ypos + row_height * (keycode - 1);
switch (keycode)
{
case 1:
if( MGetUnitType() > 0)deci_len = 2;//单位inch
else deci_len = 0;
number = 0;
if ( Input_Number(xpos,ypos,&number,4, &deci_len,0) == 1)
{
MSetSpeed(number,C_SETMODE_SAVE); /*设置当前通道 */
}
break;
case 2:
if( MGetUnitType() > 0)deci_len = 3;//单位inch
else deci_len = 1;
number = 0;
if ( Input_Number(xpos,ypos,&number,4, &deci_len,0) == 1)
{
testrange[1] = number;
testrange[2] = 0;
}
break;
case C_KEYCOD_RETURN:
retvalue = 0;
break;
case C_KEYCOD_CONFIRM:
if( testrange[1] > 10)
{
retvalue = 1;
offset = C_OFF_TEMP + 0;
MCopyProtectedMemory( (void*)offset, testrange, 12, PM_COPY_WRITE);
}
break;
}
}
if(retvalue == 1)
{
MSetTestStatus(C_TEST_DAC,0); //设置测试状态,DAC作
MSetTestStatus(C_TEST_AVG,0); //设置测试状态,AVG作
MSetFunctionMode(0,C_FUNCTION_ALL);
MSetSystem();
MChannelRenovate(); //本通道屏幕参数刷表
while(1)
{
if (TestLGOffset(testrange[1],testrange[2],0) == C_FALSE)return C_FALSE;
return C_TRUE;
}
}
return C_FALSE;
}
int TestLGOffset(u_int testrange1,u_int testrange2,u_int mode)
{
/*
t = ( R2*T1 - R1 * T2)/( R2 - R1) = T1 - (T2-T1)R1/(R2-R1)
*/
GateMax.Amp = 0; //最高波置初值为0
int gain = 400,range = 1000,offset = 0, offset0 = 0, delay = 0,speed = MGetSpeed();
u_int echotime = 0;
u_int gateamp;
u_int char_len,row_number,crow_height;
int xpos,ypos,menu_xpos,menu_ypos;
int confirm_num = 0;
u_int preElapsedtime;
int retvalue = C_TRUE;
int keycode;
int gatetype = 0;
//int i;
u_int testrange0 = testrange1;
MKeyRlx();
MSetEchoMode(0,C_SETMODE_SAVE);
MSetGatePara(C_COORHORIUNIT * 4-2,C_COORHORIUNIT * 2,120,0,C_SETMODE_SETSAVE);
MSetBGateMode(0,C_SETMODE_SETSAVE);
MSetGatePara(C_COORHORIUNIT * 4,C_COORHORIUNIT * 2,0,1,C_SETMODE_SETSAVE);
range = testrange0 * 10/4; //放在第4格
// if( MGetProbeMode() == C_P_TRANSMISSION)range /= 2;
MSetPara(gain,0,0,2,range,offset0,delay,MGetAngle(0),speed);
// MSetPulseMode(0,C_SETMODE_SAVE);
MSetSystem();
MChannelRenovate(); //本通道屏幕参数刷表
MSetFunctionMode(0,C_FUNCTION_ALL);
MSetAcquisition(1);
char_len = 7;
row_number = 3;
crow_height = 24;
menu_xpos = C_COORHORIUNIT * 10-(char_len+1)*C_CCHAR_HDOT;
menu_ypos = C_COORVPOSI + 1;
MSetColor(C_CR_MENU);
EraseDrawRectangle(menu_xpos, menu_ypos, C_COORHORIUNIT * 10, menu_ypos + crow_height * row_number) ;
CEMenuOut(menu_xpos + C_ECHAR_HDOT,menu_ypos + 4, _TestMenu_AB3 ,char_len,row_number,crow_height); /*在指定位置根据每行字符数、行数、行高写菜单*/
WriteLongness(menu_xpos + 11 * C_ECHAR_HDOT, menu_ypos + 3,testrange0,4/*总长*/,0/*是否写单位*/);
if( MGetUnitType() > 0)EMenuOut(menu_xpos + 11 * C_ECHAR_HDOT, menu_ypos + 12,"in",2,1,8);
else EMenuOut(menu_xpos + 11 * C_ECHAR_HDOT, menu_ypos + 12,"mm",2,1,8);
///Write_Number(menu_xpos + 11 * C_ECHAR_HDOT,menu_ypos + 4 ,testrange0,4,1,0);
MSetColor(C_CR_UNDO);
xpos = 0;
ypos = 0;
ClearCursor(2);
MSetGateParaInit(); //门内最高波设初值
preElapsedtime = GetElapsedTime(); //开始测试时间
///MSetSystemMode(1,0); //设置成自动调节状态
DisplayPrompt(15);
MSetColor(C_CR_MENU);
CMenuOut(0,0,_TestMenu_A1+1,5,1,24);
while (1)
{
if (!MGetFunctionMode(C_ECHOMAX_MEMORY))
{
if(MAdjustGain(0,1,MGetAmpStdMax()/2,MGetAmpStdMax()))
{
MSetGateParaInit(); //门内最高波设初值
}
}
keycode = MGetKeyCode(0);
MParaRenovate(0);
gateamp = MGetAmpMax(gatetype);
if(!MGetFunctionMode(C_ECHOMAX_MEMORY))
{
if(MGetGateParaMax(gatetype) == C_TRUE)
{
ClearCursor(2);
xpos = GateMax.Pos;
ypos = C_COORVPOSI + C_COORHEIGHT - 2 - GateMax.Amp ;
if(GateMax.Amp < C_COORHEIGHT) DrawCursor(xpos,ypos,2);
}
}
else
{
xpos = GateMax.Pos;
ypos = C_COORVPOSI + C_COORHEIGHT - 2 - GateMax.Amp ;
}
//if(keycode >=0 && keycode < C_KEYCODMAX)
// BuzzerOn(1); ///*峰鸣0.1 * 1 秒*/
if(keycode == C_KEYCOD_CONFIRM && confirm_num == 0)
{
//t = ( R2*T1 - R1 * T2)/( R2 - R1) = T1 - (T2-T1)R1/(R2-R1)
MKeyRlx();
confirm_num++;
ClearCursor(2);
//echotime = MGetAmpTime(gatetype);
//testrange0 = MGetAmpDist(gatetype);
echotime = GateMax.Time;
testrange0 = GateMax.Dist;
//
offset = echotime - testrange1*C_SAMPLE_FREQ/speed;//先按预置声速和一次波时间算出零点
if( testrange2 <= testrange1 )
{
//如果二次声程小于一次声程或为0,则只测一次
confirm_num++;
break;
}
}
else if(keycode == C_KEYCOD_RETURN)
{
if( DisplayQuery(4) == 1)
{
retvalue = C_FALSE;
//SystemParaRestore();
//ChannelParaRestore();
break;
}
}
else continue;
DisplayPrompt(15);
MSetColor(C_CR_MENU);
CMenuOut(0,0,_TestMenu_A1+1,5,1,24);
//ExpendTime(10);
}
if( confirm_num > 1)
{
MSetOffset(offset + MGetOffset(),C_SETMODE_SETSAVE);
if( MGetProbeMode() == C_APROBE )
{
//斜探头
char_len = 8;
row_number = 2;
crow_height = 24;
menu_xpos = C_COORHORIUNIT * 10-(char_len+1)*C_CCHAR_HDOT;
menu_ypos = C_COORVPOSI + 1;
//;MCoorDraw(C_COORHPOSI ,C_COORVPOSI , C_COORHEIGHT , C_COORWIDTH ); /*画坐标,清除波形区内容*/
MChannelRenovate();
EraseDrawRectangle(menu_xpos, menu_ypos, C_COORHORIUNIT * 10, menu_ypos + row_number * crow_height) ;
MSetColor(C_CR_MENU);
CEMenuOut(menu_xpos + C_ECHAR_HDOT,menu_ypos + 4, _TestMenu_AB7,char_len,row_number,crow_height);
int number,deci_len;
if( MGetUnitType() > 0)deci_len = 3;//单位inch
else deci_len = 1;
number = testrange1;
menu_xpos = menu_xpos+10*C_ECHAR_HDOT;
menu_ypos = C_COORVPOSI + 37;
while(1)
{
if( Input_Number(menu_xpos, menu_ypos,&number,2, &deci_len,0) != 1)break;
else
{
if( number <= testrange1)
{
WriteLongness(menu_xpos,menu_ypos,number,4,1);
MSetForward(testrange1-number,C_SETMODE_SAVE);
break;
}
else DisplayPrompt(4);
}
}
}
MSetTestStatus(C_TEST_OFFSET,1); //设置测试状态,零点已测
MSetGatePara(C_COORHORIUNIT * 3, C_COORHORIUNIT * 2 ,120,0,C_SETMODE_SETSAVE);
retvalue = C_TRUE;
}
MKeyRlx();
range = testrange1 * 100/40; //放在第6.5格
MSetRange(range,C_SETMODE_SETSAVE);
WriteScale(); //标度
MSetFunctionMode(0,C_ECHOMAX_MEMORY);
return retvalue;
}
int JWTestAngle(u_int R)
{
int xpos = ( C_HORIDOT_SCREEN - C_CCHAR_HDOT * 11 - C_ECHAR_HDOT * 10) / 8 * 8;
int ypos = C_COORVPOSI;
u_int para_xpos,para_ypos;
u_int testrange[2]; //[0]反射体深度,[1]反射体直径,
u_int offset;
int deci_len, number = 1;
int retvalue = -1;
u_int row_height = 24;
int keycode;
ScreenRenovate();
DisplayPrompt(15);
MSetColor(C_CR_MENU);
CMenuOut(0,0,_TestMenu_A1+7,5,1,row_height);
EraseDrawRectangle(xpos, ypos, xpos+ 14*C_CCHAR_HDOT, ypos + 4 * row_height) ;
CEMenuOut(xpos + C_ECHAR_HDOT,ypos+4,_TestMenu_AC1,9,4,row_height); /*在指定位置根据每行字符数、行数、行高写菜单*/
MSetColor(C_CR_UNDO);
offset = C_OFF_TEMP + 20;
MCopyProtectedMemory( testrange, (void*)offset, 8, PM_COPY_READ);
para_xpos = xpos + 9 * C_CCHAR_HDOT; /*写参数,位置水平方向右移*/
para_ypos = ypos + 4;
testrange[0]=30;
testrange[1]=500;
while(retvalue == -1)
{
/*直径 */
xpos = para_xpos;
ypos = para_ypos + row_height *0 ;
WriteLongness(xpos,ypos+C_ECHAR_VDOT+1,30,3,1);
/*深度*/
ypos = para_ypos + row_height *1 ;
WriteLongness(xpos,ypos+C_ECHAR_VDOT+1,500,4,1);
/*标称K值\折射*/
xpos = para_xpos ;
ypos = para_ypos + row_height *2;
Write_Number(xpos + 0 * C_ECHAR_HDOT,ypos+C_ECHAR_VDOT+1 ,( MGetAngle(1) + 50)/100,4,2,0);
Write_Ascii(xpos + 4 * C_ECHAR_HDOT,ypos+C_ECHAR_VDOT+1 ,'/');
Write_Number(xpos + 5 * C_ECHAR_HDOT,ypos+C_ECHAR_VDOT+1 ,MGetAngle(0),4,1,0);
Write_Ascii(xpos + 9 * C_ECHAR_HDOT,ypos+C_ECHAR_VDOT+1 ,130);
keycode = MenuKeyReturn(3,3); /*出现菜单时,按不大于keymax的键返回,mode=0其它键无效,=1确认键有效,=2返回键有效,=3确认返回键有效*/
ypos = para_ypos + row_height * (keycode - 1);
switch (keycode)
{
case 1:
if( MGetUnitType() > 0)deci_len = 3;//单位inch
else deci_len = 1;
number = 0;
if ( Input_Number(xpos,ypos,&number,4, &deci_len,0) == 1)
testrange[0] = number;
break;
case 2:
if( MGetUnitType() > 0)deci_len = 3;//单位inch
else deci_len = 1;
number = 0;
if ( Input_Number(xpos,ypos,&number,4, &deci_len,0) == 1)
testrange[1] = number;
break;
case 3:
deci_len = 2;
number = 0;
if ( Input_Number(xpos,ypos,&number,2, &deci_len,0) == 1)
{
if(number<1000) /*斜探头输入K值*/
MSetKvalue(number,C_SETMODE_SAVE);
else MSetAngle(number/10,C_SETMODE_SAVE); /*设置当前通道 */
}
break;
case C_KEYCOD_RETURN:
retvalue = 0;
break;
case C_KEYCOD_CONFIRM:
retvalue = 1;
offset = C_OFF_TEMP + 20;
MCopyProtectedMemory( (void*)offset, testrange, 8, PM_COPY_WRITE);
break;
}
}
if(retvalue == 1 && MGetAngle(0) > 0)
{
while(1)
{
if (TestLGAngle(testrange[0],testrange[1],R) == C_FALSE)return C_FALSE;
return C_TRUE;
}
}
else if(retvalue == 1 && MGetAngle(0) == 0)return C_TRUE;
return C_FALSE;
}
int TestLGAngle(u_int diameter,u_int depth,u_int R) //直径、深度
{
GateMax.Amp = 0; //最高波置初值为0
int gain = 600,range = 1000,angle;
//u_int echotime;
u_int gateamp;
u_int char_len,row_number,crow_height;
int number=0,deci_len=2;
int xpos,ypos;
u_int preElapsedtime;
int retvalue = C_TRUE;
int keycode;
int gatetype = 0;
double dAngle;
u_int testrange0 = depth * 10000 / MGetAngle(3) - diameter/2;
MSetAcquisition(1);
MKeyRlx();
MSetScaleMode(2,0);
MSetFunctionMode(0,C_FUNCTION_ALL);
MSetDelay(0,C_SETMODE_SAVE);
MSetBaseGain(gain,C_SETMODE_SAVE);
MSetCompGain(0,C_SETMODE_SAVE);
MSetSurfGain(0,C_SETMODE_SAVE);
MSetEchoMode(0,C_SETMODE_SAVE);
MSetGatePara(C_COORHORIUNIT * 6,C_COORHORIUNIT * 2,120,0,C_SETMODE_SETSAVE);
MSetBGateMode(0,C_SETMODE_SETSAVE);
MSetGatePara(C_COORHORIUNIT * 6,C_COORHORIUNIT * 2,0,1,C_SETMODE_SETSAVE);
range = testrange0 * 100/70; //放在第7格
MSetRange(range,C_SETMODE_SAVE);
MSetSystem();
MChannelRenovate(); //本通道屏幕参数刷表
char_len = 7;
row_number = 3;
crow_height = 24;
xpos = 4;//C_COORHORIUNIT * 6-(char_len+1)*C_CCHAR_HDOT;
ypos = C_COORVPOSI + 1;
EraseDrawRectangle(xpos, ypos, C_COORHORIUNIT * 5, ypos + crow_height * row_number) ;
MSetColor(C_CR_MENU);
CEMenuOut(xpos + C_ECHAR_HDOT,ypos + 4, _TestMenu_AC3 ,char_len,row_number,crow_height); /*在指定位置根据每行字符数、行数、行高写菜单*/
WriteLongness(xpos + 11 * C_ECHAR_HDOT, ypos + 4,depth,4/*总长*/,0/*是否写单位*/);
if( MGetUnitType() > 0)EMenuOut(xpos + 11 * C_ECHAR_HDOT, ypos + 12,"in",2,1,8);
else EMenuOut(xpos + 11 * C_ECHAR_HDOT, ypos + 12,"mm",2,1,8);
/// Write_Number(xpos + 11 * C_ECHAR_HDOT,ypos + 4 ,depth,4,1,0);
GateMax.Amp = 0;
xpos = 0;
ypos = 0;
ClearCursor(2);
preElapsedtime = GetElapsedTime(); //开始测试时间
///MSetSystemMode(1,0); //设置成自动调节状态
u_int S=0;
u_int h=depth;
///u_int angle=0;
double angleTemp=0.0;
xpos = 0;
ypos = 0;
ClearCursor(2);
DisplayPrompt(15);
MSetColor(C_CR_MENU);
CMenuOut(0,0,_TestMenu_A1+7,5,1,24);
while (1)
{
if( !MGetFunctionMode(C_ECHOMAX_MEMORY) )
{
if (MAdjustGain(0,1,MGetAmpStdMax()/2,MGetAmpStdMax()+10) )
{
GateMax.Amp = 0; //增益自动调节过
}
}
MParaRenovate(0);
keycode = MGetKeyCode(0);
gateamp = MGetAmpMax(gatetype);
if(!MGetFunctionMode(C_ECHOMAX_MEMORY))
{
if(MGetGateParaMax(gatetype) == C_TRUE)
{
ClearCursor(2);
xpos = GateMax.Pos;
ypos = C_COORVPOSI + C_COORHEIGHT - 2 - GateMax.Amp ;
if(GateMax.Amp < C_COORHEIGHT) DrawCursor(xpos,ypos,2);
}
}
else
{
xpos = GateMax.Pos;
ypos = C_COORVPOSI + C_COORHEIGHT - 2 - GateMax.Amp ;
}
//dAngle = acos( (float)depth / (float)( GateMax.Time * MGetSpeed() /(C_SAMPLE_FREQ) + diameter / 2) ) ;
//Write_Number(C_ECHAR_HDOT*10,0,(int)( 1800 * dAngle/C_PI),4,1,0);
//Write_Number(C_ECHAR_HDOT*10,8,(int)( 100*tanf(dAngle) + 0.5),4,2,0);
S=MGetAmpDist(0)+diameter/2;
angleTemp=(double)( ( pow((double)S,2.0)+2*R*h-pow((double)h,2.0) ) *10000.0/(2*R*S) );
angleTemp=acos(angleTemp/(double)10000.0);
angle =(u_int)(1800*angleTemp/C_PI);
Write_Number(5*C_CCHAR_HDOT+4 ,0,angle,4,1,0);
///Write_Ascii(0 + 4 * C_ECHAR_HDOT,ypos+20,'/');
///Write_Number(0 + 5 * C_ECHAR_HDOT,ypos+20,MGetAngle(0),4,1,0);
Write_Ascii(5*C_CCHAR_HDOT+4*C_ECHAR_HDOT+4,0,130);
if(keycode == C_KEYCOD_CONFIRM)
{
ClearCursor(2);
MKeyRlx();
/*while(true)
{
xpos=28*5+10;
ypos=33;
TextOut(xpos,ypos,1,11,16,"输入角度值:",4);
Write_Number(xpos ,ypos+20 ,( MGetAngle(1) + 50)/100,4,2,0);
Write_Ascii(xpos + 4 * C_ECHAR_HDOT,ypos+20,'/');
Write_Number(xpos + 5 * C_ECHAR_HDOT,ypos+20,MGetAngle(0),4,1,0);
Write_Ascii(xpos + 9 * C_ECHAR_HDOT,ypos+20,130);
if ( Input_Number(xpos+11*8,ypos,&number,2, &deci_len,0) == 1)
{
if(number<1000)
MSetKvalue(number,C_SETMODE_SAVE);
else MSetAngle(number/10,C_SETMODE_SAVE);
Write_Number(xpos ,ypos+20 ,( MGetAngle(1) + 50)/100,4,2,0);
Write_Ascii(xpos + 4 * C_ECHAR_HDOT,ypos+20,'/');
Write_Number(xpos + 5 * C_ECHAR_HDOT,ypos+20,MGetAngle(0),4,1,0);
Write_Ascii(xpos + 9 * C_ECHAR_HDOT,ypos+20,130);
ExpendTime(20);
break;
}
}*/
///angle = (int)( 1800.0 * dAngle/C_PI +0.5 );
///MSetAngle(angle,0);
MSetAngle(angle,C_SETMODE_SAVE);
MSetTestStatus(C_TEST_ANGLE,1); //设置测试状态,K值已测
retvalue = C_TRUE;
break;
}
else if(keycode == C_KEYCOD_RETURN)
{
if( DisplayQuery(4) == 1)
{
retvalue = C_FALSE;
break;
}
}
else if( keycode == C_KEYCOD_GATE ||keycode == C_KEYCOD_RANGE )
{
if( KeyManage(keycode,1) == C_KEYCOD_RETURN) MKeyRlx();
DisplayPrompt(15);
MSetColor(C_CR_MENU);
CMenuOut(0,0,_TestMenu_A1+7,5,1,24);
}
}
MSetFunctionMode(0,C_ECHOMAX_MEMORY);
MKeyRlx();
return retvalue;
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/jsshinechow/JW.git
[email protected]:jsshinechow/JW.git
jsshinechow
JW
JW
master

搜索帮助