Commit b5990858 authored by Pavel Vainerman's avatar Pavel Vainerman

optimization

parent ed3934ef
......@@ -3,12 +3,10 @@
// --------------------------------------------------------------------------
#include <iostream>
#include <iomanip>
#include <cmath>
#include "Configuration.h"
#include "UniSetTypes.h"
#include "MTR.h"
// --------------------------------------------------------------------------
using namespace std;
using namespace UniSetTypes;
using namespace MTR;
// --------------------------------------------------------------------------
static void print_help()
......@@ -45,7 +43,7 @@ int main( int argc, char **argv )
else if( !strcmp(type,"T3") )
{
T3 t(v1,v2);
cout << "(T3): v1=" << t.raw.u.v1 << " v2=" << t.raw.u.v2
cout << "(T3): v1=" << t.raw.v[0] << " v2=" << t.raw.v[1]
<< " --> " << (long)t << endl;
}
else if( !strcmp(type,"T4") )
......@@ -57,21 +55,21 @@ int main( int argc, char **argv )
else if( !strcmp(type,"T5") )
{
T5 t(v1,v2);
cout << "(T5): v1=" << t.raw.u1.v1 << " v2=" << t.raw.u1.v2
cout << "(T5): v1=" << t.raw.v[0] << " v2=" << t.raw.v[1]
<< " --> " << t.raw.u2.val << " * 10^" << (int)t.raw.u2.exp
<< " ===> " << t.val << endl;
}
else if( !strcmp(type,"T6") )
{
T6 t(v1,v2);
cout << "(T6): v1=" << t.raw.u1.v1 << " v2=" << t.raw.u1.v2
cout << "(T6): v1=" << t.raw.v[0] << " v2=" << t.raw.v[1]
<< " --> " << t.raw.u2.val << " * 10^" << (int)t.raw.u2.exp
<< " ===> " << t.val << endl;
}
else if( !strcmp(type,"T7") )
{
T7 t(v1,v2);
cout << "(T7): v1=" << t.raw.u1.v1 << " v2=" << t.raw.u1.v2
cout << "(T7): v1=" << t.raw.v[0] << " v2=" << t.raw.v[1]
// << " --> " << T7.val << " * 10^-4"
<< " ===> " << t.val
<< " [" << ( t.raw.u2.ic == 0xFF ? "CAP" : "IND" ) << "|"
......@@ -81,7 +79,7 @@ int main( int argc, char **argv )
else if( !strcmp(type,"T8") )
{
T8 t(v1,v2);
cout << "(T8): v1=" << t.raw.u1.v1 << " v2=" << t.raw.u1.v2
cout << "(T8): v1=" << t.raw.v[0] << " v2=" << t.raw.v[1]
<< " ===> " << setfill('0') << hex
<< setw(2) << t.hour() << ":" << setw(2) << t.min()
<< " " << setw(2) << t.day() << "/" << setw(2) << t.mon()
......@@ -90,7 +88,7 @@ int main( int argc, char **argv )
else if( !strcmp(type,"T9") )
{
T9 t(v1,v2);
cout << "(T9): v1=" << t.raw.u1.v1 << " v2=" << t.raw.u1.v2
cout << "(T9): v1=" << t.raw.v[0] << " v2=" << t.raw.v[1]
<< " ===> " << setfill('0') << hex
<< setw(2) << t.hour() << ":" << setw(2) << t.min()
<< ":" << setw(2) << t.sec() << "." << setw(2) << t.ssec()
......@@ -99,7 +97,7 @@ int main( int argc, char **argv )
else if( !strcmp(type,"F1") )
{
F1 f(v1,v2);
cout << "(F1): v1=" << f.raw.u.v1 << " v2=" << f.raw.u.v2
cout << "(F1): v1=" << f.raw.v[0] << " v2=" << f.raw.v[1]
<< " ===> " << f.raw.val << endl;
}
else
......
......@@ -81,13 +81,14 @@ namespace MTR
bool setDataBits( ModbusRTUMaster* mb, ModbusRTU::ModbusAddr addr, mtrDataBits d );
// -------------------------------------------------------------------------
static const int u2size = 2*sizeof(unsigned short);
// -------------------------------------------------------------------------
class T1
{
public:
T1():val(0){}
T1( unsigned short v ):val(v){}
T1( const ModbusRTU::ReadOutputRetMessage& ret ):val(ret.data[0]){}
T1( const ModbusRTU::ReadInputRetMessage& ret ):val(ret.data[0]){}
T1( const ModbusRTU::ModbusData* data ):val(data[0]){}
~T1(){}
// ------------------------------------------
/*! */
......@@ -103,8 +104,7 @@ namespace MTR
public:
T2():val(0){}
T2( signed short v ):val(v){}
T2( const ModbusRTU::ReadOutputRetMessage& ret ):val(ret.data[0]){}
T2( const ModbusRTU::ReadInputRetMessage& ret ):val(ret.data[0]){}
T2( const ModbusRTU::ModbusData* data ):val(data[0]){}
~T2(){}
// ------------------------------------------
/*! */
......@@ -122,38 +122,32 @@ namespace MTR
/*! */
typedef union
{
struct uT3
{
unsigned short v1;
unsigned short v2;
} u;
unsigned short v[u2size];
signed int val; // :32
} T3mem;
// ------------------------------------------
// ...
T3(){ raw.u.v1 = 0; raw.u.v2 = 0; }
T3(){ memset(raw.v,0,sizeof(raw.v)); }
T3( unsigned short v1, unsigned short v2 )
{
raw.u.v1 = v1;
raw.u.v2 = v2;
raw.v[0] = v1;
raw.v[1] = v2;
}
T3( const ModbusRTU::ReadOutputRetMessage& ret )
T3( const ModbusRTU::ModbusData* data )
{
raw.u.v1 = ret.data[0];
raw.u.v2 = ret.data[1];
}
T3( const ModbusRTU::ReadInputRetMessage& ret )
if( sizeof(data) >=u2size )
{
raw.u.v1 = ret.data[0];
raw.u.v2 = ret.data[1];
for( int i=0; i<u2size; i++ )
raw.v[i] = data[i];
}
}
~T3(){}
// ------------------------------------------
/*! */
static int wsize(){ return 2; }
static int wsize(){ return u2size; }
/*! */
static MTRType type(){ return mtT3; }
// ------------------------------------------
......@@ -176,18 +170,11 @@ namespace MTR
sval = std::string(c);
}
T4( const ModbusRTU::ReadOutputRetMessage& ret ):
raw(ret.data[0])
{
char c[3];
memcpy(c,&(ret.data[0]),sizeof(c));
sval = std::string(c);
}
T4( const ModbusRTU::ReadInputRetMessage& ret ):
raw(ret.data[0])
T4( const ModbusRTU::ModbusData* data ):
raw(data[0])
{
char c[3];
memcpy(c,&(ret.data[0]),sizeof(c));
memcpy(c,&(data[0]),sizeof(c));
sval = std::string(c);
}
......@@ -209,11 +196,7 @@ namespace MTR
/*! */
typedef union
{
struct uT5
{
unsigned short v1;
unsigned short v2;
} u1;
unsigned short v[u2size];
struct u_T5
{
unsigned int val:24;
......@@ -222,31 +205,28 @@ namespace MTR
} T5mem;
// ------------------------------------------
// ...
T5():val(0){ raw.u1.v1 = 0; raw.u1.v2 = 0; }
T5():val(0){ memset(raw.v,0,sizeof(raw.v)); }
T5( unsigned short v1, unsigned short v2 )
{
raw.u1.v1 = v1;
raw.u1.v1 = v2;
raw.v[0] = v1;
raw.v[1] = v2;
val = raw.u2.val * pow(10,raw.u2.exp);
}
T5( const ModbusRTU::ReadOutputRetMessage& ret )
T5( const ModbusRTU::ModbusData* data )
{
raw.u1.v1 = ret.data[0];
raw.u1.v2 = ret.data[1];
val = raw.u2.val * pow(10,raw.u2.exp);
}
T5( const ModbusRTU::ReadInputRetMessage& ret )
if( sizeof(data) >=u2size )
{
raw.u1.v1 = ret.data[0];
raw.u1.v2 = ret.data[1];
for( int i=0; i<u2size; i++ )
raw.v[i] = data[i];
val = raw.u2.val * pow(10,raw.u2.exp);
}
}
~T5(){}
// ------------------------------------------
/*! */
static int wsize(){ return 2; }
static int wsize(){ return u2size; }
/*! */
static MTRType type(){ return mtT5; }
// ------------------------------------------
......@@ -261,11 +241,7 @@ namespace MTR
/*! */
typedef union
{
struct uT6
{
unsigned short v1;
unsigned short v2;
} u1;
unsigned short v[u2size];
struct u_T6
{
signed int val:24;
......@@ -274,31 +250,28 @@ namespace MTR
} T6mem;
// ------------------------------------------
// ...
T6():val(0){ raw.u1.v1 = 0; raw.u1.v2 = 0; }
T6():val(0){ memset(raw.v,0,sizeof(raw.v)); }
T6( unsigned short v1, unsigned short v2 )
{
raw.u1.v1 = v1;
raw.u1.v1 = v2;
raw.v[0] = v1;
raw.v[1] = v2;
val = raw.u2.val * pow(10,raw.u2.exp);
}
T6( const ModbusRTU::ReadOutputRetMessage& ret )
T6( const ModbusRTU::ModbusData* data )
{
raw.u1.v1 = ret.data[0];
raw.u1.v2 = ret.data[1];
val = raw.u2.val * pow(10,raw.u2.exp);
}
T6( const ModbusRTU::ReadInputRetMessage& ret )
if( sizeof(data) >=u2size )
{
raw.u1.v1 = ret.data[0];
raw.u1.v2 = ret.data[1];
for( int i=0; i<u2size; i++ )
raw.v[i] = data[i];
val = raw.u2.val * pow(10,raw.u2.exp);
}
}
~T6(){}
// ------------------------------------------
/*! */
static int wsize(){ return 2; }
static int wsize(){ return u2size; }
/*! */
static MTRType type(){ return mtT6; }
// ------------------------------------------
......@@ -313,11 +286,7 @@ namespace MTR
/*! */
typedef union
{
struct uT7
{
unsigned short v1;
unsigned short v2;
} u1;
unsigned short v[u2size];
struct u_T7
{
unsigned int val:16;
......@@ -327,31 +296,28 @@ namespace MTR
} T7mem;
// ------------------------------------------
// ...
T7():val(0){ raw.u1.v1 = 0; raw.u1.v2 = 0; }
T7():val(0){ memset(raw.v,0,sizeof(raw.v)); }
T7( unsigned short v1, unsigned short v2 )
{
raw.u1.v1 = v1;
raw.u1.v1 = v2;
raw.v[0] = v1;
raw.v[1] = v2;
val = raw.u2.val * pow(10,-4);
}
T7( const ModbusRTU::ReadOutputRetMessage& ret )
T7( const ModbusRTU::ModbusData* data )
{
raw.u1.v1 = ret.data[0];
raw.u1.v2 = ret.data[1];
val = raw.u2.val * pow(10,-4);
}
T7( const ModbusRTU::ReadInputRetMessage& ret )
if( sizeof(data) >=u2size )
{
raw.u1.v1 = ret.data[0];
raw.u1.v2 = ret.data[1];
for( int i=0; i<u2size; i++ )
raw.v[i] = data[i];
val = raw.u2.val * pow(10,-4);
}
}
~T7(){}
// ------------------------------------------
/*! */
static int wsize(){ return 2; }
static int wsize(){ return u2size; }
/*! */
static MTRType type(){ return mtT7; }
// ------------------------------------------
......@@ -366,11 +332,7 @@ namespace MTR
/*! */
typedef union
{
struct uT8
{
unsigned short v1;
unsigned short v2;
} u1;
unsigned short v[u2size];
struct u_T8
{
unsigned short mon:8;
......@@ -381,22 +343,20 @@ namespace MTR
} T8mem;
// ------------------------------------------
// ...
T8(){ raw.u1.v1 = 0; raw.u1.v2 = 0; }
T8(){ memset(raw.v,0,sizeof(raw.v)); }
T8( unsigned short v1, unsigned short v2 )
{
raw.u1.v1 = v1;
raw.u1.v1 = v2;
raw.v[0] = v1;
raw.v[1] = v2;
}
T8( const ModbusRTU::ReadOutputRetMessage& ret )
T8( const ModbusRTU::ModbusData* data )
{
raw.u1.v1 = ret.data[0];
raw.u1.v2 = ret.data[1];
}
T8( const ModbusRTU::ReadInputRetMessage& ret )
if( sizeof(data) >=u2size )
{
raw.u1.v1 = ret.data[0];
raw.u1.v2 = ret.data[1];
for( int i=0; i<u2size; i++ )
raw.v[i] = data[i];
}
}
inline unsigned short day(){ return raw.u2.day; }
......@@ -407,7 +367,7 @@ namespace MTR
~T8(){}
// ------------------------------------------
/*! */
static int wsize(){ return 2; }
static int wsize(){ return u2size; }
/*! */
static MTRType type(){ return mtT8; }
// ------------------------------------------
......@@ -421,11 +381,7 @@ namespace MTR
/*! */
typedef union
{
struct uT9
{
unsigned short v1;
unsigned short v2;
} u1;
unsigned short v[u2size];
struct u_T9
{
unsigned short hour:8;
......@@ -436,22 +392,20 @@ namespace MTR
} T9mem;
// ------------------------------------------
// ...
T9(){ raw.u1.v1 = 0; raw.u1.v2 = 0; }
T9(){ memset(raw.v,0,sizeof(raw.v)); }
T9( unsigned short v1, unsigned short v2 )
{
raw.u1.v1 = v1;
raw.u1.v1 = v2;
raw.v[0] = v1;
raw.v[1] = v2;
}
T9( const ModbusRTU::ReadOutputRetMessage& ret )
T9( const ModbusRTU::ModbusData* data )
{
raw.u1.v1 = ret.data[0];
raw.u1.v2 = ret.data[1];
}
T9( const ModbusRTU::ReadInputRetMessage& ret )
if( sizeof(data) >=u2size )
{
raw.u1.v1 = ret.data[0];
raw.u1.v2 = ret.data[1];
for( int i=0; i<u2size; i++ )
raw.v[i] = data[i];
}
}
inline unsigned short hour(){ return raw.u2.hour; }
......@@ -462,7 +416,7 @@ namespace MTR
~T9(){}
// ------------------------------------------
/*! */
static int wsize(){ return 2; }
static int wsize(){ return u2size; }
/*! */
static MTRType type(){ return mtT9; }
// ------------------------------------------
......@@ -476,37 +430,31 @@ namespace MTR
/*! */
typedef union
{
struct uF1
{
unsigned short v1;
unsigned short v2;
} u;
unsigned short v[2];
float val; //
} F1mem;
// ------------------------------------------
// ...
F1(){ raw.u.v1 = 0; raw.u.v2 = 0; }
F1(){ memset(raw.v,0,sizeof(raw.v)); }
F1( unsigned short v1, unsigned short v2 )
{
raw.u.v1 = v1;
raw.u.v1 = v2;
raw.v[0] = v1;
raw.v[1] = v2;
}
F1( const ModbusRTU::ReadOutputRetMessage& ret )
F1( const ModbusRTU::ModbusData* data )
{
raw.u.v1 = ret.data[0];
raw.u.v2 = ret.data[1];
}
F1( const ModbusRTU::ReadInputRetMessage& ret )
if( sizeof(data) >=u2size )
{
raw.u.v1 = ret.data[0];
raw.u.v2 = ret.data[1];
for( int i=0; i<u2size; i++ )
raw.v[i] = data[i];
}
}
~F1(){}
// ------------------------------------------
/*! */
static int wsize(){ return 2; }
static int wsize(){ return u2size; }
/*! */
static MTRType type(){ return mtF1; }
// ------------------------------------------
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment