<div dir="ltr"><span style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;display:inline!important;float:none;background-color:rgb(255,255,255)">Sebastien, Xinhua,</span><div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px"><br></div><div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px">I have used AKD drives sucessfully in a telescope drive project, basing the code in part on Sebastien's example. In that project, the motor is run in velocity mode with a custom PID wrapped around it to form a cascaded position-velocity loop, where the position loop is closed by reading an absolute tape encoder on-axis.</div><div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px"><br></div><div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px">To move the motor, you indeed need to use the DS402 state machine command once you have the PDOs set up the way you want. The DS402 communications are described in the Kollmorgen manual, available as a pdf here:</div><div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px"><a href="http://www.kollmorgen.com/zu-za/products/drives/servo/akd/_manuals/kollmorgen-akd-canopen-communications-manual-en-rev-n-fw-1-13/">http://www.kollmorgen.com/zu-za/products/drives/servo/akd/_manuals/kollmorgen-akd-canopen-communications-manual-en-rev-n-fw-1-13/</a><br></div><div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px"><br></div><div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px">Armed with the EtherCAT manual from Kollmorgen and the CANOpen manual, you can determine the PDO mapping and what you have to write/read to put the drive in motion. In my case, I created a state machine that walked the drive into operational mode based on flags from the operator, and if a limit or emergency stop condition is detected, the AKD firmware will put the drive in a switched-off state that likewise needs to be handled by the operation-control state machine (mainly by detecting the change in drive state and restarting the motion-request sequence)...of course in an emergency stop condition, you will want your users to check things out and clear any unsafe conditions before attempting a restart, which your application code can implement, of course.</div><div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px"><br></div><div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px">Regards,</div><div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px"><br></div><div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px">Dusty Clark</div><div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px">Naeglin Rim Services, LLC</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Feb 3, 2015 at 4:53 AM, Sebastien Blanchet <span dir="ltr"><<a href="mailto:blanchet@iram.fr" target="_blank">blanchet@iram.fr</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Dear Xinhuan Gan,<br>
<br>
The AKD XML description file is unneeded for Ethercat master 1.5.2 unlike TwinCAT. I never used the AKD drive XML file in my Linux project.<br>
Therefore, IMHO, it does not worth updating the SII EEPROM with data from TwinCAT. Instead, it is safer to update the servo drive firmware with latest version.<br>
<br>
To use the AKD servo drive with ethercat master, you have to setup the AKD drive with SDO commands at startup to define the PDO mapping.<br>
<a href="http://www.iram.fr/~blanchet/ethercat/akd/free-pdo/akd_free_pdo.c" target="_blank">http://www.iram.fr/~blanchet/<u></u>ethercat/akd/free-pdo/akd_<u></u>free_pdo.c</a><br>
<br>
When your program reads successfully the cyclic values from the setup-and-mapped PDO, you have done half of the work (even if the motor does not move yet).<br>
<br>
The remaining task is programming the DS402 state machine.<br>
Unfortunately, there is no example in the "AKD EtherCAT Commmunication" manual from Kollmorgen. Indeed, there are commented examples only in the "AKD CAN-BUS COMMUNICATION" manual from Kollmorgen.<br>
In my printed copy (AKD CAN-BUS Communication, Edition: F, March 2012, Part Number 903-200004-00), it is in section 7.2.6 "Example: Torque Mode via PDO", page 143.<br>
<br>
Finally, the right sequence for the command register is:<br>
0x80   (AKD_CMD_CLR_ERROR)<br>
0x06   (AKD_CMD_DIS_QSTOP)<br>
0x07   (AKD_CMD_ENA_SWION)<br>
0x0F   (AKD_CMD_ENA_OP)<br>
<br>
In parallel, the status register answers:<br>
0x218  (AKD_STATUS_ERROR)<br>
0x250  (AKD_STATUS_SWION_DIS)<br>
0x231  (AKD_STATUS_RDY_SWION)<br>
0x233  (AKD_STATUS_SWION_ENA)<br>
<br>
For example, if you want to program the following behavior:<br>
"Start the motor automatically, but if there is an error, wait for the operator sets a flag to purge the pending errors and then restart automatically the motor"<br>
<br>
so the code may look like<br>
<br>
#define AKD_STATUS_MASK 0xEFF<br>
<br>
#define AKD_STATUS_SWION_DIS   0x250<br>
#define AKD_STATUS_RDY_SWION   0x231<br>
#define AKD_STATUS_SWION_ENA   0x233<br>
#define AKD_STATUS_ERROR       0x218<br>
<br>
#define AKD_CMD_ENA_QSTOP      0x00<br>
#define AKD_CMD_DIS_QSTOP      0x06<br>
#define AKD_CMD_ENA_SWION      0x07<br>
#define AKD_CMD_ENA_OP         0x0F<br>
#define AKD_CMD_CLR_ERROR      0x80<br>
<br>
// ...<br>
// Note: 'shm' is an object in shared memory, to uncouple control program and<br>
// fieldbus driver. Thereby, one program reads/writes the fieldbus bus,<br>
// and another one takes the decisions and update setpoints.<br>
// Thus, the code works with both EtherCAT or CANOpen.<br>
<br>
    bool clearError = false;<br>
    if ( shm->clearError ) {<br>
        shm->clearError = 0;<br>
        shm->status = AKD_STATUS_ERROR;<br>
        clearError = true;<br>
    }<br>
<br>
    // update command word according to status<br>
    uint16_t status = shm->status & AKD_STATUS_MASK;<br>
    uint16_t command = shm->command;<br>
