|
rllib
1
|
class to manage one node of a CanOpenMaster board in a CanOpen network More...
#include <rlcannode.h>

Public Member Functions | |
| rlCanNode () | |
| rlCanNode (int boardnr, int nodeid, RCS_MESSAGETELEGRAM_10 &_telegramm) | |
| initializes a new cannode by means of SyCon-pre-configurated parameters | |
| ~rlCanNode () | |
| calls destructors of rlinifile obj and objdir | |
| int | objecttype (int objindex, int subindex) |
| returns the type of a specific entry in the object directory | |
| void | showConfiguration () |
| prints out the configuration of the node | |
| int | getNodeID () |
| returns the current node ID of the node | |
| int | getBoardID () |
| returns the board ID the node is connected to. | |
| int | getPdoCount () |
| returns the current number of all installed PDOs (Process Data Objects) | |
| int | getReceivePdoCount () |
| returns the current number of all installed reiceive PDOs | |
| int | getTransmitPdoCount () |
| returns the current number of all installed transmit PDOs | |
| bool | hasMapping () |
| indicates if a node available mapping | |
Public Attributes | |
| QPtrVector< rlCanPDO > | pdoList [2] |
| contains transmit PDOs | |
Private Member Functions | |
| rlIniFile * | getEDS (const char *_productstr) |
| finds the eds file matching the product string in [DeviceInfo] ProductName | |
| void | readConfigurationMessage (RCS_MESSAGETELEGRAM_10 &_message) |
| reads out the configuration of a node from the CanOpenMaster board | |
Private Attributes | |
| int | nodeID |
| current node ID (1-127) | |
| int | boardID |
| curent board ID (0-3) | |
| rlIniFile * | ini |
| ObjDir * | objdir |
| unsigned short | usIdentNumber |
| Unique device number if available. | |
| unsigned char | usVendorIdent |
| Unique vendor number if available. | |
| QString | abVendorName |
| specific node informations. extracted from message telegramm | |
| QString | abDeviceName |
| QString | abDescription |
| QString | edslocation |
| unsigned char | pdocount |
| unsigned char | bMasterAddress |
| unsigned char | bSettings |
class to manage one node of a CanOpenMaster board in a CanOpen network
Definition at line 48 of file rlcannode.h.
| rlCanNode::rlCanNode | ( | ) |
Definition at line 21 of file rlcannode.cpp.
{
rlDebugPrintf("\n Constructer clear");
}
| rlCanNode::rlCanNode | ( | int | boardnr, |
| int | nodeid, | ||
| RCS_MESSAGETELEGRAM_10 & | _telegramm | ||
| ) |
initializes a new cannode by means of SyCon-pre-configurated parameters
initializes a new node obj. node is defined by boardid, nodeid and a telegram which contains node specific information from device's dual ported memory
Definition at line 28 of file rlcannode.cpp.
{
nodeID = nodeid;
boardID = boardnr;
readConfigurationMessage(_telegramm);
rlDebugPrintf("Initialising new node...\n BoardNr. %d NodeId %d Productstr %s ...",
boardnr, nodeid, abDeviceName.ascii());
ini = getEDS(abDeviceName);
if (ini!=0){
rlDebugPrintf(" SUCCESS! \n ");
rlDebugPrintf(" ProductName=%s \n ", ini->text("DeviceInfo","ProductName"));
rlDebugPrintf(" Filename=%s \n ", ini->text("FileInfo","FileName"));
rlDebugPrintf("Lege Objektverzeichnis an: ");
objdir = new ObjDir(ini);
}
else
{
rlDebugPrintf("ERROR!\n NO EDS FILE FOUND FOR \"%s\"!\n", abDeviceName.ascii());
objdir = 0;
}
if (objdir){
// observe the adress for pdo mapping in OV
unsigned int i,adr;
adr = TRANSMIT_PDO_MAPPING_STARTADRESS;
rlDebugPrintf(" PDO Gr�en:transmit PDOs: %d receive PDOs: %d\n",
pdoList[DIRECTION_TRANSMIT].size(),pdoList[DIRECTION_RECEIVE].size());
for (i = 0; i< pdoList[DIRECTION_TRANSMIT].size();i++)
{
while(objdir->OVAdressExists(adr,0) == 0)
{
adr++;
if (adr>TRANSMIT_PDO_MAPPING_MAXADRESS) {
adr=0;
rlDebugPrintf("ERROR IN EDS FILE: errorous number of Mapping entries\n");
break;
}
}
pdoList[DIRECTION_TRANSMIT][i]->mappingOvAdress = adr;
adr++;
}
adr = RECEIVE_PDO_MAPPING_STARTADRESS ;
for (i = 0; i< pdoList[DIRECTION_RECEIVE].size();i++)
{
while(objdir->OVAdressExists(adr,0) == 0)
{
adr++;
if (adr>RECEIVE_PDO_MAPPING_MAXADRESS) {
adr=0;
rlDebugPrintf("ERROR IN EDS FILE: errorous number of Mapping entries\n");
break;
}
}
pdoList[DIRECTION_RECEIVE][i]->mappingOvAdress = adr;
adr++;
}
}
}
| rlCanNode::~rlCanNode | ( | ) |
calls destructors of rlinifile obj and objdir
Definition at line 97 of file rlcannode.cpp.
{
rlDebugPrintf("Destructor rlCanNode\n");
if (ini!=0){
delete ini;
}
if (objdir!=0){
delete objdir;
}
}
| int rlCanNode::getBoardID | ( | ) |
returns the board ID the node is connected to.
returns the board ID in witch the node is connected
Definition at line 245 of file rlcannode.cpp.
{
return boardID;
}
| rlIniFile * rlCanNode::getEDS | ( | const char * | _productstr | ) | [private] |
finds the eds file matching the product string in [DeviceInfo] ProductName
iterates through all files in eds directory. opens every eds file and returns a pointer to an ini-file object of the eds file matching the product string in [DeviceInfo] ProductName
Definition at line 109 of file rlcannode.cpp.
{
rlIniFile* _ini;
// get eds dir
QString dirname(getenv("EdsDir"));
if (dirname.isEmpty()){
dirname = "./";
}
QString productname(_productstr);
QDir edsdir(dirname);
edsdir.setNameFilter("*.EDS; *.eds");
QStringList::Iterator dirit;
QStringList dirlist;
dirlist = edsdir.entryList();
_ini = new rlIniFile();
for ( dirit = dirlist.begin(); dirit != dirlist.end(); ++dirit ) {
int searchval;
QString exportname;
edslocation = dirname + *dirit;
_ini->read(edslocation.ascii());
exportname =QString(_ini->text("DeviceInfo","ProductName"));
searchval = exportname.contains(productname, false);
if (searchval == 1){
return _ini;
}
}
delete _ini;
return 0;
}
| int rlCanNode::getNodeID | ( | ) |
returns the current node ID of the node
Definition at line 239 of file rlcannode.cpp.
{
return nodeID;
}
| int rlCanNode::getPdoCount | ( | ) |
returns the current number of all installed PDOs (Process Data Objects)
returns the current number of -all- installed PDOs (Process Data Objects)
Definition at line 280 of file rlcannode.cpp.
{
return pdocount;
}
| int rlCanNode::getReceivePdoCount | ( | ) |
returns the current number of all installed reiceive PDOs
Definition at line 285 of file rlcannode.cpp.
{
return pdoList[DIRECTION_RECEIVE].size();
}
| int rlCanNode::getTransmitPdoCount | ( | ) |
returns the current number of all installed transmit PDOs
Definition at line 290 of file rlcannode.cpp.
{
return pdoList[DIRECTION_TRANSMIT].size();
}
| bool rlCanNode::hasMapping | ( | ) |
indicates if a node available mapping
indicates if node mapping is available. When mapping is active, it is possible to catch a specific Object within a PDO
Definition at line 295 of file rlcannode.cpp.
{
if (objdir==0) return false;
else return true;
}
| int rlCanNode::objecttype | ( | int | objindex, |
| int | subindex | ||
| ) |
returns the type of a specific entry in the object directory
Definition at line 250 of file rlcannode.cpp.
{
QString edsbuffer;
bool ok;
int typenr;
if (objdir != 0) {
edsbuffer = objdir->get_objparameter(ObjDir::DATATYPE, objindex, subindex);
}
else
{
return rlCanOpenTypes::RL_NOTYPE;
}
if (edsbuffer == "ERROR"){
return rlCanOpenTypes::RL_NOTYPE;
}
edsbuffer.remove("0x");
typenr = edsbuffer.toInt(&ok, 16);
if (!ok){
return rlCanOpenTypes::RL_NOTYPE;
}
else
{
return typenr;
}
}
| void rlCanNode::readConfigurationMessage | ( | RCS_MESSAGETELEGRAM_10 & | _message | ) | [private] |
reads out the configuration of a node from the CanOpenMaster board
reads out the configuration of a node from the device. For success the device must configured by SYCon.
Definition at line 142 of file rlcannode.cpp.
{
int i;
usIdentNumber = (unsigned short) (_message.d[2]+_message.d[1]*pow(256,1));
usVendorIdent = (unsigned short) (_message.d[4]+_message.d[3]*pow(256,1));
for(i=0;i<32;i++)
{
abVendorName+=_message.d[5+i];
abDeviceName+=_message.d[37+i];
abDescription+=_message.d[69+i];
}
bMasterAddress = _message.d[101];
bSettings = _message.d[102];
pdocount = _message.d[117];
//transmit_pdoList.resize(pdocount);
int startadress=118; // start index of pdos in buffer
int k = 0;
int tpdocounter = 0;
int rpdocounter = 0;
for(i=1;i<=int(pdocount);i++)
{
rlCanPDO *tempPDO = new rlCanPDO;
tempPDO->bPDOSize = _message.d[startadress+k+1];
tempPDO->bDataPosition = _message.d[startadress+k+2];
tempPDO->usPDOAddress = (unsigned short)
(_message.d[startadress+k+3]*pow(256,0)
+ _message.d[startadress+k+4]);
if ((_message.d[startadress+k] & DATA_DIRECTION_MASK) == DIRECTION_INPUT)
{
rlDebugPrintf("\n tranceive pdo found ................\n");
tpdocounter++;
tempPDO->bPDODirection = DIRECTION_TRANSMIT; // => Tranceive PDO
pdoList[DIRECTION_TRANSMIT].resize(pdoList[DIRECTION_TRANSMIT].size()+1);
pdoList[DIRECTION_TRANSMIT].insert(tpdocounter-1,tempPDO);
}
else if(
(_message.d[startadress+k] & DATA_DIRECTION_MASK) == DIRECTION_OUTPUT)
{
rlDebugPrintf("\n receive pdo found ................");
rpdocounter++;
tempPDO->bPDODirection = DIRECTION_RECEIVE; // => receive PDO
pdoList[DIRECTION_RECEIVE].resize(pdoList[DIRECTION_RECEIVE].size()+1);
pdoList[DIRECTION_RECEIVE].insert(rpdocounter-1,tempPDO);
}
k=k+5;
}
}
| void rlCanNode::showConfiguration | ( | ) |
prints out the configuration of the node
print out the configuration of the node
Definition at line 200 of file rlcannode.cpp.
{
cout<<"\n\n******** Configuration Board "
<<boardID<<" Node "<<nodeID <<" ********";
cout<<"\n IdentNumber :" << usIdentNumber;
cout<<"\n VendorIdent :" <<usVendorIdent;
cout<<"\n Vendor Name :"<<abVendorName;
cout<<"\n Device Name :"<<abDeviceName;
cout<<"\n Description :"<<abDescription;
cout<<"\n PDO count :"<<int(pdocount);
cout<<"\n Master Adress :"<<int(bMasterAddress);
cout<<"\n Settings :"<<int(bSettings);
cout<<"\n\n - - - - PDOs -> - - - - -";
unsigned int j;
for (j = 1;j<=pdoList[DIRECTION_TRANSMIT].size();j++)
{
cout<<"\n+ PDO No. "<<j;
cout<<"\nPDO Direction :Send PDO";
printf("\nPDO Size :%i",pdoList[DIRECTION_TRANSMIT][j-1]->bPDOSize);
printf("\nData Position :%i",pdoList[DIRECTION_TRANSMIT][j-1]->bDataPosition);
printf("\nPDO Adress :%i",pdoList[DIRECTION_TRANSMIT][j-1]->usPDOAddress);
}
for (j = 1;j<=pdoList[DIRECTION_RECEIVE].size();j++)
{
cout<<"\n+ PDO No. "<<j;
cout<<"\nPDO Direction :Receive PDO";
printf("\nPDO Size :%i",pdoList[DIRECTION_RECEIVE][j-1]->bPDOSize);
printf("\nData Position :%i",pdoList[DIRECTION_RECEIVE][j-1]->bDataPosition);
printf("\nPDO Adress :%i",pdoList[DIRECTION_RECEIVE][j-1]->usPDOAddress);
}
cout<<"\n **********************************************\n\n";
}
QString rlCanNode::abDescription [private] |
Definition at line 129 of file rlcannode.h.
QString rlCanNode::abDeviceName [private] |
Definition at line 128 of file rlcannode.h.
QString rlCanNode::abVendorName [private] |
specific node informations. extracted from message telegramm
Definition at line 127 of file rlcannode.h.
unsigned char rlCanNode::bMasterAddress [private] |
Definition at line 132 of file rlcannode.h.
int rlCanNode::boardID [private] |
curent board ID (0-3)
Definition at line 101 of file rlcannode.h.
unsigned char rlCanNode::bSettings [private] |
Definition at line 133 of file rlcannode.h.
QString rlCanNode::edslocation [private] |
Definition at line 130 of file rlcannode.h.
rlIniFile* rlCanNode::ini [private] |
pointer to inifile. object which handles access to the EDS file describing the object directory of this node
Definition at line 110 of file rlcannode.h.
int rlCanNode::nodeID [private] |
current node ID (1-127)
Definition at line 98 of file rlcannode.h.
ObjDir* rlCanNode::objdir [private] |
pointer to objdir which handles access to all items in the object directory of this node
Definition at line 114 of file rlcannode.h.
unsigned char rlCanNode::pdocount [private] |
Definition at line 131 of file rlcannode.h.
| QPtrVector<rlCanPDO> rlCanNode::pdoList[2] |
unsigned short rlCanNode::usIdentNumber [private] |
Unique device number if available.
Definition at line 121 of file rlcannode.h.
unsigned char rlCanNode::usVendorIdent [private] |
Unique vendor number if available.
Definition at line 124 of file rlcannode.h.
1.7.5.1