#include <rlmodbusclient.h>


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) |
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.
| rlModbusClient::rlModbusClient | ( | const char * | mbxname, | |
| const char * | shmname, | |||
| int | shmsize | |||
| ) |
Definition at line 18 of file rlmodbusclient.cpp.
00019 :rlMailbox(mbxname), rlSharedMemory(shmname, shmsize) 00020 { 00021 }
| rlModbusClient::~rlModbusClient | ( | ) | [virtual] |
Definition at line 23 of file rlmodbusclient.cpp.
| int rlModbusClient::readBit | ( | int | offset, | |
| int | number | |||
| ) |
Definition at line 100 of file rlmodbusclient.cpp.
00101 { 00102 int ret; 00103 unsigned char buf[128+1],b; 00104 00105 if(number < 0) return -1; 00106 if(number > 128) return -1; 00107 rlSharedMemory::read(offset,buf,(number/8)+1); 00108 b = buf[number/8]; 00109 switch(number%8) 00110 { 00111 case 0: 00112 ret = b & BIT0; 00113 break; 00114 case 1: 00115 ret = b & BIT1; 00116 break; 00117 case 2: 00118 ret = b & BIT2; 00119 break; 00120 case 3: 00121 ret = b & BIT3; 00122 break; 00123 case 4: 00124 ret = b & BIT4; 00125 break; 00126 case 5: 00127 ret = b & BIT5; 00128 break; 00129 case 6: 00130 ret = b & BIT6; 00131 break; 00132 case 7: 00133 ret = b & BIT7; 00134 break; 00135 default: 00136 return -1; 00137 } 00138 if(ret > 0) return 1; 00139 return 0; 00140 }
| int rlModbusClient::readByte | ( | int | offset, | |
| int | number | |||
| ) |
Definition at line 142 of file rlmodbusclient.cpp.
00143 { 00144 unsigned char buf[4],b; 00145 00146 if(number < 0) return -1; 00147 if(number > 128) return -1; 00148 rlSharedMemory::read(offset+number,buf,1); 00149 b = buf[0]; 00150 return b; 00151 }
| int rlModbusClient::readShort | ( | int | offset, | |
| int | number | |||
| ) |
Definition at line 153 of file rlmodbusclient.cpp.
00154 { 00155 unsigned char buf[4]; 00156 int s; 00157 00158 if(number < 0) return -1; 00159 if(number > 64) return -1; 00160 rlSharedMemory::read(offset+(number*2),buf,2); 00161 s = buf[0]*256 + buf[1]; 00162 return s; 00163 }
| int rlModbusClient::write | ( | int | slave, | |
| int | function, | |||
| const unsigned char * | data, | |||
| int | len | |||
| ) |
Definition at line 27 of file rlmodbusclient.cpp.
00028 { 00029 unsigned char buf[512]; 00030 int i; 00031 00032 if(datalen < 0) return -1; 00033 if(datalen > 256) return -1; 00034 if(slave < 0) return -1; 00035 if(slave > 255) return -1; 00036 if(function < 0) return -1; 00037 buf[0] = slave; 00038 buf[1] = function; 00039 for(i=0; i<datalen; i++) 00040 { 00041 buf[i+2] = data[i]; 00042 } 00043 rlMailbox::write((void *) buf,datalen+2); 00044 return 0; 00045 }
| int rlModbusClient::writeMultipleCoils | ( | int | slave, | |
| int | adr, | |||
| const unsigned char * | values, | |||
| int | num_coils | |||
| ) |
Definition at line 57 of file rlmodbusclient.cpp.
00058 { 00059 unsigned char data[512]; 00060 int i,byte_count; 00061 00062 if(num_coils <= 0) return -1; 00063 byte_count = ((num_coils-1)/8) + 1; 00064 data[0] = adr/256; data[1] = adr & 0x0ff; 00065 data[2] = num_coils/256; data[3] = num_coils & 0x0ff; 00066 data[4] = byte_count; 00067 for(i=0; i<byte_count; i++) 00068 { 00069 if((5+i) > (int) sizeof(data)) return -1; 00070 data[5+i] = values[i]; 00071 } 00072 return write(slave, rlModbus::ForceMultipleCoils, data, 5+byte_count); 00073 }
| int rlModbusClient::writePresetMultipleRegisters | ( | int | slave, | |
| int | adr, | |||
| const int * | values, | |||
| int | num_values | |||
| ) |
Definition at line 84 of file rlmodbusclient.cpp.
00085 { 00086 unsigned char data[512]; 00087 int i; 00088 00089 data[0] = adr/256; data[1] = adr & 0x0ff; 00090 data[2] = num_values/256; data[3] = num_values & 0x0ff; 00091 data[4] = num_values*2; // byte count 00092 for(i=0; i<num_values; i++) 00093 { 00094 if((5+i*2) > (int) sizeof(data)) return -1; 00095 data[5+i*2] = values[i]/256; data[6+i*2] = values[i] & 0x0ff; 00096 } 00097 return write(slave, rlModbus::PresetMultipleRegs, data, 5+2*num_values); 00098 }
| int rlModbusClient::writePresetSingleRegister | ( | int | slave, | |
| int | adr, | |||
| int | value | |||
| ) |
Definition at line 75 of file rlmodbusclient.cpp.
00076 { 00077 unsigned char data[8]; 00078 00079 data[0] = adr/256; data[1] = adr & 0x0ff; 00080 data[2] = value/256; data[3] = value & 0x0ff; 00081 return write(slave, rlModbus::PresetSingleRegister, data, 4); 00082 }
| int rlModbusClient::writeSingleCoil | ( | int | slave, | |
| int | adr, | |||
| int | value | |||
| ) |
Definition at line 47 of file rlmodbusclient.cpp.
00048 { 00049 unsigned char data[8]; 00050 00051 data[0] = adr/256; data[1] = adr & 0x0ff; 00052 data[2] = 0; data[3] = 0; 00053 if(value != 0) data[2] = 0x0ff; 00054 return write(slave, rlModbus::ForceSingleCoil, data, 4); 00055 }
1.6.3