<br>
    if (status == AKD_STATUS_SWION_DIS<br>
            and command != AKD_CMD_DIS_QSTOP) {<br>
        command = AKD_CMD_DIS_QSTOP;<br>
<br>
    } else if (status == AKD_STATUS_RDY_SWION<br>
            and command != AKD_CMD_ENA_SWION ) {<br>
        command = AKD_CMD_ENA_SWION;<br>
<br>
    } else if ( status == AKD_STATUS_SWION_ENA<br>
            and command != AKD_CMD_ENA_OP ) {<br>
        command = AKD_CMD_ENA_OP;<br>
<br>
    } else if ( status == AKD_STATUS_ERROR<br>
            and command != AKD_CMD_CLR_ERROR ) {<br>
        if (clearError) {<br>
            command = AKD_CMD_CLR_ERROR;<br>
        }<br>
    } else {<br>
<br>
    }<br>
<br>
    shm->command = command;<br>
// ...<br>
<br>
best regards,<br>
-- <br>
Sebastien BLANCHET<br>
<br>
<br>
On 02/02/2015 09:00 PM, Xinhua Gan wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Dear Sebastien,<br>
<br>
I am a new user of IgH ethercat master 1.5.2 and working on communicating<br>
with Kollmorgen AKD drive. I know you are the expert on both. You actually<br>
answered my first question that I sent out through etherlab_users list. Now I<br>
have set up master code 1.5.2 and AKD drive. both are communicating each other.<br>
I can send SDOs to make the motor run and still learning how to do the PDOs.<br>
<br>
One thing I am not very clear is AKD drive XML file. So my questions are:<br>
<br>
1) On TwinCAT, as instructed, I can import this XML file and save it under<br>
/Twincat/user/IO directory so TwinCAT will setup AKD drive based on this file.<br>
Where should I put it when I use etherlab master 1.5.2?<br>
2) Do we really need XML file on ethercat master?<br>
3) I read one comment on etherlab website as follows, should I do this as<br>
instructed on AKD drive?<br>
------------------------------<u></u>------------------------------<u></u>------------------------------<u></u>------------------------------<u></u>------------------------------<u></u>------------------------------<u></u>------------------------------<u></u>--------------------<br>
<br>
There are almost definitely information missing in the "Slave Information<br>
Interface" (SII) of your slave. Unfortunately, some slave vendors aren't aware,<br>
that they have to provide their slaves' SII with nearly the same information as<br>
in the slave device description XML files (see table below). An EtherCAT Master<br>
/ configuration tool can determine the slave configuration by reading out the<br>
SII or by using the XML Device Description.<br>
For example, the "SyncManager" category is inevitable for the master to know the<br>
physical addresses of the sync managers to configure the PDO mapping and the PDO<br>
exchange. The below table is an excerpt of the EtherCAT Knowledge Base<br>
<<a href="http://www.ethercat.org/infosys.html" target="_blank">http://www.ethercat.org/<u></u>infosys.html</a>>(chapter EtherCAT Technology Description /<br>
EEPROM / SII), defining which information is optional (O), and which is<br>
mandatory (M).<br>
Device Types    No Process Data, Mailbox        Fixed Process Data, No Mailbox  Fixed<br>
Process Data, No Object Dictionary      Fixed Process Data, Object Dictionary<br>
Variable Process Data, Object Dictionary<br>
Info Structure<br>
(128 Byte)      ESC Info        M       M       M       M       M<br>
Identity        M       M       M       M       M<br>
Bootstrap Mbx Info      O               O       O       O<br>
Standard Mbx Info       M               M       M       M<br>
Categories      Strings (10)    O       O       O       O       O<br>
General (30)    M       M       M       M       M<br>
SyncManager (41)        O       M       M       M       M<br>
FMMU (40)       O       O       O       O       M<br>
PDO (50, 51)            M       M       O (same as OD)<br>
<br>
A quick solution for the missing information is to generate the SII contents<br>
from the slave description XML file using Beckhoff's TwinCAT, and write them to<br>
the slave. This is actually the task of the vendor, an you should tell him to do<br>
so in the future! Add the slave to a new project, then select "EtherCAT",<br>
"Advanced settings", "ESC Access", "E²PROM", "Hex Editor", "Save to file...".<br>
There is an issue, when the EEPROM size in the XML file is wrongly specified too<br>
small, TwinCAT won't export the category data. Try increasing the value in the<br>
slave configuration XML and repeating the export in that case.<br>
You can the write the SII contents file to the slave using the EtherCAT master<br>
(from version 1.4):<br>
<br>
ethercat sii_write -p/slave-position/  /file/<br>
<br>
Before version 1.4:<br>
<br>
cp/file/  /sys/ethercat/master/X//slave/<u></u>slave-position//sii<br>
<br>
Please let the master scan the bus again after doing so.<br>
==============================<u></u>==============================<u></u>==============================<u></u>==============================<u></u>========================<br>
<br>
4) I asked Kollmorgen technical support. Their answers are "AKD drive does not<br>
support SII, you have to use XML file that we provide". How can I use it? should<br>
I write a patch to let master use this file as TwinCAT does?<br>
<br>
<br>
Thank you for your help in advance and look forward to hearing from you.<br>
<br>
Sincerely<br>
<br>
Xinhua Gan<br>
<br>
RivoStar LLC<br>
System Design Engineer<br>
Dublin, OH 43017<br>
USA<br>
<br>
<br>
</blockquote>
<br>
<br>
______________________________<u></u>_________________<br>
etherlab-users mailing list<br>
<a href="mailto:etherlab-users@etherlab.org" target="_blank">etherlab-users@etherlab.org</a><br>
<a href="http://lists.etherlab.org/mailman/listinfo/etherlab-users" target="_blank">http://lists.etherlab.org/<u></u>mailman/listinfo/etherlab-<u></u>users</a><br>
</blockquote></div><br></div>