rllib  1
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Macros
Public Types | Public Member Functions | Private Attributes | List of all members
rlCanOpenClient Class Reference

Class performs API rlcanopen functions remotely through tcp sockets. More...

#include <rlcanopenclient.h>

Inheritance diagram for rlCanOpenClient:
Inheritance graph
[legend]
Collaboration diagram for rlCanOpenClient:
Collaboration graph
[legend]

Public Types

enum  rl_msg {
  MSG_SEND = 0, MSG_RECEIVE = 1, MSG_SDO_READ = 0, MSG_SDO_WRITE = 1,
  MSG_PDO_RECEIVE = 3, MSG_CONNECT = 5, MSG_DISCONNECT = 6, MSG_PDO_TRANSMIT = 4,
  MSG_NMT_TRANSMIT = 7, MSG_RESTART_BOARD = 8, MSG_GET_NODE_STATE = 9
}
 

Public Member Functions

 rlCanOpenClient ()
 initializes the client on localhost port 5000
 
 rlCanOpenClient (int _port, char *_remoteadress)
 initializes the client on given port and remove server adress
 
 ~rlCanOpenClient ()
 destructor disconnects client
 
int connect ()
 opens a new connection to a running rlCanOpenDaemon
 
int disconnect ()
 disconnects from daemon
 
int sdo_read (int _boardnr, int _nodeid, int _objectindex, int _subindex, rlCanOpenTypes &_sdo_data)
 remotely reads a certain object from the object dictionary of a node.
 
int sdo_write (int _boardnr, int _nodeid, int _objectindex, int _subindex, rlCanOpenTypes &_sdo_data)
 remotely writes data into a certain object from the object dictionary of a node
 
int pdo_receive (int _boardnr, int _nodeid, int _pdonr, int _mappingnr, rlCanOpenTypes &_pdo_data)
 receives single mapped pdo object from daemon.
 
int pdo_receive (int _boardnr, int _nodeid, int _pdonr, rlCanOpenTypes &_pdo_data)
 receives an 8 byte pdo from daemon.
 
int pdo_transmit (int _boardnr, int _nodeid, int _pdonr, int _mappingnr, rlCanOpenTypes &_pdo_data)
 sends a single mapped pdo object to daemon.
 
int pdo_transmit (int _boardnr, int _nodeid, int _pdonr, rlCanOpenTypes &_pdo_data)
 sends an 8 byte pdo to daemon.
 
int sendNMTCommand (int _boardnr, int _nodeid, unsigned char _cmd, bool &returnstate)
 
int restartBoard (int _boardnr, int _restarttype, bool &returnstate)
 
int getNodeState (int _boardnr, int _nodeid, rlCanOpenTypes &_data)
 
void setPort (int _port)
 setter for private port variable
 
void setAdr (char *_adr)
 setter for private remoteadress variable
 

Private Attributes

int pid
 variable contains process id
 
bool connected
 flag indicates connection status
 
int port
 variable contains port
 
char remoteadress [40]
 string of remoteadress
 
rlSocketsocket
 pointer to socket object
 
int client_timeout
 timeout in ms
 

Detailed Description

Class performs API rlcanopen functions remotely through tcp sockets.

this class provides the client API funcions which should be similar to the rlcanopen API. Main difference is that underlying code does not communicate with the canopen device itself but with a rlcanopendaemon, which should run in backbround or on an remote computer.

Definition at line 34 of file rlcanopenclient.h.

Member Enumeration Documentation

Enumerator:
MSG_SEND 
MSG_RECEIVE 
MSG_SDO_READ 
MSG_SDO_WRITE 
MSG_PDO_RECEIVE 
MSG_CONNECT 
MSG_DISCONNECT 
MSG_PDO_TRANSMIT 
MSG_NMT_TRANSMIT 
MSG_RESTART_BOARD 
MSG_GET_NODE_STATE 

Definition at line 38 of file rlcanopenclient.h.

Constructor & Destructor Documentation

rlCanOpenClient::rlCanOpenClient ( )

initializes the client on localhost port 5000

initializes the client on port 5000

Definition at line 96 of file rlcanopenclient.cpp.

{
connected = false;
//cout<<"rlCanOpenClient Konstrukter erfolgreich aufgerufen\n";
port=5000;
strcpy(remoteadress, "localhost");
pid=getpid();
}
rlCanOpenClient::rlCanOpenClient ( int  _port,
char *  _remoteadress 
)

initializes the client on given port and remove server adress

Definition at line 108 of file rlcanopenclient.cpp.

{
connected = false;
//cout<<"Konstrukter erfolgreich aufgerufen\n";
port=_port;
pid=getpid();
strcpy(remoteadress, _remoteadress);
}
rlCanOpenClient::~rlCanOpenClient ( )

destructor disconnects client

Definition at line 120 of file rlcanopenclient.cpp.

{
//printf("Destruktor rlCanOpenClient\n");
if (connected == true){
}
if (socket!=0){
delete socket;
}
}

