diff -c ./old/modbus_daq.cpp ./new/modbus_daq.cpp
*** ./old/modbus_daq.cpp	2012-04-06 16:47:45.000000000 +0400
--- ./new/modbus_daq.cpp	2012-06-08 13:07:30.000000000 +0400
***************
*** 77,82 ****
--- 77,83 ----
      fldAdd(new TFld("TM_REST",_("Restore timeout (s)"),TFld::Integer,TFld::NoFlag,"3","30","0;3600"));
      fldAdd(new TFld("REQ_TRY",_("Request tries"),TFld::Integer,TFld::NoFlag,"1","1","1;10"));
      fldAdd(new TFld("MAX_BLKSZ",_("Maximum request block size (bytes)"),TFld::Integer,TFld::NoFlag,"3","200","2;250"));
+     fldAdd(new TFld("REV_WORDORDER",_("Use reverse word order"),TFld::Boolean,TFld::NoFlag,"1","0"));
  
      //> Parameter type bd structure
      //>> Standard parameter type by symple attributes list
***************
*** 115,121 ****
  	mPrior(cfg("PRIOR").getId()), mNode(cfg("NODE").getId()),
  	mMerge(cfg("FRAG_MERGE").getBd()), mMltWr(cfg("WR_MULTI").getBd()), reqTm(cfg("TM_REQ").getId()),
  	restTm(cfg("TM_REST").getId()), connTry(cfg("REQ_TRY").getId()), blkMaxSz(cfg("MAX_BLKSZ").getId()),
! 	mSched(cfg("SCHEDULE")), mPrt(cfg("PROT")), mAddr(cfg("ADDR")),
  	prc_st(false), call_st(false), endrun_req(false), isReload(false),
  	tmGath(0), tmDelay(-1), numRReg(0), numRRegIn(0), numRCoil(0), numRCoilIn(0), numWReg(0), numWCoil(0), numErrCon(0), numErrResp(0)
  {
--- 116,122 ----
  	mPrior(cfg("PRIOR").getId()), mNode(cfg("NODE").getId()),
  	mMerge(cfg("FRAG_MERGE").getBd()), mMltWr(cfg("WR_MULTI").getBd()), reqTm(cfg("TM_REQ").getId()),
  	restTm(cfg("TM_REST").getId()), connTry(cfg("REQ_TRY").getId()), blkMaxSz(cfg("MAX_BLKSZ").getId()),
!     mSched(cfg("SCHEDULE")), mPrt(cfg("PROT")), mAddr(cfg("ADDR")),mRevWdOrd(cfg("REV_WORDORDER").getBd()),
  	prc_st(false), call_st(false), endrun_req(false), isReload(false),
  	tmGath(0), tmDelay(-1), numRReg(0), numRRegIn(0), numRCoil(0), numRCoilIn(0), numWReg(0), numWCoil(0), numErrCon(0), numErrResp(0)
  {
***************
*** 365,371 ****
  	    int vl2 = getValR(strtol(TSYS::strParse(aids,1,",").c_str(),NULL,0), w_err, isInputs);
  	    if(vl == EVAL_INT || vl2 == EVAL_INT) return EVAL_REAL;
  	    union { uint32_t i; float f; } wl;
! 	    wl.i = ((vl2&0xffff)<<16) | (vl&0xffff);
  	    return wl.f;
  	}
  	else if(!atp_sub.empty() && atp_sub == "i2") return (int)((vl==EVAL_INT)?EVAL_INT:(int16_t)vl);
--- 366,375 ----
  	    int vl2 = getValR(strtol(TSYS::strParse(aids,1,",").c_str(),NULL,0), w_err, isInputs);
  	    if(vl == EVAL_INT || vl2 == EVAL_INT) return EVAL_REAL;
  	    union { uint32_t i; float f; } wl;
!         if (!mRevWdOrd)
!             wl.i = ((vl2&0xffff)<<16) | (vl&0xffff);
!         else
!             wl.i = ((vl&0xffff)<<16) | (vl2&0xffff);
  	    return wl.f;
  	}
  	else if(!atp_sub.empty() && atp_sub == "i2") return (int)((vl==EVAL_INT)?EVAL_INT:(int16_t)vl);
***************
*** 373,379 ****
  	{
  	    int vl2 = getValR(strtol(TSYS::strParse(aids,1,",").c_str(),NULL,0), w_err, isInputs);
  	    if(vl == EVAL_INT || vl2 == EVAL_INT) return EVAL_INT;
! 	    return (int)(((vl2&0xffff)<<16)|(vl&0xffff));
  	}
  	else return vl;
      }
