<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en" xmlns="http://www.w3.org/2005/Atom"><title>Recent posts to CANopen SDO_Write4</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/70aee860cc/" rel="alternate"/><link href="https://forge.codesys.com/forge/talk/Engineering/thread/70aee860cc/feed.atom" rel="self"/><id>https://forge.codesys.com/forge/talk/Engineering/thread/70aee860cc/</id><updated>2020-02-27T14:01:29.146000Z</updated><subtitle>Recent posts to CANopen SDO_Write4</subtitle><entry><title>CANopen SDO_Write4</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/70aee860cc/?limit=25#5b1e" rel="alternate"/><published>2020-02-27T14:01:29.146000Z</published><updated>2020-02-27T14:01:29.146000Z</updated><author><name>alwoso</name><uri>https://forge.codesys.com/u/alwoso/</uri></author><id>https://forge.codesys.comfd9995f73834bd086374305d9c552ae416dec790</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Hi Stefno86!&lt;/p&gt;
&lt;p&gt;I think, you should call the function block "SDOWRITE4" cyclical, i.e. outside of the IF ... ENDIF query. If I take your code, the easiest way is to move the call below the END_IF:&lt;/p&gt;
&lt;p&gt;IF xEnable = FALSE THEN&lt;br/&gt;
xLastEnable := TRUE;&lt;br/&gt;
xEnable := TRUE;&lt;/p&gt;
&lt;p&gt;wsdo_index := 16#1400; // SDO write 0x1400 SUB index 1 à 7F 02 00 80 (Receive PDO disabled&lt;br/&gt;
wsdo_subindex := 16#0001;&lt;/p&gt;
&lt;p&gt;SDOWrite4.DATA&lt;span&gt;[1]&lt;/span&gt; := 16#7F;&lt;br/&gt;
SDOWrite4.DATA&lt;span&gt;[2]&lt;/span&gt; := 16#02;&lt;br/&gt;
SDOWrite4.DATA&lt;span&gt;[3]&lt;/span&gt; := 16#00;&lt;br/&gt;
SDOWrite4.DATA&lt;span&gt;[4]&lt;/span&gt; := 16#80;&lt;/p&gt;
&lt;p&gt;ELSE&lt;br/&gt;
IF SDOWrite4.CONFIRM THEN&lt;br/&gt;
xEnable := FALSE;&lt;br/&gt;
// don't call here !!!! SDOWrite4(Enable := xEnable);&lt;br/&gt;
ELSIF SDOWrite4.ERROR &amp;lt;&amp;gt; CiA405.CANOPEN_KERNEL_ERROR.CANOPEN_KERNEL_NO_ERROR THEN&lt;br/&gt;
//Error occured&lt;br/&gt;
xEnable := FALSE;&lt;br/&gt;
// don't call here !!!! SDOWrite4(Enable := xEnable);&lt;/p&gt;
&lt;p&gt;END_IF&lt;/p&gt;
&lt;p&gt;xLastEnable := xEnable;&lt;/p&gt;
&lt;p&gt;END_IF&lt;/p&gt;
&lt;p&gt;SDOWrite4(&lt;br/&gt;
NETWORK:= CANbus.NetId + 1, //CODESYS NetId starts by 0 (the number entered into the CANbus configurator); CiA405 NETWORK by 1; That is the reason why we have to increment it here.&lt;br/&gt;
ENABLE:= xEnable,&lt;br/&gt;
TIMEOUT:= 50, //Timeout for SDO read in ms. Here: 0 ==&amp;gt; no timeout&lt;br/&gt;
//DEVICE:= CANopen_Device_1.NodeID, // NodeID of destination device&lt;br/&gt;
DEVICE:= 126, // NodeID of destination device&lt;br/&gt;
CHANNEL:= 1, //SDO channel which should be used. 0 means auto channeling ==&amp;gt; the next free channel will be used. It depends on the slave which settings are working here but 0 and channel 1 is always working.&lt;br/&gt;
INDEX:= wsdo_index, //object index which should be read&lt;br/&gt;
SUBINDEX:= wsdo_subindex //object sub index which should be read&lt;br/&gt;
);&lt;/p&gt;
&lt;p&gt;Just try, and good luck!&lt;/p&gt;
&lt;p&gt;Alfred&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>CANopen SDO_Write4</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/70aee860cc/?limit=25#69fd" rel="alternate"/><published>2020-02-27T14:01:28.793000Z</published><updated>2020-02-27T14:01:28.793000Z</updated><author><name>stefno86</name><uri>https://forge.codesys.com/u/stefno86/</uri></author><id>https://forge.codesys.comcaa67011b476a28d6ea028527ad2b3cdb06859cd</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Hi all,&lt;br/&gt;
i'm trying to send a sdo to a slave by using the following code... The SDO is transmitted correcly and also the slave received it correcly and answered with the acknoalge (60 xx xx xx xx xx xx xx) but the SDO_Write4.CONFIRM never rise up... &lt;br/&gt;
Do you have an idea about this strange behaviour?&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;IF&lt;/span&gt; &lt;span class="nv"&gt;xEnable&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;FALSE&lt;/span&gt; &lt;span class="k"&gt;THEN&lt;/span&gt;
    &lt;span class="nv"&gt;xLastEnable&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;TRUE&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
    &lt;span class="nv"&gt;xEnable&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;TRUE&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;

    &lt;span class="nv"&gt;wsdo_index&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="sc"&gt;#1400&lt;/span&gt;&lt;span class="c1"&gt;;              // SDO write 0x1400 SUB index 1 à 7F 02 00 80 (Receive PDO disabled &lt;/span&gt;
    &lt;span class="nv"&gt;wsdo_subindex&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="sc"&gt;#0001&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;

    &lt;span class="nv"&gt;SDOWrite4&lt;/span&gt;.&lt;span class="nv"&gt;DATA&lt;/span&gt;[&lt;span class="mi"&gt;1&lt;/span&gt;] :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="sc"&gt;#7&lt;/span&gt;&lt;span class="nv"&gt;F&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
    &lt;span class="nv"&gt;SDOWrite4&lt;/span&gt;.&lt;span class="nv"&gt;DATA&lt;/span&gt;[&lt;span class="mi"&gt;2&lt;/span&gt;] :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="sc"&gt;#02&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
    &lt;span class="nv"&gt;SDOWrite4&lt;/span&gt;.&lt;span class="nv"&gt;DATA&lt;/span&gt;[&lt;span class="mi"&gt;3&lt;/span&gt;] :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="sc"&gt;#00&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
    &lt;span class="nv"&gt;SDOWrite4&lt;/span&gt;.&lt;span class="nv"&gt;DATA&lt;/span&gt;[&lt;span class="mi"&gt;4&lt;/span&gt;] :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="sc"&gt;#80&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;

    &lt;span class="nv"&gt;SDOWrite4&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;
        &lt;span class="nv"&gt;NETWORK&lt;/span&gt;:&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;CANbus&lt;/span&gt;.&lt;span class="nv"&gt;NetId&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;, &lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="nv"&gt;CODESYS&lt;/span&gt; &lt;span class="nv"&gt;NetId&lt;/span&gt; &lt;span class="nv"&gt;starts&lt;/span&gt; &lt;span class="nv"&gt;by&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;the&lt;/span&gt; &lt;span class="nv"&gt;number&lt;/span&gt; &lt;span class="nv"&gt;entered&lt;/span&gt; &lt;span class="nv"&gt;into&lt;/span&gt; &lt;span class="nv"&gt;the&lt;/span&gt; &lt;span class="nv"&gt;CANbus&lt;/span&gt; &lt;span class="nv"&gt;configurator&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;&lt;span class="c1"&gt;; CiA405 NETWORK by 1; That is the reason why we have to increment it here.&lt;/span&gt;
        &lt;span class="nv"&gt;ENABLE&lt;/span&gt;:&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;xEnable&lt;/span&gt;,
        &lt;span class="nb"&gt;TIMEOUT&lt;/span&gt;:&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;, &lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="nb"&gt;Timeout&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="nv"&gt;SDO&lt;/span&gt; &lt;span class="nv"&gt;read&lt;/span&gt; &lt;span class="nv"&gt;in&lt;/span&gt; &lt;span class="nv"&gt;ms&lt;/span&gt;. &lt;span class="nv"&gt;Here&lt;/span&gt;: &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="o"&gt;==&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;no&lt;/span&gt; &lt;span class="nb"&gt;timeout&lt;/span&gt;
        &lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="nv"&gt;DEVICE&lt;/span&gt;:&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;CANopen_Device_1&lt;/span&gt;.&lt;span class="nv"&gt;NodeID&lt;/span&gt;, &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="nv"&gt;NodeID&lt;/span&gt; &lt;span class="nv"&gt;of&lt;/span&gt; &lt;span class="nv"&gt;destination&lt;/span&gt; &lt;span class="nv"&gt;device&lt;/span&gt;
        &lt;span class="nv"&gt;DEVICE&lt;/span&gt;:&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;126&lt;/span&gt;, &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="nv"&gt;NodeID&lt;/span&gt; &lt;span class="nv"&gt;of&lt;/span&gt; &lt;span class="nv"&gt;destination&lt;/span&gt; &lt;span class="nv"&gt;device&lt;/span&gt;
        &lt;span class="nv"&gt;CHANNEL&lt;/span&gt;:&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;, &lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="nv"&gt;SDO&lt;/span&gt; &lt;span class="nv"&gt;channel&lt;/span&gt; &lt;span class="nv"&gt;which&lt;/span&gt; &lt;span class="nv"&gt;should&lt;/span&gt; &lt;span class="nv"&gt;be&lt;/span&gt; &lt;span class="nv"&gt;used&lt;/span&gt;. &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="nv"&gt;means&lt;/span&gt; &lt;span class="nv"&gt;auto&lt;/span&gt; &lt;span class="nv"&gt;channeling&lt;/span&gt; &lt;span class="o"&gt;==&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;the&lt;/span&gt; &lt;span class="k"&gt;next&lt;/span&gt; &lt;span class="nv"&gt;free&lt;/span&gt; &lt;span class="nv"&gt;channel&lt;/span&gt; &lt;span class="nv"&gt;will&lt;/span&gt; &lt;span class="nv"&gt;be&lt;/span&gt; &lt;span class="nv"&gt;used&lt;/span&gt;. &lt;span class="nv"&gt;It&lt;/span&gt; &lt;span class="nv"&gt;depends&lt;/span&gt; &lt;span class="nv"&gt;on&lt;/span&gt; &lt;span class="nv"&gt;the&lt;/span&gt; &lt;span class="nv"&gt;slave&lt;/span&gt; &lt;span class="nv"&gt;which&lt;/span&gt; &lt;span class="nv"&gt;settings&lt;/span&gt; &lt;span class="nv"&gt;are&lt;/span&gt; &lt;span class="nv"&gt;working&lt;/span&gt; &lt;span class="nv"&gt;here&lt;/span&gt; &lt;span class="nv"&gt;but&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="nv"&gt;and&lt;/span&gt; &lt;span class="nv"&gt;channel&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="nv"&gt;is&lt;/span&gt; &lt;span class="nv"&gt;always&lt;/span&gt; &lt;span class="nv"&gt;working&lt;/span&gt;. 
        &lt;span class="nv"&gt;INDEX&lt;/span&gt;:&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;wsdo_index&lt;/span&gt;, &lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="nv"&gt;object&lt;/span&gt; &lt;span class="nv"&gt;index&lt;/span&gt; &lt;span class="nv"&gt;which&lt;/span&gt; &lt;span class="nv"&gt;should&lt;/span&gt; &lt;span class="nv"&gt;be&lt;/span&gt; &lt;span class="nv"&gt;read&lt;/span&gt;
        &lt;span class="nv"&gt;SUBINDEX&lt;/span&gt;:&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;wsdo_subindex&lt;/span&gt; &lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="nv"&gt;object&lt;/span&gt; &lt;span class="nv"&gt;sub&lt;/span&gt; &lt;span class="nv"&gt;index&lt;/span&gt; &lt;span class="nv"&gt;which&lt;/span&gt; &lt;span class="nv"&gt;should&lt;/span&gt; &lt;span class="nv"&gt;be&lt;/span&gt; &lt;span class="nv"&gt;read&lt;/span&gt;        
    &lt;span class="ss"&gt;)&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;



&lt;span class="k"&gt;ELSE&lt;/span&gt;
    &lt;span class="k"&gt;IF&lt;/span&gt; &lt;span class="nv"&gt;SDOWrite4&lt;/span&gt;.&lt;span class="nv"&gt;CONFIRM&lt;/span&gt; &lt;span class="k"&gt;THEN&lt;/span&gt;
        &lt;span class="nv"&gt;xEnable&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;FALSE&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
        &lt;span class="nv"&gt;SDOWrite4&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;Enable&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;xEnable&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
    &lt;span class="nv"&gt;ELSIF&lt;/span&gt; &lt;span class="nv"&gt;SDOWrite4&lt;/span&gt;.&lt;span class="nv"&gt;ERROR&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;CiA405&lt;/span&gt;.&lt;span class="nv"&gt;CANOPEN_KERNEL_ERROR&lt;/span&gt;.&lt;span class="nv"&gt;CANOPEN_KERNEL_NO_ERROR&lt;/span&gt; &lt;span class="k"&gt;THEN&lt;/span&gt;
        &lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="nv"&gt;Error&lt;/span&gt; &lt;span class="nv"&gt;occured&lt;/span&gt;
        &lt;span class="nv"&gt;xEnable&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;FALSE&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
        &lt;span class="nv"&gt;SDOWrite4&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;Enable&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;xEnable&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;

    &lt;span class="nv"&gt;END_IF&lt;/span&gt;

    &lt;span class="nv"&gt;xLastEnable&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;xEnable&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;

&lt;span class="nv"&gt;END_IF&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;/div&gt;</summary></entry></feed>