Member Function Documentation

int rlCanOpenClient::connect ( )

opens a new connection to a running rlCanOpenDaemon

Definition at line 132 of file rlcanopenclient.cpp.

{
if(socket->isConnected() == 0) {
printf("no connection to server!\n");
return 0;
}
cout<<"connection established...\n";
return 1;
}
int rlCanOpenClient::disconnect ( )

disconnects from daemon

Definition at line 151 of file rlcanopenclient.cpp.

{
if (socket!=NULL){
printf("disconnection...\n");
connected=false;
}
return 1;
}
int rlCanOpenClient::getNodeState ( int  _boardnr,
int  _nodeid,
rlCanOpenTypes _data 
)

receives node state data of particular node from daemon.

Definition at line 418 of file rlcanopenclient.cpp.

{
int ret;
IPCMSGSTRUCT message;
if (connected){
message = _data.createIpcMsg();
message.processid = pid;
message.boardid = _boardnr;
message.nodeid=_nodeid;
message.objectindex=0;
message.subindex=0;
message.pdoid=0;
message.mappingid=0;
if(socket->isConnected() == 0)
if ( connect() == 0 )
return 0;
socket->write((void*) &message, sizeof(message));
ret = socket->read((void*) &message,sizeof(message),client_timeout);
if(ret <= 0) // timeout
{
return 0;
}
_data.getIpcMsg(message);
}
else
{
return 0;
}
return 1;
}
int rlCanOpenClient::pdo_receive ( int  _boardnr,
int  _nodeid,
int  _pdonr,
int  _mappingnr,
rlCanOpenTypes _pdo_data 
)

receives single mapped pdo object from daemon.

receives single mapped pdo object from daemon. Function will return NULL if connection to daemon broke down. CanOpen interface related errors are accessable in _sdo_data.get_rlmsgerr()

Definition at line 242 of file rlcanopenclient.cpp.

{
int ret;
IPCMSGSTRUCT message;
if (connected){
message.processid = pid;
message.boardid = _boardnr;
message.nodeid=_nodeid;
message.objectindex=0;
message.subindex=0;
message.pdoid=_pdonr;
message.mappingid=_mappingnr;
if(socket->isConnected() == 0)
if ( connect() == 0 )
return 0;
socket->write((void*) &message, sizeof(message));
ret = socket->read((void*) &message,sizeof(message),client_timeout);
if(ret <= 0) // timeout
{
return 0;
}
_pdo_data.getIpcMsg(message);
}
else
{
return 0;
}
return 1;
}
int rlCanOpenClient::pdo_receive ( int  _boardnr,
int  _nodeid,
int  _pdonr,
rlCanOpenTypes _pdo_data 
)

receives an 8 byte pdo from daemon.

receives an 8 byte pdo from daemon. Function will return NULL if connection to daemon broke down. CanOpen interface related errors are accessable in _sdo_data.get_rlmsgerr()

Definition at line 281 of file rlcanopenclient.cpp.

{
int ret = pdo_receive(_boardnr, _nodeid, _pdonr, -1, _pdo_data);
return ret;
}
int rlCanOpenClient::pdo_transmit ( int  _boardnr,
int  _nodeid,
int  _pdonr,
int  _mappingnr,
rlCanOpenTypes _pdo_data 
)

sends a single mapped pdo object to daemon.

sends a single mapped pdo object to daemon. Function will return NULL if connection to daemon broke down. CanOpen interface related errors are accessable in _pdo_data.get_rlmsgerr()

Definition at line 292 of file rlcanopenclient.cpp.

{
int ret;
IPCMSGSTRUCT message;
if (connected){
message = _pdo_data.createIpcMsg();
message.processid = pid;
message.boardid = _boardnr;
message.nodeid=_nodeid;
message.objectindex=0;
message.subindex=0;
message.pdoid=_pdonr;
message.mappingid=_mappingnr;
if(socket->isConnected() == 0)
if ( connect() == 0 )
return 0;
socket->write((void*) &message, sizeof(message));
ret = socket->read((void*) &message,sizeof(message),client_timeout);
if(ret <= 0) // timeout
{
return 0;
}
_pdo_data.getIpcMsg(message);
}
else
{
return 0;
}
return 1;
}
int rlCanOpenClient::pdo_transmit ( int  _boardnr,
int  _nodeid,
int  _pdonr,
rlCanOpenTypes _pdo_data 
)

sends an 8 byte pdo to daemon.

sends an 8 byte pdo to daemon. Function will return NULL if connection to daemon broke down. CanOpen interface related errors are accessable in _pdo_data.get_rlmsgerr()

Definition at line 333 of file rlcanopenclient.cpp.

{
return pdo_transmit(_boardnr, _nodeid, _pdonr, -1, _pdo_data);
}
int rlCanOpenClient::restartBoard ( int  _boardnr,
int  _restarttype,
bool &  returnstate 
)

forces daemon to restart canopen device.

Definition at line 381 of file rlcanopenclient.cpp.

