rllib  1
Public Member Functions
rlModbusClient Class Reference

#include <rlmodbusclient.h>

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

List of all members.

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)

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:
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Defines