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

#include <rlmodbusclient.h>

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

Public Member Functions

 rlModbusClient (const char *mbxname, const char *shmname, int shmsize)
 
virtual ~rlModbusClient ()
 
int write (int slave, int function, const unsigned char *data, int len)
 
int writeSingleCoil (int slave, int adr, int value)
 
int writeMultipleCoils (int slave, int adr, const unsigned char *values, int num_coils)
 
int writePresetSingleRegister (int slave, int adr, int value)
 
int writePresetMultipleRegisters (int slave, int adr, const int *values, int num_values)
 
int readBit (int offset, int number)
 
int readByte (int offset, int number)
 
int readShort (int offset, int number)
 
- Public Member Functions inherited from rlMailbox
 rlMailbox (const char *name)
 
virtual ~rlMailbox ()
 
int write (const void *buf, int len)
 
int printf (const char *format,...)
 
int read (void *buf, int maxlen, int wait=WAIT)
 
int setReadBufferSize (int size)
 
const char * read (int wait=WAIT)
 
int write (const char *message)
 
void clear ()
 
- Public Member Functions inherited from rlSharedMemory
 rlSharedMemory (const char *name, unsigned long size, int rwmode=0600)
 
virtual ~rlSharedMemory ()
 
int deleteSharedMemory ()
 
int write (unsigned long offset, const void *buf, int len)
 
int read (unsigned long offset, void *buf, int len)
 
int readInt (unsigned long offset, int index)
 
int readShort (unsigned long offset, int index)
 
int readByte (unsigned long offset, int index)
 
float readFloat (unsigned long offset, int index)
 
int writeInt (unsigned long offset, int index, int val)
 
int writeShort (unsigned long offset, int index, int val)
 
int writeByte (unsigned long offset, int index, unsigned char val)
 
int writeFloat (unsigned long offset, int index, float val)
 
void * getUserAdr ()
 
int shmKey ()
 
int shmId ()
 

Additional Inherited Members

- Public Types inherited from rlMailbox
enum  MailboxEnum {
  MAILBOX_ERROR = -1, MAILBOX_FULL = -2, WAIT = 1, NOWAIT = 0,
  MAX_MAILBOX = 256*256, OK = 2, COULD_NOT_CREATE_MAILBOX = 3, COULD_NOT_GET_KEY = 4,
  COULD_NOT_GET_CHAN_ID = 5
}
 
- Public Types inherited from rlSharedMemory
enum  SharedMemoryEnum {
  OK = 0, ERROR_FILE, ERROR_SHMGET, ERROR_SHMAT,
  ERROR_SHMCTL
}
 
- Public Attributes inherited from rlMailbox
int status
 
char * name
 
- Public Attributes inherited from rlSharedMemory
int status
 
char * name
 

Detailed Description

This class is for data aqusition over a modbus daemon as created by pvdevelop.
It communicates over a shared memory and a mailbox according to the pvbrowser principle.

Definition at line 28 of file rlmodbusclient.h.

Constructor & Destructor Documentation

rlModbusClient::rlModbusClient ( const char *  mbxname,
const char *  shmname,
int  shmsize 
)

Definition at line 18 of file rlmodbusclient.cpp.

:rlMailbox(mbxname), rlSharedMemory(shmname, shmsize)
{
}
rlModbusClient::~rlModbusClient ( )
virtual

Definition at line 23 of file rlmodbusclient.cpp.

{
}

Member Function Documentation

int rlModbusClient::readBit ( int  offset,
int  number 
)

Definition at line 100 of file rlmodbusclient.cpp.

{
int ret;
unsigned char buf[128+1],b;
if(number < 0) return -1;
if(number > 128) return -1;
rlSharedMemory::read(offset,buf,(number/8)+1);
b = buf[number/8];
switch(number%8)
{
case 0:
ret = b & BIT0;
break;
case 1:
ret = b & BIT1;
break;
case 2:
ret = b & BIT2;
break;
case 3:
ret = b & BIT3;
break;
case 4:
ret = b & BIT4;
break;
case 5:
ret = b & BIT5;
break;
case 6:
ret = b & BIT6;
break;
case 7:
ret = b & BIT7;
break;
default:
return -1;
}
if(ret > 0) return 1;
return 0;
}
int rlModbusClient::readByte ( int  offset,
int  number 
)

Definition at line 142 of file rlmodbusclient.cpp.

{
unsigned char buf[4],b;
if(number < 0) return -1;
if(number > 128) return -1;
rlSharedMemory::read(offset+number,buf,1);
b = buf[0];
return b;
}
int rlModbusClient::readShort ( int  offset,
int  number 
)

Definition at line 153 of file rlmodbusclient.cpp.

{
unsigned char buf[4];
int s;
if(number < 0) return -1;
if(number > 64) return -1;
rlSharedMemory::read(offset+(number*2),buf,2);
s = buf[0]*256 + buf[1];
return s;
}
int rlModbusClient::write ( int  slave,
int  function,
const unsigned char *  data,
int  len 
)

Definition at line 27 of file rlmodbusclient.cpp.

{
unsigned char buf[512];
int i;
if(datalen < 0) return -1;
if(datalen > 256) return -1;
if(slave < 0) return -1;
if(slave > 255) return -1;
if(function < 0) return -1;
buf[0] = slave;
buf[1] = function;
for(i=0; i<datalen; i++)
{
buf[i+2] = data[i];
}
rlMailbox::write((void *) buf,datalen+2);
return 0;
}
int rlModbusClient::writeMultipleCoils ( int  slave,
int  adr,
const unsigned char *  values,
int  num_coils 
)

Definition at line 57 of file rlmodbusclient.cpp.

{
unsigned char data[512];
int i,byte_count;
if(num_coils <= 0) return -1;
byte_count = ((num_coils-1)/8) + 1;
data[0] = adr/256; data[1] = adr & 0x0ff;
data[2] = num_coils/256; data[3] = num_coils & 0x0ff;
data[4] = byte_count;
for(i=0; i<byte_count; i++)
{
if((5+i) > (int) sizeof(data)) return -1;
data[5+i] = values[i];
}
return write(slave, rlModbus::ForceMultipleCoils, data, 5+byte_count);
}
int rlModbusClient::writePresetMultipleRegisters ( int  slave,
int  adr,
const int *  values,
int  num_values 
)

Definition at line 84 of file rlmodbusclient.cpp.

{
unsigned char data[512];
int i;
data[0] = adr/256; data[1] = adr & 0x0ff;
data[2] = num_values/256; data[3] = num_values & 0x0ff;
data[4] = num_values*2; // byte count
for(i=0; i<num_values; i++)
{
if((5+i*2) > (int) sizeof(data)) return -1;
data[5+i*2] = values[i]/256; data[6+i*2] = values[i] & 0x0ff;
}
return write(slave, rlModbus::PresetMultipleRegs, data, 5+2*num_values);
}
int rlModbusClient::writePresetSingleRegister ( int  slave,
int  adr,
int  value 
)

Definition at line 75 of file rlmodbusclient.cpp.

{
unsigned char data[8];
data[0] = adr/256; data[1] = adr & 0x0ff;
data[2] = value/256; data[3] = value & 0x0ff;
return write(slave, rlModbus::PresetSingleRegister, data, 4);
}
int rlModbusClient::writeSingleCoil ( int  slave,
int  adr,
int  value 
)

Definition at line 47 of file rlmodbusclient.cpp.

{
unsigned char data[8];
data[0] = adr/256; data[1] = adr & 0x0ff;
data[2] = 0; data[3] = 0;
if(value != 0) data[2] = 0x0ff;
return write(slave, rlModbus::ForceSingleCoil, data, 4);
}

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