{
int ret;
IPCMSGSTRUCT message;
if (connected){
message.mtext[0] = (char) _restarttype;
message.processid = pid;
message.boardid = _boardnr;
message.nodeid=0;
message.objectindex=0;
message.subindex=0;
message.pdoid=0;
message.mappingid=0;
if(socket->isConnected() == 0)
if ( connect() == 0 )
return 0;
socket->write((void*) &message, sizeof(message));
ret = socket->read((void*) &message,sizeof(message),client_timeout);
if(ret <= 0) // timeout
{
return 0;
}
}
else
{
return 0;
}
returnstate = (bool) message.transfertype;
return 1;
}
int rlCanOpenClient::sdo_read ( int  _boardnr,
int  _nodeid,
int  _objectindex,
int  _subindex,
rlCanOpenTypes _sdo_data 
)

remotely reads a certain object from the object dictionary of a node.

using the sdo_read function you can read a certain object from the object dictionary of a node. Function will return NULL if connection to daemon broke down. CanOpen interface related errors are accessable in _sdo_data.get_rlmsgerr()

Definition at line 163 of file rlcanopenclient.cpp.

{
int ret;
IPCMSGSTRUCT message;
if (connected){
message.msgtype = MSG_SDO_READ;
message.processid = pid;
message.boardid = _boardnr;
message.nodeid=_nodeid;
message.objectindex=_objectindex;
message.subindex=_subindex;
if(socket->isConnected() == 0)
if ( connect() == 0 )
return 0;
socket->write((void*) &message, sizeof(message));
ret = socket->read((void*) &message,sizeof(message),client_timeout);
if(ret <= 0) // timeout
{
return 0;
}
_sdo_data.getIpcMsg(message);
}
else
{
return 0;
}
return 1;
}
int rlCanOpenClient::sdo_write ( int  _boardnr,
int  _nodeid,
int  _objectindex,
int  _subindex,
rlCanOpenTypes _sdo_data 
)

remotely writes data into a certain object from the object dictionary of a node

using the sdo_write function you can write to a certain object from the object dictionary of a node Function will return NULL if connection to daemon broke down. CanOpen interface related errors are accessable in _sdo_data.get_rlmsgerr()

Definition at line 201 of file rlcanopenclient.cpp.

{
int ret;
IPCMSGSTRUCT message;
if (connected){
message = _sdo_data.createIpcMsg();
message.processid = pid;
message.boardid = _boardnr;
message.nodeid=_nodeid;
message.objectindex=_objectindex;
message.subindex=_subindex;
if(socket->isConnected() == 0)
if ( connect() == 0 )
return 0;
socket->write((void*) &message, sizeof(message));
// recieve answer to check if write was successfull
ret = socket->read((void*) &message,sizeof(message),client_timeout);
if(ret <= 0) // timeout
{
return 0;
}
_sdo_data.getIpcMsg(message);
}
else
{
return 0;
}
return 1;
}
int rlCanOpenClient::sendNMTCommand ( int  _boardnr,
int  _nodeid,
unsigned char  _cmd,
bool &  returnstate 
)

sends a NMT command to daemon.

Definition at line 342 of file rlcanopenclient.cpp.

{
int ret;
IPCMSGSTRUCT message;
if (connected){
message.mtext[0] = _cmd;
message.processid = pid;
message.boardid = _boardnr;
message.nodeid=_nodeid;
message.objectindex=0;
message.subindex=0;
message.pdoid=0;
message.mappingid=0;
if(socket->isConnected() == 0)
if ( connect() == 0 )
return 0;
socket->write((void*) &message, sizeof(message));
ret = socket->read((void*) &message,sizeof(message),client_timeout);
if(ret <= 0) // timeout
{
return 0;
}
}
else
{
return 0;
}
returnstate = (bool) message.transfertype;
return 1;
}
void rlCanOpenClient::setAdr ( char *  _adr)

setter for private remoteadress variable

Definition at line 458 of file rlcanopenclient.cpp.

{
strcpy(remoteadress, _adr);
}
void rlCanOpenClient::setPort ( int  _port)

setter for private port variable

Definition at line 454 of file rlcanopenclient.cpp.

{
port = _port;
}

Member Data Documentation

int rlCanOpenClient::client_timeout
private

timeout in ms

Definition at line 153 of file rlcanopenclient.h.

bool rlCanOpenClient::connected
private

flag indicates connection status

Definition at line 142 of file rlcanopenclient.h.

int rlCanOpenClient::pid
private

variable contains process id

Definition at line 139 of file rlcanopenclient.h.

int rlCanOpenClient::port
private

variable contains port

Definition at line 145 of file rlcanopenclient.h.

char rlCanOpenClient::remoteadress[40]
private

string of remoteadress

Definition at line 148 of file rlcanopenclient.h.

rlSocket* rlCanOpenClient::socket
private

pointer to socket object

Definition at line 151 of file rlcanopenclient.h.


The documentation for this class was generated from the following files: