
Temposonics
®
R-Series
V
POWERLINK
Operation Manual
I 46 I
/********************************************************************
* COPYRIGHT --
********************************************************************
* Program: SdoAccess
* File: SdoAccessCyclic.c
* Author: SSchumacher
* Created: November 18, 2014
********************************************************************
* Implementation of program SdoAccess
********************************************************************/
#include <bur/plctypes.h>
#ifdef _DEFAULT_INCLUDES
#include <AsDefault.h>
#endif
void
_CYCLIC SdoAccessCyclic(
void
)
{
if
(fbSdoRead.status != ERR_FUB_BUSY && fbSdoWrite.status != ERR_FUB_BUSY)
{
//currently there is no SDO operation in progress
//initiate SDO operation
switch
(iState)
{
case
STATE_SEARCH_FOR_NODE:
if
(u32VendorId == 0x40)
{
//go to next step
u8NodeFoundAt
=
u8NodeId;
+;
break
;
}
else
{
//search at next ID
u+;
if
(u8NodeId > 239)
u8NodeId
=
1;
}
fbSdoRead.pDevice
=
“SS1.IF1”;
//interface sensor is connected to
fbSdoRead.node
=
u8NodeId;
//node id of sensor
fbSdoRead.index
=
0x1018;
//index of vendor ID
fbSdoRead.subindex
=
1;
//subindex of vendor ID
fbSdoRead.pData =
&u32VendorId;
//variable to store value to
fbSdoRead.datalen
=
sizeof(u32VendorId);
//size of the variable to store value to
fbSdoRead.enable =
1;
//enable the read operation
fbSdoWrite.enable
=
0;
//disable write operation
break
;
case
STATE_SET_NODE_ID:
fbSdoWrite.pDevice
=
“SS1.IF1”;
//interface sensor is connected to
fbSdoWrite.node =
u8NodeFoundAt;
//node id of sensor
fbSdoWrite.index =
0x1f93;
//index of node ID
fbSdoWrite.subindex
=
3;
//subindex of node ID
fbSdoWrite.pData =
&u8NodeIdToSet;
//variable containing value to set
fbSdoWrite.datalen
=
sizeof(u8NodeIdToSet);
//size of the variable containing value to set
fbSdoWrite.enable =
1;
//enable write operation
fbSdoRead.enable =
0;
//disable read operation
//go to next step
+;
break
;
case
STATE_RESET_NODE:
fbSdoWrite.pDevice
=
“SS1.IF1”;
//interface sensor is connected to
fbSdoWrite.node =
u8NodeFoundAt;
//node id of sensor
fbSdoWrite.index =
0x1f9e;
//index of nmt reset
fbSdoWrite.subindex
=
0;
//subindex of nmt reset
fbSdoWrite.pData =
&u8NmtResetNodeCmd;
//variable containing value to set
fbSdoWrite.datalen
=
sizeof(u8NmtResetNodeCmd);
//size of the variable containing value to set
fbSdoWrite.enable =
1;
//enable write operation
fbSdoRead.enable =
0;
//disable read operation
//go to next step
+;
break
;
case
STATE_CHECK_NODE_ID:
fbSdoRead.pDevice
=
“SS1.IF1”;
//interface sensor is connected to
fbSdoRead.node =
u8NodeIdToSet;
//node id of sensor
fbSdoRead.index =
0x1f93;
//index of node ID
fbSdoRead.subindex
=
3;
//subindex of node ID
fbSdoRead.pData =
&u8NodeId;
//variable to store value to
fbSdoRead.datalen
=
sizeof(u8NodeId);
//size of the variable to store value to
fbSdoRead.enable =
1;
//enable the read operation
fbSdoWrite.enable
=
0;
//disable write operation
//go to next step
+;
break
;
default
:
fbSdoRead.enable =
0;
//disable read operation
fbSdoWrite.enable =
0;
//disable write operation
break
;
}
}
//execute SDO read if enabled
EplSDORead(&fbSdoRead);
//execute SDO write if enabled
EplSDOWrite(&fbSdoWrite);
}
Source Code “SdoAccessCyclic.c”