--- 377,386 ----
  	{
  	    int vl2 = getValR(strtol(TSYS::strParse(aids,1,",").c_str(),NULL,0), w_err, isInputs);
  	    if(vl == EVAL_INT || vl2 == EVAL_INT) return EVAL_INT;
!         if (!mRevWdOrd)
!             return (int)(((vl2&0xffff)<<16)|(vl&0xffff));
!         else
!             return (int)(((vl&0xffff)<<16)|(vl2&0xffff));
  	}
  	else return vl;
      }
***************
*** 444,459 ****
  	    union { uint32_t i; float f; } wl;
  	    wl.f = val.getR();
  	    map<int,int> regs;
! 	    regs[aid] = wl.i&0xFFFF;
! 	    regs[strtol(TSYS::strParse(aids,1,",").c_str(),NULL,0)] = (wl.i>>16)&0xFFFF;
  	    wrRez = setValRs(regs, w_err);
  	}
  	else if(!atp_sub.empty() && atp_sub == "i4")
  	{
  	    int vl = val.getI();
  	    map<int,int> regs;
! 	    regs[aid] = vl&0xFFFF;
! 	    regs[strtol(TSYS::strSepParse(aids,1,',').c_str(),NULL,0)] = (vl>>16)&0xFFFF;
  	    wrRez = setValRs(regs, w_err);
  	}
  	else wrRez = setValR(val.getI(), aid, w_err);
--- 451,482 ----
  	    union { uint32_t i; float f; } wl;
  	    wl.f = val.getR();
  	    map<int,int> regs;
! 	    if (!mRevWdOrd)
! 	    {
! 			regs[aid] = wl.i&0xFFFF;
! 			regs[strtol(TSYS::strParse(aids,1,",").c_str(),NULL,0)] = (wl.i>>16)&0xFFFF;
! 	    }
! 	    else
! 	    {
! 			regs[strtol(TSYS::strParse(aids,1,",").c_str(),NULL,0)] = wl.i&0xFFFF;
! 			regs[aid] = (wl.i>>16)&0xFFFF;
! 	    }
  	    wrRez = setValRs(regs, w_err);
  	}
  	else if(!atp_sub.empty() && atp_sub == "i4")
  	{
  	    int vl = val.getI();
  	    map<int,int> regs;
! 	    if (!mRevWdOrd)
! 	    {
! 			regs[aid] = vl&0xFFFF;
! 			regs[strtol(TSYS::strSepParse(aids,1,',').c_str(),NULL,0)] = (vl>>16)&0xFFFF;
! 	    }
! 	    else
! 	    {
! 			regs[strtol(TSYS::strSepParse(aids,1,',').c_str(),NULL,0)] = vl&0xFFFF;
! 			regs[aid] = (vl>>16)&0xFFFF;
! 	    }
  	    wrRez = setValRs(regs, w_err);
  	}
  	else wrRez = setValR(val.getI(), aid, w_err);
diff -c ./old/modbus_daq.h ./new/modbus_daq.h
*** ./old/modbus_daq.h	2012-04-06 16:47:45.000000000 +0400
--- ./new/modbus_daq.h	2012-05-31 11:29:48.000000000 +0400
***************
*** 207,213 ****
                  &mPrt,                          //Protocol
                  &mAddr;                         //Transport device address
  	char	&mMerge,			//Fragments of register merge
! 		&mMltWr;			//Use multi-write functions(15,16)
  	int	&reqTm,				//Request timeout in ms
  		&restTm,			//Restore timeout in s
  		&connTry;			//Connections try
--- 207,214 ----
                  &mPrt,                          //Protocol
                  &mAddr;                         //Transport device address
  	char	&mMerge,			//Fragments of register merge
!         &mMltWr,			//Use multi-write functions(15,16)
!         &mRevWdOrd;			//Use reverse byte order
  	int	&reqTm,				//Request timeout in ms
  		&restTm,			//Restore timeout in s
  		&connTry;			//Connections try
diff -c ./old/ru.po ./new/ru.po
*** ./old/ru.po	2012-04-06 16:47:45.000000000 +0400
--- ./new/ru.po	2012-06-08 15:17:03.000000000 +0400
***************
*** 58,63 ****
--- 58,66 ----
  msgid "Maximum request block size (bytes)"
  msgstr "Максимальный размер блока запроса (байты)"
  
+ msgid "Use reverse word order"
+ msgstr "Использовать обратный порядок слов"
+ 
  msgid "Standard"
  msgstr "Стандарт"
  
