⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 amp_8cpp-source.html

📁 美国COPLEY驱动器,程序开发工具之一.
💻 HTML
📖 第 1 页 / 共 5 页
字号:
<a name="l00220"></a>00220    <span class="comment">// type of amplifier.</span><a name="l00221"></a>00221    err = <a class="code" href="classNode.html#o0">sdo</a>.<a class="code" href="classSDO.html#a11">Upld16</a>( OBJID_AMP_INFO, 13, hwType );<a name="l00222"></a>00222    <span class="keywordflow">if</span>( err ) <span class="keywordflow">goto</span> retErr;<a name="l00223"></a>00223 <a name="l00224"></a>00224    <span class="keywordflow">if</span>( (hwType &amp; 0xFFC0) == 0x0240 )<a name="l00225"></a>00225       canCtrlMethod = <a class="code" href="CML__AmpDef_8h.html#a397a199">AMPMODE_CAN_USTEP</a>;<a name="l00226"></a>00226    <span class="keywordflow">else</span><a name="l00227"></a>00227       canCtrlMethod = <a class="code" href="CML__AmpDef_8h.html#a397a198">AMPMODE_CAN_SERVO</a>;<a name="l00228"></a>00228 <a name="l00229"></a>00229    <span class="comment">// Initialize my status PDO</span><a name="l00230"></a>00230    <span class="keywordflow">if</span>( !err ) err = statPdo.<a class="code" href="classTPDO__Status.html#a1">Init</a>( *<span class="keyword">this</span>, 0 );<a name="l00231"></a>00231 <a name="l00232"></a>00232    <span class="comment">// Init my 'PVT buffer status' PDO</span><a name="l00233"></a>00233    <span class="keywordflow">if</span>( !err ) err = buffStatPdo.<a class="code" href="classTPDO__PvtBuffStat.html#a1">Init</a>( *<span class="keyword">this</span>, 1 );<a name="l00234"></a>00234 <a name="l00235"></a>00235    <span class="comment">// Initialize my PVT segment PDO</span><a name="l00236"></a>00236    <span class="keywordflow">if</span>( !err ) err = pvtPdo.<a class="code" href="classRPDO__Pvt.html#a1">Init</a>( *<span class="keyword">this</span>, 0 );<a name="l00237"></a>00237    <span class="keywordflow">if</span>( err ) <span class="keywordflow">goto</span> retErr;<a name="l00238"></a>00238 <a name="l00239"></a>00239    <span class="comment">// If the amplifier should be disabled on startup, </span><a name="l00240"></a>00240    <span class="comment">// clear the control word.  This ensures that the</span><a name="l00241"></a>00241    <span class="comment">// amp won't be enabled when I start it.</span><a name="l00242"></a>00242    enabled = settings.<a class="code" href="classAmpSettings.html#o9">enableOnInit</a>;<a name="l00243"></a>00243    <span class="keywordflow">if</span>( !enabled )<a name="l00244"></a>00244       err = <a class="code" href="classAmp.html#z1_2">Disable</a>( <span class="keyword">false</span> );<a name="l00245"></a>00245 <a name="l00246"></a>00246    <span class="comment">// Set the initial requested mode</span><a name="l00247"></a>00247    <span class="keywordflow">if</span>( !err ) err = <a class="code" href="classAmp.html#z1_0">SetAmpMode</a>( settings.<a class="code" href="classAmpSettings.html#o10">initialMode</a> );<a name="l00248"></a>00248 <a name="l00249"></a>00249    <span class="comment">// Amplifiers using the '8367 processor may require a short</span><a name="l00250"></a>00250    <span class="comment">// delay when switching operating modes.</span><a name="l00251"></a>00251    <span class="keywordflow">if</span>( (hwType &amp; 0xFF00) &gt;= 0x0300 )<a name="l00252"></a>00252       <a class="code" href="classNode.html#p0">stateChangeDelay</a> = 10;<a name="l00253"></a>00253 <a name="l00254"></a>00254    <span class="comment">// Start the node</span><a name="l00255"></a>00255    <a class="code" href="CML_8h.html#a0">cml</a>.<a class="code" href="classCopleyMotionLibrary.html#a8">Debug</a>( <span class="stringliteral">"Amp %d, starting node\n"</span>, nodeID );<a name="l00256"></a>00256    <span class="keywordflow">if</span>( !err ) err = <a class="code" href="classNode.html#a15">StartNode</a>();<a name="l00257"></a>00257    <span class="keywordflow">if</span>( err ) <span class="keywordflow">goto</span> retErr;<a name="l00258"></a>00258 <a name="l00259"></a>00259    <span class="comment">// Request a status PDO update and wait for it to be</span><a name="l00260"></a>00260    <span class="comment">// received before continuing.</span><a name="l00261"></a>00261    <span class="comment">// Note that 8367 based products don't support remote </span><a name="l00262"></a>00262    <span class="comment">// requests well, so we use an SDO to request the PDO</span><a name="l00263"></a>00263    <a class="code" href="CML_8h.html#a0">cml</a>.<a class="code" href="classCopleyMotionLibrary.html#a8">Debug</a>( <span class="stringliteral">"Amp %d, (type 0x%04x) Getting initial status\n"</span>, nodeID, hwType );<a name="l00264"></a>00264    <span class="keywordflow">if</span>( (hwType &amp; 0xFF00) &lt; 0x0300 )<a name="l00265"></a>00265       err = statPdo.<a class="code" href="classTPDO.html#a8">Request</a>();<a name="l00266"></a>00266    <span class="keywordflow">else</span><a name="l00267"></a>00267       err = <a class="code" href="classNode.html#o0">sdo</a>.<a class="code" href="classSDO.html#a12">Dnld8</a>( OBJID_PDOREQUEST, 0, (<a class="code" href="CML__Utils_8h.html#a6">uint8</a>)0 );<a name="l00268"></a>00268 <a name="l00269"></a>00269    <span class="keywordflow">if</span>( !err )<a name="l00270"></a>00270    {<a name="l00271"></a>00271       <a class="code" href="classEventNone.html">EventNone</a> e(<a class="code" href="CML__AmpDef_8h.html#a399a264">AMPEVENT_NOT_INIT</a>);<a name="l00272"></a>00272       err = e.<a class="code" href="classEvent.html#a7">Wait</a>( <a class="code" href="classAmp.html#p0">eventMap</a>, <a class="code" href="classNode.html#o0">sdo</a>.<a class="code" href="classSDO.html#a28">GetTimeout</a>() );<a name="l00273"></a>00273    }<a name="l00274"></a>00274 <a name="l00275"></a>00275    <span class="comment">// Find the value that the amp expects for the next PVT segment</span><a name="l00276"></a>00276    <span class="comment">// ID.  Normally this will be zero (after amp reset).</span><a name="l00277"></a>00277    <span class="keywordflow">if</span>( !err ) err = <a class="code" href="classAmp.html#z13_3">GetPvtSegID</a>( pvtSegID );<a name="l00278"></a>00278 <a name="l00279"></a>00279    <span class="comment">// Setup the synch message</span><a name="l00280"></a>00280    <a class="code" href="CML_8h.html#a0">cml</a>.<a class="code" href="classCopleyMotionLibrary.html#a8">Debug</a>( <span class="stringliteral">"Amp %d, Setting up synch\n"</span>, nodeID );<a name="l00281"></a>00281    <span class="keywordflow">if</span>( !err ) err = <a class="code" href="classNode.html#a32">SetSynchPeriod</a>( settings.<a class="code" href="classAmpSettings.html#o0">synchPeriod</a> );<a name="l00282"></a>00282    <span class="keywordflow">if</span>( !err ) err = <a class="code" href="classNode.html#a30">SetSynchId</a>( settings.<a class="code" href="classAmpSettings.html#o1">synchID</a> );<a name="l00283"></a>00283 <a name="l00284"></a>00284    <span class="comment">// See if we are picking our own synch producer</span><a name="l00285"></a>00285    <span class="comment">// If so, pick the first initialized amplifier.</span><a name="l00286"></a>00286    <span class="keywordflow">if</span>( !err &amp;&amp; settings.<a class="code" href="classAmpSettings.html#o2">synchUseFirstAmp</a> )<a name="l00287"></a>00287    {<a name="l00288"></a>00288       settings.<a class="code" href="classAmpSettings.html#o3">synchProducer</a> = (co.<a class="code" href="classCanOpen.html#a11">GetSynchProducer</a>() == 0);<a name="l00289"></a>00289    }<a name="l00290"></a>00290 <a name="l00291"></a>00291    <span class="keywordflow">if</span>( err ) <span class="keywordflow">goto</span> retErr;<a name="l00292"></a>00292 <a name="l00293"></a>00293    <span class="comment">// Now, start the synch if we are the producer.</span><a name="l00294"></a>00294    <span class="keywordflow">if</span>( settings.<a class="code" href="classAmpSettings.html#o3">synchProducer</a> )<a name="l00295"></a>00295    {<a name="l00296"></a>00296       <a class="code" href="CML_8h.html#a0">cml</a>.<a class="code" href="classCopleyMotionLibrary.html#a8">Debug</a>( <span class="stringliteral">"Amp %d, Starting synch production\n"</span>, nodeID );<a name="l00297"></a>00297       err = <a class="code" href="classNode.html#a34">SynchStart</a>();<a name="l00298"></a>00298    }<a name="l00299"></a>00299    <span class="keywordflow">else</span><a name="l00300"></a>00300    {<a name="l00301"></a>00301       <a class="code" href="CML_8h.html#a0">cml</a>.<a class="code" href="classCopleyMotionLibrary.html#a8">Debug</a>( <span class="stringliteral">"Amp %d, Stopping synch production\n"</span>, nodeID );<a name="l00302"></a>00302       err = <a class="code" href="classNode.html#a35">SynchStop</a>();<a name="l00303"></a>00303    }<a name="l00304"></a>00304 <a name="l00305"></a>00305    <span class="keywordflow">if</span>( err ) <span class="keywordflow">goto</span> retErr;<a name="l00306"></a>00306 <a name="l00307"></a>00307    <span class="comment">// Setup heartbeat or node guarding</span><a name="l00308"></a>00308    <a class="code" href="CML_8h.html#a0">cml</a>.<a class="code" href="classCopleyMotionLibrary.html#a8">Debug</a>( <span class="stringliteral">"Amp %d, setting up node guarding\n"</span>, nodeID );<a name="l00309"></a>00309    <span class="keywordflow">if</span>( settings.<a class="code" href="classAmpSettings.html#o5">heartbeatPeriod</a> )<a name="l00310"></a>00310       err = <a class="code" href="classNode.html#a4">StartHeartbeat</a>( settings.<a class="code" href="classAmpSettings.html#o5">heartbeatPeriod</a>, settings.<a class="code" href="classAmpSettings.html#o6">heartbeatTimeout</a> );<a name="l00311"></a>00311 <a name="l00312"></a>00312    <span class="keywordflow">else</span> <span class="keywordflow">if</span>( settings.<a class="code" href="classAmpSettings.html#o7">guardTime</a> &amp;&amp; settings.<a class="code" href="classAmpSettings.html#o8">lifeFactor</a> )<a name="l00313"></a>00313       err = <a class="code" href="classNode.html#a5">StartNodeGuard</a>( settings.<a class="code" href="classAmpSettings.html#o7">guardTime</a>, settings.<a class="code" href="classAmpSettings.html#o8">lifeFactor</a> );<a name="l00314"></a>00314 <a name="l00315"></a>00315    <span class="keywordflow">else</span><a name="l00316"></a>00316       err = <a class="code" href="classNode.html#a3">StopGuarding</a>();<a name="l00317"></a>00317 <a name="l00318"></a>00318    <span class="keywordflow">if</span>( err ) <span class="keywordflow">goto</span> retErr;<a name="l00319"></a>00319 <a name="l00320"></a>00320    <span class="comment">// Setup the PDO used to synchronize amplifiers over the network</span><a name="l00321"></a>00321    <a class="code" href="CML_8h.html#a0">cml</a>.<a class="code" href="classCopleyMotionLibrary.html#a8">Debug</a>( <span class="stringliteral">"Amp %d, setting up time synch PDO\n"</span>, nodeID );<a name="l00322"></a>00322    err = SetupSynchPDO( settings );<a name="l00323"></a>00323    <span class="keywordflow">if</span>( err ) <span class="keywordflow">goto</span> retErr;<a name="l00324"></a>00324 <a name="l00325"></a>00325    <span class="comment">// Clear the latched version of the amplifier's </span><a name="l00326"></a>00326    <span class="comment">// event status register.  We use this register</span><a name="l00327"></a>00327    <span class="comment">// to check for unexpected amplifier resets.</span><a name="l00328"></a>00328    <a class="code" href="CML_8h.html#a0">cml</a>.<a class="code" href="classCopleyMotionLibrary.html#a8">Debug</a>( <span class="stringliteral">"Amp %d, clearing event latch\n"</span>, nodeID );<a name="l00329"></a>00329    err = <a class="code" href="classAmp.html#b3">ClearEventLatch</a>( (<a class="code" href="CML__AmpDef_8h.html#a398">EVENT_STATUS</a>)0xFFFFFFFF );<a name="l00330"></a>00330    <span class="keywordflow">if</span>( err ) <span class="keywordflow">goto</span> retErr;<a name="l00331"></a>00331 <a name="l00332"></a>00332    <span class="comment">// Clear any latched fault conditions</span><a name="l00333"></a>00333    <a class="code" href="CML_8h.html#a0">cml</a>.<a class="code" href="classCopleyMotionLibrary.html#a8">Debug</a>( <span class="stringliteral">"Amp %d, clearing faults\n"</span>, nodeID );

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -