From 30d47b772d0bd32d62d0b6c82cb63f709b79235a Mon Sep 17 00:00:00 2001 From: Ron Sluiter Date: Fri, 13 Mar 2015 20:29:07 +0000 Subject: [PATCH] - UEIP can only be set true if the device/driver has set the MSTA EA_PRESENT indicator true. - UEIP and URIP are mutually exclusive. - RDBL sets RRBV rather than DRBV. --- README | 30 +++++++- documentation/MotorRec2015.pptx | Bin 389602 -> 389029 bytes motorApp/MotorSrc/motorRecord.cc | 112 +++++++++++++++++------------- motorApp/MotorSrc/motorRecord.dbd | 1 + 4 files changed, 91 insertions(+), 52 deletions(-) diff --git a/README b/README index 2f44c57d..9d1691fd 100644 --- a/README +++ b/README @@ -144,12 +144,36 @@ Known Problems - Tapping the Jog button can cause the motor to move past the soft-travel limit when backlash is nonzero. -Modification Log for R6-9 -========================= +Modification Log for R6-10 +========================== 1) Alexander Aulin Söderqvist (Cosylab) reported illogical motor record FLNK processing. Corrected FLNK processing so that recGblFwdLink() is only - called on a False to True transition of DMOV. + called on a False to True transition of DMOV. Added "Last Done Moving + Value" field (LDMV) to the database definition. + + Files modified: motorApp/MotorSrc/motorRecord.cc + motorApp/MotorSrc/motorRecord.dbd + +2) Fix for OMS controllers not have the correct deceleration rate at the end + of a JOG. Bug introduced with item #9 under R6-6. + + File modified: OmsSrc/devOmsCom.cc + +3) - If the user request UEIP be set true and the MSTA's EA_PRESENT indicator + is off, then special() denies the request and sets UEIP false. In other + words, UEIP can only be set true if the device/driver has set the + "Encoder is Present" MSTA indicator true. Replaced six occurrences of + logic that tested both UEIP and EA_PRESENT with just UEIP. + + - UEIP and URIP are mutually exclusive. For example, if the user request + UEIP be set true when URIP is also true, then the special() function + will set URIP off and vice versa. Added the special attribute to URIP. + + - If URIP is true and the RDBL link points to a valid DBR_DOUBLE, then the + value pointed to by RDBL will be multiplied by RRES, divided by MRES + and stored in RRBV. This fixes a problem with all previous releases + where RRBV was inconsistent with DRBV when URIP was true. Files modified: motorApp/MotorSrc/motorRecord.cc motorApp/MotorSrc/motorRecord.dbd diff --git a/documentation/MotorRec2015.pptx b/documentation/MotorRec2015.pptx index 7497f755628036a173c3a989e5d375dea052a85d..1d113f0c00ac7782001bd301059c2b67e6580855 100755 GIT binary patch delta 24708 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 R=g3;15%hs6+5iJB{|_=7qE7$- delta 25510 zcmZ^~1CTCFv#ve1XN_&!SYz9^%{9g|wr#DkZQHhO+jHJ;a+#O2R~bU= zfG*rYM=&$T%}Np+GyJ#J%~t6e#0TxoPW&(leL;>tTTZ>Ns9zgPwuf5zz3dPT%Lb1Z z5p{j1CPNk+=DX8OOIn(HYNZEnO8JAoUF@d}^*iqh`=VpKERt$r!KLiyL$*YAAnJDWpz3G zt+(}vhmrOz*$H95brKDXn%kI@@NZhM2qECN!o0%Yi*5JHBx}{)wBf(%cNaNB8@PlM zdTn~u+5*evWSE9vx}fptgi$Ymgx+$jEO3};riDGl0036tS(xuScwl-fj$faaoIT2u z@o^s5gGRq|84SOH;j2Ew(k@JZ5QA!8X(Y*bqbt&%J}6j8l?f(li*{QJrYX7;z|VV) zE&SN-=Cq@-<_d7WB9j^GrPAXPUi|4f?FP8xDcjmbWVx-I);*}c`&{OnorqZ72FXd9|e7i8r~}0L_CTg)YabtqxMhgF&CKb7b?lCpP`Z$ZW1>|64|F*V=v` z+HjG7p7TdIs9rqOzN&v^09=^gXJSw(zhF%y^Odv&z7pswu&D?iTwSK>Zg}QP2a8}y zPcEeIqQ|aKNz{ovZhlRqA-_oNm`E}x<`=4nFA^_YB1?L%TBE%b0Na)|o2vH{Gl9t_ z&M;TjkRLIcNDyV#@+?{wcfo{NVHqdjJks)$aDY3s4c>Ig;_vk6zHB+0a7a(XXhUmsFY~vH< zj``@3dTL+~s0f9eXAg2hEQpaJI=0hc6dFK$EEK3wqpqmp?cy*aX-vX-KL?9TX0Pxz zwrgn^-19g3J4>NJCqBQ|CKqipQ7|7DkZXC}tgs_^87;N`XKN(E+3PsjlK-P#y%XJC zX)v7DXgXrR{ZeRD2!+m;`-(dLUYcXFyDGhNR8Jz%5eOy>0(kbU+_ccIFWV&xP zG*_z(?zXBIKyXdn(#QG1xh*emY}YeY-FxjxFiv2zgtc)(@a=_qE!)bmw;hzpyf?fY z%+=uib)O5Le&pYz;;SdV1geZo_9sKkXLREvvJAhdU%nnmVx#eddPoR)&%{M-hpLfz z@CTZz1gY)sCXuzsTkq1y|dJVpIUlFecN>1|^KJ7Iu zQGaAur5CPuj$Ib|XaG*Tfye+3TQIckApID+xwU)OW6L&8sPzojQGiQzP>|aNa<>Ur zZW!AK_qiCO`ID79*4UKBOFStUgG&{f%NOZ^5ba$#h3*9WZ3i3(UWon*2TK|NK7j>m zn~vY6)dw(^ys!W3hGrmu=kxFj#3v2ZkBPL(A=krUKBr^M5!mm!wX<8+-LPtD^V=06*ZR`^z1BFi@4&P#u>|j9 zcMR}Ze;R8m7W+*SO&1!g?%RB)yk`6Ps`#;xL;A1|Li&kEp|=Eway-NO623CY&>`LVc}1c3-5}ff zuS^rI?>%Uf&!>rR*)_ed)kbV?vXT5wJjgV6C8`7!#}Fefr&qm z-uyUG^Z>Lhe>|x+I)l8^)`MPYY2<{1kt?_wl36p)s?yyBgGZ(Z|51}3X)~LS(2`!~ zol3!)OY*qxlT4QKgD_vS;r28!ehD4sj&ccC76J&!hA6SN2oJDjx556ao1oT>@Q-5S z5U%8Ri*`v^ax2tqvEZfMN~6ez2vt0hCB?OZ!K(J9i4y6~jHugh}3l{mR2$JWy&wSn7bbFUq{|gf9GE@ABt! z!Ff)VRwSr@SRV5SvWeN*8srd0XdN{BTn+bUBRBG2`N8qVNnHU4RZ#QODXVRGVS zV&n285juK|DE5SEtdWEmdH|bLorPLOP|C45;WC%cWttV$}%_X5Z?{F)&EP>HaZh|H-Gio3g=dy36kSGS2!$sb2~dmu1W$B}9} zMUe4**c5a(RrNgkyG&3RV5(d+frKE>u>MnEm;yM-S*B5l6x|Us+L`8Tm?+%p(a9zU9E;o>cn6tW!%B~BKoX`-1&e4*IG0E z`aHKC(qp(D;_|q2;2osW;|cnya}3MEu057B%*??^Tw71RK2COmU$US&3?`(ev1B2V zm;fI{B?n=WC82XhMI*z^pn@aXH?j1b+`g#!cUk@U!t{>Rn2Na=hUZ;(xpxbzQtwSB zzTSHzoE&q(Gjsl0X7a8{&(>paWDkqi^EwK@124^-bcE0yc7?YDWPR?lc{Yd=VU^{1 z1!IYD*5(T$@tM9R&mSzxbKjn?PVWW6DgX|xw#8r6o|WksSRX{d$)D05nJ?sJ+iAl+#sv{B(h@z+BqiiaHvV zL_N-{y)F?3qInVXB3}t5hLT3~cy>})SW=tNJ;0=6#rueB*LG=JRoA|?lYyq!I{@Yv zC$~!Umtmq&iP7PF~;mm=GiAIM=c_@0cR;`H7q4+*S>(W4DfPG83m`Zpn&# zXxs&{t(}3|wNg>R3Y5moCaK@pxN7TF%XujHV&d6mJuG1{D0$?D9f9p`d_`eL;LsG`Z#y+K5gl@#h8OnlB0^!Evp(r>Wtpca;7Fj>^^ly(Zanm=fuTZw-lKxWVgv3!@;yG z3aZ9CgB2O_rlKI2t#pIEAsYEX5Z!FXWSP3aPO!lmrxS7Q^dCeVvd#QTH4s4c$^2y` zcHjntDJ^ssW-ciQOv+jWF#woAaWikdAJ61msX4HzPGca;jm*@wb&1p!6SN9lh&ruqM`F zo-LNZYv}!Fc!q6(kw#%`zZ_>21a723IqiO#j|zuCLe`}^2#1x`u;oCr*s6TiIxVYr z(VUq|u}O`$CmK&p^fe6)q;JC#S`uf^$gB9b{2@LKJC=}#uD!;<)GmKw9V!|OiZD5? zC>#(Flj%Pnr09u!m5_i9yA25xAAN(L{QMGK1I#<$yC~FCZm3<8sL?eKyLh^AD0@q# z`rm=z#{|!o`Y#mEKK!QLCKc_H5$#+NBs{MDn6+9a4ISryR9#f-Hs8*cWO3us4m{Gx zPw=jS*NJHF76@gIPqJUsjfbw{I`bq2{<0dLWNW9m>2-Zx==%c3r|&5VZ~r9Z&OJ;Q zP}VotalByA7QaQZ8bfbp7V#E?dmla6^`5asVTpx-iT%KJphuA8R9b) ztZb_OIaw1u2aHN4fas%y{HgWZt{n03>@r{-y{kX$_Ei7~1>~*;{A$6PR0DKuBqlZn^}3unOkMp<+;peUeRqE+0M=MEAZ5`FMOx)<^j zxo^c3i6Uo97@E+>XncK$1)PB0(SSubEiw?aYcSrE(<#aAvuc3Um*j$g{X7PCuVdEJ z)LvJw6lw#;7Pk^iucT7${1SqlKsG-i$OFV05aJvgd~f|qujV8-nsijDGmE`a%IwNY zD%OjG@f5CDml$QV9hOx1xE|+(bWoUeV-^aLHYZCFab@ieEU{fA(9yq*WDXensrsxw zV8@-+vfP4-_Y;AzFj8lDem?9a<+v^#@BLaW1MUDkWX7Xv24#|IU~q8uKp)T~fbTno zIQt~0H2&6N-0PFVUDh#{*8tiglk@?xN26GsDkj1?>V7mYdJP$YR&f1Ux*1~6Ow?5w zY06y=8-9~<^gn3DpO7FCFsP!WNKn4)ztlO%-0Tf&ws)aZ_7a@lufcS-)EBO#7HSlv z-_HQ>b3yw{FwzbJ`7xQ?fW~5VtxXj@<}Tkv2u2!R^fF9$>0~^dXWz2%lw+&sW@?^{ z^2``ARZR|A8xA(C*e@9p zh_cYetd_vQ0H!QMdHJ=8jO)#No55U`v9QC>J69+)^NxP!^bDuAs1m0DknYx+3o4 zJ?a=^tO&~}m7<#%NGbcgwPu!c#P`2dM|jZjWAY9CO`p)eH9_1GMIEBi;SM)yd38~r zfgk(gKLha61AT5`w~2V^eBmR9OauXr19Xa_*c$Lhf9NkAT9{e~4S(B%7AG{ZDcvi( z@^r>Zk<5cO5rh_DSKF(6R9MsySGlr&@?|DhN%zDZS}kSl_j7nXnt|l=yr=v&=m|dr zlMTl{rRRnwvsFz!bGqN~_<0|_Ci!FiGK%WX?5c!*<3G~-V zX?onUaSqxULt|S|f7E%a{6cO=5jBo3C{7R2SZ0fAkHlF`^uLqv{|&?hO`xlTyoF-X z0LLByq)5!>+ypolRf@cj^a zzhjL`%U`Z3XEY!PV&HuGO_=USzG*EY=Eo?cmh!+a{uU3Br8`Fq;1<#?xUN>@=#5_O z0B$bL1#<~%7umATyKcv1X({DLI)`eq;Rs0LK5K|+L?8)c8mNQ97pMWqk;(d2WKzg5 zL045N%e+idYgX?qGiWcr8DCX{-4Bo_+AN_)0O_RXkYzm#co@z!FhN-*N`^K@yz{N5 z{?2$he2~m3(tcsXwq-xl9woPRr;M(u@0=yiTsK)@k!CNeKC!DkSoyA0r3!+SVvq2=|4`u&?jg2Fv_8knXCG!c2CwPVbButF%B(Idd38s zf7H3>R_;VCVs~2N@xU1in)G;0gGOgg#>n#LGjfLLOj((;Q{!ltB}GvC zSg!f015vo-)3(%|s>Ky%DaRHZpo0y-@z@e8c;;Gq*y{n#AN}si8%JEY|3#+Hhrz78Q*7mG&*bxlNe3SCiXFX{&9fptYC| z*=jm|6qoocEc}~ym6_9A*-A%axAWNeZ@GVl6>O)V0ix^o-!&p!w8lI@EQ{8e4d+WY z0r4F3QpFdmMgvHY@~!1{nc;R1Qnq?!Q#3w^;KN6*4=VL6gf{DmBu@e`A}zQFV{@K_ zk-HZ6_EI^&sv!Fv3DIR&77CsO2CXly^_IBf`8@&h=M}(B{1R*`E87*TI}8et`%)9E z&sxbh7^PqNgq&69dWp|pATH*Q&mKe@fG(J65yI{shl&;u`*=ALvH2)R4}6Mr$1uhS z(KPjwoG*8Cm#q_sY;8r7c3JyWM~_j0pvZ;U9ur=fKri*xt-f2FcYkE=U{!FpxI!d0 zaz1l+YN}|7tZF_Nhm8g!*HJUf76Zqep2PjZZrUkfog@3O3CVaf9NvBAoP-`_0ID}U z6RZeH5P3^9wpzebAW@JMVZwdm2I$122NrVIc!*4I3=_x%b8s6yNv(b)D@l1L4s3QQ#mR(Sr!Esyem3*K-mu40Q*SJ0oCunB|?ia)4Y$s@ysE>a)>euV<9}1W!g})87-)zT>NpcU2RAwUvexjJ* z>Pw|uA7NVR*sz*4u#Yd^NWX^pMk&Uro_;G=mk5}UUmoOeHB)l*?g1l$+(JfM$Lxyd z{{VwYz{O((vOtnsq4tmox=v`=2=w9juHm^X5ZWX~I26U&@ zHd^b^IPoo=pj&R`Rb$54wgyo`G9pu z5jI)Np#qkVLJU|B3G~ytXF#+VKN)!5ACx-X@atpTB|a4uWbKcXiO+VEzX=i@Nq;qj zx8mbL3mYXasz3q(RVLOhQ2{DIzErhSZk`vZj7I1|NYe@BU@vRH>E_UpBUB{bmxq8J z2schnfB2+w3quPJwG+}!E-mRh7!4FVvo72a#{Lrc>X5=sg{i3A#$f!C#wX_eg?yA4 z^YZYNH~SbjpC+CLEyul`KzTFr7w~-$+E}F#WWc6wyLo3+wa|Q1!3ZFSRuhd!K`=HZ zLap3WmHU*~=TeYO)2B~9_YI(Wseig>x)^eo5q2W(w-jo16(Kd$2t1@NE*mc^ip@`v zD)5Wa?IN2;wm?VFG|8dvN(o9s&;24@F!ZFlx*fVyBF6Ub;vIAZF}wS;Af170g z%sxu&4Bv>XlbJ;QBMgX)fgIM)0PH-*2aDxjz^!x{etze)8E*ENH|Mh4a-?BbWjVMl zl{HaUSyj)YLHFIDiYa&$>C(4I&4{@FMZ(BSWeGeTV$8&qraEToi)Y@F`&be(M|qGj zE=;9zm{Va%m~swmu1jHSDAM~Q+Q`}|e%qMcI+cWfPDb)f#s&bWaYLUo+5pM8@15j_ zGA@{B-XJG?+VcARv6CsP>cjOfQ52+}`z^+}LrB#aM~OW5>k>n;hzw5_eixeoi}X=FvX2hhyCS-0d3~nq8G2`FylPo@N42})CW?aBpj$&8&>Q?>(6vpybdCnQ zPgu%PQG~b35eQIIpfPo*P98rpyFw_%I};BKygfyc_I?_Qaq%7d$x|iP=IUNXDAzZ*R3M*QG z5+w#Yp5_yus2D5BIzZ_9Pv;A(CE79*VKd^zt2s@bp!6gCM9V~s2sW!Qs?^N_hGJ_l ziyV2LDGTt3GzhI2=JbfSa6^0ClX>d)&DBk045PNhv}_?l&S)&>67~K0x?|t-_Hbao zQTzpR>s#k(EmzZ5^x@^W!IZyi%$+W^um3djJ~H6@fsDz}qZ^eQ^RjvPf+2|OezPu* zJ)JUR7yo@^Y5#gdpNFdGGAg|KT_75_%o*M--VeY$|9YF%lMgYfjBi76=%4fj`PqS> zBxY#^46x;7I05(1+cLkCoph)EI{)yxaDT0V1tpTSD^W>+iZ<*4D7q5^MHj_T&EDd|Jm z(E~QDX>d=Wej2$YxN7|2`V_!)WfGB3-N$-6>I{$@ZL9Vd$l_;K_l$;8V!QmHf<0*!sayS$n({1CxPq61nG!QrfRgk4 zQtR5letbVd+?KMcg@$aq8TzN+ur_e{qzEYL4jEfbk|ub5F>AXbN?jM%vn7M|DgLu8 zq%0{oW7nd}@RG45#8HX>vy`az*MYZm1tw6dNbAZabEHe^C$MZAV#$>uW<=2!OQ3=~ zDd0J8J%J<^fy2HZE8x1FTRZ?~6aG!imG?&>ExL{IZ7&zIMsOdIalf6AJ{M(xH-%4e zX{m|g9?Z8rl`KTEdIm+{`GZhFhG4<_GvS@qj8Y#9L9rDUsg*qozXwxc-s%o14IXdTi^nh1YGKP)X+5Pl`sN@kU58p}f*b zL~G75BwGz(E(|&!4A~Ap+@*yS4h+zeht~^%8EW_+IY}v}OH136(4mP0V6u2l6_VW2 z;?_#&n{xjOI_)rd)+r2plu5f@SW6dR1?l8X+Ql@ui>MyxGQ&?y2eeV?Ve^gI-|czR z8u@_l%yymuzrucLFWQ<^D_GzRs9JOScuaNdHF`~L4Cx5o1t?u5vt5_-EcMo;IHkUm z2DQp#3VzRbY}%!F@9yD*qagTdV!C_5*e4njy>3wT#V<}Re;f(GhIbb$7ot;HD5@~+ zZ#QHgo0(P&C{1be0<xq+`4D^b%(gVjM14U6@3ykklg zAV^7#m(0K@q)C?)b14PG7f-1I^P9)Q7^){Jj~Tb&js>^u!PNWUu90QnqanvnDpu@! zA2SYNrJC~Q7&TSt)ukZ?jejHJBr6TQRIv9@H%WnVI&)1_0#3EXC$N~uJ$V&}Lzxiz zV*7~k9gp*q${p4Rm`v9xYw5C#h{CNr$;qB1fTYrni(h7Trg15r5uEl$sMNyxb7i)B zKBTWm4(mY;1qo&R;56hCqs*NUMPZ@X;gJt`MTriWQB8g_c-Md5FmP56f>6ak{biD^ zB_;%6Npg~W0;ohl6;=vZ%k3?+AEw)nd{2Qu^uPpjg^ z-JB4VUcgfSVwq82Op!PS$+|9TBc?EEo_d_ka|ab&ONtz@TS_H}&B0n6B-)XcF&s&L z-pS|d|IZ3hUEZr!crK^MUh$dVPC78w2%Z5#JFL=PfYaB;hR__|GyEUVoF`V_BnYGzAa&fkJ)+s=FP6_lAg^#VHNIJzc6SxQvna~g(5;CjQFD- zP0i(!AYF2+ObTP}F)*3Z-DFK61djH=)u^+p3BX2`I&@*ThT5SZN+Th5=2x`29gJwLcjPoRNwNLnOpV1Sc#bsYoTR}N8V2ch!&A_r2B3E3903WT+jk&q`kWpe_+3SUz#z@Ol=E$3w z4cEscPoXo@38IAS{hm4g1R{sxXNXxv{Kb5Gmyx5b_SV7^#Y~Y=9X+WNO;)q?ORz;^ zbd)OVU2^$~H7_tnavfd@)_9NWx<82amTU$fyiAe+vOM*E*9K3QUrFlu*ca~@xL=8< z065sq9$L3_Ou0c9BDT~{Z?WU^V3lixK0BaKnSWgn$4!KGz^Ri?n-eCC5w#12#}G1hjmq2ZDP8NKaTCG)YBFpj6+l{KysQi}MY{Tu zbHKB>lmq+8sz{4vk^y_;zM@XeJgNc=5F+#GxA0HBj7AxFX^~m{i=CamO|1q9^ZgGm zlUw)$?+|-ksH7fu6my!91;|_;wCZ4>eIXSAxkTw;` z=_f9>#)gP0eE+WzqC*HG`%9>j`5v(&sbDcPf$5q#$Fcj~zy}ggAhs`hDJU#>z>Yva zCbClBGJ_LJZ$Ff1ZJBPRWlL{WPn)Fk5&4vTSq2{luQW$RGxP@&c15kxsZ<^J8K%vZ zaHb&@8&1+_CdAq(bA2On_O-i=5YEU<9m=na;pN3*Z9BUu(bi70!4a#4FKt0*a+ zq}VhYn39b_kWze1NNIRZ)$Dx#RWV%&jJGXk~h=DZqo4y_Fwey-rQ)LI+7#ndq zEpW?7M)M}OSpsWEkz79zpXy-09zQnpP-YF_FrO5NXDn;lQ3;J}Jvq_{5MQp`SK7k2 zwnCiAc#o+ouG3vs!L_E2t<;R2=v&q}*h!0f8O8=kCT$r+=MreQ3}%!Y%Ra@kT{y1k z;q?Muh5WupQnQVwQlx>|Ml#k(td|e!yR`g%Zij#XBjvz-DHXsjBN^}i9=8&>yVaJ2=;?0V#SaC^5!gjSHL8FsQ)AoXHJ%2YD>fz_bZ`QK^AJW;zZD#+DW_0*U}jT zS;_2ExYTkX_OBWHz`&2w;+xG-&fh7b;;Be$!051^Jv*SdXh1*{ydbG}WWeYEE_!!c zo6Br%=M4$hksama8^3*F{Q4oHcLdIgwFF8lW>x$RGE4F?Wf)?jcq|kH0f`iI>xz5L z`?=>tn;nNe(O|Og(!h z+>!>9J7GR~7N2Ww1~bXBA6h%lzr=5)HQbrc7MSDPwCN^zKOaV^J0~kEiH4pTi1y}| zYVDD~&RD6Q5*daQ-wN8-y;CcuBLCzw7z4Tbf*%96cWpU$C#gtb)9c=66(d|6~cwN|P< zuZKQu`96J+P1>qcQH8ew1Q+vXj*5o_BbLlsX*If67X;k#X)|w}l>Adqy5o{uvOZjH z^Z2YY=cbz5xrcw{kGIv|7ktw@)9J?}?-y8`0FzUI=Q9}HY)d0-hYS}$*D2UoqxZ(Q z7b}$%O`!o3&Bp@kn3ZG-e@@ZaDK*wNepCW8baly_ILYXI!~!oMr%SoUqd<>r?#jtD zS!ZX5Y(c;V`D{9%vTzw)&Ee@T)w|F>aWlokTo^~0R4oE#!!u2RROwkW;~9M{O!7D* z-ax7K!9{z1i2?mc-jWY?(m&?8BUv&F7@+SgJV5mn5L z7pK2u{Iswi2cmp{>?j$*kI=JrOMn)bmQH*6CJ$C+67~ItjY*9)DckLcDRX-JK~7tK z)#g)^-SqXIjp~!3>e+^o)8d;o?r@+5(j9$?)9lgSndQrC8*k4u_L`5or{*|O@8)n*jQD5C}#z}KMFI6dp3mg=H+Pj(8RN|h(MHzh44IO{@ z@2ZLhor(h%Wa{aHYNY@dE}WpP#M8>1-`A*AOS^>tW{t9?UMZ`(+=wNk7Wms{naIey z)4$h%;yp%WWh0&g#gWEPhc-ztQN8bxLR|eQ)W4KM6lJD+I$IiBi`KfEWBG0N(lXsv z(S@5OG{^0L8FE!r(lv)HjH(cB{^jfon|-*-nK(cMU@PWE*0R0k?0)iO)~GSC@y>Lqf1vq1XD+)w<|0Z)AyB)>#y8cR)YF+ zW}ZZ_cMtM(-?jG^T{>to?*Xn?9{1ArD)rd}Gq(oX zT-6A%KY9_B@x(+~Yb)zv@nZF!%{78iJnXBGBDgX+U2WKBo`Mf4c})su9JHtAXm#-w z7zB(_G#*=?~3)IqZU}BcPsDZFXfH59B;IGdoN6oHmh)~|7X(qIveyhN)^ARrxFy%gzCv{oqdRFOUTrwBI<$OOa$1n@8O zUkF$PP6tXSe7b>TUi0@wJI>1eY{tkUS$2#uVmP596&{jtaZzmx`^y=T;usUfNw%#F z#R>WULJ4vjc-ljj^WVr+G zIgtHs9^SFayk9rOVEak(;o1}>^%cp^nGtpE0(<92j?*;53}^-q)skO376w$+5QvHN zJ^f++d9mWtdHZG@zn~Npf$7F3qeSrd#icSxB9~=7J5Xw&h(2~`rt|zjyKr&S>EQOk z>+mOxP*4?oSm`9vP+>MG> zx0E2$51(>~!9vQ?KZSICIZA|T$7yd1iy%AdWRI&ZGx$hgEGtpn7rtJ2LOU&OrZ{Zuqo^310)b zZ2Gn0C$i{)ZRbGT-`U~r$=<;slP6cU5(u%u(Z`kmyh{;|D6h&Tbx@Q z3A}&e$H5Qp*TLJh@Ndpn9UjO*!pZm;Q4P_eoKaNG2@YiQ6KB-tAX$$8-~IoqB6Rs@ zwOQ&%Q4J+v?LiD42e+vY!}+8LQ-Jc}d|XsKd+;M9xeFiF@7JK#^F|#NcJJ}f_SQAwt2@>Yid6?DjF9%$JDs0ZG9*v9|9ttIdnAsJ85iYeAkmZhaQY`QkpH@n<7mZcBi|CCmxW!)Wel#wEWWBZLup-RJU%$?bFr)|jfr(sBcQPfEa*+=n8iTNI| zF=rArV9`?7mi88aM8f?4L>%|O9D(yun`e>Cv5-kKCwX?%K(!pEhVry&)6L#h1)GI-NcByUpl$Gv1Z~BzTue(whcbvPpN{G%P zQUq)CkM_!H2^$DqM~%eskU_I@X#cNGS2Rf>^vo@mVulMhX|*eADM#zk-fQg3YJWPY zX2R6~1K5E7CJ0?t18O^to35(4e)GTCGR!HRCz-*|gzM4!BO3##>$`^9`kY?i?$O$N zsL`76xdMj=j|s-o&GZugPvW?1q5c5?)y&J^9v;6`mYFFVb(hmGh|zWFs0eg3We@ZWNX!F` zH3P;fF_JD+C~xx6zeTGTPQ_08@M67}H-of+7l#NNWO2~>#=*>`@U4MZw#FH-1utpA z^GMDz{(VVCYUFr%MHV$`K{p6JN8-uW?kwtVGO*VC{&d@XR;+p>yS*9p>D7+)=Bb;J z{%Vtf>+;=%q0o;On|8?jPibpavqo>T{dkCGFR(G+C_cy`21S6tn+28$ax61L_DVRsb}cb z6~@q}uS$_pR&TG*uS$+dk#bgV$Hua;d^sZ+f0c!FRYY24lg#6BHnas-ufBgMWOXS+ zxRS`zmu74(gS(tEd(-ty-#{s9v%Vy+UZU;c`rX-;aoRLSaMjP-9IOkVeL0uD!PM(g zdMT>l3a3e~^KOb>c@`Thni#z1o*eop?QU{$I>Tbu*^Y{Czkl*yk&*s=M}+ub$jpDP zbFq}imo?RNt!cuce{FgNakgN>kmUb^92as&xd93B~^z*HBu?4c4BL5p@WLmB`AR3!0&m4?$=eh&wq zeUW>M8@Fg<1QN^cD-v$DqaqzD)#}5^xrWg0u})KzdTL>7dS(PZFlX&16`qD z<;mG@9t+6QXU)LE*M@HWNN)sZ6dp^LhJ{X+Ft13_GglOus)z(x+!Kfw6WE9YLG78GfmR0wOI@+qM@zSoTt&nd7i|F3aSJ%kpME@rZvK-uGCl8?aUcsgBENt%JcUI3 zxkuC*Hv9|{iJtKdZh-&I*l=Td>fdb#>Z+l;D1|(a?@I^9Tv?k6PTqg^6$LY4tEgFw zi{di#le0_1(p%Fs&Wgtl0k8({!xlcSvTKZB%iSI-8- zdL#tfas=BLL$c;>>ueQh-iM};-J*?NJyjq;aD~h-h0Sfk0?W;*XR&q)rh8dIsSl{Y z5?7cMZPmE?v47uPZr3F#T4OTL1~DED;IwoZTdL4We=^OF=a=+`1AfUBIuHk=Qe{c( ziNH`OamM$D|56J5cmKVsBzZ%Q?;PkZ$9whBjzNeojk!A~S(H8L0@}z##QMJP65TKk z@qa@C?-2CgFvfW+bv|^zzY9Q~3rmQnAc&H*QabHD`S&a+;6H}_hpPnn2K45)D9D#1 z#CIO#pX1HS)SHv(?J#D1lnAbbk3x_H`Cljer}uv+cBgqSmfiBc)z(Sr2YDm)Jvm$m zWiF&C0pI_x0LlWr{k#Rv2?^v$30&?uOna`KX42)YkLdM!mUwT916md3ddRbKir{Gw_0J9u~DWHFtU53kKo^bk5@k(Q& zoq}Fw4P31;TTKg2p($rmDIy^*H(~R-;|`dZ1*2)?4j3GqqRS)s7gl(R6iK!hVGL7z zUF9UDDWyOe_7x0u2{}7_ZwD^{?9+5BE{@4gG z6&)htpb3$(y_95H9UHK(NQ9&pO&$ziU}VA%zbch8B#>$WMdSwghk|8f7nA$u z7>j^Ezh%W$V56cXm@8)oh+KlAR8-EO(ElkO&Y{Hi8I_{fK&U~e_j#0%5qX?eDk5OF zAQpDFt}dzR0uUEW(qbOYBnUYCoB&%@A0ZMPgd4o!t>w6Yv?_5U0-aPt%jo09Oz+>A5!k?2LCe#=dIEZ(Tt=- z-VcvMo(b=jY33RJ;vwE#6Vr;GR&=_jK^4od8rKPR+A^8;5x0Hj0z8aK^1FlbjNm)8O#7~Kfr6e!hy2a&-Jph9zL{xp?UozQCc zz-E@!&`w8^OOIEuqiI_#V>_50lg6ZywpvO)s|Xzi;$mcGYW}+1@YI#5n$kuf=DbQ` z`q5HtGFxQ7dOu>0xu-5R#8Elwce2G(l;&3IV*Mb|eVM9b2RJ^4n_XY~x2K`)gX;cMS6<`G!eC4X=wG z#au13XXzui@%j@~HRJ9EvXb>9hU#;_(XO*li(-F-ft7$J_u0f|Ez()mVW8wIt5>oK zMgBum&&MtC2_U=&tL)+fitu%mqB!JWs4ox+)NBAbGB z7!Bk2E?(OFthv>$dWiKr!M%Nze>zidTJ0p$HGm7TlY2L|wOMtZ%6Z3kZ@RE>9;v?? zYvs?-0I>Y=$F-p}NV5OCqpCk~bkZ)6v!#?`j{LJ;g~Oi6 zjnwc$`qO#<0p8h5NdBoBb4?b)E({b&>5s52RkY8A-0YpLrr#B;EfJz&peah_j+RAl zp%_pHzm#-6yRWqBsu#)7nNUGH@S6x}Rm9O<7obRYia|CyZ!m#bvtVEc_9pJoN<-O& z%t9*t@Xz0N;2;fo`Z2ewiMX!qX^cR=x2^2KgfRg)wFGhnl!n&GQZR&uP;30;FL>AY zG{w`S|EG+zj*DvR;{MFQ5n*VM4wWuJ=}<~q5L8e?B&EA0hLA>Dj?!t+-606lE!`pA z0;1G==Fa=vd*A!cKYPBvz4qE`?>V0{>%`u{B2ynlmdtqVv@3fVUq1i6^P7%dqO*CT z)=T)ucv!H~gD^x2oVT+rug#TXnylN12Sq)`-EMq6b*)w;G;eP=f%4f;aOn+Sy|VqZ z&4Lasy@L;zu)yYKeA0exa_93eN44>6uKV<oUgOx!TCLO8mjftPe&6%P*T?O8nwP;knpjr({iXRM9P91RM%mVb z^yS@7KMm2}uiF-J&Aj zlM+nzaIp)z)yC~|Dt}OXA{fytd?tvCi__^%TpE<}{jasLg|2uGT}T-0odWcF14WgM zG8}mYWxGU4)`73iwYSPZ=&#B!|0cH0&9~T2+Fs~S8bGxCFj-dr5JklyEXXDe zqd-+FoW}Y8*u5oV?a!|p(ly9*C1i%C%n>;|vzx80EZr#Z>}9@b`EOXg6^&9JCI6(H z#jJk&tL>@g=swd;QnlN9L=6pQ6HXlV#Y;4HN_7!gy zn19UnqGu@|e=KnE<0C43HoC8*FZ9~ofFec|FV3a1-8ae39G)F4ikNE6#zJzE2Z3(F z9WujTKH=cJ8?zs+#Ake1qk)Gca?+G)smLMmJ{A|Y+3}_+EVQ(3kP#>ivIa)*VUXR;e7ZRW){M1j4 zT6~PyibI61DP2#Yh_1A~0j-(fjIUP<-U=GyUoqgtYJA^+)g&12Woh(vy~0P_`pFuS z5n?ht8g9CuP76tya!ssEBN+qHFcz4EE}u?HpQYxvYs{Xu=sKyVP;cllZl1$StyIb;TYWhRr275hA_`|OmyHreep9o#7 za&?U7G;tocUnx-SrXgr(?npM+=NK!{|H6JLa;oV9zbjdB(8|lYqTPyuR*Ctp9X?m^dM0!*6WeOj?NP0KoJ#YxqPBwd<>v{8&6HQUvqb6(KT#YukeXN& z8%6B;pSXy2NM8N&2>m~RVpcIGg8m3@I?2uLE|jp;;7)N`^Y}_u>m|t$%MQS>7Ma5w z<8v~yVWdIIipGvj&Cg*~q6buFo5W`L`)5Xd4x=M7X?=s=kO*?2qNm1@1@2UB+3W+f z#l#%7gkC~Mq^Qmfg&)fIYHfALDA zYm;$NEdHG)(RI_#+4&s$=8RWf8U{Ue&lCddWBubc!0q5fr<}*{acd^#6uIdV9)G@E zg`Y6|kY~5oN2V*o&&;XDei|0JMYNpv(tYuC#MxuqfFTo>j%dzY|0q3|ZpU6$^75N2 zJq&9#=sUpuwn(BsHHf|ZvubNw3MsIL%MgLrx zmG+5f*zUvTjM;HB2NvS;Tf+ERB|gm!G-1Q0LB9Am+D{nKnPAleEx5!k_VY&FcVL7Z zLL9aJU8KV>m|)zyU8dy6vv6xm(v+z4KN_WRVpflt<*k*N8Ph%~@DNrQ9@^E9o7TI$ z+4IP;T;H`y5#Li^^d_tr9|=O84S2SArm821Jw0D#`8G>zY*>^G%*u;#9d~zcd z6!21tK@vB{YEgTLewl}Jx+mLnvuQ5wr1MOZmgJ%vpYrm`ih*|RiAY*3(4V~f?Cf&H{f z{*Oo$^1->qokEqD&RLD3HFobta7=xM4#8W+M&}p7JB@45xZQZLfidadP}#LINl^Z3yK7C2HV1SPQR@MjLEM|b~*`xn$gtw?0D3mV zGk+IS={2JKwtKi< zxg1WECnr;@hmv0)wHfN;Bhwx}&*fy$UPtw<40}JNl+4QGT5h;G;Vwqd!A9B5ffA9J zD_cE@okICX>3WT_{0wll=-nlFS~&c>@n+SU!XZI2TQdKZV4+pLP5#402?e)#5@Je~ zp4_NEi@Pe{g_0}uyh1GzHIllPUu9WHmbsW!5OnWdd;30FtfeHH-~a4{&&0Sz>v0ev zPiXP`bo0**@iFc1F_tHkR+r+>PG6u(Vxxu!nW;}glOi%UaI*|{B3GA6XdlYh@ul_q zn^5F){ieVpL8RX+h`!ujeQ|L#)!)RB5iu6E6WNsK>D;a5vb2Bwm~DNW-g9A^;9~%G zZmo#pss?dT-0cp!o+p}PQlf8hGgC&V>QDO|%r(dMbZ^q=uNSdCH#EZ&X-Z>8Ip9%P zr}%OV2_Zw z9_@@wC!}2v!eEz|STJ>!I1gt0s)9=dHk{~cYlNgJw9SqKEeys2gMogl0C~a&Kw7ba zRfCN>iKP5oCirCf_(@V;6}_A9s_Mt4HYfXF_tb8ykNQY+?*SjI^ra5rr>f=-Gize$ z*Zi+N#;R?2H;eV>v2W^m8ez-vCNc4kPNpDc+0lNM8mXqN_S!t`VWhx_T@ANjSUBQ& z>07A>-1g5KM|fEn(}T)t4Hx0LS7D9%=6ur7gQbor#ap;N9TxAKq(`HjUVX+U;Hao9 zw%tCVnYXQ7;<0xjb5ZzWW4>>#N#9a<@1hA_XPCUPS2?dLGdE0HH4jKwt(@~5OCn~Q z76e>n-Duu;n@@g}9a)K#aiM8Hw%;P~%o?X zf-`NZ-pN%O+briI;N`F0n6w}Zx)XlhLT9Md2dht= z2-!>RJ$(m%gu3dd@I>be%xPW+2difZ7u;0X{EC3VK7cWD2nJAf6YDA}YLbt*;pqmd zc>1gUc&rrG6t^_pEAyOLPrdi8H*TqYt6=jw9CO>k78)=GLRyb|>OB~mZimYjP@mI) zJ9lO$SzSC>tQHuo-s;+`FB%iN)aD6Zo@D%b{YxT)Tl3cGm{mj#)3-1BI#{{Q(zhHG z(mOP^u{q68VsBDL*D6zeMzxXXnAAOC;9DwHr|Ow44AXgsL~>z2DzxZnhZ}prOZB#D zIT+rUF`@3v=W01MN3o zIG2t#x;Y0ALzYIyc4Fw5&2olx9znTBFa;*}!22urSkNFt85F2b+G5RSVCz=tRPzxb zA6!7mhw=warY7wYyLTEmpHWcq!C7pi!FbQ!&8An2B;0P|=AXhpwFEZbWSX_e@RFzR zsA;onD%>Ql?*3W#Bni*%4ohK`!OPu}_jApx+3p+kbL<_oio2z6vbgfw-0kg`x30-d z-pH98jcGNcMI9EGWU7}orzD!44yy+Rt6Ie=+XH!=cT%J;CLz;Db{qt>qpeu@d2JLGai)(A7h%$u;bKXU(0*Gm~&2O z6)2Pm91<;%Om0(|{Ma{Sz~5M;I9@KvObxbZ(RXU)eGsv~{@a*!|CUtULu8wtf)BQE7Pi@|9TTw0isu~$lP%`45 z0VN|Fm}KP0^dK&Jj(0p#lRWZt&2hmHN=9;isBMIwIjaL(MH`ukZxSy2@!sxTf2yfh zS6^{&rh>E-k@Ezb0o`a`#7JtKcW+z{<8=pOPUL!K4Xg8+R zy8AdfQ&xC(rp|45|7stjTLG)?y0rG!wdGqM?;nbOFk3VpoZYask+n=1rk2OF^e zpsG*KEOv4WV(oZSulxCh@z>%uYieIPlCPxO$&b5YWwoixz;~$1DuI$+)H0Jx1+}~1 zW(50O#`x6f=jr%Vxr`~3y&~lmBw}X}>T3S7a<65j9y?oU##kv)_9SqJ3gFR7Dm=HT z9=a_{X+C{Fmb~$Vis@moewbMeA@(eF3QDc})Sq+~IAzuszZ$V3ARb(puhJ1*Wcprt zLXgLtWtk%%)Jc{*kFlcsXxosLOl{O_YZXV zoizH#YfGeCly`<6$zRw#i!8KtZ&aKUN@459nipZ>Sye_nW6Zup#ok(F3%xwi?>a~r za5ye=@*KVhlO+73=s5^_E^|WbxX%k>we<)h)ovy<$Sr2y0bgOOKnqSG2|qk zz3B_UWkQz~!mF1X563kNsY8jn>iNn(=SYyPtaVX0MXQyDvt6~dX=36*i&dm;o z+rrkCs(zy?&QipaM*%&ji|qI*9ek^{Y2%3^NMk3|j)leW05`>>`A`zm$jM-wls>}{ zVFnlfPW_TA_%y9qIjCFaM)!ZD)g>3;wSGeb&Jgc6~?^K;o z)j7`ms^c5N2GHhHUnAY|otc533ZyXw-uCPK&CzO}=Xu2VK9?WhU%$3vl$jeUM0=Fk zM?E+-VQu|@;)!7+OHIS2| z{YR*@J-$d?V0JJgH=rUzdMID+RO*Fln1ppuSYt%8xS5ID&mS2!sf?Qr>H$qXk}Ex~XJf0>oz8bee0H(7`D z%9%n^P|h&_V-o*Lt)BgY%IW-0{%0~-CN@-&As~pfikCq)UGB4)c!dsN&kFi(kIHv& zdEt1@W2?p=>sc$}%6jWt(%{c)^%?IRztH>9-TsiATgfLi>Of^Oo zH0V+{L|aVUC)f*mtUFG_loWeWhdqCpb6e)Yik{wG++W!Pwi(vG*B4U1%Dg|0tVAx` ztrd7Ni`LDb-M8h~xf7OBA<*F(9pDtFykB&8+%hyYn@5z_>TJWcPvtWyan4WY_xHR4 zO9ekMMyxn}E}E9R&CfPMc6|J{vY~S^;*RcvwTgP5wgTaCY8Qq)&fkXLT*5k2dd4C) zIz1=OtU_w-j>Qi@zo>Ha9LYM`5oJ6lKreX*b~5ZUoU2kR0A@HUB39$!*X!hgbE;=V zuYV;B^~xy)hdw4F1Gx+3muUSq<*hT|&O39+87;HJX5sndQ-@u@je|0q0UVK{g7-#= zlvI8(S{7xAi|v1e#M?V?4CBr7{Wxa*+rhKL>{$A^(dL#3LcM``4QA?o6XCW^Vlnv; z(8@fpKkMuL{gGOf*6V5)t|8pttXfiCneU=0{MBz>jrG+QCf;ZGyzIL*`+OKHo_RnD z$?7iSq}E47-t};nfoSev4K@8qHeKy5?Sz-9IPgv+fQ0{${#OWX*4#$D~313vv z&s^!}HopS|Gd0%kDRi$qZ~qOwuO7ca=e2g&TF>p-U0ihRw`~g#Tuis7?3VVR=`GyU z?RmVat?{xvU!_Z)GC!O5b2H=7+!xomW>iRAV&sH-i+mi@BK*r~B+5tV0{CC94@dC8 z$YEEiq^p4uqJM3{4PNg6L}~xoWfKO2R&@O9lLb0=0PM8?Y?1a~117Ml1CW6yfqyyx zSw!vEI1&vq@KGng3r__7I{^;bzxO)ehQTQQvLy;~;MKfC}900*GnaB ze;&U4Hy(=zpm;CT*z6gIf=Vpi7jW?5bEu1{UZ{%_Q*dwqxCwIf0fLCWmte^PKnC*q z!AZfuK7b#AF#lU20cZOF0mM}caDNzJ0vXKUcpzsTKn&uU!-+xqK>!cIVu`7X?uQJe ztuU~T27PM`$P7U6%I5!?SwSxD)J~|j`OV{^?U$|t;`N%_h1le)NhZ0 z95ie?VBi7`I8K-$&^f@7pzZ|Z4%hL25ivVs>WYS-;Yqn*;Oa00daf8SM1zML#$S}n z{|4ph3c0Wz0Px@mV8(YStUOo9JHvN$SRR;`*5A=#y~02%8a6yJaOnZLNos&1i5>xH z5Paa*5Wx}fcO4y=G6uEhd;PaU3fe6K0H`nkTtf$nk7*(t_%DNp0g$`D zer4lvXe9T7Fawlr0BFEEw4xo1QEUSt!^?VT$l5{B%yo}Lhl6tnrcPr5iZUt`1E0~5 z8-|(hFClPT5IG5j)f)b9e6%w!#tqi^awnKhcoz0RvLg5VYl@K?QM9h!H2zqGB0{oB^I8hRQLb-wY%Y)L@_w4SEe2 zpq&Ny5TBbdV1b6;Z5XJUh0H9wF%eyvgKDe?FrXFyzXIybL4%VV!6@p(Z~)9hE7DUK zOE10!<(fW$E#G|+(_KcMbO?qJ|LALPIH2ju^S z5Js^TfE3ylNJ$dIC_mZ&3eaN(>T&ZPMk!f=TrkUmODljhmb)ARw3bEipbsBn&}0>| z^OOgDR{gdY_P6@%$oo) z-QV|1{=YFuZG-BYfFk1V9=bUVSiT9(vc)m@V-t`XA2gf%OVGG z4_z(>g8bW%-AXv_1}x3qaHka2G3}2mlQV z0CG@n8k+y59ccayiowerfQjy}Ya}cf%oN(hl=z>P(6_--@ZK(PlkTq+47ygXfqo_Q Wwemlot}4)L7ht;LQVZn@u>S)MJ1eXJ diff --git a/motorApp/MotorSrc/motorRecord.cc b/motorApp/MotorSrc/motorRecord.cc index dd286152..15ff40e4 100644 --- a/motorApp/MotorSrc/motorRecord.cc +++ b/motorApp/MotorSrc/motorRecord.cc @@ -185,6 +185,8 @@ HeadURL: $URL$ * command errors. * .71 02-25-15 rls - Fix for excessive motor record forward link processing. * + * .72 03-13-15 rls - Changed RDBL to set RRBV rather than DRBV. + * */ #define VERSION 6.10 @@ -706,8 +708,7 @@ LOGIC: ... ELSE IF done stopping after jog, OR, done with move. IF |backlash distance| > |motor resolution|. - IF Retry enabled, AND, [(encoder present, AND, use encoder true), - OR, use readback link true] + IF Retry enabled, AND, [use encoder true, OR, use readback link true] Set relative positioning indicator true. ELSE Set relative positioning indicator false. @@ -723,8 +724,7 @@ LOGIC: ... ELSE IF done with 1st phase take out backlash after jog. Calculate backlash velocity, base velocity, backlash accel. and backlash position. - IF Retry enabled, AND, [(encoder present, AND, use encoder true), - OR, use readback link true] + IF Retry enabled, AND, [use encoder true, OR, use readback link true] Set relative positioning indicator true. ELSE Set relative positioning indicator false. @@ -847,7 +847,7 @@ static long postProcess(motorRecord * pmr) /* Use if encoder or ReadbackLink is in use. */ msta.All = pmr->msta; - bool use_rel = (pmr->rtry != 0 && pmr->rmod != motorRMOD_I && ((msta.Bits.EA_PRESENT && pmr->ueip) || pmr->urip)); + bool use_rel = (pmr->rtry != 0 && pmr->rmod != motorRMOD_I && (pmr->ueip || pmr->urip)); double relpos = pmr->diff / pmr->mres; double relbpos = ((pmr->dval - pmr->bdst) - pmr->drbv) / pmr->mres; @@ -917,7 +917,7 @@ static long postProcess(motorRecord * pmr) /* Use if encoder or ReadbackLink is in use. */ msta.All = pmr->msta; - bool use_rel = (pmr->rtry != 0 && pmr->rmod != motorRMOD_I && ((msta.Bits.EA_PRESENT && pmr->ueip) || pmr->urip)); + bool use_rel = (pmr->rtry != 0 && pmr->rmod != motorRMOD_I && (pmr->ueip || pmr->urip)); double relpos = pmr->diff / pmr->mres; double relbpos = ((pmr->dval - pmr->bdst) - pmr->drbv) / pmr->mres; @@ -1120,7 +1120,9 @@ LOGIC: Call postProcess(). ENDIF ENDIF - IF the Done Moving field (DMOV) is TRUE. + IF a limit switch is activated, OR, a load-position command is in progress (MIP = MIP_LOAD_P) + Set MIP to DONE and MARK it. + ELSE Initialize delay ticks. IF process delay acknowledged is true, OR, ticks <= 0. Clear process delay request and ack. indicators in MIP field. @@ -1306,8 +1308,12 @@ static long process(dbCommon *arg) status = postProcess(pmr); } - /* Are we "close enough" to desired position? */ - if (pmr->dmov == TRUE && !(pmr->rhls || pmr->rlls)) + if ((pmr->rhls || pmr->rlls) || (pmr->mip == MIP_LOAD_P)) /* Should we test for a retry? */ + { + pmr->mip = MIP_DONE; + MARK(M_MIP); + } + else { mmap_bits.All = pmr->mmap; /* Initialize for MARKED. */ @@ -1594,7 +1600,7 @@ LOGIC: ELSE Calculate.... - IF Retry enabled, AND, Retry mode is Not "In-Position", AND, [(encoder present, AND, use encoder true), OR, use readback link true] + IF Retry enabled, AND, Retry mode is Not "In-Position", AND, [use encoder true, OR, use readback link true] Set relative positioning indicator true. ELSE Set relative positioning indicator false. @@ -2161,7 +2167,7 @@ static RTN_STATUS do_work(motorRecord * pmr, CALLBACK_VALUE proc_ind) msta.All = pmr->msta; /*** Use if encoder or ReadbackLink is in use. ***/ - if (pmr->rtry != 0 && pmr->rmod != motorRMOD_I && ((msta.Bits.EA_PRESENT && pmr->ueip) || pmr->urip)) + if (pmr->rtry != 0 && pmr->rmod != motorRMOD_I && (pmr->ueip || pmr->urip)) use_rel = true; else use_rel = false; @@ -2828,10 +2834,32 @@ velcheckB: /* new ueip flag */ case motorRecordUEIP: - MARK(M_UEIP); - /* Ideally, we should be recalculating speeds, but at the moment */ - /* we don't know whether hardware even has an encoder. */ - break; + if (pmr->ueip == motorUEIP_Yes) + { + if (msta.Bits.EA_PRESENT) + { + if (pmr->urip == motorUEIP_Yes) + { + pmr->urip = motorUEIP_No; /* Set URIP = No, if UEIP = Yes. */ + db_post_events(pmr, &pmr->urip, DBE_VAL_LOG); + } + } + else + { + pmr->ueip = motorUEIP_No; /* Override UEIP = Yes if EA_PRESENT is false. */ + MARK(M_UEIP); + } + } + break; + + /* new urip flag */ + case motorRecordURIP: + if ((pmr->urip == motorUEIP_Yes) && (pmr->ueip == motorUEIP_Yes)) + { + pmr->ueip = motorUEIP_No; /* Set UEIP = No, if URIP = Yes. */ + MARK(M_UEIP); + } + break; /* Set to SET mode */ case motorRecordSSET: @@ -3518,8 +3546,7 @@ static void monitor(motorRecord * pmr) /****************************************************************************** process_motor_info() *******************************************************************************/ -static void - process_motor_info(motorRecord * pmr, bool initcall) +static void process_motor_info(motorRecord * pmr, bool initcall) { double old_drbv = pmr->drbv; double old_rbv = pmr->rbv; @@ -3537,17 +3564,30 @@ static void /* Calculate raw and dial readback values. */ msta.All = pmr->msta; - if (msta.Bits.EA_PRESENT && pmr->ueip) + if (pmr->ueip == motorUEIP_Yes) { /* An encoder is present and the user wants us to use it. */ pmr->rrbv = pmr->rep; pmr->drbv = pmr->rrbv * pmr->eres; } - else + else if (pmr->urip == motorUEIP_Yes && initcall == false) + { + double rdblvalue; + long rtnstat; + + rtnstat = dbGetLink(&(pmr->rdbl), DBR_DOUBLE, &rdblvalue, 0, 0 ); + if (!RTN_SUCCESS(rtnstat)) + Debug(3, "process_motor_info: error reading RDBL link.\n"); + else + { + pmr->rrbv = NINT((rdblvalue * pmr->rres) / pmr->mres); + pmr->drbv = pmr->rrbv * pmr->mres; + } + } + else /* UEIP = URIP = No */ { pmr->rrbv = pmr->rmp; - if (pmr->urip == motorUEIP_No || initcall == true) - pmr->drbv = pmr->rrbv * pmr->mres; + pmr->drbv = pmr->rrbv * pmr->mres; } if (pmr->rrbv != old_rrbv) @@ -3599,7 +3639,7 @@ static void MARK(M_MOVN); /* Get state of motor's or encoder's home switch. */ - if (msta.Bits.EA_PRESENT && pmr->ueip) + if (pmr->ueip) pmr->athm = (msta.Bits.EA_HOME) ? 1 : 0; else pmr->athm = (msta.Bits.RA_HOME) ? 1 : 0; @@ -3607,32 +3647,6 @@ static void if (pmr->athm != old_athm) MARK(M_ATHM); - - /* - * If we've got an external readback device, get Dial readback from it, and - * propagate to User readback. We do this after motor and encoder readbacks - * have been read and propagated to .rbv in case .rdbl is a link involving - * that field. - */ - if (pmr->urip && initcall == false) - { - long rtnstat; - - old_drbv = pmr->drbv; - rtnstat = dbGetLink(&(pmr->rdbl), DBR_DOUBLE, &(pmr->drbv), 0, 0 ); - if (!RTN_SUCCESS(rtnstat)) - pmr->drbv = old_drbv; - else - { - pmr->drbv *= pmr->rres; - pmr->rbv = pmr->drbv * dir + pmr->off; - if (pmr->drbv != old_drbv) - { - MARK(M_DRBV); - MARK(M_RBV); - } - } - } pmr->diff = pmr->dval - pmr->drbv; MARK(M_DIFF); pmr->rdif = NINT(pmr->diff / pmr->mres); @@ -4036,7 +4050,7 @@ static void syncTargetPosition(motorRecord *pmr) msta.All = pmr->msta; - if (msta.Bits.EA_PRESENT && pmr->ueip) + if (pmr->ueip) { /* An encoder is present and the user wants us to use it. */ pmr->rrbv = pmr->rep; diff --git a/motorApp/MotorSrc/motorRecord.dbd b/motorApp/MotorSrc/motorRecord.dbd index e421eb34..848b5e9a 100644 --- a/motorApp/MotorSrc/motorRecord.dbd +++ b/motorApp/MotorSrc/motorRecord.dbd @@ -290,6 +290,7 @@ recordtype(motor) { field(URIP,DBF_MENU) { prompt("Use RDBL Link If Presen") promptgroup(GUI_COMMON) + special(SPC_MOD) pp(TRUE) interest(1) menu(motorUEIP)