Commit 21d51161 authored by Pavel Vainerman's avatar Pavel Vainerman

add new MTR type of variable: T16 and T17

parent 7f5124ec
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
Name: libuniset Name: libuniset
Version: 0.98 Version: 0.98
Release: eter6 Release: eter7
Summary: UniSet - library for building distributed industrial control systems Summary: UniSet - library for building distributed industrial control systems
License: GPL License: GPL
Group: Development/C++ Group: Development/C++
......
...@@ -2046,7 +2046,37 @@ void MBTCPMaster::updateMTR( RegMap::iterator& rit ) ...@@ -2046,7 +2046,37 @@ void MBTCPMaster::updateMTR( RegMap::iterator& rit )
} }
continue; continue;
} }
if( r->mtrType == MTR::mtT16 )
{
if( save )
{
MTR::T16 t(IOBase::processingFasAO( &(*it), shm, force_out ));
r->mbval = t.val;
}
else
{
MTR::T16 t(r->mbval);
IOBase::processingFasAI( &(*it), t.fval, shm, force );
}
continue;
}
if( r->mtrType == MTR::mtT17 )
{
if( save )
{
MTR::T17 t(IOBase::processingFasAO( &(*it), shm, force_out ));
r->mbval = t.val;
}
else
{
MTR::T17 t(r->mbval);
IOBase::processingFasAI( &(*it), t.fval, shm, force );
}
continue;
}
if( r->mtrType == MTR::mtF1 ) if( r->mtrType == MTR::mtF1 )
{ {
RegMap::iterator i(rit); RegMap::iterator i(rit);
......
...@@ -25,8 +25,6 @@ rs_pre_clean(false), ...@@ -25,8 +25,6 @@ rs_pre_clean(false),
noQueryOptimization(false), noQueryOptimization(false),
allNotRespond(false) allNotRespond(false)
{ {
cout << "$Id: RTUExchange.cc,v 1.4 2009/01/23 23:56:54 vpashka Exp $" << endl;
if( objId == DefaultObjectId ) if( objId == DefaultObjectId )
throw UniSetTypes::SystemError("(RTUExchange): objId=-1?!! Use --rs-name" ); throw UniSetTypes::SystemError("(RTUExchange): objId=-1?!! Use --rs-name" );
...@@ -2119,6 +2117,36 @@ void RTUExchange::updateMTR( RegMap::iterator& rit ) ...@@ -2119,6 +2117,36 @@ void RTUExchange::updateMTR( RegMap::iterator& rit )
} }
continue; continue;
} }
if( r->mtrType == MTR::mtT16 )
{
if( save )
{
MTR::T16 t(IOBase::processingFasAO( &(*it), shm, force_out ));
r->mbval = t.val;
}
else
{
MTR::T16 t(r->mbval);
IOBase::processingFasAI( &(*it), t.fval, shm, force );
}
continue;
}
if( r->mtrType == MTR::mtT17 )
{
if( save )
{
MTR::T17 t(IOBase::processingFasAO( &(*it), shm, force_out ));
r->mbval = t.val;
}
else
{
MTR::T17 t(r->mbval);
IOBase::processingFasAI( &(*it), t.fval, shm, force );
}
continue;
}
if( r->mtrType == MTR::mtF1 ) if( r->mtrType == MTR::mtF1 )
{ {
......
...@@ -11,7 +11,7 @@ using namespace MTR; ...@@ -11,7 +11,7 @@ using namespace MTR;
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
static void print_help() static void print_help()
{ {
printf("Usage: mtrconv TYPE[T1...T12] hex1 hex2\n"); printf("Usage: mtrconv TYPE[T1...T12,T16,T17] hex1 hex2\n");
} }
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
int main( int argc, const char **argv ) int main( int argc, const char **argv )
...@@ -40,6 +40,16 @@ int main( int argc, const char **argv ) ...@@ -40,6 +40,16 @@ int main( int argc, const char **argv )
cout << "(T1): v1=" << v1 << " --> (unsigned) " << v1 << endl; cout << "(T1): v1=" << v1 << " --> (unsigned) " << v1 << endl;
else if( !strcmp(type,"T2") ) else if( !strcmp(type,"T2") )
cout << "(T2): v1=" << v1 << " --> (signed) " << (signed short)v1 << endl; cout << "(T2): v1=" << v1 << " --> (signed) " << (signed short)v1 << endl;
else if( !strcmp(type,"T16") )
{
T16 t(v1);
cout << "(T16): v1=" << t.val << " float=" << t.fval << endl;
}
else if( !strcmp(type,"T17") )
{
T17 t(v1);
cout << "(T17): v1=" << t.val << " float=" << t.fval << endl;
}
else if( !strcmp(type,"T3") ) else if( !strcmp(type,"T3") )
{ {
T3 t(v1,v2); T3 t(v1,v2);
......
...@@ -29,6 +29,8 @@ namespace MTR ...@@ -29,6 +29,8 @@ namespace MTR
mtT7, mtT7,
mtT8, mtT8,
mtT9, mtT9,
mtT16,
mtT17,
mtF1, mtF1,
mtT_Str16, mtT_Str16,
mtT_Str8 mtT_Str8
...@@ -462,6 +464,72 @@ namespace MTR ...@@ -462,6 +464,72 @@ namespace MTR
// ------------------------------------------ // ------------------------------------------
T9mem raw; T9mem raw;
}; };
// -------------------------------------------------------------------------
class T16
{
public:
T16():val(0){}
T16( unsigned short v ):val(v)
{
fval = (float)(val)/100.0;
}
T16( const ModbusRTU::ModbusData* data ):val(data[0])
{
fval = (float)(val)/100.0;
}
T16( float f ):fval(f)
{
val = lroundf(fval*100);
}
~T16(){}
// ------------------------------------------
/*! размер в словах */
static int wsize(){ return 1; }
/*! тип значения */
static MTRType type(){ return mtT16; }
// ------------------------------------------
operator float(){ return fval; }
operator unsigned short(){ return val; }
unsigned short val;
float fval;
};
// --------------------------------------------------------------------------
class T17
{
public:
T17():val(0){}
T17( signed short v ):val(v)
{
fval = (float)(v)/100.0;
}
T17( unsigned short v ):val(v)
{
fval = (float)( (signed short)(v) )/100.0;
}
T17( const ModbusRTU::ModbusData* data ):val(data[0])
{
fval = (float)(val)/100.0;
}
T17( float f ):fval(f)
{
val = lroundf(fval*100);
}
~T17(){}
// ------------------------------------------
/*! размер в словах */
static int wsize(){ return 1; }
/*! тип значения */
static MTRType type(){ return mtT17; }
// ------------------------------------------
operator float(){ return fval; }
operator signed short(){ return val; }
signed short val;
float fval;
};
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
class F1 class F1
{ {
......
...@@ -34,6 +34,10 @@ MTRType str2type( const std::string s ) ...@@ -34,6 +34,10 @@ MTRType str2type( const std::string s )
return mtT8; return mtT8;
if( s == "T9" ) if( s == "T9" )
return mtT9; return mtT9;
if( s == "T16" )
return mtT16;
if( s == "T17" )
return mtT17;
if( s == "F1" ) if( s == "F1" )
return mtF1; return mtF1;
if( s == "T_Str16" ) if( s == "T_Str16" )
...@@ -64,6 +68,10 @@ string type2str( MTRType t ) ...@@ -64,6 +68,10 @@ string type2str( MTRType t )
return "T8"; return "T8";
if( t == mtT9 ) if( t == mtT9 )
return "T9"; return "T9";
if( t == mtT16 )
return "T16";
if( t == mtT17 )
return "T17";
if( t == mtF1 ) if( t == mtF1 )
return "F1"; return "F1";
if( t == mtT_Str16 ) if( t == mtT_Str16 )
...@@ -94,6 +102,10 @@ int wsize( MTRType t ) ...@@ -94,6 +102,10 @@ int wsize( MTRType t )
return T8::wsize(); return T8::wsize();
if( t == mtT9 ) if( t == mtT9 )
return T9::wsize(); return T9::wsize();
if( t == mtT16 )
return T16::wsize();
if( t == mtT17 )
return T17::wsize();
if( t == mtF1 ) if( t == mtF1 )
return F1::wsize(); return F1::wsize();
if( t == mtT_Str16 ) if( t == mtT_Str16 )
......
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