📄 amp_8cpp-source.html
字号:
<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 & 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 & 0xFF00) >= 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 & 0xFF00) < 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 && 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> && 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 + -