From aa22209096a8281d36f29a170083284e060591b3 Mon Sep 17 00:00:00 2001 From: TAO Cheng Date: Wed, 16 Jul 2014 10:25:21 +0800 Subject: [PATCH] TestImagedll --- .../Msi/Hsi/SevenOcean/So7_Interface.cpp | 29 +++++++- .../Msi/Hsi/SevenOcean/So7_Interface.h | 5 ++ .../Hsi/Tools/UsbUtility/Debug/Deinterlace.ax | Bin 90112 -> 86016 bytes .../Msi/Hsi/Tools/UsbUtility/Debug/reg.bat | 13 +--- .../Hsi/Tools/UsbUtility/Debug/so7_config.ini | 25 ++----- .../Hsi/Tools/UsbUtility/UsbUtil/Mv_Util.rc | 33 +++++---- .../UsbUtility/UsbUtil/So7_Util_ImageDll.cpp | 68 ++++++++++++++++-- .../UsbUtility/UsbUtil/So7_Util_ImageDll.h | 7 ++ .../Hsi/Tools/UsbUtility/UsbUtil/resource.h | 3 + 9 files changed, 133 insertions(+), 50 deletions(-) diff --git a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/So7_Interface.cpp b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/So7_Interface.cpp index 5f15212..d58002a 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/So7_Interface.cpp +++ b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/So7_Interface.cpp @@ -40,7 +40,8 @@ void CSo7_Interface::InitDll(void) m_pPAUSE_SCAN_AND_GET_LASER_DATA=(PAUSE_SCAN_AND_GET_LASER_DATA)GetProcAddress(m_hImageDLL,"PauseScanAndGetLaserData"); m_pGET_SCAN_LASER_STORAGE_STATUS=(GET_SCAN_LASER_STORAGE_STATUS)GetProcAddress(m_hImageDLL,"GetKeyenceStorageStatus"); g_FitFace=(FITTING_SURFACE)GetProcAddress(m_hImageDLL,"FaceFit"); - + m_pGetLaserData=(GET_LASER_DATA)GetProcAddress(m_hImageDLL,"GetKeycen_LaseData"); + Pro_cmd(VINIT_DLL,(LPARAM)&Image_Info); Pro_cmd(MINIT_USB,(LPARAM)&Image_Info); } @@ -126,4 +127,28 @@ double CSo7_Interface::PointToFace_1(double* _dCoe, MY3DPoint _PointXYZ) r1=((a*_PointXYZ.x + b*_PointXYZ.y + c*_PointXYZ.z + d)/sqrt(a*a + b*b + c*c)); return r1; -} \ No newline at end of file +} +//======================================== +void CSo7_Interface::GetPositionXYZ(double* _dPosition) +{ + Image_Info.Org_AbsX=0; + Image_Info.Org_AbsY=0; + Image_Info.MaxisX_Scale=0.5; + Image_Info.MaxisY_Scale=0.5; + Image_Info.g_Bar_curx=0.0; + Image_Info.g_Bar_cury=0.0; + Pro_cmd(MREAD_AXIS,(LPARAM)&Image_Info); + _dPosition[0]=Image_Info.MaxisX; + _dPosition[1]=Image_Info.MaxisY; + _dPosition[2]=Image_Info.MaxisZ; +} +//======================================== +void CSo7_Interface::GetLaserData(double* _dLaserData) +{ + Image_Info.Lase_USB_Type=10; + Pro_cmd(SWITCH_USB_LASE,(LPARAM)&Image_Info); + float fData1,fData2; + m_pGetLaserData(&fData1,&fData2); + _dLaserData[0]=static_cast(fData1); + _dLaserData[1]=static_cast(fData2); +} diff --git a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/So7_Interface.h b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/So7_Interface.h index 713e0a9..29c9d0d 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/So7_Interface.h +++ b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/So7_Interface.h @@ -15,6 +15,8 @@ typedef int (_cdecl*PAUSE_SCAN_AND_GET_LASER_DATA)(float *GetStorageData,int *Ge typedef void (_cdecl*GET_SCAN_LASER_STORAGE_STATUS)(int& _bStatus,int& _StorageNumber); typedef int (_cdecl*FITTING_SURFACE)(MY3DPoint* pArr,int n, double* Coe, double* Error, double& dis, double& dis2, double& dis3); typedef int (_cdecl*FITTING_SURFACE_PCD)(MY3DPoint* pArr,int n, double* Coe, double* N, double *Error,double& dis1, double& dis2, double& dis3,double & d_max,double & d_min,int & i_max,int & i_min); +typedef void (_cdecl*GET_LASER_DATA)(float *value1,float *value2); + //====================================================================================== class CSo7_Interface { @@ -34,6 +36,7 @@ public: GET_SCAN_LASER_STORAGE_STATUS m_pGET_SCAN_LASER_STORAGE_STATUS; FITTING_SURFACE g_FitFace; FITTING_SURFACE_PCD g_FitFace_PCD; + GET_LASER_DATA m_pGetLaserData;; void InitDll(); void StartStoreData(); @@ -44,6 +47,8 @@ public: int Pro_Face_Du(MY3DPoint* pArr, int n, double* Coe, double* Error, double& dis); double PointToFace_1(double* _dCoe, MY3DPoint _PointXYZ); + void GetPositionXYZ(double* _dPosition); + void GetLaserData(double* _dLaserData); }; diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/Debug/Deinterlace.ax b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/Debug/Deinterlace.ax index 57a58ae8f126b8c459a9e3f375d400e866ffbe63..4bc490bbdd20da8a3431b08aa2be7c7bff4fd559 100644 GIT binary patch delta 18591 zcmeHvdt8*o_y4oYf~%~s<^qfED(b4Jh`a0pdtX#Q%iD61ixN8Pq3_h`AU zvi;tB9N+KvzDD{P=x-yPzpDA(E~J|sckXRR+Og{Ny@N=f-F1({XTH*Y?|qb0=R8qB z`(S)OYZAju=J}^Hj{XCX_5PZfph1DW0ETg)TjE}35wTdtW5{T6|Hv6Y7yiMXVcXsH z$PTH?%dO2|uTw6W+K>KMF!m*4rs!+6EB9n= z%RoPr=PCq(mbDLe<{&sZCyox^L)-fKZH752WTvyNg`R>7z!W5$B;kDq1RX=(x%i76 zJ9cb8yuYa`sZR;7gnb7cx0T;6e#Duyr*OE{6Dw$w$vq(}C~wjptFwIPA0AIZ*5@+0 z)e|xqSo<-NGpWNzuogfErJfK0B=*=kJRxFa*b|Tw-7jrThjuaw8TZi6UQEuU%I>}B zxNa)Z+Md7ZhC_CCA?$29qcF;S>LXIzcWggC452Py5rnHt7R*9|t}*nMH+GXdeFyUI z?j}-6x_aI@2v?+#ve)U;y`3-&%{UKlf$;2E4taJD!#J1W!C;t)jpQxK6JuOo&~`?wKkZY$s_o&CyooXSfkbC2PzvuBBVM=>5j%C#te5QLu6@&aSc(5#M$MpA~9OT9Ee~i8_3x(Wq1MY zsxG@o;+)b^Fd52C$;d>f|4ATHX=M2D?o{phPU?&eBwMPJp0DgyH?oT=B=1R=_nUkP zYMqy_K6mq7n~*J7WIwLF8dfMcV!T8qg-7rwUm{P3hw)Kb7GBqL#tSmJ&AE%&9JWR9%=pN5sN$nNSI)@E5W|H*gA8JU#daFMuW%{&P?DOU`n zQtJ*1F%^!*w}Q*oVGbdQbNa1RD=YM*kkA3D5>^bd{jOhd*+5FRFT&Flfk*J_Ad09e z!t?b}N1NJfeiQ|^)%++7v~?KHI&7^){`R|k+dm9-j>YXuCbBGLWT)R^Yl8Pp=?LDJ z)DGxi4^kU*YR37svo$p>{F^)2di!^No}~7h+i7Rm9=OJJN$tg-vbI*WC&N=ks}%GZ zh2d9qAnOUS!hx`MDyjP9SVK)wPkTE*xcqgf%quV?;94nnElGDwX=4v^ve??#v%&lB z1n*l6QK(2Zz~T-++bzF?+=8gFCzZ7E|3<2ALhbJqiq^Oq&f00yHO-_k&>?2&iH`K11 z?*^Cugq8{g)kf+g=0|0-?c4(G%|4QNd#n=i3rDy;5kUlxW{-+WZk$g@SHPVKXetWwA|$wFR=Bf4q|$gUX94eJY0co ziEYPjyn}s7aJcjwsUJUJ0Nvyg72im7UCqFmbkn#|hva!G)w~NZliO?@0e=F=fRJpRKdI{1hGT9hgvTGPkVO%+g^9 zBs?CQ$O`MTHj;0XV+W#XXL}FNT96xMxvguv>)x>W4IGs_9^Y3 zTbYJBy8WFdXC{R5J|;g*$fAzlGI0=f{Ett}4Q^XXy{p8*F}wdo&Q2`rHvu^N+tdSM zBeNGH#l{t6b&pv}o_^Rgq^*>0n&zdol*0Op}s*=rauju zqI`oUzfX}xJ}^3&e8npN?=kX(vXi#|IFs57d%^3_Nu8~Uy99JZ7WoBAj(5q=Ou?tss=x|5es4+yKU`qRm`_4C-o-t_@4 z)Vr^h2&jbO9CjnlFkTAPiCDlXC2ZPLbd_f~%lBgzG9bqu$b+Ps4%`!RtdVS)R`M99 z4cLGWOHIH~YYX!tx>-PQ*$nU8qcQf>pQoNvPUWAKgV}|0O0A((IUB5__(kW*aqBS5 zL#uVbK&k;plEP_csIPYB$lY!-B4udFENJrP4y$|rOH?cA4m+h`NsMy4 zDCX^S6fxmDsfOL}0#)wHE(&t5=W@0o?l+L}SqU{Pg~t}*Ra9QC+BNg!(FkfzY%Eo3 zot-v@F#;9g`4YH?Dt8AFVju z=fw|@;ORp|1vd0Hgvriu=h}#QdN@SOn!cDG=3tTgkz{9kLJl>OAEv9K-@t(y)9Fa+ zD3TY@c+kB980_Zdw;i@NtO{F)J0BPvTw3n(NMc4RT3erSlWfYgA@@+$C>kbv_p_v| z(GnD#%i8DwrRA4xL0-bLtbyQtCrjHm3Qe`ViovkId41c8^W=KgNZv0*mOWHly8sg$ z+es=tPg1fK{8tu`=d*PsG&XcriD}CLu+3gp_s{b%%wbG+n!6b}HmM^UN0yVdOL3e= zfWx%h0B={}(Q1#UtB~(2tfOqFd~94Ht~*87t>D)Z``R#k@3F6!Gr7a+ zj(G-VfE-SK=Ca&QKSM-4O>H@hoyMCzc+SZsfc$Fw?V8S>W+Q zsQ(8Zo`rC)b1|0)1xz_eiSyAd!ENZcpc;=tn0`VNG3E~B=QNQ=b2a?LCPH$b3@!jG z+g^@gWw5amn@EqmC?mze6ds~uE#wvW!$HHqCjyHI2S|bEIds;^Rmc=F1xzOoc{We_ z53W(%mlTc4#PN9XEy%xn_w3!yq+12dSKMmZ1AFG~NN&*`E+0+jalt2BW6u{bb&LRP z^ybGc!6f<4$QkbUF|WQOave|b75Pt|N_idf=L#K3Ted2YbtG-y8p)+Qw?=X4o~<0q zRIwwea;xULtZG_*0l%x(24AgBzFJ#+wYJ}{wUev$)8o7NqiJ8Xq5pX;N0PV7r%yKX zpOIi7xORDA4rc+ip2q}#8CAn$-9|^V zFyb*3dLTm^-kQ^ft@3rYo+X3k#F2 z-hDmW5vv8qox6pz93~^>rDDu03_&M>eYY<1iIKpy5}Sxt9xEJ1JD%g>!9h?FCsG>P znGE7vg`*!r(b3zAC%p=}?GFWzZwki^M4hzPQ?2fzd^n1v3tLNpa7@3F_IetSdHLkK zXY5r+pBlmIV%(McH;n6YIY#HxaXdL1pbehO`5V4ZtD2u##}g_r9ay=wWa+#R!*AK$ zCW=y8#{a@CW&a3nhE`!Nu7<%{1*Kd$^C{mX4SBk%X&%cPszIH_#83=Fk1h?HnDfm%|K_^e1pEZ zpi2LujW2J+N}nyD*FW2l&E^hDxZy7^y`hT;+CO;ft{olpCAVAZQ#y0P>u28F>7 z(Jgs`(3+81FytlfqA~)GDAE(M1t*xrh7z>Qw%Pyi6!kzq^Jod%M6K6XA);Ia482!l zuV)tWoXKLivofI69^Dc_(MZoii6^8K<*Oq0jC+Fz zP=2x~jO3T(53TV1(6+GLwN-Ev-XbvJZJMfGaMu%QmV8|@NWTcTX1G_twO-Kxw(S!* zZ01M-aP(kbBtrC4&Bt+t-c7P0#x{yCKeuGyK?Vk(EgdPgKEjDYLxeQMjJwJFQspGD zWvV^6HX5GB<|srNhpCBjaRg4}?I~%V#;vre3HB2bLwoU$xij-Hj!uy)IBCmWC8Dij z$at+Za(pAUt9duzG5zP_3ID*<`O`9uAv_@!Ak+T0mIC!Q-MurKA{q5^Z>#7#f#7^iDNh7+g!Otx4dwH8pV6!KCEiosad0}Y@b%3kg& zegZm`IwvbcDFw!hq<(1;|H?&TepyyBIDughgg{X^s;gZoR=2nl<5g=by7#HN#*0~T zU-|pIm`zgC~$Z_VCE^+jY1%fv#ZQ&Zz?2PM>sFnP8cd6~f$E zj@}qP>`h!tuG#1E+fR|1WiXe}u2w6#@Twg%$~ zqbh}AWw@`)xs@-pvSLpvj)}#n33t;(svKjU@HHd)+h%B7Rvb>Jw~#?YOK3yw)K>o7 z6x3QbnvWZ$I~V%9=u0!-DubR5Hjt#1roc;>7B*Q_7qH?h;#@hIKi*6(uZ&AzVP^0z z-nR}F6)iKt)~N*VEM0Dp$-PRq&TSLZKbe-`8|!q#_IW^OXLH#uZb=w zuS;?8^Ej8{TPdQ{6!%8F4d7Oew-by-V0TI2PFKM+sEgyRq6Rl$)hPaN4P??PqmIoG zt4|t^2EST^&=7C?dO8e8{P=>>tExh!I|vH`;yV%*5x7P#R!EA1*bGrdD*V%8vVT<+ zxw2{}?*b`zM)O+8e&;s+LLJFkJ)OVvE3$8OYG2my!079Ez)M~+@H;O4_anI)^EV@* z`%33Xw!Y#U3DGSVkzZel(L=QVYA6zSF5U(GWhg>!D5L)%AFUcyLRHpf{)W>CqoF>j zZ&H@FQWu#vU41RXaNO3b+7AZZqJl$Y_bVzvVW$dNp2sTwvkc&bGFy63&N9Uz%DG9g z9|=y;eH@X7uQMHU72@Es(@X}AkfHY9cne#r>D^_^dCI$=Kq zB6M1Ljtl|Y$62J1WLQ0^8VI(qa3VB>1zdLqp)Gy%$$9|4L8?~Ph zj6?rffOLS>;UziJ72-+m{g?s6*TLm8Q0uCMvUh97{Tiqkkqd(4VJrby%OZzZ?Lv)L zUFdrY2srR_K9BskCa71JYO_eMwYtA3icDBLjCYefvo?lTNw%&XNDi$X&bOZ?Kde>o z)1pZr(elGpB#8_g=6I8yk_|UcBr0UQx^g-%cwufS!YjUj!JY2s23bSK@!vj8&Xb|( z^RX&0_s*#r)Dbi8aZ21B{EesX1@HA|Pwibu^vP`pncmGsc8P9OL;i&d4{lVAoft1) z&PB3#oh<(CPAs(4wcC6X^?-$Ydl0Y*k#-jx5Z-?YNWwA6@NNiU_syM()TPtv)8w~x zCi=pbIw5RkR3~t;5qJ%Y3;SuW(w85luMQ9Wl^P=4-eLtCilc98l$YVtSLtH9^s06m zNMav}Mv{-tq?hh<@!C3II{2*-w6ZPPkt<~b(;y-nO3|qb&Xp!3w(@r-i@2Avfzz#E zAepaahfq-~D(tQFod=?V2*+fFIFlTCZT!F)(Ns*lW#~a&PCS$!0ToG8kddUi8_1yb zqj}$uY3m<-XdYAu&M?e^Y`PTz-xzXu{XxDuioCR;UjTdEnXV9$jT@r*7fzE?8)PGC za0A{*dOPi1t$`GS-r46R8St->09--hm1&>XLwZ4T)dIRw&lBbAQXMTSXc2G588-8l z^Z8q8bexf_yZqYXK5PKhMHHk|q_nJ{Ea-_1wX$bO$?G`@sI7KgRj?Dh^C+yFAfofp zsn$e=0)C8psc{@lh@oX)XfP8;c7#3T_cc-y`$ivnUCvIB(U5|xKaoZP1HErG^4}PN z8C&_rTZk7%ZZr?#Si4XCaC=>3W}3TUB;s7o2pk*x_skm6S$cot)4Xk@|E48819@Xp zG=Jr2y3q@)*F7Fmv0NF&j#c`C9PjLLGbdu77o)Ms=qv+6mN+Khh8y-({N`cF%eZC5 zzTBVfvGl|yh?`Nc=OUT9d46v&3asvh|MGa~26TFJSRi{5JBk=HCd#b(W%EdW5B55p z@Jtf1HI0`=inbQ;QTLmz5m8eka0kT2fg&yrH2cb^$^~sAtGoXVG)yBl^3M%261Q#8 zFsh1V0eoAz3#yY+)!D)_+=suxq5nep<;8*C%e}?h!l1!dw<*YoH$>$4HX7x)x6w!} zF|cLqc-->TvQsM%0n-t9sjo>BptR=%0(y2+AI+?tBDUUeDtOg+u9C=+qYxWvgO_PgL|%%kA2!S>KtL8wf_AD)f~>TyaQ0ZH zL&|0g99aT3TgW~va%2e|6VaN4tuH?rys8f4Ws}9wuGFtqeGZ#f1Y000zZSe~HKk09 zpsifN!zpTlfDHSBfbGeSag1W06*!&}u+It|PYKx)k>e#1I_sdFItHS@684xQud~ZM zp<|ke4Ptc;E$TZK3D_5ejzvP~#0rTrIeDa1o?@d<7WlCUzuIvSg-T>NAN=xsSPvNJ zX@qWn3HDlr;V4}RbnwA1H{#6;Ta(AdnYjowiD6goVc->^B|)0+AR@6km*ixoq~bJ^ za?#_#WU(fED70|bX#SZqWXCSNYA3C`!iNqA5o-#^&Tgj;?`-3C)EA7Ce(w$JLGM~K z+`p5A_ab`iLFAC({*wITy=;>3W<*b%aJ|P#^2vLJ(zY{y302crIUJ~A_X2dgZ+B=M z3=GDNwM;GNe$TWO#LD8c|3w48?Ve3NaQU@jMTYxv^31gyS5F25h&!+rOb$Ai17@V!F?&){_y8Mk*mFOpo^ zOJ8{Zv3De%BlanI6UmHy6tiUCu)fmUKBpt+oG^r`CEx9nkW>5mfaB|ZblZJ@V>szs z8Okg0)tg$0ZwEU$duO_>zv2xY+s>)tevPjyMf??K$<@jTy7J*|6rIj)dKxyz0Ut=w zbo>Wn`QKk9FMbdc@;3_n`YNgUKvLN3)!hcK?#ht-*BUcGe+Z>I4>Xw6oqwIwt^>@U zTPBtdhw`-K$q!A@Q8>)8H`T7XBuogy;EH6ZH)L8x&+Rw4Ym~m2Z^`sDtJ_2xKQ!|O zkl?Be#rmH;9^U~B{S@+8?i~{iz9+*bJ^>Xo>%_T#a7pyE zqG9y&vDt8sC-}1+z3fN%v#~?>o@Q&!n_b6801V%WaLJ!5bUT;%Y>Z08UB1m`d(CD8 zW*cg3{b@@G+!VgHWE2l7J}UZQ>33MU%uxCmRg-&kq>z45(rql>%NMn4wvJcS%U;7z zm~GcFw%c^q)qXT$2&@EQhZTu)ok9%haJ&|zI#=QQIJ|#I@q{RwNZCj9e&C&t#`0G+ zk(Q4hMnU~?bO`ETTY3p+0C5J5&BSc16i(;k$9jU2hL?CkTq=AVJ$MED2OB#XPjn$e zv#IDqR`5j|?fOerF2HTXfyf{fQ&0qn9W81kvk#2q;}UG`fnk1Vjts00A&m!m_v)+^ z)kuCiKrb@-R!5KVRz;YEomrad`8Bc?}!FF_C35s!7ba#C5yO77u)n<`u%D7wIVf}+`$GFw4zkd3>iQ8WGWSv z_s_wDaVxg8Rf0D|XjWLjeLw*n(ob2SD%^J}8%feXhd+dJ0`w-erqK5|o)9hk!aqm# zr}q-9iC%=Ey4YGUxAT%??j>^UpAkbJy!7~r`#AOq?yir!4m3~yR17(K9vl>O^eQ|I z{dTrDB@^wzVZyE(kl6=Sfpp!AQg9jNolq-GZ()xZUJ}E^5hS!y%(sh!7V_7GgLE z&D&eIk#R)}5HfKXsP;aKga5LI%|-dAmt!-4Y8u*xhx%Lp4EPOAbUZh7W4bx{m>a z4}HVRZ`%ZH{8c}8p#a$*xbG_<9o=VUQYnM$2g<*Pzrfal)gz$yYt%V9tirkkdXdhM zN%iY^a?)HsavUrOpI6!jvtt7h%x|5eRb48fmkL;jCL}PfKx-fn$S-NGTq}we`rg9}~m!u+9Z3 zSWH^nJ)RswrQs&uNA1>wXJ|FL?|hBX(BK*R1}#m*~L+MH(^0Y z>D`D00l_E@o_bI)e(d4+r4 z;-2kz-WQ^wft}LUa^V2ZF*{)}Eo(_hLujv$P;8{d`Q$BMv7HuE$q`>M;tGl}Ch8dyTZ^ zJf*v@kjX3zP_H zeXTR!qIlys5^*-97ws*QmZ9IXp(QACW65bTedWs*wZtG>ZKX_`@Bvt7>&_{H7Wao9 z51poFq}3}Z$BSJYlwR+nyC}Vy(q}wC-%0UqiXX?}$roq)^rAR%GjM~+FK0u!qLvo< zB)Bm&kW%w$@n84Wo{RMqe|xg$S^U0aey*_ z0`NE>6+nOAxEba%0R8m>?%of$D+F8u-1|4fNWN#7NI)VW2T%l93D^wS5BLml0ni2z zpw2^pkpMkl>JLl_GYgq{fMtN!0DA$40rYnX9n=G=0eb-30B-=+0!9K>0$v6b0SW-Q zfT;jIfc~ubBO@~)8ZZDL0R#YM1C{{b7Wp?GDw**U!^{ON0jvXT1MCMJ1)Kv+2HXHJ z(1RGz4m|{*ECXyqelOrK;4{EEfFAho0Z}wXnf|t+-dezmfC4}|KnWPVAN+GWlJ=Ofwp>V02QMybrCs3my4ji!a?Qhx(Ck1~3q&ayJ?9Lt#mGB_(EK zrvmh(^6!IuZ)2Q*?qd}1fb5$d9AhIvbL%nA*U>yc{06!LC^tfWv}HwF3TT5qT<;@P z-wPhJpHPXJtk?osX#;>rbS_5YrI1mHj_4Q?P@w|g+JgoFV&v)A+jh(34>S1a48Q+# zbBz3}J(kUs$y)(|IrN((nf!e~z)Z6D$EhXHd}{zGSAf=i#@nF$(yd<0`|oEQX5VSn z{})sKz>HVW8QlaS{#Rza1XJGK7W1qA_iV8p_SfAO6W)S(`M?Sx=6wJS`Ao67(kmDP zdIW%)qQ3G&7&ssTkPj#YC?Q0}n_#BtX4om96y;{5R#covE5B70({hxj@0{1aOS`$Z z2fW)Bbi8F3iM~2t6yZ<8spGD{3}-Y*LX@onapNh7Zi=ay#jrZ{-F0>K(FFH8y?>~sTHZ@|X-*sXb zCKTaM6mYA$;nvZR2)Iq%>M9TliJO4;MQ*f(4}mKJZdEtFL%=b>?fH%wLV38~4Im@X zU_m#=bqMdSG_DyG`u`)`|MwAY)hjnn`ibJ0@dZyl@l@(#v*tWoWxc(hKd$qi3$$Uf z=;9FgpdRH505@P>3B!~wK|uZx!}RNmuit>n(Uy#rsFV#II!X#IHWu%v&HH+mpv!xo=R+JRXn9=X)#B zXQLmFiK7zwehH&_%*xIJQlbC))IPiwJm$dVKDF_s zb1}vp^Gl3S-AAocThvq4)76Ez%&1d8ta(xMt>#C~HO(CjFSbYQ<8h1PR>y6R`!MdO z_(<)GT9HnnOV;J-BK2eRyY!d!T0_2}*pO#@-dJNiWPZwm&LX`3Lcyf`Ng1ue361^- zg-GCM>z3;l=zAGv8#bCgF`Y66m?O+F=2FX1%X!PMv|@tyUpb6YT9wZ#Hz*aVyQIikBdZxNmy{e!wgE!IS6;x#Fn0?m5Ov#~p3 zYh#n*&c@w{dsO=`ZHY=ZRoA3z*4@%Qq?hZp`V_rWzeE3l{*K1ER<)4Qg=W~KQ9v&;Os`DgR5X0avGGTl;a*<{&g zX|^y{oO>br2xY8tg3_+M0il_gUNMrG0WlphY3jlf^+vT@JzMj%#-6Ct~Ty^ zoFHBi|7`r(c%{}~C(`xR$#q5g^ZF}#Vi;r`VLWX-XS`(m&8RYMFzqmXZfY^zHT5#F|RToHlH*%nJ=2ZGq>UsF(w~&jwD0%m}-vdIn@iQGSwK3UNcVfh^8b} zGecvFPmF&$eo6fD_;vAb#&3&nk7u+!v>I)q_7UxT%<59@F6|-h3GFZ1JK8_A!*m** zQTLSYIo(UTBf3W2O2bCOrew9wv)(cv9sKh;tdt7?t89Wz~%r>TxT z8Y_<<9-ppVqIGDuYTwgVm1sZHey)AkkZyR=@TTFgp}`WrH$MC0C76omc%^^-0W^F@EY1>VK$Ls7q?q|5184b)1s{j>({Sm>cxTdrlbmD-OXaDQE`?pvKjpRQl2-=n{%pJMvZ z^ovPg)|+$84ztd3iyCYN?k$jfqI_FLVnpgm>Wk_y&1g-oW}~KB^GUoXK13T|qHWOL z(1z<`VTOxz;rdMd^ZJc?hat+SH;PQCy#<#CNYu(r%Dc*8s!6IRR1Ve07{yC5k7y2Q zKGU>n{?NQ1>ldfcrfJ{M-ql9v`szpM-_-Bdf39!QTMew?DdT*Yuibdk)M^TYjm$M~ zHJ>uO&EXcKrDUGvRm+D^+dV3ACC=eVqPD{c8O>eW1Z;*kqVxeA8HMoM$RF zm76@KM02Y7CG$G-PVOV|4dF(eG22*deBF4+c*WRZl$ngCY*U$OJIwJS7G1d6XwEjj zV1C_v)_mRE$1=k5uw{kpHWZqCgW!(O_^=-*KnV&H}VSVrf-pvw?POIzCGX{Y{Xb>6128lsxkQpKj3PYqJ z%Aho843$`37Yw%yj8TRqmT0sZ=NcCo*BQ59eD%ifjcqVFsYzo>Fy)vEFwP3o9#ggH z3)2;o8@4SnOU)W{0xZ11TxPB??=e@Kzc4qOJIq3h!lE==CR?&BMR0v(mI})r%YKW? va>eq!rH!hhne+RMNGVlnlnKflWr4CxS)tsctX6)Z1ig(pa9|=YDeQj$*5)2+ delta 18859 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 si(ye}S&6xPm!-kdZ1GrbSeQV!Z diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/Debug/reg.bat b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/Debug/reg.bat index 5bd9693..e2c1459 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/Debug/reg.bat +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/Debug/reg.bat @@ -1,11 +1,4 @@ -copy Mix.dll %windir%\system32 -copy sdk3000_7130.dll %windir%\system32 -copy Deinterlace.ax %windir%\system32 -copy SDK3000.ocx %windir%\system32 -regsvr32/u/s %windir%\system32\Deinterlace.ax -regsvr32/s %windir%\system32\Deinterlace.ax -regsvr32/u/s %windir%\system32\SDK3000.ocx -regsvr32/s %windir%\system32\SDK3000.ocx -regsvr32/s Comdlg32.ocx -regsvr32/s mscomctl.ocx + +regsvr32 /s Deinterlace.ax +regsvr32 /s LinkAutoDll.dll diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/Debug/so7_config.ini b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/Debug/so7_config.ini index d1ae91d..74ce98e 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/Debug/so7_config.ini +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/Debug/so7_config.ini @@ -1,9 +1,9 @@ [7OCEANAUTOZOOM] ZOOM_PRODUCT_ID=So7123456 ZOOM_COM_PORT=1 -ZOOM_START_DEG=0.000000 -ZOOM_END_DEG=0.000000 -ZOOM_ORG_DEG=0.000000 +ZOOM_START_DEG=89.9955 +ZOOM_END_DEG=89.9955 +ZOOM_ORG_DEG=360 ZOOM_DEADBAND_DEG=0.100000 ZOOM_PULSE_PER_DEG=25.134736064968621 ZOOM_READING_INTERVAL_TIME=60 @@ -12,12 +12,12 @@ ZOOM_MOTOR_SPEED_SLOW=800 ; [CONTROLLER] CLOSE_LOOP_ENABLED=0 -MOTION_RETRY_TIMES=0 +MOTION_RETRY_TIMES=5 SHIFT_POSITION_X=0.000000 SHIFT_POSITION_Y=0.000000 SHIFT_POSITION_Z=0.000000 GET_USB_MESSAGE_METHOD=1 -WRITE_DATA_SLEEP_TIME=0 +WRITE_DATA_SLEEP_TIME=5 ACCURA_ERROR_PULSE_X=1 ACCURA_ERROR_PULSE_Y=1 ACCURA_ERROR_PULSE_Z=1 @@ -33,7 +33,7 @@ CCS_PRIMA_ENABLE=0 DEBUG_LOG_ENABLE=0 ; [VIDEOCARD] -SDK3000_SLEEP_COUNT=550000 +SDK3000_SLEEP_COUNT=555555 SV4000E_DENOISE_PARA_CHANNEL1=70 SV4000E_DENOISE_PARA_CHANNEL2=70 SV4000E_DENOISE_PARA_CHANNEL3=70 @@ -43,16 +43,3 @@ SV4000E_DENOISE_PARA_CHANNEL4=70 MACHINE_CONTROLLER_TYPE=0 MACHINE_VIDEOCARD_TYPE=0 ; -[CUSTOM_MACHINE] -X_SCALE_RESOLUTION=0.500000 -Y_SCALE_RESOLUTION=0.500000 -Z_SCALE_RESOLUTION=0.500000 -X_NEG_WORKING_LIMIT=0.000000 -X_POS_WORKING_LIMIT=200.000000 -Y_NEG_WORKING_LIMIT=0.000000 -Y_POS_WORKING_LIMIT=100.000000 -Z_NEG_WORKING_LIMIT=0.000000 -Z_POS_WORKING_LIMIT=200.000000 -ROTARY_AXIS_NUMBER=0 -ROTARY_CIR_DIS=7.200000 -; diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Mv_Util.rc b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Mv_Util.rc index 0e13149..7c8df76 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Mv_Util.rc +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Mv_Util.rc @@ -16,7 +16,7 @@ #undef APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// -// Chinese (Simplified, PRC) resources +// 中文(简体,中国) resources #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS) LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED @@ -418,8 +418,8 @@ BEGIN CONTROL "控制器(USB R)",IDC_RADIO_CONTROLLER2,"Button",BS_AUTORADIOBUTTON,195,47,75,10 CONTROL "控制器(RS232)",IDC_RADIO__SO7_RS232,"Button",BS_AUTORADIOBUTTON,195,63,77,10 CONTROL "Verifcation algorithm",IDC_RADIO_SO7_VERIFICATION_ALGORITHM, - "Button",BS_AUTORADIOBUTTON | NOT WS_VISIBLE,8,139,81,10 - CONTROL "Image.dll",IDC_RADIO_TEST_IMAGE_DLL,"Button",BS_AUTORADIOBUTTON | NOT WS_VISIBLE,7,139,45,10 + "Button",BS_AUTORADIOBUTTON | NOT WS_VISIBLE,8,140,81,10 + CONTROL "Image.dll",IDC_RADIO_TEST_IMAGE_DLL,"Button",BS_AUTORADIOBUTTON,195,80,45,10 DEFPUSHBUTTON "OK",IDOK,145,142,50,14 PUSHBUTTON "Cancel",IDCANCEL,225,142,50,14 GROUPBOX "测试选项",IDC_STATIC,10,8,265,123 @@ -607,17 +607,17 @@ BEGIN PUSHBUTTON "读取参数",IDC_BUTTON_SO7_MOTION_GET_SEGMENT_DIS,673,98,50,14 END -IDD_SO7_UTIL_IMAGE_DLL DIALOGEX 0, 0, 377, 184 +IDD_SO7_UTIL_IMAGE_DLL DIALOGEX 0, 0, 360, 312 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Test Imae.dll" FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN - PUSHBUTTON "Exit",IDCANCEL,327,170,50,14 - PUSHBUTTON "Start Storage",IDC_BUTTON_IMAGEDLL_START_SCAN_LASER,21,30,50,14 - PUSHBUTTON "Get Data",IDC_BUTTON_IMAGEDLL_GET_SCAN_LASER_DATA,21,70,50,14 - PUSHBUTTON "Pause &Get",IDC_BUTTON_IMAGEDLL_PAUSE_AND_GET_SCAN_LASER_DATA,21,90,50,14 - PUSHBUTTON "Stop Storage",IDC_BUTTON_IMAGEDLL_STOP_SCAN_LASER,21,50,50,14 - GROUPBOX "Test Laser",IDC_STATIC,11,6,66,146 + PUSHBUTTON "Exit",IDCANCEL,303,291,50,14 + PUSHBUTTON "Start Storage",IDC_BUTTON_IMAGEDLL_START_SCAN_LASER,21,22,50,14 + PUSHBUTTON "Get Data",IDC_BUTTON_IMAGEDLL_GET_SCAN_LASER_DATA,21,62,50,14 + PUSHBUTTON "Pause &Get",IDC_BUTTON_IMAGEDLL_PAUSE_AND_GET_SCAN_LASER_DATA,21,82,50,14 + PUSHBUTTON "Stop Storage",IDC_BUTTON_IMAGEDLL_STOP_SCAN_LASER,21,42,50,14 + GROUPBOX "Test Laser",IDC_STATIC,11,6,66,156 GROUPBOX "Double Laser",IDC_STATIC,88,5,258,157 LTEXT "X",IDC_STATIC,155,24,8,8 LTEXT "Y",IDC_STATIC,196,24,8,8 @@ -649,6 +649,9 @@ BEGIN EDITTEXT IDC_EDIT_IMAGEDLL_2LASER_XSHIFT,206,134,40,14,ES_AUTOHSCROLL EDITTEXT IDC_EDIT_IMAGEDLL_2LASER_YSHIFT,275,134,40,14,ES_AUTOHSCROLL LTEXT "Measured Value",IDC_STATIC,133,122,52,8 + PUSHBUTTON "Start CCS",IDC_BUTTON_IMAGEDLL_CCSPRIMA_START,21,116,50,14 + PUSHBUTTON "Stop CCS",IDC_BUTTON_IMAGEDLL_CCSPRIMA_STOP,21,138,50,14 + EDITTEXT IDC_EDIT_IMAGE_DLL_MSG,13,170,331,117,ES_MULTILINE | ES_AUTOVSCROLL | ES_WANTRETURN | WS_VSCROLL END IDD_SO7_VIDEOCARD_TC4000 DIALOGEX 0, 0, 488, 316 @@ -1109,9 +1112,9 @@ BEGIN IDD_SO7_UTIL_IMAGE_DLL, DIALOG BEGIN LEFTMARGIN, 7 - RIGHTMARGIN, 370 + RIGHTMARGIN, 353 TOPMARGIN, 7 - BOTTOMMARGIN, 177 + BOTTOMMARGIN, 305 END IDD_SO7_VIDEOCARD_TC4000, DIALOG @@ -1633,12 +1636,12 @@ IDB_BITMAP_Z_DOWN BITMAP "res\\bmp\\Z_DOWN.bmp" IDB_BITMAP_Z_UP BITMAP "res\\bmp\\Z_UP.bmp" IDB_BITMAP_X_LEFT BITMAP "res\\bmp\\X_LEFT.BMP" IDB_BITMAP_X_RIGHT BITMAP "res\\bmp\\X_RIGHT.bmp" -#endif // Chinese (Simplified, PRC) resources +#endif // 中文(简体,中国) resources ///////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////// -// English (United States) resources +// 英语(美国) resources #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US @@ -2613,7 +2616,7 @@ BEGIN IDS_SO7_ABOUTBOX "&About Utility for SO7..." END -#endif // English (United States) resources +#endif // 英语(美国) resources ///////////////////////////////////////////////////////////////////////////// diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Util_ImageDll.cpp b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Util_ImageDll.cpp index 03ace09..05a032d 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Util_ImageDll.cpp +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Util_ImageDll.cpp @@ -9,12 +9,15 @@ #include "afxdialogex.h" extern CSo7_Interface* m_pSo7_Interface; + +double m_XYZPos[3]; +double m_LaserData[2]; // CSo7_Util_ImageDll dialog IMPLEMENT_DYNAMIC(CSo7_Util_ImageDll, CDialog) -CSo7_Util_ImageDll::CSo7_Util_ImageDll(CWnd* pParent /*=NULL*/) - : CDialog(CSo7_Util_ImageDll::IDD, pParent) + CSo7_Util_ImageDll::CSo7_Util_ImageDll(CWnd* pParent /*=NULL*/) + : CDialog(CSo7_Util_ImageDll::IDD, pParent) { } @@ -25,16 +28,20 @@ CSo7_Util_ImageDll::~CSo7_Util_ImageDll() void CSo7_Util_ImageDll::DoDataExchange(CDataExchange* pDX) { - CDialog::DoDataExchange(pDX); + CDialog::DoDataExchange(pDX); + DDX_Control(pDX, IDC_EDIT_IMAGE_DLL_MSG, m_EdMsg); } BEGIN_MESSAGE_MAP(CSo7_Util_ImageDll, CDialog) + ON_WM_TIMER() ON_BN_CLICKED(IDC_BUTTON_IMAGEDLL_START_SCAN_LASER, &CSo7_Util_ImageDll::OnBnClickedButtonImagedllStartScanLaser) ON_BN_CLICKED(IDC_BUTTON_IMAGEDLL_STOP_SCAN_LASER, &CSo7_Util_ImageDll::OnBnClickedButtonImagedllStopScanLaser) ON_BN_CLICKED(IDC_BUTTON_IMAGEDLL_GET_SCAN_LASER_DATA, &CSo7_Util_ImageDll::OnBnClickedButtonImagedllGetScanLaserData) ON_BN_CLICKED(IDC_BUTTON_IMAGEDLL_PAUSE_AND_GET_SCAN_LASER_DATA, &CSo7_Util_ImageDll::OnBnClickedButtonImagedllPauseAndGetScanLaserData) ON_BN_CLICKED(IDC_BUTTON_IMAGEDLL_2LASER_CALCULATE, &CSo7_Util_ImageDll::OnBnClickedButtonImagedll2laserCalculate) + ON_BN_CLICKED(IDC_BUTTON_IMAGEDLL_CCSPRIMA_START, &CSo7_Util_ImageDll::OnBnClickedButtonImagedllCcsprimaStart) + ON_BN_CLICKED(IDC_BUTTON_IMAGEDLL_CCSPRIMA_STOP, &CSo7_Util_ImageDll::OnBnClickedButtonImagedllCcsprimaStop) END_MESSAGE_MAP() @@ -169,7 +176,7 @@ void CSo7_Util_ImageDll::OnBnClickedButtonImagedll2laserCalculate() cTempValue=T2A(str); Top_Pos[2].z=atof(cTempValue); Top_Pos[3].z=atof(cTempValue); - + GetDlgItem(IDC_EDIT_IMAGEDLL_2LASER_BOTTOMZ3)->GetWindowText(str); cTempValue=T2A(str); Bottom_Pos[2].z=atof(cTempValue); @@ -189,3 +196,56 @@ void CSo7_Util_ImageDll::OnBnClickedButtonImagedll2laserCalculate() m_pSo7_Interface->Pro_Face_Du(Bottom_Pos,m_nStep,coe,error,dis); } + + +void CSo7_Util_ImageDll::OnBnClickedButtonImagedllCcsprimaStart() +{ + SetTimer(1,100,NULL); +} + + +void CSo7_Util_ImageDll::OnBnClickedButtonImagedllCcsprimaStop() +{ + KillTimer(1); +} +//================================================================================================ +void CSo7_Util_ImageDll::OnTimer(UINT_PTR nIDEvent) +{ + USES_CONVERSION; + switch(nIDEvent) + { + case 1: + { + m_pSo7_Interface->GetPositionXYZ(m_XYZPos); + m_csMsg.Format(_T("X:%.4f;Y:%.4f;Z:%.4f;"),m_XYZPos[0],m_XYZPos[1],m_XYZPos[2]); + OutputWithScroll(m_csMsg,m_EdMsg); + m_pSo7_Interface->GetLaserData(m_LaserData); + m_csMsg.Format(_T("Dis1:%.4f;Dis2:%.4f;"),m_LaserData[0],m_LaserData[1]); + OutputWithScroll(m_csMsg,m_EdMsg); + break; + } + default:break; + } + CDialog::OnTimer(nIDEvent); +} +//===================================================================================== +//Print message on edit control +void CSo7_Util_ImageDll::OutputWithScroll(const CString &strNewText,CEdit &edtOutput) +{ + CString strOutput; + edtOutput.GetWindowText(strOutput); + strOutput += strNewText; + if ("\r\n" != strOutput.Right(2)) + { + strOutput += "\r\n"; + } + + int iCount = strOutput.GetLength(); + + edtOutput.SetRedraw(FALSE); + edtOutput.SetWindowText(strOutput); + int iLine = edtOutput.GetLineCount(); + edtOutput.LineScroll(iLine, 0); + edtOutput.SetSel(iCount, iCount); + edtOutput.SetRedraw(TRUE); +} \ No newline at end of file diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Util_ImageDll.h b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Util_ImageDll.h index b0fb253..9c0b04f 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Util_ImageDll.h +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Util_ImageDll.h @@ -18,10 +18,17 @@ protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support virtual BOOL OnInitDialog(); DECLARE_MESSAGE_MAP() +protected: + CEdit m_EdMsg; + CString m_csMsg; + void OutputWithScroll(const CString &strNewText,CEdit &edtOutput); public: + afx_msg void OnTimer(UINT_PTR nIDEvent); afx_msg void OnBnClickedButtonImagedllStartScanLaser(); afx_msg void OnBnClickedButtonImagedllStopScanLaser(); afx_msg void OnBnClickedButtonImagedllGetScanLaserData(); afx_msg void OnBnClickedButtonImagedllPauseAndGetScanLaserData(); afx_msg void OnBnClickedButtonImagedll2laserCalculate(); + afx_msg void OnBnClickedButtonImagedllCcsprimaStart(); + afx_msg void OnBnClickedButtonImagedllCcsprimaStop(); }; diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/resource.h b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/resource.h index 5021340..d9dc99a 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/resource.h +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/resource.h @@ -658,6 +658,7 @@ #define IDC_BTN_KEYENCE_LKG5000_ETHERNET_READOUT1 1542 #define IDC_BUTTON_STIL_LASER_EXIT 1542 #define IDC_BUTTON_SO7_EXTRIG_STOP 1542 +#define IDC_BUTTON_IMAGEDLL_CCSPRIMA_STOP 1542 #define IDC_BUTTON_SO7_MOTION_SET_CNTS 1542 #define IDC_BUTTON_STOP_SAMPLE_SCURVE 1543 #define IDC_BTN_KEYENCE_LKG5000_ETHERNET_READOUT2 1543 @@ -903,6 +904,7 @@ #define IDC_BTN_KEYENCE_LKG5000_ETHERNET_CONNECT1 1794 #define IDC_BUTTON_STIL_LASER_INIT 1794 #define IDC_BUTTON_SO7_EXTRIG_START 1794 +#define IDC_BUTTON_IMAGEDLL_CCSPRIMA_START 1794 #define IDC_COMBO_RWDATA_ADDR 1795 #define IDC_BTN_KEYENCE_LKG5000_ETHERNET_CONNECT2 1795 #define IDC_BUTTON_STIL_LASER_SET_MODE 1795 @@ -1023,6 +1025,7 @@ #define IDC_BUTTON_STIL_CLEAR_LOG 1863 #define IDC_BUTTON_S07_SET_IO_PURPOSE 1864 #define IDC_RADIO_SO7_EXTRIG_EQDIS 1865 +#define IDC_EDIT_IMAGE_DLL_MSG 1865 #define IDC_RADIO_SO7_EXTRIG_X 1866 #define IDC_RADIO_SO7_EXTRIG_Y 1867 #define IDC_RADIO_SO7_EXTRIG_Z 1868