Commit a9002edf authored by Pavel Vainerman's avatar Pavel Vainerman

Merge branch 'master' of git.eter:/projects/asu/uniset2

Conflicts: IDL/Processes/IOController_i.idl IDL/UniSetTypes/UniSetManager_i.idl IDL/UniSetTypes/UniSetObject_i.idl IDL/UniSetTypes/UniSetTypes_i.idl TODO Utilities/Admin/admin.cc Utilities/MBTester/MBSlave.cc Utilities/MBTester/MBSlave.h Utilities/MBTester/MBTCPServer.cc Utilities/MBTester/MBTCPServer.h Utilities/MBTester/mbrtuslave.cc Utilities/MBTester/mbrtutester.cc Utilities/MBTester/mbslave.cc Utilities/MBTester/mbtcpserver.cc Utilities/MBTester/mbtcptester.cc Utilities/NullController/NullController.cc Utilities/NullController/NullController.h Utilities/NullController/main.cc Utilities/SImitator/main.cc Utilities/SMonit/smonitor.cc Utilities/SViewer-text/main.cc Utilities/codegen/ctl-cpp-cc-alone-ask.xsl Utilities/codegen/ctl-cpp-cc-ask.xsl Utilities/codegen/ctl-cpp-common.xsl Utilities/codegen/ctl-cpp-main-alone.xsl Utilities/codegen/ctl-cpp-main.xsl Utilities/codegen/skel-main.cc Utilities/codegen/skel.h Utilities/codegen/tests/TestGen.h Utilities/codegen/tests/TestGenAlone.h conf/test.xml configure.ac extensions/DBServer-MySQL/DBServer_MySQL.cc extensions/DBServer-MySQL/DBServer_MySQL.h extensions/DBServer-MySQL/MySQLInterface.cc extensions/DBServer-MySQL/MySQLInterface.h extensions/DBServer-MySQL/main.cc extensions/DBServer-MySQL/test.cc extensions/DBServer-SQLite/DBServer_SQLite.cc extensions/DBServer-SQLite/DBServer_SQLite.h extensions/DBServer-SQLite/SQLiteInterface.cc extensions/DBServer-SQLite/main.cc extensions/DBServer-SQLite/test.cc extensions/IOControl/ComediInterface.cc extensions/IOControl/ComediInterface.h extensions/IOControl/IOControl.cc extensions/IOControl/IOControl.h extensions/IOControl/iocalibr.cc extensions/IOControl/iocontrol.cc extensions/IOControl/iotest.cc extensions/LogicProcessor/Element.cc extensions/LogicProcessor/Element.h extensions/LogicProcessor/LProcessor.cc extensions/LogicProcessor/LProcessor.h extensions/LogicProcessor/PassiveLProcessor.h extensions/LogicProcessor/Schema.cc extensions/LogicProcessor/Schema.h extensions/LogicProcessor/SchemaXML.cc extensions/LogicProcessor/TAND.cc extensions/LogicProcessor/TDelay.cc extensions/LogicProcessor/TDelay.h extensions/LogicProcessor/TOR.cc extensions/LogicProcessor/plogicproc.cc extensions/ModbusMaster/MBExchange.cc extensions/ModbusMaster/MBExchange.h extensions/ModbusMaster/MBTCPMaster.cc extensions/ModbusMaster/MBTCPMaster.h extensions/ModbusMaster/MBTCPMultiMaster.cc extensions/ModbusMaster/MBTCPMultiMaster.h extensions/ModbusMaster/RTUExchange.cc extensions/ModbusMaster/RTUStorage.cc extensions/ModbusMaster/RTUStorage.h extensions/ModbusMaster/main.cc extensions/ModbusMaster/mtr-conv.cc extensions/ModbusMaster/mtr-read.cc extensions/ModbusMaster/mtr-setup.cc extensions/ModbusMaster/multi-main.cc extensions/ModbusMaster/rtuexchange.cc extensions/ModbusMaster/rtustate.cc extensions/ModbusMaster/vtconv.cc extensions/ModbusSlave/MBSlave.cc extensions/ModbusSlave/MBSlave.h extensions/ModbusSlave/MBTCPMultiSlave.cc extensions/ModbusSlave/mbslave.cc extensions/ModbusSlave/mbtcp-multislave.cc extensions/ModbusSlave/start_tcp_multi_fg.sh extensions/RRDServer/RRDServer.cc extensions/RRDServer/RRDServer.h extensions/RRDServer/main.cc extensions/SMDBServer/SMDBServer.cc extensions/SMDBServer/SMDBServer.h extensions/SMDBServer/main.cc extensions/SMViewer/SMViewer.h extensions/SharedMemory/SharedMemory.cc extensions/SharedMemory/SharedMemory.h extensions/SharedMemory/smemory.cc extensions/SharedMemoryPlus/smemory-plus.cc extensions/UNetUDP/UDPPacket.cc extensions/UNetUDP/UNetExchange.cc extensions/UNetUDP/UNetExchange.h extensions/UNetUDP/UNetReceiver.cc extensions/UNetUDP/UNetReceiver.h extensions/UNetUDP/UNetSender.cc extensions/UNetUDP/UNetSender.h extensions/UNetUDP/unet-udp-tester.cc extensions/UNetUDP/unetexchange.cc extensions/UniNetwork/UniExchange.cc extensions/UniNetwork/UniExchange.h extensions/UniNetwork/uninet.cc extensions/include/Calibration.h extensions/include/DigitalFilter.h extensions/include/Extensions.h extensions/include/IOBase.h extensions/include/MTR.h extensions/include/PID.h extensions/include/SMInterface.h extensions/include/SingleProcess.h extensions/include/VTypes.h extensions/lib/Calibration.cc extensions/lib/Extensions.cc extensions/lib/IOBase.cc extensions/lib/MTR.cc extensions/lib/PID.cc extensions/lib/SMInterface.cc extensions/lib/SingleProcess.cc extensions/lib/UObject_SK.cc extensions/tests/SMemoryTest/TestProc.cc extensions/tests/SMemoryTest/TestProc.h extensions/tests/SMemoryTest/smemory-test.cc extensions/tests/calibration.cc extensions/tests/digitalfilter.cc include/CallBackTimer.h include/ComPort.h include/ComPort485F.h include/Configuration.h include/DBServer.h include/Debug.h include/DebugStream.h include/DelayTimer.h include/Exceptions.h include/HourGlass.h include/IOController.h include/IONotifyController.h include/IORFile.h include/LT_Object.h include/MessageType.h include/Mutex.h include/NCRestorer.h include/ORepHelpers.h include/ObjectIndex.h include/ObjectIndex_Array.h include/ObjectRepository.h include/ObjectRepositoryFactory.h include/OmniThreadCreator.h include/PassiveObject.h include/PassiveTimer.h include/Pulse.h include/Restorer.h include/RunLock.h include/SMonitor.h include/SViewer.h include/ThreadCreator.h include/Trigger.h include/TriggerAND.h include/TriggerOR.h include/TriggerOutput.h include/UInterface.h include/UniSetActivator.h include/UniSetManager_LT.h include/UniSetTypes.h include/UniXML.h include/WDTInterface.h include/modbus/ModbusClient.h include/modbus/ModbusHelpers.h include/modbus/ModbusRTUMaster.h include/modbus/ModbusRTUSlave.h include/modbus/ModbusRTUSlaveSlot.h include/modbus/ModbusServer.h include/modbus/ModbusTCPMaster.h include/modbus/ModbusTCPServer.h include/modbus/ModbusTCPServerSlot.h include/modbus/ModbusTCPSession.h include/modbus/ModbusTypes.h include/modbus/TCPCheck.h python/lib/pyUniSet/Makefile.am python/lib/pyUniSet/PyUInterface.h python/lib/pyUniSet/UConnector.cc python/lib/pyUniSet/UConnector.h python/lib/pyUniSet/UConnector_wrap.cxx python/lib/pyUniSet/UExceptions.h python/lib/pyUniSet/UExceptions_wrap.cxx python/lib/pyUniSet/UInterface_wrap.cxx python/lib/pyUniSet/UModbus.cc python/lib/pyUniSet/UModbus.h python/lib/pyUniSet/UModbus_wrap.cxx python/lib/pyUniSet/UTypes.h python/lib/pyUniSet/pyUModbus.py src/Communications/ComPort.cc src/Communications/ComPort485F.cc src/Communications/Modbus/ModbusClient.cc src/Communications/Modbus/ModbusHelpers.cc src/Communications/Modbus/ModbusRTUMaster.cc src/Communications/Modbus/ModbusRTUSlave.cc src/Communications/Modbus/ModbusRTUSlaveSlot.cc src/Communications/Modbus/ModbusServer.cc src/Communications/Modbus/ModbusTCPCore.cc src/Communications/Modbus/ModbusTCPServer.cc src/Communications/Modbus/ModbusTCPServerSlot.cc src/Communications/Modbus/ModbusTCPSession.cc src/Communications/Modbus/ModbusTCPTypes.cc src/Communications/Modbus/ModbusTypes.cc src/Interfaces/UInterface.cc src/ObjectRepository/IORFile.cc src/ObjectRepository/ORepHelpers.cc src/ObjectRepository/ObjectIndex.cc src/ObjectRepository/ObjectIndex_Array.cc src/ObjectRepository/ObjectIndex_XML.cc src/ObjectRepository/ObjectIndex_idXML.cc src/ObjectRepository/ObjectRepository.cc src/ObjectRepository/ObjectRepositoryFactory.cc src/ObjectRepository/PassiveObject.cc src/ObjectRepository/ProxyManager.cc src/ObjectRepository/UniSetActivator.cc src/ObjectRepository/UniSetManager.cc src/ObjectRepository/UniSetManager_LT.cc src/ObjectRepository/UniSetObject.cc src/ObjectRepository/UniSetObject_LT.cc src/ObjectRepository/UniSetTypes.cc src/Processes/IOController.cc src/Processes/IONotifyController.cc src/Processes/IONotifyController_LT.cc src/Processes/NCRestorer_XML.cc src/Timers/PassiveSysTimer.cc src/Timers/WaitingPassiveTimer.cc src/Various/Configuration.cc src/Various/Debug.cc src/Various/DebugStream.cc src/Various/LT_Object.cc src/Various/Makefile.am src/Various/MessageType.cc src/Various/Mutex.cc src/Various/Restorer_XML.cc src/Various/RunLock.cc src/Various/SMonitor.cc src/Various/SViewer.cc src/Various/UniXML.cc src/Various/WDTInterface.cc tests/UniXmlTest/XmlTest.cc tests/calibration.cc tests/conftest.cc tests/delaytimer.cc tests/dlog.cc tests/hourglass.cc tests/iterator_test.cc tests/passivetimer.cc tests/threadtst.cc tests/ui.cc tests/umutex.cc tests/unixml.cc
parents c6a97f32 23478b23
...@@ -29,9 +29,9 @@ int main( int argc, const char** argv ) ...@@ -29,9 +29,9 @@ int main( int argc, const char** argv )
string logfilename(conf->getArgParam("--smdbserver-logfile")); string logfilename(conf->getArgParam("--smdbserver-logfile"));
if( logfilename.empty() ) if( logfilename.empty() )
logfilename = "smdbserver.log"; logfilename = "smdbserver.log";
conf->initDebug(dlog,"dlog"); conf->initDebug(dlog,"dlog");
std::ostringstream logname; std::ostringstream logname;
string dir(conf->getLogDir()); string dir(conf->getLogDir());
logname << dir << logfilename; logname << dir << logfilename;
...@@ -61,7 +61,7 @@ int main( int argc, const char** argv ) ...@@ -61,7 +61,7 @@ int main( int argc, const char** argv )
UniSetActivator act; UniSetActivator act;
act.addObject(static_cast<class UniSetObject*>(db)); act.addObject(static_cast<class UniSetObject*>(db));
SystemMessage sm(SystemMessage::StartUp); SystemMessage sm(SystemMessage::StartUp);
act.broadcast( sm.transport_msg() ); act.broadcast( sm.transport_msg() );
ulog << "\n\n\n"; ulog << "\n\n\n";
......
...@@ -28,3 +28,4 @@ bin_PROGRAMS = @PACKAGE@-smemory-plus ...@@ -28,3 +28,4 @@ bin_PROGRAMS = @PACKAGE@-smemory-plus
$(SIGC_CFLAGS) $(COMCPP_CFLAGS) $(SIGC_CFLAGS) $(COMCPP_CFLAGS)
@PACKAGE@_smemory_plus_SOURCES = smemory-plus.cc @PACKAGE@_smemory_plus_SOURCES = smemory-plus.cc
...@@ -23,18 +23,18 @@ ...@@ -23,18 +23,18 @@
- \ref pgUNetUDP_Reserv - \ref pgUNetUDP_Reserv
\section pgUNetUDP_Common Общее описание \section pgUNetUDP_Common Общее описание
Обмен построен на основе протокола UDP. Обмен построен на основе протокола UDP.
Основная идея заключается в том, что каждый узел на порту равном своему ID Основная идея заключается в том, что каждый узел на порту равном своему ID
посылает в сеть UDP-пакеты содержащие данные считанные из локальной SM. Формат данных - это набор посылает в сеть UDP-пакеты содержащие данные считанные из локальной SM. Формат данных - это набор
пар [id,value]. Другие узлы принимают их. Помимо этого данный процесс запускает пар [id,value]. Другие узлы принимают их. Помимо этого данный процесс запускает
по потоку приёма для каждого другого узла и ловит пакеты от них, сохраняя данные в SM. по потоку приёма для каждого другого узла и ловит пакеты от них, сохраняя данные в SM.
\par \par
При своём старте процесс считывает из секции \<nodes> список узлов которые необходимо "слушать", При своём старте процесс считывает из секции \<nodes> список узлов которые необходимо "слушать",
а также параметры своего узла. Открывает по потоку приёма на каждый узел и поток а также параметры своего узла. Открывает по потоку приёма на каждый узел и поток
передачи для своих данных. Помимо этого такие же потоки для резервных каналов, если они включены передачи для своих данных. Помимо этого такие же потоки для резервных каналов, если они включены
(см. \ref pgUNetUDP_Reserv ). (см. \ref pgUNetUDP_Reserv ).
\section pgUNetUDP_Conf Пример конфигурирования \section pgUNetUDP_Conf Пример конфигурирования
По умолчанию при считывании используется \b unet_broadcast_ip (указанный в секции \<nodes>) По умолчанию при считывании используется \b unet_broadcast_ip (указанный в секции \<nodes>)
и \b id узла - в качестве порта. и \b id узла - в качестве порта.
...@@ -55,22 +55,22 @@ ...@@ -55,22 +55,22 @@
\section pgUNetUDP_Reserv Настройка резервного канала связи \section pgUNetUDP_Reserv Настройка резервного канала связи
В текущей реализации поддерживается возможность обмена по двум подсетям (эзернет-каналам). В текущей реализации поддерживается возможность обмена по двум подсетям (эзернет-каналам).
Она основана на том, что, для каждого узла помимо основного "читателя", Она основана на том, что, для каждого узла помимо основного "читателя",
создаётся дополнительный "читатель"(поток) слушающий другой ip-адрес и порт. создаётся дополнительный "читатель"(поток) слушающий другой ip-адрес и порт.
А так же, для локального узла создаётся дополнительный "писатель"(поток), А так же, для локального узла создаётся дополнительный "писатель"(поток),
который посылает данные в (указанную) вторую подсеть. Для того, чтобы задействовать который посылает данные в (указанную) вторую подсеть. Для того, чтобы задействовать
второй канал, достаточно объявить в настройках переменные второй канал, достаточно объявить в настройках переменные
\b unet_broadcast_ip2. А также в случае необходимости для конкретного узла \b unet_broadcast_ip2. А также в случае необходимости для конкретного узла
можно указать \b unet_broadcast_ip2 и \b unet_port2. можно указать \b unet_broadcast_ip2 и \b unet_port2.
Переключение между "каналами" происходит по следующей логике: Переключение между "каналами" происходит по следующей логике:
При старте включается только первый канал. Второй канал работает в режиме "пассивного" чтения. При старте включается только первый канал. Второй канал работает в режиме "пассивного" чтения.
Т.е. все пакеты принимаются, но данные в SharedMemory не сохраняются. Т.е. все пакеты принимаются, но данные в SharedMemory не сохраняются.
Если во время работы пропадает связь по первому каналу, идёт переключение на второй канал. Если во время работы пропадает связь по первому каналу, идёт переключение на второй канал.
Первый канал переводиться в "пассивный" режим, а второй канал, переводится в "нормальный"(активный) Первый канал переводиться в "пассивный" режим, а второй канал, переводится в "нормальный"(активный)
режим. Далее работа ведётся по второму каналу, независимо от того, что связь на первом режим. Далее работа ведётся по второму каналу, независимо от того, что связь на первом
канале может восстановиться. Это сделано для защиты от постоянных перескакиваний канале может восстановиться. Это сделано для защиты от постоянных перескакиваний
с канала на канал. Работа на втором канале будет вестись, пока не пропадёт связь с канала на канал. Работа на втором канале будет вестись, пока не пропадёт связь
на нём. Тогда будет попытка переключиться обратно на первый канал и так "по кругу". на нём. Тогда будет попытка переключиться обратно на первый канал и так "по кругу".
В свою очередь "писатели"(если они не отключены) всегда посылают данные в оба канала. В свою очередь "писатели"(если они не отключены) всегда посылают данные в оба канала.
...@@ -158,8 +158,8 @@ class UNetExchange: ...@@ -158,8 +158,8 @@ class UNetExchange:
void step( SMInterface* shm, const std::string& myname ); void step( SMInterface* shm, const std::string& myname );
inline void setRespondID( UniSetTypes::ObjectId id, bool invert=false ) inline void setRespondID( UniSetTypes::ObjectId id, bool invert=false )
{ {
sidRespond = id; sidRespond = id;
respondInvert = invert; respondInvert = invert;
} }
inline void setLostPacketsID( UniSetTypes::ObjectId id ){ sidLostPackets = id; } inline void setLostPacketsID( UniSetTypes::ObjectId id ){ sidLostPackets = id; }
......
...@@ -28,7 +28,7 @@ namespace UniSetExtensions ...@@ -28,7 +28,7 @@ namespace UniSetExtensions
dcrit << err.str() << endl; dcrit << err.str() << endl;
throw SystemError(err.str()); throw SystemError(err.str());
} }
// cout << "(uniset): shm=" << name << " id=" << shmID << endl; // cout << "(uniset): shm=" << name << " id=" << shmID << endl;
return shmID; return shmID;
} }
...@@ -39,7 +39,7 @@ namespace UniSetExtensions ...@@ -39,7 +39,7 @@ namespace UniSetExtensions
return; return;
string::size_type pos = s.find("\\n"); string::size_type pos = s.find("\\n");
while( pos != string::npos ) while( pos != string::npos )
{ {
s.replace(pos,2,"\n"); s.replace(pos,2,"\n");
...@@ -53,10 +53,10 @@ namespace UniSetExtensions ...@@ -53,10 +53,10 @@ namespace UniSetExtensions
{ {
if( xmlCalibrationsNode ) if( xmlCalibrationsNode )
return xmlCalibrationsNode; return xmlCalibrationsNode;
xmlCalibrationsNode = conf->getNode("Calibrations"); xmlCalibrationsNode = conf->getNode("Calibrations");
return xmlCalibrationsNode; return xmlCalibrationsNode;
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
...@@ -64,7 +64,7 @@ namespace UniSetExtensions ...@@ -64,7 +64,7 @@ namespace UniSetExtensions
{ {
if( !node ) if( !node )
return 0; return 0;
UniXML_iterator it(node); UniXML_iterator it(node);
if( !it.goChildren() ) if( !it.goChildren() )
return 0; return 0;
......
../../../conf/test.xml
\ No newline at end of file
...@@ -33,20 +33,20 @@ ...@@ -33,20 +33,20 @@
unlock() - удаляет файл. unlock() - удаляет файл.
\warning Код не переносимый, т.к. рассчитан на наличие каталога /proc, \warning Код не переносимый, т.к. рассчитан на наличие каталога /proc,
по которому проверяется статус процесса (по pid). по которому проверяется статус процесса (по pid).
*/ */
class RunLock class RunLock
{ {
public: public:
RunLock(); RunLock();
~RunLock(); ~RunLock();
static bool isLocked(const std::string& lockFile); //, char* **argv ); static bool isLocked(const std::string& lockFile); //, char* **argv );
static bool lock(const std::string& lockFile); static bool lock(const std::string& lockFile);
static bool unlock(const std::string& lockFile); static bool unlock(const std::string& lockFile);
protected: protected:
}; };
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
#endif #endif
...@@ -31,7 +31,7 @@ ...@@ -31,7 +31,7 @@
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
/*! /*!
Реализация базового класса с использованием локальных таймеров Реализация базового класса с использованием локальных таймеров
*/ */
class UniSetManager_LT: class UniSetManager_LT:
public UniSetManager public UniSetManager
{ {
......
...@@ -10,8 +10,8 @@ class ModbusRTUMaster; ...@@ -10,8 +10,8 @@ class ModbusRTUMaster;
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
namespace ModbusHelpers namespace ModbusHelpers
{ {
ModbusRTU::ModbusAddr autodetectSlave( ModbusRTUMaster* m, ModbusRTU::ModbusAddr autodetectSlave( ModbusRTUMaster* m,
ModbusRTU::ModbusAddr beg=0, ModbusRTU::ModbusAddr beg=0,
ModbusRTU::ModbusAddr end=255, ModbusRTU::ModbusAddr end=255,
ModbusRTU::ModbusData reg=0, ModbusRTU::ModbusData reg=0,
ModbusRTU::SlaveFunctionCode fn=ModbusRTU::fnReadInputRegisters ModbusRTU::SlaveFunctionCode fn=ModbusRTU::fnReadInputRegisters
...@@ -19,7 +19,7 @@ namespace ModbusHelpers ...@@ -19,7 +19,7 @@ namespace ModbusHelpers
ModbusRTU::ModbusAddr autodetectSlave( std::string dev, ModbusRTU::ModbusAddr autodetectSlave( std::string dev,
ComPort::Speed s, int tout=1000, ComPort::Speed s, int tout=1000,
ModbusRTU::ModbusAddr beg=0, ModbusRTU::ModbusAddr beg=0,
ModbusRTU::ModbusAddr end=255, ModbusRTU::ModbusAddr end=255,
ModbusRTU::ModbusData reg=0, ModbusRTU::ModbusData reg=0,
ModbusRTU::SlaveFunctionCode fn=ModbusRTU::fnReadInputRegisters ModbusRTU::SlaveFunctionCode fn=ModbusRTU::fnReadInputRegisters
...@@ -31,7 +31,7 @@ namespace ModbusHelpers ...@@ -31,7 +31,7 @@ namespace ModbusHelpers
); // throw UniSetTypes::TimeOut(); ); // throw UniSetTypes::TimeOut();
ComPort::Speed autodetectSpeed( std::string dev, ComPort::Speed autodetectSpeed( std::string dev,
ModbusRTU::ModbusAddr slave, ModbusRTU::ModbusAddr slave,
int timeout_msec=1000, int timeout_msec=1000,
ModbusRTU::ModbusData reg=0, ModbusRTU::ModbusData reg=0,
ModbusRTU::SlaveFunctionCode fn=ModbusRTU::fnReadInputRegisters ModbusRTU::SlaveFunctionCode fn=ModbusRTU::fnReadInputRegisters
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
#include "ModbusTypes.h" #include "ModbusTypes.h"
#include "ModbusClient.h" #include "ModbusClient.h"
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
/*! Modbus RTU master mode /*! Modbus RTU master mode
\todo Добавить ведение статистики по ошибкам \todo Добавить ведение статистики по ошибкам
*/ */
class ModbusRTUMaster: class ModbusRTUMaster:
...@@ -37,11 +37,11 @@ class ModbusRTUMaster: ...@@ -37,11 +37,11 @@ class ModbusRTUMaster:
protected: protected:
/*! get next data block from channel ot recv buffer /*! get next data block from channel ot recv buffer
\param begin - get from position \param begin - get from position
\param buf - buffer for data \param buf - buffer for data
\param len - size of buf \param len - size of buf
\return real data lenght ( must be <= len ) \return real data lenght ( must be <= len )
*/ */
virtual int getNextData( unsigned char* buf, int len ) override; virtual int getNextData( unsigned char* buf, int len ) override;
...@@ -51,7 +51,7 @@ class ModbusRTUMaster: ...@@ -51,7 +51,7 @@ class ModbusRTUMaster:
virtual ModbusRTU::mbErrCode sendData( unsigned char* buf, int len ) override; virtual ModbusRTU::mbErrCode sendData( unsigned char* buf, int len ) override;
/*! функция запрос-ответ */ /*! функция запрос-ответ */
virtual ModbusRTU::mbErrCode query( ModbusRTU::ModbusAddr addr, ModbusRTU::ModbusMessage& msg, virtual ModbusRTU::mbErrCode query( ModbusRTU::ModbusAddr addr, ModbusRTU::ModbusMessage& msg,
ModbusRTU::ModbusMessage& reply, timeout_t timeout ) override; ModbusRTU::ModbusMessage& reply, timeout_t timeout ) override;
......
...@@ -11,11 +11,11 @@ ...@@ -11,11 +11,11 @@
#include "ModbusTypes.h" #include "ModbusTypes.h"
#include "ModbusServer.h" #include "ModbusServer.h"
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
/*! Modbus RTU slave mode /*! Modbus RTU slave mode
Класс не самостоятельный и содержит "чисто" виртуальные функции Класс не самостоятельный и содержит "чисто" виртуальные функции
для реализации ответов на запросы. для реализации ответов на запросы.
\todo Разобратся с тем как отвечать на неправильные запросы! \todo Разобратся с тем как отвечать на неправильные запросы!
Формат ответных сообщений!!! Коды ошибок!!! Формат ответных сообщений!!! Коды ошибок!!!
\todo Доработать terminate, чтобы можно было прервать ожидание \todo Доработать terminate, чтобы можно было прервать ожидание
*/ */
......
...@@ -7,10 +7,10 @@ ...@@ -7,10 +7,10 @@
#include "ModbusRTUSlave.h" #include "ModbusRTUSlave.h"
#include "ModbusServerSlot.h" #include "ModbusServerSlot.h"
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
/*! /*!
Реализация позволяющая добавлять обработчики не наследуясь от ModbusRTUSlave. Реализация позволяющая добавлять обработчики не наследуясь от ModbusRTUSlave.
Основана на использовании слотов. Основана на использовании слотов.
\warning Пока реализована возможность подключения ТОЛЬКО ОДНОГО обработчика \warning Пока реализована возможность подключения ТОЛЬКО ОДНОГО обработчика
*/ */
class ModbusRTUSlaveSlot: class ModbusRTUSlaveSlot:
public ModbusRTUSlave, public ModbusRTUSlave,
...@@ -24,51 +24,51 @@ class ModbusRTUSlaveSlot: ...@@ -24,51 +24,51 @@ class ModbusRTUSlaveSlot:
virtual void sigterm( int signo ); virtual void sigterm( int signo );
inline ComPort* getComPort(){ return port; } inline ComPort* getComPort(){ return port; }
protected: protected:
virtual ModbusRTU::mbErrCode readCoilStatus( ModbusRTU::ReadCoilMessage& query, virtual ModbusRTU::mbErrCode readCoilStatus( ModbusRTU::ReadCoilMessage& query,
ModbusRTU::ReadCoilRetMessage& reply ); ModbusRTU::ReadCoilRetMessage& reply );
virtual ModbusRTU::mbErrCode readInputStatus( ModbusRTU::ReadInputStatusMessage& query, virtual ModbusRTU::mbErrCode readInputStatus( ModbusRTU::ReadInputStatusMessage& query,
ModbusRTU::ReadInputStatusRetMessage& reply ); ModbusRTU::ReadInputStatusRetMessage& reply );
virtual ModbusRTU::mbErrCode readOutputRegisters( ModbusRTU::ReadOutputMessage& query, virtual ModbusRTU::mbErrCode readOutputRegisters( ModbusRTU::ReadOutputMessage& query,
ModbusRTU::ReadOutputRetMessage& reply ); ModbusRTU::ReadOutputRetMessage& reply );
virtual ModbusRTU::mbErrCode readInputRegisters( ModbusRTU::ReadInputMessage& query, virtual ModbusRTU::mbErrCode readInputRegisters( ModbusRTU::ReadInputMessage& query,
ModbusRTU::ReadInputRetMessage& reply ); ModbusRTU::ReadInputRetMessage& reply );
virtual ModbusRTU::mbErrCode forceSingleCoil( ModbusRTU::ForceSingleCoilMessage& query, virtual ModbusRTU::mbErrCode forceSingleCoil( ModbusRTU::ForceSingleCoilMessage& query,
ModbusRTU::ForceSingleCoilRetMessage& reply ); ModbusRTU::ForceSingleCoilRetMessage& reply );
virtual ModbusRTU::mbErrCode writeOutputSingleRegister( ModbusRTU::WriteSingleOutputMessage& query, virtual ModbusRTU::mbErrCode writeOutputSingleRegister( ModbusRTU::WriteSingleOutputMessage& query,
ModbusRTU::WriteSingleOutputRetMessage& reply ); ModbusRTU::WriteSingleOutputRetMessage& reply );
virtual ModbusRTU::mbErrCode forceMultipleCoils( ModbusRTU::ForceCoilsMessage& query, virtual ModbusRTU::mbErrCode forceMultipleCoils( ModbusRTU::ForceCoilsMessage& query,
ModbusRTU::ForceCoilsRetMessage& reply ); ModbusRTU::ForceCoilsRetMessage& reply );
virtual ModbusRTU::mbErrCode writeOutputRegisters( ModbusRTU::WriteOutputMessage& query, virtual ModbusRTU::mbErrCode writeOutputRegisters( ModbusRTU::WriteOutputMessage& query,
ModbusRTU::WriteOutputRetMessage& reply ); ModbusRTU::WriteOutputRetMessage& reply );
virtual ModbusRTU::mbErrCode diagnostics( ModbusRTU::DiagnosticMessage& query, virtual ModbusRTU::mbErrCode diagnostics( ModbusRTU::DiagnosticMessage& query,
ModbusRTU::DiagnosticRetMessage& reply ); ModbusRTU::DiagnosticRetMessage& reply );
virtual ModbusRTU::mbErrCode read4314( ModbusRTU::MEIMessageRDI& query, virtual ModbusRTU::mbErrCode read4314( ModbusRTU::MEIMessageRDI& query,
ModbusRTU::MEIMessageRetRDI& reply ); ModbusRTU::MEIMessageRetRDI& reply );
virtual ModbusRTU::mbErrCode journalCommand( ModbusRTU::JournalCommandMessage& query, virtual ModbusRTU::mbErrCode journalCommand( ModbusRTU::JournalCommandMessage& query,
ModbusRTU::JournalCommandRetMessage& reply ); ModbusRTU::JournalCommandRetMessage& reply );
virtual ModbusRTU::mbErrCode setDateTime( ModbusRTU::SetDateTimeMessage& query, virtual ModbusRTU::mbErrCode setDateTime( ModbusRTU::SetDateTimeMessage& query,
ModbusRTU::SetDateTimeRetMessage& reply ); ModbusRTU::SetDateTimeRetMessage& reply );
virtual ModbusRTU::mbErrCode remoteService( ModbusRTU::RemoteServiceMessage& query, virtual ModbusRTU::mbErrCode remoteService( ModbusRTU::RemoteServiceMessage& query,
ModbusRTU::RemoteServiceRetMessage& reply ); ModbusRTU::RemoteServiceRetMessage& reply );
virtual ModbusRTU::mbErrCode fileTransfer( ModbusRTU::FileTransferMessage& query, virtual ModbusRTU::mbErrCode fileTransfer( ModbusRTU::FileTransferMessage& query,
ModbusRTU::FileTransferRetMessage& reply ); ModbusRTU::FileTransferRetMessage& reply );
private: private:
}; };
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
......
...@@ -21,7 +21,7 @@ class ModbusServer ...@@ -21,7 +21,7 @@ class ModbusServer
void setLog( DebugStream& dlog ); void setLog( DebugStream& dlog );
/*! обработать очередное сообщение /*! обработать очередное сообщение
\param addr - адрес для которого принимать сообщения \param addr - адрес для которого принимать сообщения
\param msecTimeout - время ожидания прихода очередного сообщения в мсек. \param msecTimeout - время ожидания прихода очередного сообщения в мсек.
\return Возвращает код ошибки из ModbusRTU::mbErrCode \return Возвращает код ошибки из ModbusRTU::mbErrCode
...@@ -29,7 +29,7 @@ class ModbusServer ...@@ -29,7 +29,7 @@ class ModbusServer
virtual ModbusRTU::mbErrCode receive( ModbusRTU::ModbusAddr addr, timeout_t msecTimeout )=0; virtual ModbusRTU::mbErrCode receive( ModbusRTU::ModbusAddr addr, timeout_t msecTimeout )=0;
/*! Установка паузы после посылки /*! Установка паузы после посылки
\return старое значение \return старое значение
*/ */
timeout_t setAfterSendPause( timeout_t msec ); timeout_t setAfterSendPause( timeout_t msec );
...@@ -57,18 +57,18 @@ class ModbusServer ...@@ -57,18 +57,18 @@ class ModbusServer
/*! Вспомогательная функция реализующая обработку запроса на установку времени. /*! Вспомогательная функция реализующая обработку запроса на установку времени.
Основана на использовании gettimeofday и settimeofday. Основана на использовании gettimeofday и settimeofday.
*/ */
static ModbusRTU::mbErrCode replySetDateTime( ModbusRTU::SetDateTimeMessage& query, static ModbusRTU::mbErrCode replySetDateTime( ModbusRTU::SetDateTimeMessage& query,
ModbusRTU::SetDateTimeRetMessage& reply, ModbusRTU::SetDateTimeRetMessage& reply,
DebugStream* dlog=0 ); DebugStream* dlog=0 );
/*! Вспомогательная функция реализующая обработку передачи файла /*! Вспомогательная функция реализующая обработку передачи файла
\param fname - запрашиваемый файл. \param fname - запрашиваемый файл.
\param query - запрос \param query - запрос
\param reply - ответ \param reply - ответ
*/ */
static ModbusRTU::mbErrCode replyFileTransfer( const std::string& fname, static ModbusRTU::mbErrCode replyFileTransfer( const std::string& fname,
ModbusRTU::FileTransferMessage& query, ModbusRTU::FileTransferMessage& query,
ModbusRTU::FileTransferRetMessage& reply, ModbusRTU::FileTransferRetMessage& reply,
DebugStream* dlog=0 ); DebugStream* dlog=0 );
...@@ -82,14 +82,14 @@ class ModbusServer ...@@ -82,14 +82,14 @@ class ModbusServer
\param reply - ответ. Заполняется в обработчике. \param reply - ответ. Заполняется в обработчике.
\return Результат обработки \return Результат обработки
*/ */
virtual ModbusRTU::mbErrCode readCoilStatus( ModbusRTU::ReadCoilMessage& query, virtual ModbusRTU::mbErrCode readCoilStatus( ModbusRTU::ReadCoilMessage& query,
ModbusRTU::ReadCoilRetMessage& reply )=0; ModbusRTU::ReadCoilRetMessage& reply )=0;
/*! Обработка запроса на чтение данных (0x02). /*! Обработка запроса на чтение данных (0x02).
\param query - запрос \param query - запрос
\param reply - ответ. Заполняется в обработчике. \param reply - ответ. Заполняется в обработчике.
\return Результат обработки \return Результат обработки
*/ */
virtual ModbusRTU::mbErrCode readInputStatus( ModbusRTU::ReadInputStatusMessage& query, virtual ModbusRTU::mbErrCode readInputStatus( ModbusRTU::ReadInputStatusMessage& query,
ModbusRTU::ReadInputStatusRetMessage& reply )=0; ModbusRTU::ReadInputStatusRetMessage& reply )=0;
/*! Обработка запроса на чтение данных (0x03). /*! Обработка запроса на чтение данных (0x03).
...@@ -97,7 +97,7 @@ class ModbusServer ...@@ -97,7 +97,7 @@ class ModbusServer
\param reply - ответ. Заполняется в обработчике. \param reply - ответ. Заполняется в обработчике.
\return Результат обработки \return Результат обработки
*/ */
virtual ModbusRTU::mbErrCode readOutputRegisters( ModbusRTU::ReadOutputMessage& query, virtual ModbusRTU::mbErrCode readOutputRegisters( ModbusRTU::ReadOutputMessage& query,
ModbusRTU::ReadOutputRetMessage& reply )=0; ModbusRTU::ReadOutputRetMessage& reply )=0;
/*! Обработка запроса на чтение данных (0x04). /*! Обработка запроса на чтение данных (0x04).
...@@ -105,7 +105,7 @@ class ModbusServer ...@@ -105,7 +105,7 @@ class ModbusServer
\param reply - ответ. Заполняется в обработчике. \param reply - ответ. Заполняется в обработчике.
\return Результат обработки \return Результат обработки
*/ */
virtual ModbusRTU::mbErrCode readInputRegisters( ModbusRTU::ReadInputMessage& query, virtual ModbusRTU::mbErrCode readInputRegisters( ModbusRTU::ReadInputMessage& query,
ModbusRTU::ReadInputRetMessage& reply )=0; ModbusRTU::ReadInputRetMessage& reply )=0;
/*! Обработка запроса на запись данных (0x05). /*! Обработка запроса на запись данных (0x05).
...@@ -113,7 +113,7 @@ class ModbusServer ...@@ -113,7 +113,7 @@ class ModbusServer
\param reply - ответ. Заполняется в обработчике. \param reply - ответ. Заполняется в обработчике.
\return Результат обработки \return Результат обработки
*/ */
virtual ModbusRTU::mbErrCode forceSingleCoil( ModbusRTU::ForceSingleCoilMessage& query, virtual ModbusRTU::mbErrCode forceSingleCoil( ModbusRTU::ForceSingleCoilMessage& query,
ModbusRTU::ForceSingleCoilRetMessage& reply )=0; ModbusRTU::ForceSingleCoilRetMessage& reply )=0;
...@@ -122,7 +122,7 @@ class ModbusServer ...@@ -122,7 +122,7 @@ class ModbusServer
\param reply - ответ. Заполняется в обработчике. \param reply - ответ. Заполняется в обработчике.
\return Результат обработки \return Результат обработки
*/ */
virtual ModbusRTU::mbErrCode writeOutputSingleRegister( ModbusRTU::WriteSingleOutputMessage& query, virtual ModbusRTU::mbErrCode writeOutputSingleRegister( ModbusRTU::WriteSingleOutputMessage& query,
ModbusRTU::WriteSingleOutputRetMessage& reply )=0; ModbusRTU::WriteSingleOutputRetMessage& reply )=0;
/*! Обработка запроса на запись данных (0x0F). /*! Обработка запроса на запись данных (0x0F).
...@@ -130,7 +130,7 @@ class ModbusServer ...@@ -130,7 +130,7 @@ class ModbusServer
\param reply - ответ. Заполняется в обработчике. \param reply - ответ. Заполняется в обработчике.
\return Результат обработки \return Результат обработки
*/ */
virtual ModbusRTU::mbErrCode forceMultipleCoils( ModbusRTU::ForceCoilsMessage& query, virtual ModbusRTU::mbErrCode forceMultipleCoils( ModbusRTU::ForceCoilsMessage& query,
ModbusRTU::ForceCoilsRetMessage& reply )=0; ModbusRTU::ForceCoilsRetMessage& reply )=0;
/*! Обработка запроса на запись данных (0x10). /*! Обработка запроса на запись данных (0x10).
...@@ -138,16 +138,16 @@ class ModbusServer ...@@ -138,16 +138,16 @@ class ModbusServer
\param reply - ответ. Заполняется в обработчике. \param reply - ответ. Заполняется в обработчике.
\return Результат обработки \return Результат обработки
*/ */
virtual ModbusRTU::mbErrCode writeOutputRegisters( ModbusRTU::WriteOutputMessage& query, virtual ModbusRTU::mbErrCode writeOutputRegisters( ModbusRTU::WriteOutputMessage& query,
ModbusRTU::WriteOutputRetMessage& reply )=0; ModbusRTU::WriteOutputRetMessage& reply )=0;
/*! Обработка запроса на запись данных (0x08). /*! Обработка запроса на запись данных (0x08).
\param query - запрос \param query - запрос
\param reply - ответ. Заполняется в обработчике. \param reply - ответ. Заполняется в обработчике.
\return Результат обработки \return Результат обработки
*/ */
virtual ModbusRTU::mbErrCode diagnostics( ModbusRTU::DiagnosticMessage& query, virtual ModbusRTU::mbErrCode diagnostics( ModbusRTU::DiagnosticMessage& query,
ModbusRTU::DiagnosticRetMessage& reply )=0; ModbusRTU::DiagnosticRetMessage& reply )=0;
/*! Обработка запроса 43(0x2B). /*! Обработка запроса 43(0x2B).
...@@ -155,7 +155,7 @@ class ModbusServer ...@@ -155,7 +155,7 @@ class ModbusServer
\param reply - ответ. Заполняется в обработчике. \param reply - ответ. Заполняется в обработчике.
\return Результат обработки \return Результат обработки
*/ */
virtual ModbusRTU::mbErrCode read4314( ModbusRTU::MEIMessageRDI& query, virtual ModbusRTU::mbErrCode read4314( ModbusRTU::MEIMessageRDI& query,
ModbusRTU::MEIMessageRetRDI& reply )=0; ModbusRTU::MEIMessageRetRDI& reply )=0;
...@@ -164,7 +164,7 @@ class ModbusServer ...@@ -164,7 +164,7 @@ class ModbusServer
\param reply - ответ. Заполняется в обработчике. \param reply - ответ. Заполняется в обработчике.
\return Результат обработки \return Результат обработки
*/ */
virtual ModbusRTU::mbErrCode journalCommand( ModbusRTU::JournalCommandMessage& query, virtual ModbusRTU::mbErrCode journalCommand( ModbusRTU::JournalCommandMessage& query,
ModbusRTU::JournalCommandRetMessage& reply )=0; ModbusRTU::JournalCommandRetMessage& reply )=0;
...@@ -173,7 +173,7 @@ class ModbusServer ...@@ -173,7 +173,7 @@ class ModbusServer
\param reply - ответ. Заполняется в обработчике. \param reply - ответ. Заполняется в обработчике.
\return Результат обработки \return Результат обработки
*/ */
virtual ModbusRTU::mbErrCode setDateTime( ModbusRTU::SetDateTimeMessage& query, virtual ModbusRTU::mbErrCode setDateTime( ModbusRTU::SetDateTimeMessage& query,
ModbusRTU::SetDateTimeRetMessage& reply )=0; ModbusRTU::SetDateTimeRetMessage& reply )=0;
...@@ -182,7 +182,7 @@ class ModbusServer ...@@ -182,7 +182,7 @@ class ModbusServer
\param reply - ответ. Заполняется в обработчике. \param reply - ответ. Заполняется в обработчике.
\return Результат обработки \return Результат обработки
*/ */
virtual ModbusRTU::mbErrCode remoteService( ModbusRTU::RemoteServiceMessage& query, virtual ModbusRTU::mbErrCode remoteService( ModbusRTU::RemoteServiceMessage& query,
ModbusRTU::RemoteServiceRetMessage& reply )=0; ModbusRTU::RemoteServiceRetMessage& reply )=0;
...@@ -191,19 +191,19 @@ class ModbusServer ...@@ -191,19 +191,19 @@ class ModbusServer
\param reply - ответ. Заполняется в обработчике. \param reply - ответ. Заполняется в обработчике.
\return Результат обработки \return Результат обработки
*/ */
virtual ModbusRTU::mbErrCode fileTransfer( ModbusRTU::FileTransferMessage& query, virtual ModbusRTU::mbErrCode fileTransfer( ModbusRTU::FileTransferMessage& query,
ModbusRTU::FileTransferRetMessage& reply )=0; ModbusRTU::FileTransferRetMessage& reply )=0;
/*! get next data block from channel ot recv buffer /*! get next data block from channel ot recv buffer
\param begin - get from position \param begin - get from position
\param buf - buffer for data \param buf - buffer for data
\param len - size of buf \param len - size of buf
\return real data lenght ( must be <= len ) \return real data lenght ( must be <= len )
*/ */
virtual int getNextData( unsigned char* buf, int len )=0; virtual int getNextData( unsigned char* buf, int len )=0;
virtual ModbusRTU::mbErrCode sendData( unsigned char* buf, int len )=0; virtual ModbusRTU::mbErrCode sendData( unsigned char* buf, int len )=0;
/*! set timeout for receive data */ /*! set timeout for receive data */
virtual void setChannelTimeout( timeout_t msec )=0; virtual void setChannelTimeout( timeout_t msec )=0;
......
...@@ -39,7 +39,7 @@ class ModbusTCPMaster: ...@@ -39,7 +39,7 @@ class ModbusTCPMaster:
virtual int getNextData( unsigned char* buf, int len ) override; virtual int getNextData( unsigned char* buf, int len ) override;
virtual void setChannelTimeout( timeout_t msec ) override; virtual void setChannelTimeout( timeout_t msec ) override;
virtual ModbusRTU::mbErrCode sendData( unsigned char* buf, int len ) override; virtual ModbusRTU::mbErrCode sendData( unsigned char* buf, int len ) override;
virtual ModbusRTU::mbErrCode query( ModbusRTU::ModbusAddr addr, ModbusRTU::ModbusMessage& msg, virtual ModbusRTU::mbErrCode query( ModbusRTU::ModbusAddr addr, ModbusRTU::ModbusMessage& msg,
ModbusRTU::ModbusMessage& reply, timeout_t timeout ) override; ModbusRTU::ModbusMessage& reply, timeout_t timeout ) override;
private: private:
......
...@@ -26,7 +26,7 @@ class ModbusTCPServer: ...@@ -26,7 +26,7 @@ class ModbusTCPServer:
/*! Однопоточная обработка (каждый запрос последовательно), с разрывом соединения в конце */ /*! Однопоточная обработка (каждый запрос последовательно), с разрывом соединения в конце */
virtual ModbusRTU::mbErrCode receive( ModbusRTU::ModbusAddr mbaddr, timeout_t msecTimeout ) override; virtual ModbusRTU::mbErrCode receive( ModbusRTU::ModbusAddr mbaddr, timeout_t msecTimeout ) override;
/*! Многопоточная обработка (создаётся по потоку для каждого "клиента") /*! Многопоточная обработка (создаётся по потоку для каждого "клиента")
\ return TRUE - если запр*ос пришёл \ return TRUE - если запр*ос пришёл
\return FALSE - если timeout \return FALSE - если timeout
*/ */
......
...@@ -20,46 +20,46 @@ class ModbusTCPServerSlot: ...@@ -20,46 +20,46 @@ class ModbusTCPServerSlot:
protected: protected:
virtual ModbusRTU::mbErrCode readCoilStatus( ModbusRTU::ReadCoilMessage& query, virtual ModbusRTU::mbErrCode readCoilStatus( ModbusRTU::ReadCoilMessage& query,
ModbusRTU::ReadCoilRetMessage& reply ); ModbusRTU::ReadCoilRetMessage& reply );
virtual ModbusRTU::mbErrCode readInputStatus( ModbusRTU::ReadInputStatusMessage& query, virtual ModbusRTU::mbErrCode readInputStatus( ModbusRTU::ReadInputStatusMessage& query,
ModbusRTU::ReadInputStatusRetMessage& reply ); ModbusRTU::ReadInputStatusRetMessage& reply );
virtual ModbusRTU::mbErrCode readOutputRegisters( ModbusRTU::ReadOutputMessage& query, virtual ModbusRTU::mbErrCode readOutputRegisters( ModbusRTU::ReadOutputMessage& query,
ModbusRTU::ReadOutputRetMessage& reply ); ModbusRTU::ReadOutputRetMessage& reply );
virtual ModbusRTU::mbErrCode readInputRegisters( ModbusRTU::ReadInputMessage& query, virtual ModbusRTU::mbErrCode readInputRegisters( ModbusRTU::ReadInputMessage& query,
ModbusRTU::ReadInputRetMessage& reply ); ModbusRTU::ReadInputRetMessage& reply );
virtual ModbusRTU::mbErrCode forceSingleCoil( ModbusRTU::ForceSingleCoilMessage& query, virtual ModbusRTU::mbErrCode forceSingleCoil( ModbusRTU::ForceSingleCoilMessage& query,
ModbusRTU::ForceSingleCoilRetMessage& reply ); ModbusRTU::ForceSingleCoilRetMessage& reply );
virtual ModbusRTU::mbErrCode writeOutputSingleRegister( ModbusRTU::WriteSingleOutputMessage& query, virtual ModbusRTU::mbErrCode writeOutputSingleRegister( ModbusRTU::WriteSingleOutputMessage& query,
ModbusRTU::WriteSingleOutputRetMessage& reply ); ModbusRTU::WriteSingleOutputRetMessage& reply );
virtual ModbusRTU::mbErrCode forceMultipleCoils( ModbusRTU::ForceCoilsMessage& query, virtual ModbusRTU::mbErrCode forceMultipleCoils( ModbusRTU::ForceCoilsMessage& query,
ModbusRTU::ForceCoilsRetMessage& reply ); ModbusRTU::ForceCoilsRetMessage& reply );
virtual ModbusRTU::mbErrCode writeOutputRegisters( ModbusRTU::WriteOutputMessage& query, virtual ModbusRTU::mbErrCode writeOutputRegisters( ModbusRTU::WriteOutputMessage& query,
ModbusRTU::WriteOutputRetMessage& reply ); ModbusRTU::WriteOutputRetMessage& reply );
virtual ModbusRTU::mbErrCode diagnostics( ModbusRTU::DiagnosticMessage& query, virtual ModbusRTU::mbErrCode diagnostics( ModbusRTU::DiagnosticMessage& query,
ModbusRTU::DiagnosticRetMessage& reply ); ModbusRTU::DiagnosticRetMessage& reply );
virtual ModbusRTU::mbErrCode read4314( ModbusRTU::MEIMessageRDI& query, virtual ModbusRTU::mbErrCode read4314( ModbusRTU::MEIMessageRDI& query,
ModbusRTU::MEIMessageRetRDI& reply ); ModbusRTU::MEIMessageRetRDI& reply );
virtual ModbusRTU::mbErrCode journalCommand( ModbusRTU::JournalCommandMessage& query, virtual ModbusRTU::mbErrCode journalCommand( ModbusRTU::JournalCommandMessage& query,
ModbusRTU::JournalCommandRetMessage& reply ); ModbusRTU::JournalCommandRetMessage& reply );
virtual ModbusRTU::mbErrCode setDateTime( ModbusRTU::SetDateTimeMessage& query, virtual ModbusRTU::mbErrCode setDateTime( ModbusRTU::SetDateTimeMessage& query,
ModbusRTU::SetDateTimeRetMessage& reply ); ModbusRTU::SetDateTimeRetMessage& reply );
virtual ModbusRTU::mbErrCode remoteService( ModbusRTU::RemoteServiceMessage& query, virtual ModbusRTU::mbErrCode remoteService( ModbusRTU::RemoteServiceMessage& query,
ModbusRTU::RemoteServiceRetMessage& reply ); ModbusRTU::RemoteServiceRetMessage& reply );
virtual ModbusRTU::mbErrCode fileTransfer( ModbusRTU::FileTransferMessage& query, virtual ModbusRTU::mbErrCode fileTransfer( ModbusRTU::FileTransferMessage& query,
ModbusRTU::FileTransferRetMessage& reply ); ModbusRTU::FileTransferRetMessage& reply );
private: private:
......
...@@ -46,46 +46,46 @@ class ModbusTCPSession: ...@@ -46,46 +46,46 @@ class ModbusTCPSession:
virtual ModbusRTU::mbErrCode post_send_request( ModbusRTU::ModbusMessage& request ); virtual ModbusRTU::mbErrCode post_send_request( ModbusRTU::ModbusMessage& request );
virtual ModbusRTU::mbErrCode readCoilStatus( ModbusRTU::ReadCoilMessage& query, virtual ModbusRTU::mbErrCode readCoilStatus( ModbusRTU::ReadCoilMessage& query,
ModbusRTU::ReadCoilRetMessage& reply ); ModbusRTU::ReadCoilRetMessage& reply );
virtual ModbusRTU::mbErrCode readInputStatus( ModbusRTU::ReadInputStatusMessage& query, virtual ModbusRTU::mbErrCode readInputStatus( ModbusRTU::ReadInputStatusMessage& query,
ModbusRTU::ReadInputStatusRetMessage& reply ); ModbusRTU::ReadInputStatusRetMessage& reply );
virtual ModbusRTU::mbErrCode readOutputRegisters( ModbusRTU::ReadOutputMessage& query, virtual ModbusRTU::mbErrCode readOutputRegisters( ModbusRTU::ReadOutputMessage& query,
ModbusRTU::ReadOutputRetMessage& reply ); ModbusRTU::ReadOutputRetMessage& reply );
virtual ModbusRTU::mbErrCode readInputRegisters( ModbusRTU::ReadInputMessage& query, virtual ModbusRTU::mbErrCode readInputRegisters( ModbusRTU::ReadInputMessage& query,
ModbusRTU::ReadInputRetMessage& reply ); ModbusRTU::ReadInputRetMessage& reply );
virtual ModbusRTU::mbErrCode forceSingleCoil( ModbusRTU::ForceSingleCoilMessage& query, virtual ModbusRTU::mbErrCode forceSingleCoil( ModbusRTU::ForceSingleCoilMessage& query,
ModbusRTU::ForceSingleCoilRetMessage& reply ); ModbusRTU::ForceSingleCoilRetMessage& reply );
virtual ModbusRTU::mbErrCode writeOutputSingleRegister( ModbusRTU::WriteSingleOutputMessage& query, virtual ModbusRTU::mbErrCode writeOutputSingleRegister( ModbusRTU::WriteSingleOutputMessage& query,
ModbusRTU::WriteSingleOutputRetMessage& reply ); ModbusRTU::WriteSingleOutputRetMessage& reply );
virtual ModbusRTU::mbErrCode forceMultipleCoils( ModbusRTU::ForceCoilsMessage& query, virtual ModbusRTU::mbErrCode forceMultipleCoils( ModbusRTU::ForceCoilsMessage& query,
ModbusRTU::ForceCoilsRetMessage& reply ); ModbusRTU::ForceCoilsRetMessage& reply );
virtual ModbusRTU::mbErrCode writeOutputRegisters( ModbusRTU::WriteOutputMessage& query, virtual ModbusRTU::mbErrCode writeOutputRegisters( ModbusRTU::WriteOutputMessage& query,
ModbusRTU::WriteOutputRetMessage& reply ); ModbusRTU::WriteOutputRetMessage& reply );
virtual ModbusRTU::mbErrCode diagnostics( ModbusRTU::DiagnosticMessage& query, virtual ModbusRTU::mbErrCode diagnostics( ModbusRTU::DiagnosticMessage& query,
ModbusRTU::DiagnosticRetMessage& reply ); ModbusRTU::DiagnosticRetMessage& reply );
virtual ModbusRTU::mbErrCode read4314( ModbusRTU::MEIMessageRDI& query, virtual ModbusRTU::mbErrCode read4314( ModbusRTU::MEIMessageRDI& query,
ModbusRTU::MEIMessageRetRDI& reply ); ModbusRTU::MEIMessageRetRDI& reply );
virtual ModbusRTU::mbErrCode journalCommand( ModbusRTU::JournalCommandMessage& query, virtual ModbusRTU::mbErrCode journalCommand( ModbusRTU::JournalCommandMessage& query,
ModbusRTU::JournalCommandRetMessage& reply ); ModbusRTU::JournalCommandRetMessage& reply );
virtual ModbusRTU::mbErrCode setDateTime( ModbusRTU::SetDateTimeMessage& query, virtual ModbusRTU::mbErrCode setDateTime( ModbusRTU::SetDateTimeMessage& query,
ModbusRTU::SetDateTimeRetMessage& reply ); ModbusRTU::SetDateTimeRetMessage& reply );
virtual ModbusRTU::mbErrCode remoteService( ModbusRTU::RemoteServiceMessage& query, virtual ModbusRTU::mbErrCode remoteService( ModbusRTU::RemoteServiceMessage& query,
ModbusRTU::RemoteServiceRetMessage& reply ); ModbusRTU::RemoteServiceRetMessage& reply );
virtual ModbusRTU::mbErrCode fileTransfer( ModbusRTU::FileTransferMessage& query, virtual ModbusRTU::mbErrCode fileTransfer( ModbusRTU::FileTransferMessage& query,
ModbusRTU::FileTransferRetMessage& reply ); ModbusRTU::FileTransferRetMessage& reply );
private: private:
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
#include <list> #include <list>
#include "ModbusRTUErrors.h" #include "ModbusRTUErrors.h"
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
/* Основные предположения: /* Основные предположения:
* - младший и старший байт переворачиваются только в CRC * - младший и старший байт переворачиваются только в CRC
* - В случае неправильного формата пакета(запроса), логической ошибки и т.п * - В случае неправильного формата пакета(запроса), логической ошибки и т.п
* ОТВЕТ просто не посылается, а пакет отбрасывается... * ОТВЕТ просто не посылается, а пакет отбрасывается...
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
namespace ModbusRTU namespace ModbusRTU
{ {
// Базовые типы // Базовые типы
typedef unsigned char ModbusByte; /*!< modbus-байт */ typedef unsigned char ModbusByte; /*!< modbus-байт */
const int BitsPerByte = 8; const int BitsPerByte = 8;
typedef unsigned char ModbusAddr; /*!< адрес узла в modbus-сети */ typedef unsigned char ModbusAddr; /*!< адрес узла в modbus-сети */
...@@ -79,7 +79,7 @@ namespace ModbusRTU ...@@ -79,7 +79,7 @@ namespace ModbusRTU
int szRequestDiagnosticData( DiagnosticsSubFunction f ); int szRequestDiagnosticData( DiagnosticsSubFunction f );
/*! Read Device Identification ObjectID (0x2B/0xE) */ /*! Read Device Identification ObjectID (0x2B/0xE) */
enum RDIObjectID enum RDIObjectID
{ {
rdiVendorName = 0x0, rdiVendorName = 0x0,
rdiProductCode = 0x1, rdiProductCode = 0x1,
...@@ -93,7 +93,7 @@ namespace ModbusRTU ...@@ -93,7 +93,7 @@ namespace ModbusRTU
}; };
/*! Read Device Identification ObjectID (0x2B/0xE) */ /*! Read Device Identification ObjectID (0x2B/0xE) */
enum RDIRequestDeviceID enum RDIRequestDeviceID
{ {
rdevMinNum = 0, rdevMinNum = 0,
rdevBasicDevice = 0x1, // request to get the basic device identification (stream access) rdevBasicDevice = 0x1, // request to get the basic device identification (stream access)
...@@ -153,7 +153,7 @@ namespace ModbusRTU ...@@ -153,7 +153,7 @@ namespace ModbusRTU
std::ostream& operator<<(std::ostream& os, ModbusHeader* m ); std::ostream& operator<<(std::ostream& os, ModbusHeader* m );
// ----------------------------------------------------------------------- // -----------------------------------------------------------------------
/*! Базовое (сырое) сообщение /*! Базовое (сырое) сообщение
\todo Может переименовать ModbusMessage в TransportMessage? \todo Может переименовать ModbusMessage в TransportMessage?
*/ */
struct ModbusMessage: struct ModbusMessage:
...@@ -169,7 +169,7 @@ namespace ModbusRTU ...@@ -169,7 +169,7 @@ namespace ModbusRTU
std::ostream& operator<<(std::ostream& os, ModbusMessage& m ); std::ostream& operator<<(std::ostream& os, ModbusMessage& m );
std::ostream& operator<<(std::ostream& os, ModbusMessage* m ); std::ostream& operator<<(std::ostream& os, ModbusMessage* m );
// ----------------------------------------------------------------------- // -----------------------------------------------------------------------
/*! Ответ сообщающий об ошибке */ /*! Ответ сообщающий об ошибке */
struct ErrorRetMessage: struct ErrorRetMessage:
public ModbusHeader public ModbusHeader
{ {
...@@ -187,14 +187,14 @@ namespace ModbusRTU ...@@ -187,14 +187,14 @@ namespace ModbusRTU
/*! преобразование для посылки в сеть */ /*! преобразование для посылки в сеть */
ModbusMessage transport_msg(); ModbusMessage transport_msg();
/*! размер данных(после заголовка) у данного типа сообщения /*! размер данных(после заголовка) у данного типа сообщения
Для данного типа он постоянный.. Для данного типа он постоянный..
*/ */
inline static int szData(){ return sizeof(ModbusByte)+szCRC; } inline static int szData(){ return sizeof(ModbusByte)+szCRC; }
}; };
std::ostream& operator<<(std::ostream& os, ErrorRetMessage& m ); std::ostream& operator<<(std::ostream& os, ErrorRetMessage& m );
std::ostream& operator<<(std::ostream& os, ErrorRetMessage* m ); std::ostream& operator<<(std::ostream& os, ErrorRetMessage* m );
// ----------------------------------------------------------------------- // -----------------------------------------------------------------------
struct DataBits struct DataBits
{ {
...@@ -213,7 +213,7 @@ namespace ModbusRTU ...@@ -213,7 +213,7 @@ namespace ModbusRTU
}; };
std::ostream& operator<<(std::ostream& os, DataBits& m ); std::ostream& operator<<(std::ostream& os, DataBits& m );
std::ostream& operator<<(std::ostream& os, DataBits* m ); std::ostream& operator<<(std::ostream& os, DataBits* m );
// ----------------------------------------------------------------------- // -----------------------------------------------------------------------
struct DataBits16 struct DataBits16
{ {
...@@ -233,7 +233,7 @@ namespace ModbusRTU ...@@ -233,7 +233,7 @@ namespace ModbusRTU
}; };
std::ostream& operator<<(std::ostream& os, DataBits16& m ); std::ostream& operator<<(std::ostream& os, DataBits16& m );
std::ostream& operator<<(std::ostream& os, DataBits16* m ); std::ostream& operator<<(std::ostream& os, DataBits16* m );
// ----------------------------------------------------------------------- // -----------------------------------------------------------------------
/*! Запрос 0x01 */ /*! Запрос 0x01 */
struct ReadCoilMessage: struct ReadCoilMessage:
...@@ -258,12 +258,12 @@ namespace ModbusRTU ...@@ -258,12 +258,12 @@ namespace ModbusRTU
}__attribute__((packed)); }__attribute__((packed));
std::ostream& operator<<(std::ostream& os, ReadCoilMessage& m ); std::ostream& operator<<(std::ostream& os, ReadCoilMessage& m );
std::ostream& operator<<(std::ostream& os, ReadCoilMessage* m ); std::ostream& operator<<(std::ostream& os, ReadCoilMessage* m );
// ----------------------------------------------------------------------- // -----------------------------------------------------------------------
/*! Ответ на 0x01 */ /*! Ответ на 0x01 */
struct ReadCoilRetMessage: struct ReadCoilRetMessage:
public ModbusHeader public ModbusHeader
{ {
...@@ -274,8 +274,8 @@ namespace ModbusRTU ...@@ -274,8 +274,8 @@ namespace ModbusRTU
ReadCoilRetMessage( ModbusMessage& m ); ReadCoilRetMessage( ModbusMessage& m );
ReadCoilRetMessage& operator=( ModbusMessage& m ); ReadCoilRetMessage& operator=( ModbusMessage& m );
void init( ModbusMessage& m ); void init( ModbusMessage& m );
/*! размер предварительного заголовка /*! размер предварительного заголовка
* (после основного до фактических данных) * (после основного до фактических данных)
*/ */
static inline int szHead() static inline int szHead()
{ {
...@@ -315,7 +315,7 @@ namespace ModbusRTU ...@@ -315,7 +315,7 @@ namespace ModbusRTU
/*! очистка данных */ /*! очистка данных */
void clear(); void clear();
/*! проверка на переполнение */ /*! проверка на переполнение */
inline bool isFull() inline bool isFull()
{ {
return ( (int)bcnt >= MAXLENPACKET ); return ( (int)bcnt >= MAXLENPACKET );
...@@ -331,7 +331,7 @@ namespace ModbusRTU ...@@ -331,7 +331,7 @@ namespace ModbusRTU
std::ostream& operator<<(std::ostream& os, ReadCoilRetMessage& m ); std::ostream& operator<<(std::ostream& os, ReadCoilRetMessage& m );
std::ostream& operator<<(std::ostream& os, ReadCoilRetMessage* m ); std::ostream& operator<<(std::ostream& os, ReadCoilRetMessage* m );
// ----------------------------------------------------------------------- // -----------------------------------------------------------------------
/*! Запрос 0x02 */ /*! Запрос 0x02 */
struct ReadInputStatusMessage: struct ReadInputStatusMessage:
public ModbusHeader public ModbusHeader
{ {
...@@ -354,10 +354,10 @@ namespace ModbusRTU ...@@ -354,10 +354,10 @@ namespace ModbusRTU
}__attribute__((packed)); }__attribute__((packed));
std::ostream& operator<<(std::ostream& os, ReadInputStatusMessage& m ); std::ostream& operator<<(std::ostream& os, ReadInputStatusMessage& m );
std::ostream& operator<<(std::ostream& os, ReadInputStatusMessage* m ); std::ostream& operator<<(std::ostream& os, ReadInputStatusMessage* m );
// ----------------------------------------------------------------------- // -----------------------------------------------------------------------
/*! Ответ на 0x02 */ /*! Ответ на 0x02 */
struct ReadInputStatusRetMessage: struct ReadInputStatusRetMessage:
public ModbusHeader public ModbusHeader
{ {
...@@ -368,8 +368,8 @@ namespace ModbusRTU ...@@ -368,8 +368,8 @@ namespace ModbusRTU
ReadInputStatusRetMessage( ModbusMessage& m ); ReadInputStatusRetMessage( ModbusMessage& m );
ReadInputStatusRetMessage& operator=( ModbusMessage& m ); ReadInputStatusRetMessage& operator=( ModbusMessage& m );
void init( ModbusMessage& m ); void init( ModbusMessage& m );
/*! размер предварительного заголовка /*! размер предварительного заголовка
* (после основного до фактических данных) * (после основного до фактических данных)
*/ */
static inline int szHead() static inline int szHead()
{ {
...@@ -418,7 +418,7 @@ namespace ModbusRTU ...@@ -418,7 +418,7 @@ namespace ModbusRTU
/*! размер данных(после заголовка) у данного типа сообщения */ /*! размер данных(после заголовка) у данного типа сообщения */
size_t szData(); size_t szData();
/*! преобразование для посылки в сеть */ /*! преобразование для посылки в сеть */
ModbusMessage transport_msg(); ModbusMessage transport_msg();
}; };
...@@ -449,10 +449,10 @@ namespace ModbusRTU ...@@ -449,10 +449,10 @@ namespace ModbusRTU
}__attribute__((packed)); }__attribute__((packed));
std::ostream& operator<<(std::ostream& os, ReadOutputMessage& m ); std::ostream& operator<<(std::ostream& os, ReadOutputMessage& m );
std::ostream& operator<<(std::ostream& os, ReadOutputMessage* m ); std::ostream& operator<<(std::ostream& os, ReadOutputMessage* m );
// ----------------------------------------------------------------------- // -----------------------------------------------------------------------
/*! Ответ для 0x03 */ /*! Ответ для 0x03 */
struct ReadOutputRetMessage: struct ReadOutputRetMessage:
public ModbusHeader public ModbusHeader
{ {
...@@ -463,8 +463,8 @@ namespace ModbusRTU ...@@ -463,8 +463,8 @@ namespace ModbusRTU
ReadOutputRetMessage( ModbusMessage& m ); ReadOutputRetMessage( ModbusMessage& m );
ReadOutputRetMessage& operator=( ModbusMessage& m ); ReadOutputRetMessage& operator=( ModbusMessage& m );
void init( ModbusMessage& m ); void init( ModbusMessage& m );
/*! размер предварительного заголовка /*! размер предварительного заголовка
* (после основного до фактических данных) * (после основного до фактических данных)
*/ */
static inline int szHead() static inline int szHead()
{ {
...@@ -501,9 +501,9 @@ namespace ModbusRTU ...@@ -501,9 +501,9 @@ namespace ModbusRTU
ModbusMessage transport_msg(); ModbusMessage transport_msg();
// Это поле не входит в стандарт modbus // Это поле не входит в стандарт modbus
// оно вспомогательное и игнорируется при // оно вспомогательное и игнорируется при
// преобразовании в ModbusMessage. // преобразовании в ModbusMessage.
// Делать что-типа memcpy(buf,this,sizeof(*this)); будет не верно. // Делать что-типа memcpy(buf,this,sizeof(*this)); будет не верно.
// Используйте специальную функцию transport_msg() // Используйте специальную функцию transport_msg()
int count; /*!< фактическое количество данных в сообщении */ int count; /*!< фактическое количество данных в сообщении */
}; };
...@@ -511,7 +511,7 @@ namespace ModbusRTU ...@@ -511,7 +511,7 @@ namespace ModbusRTU
std::ostream& operator<<(std::ostream& os, ReadOutputRetMessage& m ); std::ostream& operator<<(std::ostream& os, ReadOutputRetMessage& m );
std::ostream& operator<<(std::ostream& os, ReadOutputRetMessage* m ); std::ostream& operator<<(std::ostream& os, ReadOutputRetMessage* m );
// ----------------------------------------------------------------------- // -----------------------------------------------------------------------
/*! Запрос 0x04 */ /*! Запрос 0x04 */
struct ReadInputMessage: struct ReadInputMessage:
public ModbusHeader public ModbusHeader
{ {
...@@ -534,8 +534,8 @@ namespace ModbusRTU ...@@ -534,8 +534,8 @@ namespace ModbusRTU
}__attribute__((packed)); }__attribute__((packed));
std::ostream& operator<<(std::ostream& os, ReadInputMessage& m ); std::ostream& operator<<(std::ostream& os, ReadInputMessage& m );
std::ostream& operator<<(std::ostream& os, ReadInputMessage* m ); std::ostream& operator<<(std::ostream& os, ReadInputMessage* m );
// ----------------------------------------------------------------------- // -----------------------------------------------------------------------
/*! Ответ для 0x04 */ /*! Ответ для 0x04 */
...@@ -549,8 +549,8 @@ namespace ModbusRTU ...@@ -549,8 +549,8 @@ namespace ModbusRTU
ReadInputRetMessage( ModbusMessage& m ); ReadInputRetMessage( ModbusMessage& m );
ReadInputRetMessage& operator=( ModbusMessage& m ); ReadInputRetMessage& operator=( ModbusMessage& m );
void init( ModbusMessage& m ); void init( ModbusMessage& m );
/*! размер предварительного заголовка /*! размер предварительного заголовка
* (после основного до фактических данных) * (после основного до фактических данных)
*/ */
static inline int szHead() static inline int szHead()
{ {
...@@ -574,7 +574,7 @@ namespace ModbusRTU ...@@ -574,7 +574,7 @@ namespace ModbusRTU
/*! очистка данных */ /*! очистка данных */
void clear(); void clear();
/*! проверка на переполнение */ /*! проверка на переполнение */
inline bool isFull() inline bool isFull()
{ {
return ( count*sizeof(ModbusData) >= MAXLENPACKET ); return ( count*sizeof(ModbusData) >= MAXLENPACKET );
...@@ -589,9 +589,9 @@ namespace ModbusRTU ...@@ -589,9 +589,9 @@ namespace ModbusRTU
ModbusMessage transport_msg(); ModbusMessage transport_msg();
// Это поле не входит в стандарт modbus // Это поле не входит в стандарт modbus
// оно вспомогательное и игнорируется при // оно вспомогательное и игнорируется при
// преобразовании в ModbusMessage. // преобразовании в ModbusMessage.
// Делать что-типа memcpy(buf,this,sizeof(*this)); будет не верно. // Делать что-типа memcpy(buf,this,sizeof(*this)); будет не верно.
// Используйте специальную функцию transport_msg() // Используйте специальную функцию transport_msg()
int count; /*!< фактическое количество данных в сообщении */ int count; /*!< фактическое количество данных в сообщении */
}; };
...@@ -604,7 +604,7 @@ namespace ModbusRTU ...@@ -604,7 +604,7 @@ namespace ModbusRTU
public ModbusHeader public ModbusHeader
{ {
ModbusData start; /*!< стартовый адрес записи */ ModbusData start; /*!< стартовый адрес записи */
ModbusData quant; /*!< количество записываемых битов */ ModbusData quant; /*!< количество записываемых битов */
ModbusByte bcnt; /*!< количество байт данных */ ModbusByte bcnt; /*!< количество байт данных */
/*! данные */ /*! данные */
ModbusByte data[MAXLENPACKET-sizeof(ModbusData)*2-sizeof(ModbusByte)]; ModbusByte data[MAXLENPACKET-sizeof(ModbusData)*2-sizeof(ModbusByte)];
...@@ -620,13 +620,13 @@ namespace ModbusRTU ...@@ -620,13 +620,13 @@ namespace ModbusRTU
* \return FALSE - если НЕ удалось * \return FALSE - если НЕ удалось
*/ */
bool addData( DataBits d ); bool addData( DataBits d );
// return number of bit // return number of bit
// -1 - error // -1 - error
int addBit( bool state ); int addBit( bool state );
bool setBit( int nbit, bool state ); bool setBit( int nbit, bool state );
inline int last(){ return quant; } inline int last(){ return quant; }
/*! получение данных. /*! получение данных.
...@@ -636,7 +636,7 @@ namespace ModbusRTU ...@@ -636,7 +636,7 @@ namespace ModbusRTU
* \return FALSE - если НЕ найдено * \return FALSE - если НЕ найдено
*/ */
bool getData( unsigned char dnum, DataBits& d ); bool getData( unsigned char dnum, DataBits& d );
bool getBit( unsigned char bnum ); bool getBit( unsigned char bnum );
void clear(); void clear();
...@@ -645,7 +645,7 @@ namespace ModbusRTU ...@@ -645,7 +645,7 @@ namespace ModbusRTU
return ( (int)bcnt >= MAXLENPACKET ); return ( (int)bcnt >= MAXLENPACKET );
} }
// ------- from master ------- // ------- from master -------
ForceCoilsMessage( ModbusMessage& m ); ForceCoilsMessage( ModbusMessage& m );
ForceCoilsMessage& operator=( ModbusMessage& m ); ForceCoilsMessage& operator=( ModbusMessage& m );
void init( ModbusMessage& m ); void init( ModbusMessage& m );
...@@ -653,29 +653,29 @@ namespace ModbusRTU ...@@ -653,29 +653,29 @@ namespace ModbusRTU
/*! размер данных(после заголовка) у данного типа сообщения */ /*! размер данных(после заголовка) у данного типа сообщения */
size_t szData(); size_t szData();
/*! размер предварительного заголовка /*! размер предварительного заголовка
* (после основного до фактических данных) * (после основного до фактических данных)
*/ */
static inline int szHead() static inline int szHead()
{ {
// start + quant + count // start + quant + count
return sizeof(ModbusData)*2+sizeof(ModbusByte); return sizeof(ModbusData)*2+sizeof(ModbusByte);
} }
/*! узнать длину данных следующий за предварительным заголовком ( в байтах ) */ /*! узнать длину данных следующий за предварительным заголовком ( в байтах ) */
static int getDataLen( ModbusMessage& m ); static int getDataLen( ModbusMessage& m );
/*! проверка корректности данных /*! проверка корректности данных
что quant и bcnt - совпадают... что quant и bcnt - совпадают...
*/ */
bool checkFormat(); bool checkFormat();
}__attribute__((packed)); }__attribute__((packed));
std::ostream& operator<<(std::ostream& os, ForceCoilsMessage& m ); std::ostream& operator<<(std::ostream& os, ForceCoilsMessage& m );
std::ostream& operator<<(std::ostream& os, ForceCoilsMessage* m ); std::ostream& operator<<(std::ostream& os, ForceCoilsMessage* m );
// ----------------------------------------------------------------------- // -----------------------------------------------------------------------
/*! Ответ для запроса на запись 0x0F */ /*! Ответ для запроса на запись 0x0F */
struct ForceCoilsRetMessage: struct ForceCoilsRetMessage:
public ModbusHeader public ModbusHeader
{ {
...@@ -687,9 +687,9 @@ namespace ModbusRTU ...@@ -687,9 +687,9 @@ namespace ModbusRTU
ForceCoilsRetMessage( ModbusMessage& m ); ForceCoilsRetMessage( ModbusMessage& m );
ForceCoilsRetMessage& operator=( ModbusMessage& m ); ForceCoilsRetMessage& operator=( ModbusMessage& m );
void init( ModbusMessage& m ); void init( ModbusMessage& m );
// ------- to master ------- // ------- to master -------
/*! /*!
* \param _from - адрес отправителя * \param _from - адрес отправителя
* \param start - записанный регистр * \param start - записанный регистр
* \param quant - количество записанных слов * \param quant - количество записанных слов
...@@ -699,25 +699,25 @@ namespace ModbusRTU ...@@ -699,25 +699,25 @@ namespace ModbusRTU
/*! записать данные */ /*! записать данные */
void set( ModbusData start, ModbusData quant ); void set( ModbusData start, ModbusData quant );
/*! преобразование для посылки в сеть */ /*! преобразование для посылки в сеть */
ModbusMessage transport_msg(); ModbusMessage transport_msg();
/*! размер данных(после заголовка) у данного типа сообщения /*! размер данных(после заголовка) у данного типа сообщения
Для данного типа он постоянный.. Для данного типа он постоянный..
*/ */
inline static int szData(){ return sizeof(ModbusData)*2+sizeof(ModbusCRC); } inline static int szData(){ return sizeof(ModbusData)*2+sizeof(ModbusCRC); }
}; };
std::ostream& operator<<(std::ostream& os, ForceCoilsRetMessage& m ); std::ostream& operator<<(std::ostream& os, ForceCoilsRetMessage& m );
std::ostream& operator<<(std::ostream& os, ForceCoilsRetMessage* m ); std::ostream& operator<<(std::ostream& os, ForceCoilsRetMessage* m );
// ----------------------------------------------------------------------- // -----------------------------------------------------------------------
/*! Запрос на запись 0x10 */ /*! Запрос на запись 0x10 */
struct WriteOutputMessage: struct WriteOutputMessage:
public ModbusHeader public ModbusHeader
{ {
ModbusData start; /*!< стартовый адрес записи */ ModbusData start; /*!< стартовый адрес записи */
ModbusData quant; /*!< количество слов данных */ ModbusData quant; /*!< количество слов данных */
ModbusByte bcnt; /*!< количество байт данных */ ModbusByte bcnt; /*!< количество байт данных */
/*! данные */ /*! данные */
ModbusData data[MAXLENPACKET/sizeof(ModbusData)-sizeof(ModbusData)*2-sizeof(ModbusByte)]; ModbusData data[MAXLENPACKET/sizeof(ModbusData)-sizeof(ModbusData)*2-sizeof(ModbusByte)];
...@@ -730,12 +730,12 @@ namespace ModbusRTU ...@@ -730,12 +730,12 @@ namespace ModbusRTU
bool addData( ModbusData d ); bool addData( ModbusData d );
void clear(); void clear();
inline bool isFull() inline bool isFull()
{ {
return ( quant*sizeof(ModbusData) >= MAXLENPACKET ); return ( quant*sizeof(ModbusData) >= MAXLENPACKET );
} }
// ------- from master ------- // ------- from master -------
WriteOutputMessage( ModbusMessage& m ); WriteOutputMessage( ModbusMessage& m );
WriteOutputMessage& operator=( ModbusMessage& m ); WriteOutputMessage& operator=( ModbusMessage& m );
void init( ModbusMessage& m ); void init( ModbusMessage& m );
...@@ -743,30 +743,30 @@ namespace ModbusRTU ...@@ -743,30 +743,30 @@ namespace ModbusRTU
/*! размер данных(после заголовка) у данного типа сообщения */ /*! размер данных(после заголовка) у данного типа сообщения */
size_t szData(); size_t szData();
/*! размер предварительного заголовка /*! размер предварительного заголовка
* (после основного до фактических данных) * (после основного до фактических данных)
*/ */
static inline int szHead() static inline int szHead()
{ {
// start + quant + count // start + quant + count
return sizeof(ModbusData)*2+sizeof(ModbusByte); return sizeof(ModbusData)*2+sizeof(ModbusByte);
} }
/*! узнать длину данных следующий за предварительным заголовком ( в байтах ) */ /*! узнать длину данных следующий за предварительным заголовком ( в байтах ) */
static int getDataLen( ModbusMessage& m ); static int getDataLen( ModbusMessage& m );
/*! проверка корректности данных /*! проверка корректности данных
что quant и bcnt - совпадают... что quant и bcnt - совпадают...
*/ */
bool checkFormat(); bool checkFormat();
}__attribute__((packed)); }__attribute__((packed));
std::ostream& operator<<(std::ostream& os, WriteOutputMessage& m ); std::ostream& operator<<(std::ostream& os, WriteOutputMessage& m );
std::ostream& operator<<(std::ostream& os, WriteOutputMessage* m ); std::ostream& operator<<(std::ostream& os, WriteOutputMessage* m );
/*! Ответ для запроса на запись 0x10 */ /*! Ответ для запроса на запись 0x10 */
struct WriteOutputRetMessage: struct WriteOutputRetMessage:
public ModbusHeader public ModbusHeader
{ {
...@@ -780,7 +780,7 @@ namespace ModbusRTU ...@@ -780,7 +780,7 @@ namespace ModbusRTU
ModbusCRC crc; ModbusCRC crc;
// ------- to master ------- // ------- to master -------
/*! /*!
* \param _from - адрес отправителя * \param _from - адрес отправителя
* \param start - записанный регистр * \param start - записанный регистр
* \param quant - количество записанных слов * \param quant - количество записанных слов
...@@ -790,19 +790,19 @@ namespace ModbusRTU ...@@ -790,19 +790,19 @@ namespace ModbusRTU
/*! записать данные */ /*! записать данные */
void set( ModbusData start, ModbusData quant ); void set( ModbusData start, ModbusData quant );
/*! преобразование для посылки в сеть */ /*! преобразование для посылки в сеть */
ModbusMessage transport_msg(); ModbusMessage transport_msg();
/*! размер данных(после заголовка) у данного типа сообщения /*! размер данных(после заголовка) у данного типа сообщения
Для данного типа он постоянный.. Для данного типа он постоянный..
*/ */
inline static int szData(){ return sizeof(ModbusData)*2+sizeof(ModbusCRC); } inline static int szData(){ return sizeof(ModbusData)*2+sizeof(ModbusCRC); }
}; };
std::ostream& operator<<(std::ostream& os, WriteOutputRetMessage& m ); std::ostream& operator<<(std::ostream& os, WriteOutputRetMessage& m );
std::ostream& operator<<(std::ostream& os, WriteOutputRetMessage* m ); std::ostream& operator<<(std::ostream& os, WriteOutputRetMessage* m );
// ----------------------------------------------------------------------- // -----------------------------------------------------------------------
/*! Запрос 0x05 */ /*! Запрос 0x05 */
struct ForceSingleCoilMessage: struct ForceSingleCoilMessage:
public ModbusHeader public ModbusHeader
{ {
...@@ -821,7 +821,7 @@ namespace ModbusRTU ...@@ -821,7 +821,7 @@ namespace ModbusRTU
ForceSingleCoilMessage( ModbusAddr addr, ModbusData reg, bool state ); ForceSingleCoilMessage( ModbusAddr addr, ModbusData reg, bool state );
/*! преобразование для посылки в сеть */ /*! преобразование для посылки в сеть */
ModbusMessage transport_msg(); ModbusMessage transport_msg();
// ------- from master ------- // ------- from master -------
ForceSingleCoilMessage( ModbusMessage& m ); ForceSingleCoilMessage( ModbusMessage& m );
ForceSingleCoilMessage& operator=( ModbusMessage& m ); ForceSingleCoilMessage& operator=( ModbusMessage& m );
...@@ -830,20 +830,20 @@ namespace ModbusRTU ...@@ -830,20 +830,20 @@ namespace ModbusRTU
/*! размер данных(после заголовка) у данного типа сообщения */ /*! размер данных(после заголовка) у данного типа сообщения */
size_t szData(); size_t szData();
/*! размер предварительного заголовка /*! размер предварительного заголовка
* (после основного до фактических данных) * (после основного до фактических данных)
*/ */
static inline int szHead() static inline int szHead()
{ {
return sizeof(ModbusData); return sizeof(ModbusData);
} }
/*! узнать длину данных следующий за /*! узнать длину данных следующий за
предварительным заголовком ( в байтах ) предварительным заголовком ( в байтах )
*/ */
static int getDataLen( ModbusMessage& m ); static int getDataLen( ModbusMessage& m );
/*! проверка корректности данных /*! проверка корректности данных
что quant и bcnt - совпадают... что quant и bcnt - совпадают...
*/ */
bool checkFormat(); bool checkFormat();
...@@ -854,7 +854,7 @@ namespace ModbusRTU ...@@ -854,7 +854,7 @@ namespace ModbusRTU
std::ostream& operator<<(std::ostream& os, ForceSingleCoilMessage* m ); std::ostream& operator<<(std::ostream& os, ForceSingleCoilMessage* m );
// ----------------------------------------------------------------------- // -----------------------------------------------------------------------
/*! Ответ для запроса 0x05 */ /*! Ответ для запроса 0x05 */
struct ForceSingleCoilRetMessage: struct ForceSingleCoilRetMessage:
public ModbusHeader public ModbusHeader
{ {
...@@ -869,7 +869,7 @@ namespace ModbusRTU ...@@ -869,7 +869,7 @@ namespace ModbusRTU
void init( ModbusMessage& m ); void init( ModbusMessage& m );
// ------- to master ------- // ------- to master -------
/*! /*!
* \param _from - адрес отправителя * \param _from - адрес отправителя
* \param start - записанный регистр * \param start - записанный регистр
*/ */
...@@ -878,20 +878,20 @@ namespace ModbusRTU ...@@ -878,20 +878,20 @@ namespace ModbusRTU
/*! записать данные */ /*! записать данные */
void set( ModbusData start, bool cmd ); void set( ModbusData start, bool cmd );
/*! преобразование для посылки в сеть */ /*! преобразование для посылки в сеть */
ModbusMessage transport_msg(); ModbusMessage transport_msg();
/*! размер данных(после заголовка) у данного типа сообщения /*! размер данных(после заголовка) у данного типа сообщения
Для данного типа он постоянный.. Для данного типа он постоянный..
*/ */
inline static int szData(){ return 2*sizeof(ModbusData)+sizeof(ModbusCRC); } inline static int szData(){ return 2*sizeof(ModbusData)+sizeof(ModbusCRC); }
}; };
std::ostream& operator<<(std::ostream& os, ForceSingleCoilRetMessage& m ); std::ostream& operator<<(std::ostream& os, ForceSingleCoilRetMessage& m );
std::ostream& operator<<(std::ostream& os, ForceSingleCoilRetMessage* m ); std::ostream& operator<<(std::ostream& os, ForceSingleCoilRetMessage* m );
// ----------------------------------------------------------------------- // -----------------------------------------------------------------------
/*! Запрос на запись одного регистра 0x06 */ /*! Запрос на запись одного регистра 0x06 */
struct WriteSingleOutputMessage: struct WriteSingleOutputMessage:
public ModbusHeader public ModbusHeader
{ {
...@@ -904,7 +904,7 @@ namespace ModbusRTU ...@@ -904,7 +904,7 @@ namespace ModbusRTU
WriteSingleOutputMessage( ModbusAddr addr, ModbusData reg=0, ModbusData data=0 ); WriteSingleOutputMessage( ModbusAddr addr, ModbusData reg=0, ModbusData data=0 );
/*! преобразование для посылки в сеть */ /*! преобразование для посылки в сеть */
ModbusMessage transport_msg(); ModbusMessage transport_msg();
// ------- from master ------- // ------- from master -------
WriteSingleOutputMessage( ModbusMessage& m ); WriteSingleOutputMessage( ModbusMessage& m );
WriteSingleOutputMessage& operator=( ModbusMessage& m ); WriteSingleOutputMessage& operator=( ModbusMessage& m );
...@@ -913,20 +913,20 @@ namespace ModbusRTU ...@@ -913,20 +913,20 @@ namespace ModbusRTU
/*! размер данных(после заголовка) у данного типа сообщения */ /*! размер данных(после заголовка) у данного типа сообщения */
size_t szData(); size_t szData();
/*! размер предварительного заголовка /*! размер предварительного заголовка
* (после основного до фактических данных) * (после основного до фактических данных)
*/ */
static inline int szHead() static inline int szHead()
{ {
return sizeof(ModbusData); return sizeof(ModbusData);
} }
/*! узнать длину данных следующий за /*! узнать длину данных следующий за
предварительным заголовком ( в байтах ) предварительным заголовком ( в байтах )
*/ */
static int getDataLen( ModbusMessage& m ); static int getDataLen( ModbusMessage& m );
/*! проверка корректности данных /*! проверка корректности данных
что quant и bcnt - совпадают... что quant и bcnt - совпадают...
*/ */
bool checkFormat(); bool checkFormat();
...@@ -937,7 +937,7 @@ namespace ModbusRTU ...@@ -937,7 +937,7 @@ namespace ModbusRTU
std::ostream& operator<<(std::ostream& os, WriteSingleOutputMessage* m ); std::ostream& operator<<(std::ostream& os, WriteSingleOutputMessage* m );
// ----------------------------------------------------------------------- // -----------------------------------------------------------------------
/*! Ответ для запроса на запись */ /*! Ответ для запроса на запись */
struct WriteSingleOutputRetMessage: struct WriteSingleOutputRetMessage:
public ModbusHeader public ModbusHeader
{ {
...@@ -952,7 +952,7 @@ namespace ModbusRTU ...@@ -952,7 +952,7 @@ namespace ModbusRTU
void init( ModbusMessage& m ); void init( ModbusMessage& m );
// ------- to master ------- // ------- to master -------
/*! /*!
* \param _from - адрес отправителя * \param _from - адрес отправителя
* \param start - записанный регистр * \param start - записанный регистр
*/ */
...@@ -961,19 +961,19 @@ namespace ModbusRTU ...@@ -961,19 +961,19 @@ namespace ModbusRTU
/*! записать данные */ /*! записать данные */
void set( ModbusData start, ModbusData data ); void set( ModbusData start, ModbusData data );
/*! преобразование для посылки в сеть */ /*! преобразование для посылки в сеть */
ModbusMessage transport_msg(); ModbusMessage transport_msg();
/*! размер данных(после заголовка) у данного типа сообщения /*! размер данных(после заголовка) у данного типа сообщения
Для данного типа он постоянный.. Для данного типа он постоянный..
*/ */
inline static int szData(){ return 2*sizeof(ModbusData)+sizeof(ModbusCRC); } inline static int szData(){ return 2*sizeof(ModbusData)+sizeof(ModbusCRC); }
}; };
std::ostream& operator<<(std::ostream& os, WriteSingleOutputRetMessage& m ); std::ostream& operator<<(std::ostream& os, WriteSingleOutputRetMessage& m );
std::ostream& operator<<(std::ostream& os, WriteSingleOutputRetMessage* m ); std::ostream& operator<<(std::ostream& os, WriteSingleOutputRetMessage* m );
// ----------------------------------------------------------------------- // -----------------------------------------------------------------------
/*! Запрос 0x08 */ /*! Запрос 0x08 */
struct DiagnosticMessage: struct DiagnosticMessage:
public ModbusHeader public ModbusHeader
{ {
...@@ -984,8 +984,8 @@ namespace ModbusRTU ...@@ -984,8 +984,8 @@ namespace ModbusRTU
DiagnosticMessage( ModbusMessage& m ); DiagnosticMessage( ModbusMessage& m );
DiagnosticMessage& operator=( ModbusMessage& m ); DiagnosticMessage& operator=( ModbusMessage& m );
void init( ModbusMessage& m ); void init( ModbusMessage& m );
/*! размер предварительного заголовка /*! размер предварительного заголовка
* (после основного до фактических данных) * (после основного до фактических данных)
*/ */
static inline int szHead() static inline int szHead()
{ {
...@@ -995,7 +995,7 @@ namespace ModbusRTU ...@@ -995,7 +995,7 @@ namespace ModbusRTU
/*! узнать длину данных следующий за предварительным заголовком ( в байтах ) */ /*! узнать длину данных следующий за предварительным заголовком ( в байтах ) */
static int getDataLen( ModbusMessage& m ); static int getDataLen( ModbusMessage& m );
ModbusCRC crc; ModbusCRC crc;
// ------- to master ------- // ------- to master -------
DiagnosticMessage( ModbusAddr _from, DiagnosticsSubFunction subf, ModbusData d=0 ); DiagnosticMessage( ModbusAddr _from, DiagnosticsSubFunction subf, ModbusData d=0 );
...@@ -1007,30 +1007,30 @@ namespace ModbusRTU ...@@ -1007,30 +1007,30 @@ namespace ModbusRTU
/*! очистка данных */ /*! очистка данных */
void clear(); void clear();
/*! проверка на переполнение */ /*! проверка на переполнение */
inline bool isFull() inline bool isFull()
{ {
return ( sizeof(subf)+count*sizeof(ModbusData) >= MAXLENPACKET ); return ( sizeof(subf)+count*sizeof(ModbusData) >= MAXLENPACKET );
} }
/*! размер данных(после заголовка) у данного типа сообщения */ /*! размер данных(после заголовка) у данного типа сообщения */
size_t szData(); size_t szData();
/*! преобразование для посылки в сеть */ /*! преобразование для посылки в сеть */
ModbusMessage transport_msg(); ModbusMessage transport_msg();
// Это поле не входит в стандарт modbus // Это поле не входит в стандарт modbus
// оно вспомогательное и игнорируется при // оно вспомогательное и игнорируется при
// преобразовании в ModbusMessage. // преобразовании в ModbusMessage.
// Делать что-типа memcpy(buf,this,sizeof(*this)); будет не верно. // Делать что-типа memcpy(buf,this,sizeof(*this)); будет не верно.
// Используйте специальную функцию transport_msg() // Используйте специальную функцию transport_msg()
int count; /*!< фактическое количество данных в сообщении */ int count; /*!< фактическое количество данных в сообщении */
}; };
std::ostream& operator<<(std::ostream& os, DiagnosticMessage& m ); std::ostream& operator<<(std::ostream& os, DiagnosticMessage& m );
std::ostream& operator<<(std::ostream& os, DiagnosticMessage* m ); std::ostream& operator<<(std::ostream& os, DiagnosticMessage* m );
// ----------------------------------------------------------------------- // -----------------------------------------------------------------------
/*! Ответ для 0x08 */ /*! Ответ для 0x08 */
struct DiagnosticRetMessage: struct DiagnosticRetMessage:
public DiagnosticMessage public DiagnosticMessage
{ {
...@@ -1057,13 +1057,13 @@ namespace ModbusRTU ...@@ -1057,13 +1057,13 @@ namespace ModbusRTU
/*! преобразование для посылки в сеть */ /*! преобразование для посылки в сеть */
ModbusMessage transport_msg(); ModbusMessage transport_msg();
// ------- from master ------- // ------- from master -------
MEIMessageRDI( ModbusMessage& m ); MEIMessageRDI( ModbusMessage& m );
MEIMessageRDI& operator=( ModbusMessage& m ); MEIMessageRDI& operator=( ModbusMessage& m );
void init( ModbusMessage& m ); void init( ModbusMessage& m );
/*! размер предварительного заголовка /*! размер предварительного заголовка
* (после основного до фактических данных) * (после основного до фактических данных)
*/ */
static inline int szHead(){ return sizeof(ModbusByte)*3; } static inline int szHead(){ return sizeof(ModbusByte)*3; }
...@@ -1122,7 +1122,7 @@ namespace ModbusRTU ...@@ -1122,7 +1122,7 @@ namespace ModbusRTU
// /*! узнать длину данных следующих за предварительным заголовком ( в байтах ) */ // /*! узнать длину данных следующих за предварительным заголовком ( в байтах ) */
// static int getDataLen( ModbusMessage& m ); // static int getDataLen( ModbusMessage& m );
// ------- to master ------- // ------- to master -------
MEIMessageRetRDI( ModbusAddr _from, ModbusByte devID, ModbusByte conformity, ModbusByte mf, ModbusByte objID ); MEIMessageRetRDI( ModbusAddr _from, ModbusByte devID, ModbusByte conformity, ModbusByte mf, ModbusByte objID );
...@@ -1135,16 +1135,16 @@ namespace ModbusRTU ...@@ -1135,16 +1135,16 @@ namespace ModbusRTU
/*! очистка данных */ /*! очистка данных */
void clear(); void clear();
/*! проверка на переполнение */ /*! проверка на переполнение */
inline bool isFull() inline bool isFull()
{ {
return ( bcnt >= MAXLENPACKET ); return ( bcnt >= MAXLENPACKET );
} }
/*! размер данных(после заголовка) у данного типа сообщения */ /*! размер данных(после заголовка) у данного типа сообщения */
size_t szData(); size_t szData();
/*! преобразование для посылки в сеть */ /*! преобразование для посылки в сеть */
ModbusMessage transport_msg(); ModbusMessage transport_msg();
...@@ -1158,14 +1158,14 @@ namespace ModbusRTU ...@@ -1158,14 +1158,14 @@ namespace ModbusRTU
// ----------------------------------------------------------------------- // -----------------------------------------------------------------------
// ----------------------------------------------------------------------- // -----------------------------------------------------------------------
/*! Чтение информации об ошибке */ /*! Чтение информации об ошибке */
struct JournalCommandMessage: struct JournalCommandMessage:
public ModbusHeader public ModbusHeader
{ {
ModbusData cmd; /*!< код операции */ ModbusData cmd; /*!< код операции */
ModbusData num; /*!< номер записи */ ModbusData num; /*!< номер записи */
ModbusCRC crc; ModbusCRC crc;
// ------------- // -------------
JournalCommandMessage( ModbusMessage& m ); JournalCommandMessage( ModbusMessage& m );
JournalCommandMessage& operator=( ModbusMessage& m ); JournalCommandMessage& operator=( ModbusMessage& m );
...@@ -1175,10 +1175,10 @@ namespace ModbusRTU ...@@ -1175,10 +1175,10 @@ namespace ModbusRTU
}__attribute__((packed)); }__attribute__((packed));
std::ostream& operator<<(std::ostream& os, JournalCommandMessage& m ); std::ostream& operator<<(std::ostream& os, JournalCommandMessage& m );
std::ostream& operator<<(std::ostream& os, JournalCommandMessage* m ); std::ostream& operator<<(std::ostream& os, JournalCommandMessage* m );
// ----------------------------------------------------------------------- // -----------------------------------------------------------------------
/*! Ответ для запроса на чтение ошибки */ /*! Ответ для запроса на чтение ошибки */
struct JournalCommandRetMessage: struct JournalCommandRetMessage:
public ModbusHeader public ModbusHeader
{ {
...@@ -1203,23 +1203,23 @@ namespace ModbusRTU ...@@ -1203,23 +1203,23 @@ namespace ModbusRTU
/*! очистка данных */ /*! очистка данных */
void clear(); void clear();
/*! проверка на переполнение */ /*! проверка на переполнение */
inline bool isFull() inline bool isFull()
{ {
return ( count*sizeof(ModbusData) >= MAXLENPACKET ); return ( count*sizeof(ModbusData) >= MAXLENPACKET );
} }
/*! размер данных(после заголовка) у данного типа сообщения */ /*! размер данных(после заголовка) у данного типа сообщения */
size_t szData(); size_t szData();
/*! преобразование для посылки в сеть */ /*! преобразование для посылки в сеть */
ModbusMessage transport_msg(); ModbusMessage transport_msg();
// Это поле не входит в стандарт modbus // Это поле не входит в стандарт modbus
// оно вспомогательное и игнорируется при // оно вспомогательное и игнорируется при
// преобразовании в ModbusMessage. // преобразовании в ModbusMessage.
// Делать что-типа memcpy(buf,this,sizeof(*this)); будет не верно. // Делать что-типа memcpy(buf,this,sizeof(*this)); будет не верно.
// Используйте специальную функцию transport_msg() // Используйте специальную функцию transport_msg()
int count; /*!< фактическое количество данных в сообщении */ int count; /*!< фактическое количество данных в сообщении */
}; };
...@@ -1227,7 +1227,7 @@ namespace ModbusRTU ...@@ -1227,7 +1227,7 @@ namespace ModbusRTU
std::ostream& operator<<(std::ostream& os, JournalCommandRetMessage& m ); std::ostream& operator<<(std::ostream& os, JournalCommandRetMessage& m );
std::ostream& operator<<(std::ostream& os, JournalCommandRetMessage* m ); std::ostream& operator<<(std::ostream& os, JournalCommandRetMessage* m );
// ----------------------------------------------------------------------- // -----------------------------------------------------------------------
/*! ответ в случае необходимости подтверждения команды /*! ответ в случае необходимости подтверждения команды
(просто пакует в JournalCommandRetMessage код команды и ошибки ) (просто пакует в JournalCommandRetMessage код команды и ошибки )
*/ */
struct JournalCommandRetOK: struct JournalCommandRetOK:
...@@ -1239,11 +1239,11 @@ namespace ModbusRTU ...@@ -1239,11 +1239,11 @@ namespace ModbusRTU
static void set( JournalCommandRetMessage& m, ModbusData cmd, ModbusData ecode ); static void set( JournalCommandRetMessage& m, ModbusData cmd, ModbusData ecode );
}; };
std::ostream& operator<<(std::ostream& os, JournalCommandRetOK& m ); std::ostream& operator<<(std::ostream& os, JournalCommandRetOK& m );
std::ostream& operator<<(std::ostream& os, JournalCommandRetOK* m ); std::ostream& operator<<(std::ostream& os, JournalCommandRetOK* m );
// ----------------------------------------------------------------------- // -----------------------------------------------------------------------
/*! Установка времени */ /*! Установка времени */
struct SetDateTimeMessage: struct SetDateTimeMessage:
public ModbusHeader public ModbusHeader
{ {
...@@ -1256,12 +1256,12 @@ namespace ModbusRTU ...@@ -1256,12 +1256,12 @@ namespace ModbusRTU
ModbusByte century; /*!< столетие [19-20] */ ModbusByte century; /*!< столетие [19-20] */
ModbusCRC crc; ModbusCRC crc;
// ------- to slave ------- // ------- to slave -------
SetDateTimeMessage( ModbusAddr addr ); SetDateTimeMessage( ModbusAddr addr );
/*! преобразование для посылки в сеть */ /*! преобразование для посылки в сеть */
ModbusMessage transport_msg(); ModbusMessage transport_msg();
// ------- from master ------- // ------- from master -------
SetDateTimeMessage( ModbusMessage& m ); SetDateTimeMessage( ModbusMessage& m );
SetDateTimeMessage& operator=( ModbusMessage& m ); SetDateTimeMessage& operator=( ModbusMessage& m );
...@@ -1274,8 +1274,8 @@ namespace ModbusRTU ...@@ -1274,8 +1274,8 @@ namespace ModbusRTU
}__attribute__((packed)); }__attribute__((packed));
std::ostream& operator<<(std::ostream& os, SetDateTimeMessage& m ); std::ostream& operator<<(std::ostream& os, SetDateTimeMessage& m );
std::ostream& operator<<(std::ostream& os, SetDateTimeMessage* m ); std::ostream& operator<<(std::ostream& os, SetDateTimeMessage* m );
// ----------------------------------------------------------------------- // -----------------------------------------------------------------------
/*! Ответ (просто повторяет запрос) */ /*! Ответ (просто повторяет запрос) */
...@@ -1293,12 +1293,12 @@ namespace ModbusRTU ...@@ -1293,12 +1293,12 @@ namespace ModbusRTU
SetDateTimeRetMessage( const SetDateTimeMessage& query ); SetDateTimeRetMessage( const SetDateTimeMessage& query );
static void cpy( SetDateTimeRetMessage& reply, SetDateTimeMessage& query ); static void cpy( SetDateTimeRetMessage& reply, SetDateTimeMessage& query );
/*! преобразование для посылки в сеть */ /*! преобразование для посылки в сеть */
ModbusMessage transport_msg(); ModbusMessage transport_msg();
}; };
// ----------------------------------------------------------------------- // -----------------------------------------------------------------------
/*! Вызов удалённого сервиса */ /*! Вызов удалённого сервиса */
struct RemoteServiceMessage: struct RemoteServiceMessage:
public ModbusHeader public ModbusHeader
{ {
...@@ -1307,7 +1307,7 @@ namespace ModbusRTU ...@@ -1307,7 +1307,7 @@ namespace ModbusRTU
/*! данные */ /*! данные */
ModbusByte data[MAXLENPACKET-sizeof(ModbusByte)]; ModbusByte data[MAXLENPACKET-sizeof(ModbusByte)];
ModbusCRC crc; /*!< контрольная сумма */ ModbusCRC crc; /*!< контрольная сумма */
// ----------- // -----------
RemoteServiceMessage( ModbusMessage& m ); RemoteServiceMessage( ModbusMessage& m );
RemoteServiceMessage& operator=( ModbusMessage& m ); RemoteServiceMessage& operator=( ModbusMessage& m );
...@@ -1316,19 +1316,19 @@ namespace ModbusRTU ...@@ -1316,19 +1316,19 @@ namespace ModbusRTU
/*! размер данных(после заголовка) у данного типа сообщения */ /*! размер данных(после заголовка) у данного типа сообщения */
size_t szData(); size_t szData();
/*! размер предварительного заголовка /*! размер предварительного заголовка
* (после основного до фактических данных) * (после основного до фактических данных)
*/ */
static inline int szHead() static inline int szHead()
{ return sizeof(ModbusByte); } // bcnt { return sizeof(ModbusByte); } // bcnt
/*! узнать длину данных следующий за предварительным заголовком ( в байтах ) */ /*! узнать длину данных следующий за предварительным заголовком ( в байтах ) */
static int getDataLen( ModbusMessage& m ); static int getDataLen( ModbusMessage& m );
}__attribute__((packed)); }__attribute__((packed));
std::ostream& operator<<(std::ostream& os, RemoteServiceMessage& m ); std::ostream& operator<<(std::ostream& os, RemoteServiceMessage& m );
std::ostream& operator<<(std::ostream& os, RemoteServiceMessage* m ); std::ostream& operator<<(std::ostream& os, RemoteServiceMessage* m );
// ----------------------------------------------------------------------- // -----------------------------------------------------------------------
struct RemoteServiceRetMessage: struct RemoteServiceRetMessage:
public ModbusHeader public ModbusHeader
...@@ -1349,19 +1349,19 @@ namespace ModbusRTU ...@@ -1349,19 +1349,19 @@ namespace ModbusRTU
/*! очистка данных */ /*! очистка данных */
void clear(); void clear();
/*! проверка на переполнение */ /*! проверка на переполнение */
inline bool isFull() inline bool isFull()
{ return ( count >= sizeof(data) ); } { return ( count >= sizeof(data) ); }
/*! размер данных(после заголовка) у данного типа сообщения */ /*! размер данных(после заголовка) у данного типа сообщения */
size_t szData(); size_t szData();
/*! преобразование для посылки в сеть */ /*! преобразование для посылки в сеть */
ModbusMessage transport_msg(); ModbusMessage transport_msg();
// Это поле не входит в стандарт modbus // Это поле не входит в стандарт modbus
// оно вспомогательное и игнорируется при // оно вспомогательное и игнорируется при
// преобразовании в ModbusMessage. // преобразовании в ModbusMessage.
unsigned int count; /*!< фактическое количество данных в сообщении */ unsigned int count; /*!< фактическое количество данных в сообщении */
}; };
...@@ -1376,14 +1376,14 @@ namespace ModbusRTU ...@@ -1376,14 +1376,14 @@ namespace ModbusRTU
ModbusData numfile; /*!< file number 0x0000 to 0xFFFF */ ModbusData numfile; /*!< file number 0x0000 to 0xFFFF */
ModbusData numrec; /*!< record number 0x0000 to 0x270F */ ModbusData numrec; /*!< record number 0x0000 to 0x270F */
ModbusData reglen; /*!< registers length */ ModbusData reglen; /*!< registers length */
}__attribute__((packed)); }__attribute__((packed));
ModbusByte bcnt; /*!< количество байт 0x07 to 0xF5 */ ModbusByte bcnt; /*!< количество байт 0x07 to 0xF5 */
/*! данные */ /*! данные */
SubRequest data[MAXLENPACKET/sizeof(SubRequest)-sizeof(ModbusByte)]; SubRequest data[MAXLENPACKET/sizeof(SubRequest)-sizeof(ModbusByte)];
ModbusCRC crc; /*!< контрольная сумма */ ModbusCRC crc; /*!< контрольная сумма */
// ----------- // -----------
ReadFileRecordMessage( ModbusMessage& m ); ReadFileRecordMessage( ModbusMessage& m );
ReadFileRecordMessage& operator=( ModbusMessage& m ); ReadFileRecordMessage& operator=( ModbusMessage& m );
...@@ -1392,24 +1392,24 @@ namespace ModbusRTU ...@@ -1392,24 +1392,24 @@ namespace ModbusRTU
/*! размер данных(после заголовка) у данного типа сообщения */ /*! размер данных(после заголовка) у данного типа сообщения */
size_t szData(); size_t szData();
/*! размер предварительного заголовка /*! размер предварительного заголовка
* (после основного до фактических данных) * (после основного до фактических данных)
*/ */
static inline int szHead() static inline int szHead()
{ return sizeof(ModbusByte); } // bcnt { return sizeof(ModbusByte); } // bcnt
/*! узнать длину данных следующий за предварительным заголовком ( в байтах ) */ /*! узнать длину данных следующий за предварительным заголовком ( в байтах ) */
static int getDataLen( ModbusMessage& m ); static int getDataLen( ModbusMessage& m );
/*! проверка корректности данных */ /*! проверка корректности данных */
bool checkFormat(); bool checkFormat();
// это поле служебное и не используется в релальном обмене // это поле служебное и не используется в релальном обмене
int count; /*!< фактическое количество данных */ int count; /*!< фактическое количество данных */
}; };
std::ostream& operator<<(std::ostream& os, ReadFileRecordMessage& m ); std::ostream& operator<<(std::ostream& os, ReadFileRecordMessage& m );
std::ostream& operator<<(std::ostream& os, ReadFileRecordMessage* m ); std::ostream& operator<<(std::ostream& os, ReadFileRecordMessage* m );
// ----------------------------------------------------------------------- // -----------------------------------------------------------------------
struct FileTransferMessage: struct FileTransferMessage:
...@@ -1418,11 +1418,11 @@ namespace ModbusRTU ...@@ -1418,11 +1418,11 @@ namespace ModbusRTU
ModbusData numfile; /*!< file number 0x0000 to 0xFFFF */ ModbusData numfile; /*!< file number 0x0000 to 0xFFFF */
ModbusData numpacket; /*!< number of packet */ ModbusData numpacket; /*!< number of packet */
ModbusCRC crc; /*!< контрольная сумма */ ModbusCRC crc; /*!< контрольная сумма */
// ------- to slave ------- // ------- to slave -------
FileTransferMessage( ModbusAddr addr, ModbusData numfile, ModbusData numpacket ); FileTransferMessage( ModbusAddr addr, ModbusData numfile, ModbusData numpacket );
ModbusMessage transport_msg(); /*!< преобразование для посылки в сеть */ ModbusMessage transport_msg(); /*!< преобразование для посылки в сеть */
// ------- from master ------- // ------- from master -------
FileTransferMessage( ModbusMessage& m ); FileTransferMessage( ModbusMessage& m );
FileTransferMessage& operator=( ModbusMessage& m ); FileTransferMessage& operator=( ModbusMessage& m );
...@@ -1434,14 +1434,14 @@ namespace ModbusRTU ...@@ -1434,14 +1434,14 @@ namespace ModbusRTU
}__attribute__((packed)); }__attribute__((packed));
std::ostream& operator<<(std::ostream& os, FileTransferMessage& m ); std::ostream& operator<<(std::ostream& os, FileTransferMessage& m );
std::ostream& operator<<(std::ostream& os, FileTransferMessage* m ); std::ostream& operator<<(std::ostream& os, FileTransferMessage* m );
// ----------------------------------------------------------------------- // -----------------------------------------------------------------------
struct FileTransferRetMessage: struct FileTransferRetMessage:
public ModbusHeader public ModbusHeader
{ {
// 255 - max of bcnt...(1 byte) // 255 - max of bcnt...(1 byte)
// static const int MaxDataLen = 255 - szCRC - szModbusHeader - sizeof(ModbusData)*3 - sizeof(ModbusByte)*2; // static const int MaxDataLen = 255 - szCRC - szModbusHeader - sizeof(ModbusData)*3 - sizeof(ModbusByte)*2;
static const int MaxDataLen = MAXLENPACKET - sizeof(ModbusData)*3 - sizeof(ModbusByte)*2; static const int MaxDataLen = MAXLENPACKET - sizeof(ModbusData)*3 - sizeof(ModbusByte)*2;
...@@ -1452,7 +1452,7 @@ namespace ModbusRTU ...@@ -1452,7 +1452,7 @@ namespace ModbusRTU
ModbusByte dlen; /*!< количество байт данных в ответе */ ModbusByte dlen; /*!< количество байт данных в ответе */
ModbusByte data[MaxDataLen]; ModbusByte data[MaxDataLen];
// ------- from slave ------- // ------- from slave -------
FileTransferRetMessage( ModbusMessage& m ); FileTransferRetMessage( ModbusMessage& m );
FileTransferRetMessage& operator=( ModbusMessage& m ); FileTransferRetMessage& operator=( ModbusMessage& m );
...@@ -1460,7 +1460,7 @@ namespace ModbusRTU ...@@ -1460,7 +1460,7 @@ namespace ModbusRTU
ModbusCRC crc; ModbusCRC crc;
static int szHead(){ return sizeof(ModbusByte); } static int szHead(){ return sizeof(ModbusByte); }
static int getDataLen( ModbusMessage& m ); static int getDataLen( ModbusMessage& m );
// ------- to master ------- // ------- to master -------
FileTransferRetMessage( ModbusAddr _from ); FileTransferRetMessage( ModbusAddr _from );
...@@ -1471,15 +1471,15 @@ namespace ModbusRTU ...@@ -1471,15 +1471,15 @@ namespace ModbusRTU
/*! очистка данных */ /*! очистка данных */
void clear(); void clear();
/*! размер данных(после заголовка) у данного типа сообщения */ /*! размер данных(после заголовка) у данного типа сообщения */
size_t szData(); size_t szData();
/*! преобразование для посылки в сеть */ /*! преобразование для посылки в сеть */
ModbusMessage transport_msg(); ModbusMessage transport_msg();
}; };
std::ostream& operator<<(std::ostream& os, FileTransferRetMessage& m ); std::ostream& operator<<(std::ostream& os, FileTransferRetMessage& m );
std::ostream& operator<<(std::ostream& os, FileTransferRetMessage* m ); std::ostream& operator<<(std::ostream& os, FileTransferRetMessage* m );
// ----------------------------------------------------------------------- // -----------------------------------------------------------------------
} // end of ModbusRTU namespace } // end of ModbusRTU namespace
...@@ -1494,12 +1494,12 @@ namespace ModbusTCP ...@@ -1494,12 +1494,12 @@ namespace ModbusTCP
/* ModbusRTU::ModbusByte uID; */ /*!< unit ID */ /* <------- see ModbusHeader */ /* ModbusRTU::ModbusByte uID; */ /*!< unit ID */ /* <------- see ModbusHeader */
MBAPHeader():tID(0),pID(0) /*,uID(0) */{} MBAPHeader():tID(0),pID(0) /*,uID(0) */{}
void swapdata(); void swapdata();
}__attribute__((packed)); }__attribute__((packed));
std::ostream& operator<<(std::ostream& os, MBAPHeader& m ); std::ostream& operator<<(std::ostream& os, MBAPHeader& m );
// ----------------------------------------------------------------------- // -----------------------------------------------------------------------
} // end of namespace ModbusTCP } // end of namespace ModbusTCP
......
...@@ -16,9 +16,9 @@ class TCPCheck ...@@ -16,9 +16,9 @@ class TCPCheck
public: public:
TCPCheck(); TCPCheck();
~TCPCheck(); ~TCPCheck();
bool check( const std::string& _ip, int _port, timeout_t tout, timeout_t sleep_msec ); bool check( const std::string& _ip, int _port, timeout_t tout, timeout_t sleep_msec );
/*! \param iaddr - 'ip:port' */ /*! \param iaddr - 'ip:port' */
bool check( const std::string& iaddr, timeout_t tout, timeout_t sleep_msec ); bool check( const std::string& iaddr, timeout_t tout, timeout_t sleep_msec );
......
...@@ -21,7 +21,7 @@ UConnector_wrap.cxx: UConnector.i UConnector.h ...@@ -21,7 +21,7 @@ UConnector_wrap.cxx: UConnector.i UConnector.h
swig -python -c++ -classic UConnector.i swig -python -c++ -classic UConnector.i
_pyUModbus_la_SOURCES = UModbus.cc UModbus_wrap.cxx _pyUModbus_la_SOURCES = UModbus.cc UModbus_wrap.cxx
_pyUModbus_la_CXXFLAGS = $(UNISET_CFLAGS) $(UNISET_EXT_CFLAGS) $(COMCPP_CFLAGS) $(PYTHON_CFLAGS) _pyUModbus_la_CXXFLAGS = $(UNISET_CFLAGS) $(UNISET_EXT_CFLAGS) $(COMCPP_CFLAGS) $(PYTHON_CFLAGS)
_pyUModbus_la_LDFLAGS = -module -avoid-version _pyUModbus_la_LDFLAGS = -module -avoid-version
_pyUModbus_la_LIBADD = $(UNISET_LIBS) $(UNISET_EXT_LIBS) $(COMCPP_LIBS) $(PYTHON_LIBS) _pyUModbus_la_LIBADD = $(UNISET_LIBS) $(UNISET_EXT_LIBS) $(COMCPP_LIBS) $(PYTHON_LIBS)
......
#ifndef pyUInterface_H_ #ifndef pyUInterface_H_
#define pyUInterface_H_ #define pyUInterface_H_
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
#include <string> #include <string>
#include "UTypes.h" #include "UTypes.h"
#include "UExceptions.h" #include "UExceptions.h"
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
namespace pyUInterface namespace pyUInterface
{ {
void uniset_init_params( UTypes::Params* p, const char* xmlfile )throw(UException); void uniset_init_params( UTypes::Params* p, const char* xmlfile )throw(UException);
...@@ -15,13 +15,13 @@ namespace pyUInterface ...@@ -15,13 +15,13 @@ namespace pyUInterface
void setValue( long id, long val )throw(UException); void setValue( long id, long val )throw(UException);
long getSensorID( const char* ); long getSensorID( const char* );
const char* getShortName( long id ); const char* getShortName( long id );
const char* getName( long id ); const char* getName( long id );
const char* getTextName( long id ); const char* getTextName( long id );
const char* getConfFileName(); const char* getConfFileName();
} }
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
#endif #endif
......
...@@ -54,7 +54,7 @@ const char* UConnector::getConfFileName() ...@@ -54,7 +54,7 @@ const char* UConnector::getConfFileName()
// return xmlfile; // return xmlfile;
if( conf ) if( conf )
return conf->getConfFileName().c_str(); return conf->getConfFileName().c_str();
return ""; return "";
} }
...@@ -63,10 +63,10 @@ long UConnector::getValue( long id, long node )throw(UException) ...@@ -63,10 +63,10 @@ long UConnector::getValue( long id, long node )throw(UException)
{ {
if( !conf || !ui ) if( !conf || !ui )
throw USysError(); throw USysError();
if( node == UTypes::DefaultID ) if( node == UTypes::DefaultID )
node = conf->getLocalNode(); node = conf->getLocalNode();
try try
{ {
return ui->getValue(id,node); return ui->getValue(id,node);
...@@ -79,7 +79,7 @@ long UConnector::getValue( long id, long node )throw(UException) ...@@ -79,7 +79,7 @@ long UConnector::getValue( long id, long node )throw(UException)
{ {
throw UException("(getValue): catch..."); throw UException("(getValue): catch...");
} }
throw UException("(getValue): unknown error"); throw UException("(getValue): unknown error");
} }
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
...@@ -87,11 +87,11 @@ void UConnector::setValue( long id, long val, long node )throw(UException) ...@@ -87,11 +87,11 @@ void UConnector::setValue( long id, long val, long node )throw(UException)
{ {
if( !conf || !ui ) if( !conf || !ui )
throw USysError(); throw USysError();
if( node == UTypes::DefaultID ) if( node == UTypes::DefaultID )
node = conf->getLocalNode(); node = conf->getLocalNode();
try try
{ {
ui->setValue(id,val,node); ui->setValue(id,val,node);
...@@ -110,7 +110,7 @@ long UConnector::getSensorID( const char* name ) ...@@ -110,7 +110,7 @@ long UConnector::getSensorID( const char* name )
{ {
if( conf ) if( conf )
return conf->getSensorID(name); return conf->getSensorID(name);
return UTypes::DefaultID; return UTypes::DefaultID;
} }
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
...@@ -118,7 +118,7 @@ long UConnector::getNodeID( const char* name ) ...@@ -118,7 +118,7 @@ long UConnector::getNodeID( const char* name )
{ {
if( conf ) if( conf )
return conf->getNodeID(name); return conf->getNodeID(name);
return UTypes::DefaultID; return UTypes::DefaultID;
} }
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
...@@ -126,7 +126,7 @@ const char* UConnector::getName( long id ) ...@@ -126,7 +126,7 @@ const char* UConnector::getName( long id )
{ {
if( conf ) if( conf )
return conf->oind->getMapName(id).c_str(); return conf->oind->getMapName(id).c_str();
return ""; return "";
} }
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
...@@ -134,7 +134,7 @@ const char* UConnector::getShortName( long id ) ...@@ -134,7 +134,7 @@ const char* UConnector::getShortName( long id )
{ {
if( conf ) if( conf )
return ORepHelpers::getShortName(conf->oind->getMapName(id)).c_str(); return ORepHelpers::getShortName(conf->oind->getMapName(id)).c_str();
return ""; return "";
} }
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
...@@ -142,7 +142,7 @@ const char* UConnector::getTextName( long id ) ...@@ -142,7 +142,7 @@ const char* UConnector::getTextName( long id )
{ {
if( conf ) if( conf )
return conf->oind->getTextName(id).c_str(); return conf->oind->getTextName(id).c_str();
return ""; return "";
} }
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
...@@ -22,12 +22,12 @@ class UConnector ...@@ -22,12 +22,12 @@ class UConnector
long getSensorID( const char* ); long getSensorID( const char* );
long getNodeID( const char* ); long getNodeID( const char* );
const char* getShortName( long id ); const char* getShortName( long id );
const char* getName( long id ); const char* getName( long id );
const char* getTextName( long id ); const char* getTextName( long id );
private: private:
UniSetTypes::Configuration* conf; UniSetTypes::Configuration* conf;
UInterface* ui; UInterface* ui;
......
...@@ -2980,7 +2980,7 @@ static swig_module_info swig_module = {swig_types, 5, 0, 0, 0, 0}; ...@@ -2980,7 +2980,7 @@ static swig_module_info swig_module = {swig_types, 5, 0, 0, 0, 0};
#endif #endif
#define SWIG_name "_pyUConnector" #define SWIG_name "_pyUConnector"
#define SWIGVERSION 0x020010 #define SWIGVERSION 0x020010
#define SWIG_VERSION SWIGVERSION #define SWIG_VERSION SWIGVERSION
......
...@@ -7,9 +7,9 @@ struct UException ...@@ -7,9 +7,9 @@ struct UException
UException( const std::string& e ):err(e){} UException( const std::string& e ):err(e){}
UException( const char* e ):err( std::string(e)){} UException( const char* e ):err( std::string(e)){}
~UException(){} ~UException(){}
const char* getError(){ return err.c_str(); } const char* getError(){ return err.c_str(); }
std::string err; std::string err;
}; };
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
......
...@@ -2980,7 +2980,7 @@ static swig_module_info swig_module = {swig_types, 5, 0, 0, 0, 0}; ...@@ -2980,7 +2980,7 @@ static swig_module_info swig_module = {swig_types, 5, 0, 0, 0, 0};
#endif #endif
#define SWIG_name "_pyUExceptions" #define SWIG_name "_pyUExceptions"
#define SWIGVERSION 0x020010 #define SWIGVERSION 0x020010
#define SWIG_VERSION SWIGVERSION #define SWIG_VERSION SWIGVERSION
......
...@@ -2982,7 +2982,7 @@ static swig_module_info swig_module = {swig_types, 7, 0, 0, 0, 0}; ...@@ -2982,7 +2982,7 @@ static swig_module_info swig_module = {swig_types, 7, 0, 0, 0, 0};
#endif #endif
#define SWIG_name "_pyUniSet" #define SWIG_name "_pyUniSet"
#define SWIGVERSION 0x020010 #define SWIGVERSION 0x020010
#define SWIG_VERSION SWIGVERSION #define SWIG_VERSION SWIGVERSION
...@@ -3834,10 +3834,10 @@ SWIGINTERN PyObject *_wrap_new_UException__SWIG_1(PyObject *SWIGUNUSEDPARM(self) ...@@ -3834,10 +3834,10 @@ SWIGINTERN PyObject *_wrap_new_UException__SWIG_1(PyObject *SWIGUNUSEDPARM(self)
if (!PyArg_ParseTuple(args,(char *)"O:new_UException",&obj0)) SWIG_fail; if (!PyArg_ParseTuple(args,(char *)"O:new_UException",&obj0)) SWIG_fail;
res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_std__string, 0 | 0); res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_std__string, 0 | 0);
if (!SWIG_IsOK(res1)) { if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_UException" "', argument " "1"" of type '" "std::string const &""'"); SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_UException" "', argument " "1"" of type '" "std::string const &""'");
} }
if (!argp1) { if (!argp1) {
SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_UException" "', argument " "1"" of type '" "std::string const &""'"); SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_UException" "', argument " "1"" of type '" "std::string const &""'");
} }
arg1 = reinterpret_cast< std::string * >(argp1); arg1 = reinterpret_cast< std::string * >(argp1);
result = (UException *)new UException((std::string const &)*arg1); result = (UException *)new UException((std::string const &)*arg1);
...@@ -4047,10 +4047,10 @@ SWIGINTERN PyObject *_wrap_new_UTimeOut__SWIG_1(PyObject *SWIGUNUSEDPARM(self), ...@@ -4047,10 +4047,10 @@ SWIGINTERN PyObject *_wrap_new_UTimeOut__SWIG_1(PyObject *SWIGUNUSEDPARM(self),
if (!PyArg_ParseTuple(args,(char *)"O:new_UTimeOut",&obj0)) SWIG_fail; if (!PyArg_ParseTuple(args,(char *)"O:new_UTimeOut",&obj0)) SWIG_fail;
res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_std__string, 0 | 0); res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_std__string, 0 | 0);
if (!SWIG_IsOK(res1)) { if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_UTimeOut" "', argument " "1"" of type '" "std::string const &""'"); SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_UTimeOut" "', argument " "1"" of type '" "std::string const &""'");
} }
if (!argp1) { if (!argp1) {
SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_UTimeOut" "', argument " "1"" of type '" "std::string const &""'"); SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_UTimeOut" "', argument " "1"" of type '" "std::string const &""'");
} }
arg1 = reinterpret_cast< std::string * >(argp1); arg1 = reinterpret_cast< std::string * >(argp1);
result = (UTimeOut *)new UTimeOut((std::string const &)*arg1); result = (UTimeOut *)new UTimeOut((std::string const &)*arg1);
...@@ -4144,10 +4144,10 @@ SWIGINTERN PyObject *_wrap_new_USysError__SWIG_1(PyObject *SWIGUNUSEDPARM(self), ...@@ -4144,10 +4144,10 @@ SWIGINTERN PyObject *_wrap_new_USysError__SWIG_1(PyObject *SWIGUNUSEDPARM(self),
if (!PyArg_ParseTuple(args,(char *)"O:new_USysError",&obj0)) SWIG_fail; if (!PyArg_ParseTuple(args,(char *)"O:new_USysError",&obj0)) SWIG_fail;
res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_std__string, 0 | 0); res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_std__string, 0 | 0);
if (!SWIG_IsOK(res1)) { if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_USysError" "', argument " "1"" of type '" "std::string const &""'"); SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_USysError" "', argument " "1"" of type '" "std::string const &""'");
} }
if (!argp1) { if (!argp1) {
SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_USysError" "', argument " "1"" of type '" "std::string const &""'"); SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_USysError" "', argument " "1"" of type '" "std::string const &""'");
} }
arg1 = reinterpret_cast< std::string * >(argp1); arg1 = reinterpret_cast< std::string * >(argp1);
result = (USysError *)new USysError((std::string const &)*arg1); result = (USysError *)new USysError((std::string const &)*arg1);
......
...@@ -105,7 +105,7 @@ void UModbus::connect( const char* _ip, int _port )throw(UException) ...@@ -105,7 +105,7 @@ void UModbus::connect( const char* _ip, int _port )throw(UException)
std::ostringstream err; std::ostringstream err;
err << "Connection failed: ip=" << ip << " port=" << port; err << "Connection failed: ip=" << ip << " port=" << port;
throw UException(err.str()); throw UException(err.str());
} }
} }
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
long UModbus::getWord( int addr, int mbreg, int mbfunc )throw(UException) long UModbus::getWord( int addr, int mbreg, int mbfunc )throw(UException)
...@@ -130,10 +130,10 @@ long UModbus::mbread( int mbaddr, int mbreg, int mbfunc, const char* s_vtype, in ...@@ -130,10 +130,10 @@ long UModbus::mbread( int mbaddr, int mbreg, int mbfunc, const char* s_vtype, in
// const char* n_ip = strcmp(new_ip,"") ? new_ip : ip; // const char* n_ip = strcmp(new_ip,"") ? new_ip : ip;
const char* n_ip = (new_ip != 0) ? new_ip : ip.c_str(); const char* n_ip = (new_ip != 0) ? new_ip : ip.c_str();
int n_port = ( new_port > 0 ) ? new_port : port; int n_port = ( new_port > 0 ) ? new_port : port;
connect(n_ip,n_port); connect(n_ip,n_port);
VType vt = str2type(s_vtype); VType vt = str2type(s_vtype);
if( vt == vtUnknown ) if( vt == vtUnknown )
{ {
...@@ -217,7 +217,7 @@ long UModbus::mbread( int mbaddr, int mbreg, int mbfunc, const char* s_vtype, in ...@@ -217,7 +217,7 @@ long UModbus::mbread( int mbaddr, int mbreg, int mbfunc, const char* s_vtype, in
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
long UModbus::data2value( VTypes::VType vtype, ModbusRTU::ModbusData* data ) long UModbus::data2value( VTypes::VType vtype, ModbusRTU::ModbusData* data )
{ {
#if 0 #if 0
if( vt == VTypes::vtUnknown ) if( vt == VTypes::vtUnknown )
{ {
ModbusRTU::DataBits16 b(data[0]); ModbusRTU::DataBits16 b(data[0]);
......
...@@ -24,7 +24,7 @@ class UModbus ...@@ -24,7 +24,7 @@ class UModbus
// выставление паметров связи, без установления соединения (!) // выставление паметров связи, без установления соединения (!)
void prepare( const char* ip, int port )throw(UException); void prepare( const char* ip, int port )throw(UException);
void connect( const char* ip, int port )throw(UException); void connect( const char* ip, int port )throw(UException);
inline int conn_port(){ return port; } inline int conn_port(){ return port; }
inline std::string conn_ip(){ return ip; } inline std::string conn_ip(){ return ip; }
...@@ -32,7 +32,7 @@ class UModbus ...@@ -32,7 +32,7 @@ class UModbus
inline void setTimeout( int msec ){ tout_msec = msec; } inline void setTimeout( int msec ){ tout_msec = msec; }
/*! Универсальная функция для чтения регистров. /*! Универсальная функция для чтения регистров.
* Если не указывать ip и порт, будут использованы, те * Если не указывать ip и порт, будут использованы, те
* чтобы были заданы в UModbus::connect(). Если заданы другие ip и port, * чтобы были заданы в UModbus::connect(). Если заданы другие ip и port,
* будет сделано переподключение.. * будет сделано переподключение..
...@@ -54,7 +54,7 @@ class UModbus ...@@ -54,7 +54,7 @@ class UModbus
protected: protected:
long data2value( VTypes::VType vt, ModbusRTU::ModbusData* data ); long data2value( VTypes::VType vt, ModbusRTU::ModbusData* data );
private: private:
// DebugStream dlog; // DebugStream dlog;
ModbusTCPMaster* mb; ModbusTCPMaster* mb;
......
...@@ -2983,7 +2983,7 @@ static swig_module_info swig_module = {swig_types, 8, 0, 0, 0, 0}; ...@@ -2983,7 +2983,7 @@ static swig_module_info swig_module = {swig_types, 8, 0, 0, 0, 0};
#endif #endif
#define SWIG_name "_pyUModbus" #define SWIG_name "_pyUModbus"
#define SWIGVERSION 0x020010 #define SWIGVERSION 0x020010
#define SWIG_VERSION SWIGVERSION #define SWIG_VERSION SWIGVERSION
...@@ -5214,7 +5214,7 @@ SWIGINTERN PyObject *Params_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObjec ...@@ -5214,7 +5214,7 @@ SWIGINTERN PyObject *Params_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObjec
SWIGINTERN PyObject *_wrap_new_UException__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { SWIGINTERN PyObject *_wrap_new_UException__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0; PyObject *resultobj = 0;
UException *result = 0 ; UException *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_UException")) SWIG_fail; if (!PyArg_ParseTuple(args,(char *)":new_UException")) SWIG_fail;
result = (UException *)new UException(); result = (UException *)new UException();
resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_UException, SWIG_POINTER_NEW | 0 ); resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_UException, SWIG_POINTER_NEW | 0 );
...@@ -5231,14 +5231,14 @@ SWIGINTERN PyObject *_wrap_new_UException__SWIG_1(PyObject *SWIGUNUSEDPARM(self) ...@@ -5231,14 +5231,14 @@ SWIGINTERN PyObject *_wrap_new_UException__SWIG_1(PyObject *SWIGUNUSEDPARM(self)
int res1 = 0 ; int res1 = 0 ;
PyObject * obj0 = 0 ; PyObject * obj0 = 0 ;
UException *result = 0 ; UException *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:new_UException",&obj0)) SWIG_fail; if (!PyArg_ParseTuple(args,(char *)"O:new_UException",&obj0)) SWIG_fail;
res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_std__string, 0 | 0); res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_std__string, 0 | 0);
if (!SWIG_IsOK(res1)) { if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_UException" "', argument " "1"" of type '" "std::string const &""'"); SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_UException" "', argument " "1"" of type '" "std::string const &""'");
} }
if (!argp1) { if (!argp1) {
SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_UException" "', argument " "1"" of type '" "std::string const &""'"); SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_UException" "', argument " "1"" of type '" "std::string const &""'");
} }
arg1 = reinterpret_cast< std::string * >(argp1); arg1 = reinterpret_cast< std::string * >(argp1);
result = (UException *)new UException((std::string const &)*arg1); result = (UException *)new UException((std::string const &)*arg1);
...@@ -5257,7 +5257,7 @@ SWIGINTERN PyObject *_wrap_new_UException__SWIG_2(PyObject *SWIGUNUSEDPARM(self) ...@@ -5257,7 +5257,7 @@ SWIGINTERN PyObject *_wrap_new_UException__SWIG_2(PyObject *SWIGUNUSEDPARM(self)
int alloc1 = 0 ; int alloc1 = 0 ;
PyObject * obj0 = 0 ; PyObject * obj0 = 0 ;
UException *result = 0 ; UException *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:new_UException",&obj0)) SWIG_fail; if (!PyArg_ParseTuple(args,(char *)"O:new_UException",&obj0)) SWIG_fail;
res1 = SWIG_AsCharPtrAndSize(obj0, &buf1, NULL, &alloc1); res1 = SWIG_AsCharPtrAndSize(obj0, &buf1, NULL, &alloc1);
if (!SWIG_IsOK(res1)) { if (!SWIG_IsOK(res1)) {
...@@ -5278,7 +5278,7 @@ SWIGINTERN PyObject *_wrap_new_UException(PyObject *self, PyObject *args) { ...@@ -5278,7 +5278,7 @@ SWIGINTERN PyObject *_wrap_new_UException(PyObject *self, PyObject *args) {
int argc; int argc;
PyObject *argv[2]; PyObject *argv[2];
int ii; int ii;
if (!PyTuple_Check(args)) SWIG_fail; if (!PyTuple_Check(args)) SWIG_fail;
argc = args ? (int)PyObject_Length(args) : 0; argc = args ? (int)PyObject_Length(args) : 0;
for (ii = 0; (ii < 1) && (ii < argc); ii++) { for (ii = 0; (ii < 1) && (ii < argc); ii++) {
...@@ -5303,7 +5303,7 @@ SWIGINTERN PyObject *_wrap_new_UException(PyObject *self, PyObject *args) { ...@@ -5303,7 +5303,7 @@ SWIGINTERN PyObject *_wrap_new_UException(PyObject *self, PyObject *args) {
return _wrap_new_UException__SWIG_2(self, args); return _wrap_new_UException__SWIG_2(self, args);
} }
} }
fail: fail:
SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'new_UException'.\n" SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'new_UException'.\n"
" Possible C/C++ prototypes are:\n" " Possible C/C++ prototypes are:\n"
...@@ -5320,11 +5320,11 @@ SWIGINTERN PyObject *_wrap_delete_UException(PyObject *SWIGUNUSEDPARM(self), PyO ...@@ -5320,11 +5320,11 @@ SWIGINTERN PyObject *_wrap_delete_UException(PyObject *SWIGUNUSEDPARM(self), PyO
void *argp1 = 0 ; void *argp1 = 0 ;
int res1 = 0 ; int res1 = 0 ;
PyObject * obj0 = 0 ; PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_UException",&obj0)) SWIG_fail; if (!PyArg_ParseTuple(args,(char *)"O:delete_UException",&obj0)) SWIG_fail;
res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_UException, SWIG_POINTER_DISOWN | 0 ); res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_UException, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) { if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_UException" "', argument " "1"" of type '" "UException *""'"); SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_UException" "', argument " "1"" of type '" "UException *""'");
} }
arg1 = reinterpret_cast< UException * >(argp1); arg1 = reinterpret_cast< UException * >(argp1);
delete arg1; delete arg1;
...@@ -5342,11 +5342,11 @@ SWIGINTERN PyObject *_wrap_UException_getError(PyObject *SWIGUNUSEDPARM(self), P ...@@ -5342,11 +5342,11 @@ SWIGINTERN PyObject *_wrap_UException_getError(PyObject *SWIGUNUSEDPARM(self), P
int res1 = 0 ; int res1 = 0 ;
PyObject * obj0 = 0 ; PyObject * obj0 = 0 ;
char *result = 0 ; char *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:UException_getError",&obj0)) SWIG_fail; if (!PyArg_ParseTuple(args,(char *)"O:UException_getError",&obj0)) SWIG_fail;
res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_UException, 0 | 0 ); res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_UException, 0 | 0 );
if (!SWIG_IsOK(res1)) { if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "UException_getError" "', argument " "1"" of type '" "UException *""'"); SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "UException_getError" "', argument " "1"" of type '" "UException *""'");
} }
arg1 = reinterpret_cast< UException * >(argp1); arg1 = reinterpret_cast< UException * >(argp1);
result = (char *)(arg1)->getError(); result = (char *)(arg1)->getError();
...@@ -5367,18 +5367,18 @@ SWIGINTERN PyObject *_wrap_UException_err_set(PyObject *SWIGUNUSEDPARM(self), Py ...@@ -5367,18 +5367,18 @@ SWIGINTERN PyObject *_wrap_UException_err_set(PyObject *SWIGUNUSEDPARM(self), Py
int res2 = 0 ; int res2 = 0 ;
PyObject * obj0 = 0 ; PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ; PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:UException_err_set",&obj0,&obj1)) SWIG_fail; if (!PyArg_ParseTuple(args,(char *)"OO:UException_err_set",&obj0,&obj1)) SWIG_fail;
res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_UException, 0 | 0 ); res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_UException, 0 | 0 );
if (!SWIG_IsOK(res1)) { if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "UException_err_set" "', argument " "1"" of type '" "UException *""'"); SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "UException_err_set" "', argument " "1"" of type '" "UException *""'");
} }
arg1 = reinterpret_cast< UException * >(argp1); arg1 = reinterpret_cast< UException * >(argp1);
{ {
res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_std__string, 0 | 0); res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_std__string, 0 | 0);
if (!SWIG_IsOK(res2)) { if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "UException_err_set" "', argument " "2"" of type '" "std::string""'"); SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "UException_err_set" "', argument " "2"" of type '" "std::string""'");
} }
if (!argp2) { if (!argp2) {
SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "UException_err_set" "', argument " "2"" of type '" "std::string""'"); SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "UException_err_set" "', argument " "2"" of type '" "std::string""'");
} else { } else {
...@@ -5402,11 +5402,11 @@ SWIGINTERN PyObject *_wrap_UException_err_get(PyObject *SWIGUNUSEDPARM(self), Py ...@@ -5402,11 +5402,11 @@ SWIGINTERN PyObject *_wrap_UException_err_get(PyObject *SWIGUNUSEDPARM(self), Py
int res1 = 0 ; int res1 = 0 ;
PyObject * obj0 = 0 ; PyObject * obj0 = 0 ;
std::string result; std::string result;
if (!PyArg_ParseTuple(args,(char *)"O:UException_err_get",&obj0)) SWIG_fail; if (!PyArg_ParseTuple(args,(char *)"O:UException_err_get",&obj0)) SWIG_fail;
res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_UException, 0 | 0 ); res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_UException, 0 | 0 );
if (!SWIG_IsOK(res1)) { if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "UException_err_get" "', argument " "1"" of type '" "UException *""'"); SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "UException_err_get" "', argument " "1"" of type '" "UException *""'");
} }
arg1 = reinterpret_cast< UException * >(argp1); arg1 = reinterpret_cast< UException * >(argp1);
result = ((arg1)->err); result = ((arg1)->err);
...@@ -5427,7 +5427,7 @@ SWIGINTERN PyObject *UException_swigregister(PyObject *SWIGUNUSEDPARM(self), PyO ...@@ -5427,7 +5427,7 @@ SWIGINTERN PyObject *UException_swigregister(PyObject *SWIGUNUSEDPARM(self), PyO
SWIGINTERN PyObject *_wrap_new_UTimeOut__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { SWIGINTERN PyObject *_wrap_new_UTimeOut__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0; PyObject *resultobj = 0;
UTimeOut *result = 0 ; UTimeOut *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_UTimeOut")) SWIG_fail; if (!PyArg_ParseTuple(args,(char *)":new_UTimeOut")) SWIG_fail;
result = (UTimeOut *)new UTimeOut(); result = (UTimeOut *)new UTimeOut();
resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_UTimeOut, SWIG_POINTER_NEW | 0 ); resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_UTimeOut, SWIG_POINTER_NEW | 0 );
...@@ -5444,14 +5444,14 @@ SWIGINTERN PyObject *_wrap_new_UTimeOut__SWIG_1(PyObject *SWIGUNUSEDPARM(self), ...@@ -5444,14 +5444,14 @@ SWIGINTERN PyObject *_wrap_new_UTimeOut__SWIG_1(PyObject *SWIGUNUSEDPARM(self),
int res1 = 0 ; int res1 = 0 ;
PyObject * obj0 = 0 ; PyObject * obj0 = 0 ;
UTimeOut *result = 0 ; UTimeOut *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:new_UTimeOut",&obj0)) SWIG_fail; if (!PyArg_ParseTuple(args,(char *)"O:new_UTimeOut",&obj0)) SWIG_fail;
res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_std__string, 0 | 0); res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_std__string, 0 | 0);
if (!SWIG_IsOK(res1)) { if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_UTimeOut" "', argument " "1"" of type '" "std::string const &""'"); SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_UTimeOut" "', argument " "1"" of type '" "std::string const &""'");
} }
if (!argp1) { if (!argp1) {
SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_UTimeOut" "', argument " "1"" of type '" "std::string const &""'"); SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_UTimeOut" "', argument " "1"" of type '" "std::string const &""'");
} }
arg1 = reinterpret_cast< std::string * >(argp1); arg1 = reinterpret_cast< std::string * >(argp1);
result = (UTimeOut *)new UTimeOut((std::string const &)*arg1); result = (UTimeOut *)new UTimeOut((std::string const &)*arg1);
...@@ -5466,7 +5466,7 @@ SWIGINTERN PyObject *_wrap_new_UTimeOut(PyObject *self, PyObject *args) { ...@@ -5466,7 +5466,7 @@ SWIGINTERN PyObject *_wrap_new_UTimeOut(PyObject *self, PyObject *args) {
int argc; int argc;
PyObject *argv[2]; PyObject *argv[2];
int ii; int ii;
if (!PyTuple_Check(args)) SWIG_fail; if (!PyTuple_Check(args)) SWIG_fail;
argc = args ? (int)PyObject_Length(args) : 0; argc = args ? (int)PyObject_Length(args) : 0;
for (ii = 0; (ii < 1) && (ii < argc); ii++) { for (ii = 0; (ii < 1) && (ii < argc); ii++) {
...@@ -5483,7 +5483,7 @@ SWIGINTERN PyObject *_wrap_new_UTimeOut(PyObject *self, PyObject *args) { ...@@ -5483,7 +5483,7 @@ SWIGINTERN PyObject *_wrap_new_UTimeOut(PyObject *self, PyObject *args) {
return _wrap_new_UTimeOut__SWIG_1(self, args); return _wrap_new_UTimeOut__SWIG_1(self, args);
} }
} }
fail: fail:
SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'new_UTimeOut'.\n" SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'new_UTimeOut'.\n"
" Possible C/C++ prototypes are:\n" " Possible C/C++ prototypes are:\n"
...@@ -5499,11 +5499,11 @@ SWIGINTERN PyObject *_wrap_delete_UTimeOut(PyObject *SWIGUNUSEDPARM(self), PyObj ...@@ -5499,11 +5499,11 @@ SWIGINTERN PyObject *_wrap_delete_UTimeOut(PyObject *SWIGUNUSEDPARM(self), PyObj
void *argp1 = 0 ; void *argp1 = 0 ;
int res1 = 0 ; int res1 = 0 ;
PyObject * obj0 = 0 ; PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_UTimeOut",&obj0)) SWIG_fail; if (!PyArg_ParseTuple(args,(char *)"O:delete_UTimeOut",&obj0)) SWIG_fail;
res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_UTimeOut, SWIG_POINTER_DISOWN | 0 ); res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_UTimeOut, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) { if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_UTimeOut" "', argument " "1"" of type '" "UTimeOut *""'"); SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_UTimeOut" "', argument " "1"" of type '" "UTimeOut *""'");
} }
arg1 = reinterpret_cast< UTimeOut * >(argp1); arg1 = reinterpret_cast< UTimeOut * >(argp1);
delete arg1; delete arg1;
...@@ -5524,7 +5524,7 @@ SWIGINTERN PyObject *UTimeOut_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObj ...@@ -5524,7 +5524,7 @@ SWIGINTERN PyObject *UTimeOut_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObj
SWIGINTERN PyObject *_wrap_new_USysError__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { SWIGINTERN PyObject *_wrap_new_USysError__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0; PyObject *resultobj = 0;
USysError *result = 0 ; USysError *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_USysError")) SWIG_fail; if (!PyArg_ParseTuple(args,(char *)":new_USysError")) SWIG_fail;
result = (USysError *)new USysError(); result = (USysError *)new USysError();
resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_USysError, SWIG_POINTER_NEW | 0 ); resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_USysError, SWIG_POINTER_NEW | 0 );
...@@ -5541,14 +5541,14 @@ SWIGINTERN PyObject *_wrap_new_USysError__SWIG_1(PyObject *SWIGUNUSEDPARM(self), ...@@ -5541,14 +5541,14 @@ SWIGINTERN PyObject *_wrap_new_USysError__SWIG_1(PyObject *SWIGUNUSEDPARM(self),
int res1 = 0 ; int res1 = 0 ;
PyObject * obj0 = 0 ; PyObject * obj0 = 0 ;
USysError *result = 0 ; USysError *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:new_USysError",&obj0)) SWIG_fail; if (!PyArg_ParseTuple(args,(char *)"O:new_USysError",&obj0)) SWIG_fail;
res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_std__string, 0 | 0); res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_std__string, 0 | 0);
if (!SWIG_IsOK(res1)) { if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_USysError" "', argument " "1"" of type '" "std::string const &""'"); SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_USysError" "', argument " "1"" of type '" "std::string const &""'");
} }
if (!argp1) { if (!argp1) {
SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_USysError" "', argument " "1"" of type '" "std::string const &""'"); SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_USysError" "', argument " "1"" of type '" "std::string const &""'");
} }
arg1 = reinterpret_cast< std::string * >(argp1); arg1 = reinterpret_cast< std::string * >(argp1);
result = (USysError *)new USysError((std::string const &)*arg1); result = (USysError *)new USysError((std::string const &)*arg1);
...@@ -5563,7 +5563,7 @@ SWIGINTERN PyObject *_wrap_new_USysError(PyObject *self, PyObject *args) { ...@@ -5563,7 +5563,7 @@ SWIGINTERN PyObject *_wrap_new_USysError(PyObject *self, PyObject *args) {
int argc; int argc;
PyObject *argv[2]; PyObject *argv[2];
int ii; int ii;
if (!PyTuple_Check(args)) SWIG_fail; if (!PyTuple_Check(args)) SWIG_fail;
argc = args ? (int)PyObject_Length(args) : 0; argc = args ? (int)PyObject_Length(args) : 0;
for (ii = 0; (ii < 1) && (ii < argc); ii++) { for (ii = 0; (ii < 1) && (ii < argc); ii++) {
...@@ -5580,7 +5580,7 @@ SWIGINTERN PyObject *_wrap_new_USysError(PyObject *self, PyObject *args) { ...@@ -5580,7 +5580,7 @@ SWIGINTERN PyObject *_wrap_new_USysError(PyObject *self, PyObject *args) {
return _wrap_new_USysError__SWIG_1(self, args); return _wrap_new_USysError__SWIG_1(self, args);
} }
} }
fail: fail:
SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'new_USysError'.\n" SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'new_USysError'.\n"
" Possible C/C++ prototypes are:\n" " Possible C/C++ prototypes are:\n"
...@@ -5596,11 +5596,11 @@ SWIGINTERN PyObject *_wrap_delete_USysError(PyObject *SWIGUNUSEDPARM(self), PyOb ...@@ -5596,11 +5596,11 @@ SWIGINTERN PyObject *_wrap_delete_USysError(PyObject *SWIGUNUSEDPARM(self), PyOb
void *argp1 = 0 ; void *argp1 = 0 ;
int res1 = 0 ; int res1 = 0 ;
PyObject * obj0 = 0 ; PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_USysError",&obj0)) SWIG_fail; if (!PyArg_ParseTuple(args,(char *)"O:delete_USysError",&obj0)) SWIG_fail;
res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_USysError, SWIG_POINTER_DISOWN | 0 ); res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_USysError, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) { if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_USysError" "', argument " "1"" of type '" "USysError *""'"); SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_USysError" "', argument " "1"" of type '" "USysError *""'");
} }
arg1 = reinterpret_cast< USysError * >(argp1); arg1 = reinterpret_cast< USysError * >(argp1);
delete arg1; delete arg1;
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
namespace UTypes namespace UTypes
{ {
const long DefaultID = UniSetTypes::DefaultObjectId; const long DefaultID = UniSetTypes::DefaultObjectId;
struct Params struct Params
{ {
static const int max = 20; static const int max = 20;
...@@ -25,7 +25,7 @@ namespace UTypes ...@@ -25,7 +25,7 @@ namespace UTypes
int argc; int argc;
char* argv[max]; char* argv[max];
static Params inst(){ return Params(); } static Params inst(){ return Params(); }
}; };
} }
......
...@@ -117,7 +117,7 @@ class UException(Exception): ...@@ -117,7 +117,7 @@ class UException(Exception):
__swig_getmethods__ = {} __swig_getmethods__ = {}
__getattr__ = lambda self, name: _swig_getattr(self, UException, name) __getattr__ = lambda self, name: _swig_getattr(self, UException, name)
__repr__ = _swig_repr __repr__ = _swig_repr
def __init__(self, *args): def __init__(self, *args):
this = _pyUModbus.new_UException(*args) this = _pyUModbus.new_UException(*args)
try: self.this.append(this) try: self.this.append(this)
except: self.this = this except: self.this = this
...@@ -137,7 +137,7 @@ class UTimeOut(UException): ...@@ -137,7 +137,7 @@ class UTimeOut(UException):
for _s in [UException]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{})) for _s in [UException]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{}))
__getattr__ = lambda self, name: _swig_getattr(self, UTimeOut, name) __getattr__ = lambda self, name: _swig_getattr(self, UTimeOut, name)
__repr__ = _swig_repr __repr__ = _swig_repr
def __init__(self, *args): def __init__(self, *args):
this = _pyUModbus.new_UTimeOut(*args) this = _pyUModbus.new_UTimeOut(*args)
try: self.this.append(this) try: self.this.append(this)
except: self.this = this except: self.this = this
...@@ -154,7 +154,7 @@ class USysError(UException): ...@@ -154,7 +154,7 @@ class USysError(UException):
for _s in [UException]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{})) for _s in [UException]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{}))
__getattr__ = lambda self, name: _swig_getattr(self, USysError, name) __getattr__ = lambda self, name: _swig_getattr(self, USysError, name)
__repr__ = _swig_repr __repr__ = _swig_repr
def __init__(self, *args): def __init__(self, *args):
this = _pyUModbus.new_USysError(*args) this = _pyUModbus.new_USysError(*args)
try: self.this.append(this) try: self.this.append(this)
except: self.this = this except: self.this = this
......
...@@ -53,12 +53,12 @@ void ComPort::openPort() ...@@ -53,12 +53,12 @@ void ComPort::openPort()
string strErr="Unable to open "+dev+" [Error: "+strerror(errno)+"]"; string strErr="Unable to open "+dev+" [Error: "+strerror(errno)+"]";
throw UniSetTypes::SystemError(strErr.c_str()); throw UniSetTypes::SystemError(strErr.c_str());
} }
/* Get the current options for the port */ /* Get the current options for the port */
tcgetattr(fd, &options); tcgetattr(fd, &options);
oldTermios=options; oldTermios=options;
cfsetispeed(&options, B19200); /* Set the baud rates to 19200 */ cfsetispeed(&options, B19200); /* Set the baud rates to 19200 */
cfsetospeed(&options, B19200); cfsetospeed(&options, B19200);
...@@ -93,7 +93,7 @@ void ComPort::reopen() ...@@ -93,7 +93,7 @@ void ComPort::reopen()
openPort(); openPort();
if( fd > 0 ) if( fd > 0 )
tcsetattr(fd, TCSAFLUSH, &options); tcsetattr(fd, TCSAFLUSH, &options);
} }
} }
// -------------------------------------------------------------------------------- // --------------------------------------------------------------------------------
void ComPort::setSpeed( Speed s ) void ComPort::setSpeed( Speed s )
...@@ -114,7 +114,7 @@ void ComPort::setParity(Parity parity) ...@@ -114,7 +114,7 @@ void ComPort::setParity(Parity parity)
struct termios options; struct termios options;
tcgetattr(fd, &options); tcgetattr(fd, &options);
switch(parity) switch(parity)
{ {
case Odd: case Odd:
...@@ -205,14 +205,14 @@ unsigned char ComPort::m_receiveByte( bool wait ) ...@@ -205,14 +205,14 @@ unsigned char ComPort::m_receiveByte( bool wait )
{ {
fd_set set; fd_set set;
timeval timeout; timeval timeout;
FD_ZERO (&set); FD_ZERO (&set);
FD_SET (fd, &set); FD_SET (fd, &set);
/* Initialize the timeout data structure. */ /* Initialize the timeout data structure. */
timeout.tv_sec = 0; timeout.tv_sec = 0;
timeout.tv_usec = uTimeout; timeout.tv_usec = uTimeout;
/* select' returns 0 if timeout, 1 if input available, -1 if error. */ /* select' returns 0 if timeout, 1 if input available, -1 if error. */
if(select(FD_SETSIZE, &set, NULL, NULL, &timeout)==1) if(select(FD_SETSIZE, &set, NULL, NULL, &timeout)==1)
...@@ -287,10 +287,10 @@ int ComPort::sendBlock(unsigned char* msg, int len) ...@@ -287,10 +287,10 @@ int ComPort::sendBlock(unsigned char* msg, int len)
int ComPort::receiveBlock(unsigned char* msg, int len) int ComPort::receiveBlock(unsigned char* msg, int len)
{ {
int k; int k;
if(!len) if(!len)
return 0; return 0;
for(k=0;k<len;k++) for(k=0;k<len;k++)
{ {
try try
...@@ -302,12 +302,12 @@ int ComPort::receiveBlock(unsigned char* msg, int len) ...@@ -302,12 +302,12 @@ int ComPort::receiveBlock(unsigned char* msg, int len)
break; break;
} }
} }
if(!k) if(!k)
{ {
throw UniSetTypes::TimeOut(); throw UniSetTypes::TimeOut();
} }
return k; return k;
} }
...@@ -424,13 +424,13 @@ std::string ComPort::getSpeed( Speed s ) ...@@ -424,13 +424,13 @@ std::string ComPort::getSpeed( Speed s )
// -------------------------------------------------------------------------------- // --------------------------------------------------------------------------------
#define CHECK_SPEED(var,speed) \ #define CHECK_SPEED(var,speed) \
if( var == __STRING(speed) ) \ if( var == __STRING(speed) ) \
return ComPort::ComSpeed##speed; return ComPort::ComSpeed##speed;
ComPort::Speed ComPort::getSpeed( const string& s ) ComPort::Speed ComPort::getSpeed( const string& s )
{ {
// см. ComPort.h // см. ComPort.h
// сперва самые вероятные // сперва самые вероятные
CHECK_SPEED(s,9600) CHECK_SPEED(s,9600)
CHECK_SPEED(s,19200) CHECK_SPEED(s,19200)
CHECK_SPEED(s,38400) CHECK_SPEED(s,38400)
...@@ -450,7 +450,7 @@ ComPort::Speed ComPort::getSpeed( const string& s ) ...@@ -450,7 +450,7 @@ ComPort::Speed ComPort::getSpeed( const string& s )
CHECK_SPEED(s,1800) CHECK_SPEED(s,1800)
CHECK_SPEED(s,2400) CHECK_SPEED(s,2400)
CHECK_SPEED(s,4800) CHECK_SPEED(s,4800)
CHECK_SPEED(s,230400) CHECK_SPEED(s,230400)
CHECK_SPEED(s,460800) CHECK_SPEED(s,460800)
CHECK_SPEED(s,500000) CHECK_SPEED(s,500000)
......
...@@ -87,7 +87,7 @@ unsigned char ComPort485F::m_receiveByte( bool wait ) ...@@ -87,7 +87,7 @@ unsigned char ComPort485F::m_receiveByte( bool wait )
gpio_low_set_value(gpio_num, 0); gpio_low_set_value(gpio_num, 0);
} }
if( rq.empty() ) if( rq.empty() )
{ {
int rc = 0; int rc = 0;
if( wait ) if( wait )
{ {
...@@ -100,17 +100,17 @@ unsigned char ComPort485F::m_receiveByte( bool wait ) ...@@ -100,17 +100,17 @@ unsigned char ComPort485F::m_receiveByte( bool wait )
{ {
ioctl(fd, FIONREAD, &rc); ioctl(fd, FIONREAD, &rc);
if( rc > 0 ) if( rc > 0 )
{ {
rc = ::read(fd,tbuf,sizeof(tbuf)); rc = ::read(fd,tbuf,sizeof(tbuf));
if( rc > 0 ) if( rc > 0 )
{ {
if( remove_echo(tbuf,rc) ) if( remove_echo(tbuf,rc) )
break; break;
} }
} }
usleep(3000); usleep(3000);
} }
if ( ptRecv.checkTime() ) if ( ptRecv.checkTime() )
rc = -1; rc = -1;
} }
...@@ -132,7 +132,7 @@ unsigned char ComPort485F::m_receiveByte( bool wait ) ...@@ -132,7 +132,7 @@ unsigned char ComPort485F::m_receiveByte( bool wait )
throw UniSetTypes::TimeOut(); throw UniSetTypes::TimeOut();
} }
unsigned char x = rq.front(); unsigned char x = rq.front();
rq.pop(); rq.pop();
return x; return x;
...@@ -250,7 +250,7 @@ bool ComPort485F::remove_echo( unsigned char tb[], int len ) ...@@ -250,7 +250,7 @@ bool ComPort485F::remove_echo( unsigned char tb[], int len )
rq.push(tb[i]); rq.push(tb[i]);
} }
// возвращаем число оставшихся символов // возвращаем число оставшихся символов
return wq.empty(); return wq.empty();
} }
// -------------------------------------------------------------------------------- // --------------------------------------------------------------------------------
...@@ -262,7 +262,7 @@ void ComPort485F::m_read( int tmsec ) ...@@ -262,7 +262,7 @@ void ComPort485F::m_read( int tmsec )
{ {
ioctl(fd, FIONREAD, &rc); ioctl(fd, FIONREAD, &rc);
if( rc > 0 ) if( rc > 0 )
{ {
rc = ::read(fd,tbuf,sizeof(tbuf)); rc = ::read(fd,tbuf,sizeof(tbuf));
if( rc > 0 ) if( rc > 0 )
{ {
......
...@@ -199,7 +199,7 @@ SetDateTimeRetMessage ModbusClient::setDateTime( ModbusAddr addr, ModbusByte hou ...@@ -199,7 +199,7 @@ SetDateTimeRetMessage ModbusClient::setDateTime( ModbusAddr addr, ModbusByte hou
return SetDateTimeRetMessage(reply); return SetDateTimeRetMessage(reply);
throw mbException(res); throw mbException(res);
} }
// -------------------------------------------------------------------------------- // --------------------------------------------------------------------------------
void ModbusClient::fileTransfer( ModbusAddr addr, ModbusData numfile, void ModbusClient::fileTransfer( ModbusAddr addr, ModbusData numfile,
const char* save2filename, timeout_t part_timeout_msec ) const char* save2filename, timeout_t part_timeout_msec )
...@@ -213,12 +213,12 @@ void ModbusClient::fileTransfer( ModbusAddr addr, ModbusData numfile, ...@@ -213,12 +213,12 @@ void ModbusClient::fileTransfer( ModbusAddr addr, ModbusData numfile,
if( fdsave == NULL ) if( fdsave == NULL )
{ {
if( dlog.is_warn() ) if( dlog.is_warn() )
dlog.warn() << "(fileTransfer): fopen '" dlog.warn() << "(fileTransfer): fopen '"
<< save2filename << "' with error: " << save2filename << "' with error: "
<< strerror(errno) << endl; << strerror(errno) << endl;
throw mbException(erHardwareError); throw mbException(erHardwareError);
} }
unsigned short maxpackets = 65535; unsigned short maxpackets = 65535;
unsigned short curpack = 0; unsigned short curpack = 0;
...@@ -227,12 +227,12 @@ void ModbusClient::fileTransfer( ModbusAddr addr, ModbusData numfile, ...@@ -227,12 +227,12 @@ void ModbusClient::fileTransfer( ModbusAddr addr, ModbusData numfile,
while( curpack < maxpackets && !ptTimeout.checkTime() ) while( curpack < maxpackets && !ptTimeout.checkTime() )
{ {
try try
{ {
FileTransferRetMessage ret = partOfFileTransfer( addr, numfile, curpack, part_timeout_msec ); FileTransferRetMessage ret = partOfFileTransfer( addr, numfile, curpack, part_timeout_msec );
if( ret.numfile != numfile ) if( ret.numfile != numfile )
{ {
if( dlog.is_warn() ) if( dlog.is_warn() )
dlog.warn() << "(fileTransfer): recv nfile=" << ret.numfile dlog.warn() << "(fileTransfer): recv nfile=" << ret.numfile
<< " !=numfile(" << numfile << ")" << endl; << " !=numfile(" << numfile << ")" << endl;
continue; continue;
} }
...@@ -240,25 +240,25 @@ void ModbusClient::fileTransfer( ModbusAddr addr, ModbusData numfile, ...@@ -240,25 +240,25 @@ void ModbusClient::fileTransfer( ModbusAddr addr, ModbusData numfile,
if( ret.packet != curpack ) if( ret.packet != curpack )
{ {
if( dlog.is_warn() ) if( dlog.is_warn() )
dlog.warn() << "(fileTransfer): recv npack=" << ret.packet dlog.warn() << "(fileTransfer): recv npack=" << ret.packet
<< " !=curpack(" << curpack << ")" << endl; << " !=curpack(" << curpack << ")" << endl;
continue; continue;
} }
maxpackets = ret.numpacks; maxpackets = ret.numpacks;
if( dlog.is_info() ) if( dlog.is_info() )
dlog.info() << "(fileTransfer): maxpackets=" dlog.info() << "(fileTransfer): maxpackets="
<< ret.numpacks << " curpack=" << curpack+1 << endl; << ret.numpacks << " curpack=" << curpack+1 << endl;
// save data... // save data...
if( fwrite(&ret.data,ret.dlen,1,fdsave) <= 0 ) if( fwrite(&ret.data,ret.dlen,1,fdsave) <= 0 )
{ {
if( dlog.is_warn() ) if( dlog.is_warn() )
dlog.warn() << "(fileTransfer): fwrite '" dlog.warn() << "(fileTransfer): fwrite '"
<< save2filename << "' with error: " << save2filename << "' with error: "
<< strerror(errno) << endl; << strerror(errno) << endl;
res = erHardwareError; res = erHardwareError;
break; break;
} }
...@@ -272,12 +272,12 @@ void ModbusClient::fileTransfer( ModbusAddr addr, ModbusData numfile, ...@@ -272,12 +272,12 @@ void ModbusClient::fileTransfer( ModbusAddr addr, ModbusData numfile,
continue; continue;
res = ex.err; res = ex.err;
break; break;
} }
} }
fclose(fdsave); fclose(fdsave);
if( curpack == maxpackets ) if( curpack == maxpackets )
return; return;
...@@ -285,7 +285,7 @@ void ModbusClient::fileTransfer( ModbusAddr addr, ModbusData numfile, ...@@ -285,7 +285,7 @@ void ModbusClient::fileTransfer( ModbusAddr addr, ModbusData numfile,
res = erTimeOut; res = erTimeOut;
throw mbException(res); throw mbException(res);
} }
// -------------------------------------------------------------------------------- // --------------------------------------------------------------------------------
FileTransferRetMessage ModbusClient::partOfFileTransfer( ModbusAddr addr, FileTransferRetMessage ModbusClient::partOfFileTransfer( ModbusAddr addr,
ModbusData idFile, ModbusData numpack, ModbusData idFile, ModbusData numpack,
...@@ -300,7 +300,7 @@ FileTransferRetMessage ModbusClient::partOfFileTransfer( ModbusAddr addr, ...@@ -300,7 +300,7 @@ FileTransferRetMessage ModbusClient::partOfFileTransfer( ModbusAddr addr,
return FileTransferRetMessage(reply); return FileTransferRetMessage(reply);
throw mbException(res); throw mbException(res);
} }
// -------------------------------------------------------------------------------- // --------------------------------------------------------------------------------
mbErrCode ModbusClient::recv( ModbusAddr addr, ModbusByte qfunc, mbErrCode ModbusClient::recv( ModbusAddr addr, ModbusByte qfunc,
ModbusMessage& rbuf, timeout_t timeout ) ModbusMessage& rbuf, timeout_t timeout )
...@@ -314,7 +314,7 @@ mbErrCode ModbusClient::recv( ModbusAddr addr, ModbusByte qfunc, ...@@ -314,7 +314,7 @@ mbErrCode ModbusClient::recv( ModbusAddr addr, ModbusByte qfunc,
// предварительно чистим буфер // предварительно чистим буфер
memset(&rbuf,0,sizeof(rbuf)); memset(&rbuf,0,sizeof(rbuf));
int bcnt=0; // receive bytes count int bcnt=0; // receive bytes count
try try
{ {
bool begin = false; bool begin = false;
...@@ -326,14 +326,14 @@ mbErrCode ModbusClient::recv( ModbusAddr addr, ModbusByte qfunc, ...@@ -326,14 +326,14 @@ mbErrCode ModbusClient::recv( ModbusAddr addr, ModbusByte qfunc,
begin = true; begin = true;
break; break;
} }
usleep(sleepPause_usec); usleep(sleepPause_usec);
} }
if( !begin ) if( !begin )
return erTimeOut; return erTimeOut;
/*! \todo Подумать Может стоит всё-таки получать весь пакет, а проверять кому он адресован на уровне выше?! /*! \todo Подумать Может стоит всё-таки получать весь пакет, а проверять кому он адресован на уровне выше?!
// Lav: конечно стоит, нам же надо буфер чистить // Lav: конечно стоит, нам же надо буфер чистить
*/ */
// Проверка кому адресован пакет... // Проверка кому адресован пакет...
...@@ -363,7 +363,7 @@ mbErrCode ModbusClient::recv( ModbusAddr addr, ModbusByte qfunc, ...@@ -363,7 +363,7 @@ mbErrCode ModbusClient::recv( ModbusAddr addr, ModbusByte qfunc,
} }
return erTimeOut; return erTimeOut;
} }
// -------------------------------------------------------------------------------- // --------------------------------------------------------------------------------
...@@ -389,7 +389,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -389,7 +389,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
bcnt += k; bcnt += k;
rbuf.len = 0; rbuf.len = 0;
if( dlog.is_info() ) if( dlog.is_info() )
dlog.info() << "(recv): header: " << rbuf << endl; dlog.info() << "(recv): header: " << rbuf << endl;
...@@ -399,23 +399,23 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -399,23 +399,23 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
rbuf.len = ErrorRetMessage::szData(); rbuf.len = ErrorRetMessage::szData();
if( crcNoCheckit ) if( crcNoCheckit )
rbuf.len -= szCRC; rbuf.len -= szCRC;
int rlen = getNextData((unsigned char*)(&(rbuf.data)),rbuf.len); int rlen = getNextData((unsigned char*)(&(rbuf.data)),rbuf.len);
if( rlen < rbuf.len ) if( rlen < rbuf.len )
{ {
if( dlog.is_warn() ) if( dlog.is_warn() )
{ {
dlog.warn() << "(recv:Error): buf: " << rbuf << endl; dlog.warn() << "(recv:Error): buf: " << rbuf << endl;
dlog.warn() << "(recv:Error)(" << rbuf.func dlog.warn() << "(recv:Error)(" << rbuf.func
<< "): Получили данных меньше чем ждали...(recv=" << "): Получили данных меньше чем ждали...(recv="
<< rlen << " < wait=" << rbuf.len << ")" << endl; << rlen << " < wait=" << rbuf.len << ")" << endl;
} }
cleanupChannel(); cleanupChannel();
return erInvalidFormat; return erInvalidFormat;
} }
bcnt+=rlen; bcnt+=rlen;
ErrorRetMessage em(rbuf); ErrorRetMessage em(rbuf);
if( !crcNoCheckit ) if( !crcNoCheckit )
{ {
...@@ -439,7 +439,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -439,7 +439,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
cleanupChannel(); cleanupChannel();
return erUnExpectedPacketType; return erUnExpectedPacketType;
} }
// Определяем тип сообщения // Определяем тип сообщения
switch( rbuf.func ) switch( rbuf.func )
{ {
...@@ -464,7 +464,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -464,7 +464,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
if( crcNoCheckit ) if( crcNoCheckit )
rbuf.len -= szCRC; rbuf.len -= szCRC;
break; break;
case fnWriteOutputRegisters: case fnWriteOutputRegisters:
rbuf.len = WriteOutputRetMessage::szData(); rbuf.len = WriteOutputRetMessage::szData();
if( crcNoCheckit ) if( crcNoCheckit )
...@@ -509,7 +509,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -509,7 +509,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
case fnRemoteService: case fnRemoteService:
rbuf.len = RemoteServiceMessage::szHead(); rbuf.len = RemoteServiceMessage::szHead();
break; break;
*/ */
default: default:
cleanupChannel(); cleanupChannel();
return erUnExpectedPacketType; return erUnExpectedPacketType;
...@@ -527,15 +527,15 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -527,15 +527,15 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
if( dlog.is_warn() ) if( dlog.is_warn() )
{ {
dlog.warn() << "(recv): buf: " << rbuf << endl; dlog.warn() << "(recv): buf: " << rbuf << endl;
dlog.warn() << "(recv)(" << rbuf.func dlog.warn() << "(recv)(" << rbuf.func
<< "): Получили данных меньше чем ждали...(recv=" << "): Получили данных меньше чем ждали...(recv="
<< rlen << " < wait=" << rbuf.len << ")" << endl; << rlen << " < wait=" << rbuf.len << ")" << endl;
} }
cleanupChannel(); cleanupChannel();
return erInvalidFormat; return erInvalidFormat;
} }
bcnt+=rlen; bcnt+=rlen;
// получаем остальное... // получаем остальное...
...@@ -545,9 +545,9 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -545,9 +545,9 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
if( crcNoCheckit ) if( crcNoCheckit )
szDataLen -= szCRC; szDataLen -= szCRC;
// Мы получили только предварительный загловок // Мы получили только предварительный загловок
// Теперь необходимо дополучить данные // Теперь необходимо дополучить данные
// (c позиции rlen, т.к. часть уже получили) // (c позиции rlen, т.к. часть уже получили)
int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen); int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen);
if( rlen1 < szDataLen ) if( rlen1 < szDataLen )
...@@ -556,16 +556,16 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -556,16 +556,16 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
if( dlog.is_warn() ) if( dlog.is_warn() )
{ {
dlog.warn() << "(0x01): buf: " << rbuf << endl; dlog.warn() << "(0x01): buf: " << rbuf << endl;
dlog.warn() << "(0x01)(" dlog.warn() << "(0x01)("
<< (int)rbuf.func << "):(fnReadCoilStatus) " << (int)rbuf.func << "):(fnReadCoilStatus) "
<< "Получили данных меньше чем ждали...(" << "Получили данных меньше чем ждали...("
<< rlen1 << " < " << szDataLen << ")" << endl; << rlen1 << " < " << szDataLen << ")" << endl;
} }
cleanupChannel(); cleanupChannel();
return erInvalidFormat; return erInvalidFormat;
} }
bcnt += rlen1; bcnt += rlen1;
rbuf.len = bcnt - szModbusHeader; rbuf.len = bcnt - szModbusHeader;
...@@ -578,7 +578,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -578,7 +578,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
return erNoError; return erNoError;
// Проверяем контрольную сумму // Проверяем контрольную сумму
// от начала(включая заголовок) // от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC) // и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt; // int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC); ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
...@@ -600,9 +600,9 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -600,9 +600,9 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
if( crcNoCheckit ) if( crcNoCheckit )
szDataLen -= szCRC; szDataLen -= szCRC;
// Мы получили только предварительный загловок // Мы получили только предварительный загловок
// Теперь необходимо дополучить данные // Теперь необходимо дополучить данные
// (c позиции rlen, т.к. часть уже получили) // (c позиции rlen, т.к. часть уже получили)
int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen); int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen);
if( rlen1 < szDataLen ) if( rlen1 < szDataLen )
...@@ -611,16 +611,16 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -611,16 +611,16 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
if( dlog.is_warn() ) if( dlog.is_warn() )
{ {
dlog.warn() << "(0x02): buf: " << rbuf << endl; dlog.warn() << "(0x02): buf: " << rbuf << endl;
dlog.warn() << "(0x02)(" dlog.warn() << "(0x02)("
<< (int)rbuf.func << "):(fnReadInputStatus) " << (int)rbuf.func << "):(fnReadInputStatus) "
<< "Получили данных меньше чем ждали...(" << "Получили данных меньше чем ждали...("
<< rlen1 << " < " << szDataLen << ")" << endl; << rlen1 << " < " << szDataLen << ")" << endl;
} }
cleanupChannel(); cleanupChannel();
return erInvalidFormat; return erInvalidFormat;
} }
bcnt += rlen1; bcnt += rlen1;
rbuf.len = bcnt - szModbusHeader; rbuf.len = bcnt - szModbusHeader;
...@@ -628,12 +628,12 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -628,12 +628,12 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
if( dlog.is_info() ) if( dlog.is_info() )
dlog.info() << "(0x02)(fnReadInputStatus): recv buf: " << rbuf << endl; dlog.info() << "(0x02)(fnReadInputStatus): recv buf: " << rbuf << endl;
if( crcNoCheckit ) if( crcNoCheckit )
return erNoError; return erNoError;
// Проверяем контрольную сумму // Проверяем контрольную сумму
// от начала(включая заголовок) // от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC) // и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt; // int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC); ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
...@@ -647,7 +647,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -647,7 +647,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
return erBadCheckSum; return erBadCheckSum;
} }
return erNoError; return erNoError;
} }
else if( rbuf.func == fnReadInputRegisters ) else if( rbuf.func == fnReadInputRegisters )
{ {
...@@ -655,9 +655,9 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -655,9 +655,9 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
if( crcNoCheckit ) if( crcNoCheckit )
szDataLen -= szCRC; szDataLen -= szCRC;
// Мы получили только предварительный загловок // Мы получили только предварительный загловок
// Теперь необходимо дополучить данные // Теперь необходимо дополучить данные
// (c позиции rlen, т.к. часть уже получили) // (c позиции rlen, т.к. часть уже получили)
int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen); int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen);
if( rlen1 < szDataLen ) if( rlen1 < szDataLen )
...@@ -666,16 +666,16 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -666,16 +666,16 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
if( dlog.is_warn() ) if( dlog.is_warn() )
{ {
dlog.warn() << "(0x04): buf: " << rbuf << endl; dlog.warn() << "(0x04): buf: " << rbuf << endl;
dlog.warn() << "(0x04)(" dlog.warn() << "(0x04)("
<< (int)rbuf.func << "):(fnReadInputRegisters) " << (int)rbuf.func << "):(fnReadInputRegisters) "
<< "Получили данных меньше чем ждали...(" << "Получили данных меньше чем ждали...("
<< rlen1 << " < " << szDataLen << ")" << endl; << rlen1 << " < " << szDataLen << ")" << endl;
} }
cleanupChannel(); cleanupChannel();
return erInvalidFormat; return erInvalidFormat;
} }
bcnt += rlen1; bcnt += rlen1;
rbuf.len = bcnt - szModbusHeader; rbuf.len = bcnt - szModbusHeader;
...@@ -688,7 +688,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -688,7 +688,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
return erNoError; return erNoError;
// Проверяем контрольную сумму // Проверяем контрольную сумму
// от начала(включая заголовок) // от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC) // и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt; // int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC); ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
...@@ -709,9 +709,9 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -709,9 +709,9 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
int szDataLen = ReadOutputRetMessage::getDataLen(rbuf)+szCRC; int szDataLen = ReadOutputRetMessage::getDataLen(rbuf)+szCRC;
if( crcNoCheckit ) if( crcNoCheckit )
szDataLen -= szCRC; szDataLen -= szCRC;
// Мы получили только предварительный загловок // Мы получили только предварительный загловок
// Теперь необходимо дополучить данные // Теперь необходимо дополучить данные
// (c позиции rlen, т.к. часть уже получили) // (c позиции rlen, т.к. часть уже получили)
int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen); int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen);
if( rlen1 < szDataLen ) if( rlen1 < szDataLen )
...@@ -720,16 +720,16 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -720,16 +720,16 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
if( dlog.is_warn() ) if( dlog.is_warn() )
{ {
dlog.warn() << "(0x03): buf: " << rbuf << endl; dlog.warn() << "(0x03): buf: " << rbuf << endl;
dlog.warn() << "(0x03)(" dlog.warn() << "(0x03)("
<< (int)rbuf.func << "):(fnReadInputRegisters) " << (int)rbuf.func << "):(fnReadInputRegisters) "
<< "Получили данных меньше чем ждали...(" << "Получили данных меньше чем ждали...("
<< rlen1 << " < " << szDataLen << ")" << endl; << rlen1 << " < " << szDataLen << ")" << endl;
} }
cleanupChannel(); cleanupChannel();
return erInvalidFormat; return erInvalidFormat;
} }
bcnt += rlen1; bcnt += rlen1;
rbuf.len = bcnt - szModbusHeader; rbuf.len = bcnt - szModbusHeader;
...@@ -742,7 +742,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -742,7 +742,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
return erNoError; return erNoError;
// Проверяем контрольную сумму // Проверяем контрольную сумму
// от начала(включая заголовок) // от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC) // и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt; // int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC); ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
...@@ -770,7 +770,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -770,7 +770,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
return erNoError; return erNoError;
// Проверяем контрольную сумму // Проверяем контрольную сумму
// от начала(включая заголовок) // от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC) // и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt; // int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC); ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
...@@ -796,7 +796,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -796,7 +796,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
return erNoError; return erNoError;
// Проверяем контрольную сумму // Проверяем контрольную сумму
// от начала(включая заголовок) // от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC) // и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt; // int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC); ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
...@@ -822,7 +822,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -822,7 +822,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
return erNoError; return erNoError;
// Проверяем контрольную сумму // Проверяем контрольную сумму
// от начала(включая заголовок) // от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC) // и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead() + mWrite.bcnt; // int mlen = szModbusHeader + mWrite.szHead() + mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC); ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
...@@ -848,7 +848,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -848,7 +848,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
return erNoError; return erNoError;
// Проверяем контрольную сумму // Проверяем контрольную сумму
// от начала(включая заголовок) // от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC) // и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead() + mWrite.bcnt; // int mlen = szModbusHeader + mWrite.szHead() + mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC); ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
...@@ -868,9 +868,9 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -868,9 +868,9 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
if( crcNoCheckit ) if( crcNoCheckit )
szDataLen -= szCRC; szDataLen -= szCRC;
// Мы получили только предварительный загловок // Мы получили только предварительный загловок
// Теперь необходимо дополучить данные // Теперь необходимо дополучить данные
// (c позиции rlen, т.к. часть уже получили) // (c позиции rlen, т.к. часть уже получили)
int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen); int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen);
if( rlen1 < szDataLen ) if( rlen1 < szDataLen )
...@@ -879,16 +879,16 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -879,16 +879,16 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
if( dlog.is_warn() ) if( dlog.is_warn() )
{ {
dlog.warn() << "(0x08): buf: " << rbuf << endl; dlog.warn() << "(0x08): buf: " << rbuf << endl;
dlog.warn() << "(0x08)(" dlog.warn() << "(0x08)("
<< (int)rbuf.func << "):(fnDiagnostics) " << (int)rbuf.func << "):(fnDiagnostics) "
<< "Получили данных меньше чем ждали...(" << "Получили данных меньше чем ждали...("
<< rlen1 << " < " << szDataLen << ")" << endl; << rlen1 << " < " << szDataLen << ")" << endl;
} }
cleanupChannel(); cleanupChannel();
return erInvalidFormat; return erInvalidFormat;
} }
bcnt += rlen1; bcnt += rlen1;
rbuf.len = bcnt - szModbusHeader; rbuf.len = bcnt - szModbusHeader;
...@@ -901,7 +901,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -901,7 +901,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
return erNoError; return erNoError;
// Проверяем контрольную сумму // Проверяем контрольную сумму
// от начала(включая заголовок) // от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC) // и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt; // int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC); ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
...@@ -936,16 +936,16 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -936,16 +936,16 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
if( dlog.is_warn() ) if( dlog.is_warn() )
{ {
dlog.warn() << "(0x2B/0x0E): buf: " << rbuf << endl; dlog.warn() << "(0x2B/0x0E): buf: " << rbuf << endl;
dlog.warn() << "(0x2B/0x0E)(" dlog.warn() << "(0x2B/0x0E)("
<< (int)rbuf.func << "):(fnMEI) " << (int)rbuf.func << "):(fnMEI) "
<< "Получили данных меньше чем ждали...(" << "Получили данных меньше чем ждали...("
<< rlen1 << " < " << szDataLen << ")" << endl; << rlen1 << " < " << szDataLen << ")" << endl;
} }
cleanupChannel(); cleanupChannel();
return erInvalidFormat; return erInvalidFormat;
} }
rlen += szDataLen; rlen += szDataLen;
bcnt += szDataLen; bcnt += szDataLen;
...@@ -958,12 +958,12 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -958,12 +958,12 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
if( dlog.is_warn() ) if( dlog.is_warn() )
{ {
dlog.warn() << "(0x2B/0x0E): buf: " << rbuf << endl; dlog.warn() << "(0x2B/0x0E): buf: " << rbuf << endl;
dlog.warn() << "(0x2B/0x0E)(" dlog.warn() << "(0x2B/0x0E)("
<< (int)rbuf.func << "):(fnMEI) " << (int)rbuf.func << "):(fnMEI) "
<< "Получили данных меньше чем ждали...(" << "Получили данных меньше чем ждали...("
<< rlen1 << " < " << szDataLen << ")" << endl; << rlen1 << " < " << szDataLen << ")" << endl;
} }
cleanupChannel(); cleanupChannel();
return erInvalidFormat; return erInvalidFormat;
} }
...@@ -991,12 +991,12 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -991,12 +991,12 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
if( dlog.is_warn() ) if( dlog.is_warn() )
{ {
dlog.warn() << "(0x2B/0x0E): buf: " << rbuf << endl; dlog.warn() << "(0x2B/0x0E): buf: " << rbuf << endl;
dlog.warn() << "(0x2B/0x0E)(" dlog.warn() << "(0x2B/0x0E)("
<< (int)rbuf.func << "):(fnMEI) " << (int)rbuf.func << "):(fnMEI) "
<< "(CRC): Получили данных меньше чем ждали...(" << "(CRC): Получили данных меньше чем ждали...("
<< rlen1 << " < " << szCRC << ")" << endl; << rlen1 << " < " << szCRC << ")" << endl;
} }
cleanupChannel(); cleanupChannel();
return erInvalidFormat; return erInvalidFormat;
} }
...@@ -1010,7 +1010,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -1010,7 +1010,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
MEIMessageRetRDI mRDI(rbuf); MEIMessageRetRDI mRDI(rbuf);
// Проверяем контрольную сумму // Проверяем контрольную сумму
// от начала(включая заголовок) // от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC) // и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt; // int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC); ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
...@@ -1043,15 +1043,15 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -1043,15 +1043,15 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
err << "(0x50): bad crc. calc.crc=" << dat2str(tcrc) err << "(0x50): bad crc. calc.crc=" << dat2str(tcrc)
<< " msg.crc=" << dat2str(mSet.crc); << " msg.crc=" << dat2str(mSet.crc);
if( dlog.is_warn() ) if( dlog.is_warn() )
dlog.warn() << err.str() << endl; dlog.warn() << err.str() << endl;
return erBadCheckSum; return erBadCheckSum;
} }
} }
if( !mSet.checkFormat() ) if( !mSet.checkFormat() )
{ {
if( dlog.is_warn() ) if( dlog.is_warn() )
dlog.warn() << "(0x50): некорректные значения..." << endl; dlog.warn() << "(0x50): некорректные значения..." << endl;
return erBadDataValue; // return erInvalidFormat; return erBadDataValue; // return erInvalidFormat;
} }
...@@ -1064,7 +1064,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -1064,7 +1064,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
szDataLen -= szCRC; szDataLen -= szCRC;
// Мы получили только предварительный загловок // Мы получили только предварительный загловок
// Теперь необходимо дополучить данные // Теперь необходимо дополучить данные
// (c позиции rlen, т.к. часть уже получили) // (c позиции rlen, т.к. часть уже получили)
int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen); int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen);
if( rlen1 < szDataLen ) if( rlen1 < szDataLen )
...@@ -1073,15 +1073,15 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -1073,15 +1073,15 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
if( dlog.is_warn() ) if( dlog.is_warn() )
{ {
dlog.warn() << "(0x66): buf: " << rbuf << endl; dlog.warn() << "(0x66): buf: " << rbuf << endl;
dlog.warn() << "(0x66)(" dlog.warn() << "(0x66)("
<< rbuf.func << "):(fnFileTransfer) " << rbuf.func << "):(fnFileTransfer) "
<< "Получили данных меньше чем ждали...(" << "Получили данных меньше чем ждали...("
<< rlen1 << " < " << szDataLen << ")" << endl; << rlen1 << " < " << szDataLen << ")" << endl;
} }
cleanupChannel(); cleanupChannel();
return erInvalidFormat; return erInvalidFormat;
} }
bcnt += rlen1; bcnt += rlen1;
rbuf.len = bcnt - szModbusHeader; rbuf.len = bcnt - szModbusHeader;
...@@ -1093,7 +1093,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -1093,7 +1093,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
return erNoError; return erNoError;
// Проверяем контрольную сумму // Проверяем контрольную сумму
// от начала(включая заголовок) // от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC) // и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt; // int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC); ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
...@@ -1103,7 +1103,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -1103,7 +1103,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
err << "(0x66): bad crc. calc.crc=" << dat2str(tcrc) err << "(0x66): bad crc. calc.crc=" << dat2str(tcrc)
<< " msg.crc=" << dat2str(mFT.crc); << " msg.crc=" << dat2str(mFT.crc);
if( dlog.is_warn() ) if( dlog.is_warn() )
dlog.warn() << err.str() << endl; dlog.warn() << err.str() << endl;
return erBadCheckSum; return erBadCheckSum;
} }
...@@ -1142,22 +1142,22 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -1142,22 +1142,22 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
szDataLen -= szCRC; szDataLen -= szCRC;
// Мы получили только предварительный загловок // Мы получили только предварительный загловок
// Теперь необходимо дополучить данные // Теперь необходимо дополучить данные
// (c позиции rlen, т.к. часть уже получили) // (c позиции rlen, т.к. часть уже получили)
int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen); int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen);
if( rlen1 < szDataLen ) if( rlen1 < szDataLen )
{ {
rbuf.len = bcnt + rlen1 - szModbusHeader; rbuf.len = bcnt + rlen1 - szModbusHeader;
dlog.warn() << "(0x53): buf: " << rbuf << endl; dlog.warn() << "(0x53): buf: " << rbuf << endl;
dlog.warn() << "(0x53)(" dlog.warn() << "(0x53)("
<< rbuf.func << "):(fnWriteOutputRegisters) " << rbuf.func << "):(fnWriteOutputRegisters) "
<< "Получили данных меньше чем ждали...(" << "Получили данных меньше чем ждали...("
<< rlen1 << " < " << szDataLen << ")" << endl; << rlen1 << " < " << szDataLen << ")" << endl;
cleanupChannel(); cleanupChannel();
return erInvalidFormat; return erInvalidFormat;
} }
bcnt += rlen1; bcnt += rlen1;
rbuf.len = bcnt - szModbusHeader; rbuf.len = bcnt - szModbusHeader;
...@@ -1170,7 +1170,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout ...@@ -1170,7 +1170,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
return erNoError; return erNoError;
// Проверяем контрольную сумму // Проверяем контрольную сумму
// от начала(включая заголовок) // от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC) // и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt; // int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC); ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
...@@ -1237,13 +1237,13 @@ mbErrCode ModbusClient::send( ModbusMessage& msg ) ...@@ -1237,13 +1237,13 @@ mbErrCode ModbusClient::send( ModbusMessage& msg )
catch( mbException& ex ) catch( mbException& ex )
{ {
if( dlog.is_crit() ) if( dlog.is_crit() )
dlog.crit() << "(send): " << ex << endl; dlog.crit() << "(send): " << ex << endl;
return ex.err; return ex.err;
} }
catch( Exception& ex ) // SystemError catch( Exception& ex ) // SystemError
{ {
if( dlog.is_crit() ) if( dlog.is_crit() )
dlog.crit() << "(send): " << ex << endl; dlog.crit() << "(send): " << ex << endl;
return erHardwareError; return erHardwareError;
} }
...@@ -1275,7 +1275,7 @@ void ModbusClient::printProcessingTime() ...@@ -1275,7 +1275,7 @@ void ModbusClient::printProcessingTime()
{ {
if( dlog.is_info() ) if( dlog.is_info() )
{ {
dlog.info() << "(processingTime): " dlog.info() << "(processingTime): "
<< tmProcessing.getCurrent() << " [мсек]" << endl; << tmProcessing.getCurrent() << " [мсек]" << endl;
} }
} }
......
...@@ -50,7 +50,7 @@ ModbusAddr ModbusHelpers::autodetectSlave( ModbusRTUMaster* m, ...@@ -50,7 +50,7 @@ ModbusAddr ModbusHelpers::autodetectSlave( ModbusRTUMaster* m,
{ {
ReadOutputRetMessage ret = m->read03(a,reg,1); ReadOutputRetMessage ret = m->read03(a,reg,1);
} }
else else
throw mbException(erOperationFailed); throw mbException(erOperationFailed);
return a; return a;
...@@ -65,7 +65,7 @@ ModbusAddr ModbusHelpers::autodetectSlave( ModbusRTUMaster* m, ...@@ -65,7 +65,7 @@ ModbusAddr ModbusHelpers::autodetectSlave( ModbusRTUMaster* m,
if( (beg == 0xff) || (end == 0xff) ) if( (beg == 0xff) || (end == 0xff) )
break; break;
} }
throw TimeOut(); throw TimeOut();
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
...@@ -109,7 +109,7 @@ ComPort::Speed ModbusHelpers::autodetectSpeed( ModbusRTUMaster* m, ModbusAddr sl ...@@ -109,7 +109,7 @@ ComPort::Speed ModbusHelpers::autodetectSpeed( ModbusRTUMaster* m, ModbusAddr sl
{ {
ReadOutputRetMessage ret = m->read03(slave,reg,1); ReadOutputRetMessage ret = m->read03(slave,reg,1);
} }
else else
throw mbException(erOperationFailed); throw mbException(erOperationFailed);
...@@ -126,12 +126,12 @@ ComPort::Speed ModbusHelpers::autodetectSpeed( ModbusRTUMaster* m, ModbusAddr sl ...@@ -126,12 +126,12 @@ ComPort::Speed ModbusHelpers::autodetectSpeed( ModbusRTUMaster* m, ModbusAddr sl
} }
catch(...){} catch(...){}
} }
m->setSpeed(cur); m->setSpeed(cur);
if( s!=ComPort::ComSpeed0 ) if( s!=ComPort::ComSpeed0 )
return s; return s;
throw TimeOut(); throw TimeOut();
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
......
...@@ -36,7 +36,7 @@ ModbusRTUMaster::ModbusRTUMaster( const string& dev, bool use485, bool tr_ctl ): ...@@ -36,7 +36,7 @@ ModbusRTUMaster::ModbusRTUMaster( const string& dev, bool use485, bool tr_ctl ):
port->setStopBits(ComPort::OneBit); port->setStopBits(ComPort::OneBit);
port->setWaiting(true); port->setWaiting(true);
port->setTimeout(replyTimeOut_ms); port->setTimeout(replyTimeOut_ms);
// port->setBlocking(false); // port->setBlocking(false);
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
ModbusRTUMaster::ModbusRTUMaster( ComPort* com ): ModbusRTUMaster::ModbusRTUMaster( ComPort* com ):
...@@ -52,12 +52,12 @@ ModbusRTUMaster::ModbusRTUMaster( ComPort* com ): ...@@ -52,12 +52,12 @@ ModbusRTUMaster::ModbusRTUMaster( ComPort* com ):
port->setStopBits(ComPort::OneBit); port->setStopBits(ComPort::OneBit);
port->setWaiting(true); port->setWaiting(true);
port->setTimeout(replyTimeOut_ms); port->setTimeout(replyTimeOut_ms);
// port->setBlocking(false); // port->setBlocking(false);
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
ModbusRTUMaster::~ModbusRTUMaster() ModbusRTUMaster::~ModbusRTUMaster()
{ {
if( myport ) if( myport )
delete port; delete port;
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
......
...@@ -38,7 +38,7 @@ ModbusRTUSlave::ModbusRTUSlave( const string& dev, bool use485, bool tr_ctl ): ...@@ -38,7 +38,7 @@ ModbusRTUSlave::ModbusRTUSlave( const string& dev, bool use485, bool tr_ctl ):
port->setStopBits(ComPort::OneBit); port->setStopBits(ComPort::OneBit);
port->setWaiting(true); port->setWaiting(true);
port->setTimeout(recvTimeOut_ms); port->setTimeout(recvTimeOut_ms);
// port->setBlocking(false); // port->setBlocking(false);
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
...@@ -52,7 +52,7 @@ ModbusRTUSlave::ModbusRTUSlave( ComPort* com ): ...@@ -52,7 +52,7 @@ ModbusRTUSlave::ModbusRTUSlave( ComPort* com ):
port->setStopBits(ComPort::OneBit); port->setStopBits(ComPort::OneBit);
port->setWaiting(true); port->setWaiting(true);
port->setTimeout(recvTimeOut_ms); port->setTimeout(recvTimeOut_ms);
// port->setBlocking(false); // port->setBlocking(false);
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
...@@ -83,7 +83,7 @@ mbErrCode ModbusRTUSlave::receive( ModbusRTU::ModbusAddr addr, timeout_t timeout ...@@ -83,7 +83,7 @@ mbErrCode ModbusRTUSlave::receive( ModbusRTU::ModbusAddr addr, timeout_t timeout
// то посылаем // то посылаем
if( res < erInternalErrorCode ) if( res < erInternalErrorCode )
{ {
ErrorRetMessage em( buf.addr, buf.func, res ); ErrorRetMessage em( buf.addr, buf.func, res );
buf = em.transport_msg(); buf = em.transport_msg();
send(buf); send(buf);
printProcessingTime(); printProcessingTime();
...@@ -95,7 +95,7 @@ mbErrCode ModbusRTUSlave::receive( ModbusRTU::ModbusAddr addr, timeout_t timeout ...@@ -95,7 +95,7 @@ mbErrCode ModbusRTUSlave::receive( ModbusRTU::ModbusAddr addr, timeout_t timeout
return res; return res;
} }
// если полученный пакет адресован // если полученный пакет адресован
// не данному узлу (и не широковещательный) // не данному узлу (и не широковещательный)
// то ждать следующий... // то ждать следующий...
} }
...@@ -112,7 +112,7 @@ ComPort::Speed ModbusRTUSlave::getSpeed() ...@@ -112,7 +112,7 @@ ComPort::Speed ModbusRTUSlave::getSpeed()
{ {
if( port == NULL ) if( port == NULL )
return ComPort::ComSpeed0; return ComPort::ComSpeed0;
return port->getSpeed(); return port->getSpeed();
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
......
...@@ -144,7 +144,7 @@ ModbusRTU::mbErrCode ModbusRTUSlaveSlot::remoteService( ModbusRTU::RemoteService ...@@ -144,7 +144,7 @@ ModbusRTU::mbErrCode ModbusRTUSlaveSlot::remoteService( ModbusRTU::RemoteService
return erOperationFailed; return erOperationFailed;
return slRemoteService(query,reply); return slRemoteService(query,reply);
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
ModbusRTU::mbErrCode ModbusRTUSlaveSlot::fileTransfer( ModbusRTU::FileTransferMessage& query, ModbusRTU::mbErrCode ModbusRTUSlaveSlot::fileTransfer( ModbusRTU::FileTransferMessage& query,
ModbusRTU::FileTransferRetMessage& reply ) ModbusRTU::FileTransferRetMessage& reply )
...@@ -153,7 +153,7 @@ ModbusRTU::mbErrCode ModbusRTUSlaveSlot::fileTransfer( ModbusRTU::FileTransferMe ...@@ -153,7 +153,7 @@ ModbusRTU::mbErrCode ModbusRTUSlaveSlot::fileTransfer( ModbusRTU::FileTransferMe
return erOperationFailed; return erOperationFailed;
return slFileTransfer(query,reply); return slFileTransfer(query,reply);
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
void ModbusRTUSlaveSlot::sigterm( int signo ) void ModbusRTUSlaveSlot::sigterm( int signo )
{ {
......
...@@ -81,7 +81,7 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf ) ...@@ -81,7 +81,7 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf )
// то посылаем // то посылаем
if( res < erInternalErrorCode ) if( res < erInternalErrorCode )
{ {
ErrorRetMessage em( mRead.addr, mRead.func, res ); ErrorRetMessage em( mRead.addr, mRead.func, res );
buf = em.transport_msg(); buf = em.transport_msg();
return send(buf); return send(buf);
} }
...@@ -113,7 +113,7 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf ) ...@@ -113,7 +113,7 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf )
// то посылаем // то посылаем
if( res < erInternalErrorCode ) if( res < erInternalErrorCode )
{ {
ErrorRetMessage em( mRead.addr, mRead.func, res ); ErrorRetMessage em( mRead.addr, mRead.func, res );
buf = em.transport_msg(); buf = em.transport_msg();
return send(buf); return send(buf);
} }
...@@ -145,7 +145,7 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf ) ...@@ -145,7 +145,7 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf )
// то посылаем // то посылаем
if( res < erInternalErrorCode ) if( res < erInternalErrorCode )
{ {
ErrorRetMessage em( mRead.addr, mRead.func, res ); ErrorRetMessage em( mRead.addr, mRead.func, res );
buf = em.transport_msg(); buf = em.transport_msg();
return send(buf); return send(buf);
} }
...@@ -177,7 +177,7 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf ) ...@@ -177,7 +177,7 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf )
// то посылаем // то посылаем
if( res < erInternalErrorCode ) if( res < erInternalErrorCode )
{ {
ErrorRetMessage em( mRead.addr, mRead.func, res ); ErrorRetMessage em( mRead.addr, mRead.func, res );
buf = em.transport_msg(); buf = em.transport_msg();
return send(buf); return send(buf);
} }
...@@ -210,11 +210,11 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf ) ...@@ -210,11 +210,11 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf )
// то посылаем // то посылаем
if( res < erInternalErrorCode ) if( res < erInternalErrorCode )
{ {
ErrorRetMessage em( mWrite.addr, mWrite.func, res ); ErrorRetMessage em( mWrite.addr, mWrite.func, res );
buf = em.transport_msg(); buf = em.transport_msg();
return send(buf); return send(buf);
} }
return res; return res;
} }
...@@ -243,11 +243,11 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf ) ...@@ -243,11 +243,11 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf )
// то посылаем // то посылаем
if( res < erInternalErrorCode ) if( res < erInternalErrorCode )
{ {
ErrorRetMessage em( mWrite.addr, mWrite.func, res ); ErrorRetMessage em( mWrite.addr, mWrite.func, res );
buf = em.transport_msg(); buf = em.transport_msg();
return send(buf); return send(buf);
} }
return res; return res;
} }
...@@ -278,7 +278,7 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf ) ...@@ -278,7 +278,7 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf )
buf = em.transport_msg(); buf = em.transport_msg();
return send(buf); return send(buf);
} }
return res; return res;
} }
...@@ -309,7 +309,7 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf ) ...@@ -309,7 +309,7 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf )
buf = em.transport_msg(); buf = em.transport_msg();
return send(buf); return send(buf);
} }
return res; return res;
} }
...@@ -337,11 +337,11 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf ) ...@@ -337,11 +337,11 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf )
// то посылаем // то посылаем
if( res < erInternalErrorCode ) if( res < erInternalErrorCode )
{ {
ErrorRetMessage em( mWrite.addr, mWrite.func, res ); ErrorRetMessage em( mWrite.addr, mWrite.func, res );
buf = em.transport_msg(); buf = em.transport_msg();
return send(buf); return send(buf);
} }
return res; return res;
} }
...@@ -370,11 +370,11 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf ) ...@@ -370,11 +370,11 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf )
// то посылаем // то посылаем
if( res < erInternalErrorCode ) if( res < erInternalErrorCode )
{ {
ErrorRetMessage em( mWrite.addr, mWrite.func, res ); ErrorRetMessage em( mWrite.addr, mWrite.func, res );
buf = em.transport_msg(); buf = em.transport_msg();
return send(buf); return send(buf);
} }
return res; return res;
} }
...@@ -402,7 +402,7 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf ) ...@@ -402,7 +402,7 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf )
// то посылаем // то посылаем
if( res < erInternalErrorCode ) if( res < erInternalErrorCode )
{ {
ErrorRetMessage em( mJournal.addr, mJournal.func, res ); ErrorRetMessage em( mJournal.addr, mJournal.func, res );
buf = em.transport_msg(); buf = em.transport_msg();
return send(buf); return send(buf);
} }
...@@ -433,7 +433,7 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf ) ...@@ -433,7 +433,7 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf )
// то посылаем // то посылаем
if( res < erInternalErrorCode ) if( res < erInternalErrorCode )
{ {
ErrorRetMessage em( mSet.addr, mSet.func, res ); ErrorRetMessage em( mSet.addr, mSet.func, res );
buf = em.transport_msg(); buf = em.transport_msg();
return send(buf); return send(buf);
} }
...@@ -464,7 +464,7 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf ) ...@@ -464,7 +464,7 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf )
// то посылаем // то посылаем
if( res < erInternalErrorCode ) if( res < erInternalErrorCode )
{ {
ErrorRetMessage em( query.addr, query.func, res ); ErrorRetMessage em( query.addr, query.func, res );
buf = em.transport_msg(); buf = em.transport_msg();
return send(buf); return send(buf);
} }
...@@ -495,7 +495,7 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf ) ...@@ -495,7 +495,7 @@ mbErrCode ModbusServer::processing( ModbusMessage& buf )
// то посылаем // то посылаем
if( res < erInternalErrorCode ) if( res < erInternalErrorCode )
{ {
ErrorRetMessage em( query.addr, query.func, res ); ErrorRetMessage em( query.addr, query.func, res );
buf = em.transport_msg(); buf = em.transport_msg();
return send(buf); return send(buf);
} }
...@@ -532,7 +532,7 @@ mbErrCode ModbusServer::recv( ModbusRTU::ModbusAddr addr, ModbusMessage& rbuf, t ...@@ -532,7 +532,7 @@ mbErrCode ModbusServer::recv( ModbusRTU::ModbusAddr addr, ModbusMessage& rbuf, t
// предварительно чистим буфер // предварительно чистим буфер
memset(&rbuf,0,sizeof(rbuf)); memset(&rbuf,0,sizeof(rbuf));
int bcnt=0; // receive bytes count int bcnt=0; // receive bytes count
try try
{ {
// wait byte = myaddr || byte = broadcast // wait byte = myaddr || byte = broadcast
...@@ -545,13 +545,13 @@ mbErrCode ModbusServer::recv( ModbusRTU::ModbusAddr addr, ModbusMessage& rbuf, t ...@@ -545,13 +545,13 @@ mbErrCode ModbusServer::recv( ModbusRTU::ModbusAddr addr, ModbusMessage& rbuf, t
begin = true; begin = true;
break; break;
} }
usleep(sleepPause_usec); usleep(sleepPause_usec);
} }
if( !begin ) if( !begin )
return erTimeOut; return erTimeOut;
/*! \todo Подумать Может стоит всё-таки получать весь пакет, а проверять кому он адресован на уровне выше?! /*! \todo Подумать Может стоит всё-таки получать весь пакет, а проверять кому он адресован на уровне выше?!
// Lav: конечно стоит, нам же надо буфер чистить // Lav: конечно стоит, нам же надо буфер чистить
*/ */
// Проверка кому адресован пакет... // Проверка кому адресован пакет...
...@@ -570,7 +570,7 @@ mbErrCode ModbusServer::recv( ModbusRTU::ModbusAddr addr, ModbusMessage& rbuf, t ...@@ -570,7 +570,7 @@ mbErrCode ModbusServer::recv( ModbusRTU::ModbusAddr addr, ModbusMessage& rbuf, t
} }
return recv_pdu(rbuf,timeout); return recv_pdu(rbuf,timeout);
} }
catch( UniSetTypes::TimeOut ) catch( UniSetTypes::TimeOut )
{ {
// cout << "(recv): catch TimeOut " << endl; // cout << "(recv): catch TimeOut " << endl;
...@@ -605,7 +605,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -605,7 +605,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
bcnt += k; bcnt += k;
rbuf.len = 0; rbuf.len = 0;
if( dlog.is_info() ) if( dlog.is_info() )
dlog.info() << "(recv): header: " << rbuf << endl; dlog.info() << "(recv): header: " << rbuf << endl;
...@@ -645,13 +645,13 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -645,13 +645,13 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
break; break;
case fnForceSingleCoil: case fnForceSingleCoil:
rbuf.len = ForceSingleCoilMessage::szHead(); rbuf.len = ForceSingleCoilMessage::szHead();
break; break;
case fnWriteOutputSingleRegister: case fnWriteOutputSingleRegister:
rbuf.len = WriteSingleOutputMessage::szHead(); rbuf.len = WriteSingleOutputMessage::szHead();
break; break;
case fnDiagnostics: case fnDiagnostics:
rbuf.len = DiagnosticMessage::szHead(); rbuf.len = DiagnosticMessage::szHead();
break; break;
...@@ -681,7 +681,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -681,7 +681,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
if( crcNoCheckit ) if( crcNoCheckit )
rbuf.len -= szCRC; rbuf.len -= szCRC;
break; break;
default: default:
cleanupChannel(); cleanupChannel();
return erUnExpectedPacketType; return erUnExpectedPacketType;
...@@ -698,14 +698,14 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -698,14 +698,14 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
{ {
// rbuf.len = bcnt + rlen - szModbusHeader; // rbuf.len = bcnt + rlen - szModbusHeader;
dlog.warn() << "(recv): buf: " << rbuf << endl; dlog.warn() << "(recv): buf: " << rbuf << endl;
dlog.warn() << "(recv)(" << rbuf.func dlog.warn() << "(recv)(" << rbuf.func
<< "): Получили данных меньше чем ждали...(recv=" << "): Получили данных меньше чем ждали...(recv="
<< rlen << " < wait=" << (int)rbuf.len << ")" << endl; << rlen << " < wait=" << (int)rbuf.len << ")" << endl;
} }
cleanupChannel(); cleanupChannel();
return erInvalidFormat; return erInvalidFormat;
} }
bcnt+=rlen; bcnt+=rlen;
// получаем остальное... // получаем остальное...
...@@ -815,16 +815,16 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -815,16 +815,16 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
return erBadCheckSum; return erBadCheckSum;
} }
return erNoError; return erNoError;
} }
else if( rbuf.func == fnForceMultipleCoils ) else if( rbuf.func == fnForceMultipleCoils )
{ {
int szDataLen = ForceCoilsMessage::getDataLen(rbuf)+szCRC; int szDataLen = ForceCoilsMessage::getDataLen(rbuf)+szCRC;
if( crcNoCheckit ) if( crcNoCheckit )
szDataLen -= szCRC; szDataLen -= szCRC;
// Мы получили только предварительный загловок // Мы получили только предварительный загловок
// Теперь необходимо дополучить данные // Теперь необходимо дополучить данные
// (c позиции rlen, т.к. часть уже получили) // (c позиции rlen, т.к. часть уже получили)
int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen); int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen);
if( rlen1 < szDataLen ) if( rlen1 < szDataLen )
...@@ -833,15 +833,15 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -833,15 +833,15 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
{ {
rbuf.len = bcnt + rlen1 - szModbusHeader; rbuf.len = bcnt + rlen1 - szModbusHeader;
dlog.warn() << "(0x0F): buf: " << rbuf << endl; dlog.warn() << "(0x0F): buf: " << rbuf << endl;
dlog.warn() << "(0x0F)(" dlog.warn() << "(0x0F)("
<< rbuf.func << "):(fnForceMultipleCoils) " << rbuf.func << "):(fnForceMultipleCoils) "
<< "Получили данных меньше чем ждали...(" << "Получили данных меньше чем ждали...("
<< rlen1 << " < " << szDataLen << ")" << endl; << rlen1 << " < " << szDataLen << ")" << endl;
} }
cleanupChannel(); cleanupChannel();
return erInvalidFormat; return erInvalidFormat;
} }
bcnt += rlen1; bcnt += rlen1;
rbuf.len = bcnt - szModbusHeader; rbuf.len = bcnt - szModbusHeader;
...@@ -853,7 +853,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -853,7 +853,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
if( !crcNoCheckit ) if( !crcNoCheckit )
{ {
// Проверяем контрольную сумму // Проверяем контрольную сумму
// от начала(включая заголовок) // от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC) // и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt; // int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC); ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
...@@ -872,15 +872,15 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -872,15 +872,15 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
{ {
if( dlog.is_warn() ) if( dlog.is_warn() )
{ {
dlog.warn() << "(0x0F): (" << rbuf.func dlog.warn() << "(0x0F): (" << rbuf.func
<< ")(fnForceMultipleCoils): " << ")(fnForceMultipleCoils): "
<< ": некорректный формат сообщения..." << endl; << ": некорректный формат сообщения..." << endl;
} }
cleanupChannel(); cleanupChannel();
return erInvalidFormat; return erInvalidFormat;
} }
return erNoError; return erNoError;
} }
else if( rbuf.func == fnWriteOutputRegisters ) else if( rbuf.func == fnWriteOutputRegisters )
{ {
...@@ -888,9 +888,9 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -888,9 +888,9 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
if( crcNoCheckit ) if( crcNoCheckit )
szDataLen -= szCRC; szDataLen -= szCRC;
// Мы получили только предварительный загловок // Мы получили только предварительный загловок
// Теперь необходимо дополучить данные // Теперь необходимо дополучить данные
// (c позиции rlen, т.к. часть уже получили) // (c позиции rlen, т.к. часть уже получили)
int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen); int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen);
if( rlen1 < szDataLen ) if( rlen1 < szDataLen )
...@@ -899,15 +899,15 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -899,15 +899,15 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
{ {
rbuf.len = bcnt + rlen1 - szModbusHeader; rbuf.len = bcnt + rlen1 - szModbusHeader;
dlog.warn() << "(0x10): buf: " << rbuf << endl; dlog.warn() << "(0x10): buf: " << rbuf << endl;
dlog.warn() << "(0x10)(" dlog.warn() << "(0x10)("
<< rbuf.func << "):(fnWriteOutputRegisters) " << rbuf.func << "):(fnWriteOutputRegisters) "
<< "Получили данных меньше чем ждали...(" << "Получили данных меньше чем ждали...("
<< rlen1 << " < " << szDataLen << ")" << endl; << rlen1 << " < " << szDataLen << ")" << endl;
} }
cleanupChannel(); cleanupChannel();
return erInvalidFormat; return erInvalidFormat;
} }
bcnt += rlen1; bcnt += rlen1;
rbuf.len = bcnt - szModbusHeader; rbuf.len = bcnt - szModbusHeader;
...@@ -919,7 +919,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -919,7 +919,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
if( !crcNoCheckit ) if( !crcNoCheckit )
{ {
// Проверяем контрольную сумму // Проверяем контрольную сумму
// от начала(включая заголовок) // от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC) // и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt; // int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC); ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
...@@ -936,17 +936,17 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -936,17 +936,17 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
return erBadCheckSum; return erBadCheckSum;
} }
} }
if( !mWrite.checkFormat() ) if( !mWrite.checkFormat() )
{ {
dlog.warn() << "(0x10): (" << rbuf.func dlog.warn() << "(0x10): (" << rbuf.func
<< ")(fnWriteOutputRegisters): " << ")(fnWriteOutputRegisters): "
<< ": некорректный формат сообщения..." << endl; << ": некорректный формат сообщения..." << endl;
cleanupChannel(); cleanupChannel();
return erInvalidFormat; return erInvalidFormat;
} }
return erNoError; return erNoError;
} }
else if( rbuf.func == fnForceSingleCoil ) else if( rbuf.func == fnForceSingleCoil )
{ {
...@@ -954,9 +954,9 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -954,9 +954,9 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
if( crcNoCheckit ) if( crcNoCheckit )
szDataLen -= szCRC; szDataLen -= szCRC;
// Мы получили только предварительный загловок // Мы получили только предварительный загловок
// Теперь необходимо дополучить данные // Теперь необходимо дополучить данные
// (c позиции rlen, т.к. часть уже получили) // (c позиции rlen, т.к. часть уже получили)
int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen); int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen);
if( rlen1 < szDataLen ) if( rlen1 < szDataLen )
...@@ -965,15 +965,15 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -965,15 +965,15 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
{ {
rbuf.len = bcnt + rlen1 - szModbusHeader; rbuf.len = bcnt + rlen1 - szModbusHeader;
dlog.warn() << "(0x05): buf: " << rbuf << endl; dlog.warn() << "(0x05): buf: " << rbuf << endl;
dlog.warn() << "(0x05)(" dlog.warn() << "(0x05)("
<< rbuf.func << "):(fnForceSingleCoil) " << rbuf.func << "):(fnForceSingleCoil) "
<< "Получили данных меньше чем ждали...(" << "Получили данных меньше чем ждали...("
<< rlen1 << " < " << szDataLen << ")" << endl; << rlen1 << " < " << szDataLen << ")" << endl;
} }
cleanupChannel(); cleanupChannel();
return erInvalidFormat; return erInvalidFormat;
} }
bcnt += rlen1; bcnt += rlen1;
rbuf.len = bcnt - szModbusHeader; rbuf.len = bcnt - szModbusHeader;
...@@ -985,7 +985,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -985,7 +985,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
if( !crcNoCheckit ) if( !crcNoCheckit )
{ {
// Проверяем контрольную сумму // Проверяем контрольную сумму
// от начала(включая заголовок) // от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC) // и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead() + mWrite.bcnt; // int mlen = szModbusHeader + mWrite.szHead() + mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC); ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
...@@ -1002,17 +1002,17 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -1002,17 +1002,17 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
return erBadCheckSum; return erBadCheckSum;
} }
} }
if( !mWrite.checkFormat() ) if( !mWrite.checkFormat() )
{ {
dlog.warn() << "(0x05): (" << rbuf.func dlog.warn() << "(0x05): (" << rbuf.func
<< ")(fnForceSingleCoil): " << ")(fnForceSingleCoil): "
<< ": некорректный формат сообщения..." << endl; << ": некорректный формат сообщения..." << endl;
cleanupChannel(); cleanupChannel();
return erInvalidFormat; return erInvalidFormat;
} }
return erNoError; return erNoError;
} }
else if( rbuf.func == fnWriteOutputSingleRegister ) else if( rbuf.func == fnWriteOutputSingleRegister )
{ {
...@@ -1020,9 +1020,9 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -1020,9 +1020,9 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
if( crcNoCheckit ) if( crcNoCheckit )
szDataLen -= szCRC; szDataLen -= szCRC;
// Мы получили только предварительный загловок // Мы получили только предварительный загловок
// Теперь необходимо дополучить данные // Теперь необходимо дополучить данные
// (c позиции rlen, т.к. часть уже получили) // (c позиции rlen, т.к. часть уже получили)
int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen); int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen);
if( rlen1 < szDataLen ) if( rlen1 < szDataLen )
...@@ -1031,15 +1031,15 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -1031,15 +1031,15 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
{ {
rbuf.len = bcnt + rlen1 - szModbusHeader; rbuf.len = bcnt + rlen1 - szModbusHeader;
dlog.warn() << "(0x06): buf: " << rbuf << endl; dlog.warn() << "(0x06): buf: " << rbuf << endl;
dlog.warn() << "(0x06)(" dlog.warn() << "(0x06)("
<< rbuf.func << "):(fnWriteOutputSingleRegisters) " << rbuf.func << "):(fnWriteOutputSingleRegisters) "
<< "Получили данных меньше чем ждали...(" << "Получили данных меньше чем ждали...("
<< rlen1 << " < " << szDataLen << ")" << endl; << rlen1 << " < " << szDataLen << ")" << endl;
} }
cleanupChannel(); cleanupChannel();
return erInvalidFormat; return erInvalidFormat;
} }
bcnt += rlen1; bcnt += rlen1;
rbuf.len = bcnt - szModbusHeader; rbuf.len = bcnt - szModbusHeader;
...@@ -1051,7 +1051,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -1051,7 +1051,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
if( !crcNoCheckit ) if( !crcNoCheckit )
{ {
// Проверяем контрольную сумму // Проверяем контрольную сумму
// от начала(включая заголовок) // от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC) // и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead() + mWrite.bcnt; // int mlen = szModbusHeader + mWrite.szHead() + mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC); ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
...@@ -1071,14 +1071,14 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -1071,14 +1071,14 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
if( !mWrite.checkFormat() ) if( !mWrite.checkFormat() )
{ {
dlog.warn() << "(0x06): (" << rbuf.func dlog.warn() << "(0x06): (" << rbuf.func
<< ")(fnWriteOutputSingleRegisters): " << ")(fnWriteOutputSingleRegisters): "
<< ": некорректный формат сообщения..." << endl; << ": некорректный формат сообщения..." << endl;
cleanupChannel(); cleanupChannel();
return erInvalidFormat; return erInvalidFormat;
} }
return erNoError; return erNoError;
} }
else if( rbuf.func == fnDiagnostics ) else if( rbuf.func == fnDiagnostics )
{ {
...@@ -1086,9 +1086,9 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -1086,9 +1086,9 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
if( crcNoCheckit ) if( crcNoCheckit )
szDataLen -= szCRC; szDataLen -= szCRC;
// Мы получили только предварительный загловок // Мы получили только предварительный загловок
// Теперь необходимо дополучить данные // Теперь необходимо дополучить данные
// (c позиции rlen, т.к. часть уже получили) // (c позиции rlen, т.к. часть уже получили)
int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen); int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen);
if( rlen1 < szDataLen ) if( rlen1 < szDataLen )
...@@ -1097,15 +1097,15 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -1097,15 +1097,15 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
{ {
rbuf.len = bcnt + rlen1 - szModbusHeader; rbuf.len = bcnt + rlen1 - szModbusHeader;
dlog.warn() << "(0x08): buf: " << rbuf << endl; dlog.warn() << "(0x08): buf: " << rbuf << endl;
dlog.warn() << "(0x08)(" dlog.warn() << "(0x08)("
<< rbuf.func << "):(fnDiagnostics) " << rbuf.func << "):(fnDiagnostics) "
<< "Получили данных меньше чем ждали...(" << "Получили данных меньше чем ждали...("
<< rlen1 << " < " << szDataLen << ")" << endl; << rlen1 << " < " << szDataLen << ")" << endl;
} }
cleanupChannel(); cleanupChannel();
return erInvalidFormat; return erInvalidFormat;
} }
bcnt += rlen1; bcnt += rlen1;
rbuf.len = bcnt - szModbusHeader; rbuf.len = bcnt - szModbusHeader;
...@@ -1117,7 +1117,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -1117,7 +1117,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
if( !crcNoCheckit ) if( !crcNoCheckit )
{ {
// Проверяем контрольную сумму // Проверяем контрольную сумму
// от начала(включая заголовок) // от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC) // и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead() + mWrite.bcnt; // int mlen = szModbusHeader + mWrite.szHead() + mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC); ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
...@@ -1134,12 +1134,12 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -1134,12 +1134,12 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
return erBadCheckSum; return erBadCheckSum;
} }
} }
/* /*
if( !mDiag.checkFormat() ) if( !mDiag.checkFormat() )
{ {
dlog.warn() << "(0x08): (" << rbuf.func dlog.warn() << "(0x08): (" << rbuf.func
<< ")(fnDiagnostics): " << ")(fnDiagnostics): "
<< ": некорректный формат сообщения..." << endl; << ": некорректный формат сообщения..." << endl;
cleanupChannel(); cleanupChannel();
return erInvalidFormat; return erInvalidFormat;
} }
...@@ -1157,15 +1157,15 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -1157,15 +1157,15 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
{ {
rbuf.len = bcnt + rlen1 - szModbusHeader; rbuf.len = bcnt + rlen1 - szModbusHeader;
dlog.warn() << "(0x2B/0x0E): buf: " << rbuf << endl; dlog.warn() << "(0x2B/0x0E): buf: " << rbuf << endl;
dlog.warn() << "(0x2B/0x0E)(" dlog.warn() << "(0x2B/0x0E)("
<< rbuf.func << "):(fnMEI) " << rbuf.func << "):(fnMEI) "
<< "Получили данных меньше чем ждали...(" << "Получили данных меньше чем ждали...("
<< rlen1 << " < " << szCRC << ")" << endl; << rlen1 << " < " << szCRC << ")" << endl;
} }
cleanupChannel(); cleanupChannel();
return erInvalidFormat; return erInvalidFormat;
} }
bcnt += rlen1; bcnt += rlen1;
rbuf.len = bcnt - szModbusHeader; rbuf.len = bcnt - szModbusHeader;
} }
...@@ -1179,7 +1179,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -1179,7 +1179,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
return erNoError; return erNoError;
// Проверяем контрольную сумму // Проверяем контрольную сумму
// от начала(включая заголовок) // от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC) // и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead() + mWrite.bcnt; // int mlen = szModbusHeader + mWrite.szHead() + mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC); ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
...@@ -1197,7 +1197,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -1197,7 +1197,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
} }
return erNoError; return erNoError;
} }
else if( rbuf.func == fnJournalCommand ) else if( rbuf.func == fnJournalCommand )
{ {
JournalCommandMessage mRead(rbuf); JournalCommandMessage mRead(rbuf);
...@@ -1224,7 +1224,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -1224,7 +1224,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
return erBadCheckSum; return erBadCheckSum;
} }
return erNoError; return erNoError;
} }
else if( rbuf.func == fnSetDateTime ) else if( rbuf.func == fnSetDateTime )
{ {
...@@ -1251,7 +1251,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -1251,7 +1251,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
return erBadCheckSum; return erBadCheckSum;
} }
} }
if( !mSet.checkFormat() ) if( !mSet.checkFormat() )
{ {
dlog.warn() << "(0x50): некорректные значения..." << endl; dlog.warn() << "(0x50): некорректные значения..." << endl;
...@@ -1259,7 +1259,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -1259,7 +1259,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
return erBadDataValue; // return erInvalidFormat; return erBadDataValue; // return erInvalidFormat;
} }
return erNoError; return erNoError;
} }
else if( rbuf.func == fnRemoteService ) else if( rbuf.func == fnRemoteService )
{ {
...@@ -1269,7 +1269,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -1269,7 +1269,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
szDataLen -= szCRC; szDataLen -= szCRC;
// Мы получили только предварительный загловок // Мы получили только предварительный загловок
// Теперь необходимо дополучить данные // Теперь необходимо дополучить данные
// (c позиции rlen, т.к. часть уже получили) // (c позиции rlen, т.к. часть уже получили)
int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen); int rlen1 = getNextData((unsigned char*)(&(rbuf.data[rlen])),szDataLen);
if( rlen1 < szDataLen ) if( rlen1 < szDataLen )
...@@ -1278,15 +1278,15 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -1278,15 +1278,15 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
{ {
rbuf.len = bcnt + rlen1 - szModbusHeader; rbuf.len = bcnt + rlen1 - szModbusHeader;
dlog.warn() << "(0x53): buf: " << rbuf << endl; dlog.warn() << "(0x53): buf: " << rbuf << endl;
dlog.warn() << "(0x53)(" dlog.warn() << "(0x53)("
<< rbuf.func << "):(fnWriteOutputRegisters) " << rbuf.func << "):(fnWriteOutputRegisters) "
<< "Получили данных меньше чем ждали...(" << "Получили данных меньше чем ждали...("
<< rlen1 << " < " << szDataLen << ")" << endl; << rlen1 << " < " << szDataLen << ")" << endl;
} }
cleanupChannel(); cleanupChannel();
return erInvalidFormat; return erInvalidFormat;
} }
bcnt += rlen1; bcnt += rlen1;
rbuf.len = bcnt - szModbusHeader; rbuf.len = bcnt - szModbusHeader;
...@@ -1299,7 +1299,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -1299,7 +1299,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
return erNoError; return erNoError;
// Проверяем контрольную сумму // Проверяем контрольную сумму
// от начала(включая заголовок) // от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC) // и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt; // int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC); ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
...@@ -1316,7 +1316,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -1316,7 +1316,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
return erBadCheckSum; return erBadCheckSum;
} }
return erNoError; return erNoError;
} }
else if( rbuf.func == fnFileTransfer ) else if( rbuf.func == fnFileTransfer )
{ {
...@@ -1328,7 +1328,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -1328,7 +1328,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
return erNoError; return erNoError;
// Проверяем контрольную сумму // Проверяем контрольную сумму
// от начала(включая заголовок) // от начала(включая заголовок)
// и до конца (исключив последний элемент содержащий CRC) // и до конца (исключив последний элемент содержащий CRC)
// int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt; // int mlen = szModbusHeader + mWrite.szHead()+ mWrite.bcnt;
ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC); ModbusData tcrc = checkCRC((ModbusByte*)(&rbuf),bcnt-szCRC);
...@@ -1351,7 +1351,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout ) ...@@ -1351,7 +1351,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
{ {
// А как мы сюда добрались?!!!!!! // А как мы сюда добрались?!!!!!!
return erUnExpectedPacketType; return erUnExpectedPacketType;
} }
} }
catch( ModbusRTU::mbException& ex ) // SystemError catch( ModbusRTU::mbException& ex ) // SystemError
{ {
...@@ -1383,7 +1383,7 @@ void ModbusServer::setLog( DebugStream& l ) ...@@ -1383,7 +1383,7 @@ void ModbusServer::setLog( DebugStream& l )
void ModbusServer::initLog( UniSetTypes::Configuration* conf, void ModbusServer::initLog( UniSetTypes::Configuration* conf,
const std::string& lname, const string& logfile ) const std::string& lname, const string& logfile )
{ {
conf->initDebug(dlog,lname); conf->initDebug(dlog,lname);
if( !logfile.empty() ) if( !logfile.empty() )
...@@ -1396,14 +1396,14 @@ void ModbusServer::printProcessingTime() ...@@ -1396,14 +1396,14 @@ void ModbusServer::printProcessingTime()
dlog.info() << "(processingTime): " << tmProcessing.getCurrent() << " [msec] (lim: " << tmProcessing.getInterval() << ")" << endl; dlog.info() << "(processingTime): " << tmProcessing.getCurrent() << " [msec] (lim: " << tmProcessing.getInterval() << ")" << endl;
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
ModbusRTU::mbErrCode ModbusServer::replyFileTransfer( const std::string &fname, ModbusRTU::mbErrCode ModbusServer::replyFileTransfer( const std::string &fname,
ModbusRTU::FileTransferMessage& query, ModbusRTU::FileTransferMessage& query,
ModbusRTU::FileTransferRetMessage& reply, ModbusRTU::FileTransferRetMessage& reply,
DebugStream* dlog ) DebugStream* dlog )
{ {
if( dlog && dlog->is_info() ) if( dlog && dlog->is_info() )
(*dlog)[Debug::INFO] << "(replyFileTransfer): " << query << endl; (*dlog)[Debug::INFO] << "(replyFileTransfer): " << query << endl;
int fd = open(fname.c_str(), O_RDONLY | O_NONBLOCK ); int fd = open(fname.c_str(), O_RDONLY | O_NONBLOCK );
if( fd <= 0 ) if( fd <= 0 )
{ {
...@@ -1434,12 +1434,12 @@ ModbusRTU::mbErrCode ModbusServer::replyFileTransfer( const std::string &fname, ...@@ -1434,12 +1434,12 @@ ModbusRTU::mbErrCode ModbusServer::replyFileTransfer( const std::string &fname,
close(fd); close(fd);
return ModbusRTU::erOperationFailed; return ModbusRTU::erOperationFailed;
} }
close(fd); close(fd);
int numpacks = fs.st_size / ModbusRTU::FileTransferRetMessage::MaxDataLen; int numpacks = fs.st_size / ModbusRTU::FileTransferRetMessage::MaxDataLen;
if( fs.st_size % ModbusRTU::FileTransferRetMessage::MaxDataLen ) if( fs.st_size % ModbusRTU::FileTransferRetMessage::MaxDataLen )
numpacks++; numpacks++;
if( !reply.set(query.numfile,numpacks,query.numpacket,buf,ret) ) if( !reply.set(query.numfile,numpacks,query.numpacket,buf,ret) )
{ {
if( dlog && dlog->is_warn() ) if( dlog && dlog->is_warn() )
...@@ -1447,10 +1447,10 @@ ModbusRTU::mbErrCode ModbusServer::replyFileTransfer( const std::string &fname, ...@@ -1447,10 +1447,10 @@ ModbusRTU::mbErrCode ModbusServer::replyFileTransfer( const std::string &fname,
return ModbusRTU::erOperationFailed; return ModbusRTU::erOperationFailed;
} }
return ModbusRTU::erNoError; return ModbusRTU::erNoError;
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
ModbusRTU::mbErrCode ModbusServer::replySetDateTime( ModbusRTU::SetDateTimeMessage& query, ModbusRTU::mbErrCode ModbusServer::replySetDateTime( ModbusRTU::SetDateTimeMessage& query,
ModbusRTU::SetDateTimeRetMessage& reply, ModbusRTU::SetDateTimeRetMessage& reply,
DebugStream* dlog ) DebugStream* dlog )
{ {
...@@ -1486,9 +1486,9 @@ ModbusRTU::mbErrCode ModbusServer::replySetDateTime( ModbusRTU::SetDateTimeMessa ...@@ -1486,9 +1486,9 @@ ModbusRTU::mbErrCode ModbusServer::replySetDateTime( ModbusRTU::SetDateTimeMessa
} }
else if( dlog && dlog->is_warn() ) else if( dlog && dlog->is_warn() )
(*dlog).warn() << "(replySetDateTime): gettimeofday err: " << strerror(errno) << endl; (*dlog).warn() << "(replySetDateTime): gettimeofday err: " << strerror(errno) << endl;
return ModbusRTU::erOperationFailed; return ModbusRTU::erOperationFailed;
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
mbErrCode ModbusServer::send( ModbusMessage& msg ) mbErrCode ModbusServer::send( ModbusMessage& msg )
{ {
......
...@@ -16,15 +16,15 @@ int ModbusTCPCore::readNextData( ost::TCPStream* tcp, ...@@ -16,15 +16,15 @@ int ModbusTCPCore::readNextData( ost::TCPStream* tcp,
tcp->read(&c,sizeof(c)); tcp->read(&c,sizeof(c));
if( tcp->gcount() <= 0 ) if( tcp->gcount() <= 0 )
break; break;
qrecv.push( (unsigned char)(c) ); qrecv.push( (unsigned char)(c) );
} }
return i; return i;
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
int ModbusTCPCore::getNextData( unsigned char* buf, int len, int ModbusTCPCore::getNextData( unsigned char* buf, int len,
std::queue<unsigned char>& qrecv, std::queue<unsigned char>& qrecv,
ost::TCPStream* tcp ) ost::TCPStream* tcp )
{ {
if( !tcp || !tcp->isConnected() ) if( !tcp || !tcp->isConnected() )
...@@ -60,17 +60,17 @@ mbErrCode ModbusTCPCore::sendData( unsigned char* buf, int len, ost::TCPStream* ...@@ -60,17 +60,17 @@ mbErrCode ModbusTCPCore::sendData( unsigned char* buf, int len, ost::TCPStream*
{ {
for( unsigned int i=0; i<len; i++ ) for( unsigned int i=0; i<len; i++ )
(*tcp) << buf[i]; (*tcp) << buf[i];
return erNoError; return erNoError;
} }
catch( ost::SockException& e ) catch( ost::SockException& e )
{ {
// cerr << "(send): " << e.getString() << ": " << e.getSystemErrorString() << endl; // cerr << "(send): " << e.getString() << ": " << e.getSystemErrorString() << endl;
} }
catch(...) catch(...)
{ {
// cerr << "(send): cath..." << endl; // cerr << "(send): cath..." << endl;
} }
return erHardwareError; return erHardwareError;
} }
......
...@@ -75,7 +75,7 @@ bool ModbusTCPServer::waitQuery( ModbusRTU::ModbusAddr mbaddr, timeout_t msec ) ...@@ -75,7 +75,7 @@ bool ModbusTCPServer::waitQuery( ModbusRTU::ModbusAddr mbaddr, timeout_t msec )
if( cancelled ) if( cancelled )
return false; return false;
try try
{ {
if( isPendingConnection(msec) ) if( isPendingConnection(msec) )
{ {
...@@ -94,8 +94,8 @@ bool ModbusTCPServer::waitQuery( ModbusRTU::ModbusAddr mbaddr, timeout_t msec ) ...@@ -94,8 +94,8 @@ bool ModbusTCPServer::waitQuery( ModbusRTU::ModbusAddr mbaddr, timeout_t msec )
s->connectWriteSingleOutput( sigc::mem_fun(this, &ModbusTCPServer::writeOutputSingleRegister) ); s->connectWriteSingleOutput( sigc::mem_fun(this, &ModbusTCPServer::writeOutputSingleRegister) );
s->connectMEIRDI( sigc::mem_fun(this, &ModbusTCPServer::read4314) ); s->connectMEIRDI( sigc::mem_fun(this, &ModbusTCPServer::read4314) );
s->connectSetDateTime( sigc::mem_fun(this, &ModbusTCPServer::setDateTime) ); s->connectSetDateTime( sigc::mem_fun(this, &ModbusTCPServer::setDateTime) );
s->connectDiagnostics( sigc::mem_fun(this, &ModbusTCPServer::diagnostics) ); s->connectDiagnostics( sigc::mem_fun(this, &ModbusTCPServer::diagnostics) );
s->connectFileTransfer( sigc::mem_fun(this, &ModbusTCPServer::fileTransfer) ); s->connectFileTransfer( sigc::mem_fun(this, &ModbusTCPServer::fileTransfer) );
s->connectJournalCommand( sigc::mem_fun(this, &ModbusTCPServer::journalCommand) ); s->connectJournalCommand( sigc::mem_fun(this, &ModbusTCPServer::journalCommand) );
s->connectRemoteService( sigc::mem_fun(this, &ModbusTCPServer::remoteService) ); s->connectRemoteService( sigc::mem_fun(this, &ModbusTCPServer::remoteService) );
s->connectFileTransfer( sigc::mem_fun(this, &ModbusTCPServer::fileTransfer) ); s->connectFileTransfer( sigc::mem_fun(this, &ModbusTCPServer::fileTransfer) );
...@@ -139,7 +139,7 @@ mbErrCode ModbusTCPServer::receive( ModbusRTU::ModbusAddr addr, timeout_t timeou ...@@ -139,7 +139,7 @@ mbErrCode ModbusTCPServer::receive( ModbusRTU::ModbusAddr addr, timeout_t timeou
assert(timeout); assert(timeout);
ptTimeout.reset(); ptTimeout.reset();
try try
{ {
if( isPendingConnection(timeout) ) if( isPendingConnection(timeout) )
{ {
...@@ -185,7 +185,7 @@ mbErrCode ModbusTCPServer::receive( ModbusRTU::ModbusAddr addr, timeout_t timeou ...@@ -185,7 +185,7 @@ mbErrCode ModbusTCPServer::receive( ModbusRTU::ModbusAddr addr, timeout_t timeou
// для режима игнорирования RTU-адреса // для режима игнорирования RTU-адреса
// просто подменяем его на то который пришёл // просто подменяем его на то который пришёл
// чтобы проверка всегда была успешной... // чтобы проверка всегда была успешной...
if( ignoreAddr ) if( ignoreAddr )
addr = _addr; addr = _addr;
else if( _addr != addr ) else if( _addr != addr )
{ {
...@@ -194,7 +194,7 @@ mbErrCode ModbusTCPServer::receive( ModbusRTU::ModbusAddr addr, timeout_t timeou ...@@ -194,7 +194,7 @@ mbErrCode ModbusTCPServer::receive( ModbusRTU::ModbusAddr addr, timeout_t timeou
/* /*
res = erBadReplyNodeAddress; res = erBadReplyNodeAddress;
tmProcessing.setTiming(replyTimeout_ms); tmProcessing.setTiming(replyTimeout_ms);
ErrorRetMessage em( _addr, buf.func, res ); ErrorRetMessage em( _addr, buf.func, res );
buf = em.transport_msg(); buf = em.transport_msg();
send(buf); send(buf);
printProcessingTime(); printProcessingTime();
...@@ -212,7 +212,7 @@ mbErrCode ModbusTCPServer::receive( ModbusRTU::ModbusAddr addr, timeout_t timeou ...@@ -212,7 +212,7 @@ mbErrCode ModbusTCPServer::receive( ModbusRTU::ModbusAddr addr, timeout_t timeou
{ {
if( res < erInternalErrorCode ) if( res < erInternalErrorCode )
{ {
ErrorRetMessage em( addr, buf.func, res ); ErrorRetMessage em( addr, buf.func, res );
buf = em.transport_msg(); buf = em.transport_msg();
send(buf); send(buf);
printProcessingTime(); printProcessingTime();
...@@ -305,7 +305,7 @@ mbErrCode ModbusTCPServer::tcp_processing( ost::TCPStream& tcp, ModbusTCP::MBAPH ...@@ -305,7 +305,7 @@ mbErrCode ModbusTCPServer::tcp_processing( ost::TCPStream& tcp, ModbusTCP::MBAPH
if( len<mhead.len ) if( len<mhead.len )
{ {
if( dlog.is_info() ) if( dlog.is_info() )
dlog.info() << "(ModbusTCPServer::tcp_processing): len(" << (int)len dlog.info() << "(ModbusTCPServer::tcp_processing): len(" << (int)len
<< ") < mhead.len(" << (int)mhead.len << ")" << endl; << ") < mhead.len(" << (int)mhead.len << ")" << endl;
return erInvalidFormat; return erInvalidFormat;
......
...@@ -140,7 +140,7 @@ ModbusRTU::mbErrCode ModbusTCPServerSlot::remoteService( ModbusRTU::RemoteServic ...@@ -140,7 +140,7 @@ ModbusRTU::mbErrCode ModbusTCPServerSlot::remoteService( ModbusRTU::RemoteServic
return slRemoteService(query,reply); return slRemoteService(query,reply);
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
ModbusRTU::mbErrCode ModbusTCPServerSlot::fileTransfer( ModbusRTU::FileTransferMessage& query, ModbusRTU::mbErrCode ModbusTCPServerSlot::fileTransfer( ModbusRTU::FileTransferMessage& query,
ModbusRTU::FileTransferRetMessage& reply ) ModbusRTU::FileTransferRetMessage& reply )
{ {
if( !slFileTransfer ) if( !slFileTransfer )
......
...@@ -114,7 +114,7 @@ ModbusRTU::mbErrCode ModbusTCPSession::receive( ModbusRTU::ModbusAddr addr, time ...@@ -114,7 +114,7 @@ ModbusRTU::mbErrCode ModbusTCPSession::receive( ModbusRTU::ModbusAddr addr, time
// для режима игнорирования RTU-адреса // для режима игнорирования RTU-адреса
// просто подменяем его на то который пришёл // просто подменяем его на то который пришёл
// чтобы проверка всегда была успешной... // чтобы проверка всегда была успешной...
if( ignoreAddr ) if( ignoreAddr )
addr = _addr; addr = _addr;
else if( _addr != addr ) else if( _addr != addr )
{ {
...@@ -136,7 +136,7 @@ ModbusRTU::mbErrCode ModbusTCPSession::receive( ModbusRTU::ModbusAddr addr, time ...@@ -136,7 +136,7 @@ ModbusRTU::mbErrCode ModbusTCPSession::receive( ModbusRTU::ModbusAddr addr, time
{ {
if( res < erInternalErrorCode ) if( res < erInternalErrorCode )
{ {
ErrorRetMessage em( addr, buf.func, res ); ErrorRetMessage em( addr, buf.func, res );
buf = em.transport_msg(); buf = em.transport_msg();
send(buf); send(buf);
printProcessingTime(); printProcessingTime();
...@@ -219,7 +219,7 @@ mbErrCode ModbusTCPSession::tcp_processing( ost::TCPStream& tcp, ModbusTCP::MBAP ...@@ -219,7 +219,7 @@ mbErrCode ModbusTCPSession::tcp_processing( ost::TCPStream& tcp, ModbusTCP::MBAP
if( len<mhead.len ) if( len<mhead.len )
{ {
if( dlog.debugging(Debug::INFO) ) if( dlog.debugging(Debug::INFO) )
dlog[Debug::INFO] << peername << "(tcp_processing): len(" << (int)len dlog[Debug::INFO] << peername << "(tcp_processing): len(" << (int)len
<< ") < mhead.len(" << (int)mhead.len << ")" << endl; << ") < mhead.len(" << (int)mhead.len << ")" << endl;
return erInvalidFormat; return erInvalidFormat;
...@@ -286,7 +286,7 @@ void ModbusTCPSession::terminate() ...@@ -286,7 +286,7 @@ void ModbusTCPSession::terminate()
// ost::Thread::join(); // ost::Thread::join();
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
mbErrCode ModbusTCPSession::readCoilStatus( ReadCoilMessage& query, mbErrCode ModbusTCPSession::readCoilStatus( ReadCoilMessage& query,
ReadCoilRetMessage& reply ) ReadCoilRetMessage& reply )
{ {
if( !slReadCoil ) if( !slReadCoil )
...@@ -296,7 +296,7 @@ mbErrCode ModbusTCPSession::readCoilStatus( ReadCoilMessage& query, ...@@ -296,7 +296,7 @@ mbErrCode ModbusTCPSession::readCoilStatus( ReadCoilMessage& query,
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
mbErrCode ModbusTCPSession::readInputStatus( ReadInputStatusMessage& query, mbErrCode ModbusTCPSession::readInputStatus( ReadInputStatusMessage& query,
ReadInputStatusRetMessage& reply ) ReadInputStatusRetMessage& reply )
{ {
if( !slReadInputStatus ) if( !slReadInputStatus )
...@@ -307,7 +307,7 @@ mbErrCode ModbusTCPSession::readInputStatus( ReadInputStatusMessage& query, ...@@ -307,7 +307,7 @@ mbErrCode ModbusTCPSession::readInputStatus( ReadInputStatusMessage& query,
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
mbErrCode ModbusTCPSession::readOutputRegisters( ReadOutputMessage& query, mbErrCode ModbusTCPSession::readOutputRegisters( ReadOutputMessage& query,
ReadOutputRetMessage& reply ) ReadOutputRetMessage& reply )
{ {
if( !slReadOutputs ) if( !slReadOutputs )
...@@ -317,7 +317,7 @@ mbErrCode ModbusTCPSession::readOutputRegisters( ReadOutputMessage& query, ...@@ -317,7 +317,7 @@ mbErrCode ModbusTCPSession::readOutputRegisters( ReadOutputMessage& query,
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
mbErrCode ModbusTCPSession::readInputRegisters( ReadInputMessage& query, mbErrCode ModbusTCPSession::readInputRegisters( ReadInputMessage& query,
ReadInputRetMessage& reply ) ReadInputRetMessage& reply )
{ {
if( !slReadInputs ) if( !slReadInputs )
...@@ -327,7 +327,7 @@ mbErrCode ModbusTCPSession::readInputRegisters( ReadInputMessage& query, ...@@ -327,7 +327,7 @@ mbErrCode ModbusTCPSession::readInputRegisters( ReadInputMessage& query,
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
mbErrCode ModbusTCPSession::forceMultipleCoils( ForceCoilsMessage& query, mbErrCode ModbusTCPSession::forceMultipleCoils( ForceCoilsMessage& query,
ForceCoilsRetMessage& reply ) ForceCoilsRetMessage& reply )
{ {
if( !slForceCoils ) if( !slForceCoils )
...@@ -338,7 +338,7 @@ mbErrCode ModbusTCPSession::forceMultipleCoils( ForceCoilsMessage& query, ...@@ -338,7 +338,7 @@ mbErrCode ModbusTCPSession::forceMultipleCoils( ForceCoilsMessage& query,
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
mbErrCode ModbusTCPSession::writeOutputRegisters( WriteOutputMessage& query, mbErrCode ModbusTCPSession::writeOutputRegisters( WriteOutputMessage& query,
WriteOutputRetMessage& reply ) WriteOutputRetMessage& reply )
{ {
if( !slWriteOutputs ) if( !slWriteOutputs )
...@@ -348,7 +348,7 @@ mbErrCode ModbusTCPSession::writeOutputRegisters( WriteOutputMessage& query, ...@@ -348,7 +348,7 @@ mbErrCode ModbusTCPSession::writeOutputRegisters( WriteOutputMessage& query,
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
mbErrCode ModbusTCPSession::diagnostics( DiagnosticMessage& query, mbErrCode ModbusTCPSession::diagnostics( DiagnosticMessage& query,
DiagnosticRetMessage& reply ) DiagnosticRetMessage& reply )
{ {
if( !slDiagnostics ) if( !slDiagnostics )
...@@ -357,7 +357,7 @@ mbErrCode ModbusTCPSession::diagnostics( DiagnosticMessage& query, ...@@ -357,7 +357,7 @@ mbErrCode ModbusTCPSession::diagnostics( DiagnosticMessage& query,
return slDiagnostics(query,reply); return slDiagnostics(query,reply);
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
ModbusRTU::mbErrCode ModbusTCPSession::read4314( ModbusRTU::MEIMessageRDI& query, ModbusRTU::mbErrCode ModbusTCPSession::read4314( ModbusRTU::MEIMessageRDI& query,
ModbusRTU::MEIMessageRetRDI& reply ) ModbusRTU::MEIMessageRetRDI& reply )
{ {
if( !slMEIRDI ) if( !slMEIRDI )
...@@ -366,7 +366,7 @@ ModbusRTU::mbErrCode ModbusTCPSession::read4314( ModbusRTU::MEIMessageRDI& query ...@@ -366,7 +366,7 @@ ModbusRTU::mbErrCode ModbusTCPSession::read4314( ModbusRTU::MEIMessageRDI& query
return slMEIRDI(query,reply); return slMEIRDI(query,reply);
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
mbErrCode ModbusTCPSession::forceSingleCoil( ForceSingleCoilMessage& query, mbErrCode ModbusTCPSession::forceSingleCoil( ForceSingleCoilMessage& query,
ForceSingleCoilRetMessage& reply ) ForceSingleCoilRetMessage& reply )
{ {
if( !slForceSingleCoil ) if( !slForceSingleCoil )
...@@ -376,7 +376,7 @@ mbErrCode ModbusTCPSession::forceSingleCoil( ForceSingleCoilMessage& query, ...@@ -376,7 +376,7 @@ mbErrCode ModbusTCPSession::forceSingleCoil( ForceSingleCoilMessage& query,
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
mbErrCode ModbusTCPSession::writeOutputSingleRegister( WriteSingleOutputMessage& query, mbErrCode ModbusTCPSession::writeOutputSingleRegister( WriteSingleOutputMessage& query,
WriteSingleOutputRetMessage& reply ) WriteSingleOutputRetMessage& reply )
{ {
if( !slWriteSingleOutputs ) if( !slWriteSingleOutputs )
...@@ -386,7 +386,7 @@ mbErrCode ModbusTCPSession::writeOutputSingleRegister( WriteSingleOutputMessage& ...@@ -386,7 +386,7 @@ mbErrCode ModbusTCPSession::writeOutputSingleRegister( WriteSingleOutputMessage&
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
mbErrCode ModbusTCPSession::journalCommand( JournalCommandMessage& query, mbErrCode ModbusTCPSession::journalCommand( JournalCommandMessage& query,
JournalCommandRetMessage& reply ) JournalCommandRetMessage& reply )
{ {
if( !slJournalCommand ) if( !slJournalCommand )
...@@ -395,7 +395,7 @@ mbErrCode ModbusTCPSession::journalCommand( JournalCommandMessage& query, ...@@ -395,7 +395,7 @@ mbErrCode ModbusTCPSession::journalCommand( JournalCommandMessage& query,
return slJournalCommand(query,reply); return slJournalCommand(query,reply);
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
ModbusRTU::mbErrCode ModbusTCPSession::setDateTime( ModbusRTU::SetDateTimeMessage& query, ModbusRTU::mbErrCode ModbusTCPSession::setDateTime( ModbusRTU::SetDateTimeMessage& query,
ModbusRTU::SetDateTimeRetMessage& reply ) ModbusRTU::SetDateTimeRetMessage& reply )
{ {
if( !slSetDateTime ) if( !slSetDateTime )
...@@ -404,7 +404,7 @@ ModbusRTU::mbErrCode ModbusTCPSession::setDateTime( ModbusRTU::SetDateTimeMessag ...@@ -404,7 +404,7 @@ ModbusRTU::mbErrCode ModbusTCPSession::setDateTime( ModbusRTU::SetDateTimeMessag
return slSetDateTime(query,reply); return slSetDateTime(query,reply);
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
ModbusRTU::mbErrCode ModbusTCPSession::remoteService( ModbusRTU::RemoteServiceMessage& query, ModbusRTU::mbErrCode ModbusTCPSession::remoteService( ModbusRTU::RemoteServiceMessage& query,
ModbusRTU::RemoteServiceRetMessage& reply ) ModbusRTU::RemoteServiceRetMessage& reply )
{ {
if( !slRemoteService ) if( !slRemoteService )
...@@ -413,7 +413,7 @@ ModbusRTU::mbErrCode ModbusTCPSession::remoteService( ModbusRTU::RemoteServiceMe ...@@ -413,7 +413,7 @@ ModbusRTU::mbErrCode ModbusTCPSession::remoteService( ModbusRTU::RemoteServiceMe
return slRemoteService(query,reply); return slRemoteService(query,reply);
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
ModbusRTU::mbErrCode ModbusTCPSession::fileTransfer( ModbusRTU::FileTransferMessage& query, ModbusRTU::mbErrCode ModbusTCPSession::fileTransfer( ModbusRTU::FileTransferMessage& query,
ModbusRTU::FileTransferRetMessage& reply ) ModbusRTU::FileTransferRetMessage& reply )
{ {
if( !slFileTransfer ) if( !slFileTransfer )
......
...@@ -100,7 +100,7 @@ static int get_crc_ccitt( unsigned short crc, unsigned char* buf, int size ) ...@@ -100,7 +100,7 @@ static int get_crc_ccitt( unsigned short crc, unsigned char* buf, int size )
#else #else
register int i; register int i;
crc ^= (unsigned short)(*(buf++)) << 8; crc ^= (unsigned short)(*(buf++)) << 8;
for (i = 0; i < 8; i++) for (i = 0; i < 8; i++)
{ {
if (crc & 0x8000) if (crc & 0x8000)
crc = (crc << 1) ^ 0x1021; crc = (crc << 1) ^ 0x1021;
...@@ -120,12 +120,12 @@ static int get_crc_16( unsigned short crc, unsigned char* buf, int size ) ...@@ -120,12 +120,12 @@ static int get_crc_16( unsigned short crc, unsigned char* buf, int size )
while( size-- ) while( size-- )
{ {
#ifdef USE_CRC_TAB #ifdef USE_CRC_TAB
crc = (crc >> 8) ^ crc_16_tab[ (crc ^ *(buf++)) & 0xff ]; crc = (crc >> 8) ^ crc_16_tab[ (crc ^ *(buf++)) & 0xff ];
#else #else
register int i, ch; register int i, ch;
ch = *(buf++); ch = *(buf++);
for (i = 0; i < 8; i++) for (i = 0; i < 8; i++)
{ {
if ((crc ^ ch) & 1) if ((crc ^ ch) & 1)
crc = (crc >> 1) ^ 0xa001; crc = (crc >> 1) ^ 0xa001;
...@@ -136,7 +136,7 @@ static int get_crc_16( unsigned short crc, unsigned char* buf, int size ) ...@@ -136,7 +136,7 @@ static int get_crc_16( unsigned short crc, unsigned char* buf, int size )
} }
#endif #endif
// crc = crc & 0xffff; // crc = crc & 0xffff;
} }
return crc; return crc;
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
...@@ -164,7 +164,7 @@ std::ostream& ModbusRTU::mbPrintMessage( std::ostream& os, ModbusByte* m, int le ...@@ -164,7 +164,7 @@ std::ostream& ModbusRTU::mbPrintMessage( std::ostream& os, ModbusByte* m, int le
for( unsigned int i=0; i<len; i++ ) for( unsigned int i=0; i<len; i++ )
s << setw(2) << (short)(m[i]) << " "; s << setw(2) << (short)(m[i]) << " ";
// s << "<" << setw(2) << (int)(m[i]) << ">"; // s << "<" << setw(2) << (int)(m[i]) << ">";
return os << s.str(); return os << s.str();
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
...@@ -250,8 +250,8 @@ ModbusMessage ErrorRetMessage::transport_msg() ...@@ -250,8 +250,8 @@ ModbusMessage ErrorRetMessage::transport_msg()
std::ostream& ModbusRTU::operator<<(std::ostream& os, ErrorRetMessage& m ) std::ostream& ModbusRTU::operator<<(std::ostream& os, ErrorRetMessage& m )
{ {
// return mbPrintMessage(os,(ModbusByte*)(&m),sizeof(m)); // return mbPrintMessage(os,(ModbusByte*)(&m),sizeof(m));
return os << "addr=" << addr2str(m.addr) return os << "addr=" << addr2str(m.addr)
<< " func=" << (int)m.func << " func=" << (int)m.func
<< " errcode=" << dat2str(m.ecode); << " errcode=" << dat2str(m.ecode);
} }
std::ostream& ModbusRTU::operator<<(std::ostream& os, ErrorRetMessage* m ) std::ostream& ModbusRTU::operator<<(std::ostream& os, ErrorRetMessage* m )
...@@ -313,7 +313,7 @@ void ReadCoilMessage::init( ModbusMessage& m ) ...@@ -313,7 +313,7 @@ void ReadCoilMessage::init( ModbusMessage& m )
assert( m.func == fnReadCoilStatus ); assert( m.func == fnReadCoilStatus );
memset(this,0,sizeof(*this)); memset(this,0,sizeof(*this));
memcpy(this,&m,sizeof(*this)); // m.len memcpy(this,&m,sizeof(*this)); // m.len
// переворачиваем слова // переворачиваем слова
start = SWAPSHORT(start); start = SWAPSHORT(start);
count = SWAPSHORT(count); count = SWAPSHORT(count);
...@@ -323,8 +323,8 @@ void ReadCoilMessage::init( ModbusMessage& m ) ...@@ -323,8 +323,8 @@ void ReadCoilMessage::init( ModbusMessage& m )
std::ostream& ModbusRTU::operator<<(std::ostream& os, ReadCoilMessage& m ) std::ostream& ModbusRTU::operator<<(std::ostream& os, ReadCoilMessage& m )
{ {
// return mbPrintMessage(os,(ModbusByte*)(&m),sizeof(m)); // return mbPrintMessage(os,(ModbusByte*)(&m),sizeof(m));
return os << "addr=" << addr2str(m.addr) return os << "addr=" << addr2str(m.addr)
<< " start=" << dat2str(m.start) << " start=" << dat2str(m.start)
<< " count=" << dat2str(m.count); << " count=" << dat2str(m.count);
} }
std::ostream& ModbusRTU::operator<<(std::ostream& os, ReadCoilMessage* m ) std::ostream& ModbusRTU::operator<<(std::ostream& os, ReadCoilMessage* m )
...@@ -335,7 +335,7 @@ std::ostream& ModbusRTU::operator<<(std::ostream& os, ReadCoilMessage* m ) ...@@ -335,7 +335,7 @@ std::ostream& ModbusRTU::operator<<(std::ostream& os, ReadCoilMessage* m )
DataBits::DataBits( std::string s ): DataBits::DataBits( std::string s ):
b(s) b(s)
{ {
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
DataBits::DataBits( ModbusByte ubyte ) DataBits::DataBits( ModbusByte ubyte )
...@@ -369,7 +369,7 @@ const DataBits& DataBits::operator=( const ModbusByte& r ) ...@@ -369,7 +369,7 @@ const DataBits& DataBits::operator=( const ModbusByte& r )
{ {
for( unsigned int i=0; i<b.size(); i++ ) for( unsigned int i=0; i<b.size(); i++ )
b[i] = r&(1<<i); b[i] = r&(1<<i);
return (*this); return (*this);
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
...@@ -391,7 +391,7 @@ std::ostream& ModbusRTU::operator<<(std::ostream& os, DataBits* d ) ...@@ -391,7 +391,7 @@ std::ostream& ModbusRTU::operator<<(std::ostream& os, DataBits* d )
DataBits16::DataBits16( std::string s ): DataBits16::DataBits16( std::string s ):
b(s) b(s)
{ {
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
DataBits16::DataBits16( ModbusData d ) DataBits16::DataBits16( ModbusData d )
...@@ -425,7 +425,7 @@ const DataBits16& DataBits16::operator=( const ModbusData& r ) ...@@ -425,7 +425,7 @@ const DataBits16& DataBits16::operator=( const ModbusData& r )
{ {
for( unsigned int i=0; i<b.size(); i++ ) for( unsigned int i=0; i<b.size(); i++ )
b[i] = r&(1<<i); b[i] = r&(1<<i);
return (*this); return (*this);
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
...@@ -462,14 +462,14 @@ void ReadCoilRetMessage::init( ModbusMessage& m ) ...@@ -462,14 +462,14 @@ void ReadCoilRetMessage::init( ModbusMessage& m )
memset(this,0,sizeof(*this)); memset(this,0,sizeof(*this));
addr = m.addr; addr = m.addr;
func = m.func; func = m.func;
bcnt = m.data[0]; bcnt = m.data[0];
if( bcnt > MAXLENPACKET ) if( bcnt > MAXLENPACKET )
throw mbException(erPacketTooLong); throw mbException(erPacketTooLong);
memcpy(&data,&(m.data[1]),bcnt); memcpy(&data,&(m.data[1]),bcnt);
memcpy(&crc,&(m.data[bcnt+1]),szCRC); memcpy(&crc,&(m.data[bcnt+1]),szCRC);
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
int ReadCoilRetMessage::getDataLen( ModbusMessage& m ) int ReadCoilRetMessage::getDataLen( ModbusMessage& m )
{ {
...@@ -496,7 +496,7 @@ bool ReadCoilRetMessage::setBit( unsigned char dnum, unsigned char bnum, bool st ...@@ -496,7 +496,7 @@ bool ReadCoilRetMessage::setBit( unsigned char dnum, unsigned char bnum, bool st
data[dnum] = d; data[dnum] = d;
return true; return true;
} }
return false; return false;
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
...@@ -504,7 +504,7 @@ bool ReadCoilRetMessage::addData( DataBits d ) ...@@ -504,7 +504,7 @@ bool ReadCoilRetMessage::addData( DataBits d )
{ {
if( isFull() ) if( isFull() )
return false; return false;
data[bcnt++] = d.mbyte(); data[bcnt++] = d.mbyte();
return true; return true;
} }
...@@ -516,7 +516,7 @@ bool ReadCoilRetMessage::getData( unsigned char dnum, DataBits& d ) ...@@ -516,7 +516,7 @@ bool ReadCoilRetMessage::getData( unsigned char dnum, DataBits& d )
d = data[dnum]; d = data[dnum];
return true; return true;
} }
return false; return false;
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
...@@ -535,7 +535,7 @@ ModbusMessage ReadCoilRetMessage::transport_msg() ...@@ -535,7 +535,7 @@ ModbusMessage ReadCoilRetMessage::transport_msg()
// копируем заголовок и данные // копируем заголовок и данные
memcpy(&mm,this,szModbusHeader); memcpy(&mm,this,szModbusHeader);
memcpy(&mm.data,&bcnt,sizeof(bcnt)); memcpy(&mm.data,&bcnt,sizeof(bcnt));
int ind = sizeof(bcnt); int ind = sizeof(bcnt);
// копируем данные // копируем данные
...@@ -550,7 +550,7 @@ ModbusMessage ReadCoilRetMessage::transport_msg() ...@@ -550,7 +550,7 @@ ModbusMessage ReadCoilRetMessage::transport_msg()
ind+=szCRC; ind+=szCRC;
// длина сообщения... // длина сообщения...
mm.len = ind; mm.len = ind;
return mm; return mm;
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
...@@ -623,7 +623,7 @@ void ReadInputStatusMessage::init( ModbusMessage& m ) ...@@ -623,7 +623,7 @@ void ReadInputStatusMessage::init( ModbusMessage& m )
assert( m.func == fnReadInputStatus ); assert( m.func == fnReadInputStatus );
memset(this,0,sizeof(*this)); memset(this,0,sizeof(*this));
memcpy(this,&m,sizeof(*this)); // m.len memcpy(this,&m,sizeof(*this)); // m.len
// переворачиваем слова // переворачиваем слова
start = SWAPSHORT(start); start = SWAPSHORT(start);
count = SWAPSHORT(count); count = SWAPSHORT(count);
...@@ -633,8 +633,8 @@ void ReadInputStatusMessage::init( ModbusMessage& m ) ...@@ -633,8 +633,8 @@ void ReadInputStatusMessage::init( ModbusMessage& m )
std::ostream& ModbusRTU::operator<<(std::ostream& os, ReadInputStatusMessage& m ) std::ostream& ModbusRTU::operator<<(std::ostream& os, ReadInputStatusMessage& m )
{ {
// return mbPrintMessage(os,(ModbusByte*)(&m),sizeof(m)); // return mbPrintMessage(os,(ModbusByte*)(&m),sizeof(m));
return os << "addr=" << addr2str(m.addr) return os << "addr=" << addr2str(m.addr)
<< " start=" << dat2str(m.start) << " start=" << dat2str(m.start)
<< " count=" << dat2str(m.count); << " count=" << dat2str(m.count);
} }
std::ostream& ModbusRTU::operator<<(std::ostream& os, ReadInputStatusMessage* m ) std::ostream& ModbusRTU::operator<<(std::ostream& os, ReadInputStatusMessage* m )
...@@ -660,14 +660,14 @@ void ReadInputStatusRetMessage::init( ModbusMessage& m ) ...@@ -660,14 +660,14 @@ void ReadInputStatusRetMessage::init( ModbusMessage& m )
memset(this,0,sizeof(*this)); memset(this,0,sizeof(*this));
addr = m.addr; addr = m.addr;
func = m.func; func = m.func;
bcnt = m.data[0]; bcnt = m.data[0];
if( bcnt > MAXLENPACKET ) if( bcnt > MAXLENPACKET )
throw mbException(erPacketTooLong); throw mbException(erPacketTooLong);
memcpy(&data,&(m.data[1]),bcnt); memcpy(&data,&(m.data[1]),bcnt);
memcpy(&crc,&(m.data[bcnt+1]),szCRC); memcpy(&crc,&(m.data[bcnt+1]),szCRC);
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
int ReadInputStatusRetMessage::getDataLen( ModbusMessage& m ) int ReadInputStatusRetMessage::getDataLen( ModbusMessage& m )
{ {
...@@ -694,7 +694,7 @@ bool ReadInputStatusRetMessage::setBit( unsigned char dnum, unsigned char bnum, ...@@ -694,7 +694,7 @@ bool ReadInputStatusRetMessage::setBit( unsigned char dnum, unsigned char bnum,
data[dnum] = d; data[dnum] = d;
return true; return true;
} }
return false; return false;
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
...@@ -702,7 +702,7 @@ bool ReadInputStatusRetMessage::addData( DataBits d ) ...@@ -702,7 +702,7 @@ bool ReadInputStatusRetMessage::addData( DataBits d )
{ {
if( isFull() ) if( isFull() )
return false; return false;
data[bcnt++] = d.mbyte(); data[bcnt++] = d.mbyte();
return true; return true;
} }
...@@ -714,7 +714,7 @@ bool ReadInputStatusRetMessage::getData( unsigned char dnum, DataBits& d ) ...@@ -714,7 +714,7 @@ bool ReadInputStatusRetMessage::getData( unsigned char dnum, DataBits& d )
d = data[dnum]; d = data[dnum];
return true; return true;
} }
return false; return false;
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
...@@ -733,7 +733,7 @@ ModbusMessage ReadInputStatusRetMessage::transport_msg() ...@@ -733,7 +733,7 @@ ModbusMessage ReadInputStatusRetMessage::transport_msg()
// копируем заголовок и данные // копируем заголовок и данные
memcpy(&mm,this,szModbusHeader); memcpy(&mm,this,szModbusHeader);
memcpy(&mm.data,&bcnt,sizeof(bcnt)); memcpy(&mm.data,&bcnt,sizeof(bcnt));
int ind = sizeof(bcnt); int ind = sizeof(bcnt);
// копируем данные // копируем данные
...@@ -748,7 +748,7 @@ ModbusMessage ReadInputStatusRetMessage::transport_msg() ...@@ -748,7 +748,7 @@ ModbusMessage ReadInputStatusRetMessage::transport_msg()
ind+=szCRC; ind+=szCRC;
// длина сообщения... // длина сообщения...
mm.len = ind; mm.len = ind;
return mm; return mm;
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
...@@ -824,7 +824,7 @@ void ReadOutputMessage::init( ModbusMessage& m ) ...@@ -824,7 +824,7 @@ void ReadOutputMessage::init( ModbusMessage& m )
assert( m.func == fnReadOutputRegisters ); assert( m.func == fnReadOutputRegisters );
memset(this,0,sizeof(*this)); memset(this,0,sizeof(*this));
memcpy(this,&m,sizeof(*this)); // m.len memcpy(this,&m,sizeof(*this)); // m.len
// переворачиваем слова // переворачиваем слова
start = SWAPSHORT(start); start = SWAPSHORT(start);
count = SWAPSHORT(count); count = SWAPSHORT(count);
...@@ -834,8 +834,8 @@ void ReadOutputMessage::init( ModbusMessage& m ) ...@@ -834,8 +834,8 @@ void ReadOutputMessage::init( ModbusMessage& m )
std::ostream& ModbusRTU::operator<<(std::ostream& os, ReadOutputMessage& m ) std::ostream& ModbusRTU::operator<<(std::ostream& os, ReadOutputMessage& m )
{ {
// return mbPrintMessage(os,(ModbusByte*)(&m),sizeof(m)); // return mbPrintMessage(os,(ModbusByte*)(&m),sizeof(m));
return os << "addr=" << addr2str(m.addr) return os << "addr=" << addr2str(m.addr)
<< " start=" << dat2str(m.start) << " start=" << dat2str(m.start)
<< " count=" << dat2str(m.count); << " count=" << dat2str(m.count);
} }
std::ostream& ModbusRTU::operator<<(std::ostream& os, ReadOutputMessage* m ) std::ostream& ModbusRTU::operator<<(std::ostream& os, ReadOutputMessage* m )
...@@ -861,12 +861,12 @@ void ReadOutputRetMessage::init( ModbusMessage& m ) ...@@ -861,12 +861,12 @@ void ReadOutputRetMessage::init( ModbusMessage& m )
memset(this,0,sizeof(*this)); memset(this,0,sizeof(*this));
addr = m.addr; addr = m.addr;
func = m.func; func = m.func;
// bcnt = m.data[0]; // bcnt = m.data[0];
int cnt = m.data[0] / sizeof(ModbusData); int cnt = m.data[0] / sizeof(ModbusData);
if( cnt > MAXLENPACKET/sizeof(ModbusData) ) if( cnt > MAXLENPACKET/sizeof(ModbusData) )
{ {
// cerr << "(ReadOutputRetMessage): BAD bcnt=" // cerr << "(ReadOutputRetMessage): BAD bcnt="
// << (int)bcnt << " count=" << cnt << endl; // << (int)bcnt << " count=" << cnt << endl;
throw mbException(erPacketTooLong); throw mbException(erPacketTooLong);
} }
...@@ -874,13 +874,13 @@ void ReadOutputRetMessage::init( ModbusMessage& m ) ...@@ -874,13 +874,13 @@ void ReadOutputRetMessage::init( ModbusMessage& m )
count = cnt; count = cnt;
bcnt = m.data[0]; bcnt = m.data[0];
memcpy(&data,&(m.data[1]),bcnt); memcpy(&data,&(m.data[1]),bcnt);
// переворачиваем данные // переворачиваем данные
for( unsigned int i=0; i<cnt; i++ ) for( unsigned int i=0; i<cnt; i++ )
data[i] = SWAPSHORT(data[i]); data[i] = SWAPSHORT(data[i]);
memcpy(&crc,&(m.data[bcnt+1]),szCRC); memcpy(&crc,&(m.data[bcnt+1]),szCRC);
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
int ReadOutputRetMessage::getDataLen( ModbusMessage& m ) int ReadOutputRetMessage::getDataLen( ModbusMessage& m )
{ {
...@@ -891,7 +891,7 @@ int ReadOutputRetMessage::getDataLen( ModbusMessage& m ) ...@@ -891,7 +891,7 @@ int ReadOutputRetMessage::getDataLen( ModbusMessage& m )
/* /*
ReadOutputMessage rm(m); ReadOutputMessage rm(m);
return (int)(rm.bcnt); return (int)(rm.bcnt);
*/ */
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
ReadOutputRetMessage::ReadOutputRetMessage( ModbusAddr _addr ): ReadOutputRetMessage::ReadOutputRetMessage( ModbusAddr _addr ):
...@@ -907,7 +907,7 @@ bool ReadOutputRetMessage::addData( ModbusData d ) ...@@ -907,7 +907,7 @@ bool ReadOutputRetMessage::addData( ModbusData d )
{ {
if( isFull() ) if( isFull() )
return false; return false;
data[count++] = d; data[count++] = d;
bcnt = count*sizeof(ModbusData); bcnt = count*sizeof(ModbusData);
return true; return true;
...@@ -928,10 +928,10 @@ ModbusMessage ReadOutputRetMessage::transport_msg() ...@@ -928,10 +928,10 @@ ModbusMessage ReadOutputRetMessage::transport_msg()
// копируем заголовок и данные // копируем заголовок и данные
memcpy(&mm,this,szModbusHeader); memcpy(&mm,this,szModbusHeader);
int ind=0; int ind=0;
bcnt = count*sizeof(ModbusData); bcnt = count*sizeof(ModbusData);
// copy bcnt // copy bcnt
memcpy(&mm.data,&bcnt,sizeof(bcnt)); memcpy(&mm.data,&bcnt,sizeof(bcnt));
ind+=sizeof(bcnt); ind+=sizeof(bcnt);
...@@ -957,13 +957,13 @@ ModbusMessage ReadOutputRetMessage::transport_msg() ...@@ -957,13 +957,13 @@ ModbusMessage ReadOutputRetMessage::transport_msg()
ModbusData crc = checkCRC( (ModbusByte*)(&mm), szModbusHeader+sizeof(bcnt)+bcnt ); ModbusData crc = checkCRC( (ModbusByte*)(&mm), szModbusHeader+sizeof(bcnt)+bcnt );
// crc = SWAPSHORT(crc); // crc = SWAPSHORT(crc);
// копируем CRC (последний элемент). Без переворачивания... // копируем CRC (последний элемент). Без переворачивания...
memcpy(&(mm.data[ind]),&crc,szCRC); memcpy(&(mm.data[ind]),&crc,szCRC);
ind+=szCRC; ind+=szCRC;
// длина сообщения... // длина сообщения...
mm.len = ind; mm.len = ind;
return mm; return mm;
} }
...@@ -1040,7 +1040,7 @@ void ReadInputMessage::init( ModbusMessage& m ) ...@@ -1040,7 +1040,7 @@ void ReadInputMessage::init( ModbusMessage& m )
assert( m.func == fnReadInputRegisters ); assert( m.func == fnReadInputRegisters );
memset(this,0,sizeof(*this)); memset(this,0,sizeof(*this));
memcpy(this,&m,sizeof(*this)); // m.len memcpy(this,&m,sizeof(*this)); // m.len
// переворачиваем слова // переворачиваем слова
start = SWAPSHORT(start); start = SWAPSHORT(start);
count = SWAPSHORT(count); count = SWAPSHORT(count);
...@@ -1050,8 +1050,8 @@ void ReadInputMessage::init( ModbusMessage& m ) ...@@ -1050,8 +1050,8 @@ void ReadInputMessage::init( ModbusMessage& m )
std::ostream& ModbusRTU::operator<<(std::ostream& os, ReadInputMessage& m ) std::ostream& ModbusRTU::operator<<(std::ostream& os, ReadInputMessage& m )
{ {
// return mbPrintMessage(os,(ModbusByte*)(&m),sizeof(m)); // return mbPrintMessage(os,(ModbusByte*)(&m),sizeof(m));
return os << "addr=" << addr2str(m.addr) return os << "addr=" << addr2str(m.addr)
<< " start=" << dat2str(m.start) << " start=" << dat2str(m.start)
<< " count=" << dat2str(m.count); << " count=" << dat2str(m.count);
} }
std::ostream& ModbusRTU::operator<<(std::ostream& os, ReadInputMessage* m ) std::ostream& ModbusRTU::operator<<(std::ostream& os, ReadInputMessage* m )
...@@ -1077,7 +1077,7 @@ void ReadInputRetMessage::init( ModbusMessage& m ) ...@@ -1077,7 +1077,7 @@ void ReadInputRetMessage::init( ModbusMessage& m )
memset(this,0,sizeof(*this)); memset(this,0,sizeof(*this));
addr = m.addr; addr = m.addr;
func = m.func; func = m.func;
// bcnt = m.data[0]; // bcnt = m.data[0];
int cnt = m.data[0] / sizeof(ModbusData); int cnt = m.data[0] / sizeof(ModbusData);
if( cnt > MAXLENPACKET/sizeof(ModbusData) ) if( cnt > MAXLENPACKET/sizeof(ModbusData) )
...@@ -1086,13 +1086,13 @@ void ReadInputRetMessage::init( ModbusMessage& m ) ...@@ -1086,13 +1086,13 @@ void ReadInputRetMessage::init( ModbusMessage& m )
count = cnt; count = cnt;
bcnt = m.data[0]; bcnt = m.data[0];
memcpy(&data,&(m.data[1]),bcnt); memcpy(&data,&(m.data[1]),bcnt);
// переворачиваем данные // переворачиваем данные
for( unsigned int i=0; i<cnt; i++ ) for( unsigned int i=0; i<cnt; i++ )
data[i] = SWAPSHORT(data[i]); data[i] = SWAPSHORT(data[i]);
memcpy(&crc,&(m.data[bcnt+1]),szCRC); memcpy(&crc,&(m.data[bcnt+1]),szCRC);
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
int ReadInputRetMessage::getDataLen( ModbusMessage& m ) int ReadInputRetMessage::getDataLen( ModbusMessage& m )
{ {
...@@ -1115,7 +1115,7 @@ bool ReadInputRetMessage::addData( ModbusData d ) ...@@ -1115,7 +1115,7 @@ bool ReadInputRetMessage::addData( ModbusData d )
{ {
if( isFull() ) if( isFull() )
return false; return false;
data[count++] = d; data[count++] = d;
bcnt = count*sizeof(ModbusData); bcnt = count*sizeof(ModbusData);
return true; return true;
...@@ -1135,10 +1135,10 @@ ModbusMessage ReadInputRetMessage::transport_msg() ...@@ -1135,10 +1135,10 @@ ModbusMessage ReadInputRetMessage::transport_msg()
// копируем заголовок и данные // копируем заголовок и данные
memcpy(&mm,this,szModbusHeader); memcpy(&mm,this,szModbusHeader);
int ind=0; int ind=0;
bcnt = count*sizeof(ModbusData); bcnt = count*sizeof(ModbusData);
// copy bcnt // copy bcnt
memcpy(&mm.data,&bcnt,sizeof(bcnt)); memcpy(&mm.data,&bcnt,sizeof(bcnt));
ind+=sizeof(bcnt); ind+=sizeof(bcnt);
...@@ -1163,7 +1163,7 @@ ModbusMessage ReadInputRetMessage::transport_msg() ...@@ -1163,7 +1163,7 @@ ModbusMessage ReadInputRetMessage::transport_msg()
ind+=szCRC; ind+=szCRC;
// длина сообщения... // длина сообщения...
mm.len = ind; mm.len = ind;
return mm; return mm;
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
...@@ -1197,7 +1197,7 @@ bool ForceCoilsMessage::addData( DataBits16 d ) ...@@ -1197,7 +1197,7 @@ bool ForceCoilsMessage::addData( DataBits16 d )
{ {
if( isFull() ) if( isFull() )
return false; return false;
data[quant++] = d.mdata(); data[quant++] = d.mdata();
bcnt = quant*sizeof(ModbusData); bcnt = quant*sizeof(ModbusData);
return true; return true;
...@@ -1212,7 +1212,7 @@ bool ForceCoilsMessage::setBit( unsigned char dnum, unsigned char bnum, bool sta ...@@ -1212,7 +1212,7 @@ bool ForceCoilsMessage::setBit( unsigned char dnum, unsigned char bnum, bool sta
data[dnum] = d; data[dnum] = d;
return true; return true;
} }
return false; return false;
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
...@@ -1223,7 +1223,7 @@ bool ForceCoilsMessage::getData( unsigned char dnum, DataBits16& d ) ...@@ -1223,7 +1223,7 @@ bool ForceCoilsMessage::getData( unsigned char dnum, DataBits16& d )
d = data[dnum]; d = data[dnum];
return true; return true;
} }
return false; return false;
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
...@@ -1242,7 +1242,7 @@ ModbusMessage ForceCoilsMessage::transport_msg() ...@@ -1242,7 +1242,7 @@ ModbusMessage ForceCoilsMessage::transport_msg()
// копируем заголовок // копируем заголовок
memcpy(&mm,this,szModbusHeader); memcpy(&mm,this,szModbusHeader);
int ind = 0; int ind = 0;
// данные (переворачиваем байты) // данные (переворачиваем байты)
...@@ -1252,7 +1252,7 @@ ModbusMessage ForceCoilsMessage::transport_msg() ...@@ -1252,7 +1252,7 @@ ModbusMessage ForceCoilsMessage::transport_msg()
// копируем // копируем
memcpy(mm.data,&d,ind); memcpy(mm.data,&d,ind);
// copy bcnt // copy bcnt
bcnt = quant*sizeof(ModbusData); bcnt = quant*sizeof(ModbusData);
memcpy(&(mm.data[ind]),&bcnt,sizeof(bcnt)); memcpy(&(mm.data[ind]),&bcnt,sizeof(bcnt));
ind+=sizeof(bcnt); ind+=sizeof(bcnt);
...@@ -1276,7 +1276,7 @@ ModbusMessage ForceCoilsMessage::transport_msg() ...@@ -1276,7 +1276,7 @@ ModbusMessage ForceCoilsMessage::transport_msg()
ind+=szCRC; ind+=szCRC;
// длина сообщения... // длина сообщения...
mm.len = ind; mm.len = ind;
return mm; return mm;
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
...@@ -1297,10 +1297,10 @@ void ForceCoilsMessage::init( ModbusMessage& m ) ...@@ -1297,10 +1297,10 @@ void ForceCoilsMessage::init( ModbusMessage& m )
assert( m.func == fnForceMultipleCoils ); assert( m.func == fnForceMultipleCoils );
memset(this,0,sizeof(*this)); memset(this,0,sizeof(*this));
// copy not include CRC // copy not include CRC
memcpy(this,&m,szModbusHeader+m.len); memcpy(this,&m,szModbusHeader+m.len);
// Сперва переворачиваем обратно слова // Сперва переворачиваем обратно слова
start = SWAPSHORT(start); start = SWAPSHORT(start);
quant = SWAPSHORT(quant); quant = SWAPSHORT(quant);
...@@ -1310,7 +1310,7 @@ void ForceCoilsMessage::init( ModbusMessage& m ) ...@@ -1310,7 +1310,7 @@ void ForceCoilsMessage::init( ModbusMessage& m )
{ {
#ifdef DEBUG #ifdef DEBUG
cerr << "(ForceCoilsMessage): BAD format!" << endl; cerr << "(ForceCoilsMessage): BAD format!" << endl;
cerr << "bcnt=" << (int)bcnt cerr << "bcnt=" << (int)bcnt
<< " quant=" << (int)quant << " quant=" << (int)quant
<< endl; << endl;
#endif #endif
...@@ -1350,20 +1350,20 @@ int ForceCoilsMessage::getDataLen( ModbusMessage& m ) ...@@ -1350,20 +1350,20 @@ int ForceCoilsMessage::getDataLen( ModbusMessage& m )
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
std::ostream& ModbusRTU::operator<<(std::ostream& os, ForceCoilsMessage& m ) std::ostream& ModbusRTU::operator<<(std::ostream& os, ForceCoilsMessage& m )
{ {
os << "addr=" << addr2str(m.addr) os << "addr=" << addr2str(m.addr)
<< " start=" << dat2str(m.start) << " start=" << dat2str(m.start)
<< " quant=" << dat2str(m.quant) << " quant=" << dat2str(m.quant)
<< " bcnt=" << b2str(m.bcnt) << " bcnt=" << b2str(m.bcnt)
<< " data[" << (int)m.quant <<"]={ "; << " data[" << (int)m.quant <<"]={ ";
for( unsigned int i=0; i<m.quant; i++ ) for( unsigned int i=0; i<m.quant; i++ )
{ {
DataBits16 d(m.data[i]); DataBits16 d(m.data[i]);
os << "" << d << " "; os << "" << d << " ";
} }
os << "}"; os << "}";
return os; return os;
} }
std::ostream& ModbusRTU::operator<<(std::ostream& os, ForceCoilsMessage* m ) std::ostream& ModbusRTU::operator<<(std::ostream& os, ForceCoilsMessage* m )
{ {
...@@ -1386,18 +1386,18 @@ void ForceCoilsRetMessage::init( ModbusMessage& m ) ...@@ -1386,18 +1386,18 @@ void ForceCoilsRetMessage::init( ModbusMessage& m )
assert( m.func == fnForceMultipleCoils ); assert( m.func == fnForceMultipleCoils );
memset(this,0,sizeof(*this)); memset(this,0,sizeof(*this));
// copy not include CRC // copy not include CRC
memcpy(this,&m,szModbusHeader+m.len); memcpy(this,&m,szModbusHeader+m.len);
/*! \todo (WriteOutputRetMessage): необходимо встроить проверку на корректность данных */ /*! \todo (WriteOutputRetMessage): необходимо встроить проверку на корректность данных */
// Сперва переворачиваем обратно слова // Сперва переворачиваем обратно слова
start = SWAPSHORT(start); start = SWAPSHORT(start);
quant = SWAPSHORT(quant); quant = SWAPSHORT(quant);
int ind = sizeof(quant)+sizeof(start); int ind = sizeof(quant)+sizeof(start);
// копируем CRC (последний элемент). Без переворачивания... // копируем CRC (последний элемент). Без переворачивания...
memcpy(&crc,&(m.data[ind]),szCRC); memcpy(&crc,&(m.data[ind]),szCRC);
} }
...@@ -1466,7 +1466,7 @@ bool WriteOutputMessage::addData( ModbusData d ) ...@@ -1466,7 +1466,7 @@ bool WriteOutputMessage::addData( ModbusData d )
{ {
if( isFull() ) if( isFull() )
return false; return false;
data[quant++] = d; data[quant++] = d;
bcnt = quant*sizeof(ModbusData); bcnt = quant*sizeof(ModbusData);
return true; return true;
...@@ -1487,7 +1487,7 @@ ModbusMessage WriteOutputMessage::transport_msg() ...@@ -1487,7 +1487,7 @@ ModbusMessage WriteOutputMessage::transport_msg()
// копируем заголовок // копируем заголовок
memcpy(&mm,this,szModbusHeader); memcpy(&mm,this,szModbusHeader);
int ind = 0; int ind = 0;
// данные (переворачиваем байты) // данные (переворачиваем байты)
...@@ -1497,7 +1497,7 @@ ModbusMessage WriteOutputMessage::transport_msg() ...@@ -1497,7 +1497,7 @@ ModbusMessage WriteOutputMessage::transport_msg()
// копируем // копируем
memcpy(mm.data,&d,ind); memcpy(mm.data,&d,ind);
// copy bcnt // copy bcnt
bcnt = quant*sizeof(ModbusData); bcnt = quant*sizeof(ModbusData);
memcpy(&(mm.data[ind]),&bcnt,sizeof(bcnt)); memcpy(&(mm.data[ind]),&bcnt,sizeof(bcnt));
ind+=sizeof(bcnt); ind+=sizeof(bcnt);
...@@ -1521,7 +1521,7 @@ ModbusMessage WriteOutputMessage::transport_msg() ...@@ -1521,7 +1521,7 @@ ModbusMessage WriteOutputMessage::transport_msg()
ind+=szCRC; ind+=szCRC;
// длина сообщения... // длина сообщения...
mm.len = ind; mm.len = ind;
return mm; return mm;
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
...@@ -1542,10 +1542,10 @@ void WriteOutputMessage::init( ModbusMessage& m ) ...@@ -1542,10 +1542,10 @@ void WriteOutputMessage::init( ModbusMessage& m )
assert( m.func == fnWriteOutputRegisters ); assert( m.func == fnWriteOutputRegisters );
memset(this,0,sizeof(*this)); memset(this,0,sizeof(*this));
// copy not include CRC // copy not include CRC
memcpy(this,&m,szModbusHeader+m.len); memcpy(this,&m,szModbusHeader+m.len);
// Сперва переворачиваем обратно слова // Сперва переворачиваем обратно слова
start = SWAPSHORT(start); start = SWAPSHORT(start);
quant = SWAPSHORT(quant); quant = SWAPSHORT(quant);
...@@ -1555,7 +1555,7 @@ void WriteOutputMessage::init( ModbusMessage& m ) ...@@ -1555,7 +1555,7 @@ void WriteOutputMessage::init( ModbusMessage& m )
{ {
#ifdef DEBUG #ifdef DEBUG
cerr << "(WriteOutputMessage): BAD format!" << endl; cerr << "(WriteOutputMessage): BAD format!" << endl;
cerr << "bcnt=" << (int)bcnt cerr << "bcnt=" << (int)bcnt
<< " quant=" << (int)quant << " quant=" << (int)quant
<< endl; << endl;
#endif #endif
...@@ -1610,17 +1610,17 @@ std::ostream& ModbusRTU::operator<<(std::ostream& os, WriteOutputMessage& m ) ...@@ -1610,17 +1610,17 @@ std::ostream& ModbusRTU::operator<<(std::ostream& os, WriteOutputMessage& m )
// return mbPrintMessage(os,(ModbusByte*)(&m.crc), szCRC ); // return mbPrintMessage(os,(ModbusByte*)(&m.crc), szCRC );
// интелектуальный вывод :) // интелектуальный вывод :)
os << "addr=" << addr2str(m.addr) os << "addr=" << addr2str(m.addr)
<< " start=" << dat2str(m.start) << " start=" << dat2str(m.start)
<< " quant=" << dat2str(m.quant) << " quant=" << dat2str(m.quant)
<< " bcnt=" << dat2str(m.bcnt) << " bcnt=" << dat2str(m.bcnt)
<< " data[" << (int)m.quant <<"]={ "; << " data[" << (int)m.quant <<"]={ ";
for( unsigned int i=0; i<m.quant; i++ ) for( unsigned int i=0; i<m.quant; i++ )
os << "" << dat2str(m.data[i]) << " "; os << "" << dat2str(m.data[i]) << " ";
os << "}"; os << "}";
return os; return os;
} }
std::ostream& ModbusRTU::operator<<(std::ostream& os, WriteOutputMessage* m ) std::ostream& ModbusRTU::operator<<(std::ostream& os, WriteOutputMessage* m )
{ {
...@@ -1643,18 +1643,18 @@ void WriteOutputRetMessage::init( ModbusMessage& m ) ...@@ -1643,18 +1643,18 @@ void WriteOutputRetMessage::init( ModbusMessage& m )
assert( m.func == fnWriteOutputRegisters ); assert( m.func == fnWriteOutputRegisters );
memset(this,0,sizeof(*this)); memset(this,0,sizeof(*this));
// copy not include CRC // copy not include CRC
memcpy(this,&m,szModbusHeader+m.len); memcpy(this,&m,szModbusHeader+m.len);
/*! \todo (WriteOutputRetMessage): необходимо встроить проверку на корректность данных */ /*! \todo (WriteOutputRetMessage): необходимо встроить проверку на корректность данных */
// Сперва переворачиваем обратно слова // Сперва переворачиваем обратно слова
start = SWAPSHORT(start); start = SWAPSHORT(start);
quant = SWAPSHORT(quant); quant = SWAPSHORT(quant);
int ind = sizeof(quant)+sizeof(start); int ind = sizeof(quant)+sizeof(start);
// копируем CRC (последний элемент). Без переворачивания... // копируем CRC (последний элемент). Без переворачивания...
memcpy(&crc,&(m.data[ind]),szCRC); memcpy(&crc,&(m.data[ind]),szCRC);
} }
...@@ -1751,9 +1751,9 @@ void ForceSingleCoilMessage::init( ModbusMessage& m ) ...@@ -1751,9 +1751,9 @@ void ForceSingleCoilMessage::init( ModbusMessage& m )
assert( m.func == fnForceSingleCoil ); assert( m.func == fnForceSingleCoil );
memset(this,0,sizeof(*this)); memset(this,0,sizeof(*this));
// копируем данные вместе с CRC // копируем данные вместе с CRC
memcpy(this,&m,szModbusHeader+m.len+szCRC); memcpy(this,&m,szModbusHeader+m.len+szCRC);
// Сперва переворачиваем обратно слова // Сперва переворачиваем обратно слова
start = SWAPSHORT(start); start = SWAPSHORT(start);
data = SWAPSHORT(data); data = SWAPSHORT(data);
...@@ -1761,7 +1761,7 @@ void ForceSingleCoilMessage::init( ModbusMessage& m ) ...@@ -1761,7 +1761,7 @@ void ForceSingleCoilMessage::init( ModbusMessage& m )
// потом проверяем // потом проверяем
if( !checkFormat() ) if( !checkFormat() )
{ {
#ifdef DEBUG #ifdef DEBUG
cerr << "(ForceSingleCoil): BAD format!" << endl; cerr << "(ForceSingleCoil): BAD format!" << endl;
#endif #endif
// Если собщение некорректно // Если собщение некорректно
...@@ -1791,8 +1791,8 @@ int ForceSingleCoilMessage::getDataLen( ModbusMessage& m ) ...@@ -1791,8 +1791,8 @@ int ForceSingleCoilMessage::getDataLen( ModbusMessage& m )
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
std::ostream& ModbusRTU::operator<<(std::ostream& os, ForceSingleCoilMessage& m ) std::ostream& ModbusRTU::operator<<(std::ostream& os, ForceSingleCoilMessage& m )
{ {
return os << "addr=" << addr2str(m.addr) return os << "addr=" << addr2str(m.addr)
<< " start=" << dat2str(m.start) << " start=" << dat2str(m.start)
<< " data=" << dat2str(m.data) << " "; << " data=" << dat2str(m.data) << " ";
} }
std::ostream& ModbusRTU::operator<<(std::ostream& os, ForceSingleCoilMessage* m ) std::ostream& ModbusRTU::operator<<(std::ostream& os, ForceSingleCoilMessage* m )
...@@ -1815,12 +1815,12 @@ ForceSingleCoilRetMessage& ForceSingleCoilRetMessage::operator=( ModbusMessage& ...@@ -1815,12 +1815,12 @@ ForceSingleCoilRetMessage& ForceSingleCoilRetMessage::operator=( ModbusMessage&
void ForceSingleCoilRetMessage::init( ModbusMessage& m ) void ForceSingleCoilRetMessage::init( ModbusMessage& m )
{ {
memset(this,0,sizeof(*this)); memset(this,0,sizeof(*this));
// copy not include CRC // copy not include CRC
memcpy(this,&m,szModbusHeader+m.len); memcpy(this,&m,szModbusHeader+m.len);
/*! \todo (ForceSingleCoilRetMessage): необходимо встроить проверку на корректность данных */ /*! \todo (ForceSingleCoilRetMessage): необходимо встроить проверку на корректность данных */
// переворачиваем обратно слова // переворачиваем обратно слова
start = SWAPSHORT(start); start = SWAPSHORT(start);
data = SWAPSHORT(data); data = SWAPSHORT(data);
...@@ -1921,9 +1921,9 @@ void WriteSingleOutputMessage::init( ModbusMessage& m ) ...@@ -1921,9 +1921,9 @@ void WriteSingleOutputMessage::init( ModbusMessage& m )
assert( m.func == fnWriteOutputSingleRegister ); assert( m.func == fnWriteOutputSingleRegister );
memset(this,0,sizeof(*this)); memset(this,0,sizeof(*this));
// копируем данные вместе с CRC // копируем данные вместе с CRC
memcpy(this,&m,szModbusHeader+m.len+szCRC); memcpy(this,&m,szModbusHeader+m.len+szCRC);
// Сперва переворачиваем обратно слова // Сперва переворачиваем обратно слова
start = SWAPSHORT(start); start = SWAPSHORT(start);
data = SWAPSHORT(data); data = SWAPSHORT(data);
...@@ -1931,7 +1931,7 @@ void WriteSingleOutputMessage::init( ModbusMessage& m ) ...@@ -1931,7 +1931,7 @@ void WriteSingleOutputMessage::init( ModbusMessage& m )
// потом проверяем // потом проверяем
if( !checkFormat() ) if( !checkFormat() )
{ {
#ifdef DEBUG #ifdef DEBUG
cerr << "(WriteSingleOutputMessage): BAD format!" << endl; cerr << "(WriteSingleOutputMessage): BAD format!" << endl;
#endif #endif
// Если собщение некорректно // Если собщение некорректно
...@@ -1967,8 +1967,8 @@ std::ostream& ModbusRTU::operator<<(std::ostream& os, WriteSingleOutputMessage& ...@@ -1967,8 +1967,8 @@ std::ostream& ModbusRTU::operator<<(std::ostream& os, WriteSingleOutputMessage&
// return mbPrintMessage(os,(ModbusByte*)(&m.crc), szCRC ); // return mbPrintMessage(os,(ModbusByte*)(&m.crc), szCRC );
// интелектуальный вывод :) // интелектуальный вывод :)
return os << "addr=" << addr2str(m.addr) return os << "addr=" << addr2str(m.addr)
<< " start=" << dat2str(m.start) << " start=" << dat2str(m.start)
<< " data=" << dat2str(m.data) << " "; << " data=" << dat2str(m.data) << " ";
} }
std::ostream& ModbusRTU::operator<<(std::ostream& os, WriteSingleOutputMessage* m ) std::ostream& ModbusRTU::operator<<(std::ostream& os, WriteSingleOutputMessage* m )
...@@ -1991,12 +1991,12 @@ WriteSingleOutputRetMessage& WriteSingleOutputRetMessage::operator=( ModbusMessa ...@@ -1991,12 +1991,12 @@ WriteSingleOutputRetMessage& WriteSingleOutputRetMessage::operator=( ModbusMessa
void WriteSingleOutputRetMessage::init( ModbusMessage& m ) void WriteSingleOutputRetMessage::init( ModbusMessage& m )
{ {
memset(this,0,sizeof(*this)); memset(this,0,sizeof(*this));
// copy not include CRC // copy not include CRC
memcpy(this,&m,szModbusHeader+m.len); memcpy(this,&m,szModbusHeader+m.len);
/*! \todo (WriteSingleOutputRetMessage): необходимо встроить проверку на корректность данных */ /*! \todo (WriteSingleOutputRetMessage): необходимо встроить проверку на корректность данных */
// переворачиваем обратно слова // переворачиваем обратно слова
start = SWAPSHORT(start); start = SWAPSHORT(start);
data = SWAPSHORT(data); data = SWAPSHORT(data);
...@@ -2103,7 +2103,7 @@ bool JournalCommandRetMessage::setData( ModbusByte* buf, int len ) ...@@ -2103,7 +2103,7 @@ bool JournalCommandRetMessage::setData( ModbusByte* buf, int len )
{ {
if( isFull() ) if( isFull() )
return false; return false;
if( sizeof(ModbusByte)*len > sizeof(data) ) if( sizeof(ModbusByte)*len > sizeof(data) )
return false; return false;
...@@ -2137,10 +2137,10 @@ ModbusMessage JournalCommandRetMessage::transport_msg() ...@@ -2137,10 +2137,10 @@ ModbusMessage JournalCommandRetMessage::transport_msg()
// копируем заголовок и данные // копируем заголовок и данные
memcpy(&mm,this,szModbusHeader); memcpy(&mm,this,szModbusHeader);
int ind = 0; int ind = 0;
bcnt = count*sizeof(ModbusData); bcnt = count*sizeof(ModbusData);
// copy bcnt // copy bcnt
memcpy(&mm.data,&bcnt,sizeof(bcnt)); memcpy(&mm.data,&bcnt,sizeof(bcnt));
ind += sizeof(bcnt); ind += sizeof(bcnt);
...@@ -2168,7 +2168,7 @@ ModbusMessage JournalCommandRetMessage::transport_msg() ...@@ -2168,7 +2168,7 @@ ModbusMessage JournalCommandRetMessage::transport_msg()
ind += szCRC; ind += szCRC;
// длина сообщения... // длина сообщения...
mm.len = ind; mm.len = ind;
return mm; return mm;
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
...@@ -2218,7 +2218,7 @@ float ModbusRTU::dat2f( const ModbusData dat1, const ModbusData dat2 ) ...@@ -2218,7 +2218,7 @@ float ModbusRTU::dat2f( const ModbusData dat1, const ModbusData dat2 )
{ {
ModbusData d[2]={dat1,dat2}; ModbusData d[2]={dat1,dat2};
float f=0; float f=0;
assert(sizeof(f)>=sizeof(d)); assert(sizeof(f)>=sizeof(d));
memcpy(&f,d,sizeof(d)); memcpy(&f,d,sizeof(d));
return f; return f;
...@@ -2275,25 +2275,25 @@ std::string ModbusRTU::mbErr2Str( ModbusRTU::mbErrCode e ) ...@@ -2275,25 +2275,25 @@ std::string ModbusRTU::mbErr2Str( ModbusRTU::mbErrCode e )
case erInvalidFormat: case erInvalidFormat:
return "неправильный формат"; return "неправильный формат";
case erBadCheckSum: case erBadCheckSum:
return "У пакета не сошлась контрольная сумма"; return "У пакета не сошлась контрольная сумма";
case erBadReplyNodeAddress: case erBadReplyNodeAddress:
return "Ответ на запрос адресован не мне или от станции,которую не спрашивали"; return "Ответ на запрос адресован не мне или от станции,которую не спрашивали";
case erTimeOut: case erTimeOut:
return "Тайм-аут при приеме"; return "Тайм-аут при приеме";
case erUnExpectedPacketType: case erUnExpectedPacketType:
return "Неожидаемый тип пакета"; return "Неожидаемый тип пакета";
case erPacketTooLong: case erPacketTooLong:
return "пакет длинее буфера приема"; return "пакет длинее буфера приема";
case erHardwareError: case erHardwareError:
return "ошибка оборудования"; return "ошибка оборудования";
case erBadDataAddress: case erBadDataAddress:
return "регистр не существует или запрещён к опросу"; return "регистр не существует или запрещён к опросу";
...@@ -2305,10 +2305,10 @@ std::string ModbusRTU::mbErr2Str( ModbusRTU::mbErrCode e ) ...@@ -2305,10 +2305,10 @@ std::string ModbusRTU::mbErr2Str( ModbusRTU::mbErrCode e )
case erSlaveBusy: case erSlaveBusy:
return "контроллер занят длительной операцией (повторить запрос позже)"; return "контроллер занят длительной операцией (повторить запрос позже)";
case erOperationFailed: case erOperationFailed:
return "сбой при выполнении операции (например: доступ запрещён)"; return "сбой при выполнении операции (например: доступ запрещён)";
case erMemoryParityError: case erMemoryParityError:
return "ошибка паритета при чтении памяти"; return "ошибка паритета при чтении памяти";
...@@ -2341,15 +2341,15 @@ SetDateTimeMessage::SetDateTimeMessage() ...@@ -2341,15 +2341,15 @@ SetDateTimeMessage::SetDateTimeMessage()
std::ostream& ModbusRTU::operator<<(std::ostream& os, SetDateTimeMessage& m ) std::ostream& ModbusRTU::operator<<(std::ostream& os, SetDateTimeMessage& m )
{ {
ostringstream s; ostringstream s;
s << setfill('0') s << setfill('0')
<< setw(2) << (int)m.day << "-" << setw(2) << (int)m.day << "-"
<< setw(2) << (int)m.mon << "-" << setw(2) << (int)m.mon << "-"
<< setw(2) << (int)m.century << setw(2) << (int)m.century
<< setw(2) << (int)m.year << " " << setw(2) << (int)m.year << " "
<< setw(2) << (int)m.hour << ":" << setw(2) << (int)m.hour << ":"
<< setw(2) << (int)m.min << ":" << setw(2) << (int)m.min << ":"
<< setw(2) << (int)m.sec; << setw(2) << (int)m.sec;
return os << s.str(); return os << s.str();
} }
...@@ -2361,7 +2361,7 @@ std::ostream& ModbusRTU::operator<<(std::ostream& os, SetDateTimeMessage* m ) ...@@ -2361,7 +2361,7 @@ std::ostream& ModbusRTU::operator<<(std::ostream& os, SetDateTimeMessage* m )
bool SetDateTimeMessage::checkFormat() bool SetDateTimeMessage::checkFormat()
{ {
/* /*
// Lav: проверка >=0 бессмысленна, потому что в типе данных Modbusbyte не могут храниться отрицательные числа // Lav: проверка >=0 бессмысленна, потому что в типе данных Modbusbyte не могут храниться отрицательные числа
return ( hour>=0 && hour<=23 ) && return ( hour>=0 && hour<=23 ) &&
( min>=0 && min<=59 ) && ( min>=0 && min<=59 ) &&
( sec>=0 && sec<=59 ) && ( sec>=0 && sec<=59 ) &&
...@@ -2369,7 +2369,7 @@ bool SetDateTimeMessage::checkFormat() ...@@ -2369,7 +2369,7 @@ bool SetDateTimeMessage::checkFormat()
( mon>=1 && mon<=12 ) && ( mon>=1 && mon<=12 ) &&
( year>=0 && year<=99 ) && ( year>=0 && year<=99 ) &&
( century>=19 && century<=20 ); ( century>=19 && century<=20 );
*/ */
return ( hour<=23 ) && return ( hour<=23 ) &&
( min<=59 ) && ( min<=59 ) &&
( sec<=59 ) && ( sec<=59 ) &&
...@@ -2392,7 +2392,7 @@ ModbusMessage SetDateTimeMessage::transport_msg() ...@@ -2392,7 +2392,7 @@ ModbusMessage SetDateTimeMessage::transport_msg()
// копируем заголовок и данные // копируем заголовок и данные
memcpy(&mm,this,szModbusHeader); memcpy(&mm,this,szModbusHeader);
/* /*
mm.data[0] = hour; mm.data[0] = hour;
mm.data[1] = min; mm.data[1] = min;
mm.data[2] = sec; mm.data[2] = sec;
...@@ -2466,7 +2466,7 @@ ModbusMessage SetDateTimeRetMessage::transport_msg() ...@@ -2466,7 +2466,7 @@ ModbusMessage SetDateTimeRetMessage::transport_msg()
// копируем заголовок и данные // копируем заголовок и данные
memcpy(&mm,this,szModbusHeader); memcpy(&mm,this,szModbusHeader);
/* /*
mm.data[0] = hour; mm.data[0] = hour;
mm.data[1] = min; mm.data[1] = min;
mm.data[2] = sec; mm.data[2] = sec;
...@@ -2508,7 +2508,7 @@ void RemoteServiceMessage::init( ModbusMessage& m ) ...@@ -2508,7 +2508,7 @@ void RemoteServiceMessage::init( ModbusMessage& m )
// copy not include CRC // copy not include CRC
memcpy(this,&m,szModbusHeader+m.len); memcpy(this,&m,szModbusHeader+m.len);
// последний элемент это CRC // последний элемент это CRC
memcpy(&crc,&(m.data[m.len-szCRC]),szCRC); memcpy(&crc,&(m.data[m.len-szCRC]),szCRC);
} }
...@@ -2552,7 +2552,7 @@ bool RemoteServiceRetMessage::setData( ModbusByte* buf, int len ) ...@@ -2552,7 +2552,7 @@ bool RemoteServiceRetMessage::setData( ModbusByte* buf, int len )
{ {
if( isFull() ) if( isFull() )
return false; return false;
if( len*sizeof(ModbusByte) > sizeof(data) ) if( len*sizeof(ModbusByte) > sizeof(data) )
return false; return false;
...@@ -2586,7 +2586,7 @@ ModbusMessage RemoteServiceRetMessage::transport_msg() ...@@ -2586,7 +2586,7 @@ ModbusMessage RemoteServiceRetMessage::transport_msg()
// копируем заголовок и данные // копируем заголовок и данные
memcpy(&mm,this,szModbusHeader); memcpy(&mm,this,szModbusHeader);
int ind = 0; int ind = 0;
bcnt = count*sizeof(ModbusByte); bcnt = count*sizeof(ModbusByte);
...@@ -2608,7 +2608,7 @@ ModbusMessage RemoteServiceRetMessage::transport_msg() ...@@ -2608,7 +2608,7 @@ ModbusMessage RemoteServiceRetMessage::transport_msg()
ind += szCRC; ind += szCRC;
// длина сообщения... // длина сообщения...
mm.len = ind; mm.len = ind;
return mm; return mm;
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
...@@ -2633,10 +2633,10 @@ void ReadFileRecordMessage::init( ModbusMessage& m ) ...@@ -2633,10 +2633,10 @@ void ReadFileRecordMessage::init( ModbusMessage& m )
assert( m.func == fnReadFileRecord ); assert( m.func == fnReadFileRecord );
memset(this,0,sizeof(*this)); memset(this,0,sizeof(*this));
// copy not include CRC // copy not include CRC
memcpy(this,&m,szModbusHeader+m.len); memcpy(this,&m,szModbusHeader+m.len);
// потом проверяем // потом проверяем
if( !checkFormat() ) if( !checkFormat() )
{ {
...@@ -2672,7 +2672,7 @@ int ReadFileRecordMessage::getDataLen( ModbusMessage& m ) ...@@ -2672,7 +2672,7 @@ int ReadFileRecordMessage::getDataLen( ModbusMessage& m )
return 0; return 0;
return (int)(m.data[0]); return (int)(m.data[0]);
// ReadFileRecordMessage rfm(m); // может просто смотреть m.data[0] ?! // ReadFileRecordMessage rfm(m); // может просто смотреть m.data[0] ?!
// return (int)(rfm.bcnt); // return (int)(rfm.bcnt);
} }
...@@ -2734,10 +2734,10 @@ void FileTransferMessage::init( ModbusMessage& m ) ...@@ -2734,10 +2734,10 @@ void FileTransferMessage::init( ModbusMessage& m )
assert( m.func == fnFileTransfer ); assert( m.func == fnFileTransfer );
memset(this,0,sizeof(*this)); memset(this,0,sizeof(*this));
// copy not include CRC // copy not include CRC
memcpy(this,&m,szModbusHeader+m.len); memcpy(this,&m,szModbusHeader+m.len);
// последний элемент это CRC // последний элемент это CRC
memcpy(&crc,&(m.data[m.len-szCRC]),szCRC); memcpy(&crc,&(m.data[m.len-szCRC]),szCRC);
...@@ -2772,10 +2772,10 @@ void FileTransferRetMessage::init( ModbusMessage& m ) ...@@ -2772,10 +2772,10 @@ void FileTransferRetMessage::init( ModbusMessage& m )
{ {
assert( m.func == fnFileTransfer ); assert( m.func == fnFileTransfer );
memset(this,0,sizeof(*this)); memset(this,0,sizeof(*this));
// copy header // copy header
memcpy(this,&m,szModbusHeader); memcpy(this,&m,szModbusHeader);
bcnt = m.data[0]; bcnt = m.data[0];
memcpy(&numfile,&(m.data[1]),sizeof(ModbusData)); memcpy(&numfile,&(m.data[1]),sizeof(ModbusData));
memcpy(&numpacks,&(m.data[1+sizeof(ModbusData)]),sizeof(ModbusData)); memcpy(&numpacks,&(m.data[1+sizeof(ModbusData)]),sizeof(ModbusData));
...@@ -2843,7 +2843,7 @@ ModbusMessage FileTransferRetMessage::transport_msg() ...@@ -2843,7 +2843,7 @@ ModbusMessage FileTransferRetMessage::transport_msg()
// копируем заголовок и данные // копируем заголовок и данные
memcpy(&mm,this,szModbusHeader); memcpy(&mm,this,szModbusHeader);
int ind = 0; int ind = 0;
bcnt = szData() - szCRC - 1; // -1 - это сам байт содержащий количество байт (bcnt)... bcnt = szData() - szCRC - 1; // -1 - это сам байт содержащий количество байт (bcnt)...
......
...@@ -14,7 +14,7 @@ using namespace std; ...@@ -14,7 +14,7 @@ using namespace std;
unsigned short ModbusRTU::SWAPSHORT( unsigned short x ) unsigned short ModbusRTU::SWAPSHORT( unsigned short x )
{ {
return ((((x)>>8)&0xff)|(((x)<<8)&0xff00)); return ((((x)>>8)&0xff)|(((x)<<8)&0xff00));
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
...@@ -105,7 +105,7 @@ static int get_crc_ccitt( unsigned short crc, unsigned char* buf, int size ) ...@@ -105,7 +105,7 @@ static int get_crc_ccitt( unsigned short crc, unsigned char* buf, int size )
#else #else
register int i; register int i;
crc ^= (unsigned short)(*(buf++)) << 8; crc ^= (unsigned short)(*(buf++)) << 8;
for (i = 0; i < 8; i++) for (i = 0; i < 8; i++)
{ {
if (crc & 0x8000) if (crc & 0x8000)
crc = (crc << 1) ^ 0x1021; crc = (crc << 1) ^ 0x1021;
...@@ -125,12 +125,12 @@ static int get_crc_16( unsigned short crc, unsigned char* buf, int size ) ...@@ -125,12 +125,12 @@ static int get_crc_16( unsigned short crc, unsigned char* buf, int size )
while( size-- ) while( size-- )
{ {
#ifdef USE_CRC_TAB #ifdef USE_CRC_TAB
crc = (crc >> 8) ^ crc_16_tab[ (crc ^ *(buf++)) & 0xff ]; crc = (crc >> 8) ^ crc_16_tab[ (crc ^ *(buf++)) & 0xff ];
#else #else
register int i, ch; register int i, ch;
ch = *(buf++); ch = *(buf++);
for (i = 0; i < 8; i++) for (i = 0; i < 8; i++)
{ {
if ((crc ^ ch) & 1) if ((crc ^ ch) & 1)
crc = (crc >> 1) ^ 0xa001; crc = (crc >> 1) ^ 0xa001;
...@@ -141,7 +141,7 @@ static int get_crc_16( unsigned short crc, unsigned char* buf, int size ) ...@@ -141,7 +141,7 @@ static int get_crc_16( unsigned short crc, unsigned char* buf, int size )
} }
#endif #endif
// crc = crc & 0xffff; // crc = crc & 0xffff;
} }
return crc; return crc;
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
...@@ -160,12 +160,12 @@ ModbusCRC ModbusRTU::checkCRC( ModbusByte* buf, int len ) ...@@ -160,12 +160,12 @@ ModbusCRC ModbusRTU::checkCRC( ModbusByte* buf, int len )
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
bool ModbusRTU::isWriteFunction( SlaveFunctionCode c ) bool ModbusRTU::isWriteFunction( SlaveFunctionCode c )
{ {
if( c == fnWriteOutputRegisters || if( c == fnWriteOutputRegisters ||
c == fnWriteOutputSingleRegister || c == fnWriteOutputSingleRegister ||
c == fnForceSingleCoil || c == fnForceSingleCoil ||
c == fnForceMultipleCoils ) c == fnForceMultipleCoils )
return true; return true;
return false; return false;
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
...@@ -180,7 +180,7 @@ std::ostream& ModbusRTU::mbPrintMessage( std::ostream& os, ModbusByte* m, int le ...@@ -180,7 +180,7 @@ std::ostream& ModbusRTU::mbPrintMessage( std::ostream& os, ModbusByte* m, int le
for( unsigned int i=0; i<len; i++ ) for( unsigned int i=0; i<len; i++ )
s << setw(2) << (short)(m[i]) << " "; s << setw(2) << (short)(m[i]) << " ";
// s << "<" << setw(2) << (int)(m[i]) << ">"; // s << "<" << setw(2) << (int)(m[i]) << ">";
return os << s.str(); return os << s.str();
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
...@@ -266,8 +266,8 @@ ModbusMessage ErrorRetMessage::transport_msg() ...@@ -266,8 +266,8 @@ ModbusMessage ErrorRetMessage::transport_msg()
std::ostream& ModbusRTU::operator<<(std::ostream& os, ErrorRetMessage& m ) std::ostream& ModbusRTU::operator<<(std::ostream& os, ErrorRetMessage& m )
{ {
// return mbPrintMessage(os,(ModbusByte*)(&m),sizeof(m)); // return mbPrintMessage(os,(ModbusByte*)(&m),sizeof(m));
return os << "addr=" << addr2str(m.addr) return os << "addr=" << addr2str(m.addr)
<< " func=" << (int)m.func << " func=" << (int)m.func
<< " errcode=" << dat2str(m.ecode); << " errcode=" << dat2str(m.ecode);
} }
std::ostream& ModbusRTU::operator<<(std::ostream& os, ErrorRetMessage* m ) std::ostream& ModbusRTU::operator<<(std::ostream& os, ErrorRetMessage* m )
...@@ -329,7 +329,7 @@ void ReadCoilMessage::init( ModbusMessage& m ) ...@@ -329,7 +329,7 @@ void ReadCoilMessage::init( ModbusMessage& m )
assert( m.func == fnReadCoilStatus ); assert( m.func == fnReadCoilStatus );
memset(this,0,sizeof(*this)); memset(this,0,sizeof(*this));
memcpy(this,&m,sizeof(*this)); // m.len memcpy(this,&m,sizeof(*this)); // m.len
// переворачиваем слова // переворачиваем слова
start = SWAPSHORT(start); start = SWAPSHORT(start);
count = SWAPSHORT(count); count = SWAPSHORT(count);
...@@ -339,7 +339,7 @@ void ReadCoilMessage::init( ModbusMessage& m ) ...@@ -339,7 +339,7 @@ void ReadCoilMessage::init( ModbusMessage& m )
std::ostream& ModbusRTU::operator<<(std::ostream& os, ReadCoilMessage& m ) std::ostream& ModbusRTU::operator<<(std::ostream& os, ReadCoilMessage& m )
{ {
// return mbPrintMessage(os,(ModbusByte*)(&m),sizeof(m)); // return mbPrintMessage(os,(ModbusByte*)(&m),sizeof(m));
return os << "addr=" << addr2str(m.addr) return os << "addr=" << addr2str(m.addr)
<< " start=" << dat2str(m.start) << "(" << (int)(m.start) << ")" << " start=" << dat2str(m.start) << "(" << (int)(m.start) << ")"
<< " count=" << dat2str(m.count) << "(" << (int)(m.count) << ")"; << " count=" << dat2str(m.count) << "(" << (int)(m.count) << ")";
} }
...@@ -351,7 +351,7 @@ std::ostream& ModbusRTU::operator<<(std::ostream& os, ReadCoilMessage* m ) ...@@ -351,7 +351,7 @@ std::ostream& ModbusRTU::operator<<(std::ostream& os, ReadCoilMessage* m )
DataBits::DataBits( std::string s ): DataBits::DataBits( std::string s ):
b(s) b(s)
{ {
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
DataBits::DataBits( ModbusByte ubyte ) DataBits::DataBits( ModbusByte ubyte )
...@@ -567,7 +567,7 @@ ModbusMessage ReadCoilRetMessage::transport_msg() ...@@ -567,7 +567,7 @@ ModbusMessage ReadCoilRetMessage::transport_msg()
ind+=szCRC; ind+=szCRC;
// длина сообщения... // длина сообщения...
mm.len = ind; mm.len = ind;
return std::move(mm); return std::move(mm);
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
...@@ -652,7 +652,7 @@ void ReadInputStatusMessage::init( ModbusMessage& m ) ...@@ -652,7 +652,7 @@ void ReadInputStatusMessage::init( ModbusMessage& m )
std::ostream& ModbusRTU::operator<<(std::ostream& os, ReadInputStatusMessage& m ) std::ostream& ModbusRTU::operator<<(std::ostream& os, ReadInputStatusMessage& m )
{ {
// return mbPrintMessage(os,(ModbusByte*)(&m),sizeof(m)); // return mbPrintMessage(os,(ModbusByte*)(&m),sizeof(m));
return os << "addr=" << addr2str(m.addr) return os << "addr=" << addr2str(m.addr)
<< " start=" << dat2str(m.start) << "(" << (int)m.start << ")" << " start=" << dat2str(m.start) << "(" << (int)m.start << ")"
<< " count=" << dat2str(m.count) << "(" << (int)m.count << ")"; << " count=" << dat2str(m.count) << "(" << (int)m.count << ")";
} }
...@@ -713,7 +713,7 @@ bool ReadInputStatusRetMessage::setBit( unsigned char dnum, unsigned char bnum, ...@@ -713,7 +713,7 @@ bool ReadInputStatusRetMessage::setBit( unsigned char dnum, unsigned char bnum,
data[dnum] = d; data[dnum] = d;
return true; return true;
} }
return false; return false;
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
...@@ -721,7 +721,7 @@ bool ReadInputStatusRetMessage::addData( DataBits d ) ...@@ -721,7 +721,7 @@ bool ReadInputStatusRetMessage::addData( DataBits d )
{ {
if( isFull() ) if( isFull() )
return false; return false;
data[bcnt++] = d.mbyte(); data[bcnt++] = d.mbyte();
return true; return true;
} }
...@@ -733,7 +733,7 @@ bool ReadInputStatusRetMessage::getData( unsigned char dnum, DataBits& d ) ...@@ -733,7 +733,7 @@ bool ReadInputStatusRetMessage::getData( unsigned char dnum, DataBits& d )
d = data[dnum]; d = data[dnum];
return true; return true;
} }
return false; return false;
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
...@@ -752,7 +752,7 @@ ModbusMessage ReadInputStatusRetMessage::transport_msg() ...@@ -752,7 +752,7 @@ ModbusMessage ReadInputStatusRetMessage::transport_msg()
// копируем заголовок и данные // копируем заголовок и данные
memcpy(&mm,this,szModbusHeader); memcpy(&mm,this,szModbusHeader);
memcpy(&mm.data,&bcnt,sizeof(bcnt)); memcpy(&mm.data,&bcnt,sizeof(bcnt));
int ind = sizeof(bcnt); int ind = sizeof(bcnt);
// копируем данные // копируем данные
...@@ -767,7 +767,7 @@ ModbusMessage ReadInputStatusRetMessage::transport_msg() ...@@ -767,7 +767,7 @@ ModbusMessage ReadInputStatusRetMessage::transport_msg()
ind+=szCRC; ind+=szCRC;
// длина сообщения... // длина сообщения...
mm.len = ind; mm.len = ind;
return std::move(mm); return std::move(mm);
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
...@@ -843,7 +843,7 @@ void ReadOutputMessage::init( ModbusMessage& m ) ...@@ -843,7 +843,7 @@ void ReadOutputMessage::init( ModbusMessage& m )
assert( m.func == fnReadOutputRegisters ); assert( m.func == fnReadOutputRegisters );
memset(this,0,sizeof(*this)); memset(this,0,sizeof(*this));
memcpy(this,&m,sizeof(*this)); // m.len memcpy(this,&m,sizeof(*this)); // m.len
// переворачиваем слова // переворачиваем слова
start = SWAPSHORT(start); start = SWAPSHORT(start);
count = SWAPSHORT(count); count = SWAPSHORT(count);
...@@ -855,7 +855,7 @@ void ReadOutputMessage::init( ModbusMessage& m ) ...@@ -855,7 +855,7 @@ void ReadOutputMessage::init( ModbusMessage& m )
std::ostream& ModbusRTU::operator<<(std::ostream& os, ReadOutputMessage& m ) std::ostream& ModbusRTU::operator<<(std::ostream& os, ReadOutputMessage& m )
{ {
// return mbPrintMessage(os,(ModbusByte*)(&m),sizeof(m)); // return mbPrintMessage(os,(ModbusByte*)(&m),sizeof(m));
return os << "addr=" << addr2str(m.addr) return os << "addr=" << addr2str(m.addr)
<< " start=" << dat2str(m.start) << "(" << (int)(m.start) << ")" << " start=" << dat2str(m.start) << "(" << (int)(m.start) << ")"
<< " count=" << dat2str(m.count) << "(" << (int)m.count << ")"; << " count=" << dat2str(m.count) << "(" << (int)m.count << ")";
...@@ -883,12 +883,12 @@ void ReadOutputRetMessage::init( ModbusMessage& m ) ...@@ -883,12 +883,12 @@ void ReadOutputRetMessage::init( ModbusMessage& m )
memset(this,0,sizeof(*this)); memset(this,0,sizeof(*this));
addr = m.addr; addr = m.addr;
func = m.func; func = m.func;
// bcnt = m.data[0]; // bcnt = m.data[0];
unsigned int cnt = m.data[0] / sizeof(ModbusData); unsigned int cnt = m.data[0] / sizeof(ModbusData);
if( cnt > MAXLENPACKET/sizeof(ModbusData) ) if( cnt > MAXLENPACKET/sizeof(ModbusData) )
{ {
// cerr << "(ReadOutputRetMessage): BAD bcnt=" // cerr << "(ReadOutputRetMessage): BAD bcnt="
// << (int)bcnt << " count=" << cnt << endl; // << (int)bcnt << " count=" << cnt << endl;
throw mbException(erPacketTooLong); throw mbException(erPacketTooLong);
} }
...@@ -896,13 +896,13 @@ void ReadOutputRetMessage::init( ModbusMessage& m ) ...@@ -896,13 +896,13 @@ void ReadOutputRetMessage::init( ModbusMessage& m )
count = cnt; count = cnt;
bcnt = m.data[0]; bcnt = m.data[0];
memcpy(&data,&(m.data[1]),bcnt); memcpy(&data,&(m.data[1]),bcnt);
// переворачиваем данные // переворачиваем данные
for( unsigned int i=0; i<cnt; i++ ) for( unsigned int i=0; i<cnt; i++ )
data[i] = SWAPSHORT(data[i]); data[i] = SWAPSHORT(data[i]);
memcpy(&crc,&(m.data[bcnt+1]),szCRC); memcpy(&crc,&(m.data[bcnt+1]),szCRC);
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
int ReadOutputRetMessage::getDataLen( ModbusMessage& m ) int ReadOutputRetMessage::getDataLen( ModbusMessage& m )
{ {
...@@ -913,7 +913,7 @@ int ReadOutputRetMessage::getDataLen( ModbusMessage& m ) ...@@ -913,7 +913,7 @@ int ReadOutputRetMessage::getDataLen( ModbusMessage& m )
/* /*
ReadOutputMessage rm(m); ReadOutputMessage rm(m);
return (int)(rm.bcnt); return (int)(rm.bcnt);
*/ */
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
ReadOutputRetMessage::ReadOutputRetMessage( ModbusAddr _addr ): ReadOutputRetMessage::ReadOutputRetMessage( ModbusAddr _addr ):
...@@ -929,7 +929,7 @@ bool ReadOutputRetMessage::addData( ModbusData d ) ...@@ -929,7 +929,7 @@ bool ReadOutputRetMessage::addData( ModbusData d )
{ {
if( isFull() ) if( isFull() )
return false; return false;
data[count++] = d; data[count++] = d;
bcnt = count*sizeof(ModbusData); bcnt = count*sizeof(ModbusData);
return true; return true;
...@@ -985,7 +985,7 @@ ModbusMessage ReadOutputRetMessage::transport_msg() ...@@ -985,7 +985,7 @@ ModbusMessage ReadOutputRetMessage::transport_msg()
ind+=szCRC; ind+=szCRC;
// длина сообщения... // длина сообщения...
mm.len = ind; mm.len = ind;
return std::move(mm); return std::move(mm);
} }
...@@ -1072,7 +1072,7 @@ void ReadInputMessage::init( ModbusMessage& m ) ...@@ -1072,7 +1072,7 @@ void ReadInputMessage::init( ModbusMessage& m )
std::ostream& ModbusRTU::operator<<(std::ostream& os, ReadInputMessage& m ) std::ostream& ModbusRTU::operator<<(std::ostream& os, ReadInputMessage& m )
{ {
// return mbPrintMessage(os,(ModbusByte*)(&m),sizeof(m)); // return mbPrintMessage(os,(ModbusByte*)(&m),sizeof(m));
return os << "addr=" << addr2str(m.addr) return os << "addr=" << addr2str(m.addr)
<< " start=" << dat2str(m.start) << "(" << (int)(m.start) << ")" << " start=" << dat2str(m.start) << "(" << (int)(m.start) << ")"
<< " count=" << dat2str(m.count) << " count=" << dat2str(m.count)
<< "(" << (int)m.count << ")"; << "(" << (int)m.count << ")";
...@@ -1100,7 +1100,7 @@ void ReadInputRetMessage::init( ModbusMessage& m ) ...@@ -1100,7 +1100,7 @@ void ReadInputRetMessage::init( ModbusMessage& m )
memset(this,0,sizeof(*this)); memset(this,0,sizeof(*this));
addr = m.addr; addr = m.addr;
func = m.func; func = m.func;
// bcnt = m.data[0]; // bcnt = m.data[0];
unsigned int cnt = m.data[0] / sizeof(ModbusData); unsigned int cnt = m.data[0] / sizeof(ModbusData);
if( cnt > MAXLENPACKET/sizeof(ModbusData) ) if( cnt > MAXLENPACKET/sizeof(ModbusData) )
...@@ -1109,12 +1109,12 @@ void ReadInputRetMessage::init( ModbusMessage& m ) ...@@ -1109,12 +1109,12 @@ void ReadInputRetMessage::init( ModbusMessage& m )
count = cnt; count = cnt;
bcnt = m.data[0]; bcnt = m.data[0];
memcpy(&data,&(m.data[1]),bcnt); memcpy(&data,&(m.data[1]),bcnt);
// переворачиваем данные // переворачиваем данные
swapData(); swapData();
memcpy(&crc,&(m.data[bcnt+1]),szCRC); memcpy(&crc,&(m.data[bcnt+1]),szCRC);
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
void ReadInputRetMessage::swapData() void ReadInputRetMessage::swapData()
{ {
...@@ -1144,7 +1144,7 @@ bool ReadInputRetMessage::addData( ModbusData d ) ...@@ -1144,7 +1144,7 @@ bool ReadInputRetMessage::addData( ModbusData d )
{ {
if( isFull() ) if( isFull() )
return false; return false;
data[count++] = d; data[count++] = d;
bcnt = count*sizeof(ModbusData); bcnt = count*sizeof(ModbusData);
return true; return true;
...@@ -1192,7 +1192,7 @@ ModbusMessage ReadInputRetMessage::transport_msg() ...@@ -1192,7 +1192,7 @@ ModbusMessage ReadInputRetMessage::transport_msg()
ind+=szCRC; ind+=szCRC;
// длина сообщения... // длина сообщения...
mm.len = ind; mm.len = ind;
return std::move(mm); return std::move(mm);
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
...@@ -1227,7 +1227,7 @@ bool ForceCoilsMessage::addData( DataBits d ) ...@@ -1227,7 +1227,7 @@ bool ForceCoilsMessage::addData( DataBits d )
{ {
if( isFull() ) if( isFull() )
return false; return false;
data[bcnt++] = d.mbyte(); data[bcnt++] = d.mbyte();
quant += BitsPerByte; quant += BitsPerByte;
return true; return true;
...@@ -1251,7 +1251,7 @@ bool ForceCoilsMessage::setBit( int nbit, bool state ) ...@@ -1251,7 +1251,7 @@ bool ForceCoilsMessage::setBit( int nbit, bool state )
{ {
if( nbit<0 || nbit >= quant ) if( nbit<0 || nbit >= quant )
return false; return false;
int bnum = nbit / BitsPerByte; int bnum = nbit / BitsPerByte;
int qnum = nbit % BitsPerByte; int qnum = nbit % BitsPerByte;
...@@ -1268,7 +1268,7 @@ bool ForceCoilsMessage::getData( unsigned char dnum, DataBits& d ) ...@@ -1268,7 +1268,7 @@ bool ForceCoilsMessage::getData( unsigned char dnum, DataBits& d )
d = data[dnum]; d = data[dnum];
return true; return true;
} }
return false; return false;
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
...@@ -1314,7 +1314,7 @@ ModbusMessage ForceCoilsMessage::transport_msg() ...@@ -1314,7 +1314,7 @@ ModbusMessage ForceCoilsMessage::transport_msg()
ind+=szCRC; ind+=szCRC;
// длина сообщения... // длина сообщения...
mm.len = ind; mm.len = ind;
return std::move(mm); return std::move(mm);
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
...@@ -1335,10 +1335,10 @@ void ForceCoilsMessage::init( ModbusMessage& m ) ...@@ -1335,10 +1335,10 @@ void ForceCoilsMessage::init( ModbusMessage& m )
assert( m.func == fnForceMultipleCoils ); assert( m.func == fnForceMultipleCoils );
memset(this,0,sizeof(*this)); memset(this,0,sizeof(*this));
// copy not include CRC // copy not include CRC
memcpy(this,&m,szModbusHeader+m.len); memcpy(this,&m,szModbusHeader+m.len);
// Сперва переворачиваем обратно слова // Сперва переворачиваем обратно слова
start = SWAPSHORT(start); start = SWAPSHORT(start);
quant = SWAPSHORT(quant); quant = SWAPSHORT(quant);
...@@ -1348,7 +1348,7 @@ void ForceCoilsMessage::init( ModbusMessage& m ) ...@@ -1348,7 +1348,7 @@ void ForceCoilsMessage::init( ModbusMessage& m )
{ {
#ifdef DEBUG #ifdef DEBUG
cerr << "(ForceCoilsMessage): BAD format!" << endl; cerr << "(ForceCoilsMessage): BAD format!" << endl;
cerr << "bcnt=" << (int)bcnt cerr << "bcnt=" << (int)bcnt
<< " quant=" << (int)quant << " quant=" << (int)quant
<< endl; << endl;
#endif #endif
...@@ -1385,18 +1385,18 @@ int ForceCoilsMessage::getDataLen( ModbusMessage& m ) ...@@ -1385,18 +1385,18 @@ int ForceCoilsMessage::getDataLen( ModbusMessage& m )
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
std::ostream& ModbusRTU::operator<<(std::ostream& os, ForceCoilsMessage& m ) std::ostream& ModbusRTU::operator<<(std::ostream& os, ForceCoilsMessage& m )
{ {
os << "addr=" << addr2str(m.addr) os << "addr=" << addr2str(m.addr)
<< " start=" << dat2str(m.start) << "(" << (int)(m.start) << ")" << " start=" << dat2str(m.start) << "(" << (int)(m.start) << ")"
<< " quant=" << dat2str(m.quant) << "(" << (int)(m.quant) << ")" << " quant=" << dat2str(m.quant) << "(" << (int)(m.quant) << ")"
<< " bcnt=" << b2str(m.bcnt) << " bcnt=" << b2str(m.bcnt)
<< " data[" << (int)m.quant <<"]={ "; << " data[" << (int)m.quant <<"]={ ";
for( unsigned int i=0; i<m.bcnt; i++ ) for( unsigned int i=0; i<m.bcnt; i++ )
{ {
DataBits d(m.data[i]); DataBits d(m.data[i]);
os << "" << d << " "; os << "" << d << " ";
} }
os << "}"; os << "}";
return os; return os;
} }
...@@ -1421,18 +1421,18 @@ void ForceCoilsRetMessage::init( ModbusMessage& m ) ...@@ -1421,18 +1421,18 @@ void ForceCoilsRetMessage::init( ModbusMessage& m )
assert( m.func == fnForceMultipleCoils ); assert( m.func == fnForceMultipleCoils );
memset(this,0,sizeof(*this)); memset(this,0,sizeof(*this));
// copy not include CRC // copy not include CRC
memcpy(this,&m,szModbusHeader+m.len); memcpy(this,&m,szModbusHeader+m.len);
/*! \todo (WriteOutputRetMessage): необходимо встроить проверку на корректность данных */ /*! \todo (WriteOutputRetMessage): необходимо встроить проверку на корректность данных */
// Сперва переворачиваем обратно слова // Сперва переворачиваем обратно слова
start = SWAPSHORT(start); start = SWAPSHORT(start);
quant = SWAPSHORT(quant); quant = SWAPSHORT(quant);
int ind = sizeof(quant)+sizeof(start); int ind = sizeof(quant)+sizeof(start);
// копируем CRC (последний элемент). Без переворачивания... // копируем CRC (последний элемент). Без переворачивания...
memcpy(&crc,&(m.data[ind]),szCRC); memcpy(&crc,&(m.data[ind]),szCRC);
} }
...@@ -1501,7 +1501,7 @@ bool WriteOutputMessage::addData( ModbusData d ) ...@@ -1501,7 +1501,7 @@ bool WriteOutputMessage::addData( ModbusData d )
{ {
if( isFull() ) if( isFull() )
return false; return false;
data[quant++] = d; data[quant++] = d;
bcnt = quant*sizeof(ModbusData); bcnt = quant*sizeof(ModbusData);
return true; return true;
...@@ -1532,7 +1532,7 @@ ModbusMessage WriteOutputMessage::transport_msg() ...@@ -1532,7 +1532,7 @@ ModbusMessage WriteOutputMessage::transport_msg()
// копируем // копируем
memcpy(mm.data,&d,ind); memcpy(mm.data,&d,ind);
// copy bcnt // copy bcnt
bcnt = quant*sizeof(ModbusData); bcnt = quant*sizeof(ModbusData);
memcpy(&(mm.data[ind]),&bcnt,sizeof(bcnt)); memcpy(&(mm.data[ind]),&bcnt,sizeof(bcnt));
ind+=sizeof(bcnt); ind+=sizeof(bcnt);
...@@ -1556,7 +1556,7 @@ ModbusMessage WriteOutputMessage::transport_msg() ...@@ -1556,7 +1556,7 @@ ModbusMessage WriteOutputMessage::transport_msg()
ind+=szCRC; ind+=szCRC;
// длина сообщения... // длина сообщения...
mm.len = ind; mm.len = ind;
return std::move(mm); return std::move(mm);
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
...@@ -1577,10 +1577,10 @@ void WriteOutputMessage::init( ModbusMessage& m ) ...@@ -1577,10 +1577,10 @@ void WriteOutputMessage::init( ModbusMessage& m )
assert( m.func == fnWriteOutputRegisters ); assert( m.func == fnWriteOutputRegisters );
memset(this,0,sizeof(*this)); memset(this,0,sizeof(*this));
// copy not include CRC // copy not include CRC
memcpy(this,&m,szModbusHeader+m.len); memcpy(this,&m,szModbusHeader+m.len);
// Сперва переворачиваем обратно слова // Сперва переворачиваем обратно слова
start = SWAPSHORT(start); start = SWAPSHORT(start);
quant = SWAPSHORT(quant); quant = SWAPSHORT(quant);
...@@ -1590,7 +1590,7 @@ void WriteOutputMessage::init( ModbusMessage& m ) ...@@ -1590,7 +1590,7 @@ void WriteOutputMessage::init( ModbusMessage& m )
{ {
#ifdef DEBUG #ifdef DEBUG
cerr << "(WriteOutputMessage): BAD format!" << endl; cerr << "(WriteOutputMessage): BAD format!" << endl;
cerr << "bcnt=" << (int)bcnt cerr << "bcnt=" << (int)bcnt
<< " quant=" << (int)quant << " quant=" << (int)quant
<< endl; << endl;
#endif #endif
...@@ -1645,17 +1645,17 @@ std::ostream& ModbusRTU::operator<<(std::ostream& os, WriteOutputMessage& m ) ...@@ -1645,17 +1645,17 @@ std::ostream& ModbusRTU::operator<<(std::ostream& os, WriteOutputMessage& m )
// return mbPrintMessage(os,(ModbusByte*)(&m.crc), szCRC ); // return mbPrintMessage(os,(ModbusByte*)(&m.crc), szCRC );
// интелектуальный вывод :) // интелектуальный вывод :)
os << "addr=" << addr2str(m.addr) os << "addr=" << addr2str(m.addr)
<< " start=" << dat2str(m.start) << "(" << (int)(m.start) << ")" << " start=" << dat2str(m.start) << "(" << (int)(m.start) << ")"
<< " quant=" << dat2str(m.quant) << "(" << (int)(m.quant) << ")" << " quant=" << dat2str(m.quant) << "(" << (int)(m.quant) << ")"
<< " bcnt=" << dat2str(m.bcnt) << " bcnt=" << dat2str(m.bcnt)
<< " data[" << (int)m.quant <<"]={ "; << " data[" << (int)m.quant <<"]={ ";
for( unsigned int i=0; i<m.quant; i++ ) for( unsigned int i=0; i<m.quant; i++ )
os << "" << dat2str(m.data[i]) << " "; os << "" << dat2str(m.data[i]) << " ";
os << "}"; os << "}";
return os; return os;
} }
std::ostream& ModbusRTU::operator<<(std::ostream& os, WriteOutputMessage* m ) std::ostream& ModbusRTU::operator<<(std::ostream& os, WriteOutputMessage* m )
{ {
...@@ -1678,18 +1678,18 @@ void WriteOutputRetMessage::init( ModbusMessage& m ) ...@@ -1678,18 +1678,18 @@ void WriteOutputRetMessage::init( ModbusMessage& m )
assert( m.func == fnWriteOutputRegisters ); assert( m.func == fnWriteOutputRegisters );
memset(this,0,sizeof(*this)); memset(this,0,sizeof(*this));
// copy not include CRC // copy not include CRC
memcpy(this,&m,szModbusHeader+m.len); memcpy(this,&m,szModbusHeader+m.len);
/*! \todo (WriteOutputRetMessage): необходимо встроить проверку на корректность данных */ /*! \todo (WriteOutputRetMessage): необходимо встроить проверку на корректность данных */
// Сперва переворачиваем обратно слова // Сперва переворачиваем обратно слова
start = SWAPSHORT(start); start = SWAPSHORT(start);
quant = SWAPSHORT(quant); quant = SWAPSHORT(quant);
int ind = sizeof(quant)+sizeof(start); int ind = sizeof(quant)+sizeof(start);
// копируем CRC (последний элемент). Без переворачивания... // копируем CRC (последний элемент). Без переворачивания...
memcpy(&crc,&(m.data[ind]),szCRC); memcpy(&crc,&(m.data[ind]),szCRC);
} }
...@@ -1786,9 +1786,9 @@ void ForceSingleCoilMessage::init( ModbusMessage& m ) ...@@ -1786,9 +1786,9 @@ void ForceSingleCoilMessage::init( ModbusMessage& m )
assert( m.func == fnForceSingleCoil ); assert( m.func == fnForceSingleCoil );
memset(this,0,sizeof(*this)); memset(this,0,sizeof(*this));
// копируем данные вместе с CRC // копируем данные вместе с CRC
memcpy(this,&m,szModbusHeader+m.len+szCRC); memcpy(this,&m,szModbusHeader+m.len+szCRC);
// Сперва переворачиваем обратно слова // Сперва переворачиваем обратно слова
start = SWAPSHORT(start); start = SWAPSHORT(start);
data = SWAPSHORT(data); data = SWAPSHORT(data);
...@@ -1796,7 +1796,7 @@ void ForceSingleCoilMessage::init( ModbusMessage& m ) ...@@ -1796,7 +1796,7 @@ void ForceSingleCoilMessage::init( ModbusMessage& m )
// потом проверяем // потом проверяем
if( !checkFormat() ) if( !checkFormat() )
{ {
#ifdef DEBUG #ifdef DEBUG
cerr << "(ForceSingleCoil): BAD format!" << endl; cerr << "(ForceSingleCoil): BAD format!" << endl;
#endif #endif
// Если собщение некорректно // Если собщение некорректно
...@@ -1826,7 +1826,7 @@ int ForceSingleCoilMessage::getDataLen( ModbusMessage& m ) ...@@ -1826,7 +1826,7 @@ int ForceSingleCoilMessage::getDataLen( ModbusMessage& m )
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
std::ostream& ModbusRTU::operator<<(std::ostream& os, ForceSingleCoilMessage& m ) std::ostream& ModbusRTU::operator<<(std::ostream& os, ForceSingleCoilMessage& m )
{ {
return os << "addr=" << addr2str(m.addr) return os << "addr=" << addr2str(m.addr)
<< " start=" << dat2str(m.start) << "(" << (int)(m.start) << ")" << " start=" << dat2str(m.start) << "(" << (int)(m.start) << ")"
<< " data=" << dat2str(m.data) << "(" << (int)(m.data) << ")" << " data=" << dat2str(m.data) << "(" << (int)(m.data) << ")"
<< " "; << " ";
...@@ -1851,12 +1851,12 @@ ForceSingleCoilRetMessage& ForceSingleCoilRetMessage::operator=( ModbusMessage& ...@@ -1851,12 +1851,12 @@ ForceSingleCoilRetMessage& ForceSingleCoilRetMessage::operator=( ModbusMessage&
void ForceSingleCoilRetMessage::init( ModbusMessage& m ) void ForceSingleCoilRetMessage::init( ModbusMessage& m )
{ {
memset(this,0,sizeof(*this)); memset(this,0,sizeof(*this));
// copy not include CRC // copy not include CRC
memcpy(this,&m,szModbusHeader+m.len); memcpy(this,&m,szModbusHeader+m.len);
/*! \todo (ForceSingleCoilRetMessage): необходимо встроить проверку на корректность данных */ /*! \todo (ForceSingleCoilRetMessage): необходимо встроить проверку на корректность данных */
// переворачиваем обратно слова // переворачиваем обратно слова
start = SWAPSHORT(start); start = SWAPSHORT(start);
data = SWAPSHORT(data); data = SWAPSHORT(data);
...@@ -1957,9 +1957,9 @@ void WriteSingleOutputMessage::init( ModbusMessage& m ) ...@@ -1957,9 +1957,9 @@ void WriteSingleOutputMessage::init( ModbusMessage& m )
assert( m.func == fnWriteOutputSingleRegister ); assert( m.func == fnWriteOutputSingleRegister );
memset(this,0,sizeof(*this)); memset(this,0,sizeof(*this));
// копируем данные вместе с CRC // копируем данные вместе с CRC
memcpy(this,&m,szModbusHeader+m.len+szCRC); memcpy(this,&m,szModbusHeader+m.len+szCRC);
// Сперва переворачиваем обратно слова // Сперва переворачиваем обратно слова
start = SWAPSHORT(start); start = SWAPSHORT(start);
data = SWAPSHORT(data); data = SWAPSHORT(data);
...@@ -1967,7 +1967,7 @@ void WriteSingleOutputMessage::init( ModbusMessage& m ) ...@@ -1967,7 +1967,7 @@ void WriteSingleOutputMessage::init( ModbusMessage& m )
// потом проверяем // потом проверяем
if( !checkFormat() ) if( !checkFormat() )
{ {
#ifdef DEBUG #ifdef DEBUG
cerr << "(WriteSingleOutputMessage): BAD format!" << endl; cerr << "(WriteSingleOutputMessage): BAD format!" << endl;
#endif #endif
// Если собщение некорректно // Если собщение некорректно
...@@ -2003,7 +2003,7 @@ std::ostream& ModbusRTU::operator<<(std::ostream& os, WriteSingleOutputMessage& ...@@ -2003,7 +2003,7 @@ std::ostream& ModbusRTU::operator<<(std::ostream& os, WriteSingleOutputMessage&
// return mbPrintMessage(os,(ModbusByte*)(&m.crc), szCRC ); // return mbPrintMessage(os,(ModbusByte*)(&m.crc), szCRC );
// интелектуальный вывод :) // интелектуальный вывод :)
return os << "addr=" << addr2str(m.addr) return os << "addr=" << addr2str(m.addr)
<< " start=" << dat2str(m.start) << "(" << (int)(m.start) << ")" << " start=" << dat2str(m.start) << "(" << (int)(m.start) << ")"
<< " data=" << dat2str(m.data) << "(" << (int)(m.data) << ")" << " data=" << dat2str(m.data) << "(" << (int)(m.data) << ")"
<< " "; << " ";
...@@ -2028,12 +2028,12 @@ WriteSingleOutputRetMessage& WriteSingleOutputRetMessage::operator=( ModbusMessa ...@@ -2028,12 +2028,12 @@ WriteSingleOutputRetMessage& WriteSingleOutputRetMessage::operator=( ModbusMessa
void WriteSingleOutputRetMessage::init( ModbusMessage& m ) void WriteSingleOutputRetMessage::init( ModbusMessage& m )
{ {
memset(this,0,sizeof(*this)); memset(this,0,sizeof(*this));
// copy not include CRC // copy not include CRC
memcpy(this,&m,szModbusHeader+m.len); memcpy(this,&m,szModbusHeader+m.len);
/*! \todo (WriteSingleOutputRetMessage): необходимо встроить проверку на корректность данных */ /*! \todo (WriteSingleOutputRetMessage): необходимо встроить проверку на корректность данных */
// переворачиваем обратно слова // переворачиваем обратно слова
start = SWAPSHORT(start); start = SWAPSHORT(start);
data = SWAPSHORT(data); data = SWAPSHORT(data);
...@@ -2098,46 +2098,46 @@ int ModbusRTU::szRequestDiagnosticData( DiagnosticsSubFunction f ) ...@@ -2098,46 +2098,46 @@ int ModbusRTU::szRequestDiagnosticData( DiagnosticsSubFunction f )
if( f == subEcho ) if( f == subEcho )
return 1; // тут странно, вроде в стандарте количество динамическое return 1; // тут странно, вроде в стандарте количество динамическое
// но везде вроде в примерах.. "одно слово".. // но везде вроде в примерах.. "одно слово"..
if( f == dgRestartComm ) if( f == dgRestartComm )
return 1; return 1;
if( f == dgDiagReg ) if( f == dgDiagReg )
return 1; return 1;
if( f == dgChangeASCII ) if( f == dgChangeASCII )
return 1; return 1;
if( f == dgForceListen ) if( f == dgForceListen )
return 1; return 1;
if( f == dgClearCounters) if( f == dgClearCounters)
return 1; return 1;
if( f == dgBusMsgCount ) if( f == dgBusMsgCount )
return 1; return 1;
if( f == dgBusErrCount ) if( f == dgBusErrCount )
return 1; return 1;
if( f == dgBusExceptCount ) if( f == dgBusExceptCount )
return 1; return 1;
if( f == dgMsgSlaveCount ) if( f == dgMsgSlaveCount )
return 1; return 1;
if( f == dgNoNoResponseCount ) if( f == dgNoNoResponseCount )
return 1; return 1;
if( f == dgSlaveNAKCount ) if( f == dgSlaveNAKCount )
return 1; return 1;
if( f == dgSlaveBusyCount ) if( f == dgSlaveBusyCount )
return 1; return 1;
if( f == dgBusCharOverrunCount ) if( f == dgBusCharOverrunCount )
return 1; return 1;
if( f == dgClearOverrunCounter ) if( f == dgClearOverrunCounter )
return 1; return 1;
...@@ -2165,7 +2165,7 @@ void DiagnosticMessage::init( ModbusMessage& m ) ...@@ -2165,7 +2165,7 @@ void DiagnosticMessage::init( ModbusMessage& m )
memcpy( &subf,&(m.data[0]),sizeof(subf) ); memcpy( &subf,&(m.data[0]),sizeof(subf) );
int last = sizeof(subf); int last = sizeof(subf);
subf = SWAPSHORT(subf); subf = SWAPSHORT(subf);
count = szRequestDiagnosticData((DiagnosticsSubFunction)subf ); count = szRequestDiagnosticData((DiagnosticsSubFunction)subf );
if( count > MAXDATALEN ) if( count > MAXDATALEN )
...@@ -2176,13 +2176,13 @@ void DiagnosticMessage::init( ModbusMessage& m ) ...@@ -2176,13 +2176,13 @@ void DiagnosticMessage::init( ModbusMessage& m )
memcpy(&data,&(m.data[last]),sizeof(ModbusData)*count); memcpy(&data,&(m.data[last]),sizeof(ModbusData)*count);
last +=sizeof(ModbusData)*count; last +=sizeof(ModbusData)*count;
// переворачиваем данные // переворачиваем данные
for( unsigned int i=0; i<count; i++ ) for( unsigned int i=0; i<count; i++ )
data[i] = SWAPSHORT(data[i]); data[i] = SWAPSHORT(data[i]);
memcpy(&crc,&(m.data[last]),szCRC); memcpy(&crc,&(m.data[last]),szCRC);
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
int DiagnosticMessage::getDataLen( ModbusMessage& m ) int DiagnosticMessage::getDataLen( ModbusMessage& m )
{ {
...@@ -2215,7 +2215,7 @@ bool DiagnosticMessage::addData( ModbusData d ) ...@@ -2215,7 +2215,7 @@ bool DiagnosticMessage::addData( ModbusData d )
{ {
if( isFull() ) if( isFull() )
return false; return false;
data[count++] = d; data[count++] = d;
return true; return true;
} }
...@@ -2261,7 +2261,7 @@ ModbusMessage DiagnosticMessage::transport_msg() ...@@ -2261,7 +2261,7 @@ ModbusMessage DiagnosticMessage::transport_msg()
ind+=szCRC; ind+=szCRC;
// длина сообщения... // длина сообщения...
mm.len = szData(); mm.len = szData();
return std::move(mm); return std::move(mm);
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
...@@ -2296,9 +2296,9 @@ std::ostream& ModbusRTU::operator<<(std::ostream& os, DiagnosticMessage& m ) ...@@ -2296,9 +2296,9 @@ std::ostream& ModbusRTU::operator<<(std::ostream& os, DiagnosticMessage& m )
for( unsigned int i=0; i<m.count; i++ ) for( unsigned int i=0; i<m.count; i++ )
os << dat2str(m.data[i]) << " "; os << dat2str(m.data[i]) << " ";
os << "}"; os << "}";
return os; return os;
} }
...@@ -2316,9 +2316,9 @@ std::ostream& ModbusRTU::operator<<(std::ostream& os, DiagnosticRetMessage& m ) ...@@ -2316,9 +2316,9 @@ std::ostream& ModbusRTU::operator<<(std::ostream& os, DiagnosticRetMessage& m )
for( unsigned int i=0; i<m.count; i++ ) for( unsigned int i=0; i<m.count; i++ )
os << dat2str(m.data[i]) << " "; os << dat2str(m.data[i]) << " ";
os << "}"; os << "}";
return os; return os;
} }
...@@ -2378,10 +2378,10 @@ void MEIMessageRDI::init( ModbusMessage& m ) ...@@ -2378,10 +2378,10 @@ void MEIMessageRDI::init( ModbusMessage& m )
assert( m.func == fnMEI ); assert( m.func == fnMEI );
memset(this,0,sizeof(*this)); memset(this,0,sizeof(*this));
// copy not include CRC // copy not include CRC
memcpy(this,&m,szModbusHeader+m.len); memcpy(this,&m,szModbusHeader+m.len);
// потом проверяем // потом проверяем
if( !checkFormat() ) if( !checkFormat() )
{ {
...@@ -2403,13 +2403,13 @@ bool MEIMessageRDI::checkFormat() ...@@ -2403,13 +2403,13 @@ bool MEIMessageRDI::checkFormat()
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
std::ostream& ModbusRTU::operator<<(std::ostream& os, MEIMessageRDI& m ) std::ostream& ModbusRTU::operator<<(std::ostream& os, MEIMessageRDI& m )
{ {
os << "addr=" << addr2str(m.addr) os << "addr=" << addr2str(m.addr)
<< " func=0x" << b2str(m.func) << " func=0x" << b2str(m.func)
<< " type=0x" << b2str(m.type) << " type=0x" << b2str(m.type)
<< " devID=0x" << b2str(m.devID) << " devID=0x" << b2str(m.devID)
<< " objID=0x" << b2str(m.objID); << " objID=0x" << b2str(m.objID);
return os; return os;
} }
std::ostream& ModbusRTU::operator<<(std::ostream& os, MEIMessageRDI* m ) std::ostream& ModbusRTU::operator<<(std::ostream& os, MEIMessageRDI* m )
{ {
...@@ -2493,7 +2493,7 @@ void MEIMessageRetRDI::init( ModbusMessage& m ) ...@@ -2493,7 +2493,7 @@ void MEIMessageRetRDI::init( ModbusMessage& m )
{ {
if( m.len < 7 ) if( m.len < 7 )
throw mbException(erInvalidFormat); throw mbException(erInvalidFormat);
while( i < m.len && dlist.size() < objNum ) while( i < m.len && dlist.size() < objNum )
{ {
ModbusByte id = m.data[i]; ModbusByte id = m.data[i];
...@@ -2510,7 +2510,7 @@ void MEIMessageRetRDI::init( ModbusMessage& m ) ...@@ -2510,7 +2510,7 @@ void MEIMessageRetRDI::init( ModbusMessage& m )
} }
memcpy(&crc,&(m.data[i]),szCRC); memcpy(&crc,&(m.data[i]),szCRC);
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
MEIMessageRetRDI::MEIMessageRetRDI(): MEIMessageRetRDI::MEIMessageRetRDI():
type(0x00), type(0x00),
...@@ -2542,7 +2542,7 @@ bool MEIMessageRetRDI::addData( ModbusByte id, const std::string& val ) ...@@ -2542,7 +2542,7 @@ bool MEIMessageRetRDI::addData( ModbusByte id, const std::string& val )
{ {
if( isFull() ) if( isFull() )
return false; return false;
RDIObjectInfo r(id,val); RDIObjectInfo r(id,val);
dlist.push_back(r); dlist.push_back(r);
objNum = dlist.size(); objNum = dlist.size();
...@@ -2603,11 +2603,11 @@ size_t MEIMessageRetRDI::szData() ...@@ -2603,11 +2603,11 @@ size_t MEIMessageRetRDI::szData()
std::ostream& ModbusRTU::operator<<(std::ostream& os, MEIMessageRetRDI& m ) std::ostream& ModbusRTU::operator<<(std::ostream& os, MEIMessageRetRDI& m )
{ {
// return mbPrintMessage(os,(ModbusByte*)(&m), szModbusHeader + m.szData() ); // return mbPrintMessage(os,(ModbusByte*)(&m), szModbusHeader + m.szData() );
os << "addr=" << addr2str(m.addr) os << "addr=" << addr2str(m.addr)
<< " func=0x" << b2str(m.func) << " func=0x" << b2str(m.func)
<< " type=0x" << b2str(m.type) << " type=0x" << b2str(m.type)
<< " devID=0x" << b2str(m.devID) << " devID=0x" << b2str(m.devID)
<< " conformity=0x" << b2str(m.conformity) << " conformity=0x" << b2str(m.conformity)
<< " mf=0x" << b2str(m.mf) << " mf=0x" << b2str(m.mf)
<< " objID=0x" << b2str(m.objID) << " objID=0x" << b2str(m.objID)
<< " objNum=" << (int)(m.objNum); << " objNum=" << (int)(m.objNum);
...@@ -2691,7 +2691,7 @@ bool JournalCommandRetMessage::setData( ModbusByte* buf, int len ) ...@@ -2691,7 +2691,7 @@ bool JournalCommandRetMessage::setData( ModbusByte* buf, int len )
{ {
if( isFull() ) if( isFull() )
return false; return false;
if( sizeof(ModbusByte)*len > sizeof(data) ) if( sizeof(ModbusByte)*len > sizeof(data) )
return false; return false;
...@@ -2756,7 +2756,7 @@ ModbusMessage JournalCommandRetMessage::transport_msg() ...@@ -2756,7 +2756,7 @@ ModbusMessage JournalCommandRetMessage::transport_msg()
ind += szCRC; ind += szCRC;
// длина сообщения... // длина сообщения...
mm.len = ind; mm.len = ind;
return std::move(mm); return std::move(mm);
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
...@@ -2806,7 +2806,7 @@ float ModbusRTU::dat2f( const ModbusData dat1, const ModbusData dat2 ) ...@@ -2806,7 +2806,7 @@ float ModbusRTU::dat2f( const ModbusData dat1, const ModbusData dat2 )
{ {
ModbusData d[2]={dat1,dat2}; ModbusData d[2]={dat1,dat2};
float f=0; float f=0;
assert(sizeof(f)>=sizeof(d)); assert(sizeof(f)>=sizeof(d));
memcpy(&f,d,sizeof(d)); memcpy(&f,d,sizeof(d));
return f; return f;
...@@ -2863,25 +2863,25 @@ std::string ModbusRTU::mbErr2Str( ModbusRTU::mbErrCode e ) ...@@ -2863,25 +2863,25 @@ std::string ModbusRTU::mbErr2Str( ModbusRTU::mbErrCode e )
case erInvalidFormat: case erInvalidFormat:
return "неправильный формат"; return "неправильный формат";
case erBadCheckSum: case erBadCheckSum:
return "У пакета не сошлась контрольная сумма"; return "У пакета не сошлась контрольная сумма";
case erBadReplyNodeAddress: case erBadReplyNodeAddress:
return "Ответ на запрос адресован не мне или от станции,которую не спрашивали"; return "Ответ на запрос адресован не мне или от станции,которую не спрашивали";
case erTimeOut: case erTimeOut:
return "Тайм-аут при приеме"; return "Тайм-аут при приеме";
case erUnExpectedPacketType: case erUnExpectedPacketType:
return "Неожидаемый тип пакета"; return "Неожидаемый тип пакета";
case erPacketTooLong: case erPacketTooLong:
return "пакет длинее буфера приема"; return "пакет длинее буфера приема";
case erHardwareError: case erHardwareError:
return "ошибка оборудования"; return "ошибка оборудования";
case erBadDataAddress: case erBadDataAddress:
return "регистр не существует или запрещён к опросу"; return "регистр не существует или запрещён к опросу";
...@@ -2893,10 +2893,10 @@ std::string ModbusRTU::mbErr2Str( ModbusRTU::mbErrCode e ) ...@@ -2893,10 +2893,10 @@ std::string ModbusRTU::mbErr2Str( ModbusRTU::mbErrCode e )
case erSlaveBusy: case erSlaveBusy:
return "контроллер занят длительной операцией (повторить запрос позже)"; return "контроллер занят длительной операцией (повторить запрос позже)";
case erOperationFailed: case erOperationFailed:
return "сбой при выполнении операции (например: доступ запрещён)"; return "сбой при выполнении операции (например: доступ запрещён)";
case erMemoryParityError: case erMemoryParityError:
return "ошибка паритета при чтении памяти"; return "ошибка паритета при чтении памяти";
...@@ -2929,15 +2929,15 @@ SetDateTimeMessage::SetDateTimeMessage() ...@@ -2929,15 +2929,15 @@ SetDateTimeMessage::SetDateTimeMessage()
std::ostream& ModbusRTU::operator<<(std::ostream& os, SetDateTimeMessage& m ) std::ostream& ModbusRTU::operator<<(std::ostream& os, SetDateTimeMessage& m )
{ {
ostringstream s; ostringstream s;
s << setfill('0') s << setfill('0')
<< setw(2) << (int)m.day << "-" << setw(2) << (int)m.day << "-"
<< setw(2) << (int)m.mon << "-" << setw(2) << (int)m.mon << "-"
<< setw(2) << (int)m.century << setw(2) << (int)m.century
<< setw(2) << (int)m.year << " " << setw(2) << (int)m.year << " "
<< setw(2) << (int)m.hour << ":" << setw(2) << (int)m.hour << ":"
<< setw(2) << (int)m.min << ":" << setw(2) << (int)m.min << ":"
<< setw(2) << (int)m.sec; << setw(2) << (int)m.sec;
return os << s.str(); return os << s.str();
} }
...@@ -2949,7 +2949,7 @@ std::ostream& ModbusRTU::operator<<(std::ostream& os, SetDateTimeMessage* m ) ...@@ -2949,7 +2949,7 @@ std::ostream& ModbusRTU::operator<<(std::ostream& os, SetDateTimeMessage* m )
bool SetDateTimeMessage::checkFormat() bool SetDateTimeMessage::checkFormat()
{ {
/* /*
// Lav: проверка >=0 бессмысленна, потому что в типе данных Modbusbyte не могут храниться отрицательные числа // Lav: проверка >=0 бессмысленна, потому что в типе данных Modbusbyte не могут храниться отрицательные числа
return ( hour>=0 && hour<=23 ) && return ( hour>=0 && hour<=23 ) &&
( min>=0 && min<=59 ) && ( min>=0 && min<=59 ) &&
( sec>=0 && sec<=59 ) && ( sec>=0 && sec<=59 ) &&
...@@ -2957,7 +2957,7 @@ bool SetDateTimeMessage::checkFormat() ...@@ -2957,7 +2957,7 @@ bool SetDateTimeMessage::checkFormat()
( mon>=1 && mon<=12 ) && ( mon>=1 && mon<=12 ) &&
( year>=0 && year<=99 ) && ( year>=0 && year<=99 ) &&
( century>=19 && century<=20 ); ( century>=19 && century<=20 );
*/ */
return ( hour<=23 ) && return ( hour<=23 ) &&
( min<=59 ) && ( min<=59 ) &&
( sec<=59 ) && ( sec<=59 ) &&
...@@ -3140,7 +3140,7 @@ bool RemoteServiceRetMessage::setData( ModbusByte* buf, int len ) ...@@ -3140,7 +3140,7 @@ bool RemoteServiceRetMessage::setData( ModbusByte* buf, int len )
{ {
if( isFull() ) if( isFull() )
return false; return false;
if( len*sizeof(ModbusByte) > sizeof(data) ) if( len*sizeof(ModbusByte) > sizeof(data) )
return false; return false;
...@@ -3196,7 +3196,7 @@ ModbusMessage RemoteServiceRetMessage::transport_msg() ...@@ -3196,7 +3196,7 @@ ModbusMessage RemoteServiceRetMessage::transport_msg()
ind += szCRC; ind += szCRC;
// длина сообщения... // длина сообщения...
mm.len = ind; mm.len = ind;
return std::move(mm); return std::move(mm);
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
...@@ -3219,11 +3219,11 @@ bool ReadFileRecordMessage::checkFormat() ...@@ -3219,11 +3219,11 @@ bool ReadFileRecordMessage::checkFormat()
void ReadFileRecordMessage::init( ModbusMessage& m ) void ReadFileRecordMessage::init( ModbusMessage& m )
{ {
assert( m.func == fnReadFileRecord ); assert( m.func == fnReadFileRecord );
memset(this,0,sizeof(*this)); memset(this,0,sizeof(*this));
// copy not include CRC // copy not include CRC
memcpy(this,&m,szModbusHeader+m.len); memcpy(this,&m,szModbusHeader+m.len);
// потом проверяем // потом проверяем
if( !checkFormat() ) if( !checkFormat() )
...@@ -3260,7 +3260,7 @@ int ReadFileRecordMessage::getDataLen( ModbusMessage& m ) ...@@ -3260,7 +3260,7 @@ int ReadFileRecordMessage::getDataLen( ModbusMessage& m )
return 0; return 0;
return (int)(m.data[0]); return (int)(m.data[0]);
// ReadFileRecordMessage rfm(m); // может просто смотреть m.data[0] ?! // ReadFileRecordMessage rfm(m); // может просто смотреть m.data[0] ?!
// return (int)(rfm.bcnt); // return (int)(rfm.bcnt);
} }
...@@ -3322,10 +3322,10 @@ void FileTransferMessage::init( ModbusMessage& m ) ...@@ -3322,10 +3322,10 @@ void FileTransferMessage::init( ModbusMessage& m )
assert( m.func == fnFileTransfer ); assert( m.func == fnFileTransfer );
memset(this,0,sizeof(*this)); memset(this,0,sizeof(*this));
// copy not include CRC // copy not include CRC
memcpy(this,&m,szModbusHeader+m.len); memcpy(this,&m,szModbusHeader+m.len);
// последний элемент это CRC // последний элемент это CRC
memcpy(&crc,&(m.data[m.len-szCRC]),szCRC); memcpy(&crc,&(m.data[m.len-szCRC]),szCRC);
...@@ -3360,10 +3360,10 @@ void FileTransferRetMessage::init( ModbusMessage& m ) ...@@ -3360,10 +3360,10 @@ void FileTransferRetMessage::init( ModbusMessage& m )
{ {
assert( m.func == fnFileTransfer ); assert( m.func == fnFileTransfer );
memset(this,0,sizeof(*this)); memset(this,0,sizeof(*this));
// copy header // copy header
memcpy(this,&m,szModbusHeader); memcpy(this,&m,szModbusHeader);
bcnt = m.data[0]; bcnt = m.data[0];
memcpy(&numfile,&(m.data[1]),sizeof(ModbusData)); memcpy(&numfile,&(m.data[1]),sizeof(ModbusData));
memcpy(&numpacks,&(m.data[1+sizeof(ModbusData)]),sizeof(ModbusData)); memcpy(&numpacks,&(m.data[1+sizeof(ModbusData)]),sizeof(ModbusData));
......
...@@ -115,7 +115,7 @@ void UInterface::initBackId( const UniSetTypes::ObjectId backid ) ...@@ -115,7 +115,7 @@ void UInterface::initBackId( const UniSetTypes::ObjectId backid )
* \exception IOBadParam - генерируется если указано неправильное имя датчика или секции * \exception IOBadParam - генерируется если указано неправильное имя датчика или секции
* \exception IOTimeOut - генерируется если в течение времени timeout небыл получен ответ * \exception IOTimeOut - генерируется если в течение времени timeout небыл получен ответ
*/ */
long UInterface::getValue( const ObjectId id, const ObjectId node ) const long UInterface::getValue( const ObjectId id, const ObjectId node ) const
throw(IO_THROW_EXCEPTIONS) throw(IO_THROW_EXCEPTIONS)
{ {
if ( id == DefaultObjectId ) if ( id == DefaultObjectId )
...@@ -252,7 +252,7 @@ void UInterface::setUndefinedState( const IOController_i::SensorInfo& si, bool u ...@@ -252,7 +252,7 @@ void UInterface::setUndefinedState( const IOController_i::SensorInfo& si, bool u
catch(CORBA::NO_IMPLEMENT) catch(CORBA::NO_IMPLEMENT)
{ {
rcache.erase(si.id, si.node); rcache.erase(si.id, si.node);
uwarn << set_err("UI(setUndefinedState): method no implement",si.id,si.node) << endl; uwarn << set_err("UI(setUndefinedState): method no implement",si.id,si.node) << endl;
} }
catch(CORBA::OBJECT_NOT_EXIST) catch(CORBA::OBJECT_NOT_EXIST)
{ {
...@@ -344,7 +344,7 @@ void UInterface::setValue( const ObjectId id, long value, const ObjectId node ) ...@@ -344,7 +344,7 @@ void UInterface::setValue( const ObjectId id, long value, const ObjectId node )
throw UniSetTypes::TimeOut(set_err("UI(setValue): Timeout",id,node)); throw UniSetTypes::TimeOut(set_err("UI(setValue): Timeout",id,node));
} }
void UInterface::setValue( const ObjectId name, long value ) const void UInterface::setValue( const ObjectId name, long value ) const
{ {
setValue(name, value, uconf->getLocalNode()); setValue(name, value, uconf->getLocalNode());
} }
...@@ -884,7 +884,7 @@ ObjectPtr UInterface::resolve( const ObjectId rid , const ObjectId node, int tim ...@@ -884,7 +884,7 @@ ObjectPtr UInterface::resolve( const ObjectId rid , const ObjectId node, int tim
} }
// ------------------------------------------------------------------------------------------- // -------------------------------------------------------------------------------------------
void UInterface::send( const ObjectId name, const TransportMessage& msg, const ObjectId node ) void UInterface::send( const ObjectId name, const TransportMessage& msg, const ObjectId node )
throw(IO_THROW_EXCEPTIONS) throw(IO_THROW_EXCEPTIONS)
{ {
if ( name == DefaultObjectId ) if ( name == DefaultObjectId )
...@@ -1157,7 +1157,7 @@ string UInterface::set_err( const std::string& pre, const ObjectId id, const Obj ...@@ -1157,7 +1157,7 @@ string UInterface::set_err( const std::string& pre, const ObjectId id, const Obj
nm = "UnknownName"; nm = "UnknownName";
ostringstream s; ostringstream s;
s << pre << " (" << id << ":" << node <<")" << nm; s << pre << " (" << id << ":" << node <<")" << nm;
return s.str(); return s.str();
} }
// -------------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------------
......
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
*/ */
// ----------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------
/*! /*!
\todo Добавить проверку на предельный номер id \todo Добавить проверку на предельный номер id
*/ */
// ----------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------
#include <sstream> #include <sstream>
......
...@@ -35,12 +35,12 @@ using namespace std; ...@@ -35,12 +35,12 @@ using namespace std;
namespace ORepHelpers namespace ORepHelpers
{ {
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
/*! /*!
* \param cname - полное имя контекста ссылку на который, возвратит функция. * \param cname - полное имя контекста ссылку на который, возвратит функция.
* \param argc, argv - параметры инициализации ORB * \param argc, argv - параметры инициализации ORB
*/ */
CosNaming::NamingContext_ptr getContext(const string& cname, int argc, const char* const* argv, const string& nsName ) throw(ORepFailed) CosNaming::NamingContext_ptr getContext(const string& cname, int argc, const char* const* argv, const string& nsName ) throw(ORepFailed)
{ {
...@@ -192,7 +192,7 @@ namespace ORepHelpers ...@@ -192,7 +192,7 @@ namespace ORepHelpers
// --------------------------------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------------------------------
/*! /*!
* \param fname - полное имя включающее в себя путь ("Root/Section1/name|Node:Alias") * \param fname - полное имя включающее в себя путь ("Root/Section1/name|Node:Alias")
* \param brk - используемый символ разделитель * \param brk - используемый символ разделитель
*/ */
const string getShortName( const string& fname, const std::string& brk ) const string getShortName( const string& fname, const std::string& brk )
{ {
...@@ -206,7 +206,7 @@ namespace ORepHelpers ...@@ -206,7 +206,7 @@ namespace ORepHelpers
// --------------------------------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------------------------------
/*! /*!
* \param fullName - полное имя включающее в себя путь * \param fullName - полное имя включающее в себя путь
* \param brk - используемый символ разделитель * \param brk - используемый символ разделитель
* \note Функция возвращает путь без последнего символа разделителя ("Root/Section1/name" -> "Root/Section1") * \note Функция возвращает путь без последнего символа разделителя ("Root/Section1/name" -> "Root/Section1")
*/ */
const string getSectionName( const string& fullName, const std::string& brk ) const string getSectionName( const string& fullName, const std::string& brk )
......
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
*/ */
// ----------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------
/*! /*!
\todo Добавить проверку на предельный номер id \todo Добавить проверку на предельный номер id
*/ */
// ----------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------
#include "ObjectIndex.h" #include "ObjectIndex.h"
......
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
*/ */
// ----------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------
/*! /*!
\todo Добавить проверку на предельный номер id \todo Добавить проверку на предельный номер id
*/ */
// ----------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------
#include <iomanip> #include <iomanip>
...@@ -56,7 +56,7 @@ ObjectId ObjectIndex_Array::getIdByName( const string& name ) ...@@ -56,7 +56,7 @@ ObjectId ObjectIndex_Array::getIdByName( const string& name )
auto it = mok.find(name); auto it = mok.find(name);
if( it != mok.end() ) if( it != mok.end() )
return it->second; return it->second;
return DefaultObjectId; return DefaultObjectId;
} }
...@@ -67,9 +67,9 @@ string ObjectIndex_Array::getMapName( const ObjectId id ) ...@@ -67,9 +67,9 @@ string ObjectIndex_Array::getMapName( const ObjectId id )
return objectInfo[id].repName; return objectInfo[id].repName;
return ""; return "";
// throw OutOfRange("ObjectIndex_Array::getMapName OutOfRange"); // throw OutOfRange("ObjectIndex_Array::getMapName OutOfRange");
} }
// ----------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------
string ObjectIndex_Array::getTextName( const ObjectId id ) string ObjectIndex_Array::getTextName( const ObjectId id )
{ {
if( id!=UniSetTypes::DefaultObjectId && id>=0 && id<maxId ) if( id!=UniSetTypes::DefaultObjectId && id>=0 && id<maxId )
...@@ -94,7 +94,7 @@ std::ostream& ObjectIndex_Array::printMap( std::ostream& os ) ...@@ -94,7 +94,7 @@ std::ostream& ObjectIndex_Array::printMap( std::ostream& os )
assert (i==objectInfo[i].id); assert (i==objectInfo[i].id);
os << setw(5) << objectInfo[i].id << " " os << setw(5) << objectInfo[i].id << " "
<< setw(45) << conf->oind->getBaseName(objectInfo[i].repName) << setw(45) << conf->oind->getBaseName(objectInfo[i].repName)
<< " " << objectInfo[i].textName << endl; << " " << objectInfo[i].textName << endl;
} }
......
...@@ -88,9 +88,9 @@ std::ostream& ObjectIndex_XML::printMap( std::ostream& os ) ...@@ -88,9 +88,9 @@ std::ostream& ObjectIndex_XML::printMap( std::ostream& os )
if( it->repName == NULL ) if( it->repName == NULL )
continue; continue;
os << setw(5) << it->id << " " os << setw(5) << it->id << " "
// << setw(45) << ORepHelpers::getShortName(it->repName,'/') // << setw(45) << ORepHelpers::getShortName(it->repName,'/')
<< setw(45) << it->repName << setw(45) << it->repName
<< " " << it->textName << endl; << " " << it->textName << endl;
} }
...@@ -107,8 +107,8 @@ void ObjectIndex_XML::build(UniXML& xml) ...@@ -107,8 +107,8 @@ void ObjectIndex_XML::build(UniXML& xml)
ind = read_section(xml,"controllers",ind); ind = read_section(xml,"controllers",ind);
ind = read_section(xml,"services",ind); ind = read_section(xml,"services",ind);
ind = read_nodes(xml,"nodes",ind); ind = read_nodes(xml,"nodes",ind);
// //
omap.resize(ind); omap.resize(ind);
// omap[ind].repName=NULL; // omap[ind].repName=NULL;
// omap[ind].textName=NULL; // omap[ind].textName=NULL;
...@@ -255,7 +255,7 @@ unsigned int ObjectIndex_XML::read_nodes( UniXML& xml, const std::string& sec, u ...@@ -255,7 +255,7 @@ unsigned int ObjectIndex_XML::read_nodes( UniXML& xml, const std::string& sec, u
strcpy( omap[ind].textName, textname.c_str() ); strcpy( omap[ind].textName, textname.c_str() );
omap[ind].data = (void*)(xmlNode*)(it); omap[ind].data = (void*)(xmlNode*)(it);
// //
mok[omap[ind].repName] = ind; mok[omap[ind].repName] = ind;
// cout << "read: " << "(" << ind << ") " << omap[ind].repName << "\t" << omap[ind].textName << endl; // cout << "read: " << "(" << ind << ") " << omap[ind].repName << "\t" << omap[ind].textName << endl;
......
...@@ -45,7 +45,7 @@ string ObjectIndex_idXML::getMapName( const ObjectId id ) ...@@ -45,7 +45,7 @@ string ObjectIndex_idXML::getMapName( const ObjectId id )
return ""; return "";
} }
// ----------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------
string ObjectIndex_idXML::getTextName( const ObjectId id ) string ObjectIndex_idXML::getTextName( const ObjectId id )
{ {
auto it = omap.find(id); auto it = omap.find(id);
...@@ -68,9 +68,9 @@ std::ostream& ObjectIndex_idXML::printMap( std::ostream& os ) ...@@ -68,9 +68,9 @@ std::ostream& ObjectIndex_idXML::printMap( std::ostream& os )
if( it->second.repName == NULL ) if( it->second.repName == NULL )
continue; continue;
os << setw(5) << it->second.id << " " os << setw(5) << it->second.id << " "
// << setw(45) << ORepHelpers::getShortName(it->repName,'/') // << setw(45) << ORepHelpers::getShortName(it->repName,'/')
<< setw(45) << it->second.repName << setw(45) << it->second.repName
<< " " << it->second.textName << endl; << " " << it->second.textName << endl;
} }
...@@ -136,7 +136,7 @@ void ObjectIndex_idXML::read_section( UniXML& xml, const std::string& sec ) ...@@ -136,7 +136,7 @@ void ObjectIndex_idXML::read_section( UniXML& xml, const std::string& sec )
if( inf.id <= 0 ) if( inf.id <= 0 )
{ {
ostringstream msg; ostringstream msg;
msg << "(ObjectIndex_idXML::build): НЕ УКАЗАН id для " << it.getProp("name") msg << "(ObjectIndex_idXML::build): НЕ УКАЗАН id для " << it.getProp("name")
<< " секция " << sec; << " секция " << sec;
throw NameNotFound(msg.str()); throw NameNotFound(msg.str());
} }
......
...@@ -162,7 +162,7 @@ void ObjectRepository::registration(const string& name, const ObjectPtr oRef, co ...@@ -162,7 +162,7 @@ void ObjectRepository::registration(const string& name, const ObjectPtr oRef, co
* \note При этом надо иметь ввиду, что задается полное имя объекта. * \note При этом надо иметь ввиду, что задается полное имя объекта.
* Пример: registration("Root/SensorSection/sens1", oRef); * Пример: registration("Root/SensorSection/sens1", oRef);
* \param fullName - полное имя регистрируемого объекта (т.е. включающее в себя имя секции) * \param fullName - полное имя регистрируемого объекта (т.е. включающее в себя имя секции)
* \param oRef - ссылка на объект * \param oRef - ссылка на объект
* \exception ORepFailed - генерируется если произошла ошибка при регистрации * \exception ORepFailed - генерируется если произошла ошибка при регистрации
* \sa registration(const string name, const ObjectPtr oRef, const string section) * \sa registration(const string name, const ObjectPtr oRef, const string section)
*/ */
...@@ -325,7 +325,7 @@ bool ObjectRepository::list(const string& section, ListObjectName *ls, unsigned ...@@ -325,7 +325,7 @@ bool ObjectRepository::list(const string& section, ListObjectName *ls, unsigned
try try
{ {
CORBA::ORB_var orb = uconf->getORB(); CORBA::ORB_var orb = uconf->getORB();
ctx = ORepHelpers::getContext(orb, section, nsName); ctx = ORepHelpers::getContext(orb, section, nsName);
} }
catch(ORepFailed) catch(ORepFailed)
{ {
...@@ -358,7 +358,7 @@ bool ObjectRepository::list(const string& section, ListObjectName *ls, unsigned ...@@ -358,7 +358,7 @@ bool ObjectRepository::list(const string& section, ListObjectName *ls, unsigned
for( unsigned int i=0; i<how_many;i++) for( unsigned int i=0; i<how_many;i++)
{ {
switch( type ) switch( type )
{ {
case ObjectRef: case ObjectRef:
{ {
if(bl[i].binding_type == CosNaming::nobject) if(bl[i].binding_type == CosNaming::nobject)
......
...@@ -121,7 +121,7 @@ bool ObjectRepositoryFactory::createRootSection(const string& name) ...@@ -121,7 +121,7 @@ bool ObjectRepositoryFactory::createRootSection(const string& name)
// ----------------------------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------------------------
bool ObjectRepositoryFactory::createContext(const char *cname, CosNaming::NamingContext_ptr ctx) bool ObjectRepositoryFactory::createContext(const char *cname, CosNaming::NamingContext_ptr ctx)
{ {
CosNaming::Name_var nc = omniURI::stringToName(cname); CosNaming::Name_var nc = omniURI::stringToName(cname);
try try
{ {
...@@ -133,12 +133,12 @@ bool ObjectRepositoryFactory::createContext(const char *cname, CosNaming::Naming ...@@ -133,12 +133,12 @@ bool ObjectRepositoryFactory::createContext(const char *cname, CosNaming::Naming
catch(const CosNaming::NamingContext::AlreadyBound &ab) catch(const CosNaming::NamingContext::AlreadyBound &ab)
{ {
// ctx->resolve(nc); // ctx->resolve(nc);
ulogrep << "ORepFactory(createContext): context "<< cname << " уже есть"<< endl; ulogrep << "ORepFactory(createContext): context "<< cname << " уже есть"<< endl;
return true; return true;
} }
catch(CosNaming::NamingContext::NotFound) catch(CosNaming::NamingContext::NotFound)
{ {
ulogrep << "ORepFactory(createContext): NotFound "<< cname << endl; ulogrep << "ORepFactory(createContext): NotFound "<< cname << endl;
throw NameNotFound(); throw NameNotFound();
} }
catch(const CosNaming::NamingContext::InvalidName &nf) catch(const CosNaming::NamingContext::InvalidName &nf)
...@@ -147,7 +147,7 @@ bool ObjectRepositoryFactory::createContext(const char *cname, CosNaming::Naming ...@@ -147,7 +147,7 @@ bool ObjectRepositoryFactory::createContext(const char *cname, CosNaming::Naming
} }
catch(const CosNaming::NamingContext::CannotProceed &cp) catch(const CosNaming::NamingContext::CannotProceed &cp)
{ {
uwarn << "ORepFactory(createContext): catch CannotProced " uwarn << "ORepFactory(createContext): catch CannotProced "
<< cname << " bad part=" << cname << " bad part="
<< omniURI::nameToString(cp.rest_of_name); << omniURI::nameToString(cp.rest_of_name);
throw NameNotFound(); throw NameNotFound();
...@@ -212,7 +212,7 @@ bool ObjectRepositoryFactory::removeSection(const string& fullName, bool recursi ...@@ -212,7 +212,7 @@ bool ObjectRepositoryFactory::removeSection(const string& fullName, bool recursi
unsigned int how_many = 1000; unsigned int how_many = 1000;
CosNaming::NamingContext_var ctx; CosNaming::NamingContext_var ctx;
try try
{ {
int argc(uconf->getArgc()); int argc(uconf->getArgc());
const char * const* argv(uconf->getArgv()); const char * const* argv(uconf->getArgv());
ctx = ORepHelpers::getContext(fullName, argc, argv, nsName); ctx = ORepHelpers::getContext(fullName, argc, argv, nsName);
...@@ -231,11 +231,11 @@ bool ObjectRepositoryFactory::removeSection(const string& fullName, bool recursi ...@@ -231,11 +231,11 @@ bool ObjectRepositoryFactory::removeSection(const string& fullName, bool recursi
if( how_many>bl->length() ) if( how_many>bl->length() )
how_many = bl->length(); how_many = bl->length();
bool rem = true; // удалять или нет bool rem = true; // удалять или нет
for(unsigned int i=0; i<how_many;i++) for(unsigned int i=0; i<how_many;i++)
{ {
if( bl[i].binding_type == CosNaming::nobject) if( bl[i].binding_type == CosNaming::nobject)
{ {
// cout <<"удаляем "<< omniURI::nameToString(bl[i].binding_name) << endl; // cout <<"удаляем "<< omniURI::nameToString(bl[i].binding_name) << endl;
...@@ -317,8 +317,8 @@ bool ObjectRepositoryFactory::renameSection( const string& newFName, const strin ...@@ -317,8 +317,8 @@ bool ObjectRepositoryFactory::renameSection( const string& newFName, const strin
{ {
int argc(uconf->getArgc()); int argc(uconf->getArgc());
const char * const* argv(uconf->getArgv()); const char * const* argv(uconf->getArgv());
CosNaming::NamingContext_var in_ctx = ORepHelpers::getContext(in_sec, argc, argv, nsName); CosNaming::NamingContext_var in_ctx = ORepHelpers::getContext(in_sec, argc, argv, nsName);
CosNaming::NamingContext_var ctx = ORepHelpers::getContext(oldFName, argc, argv, nsName); CosNaming::NamingContext_var ctx = ORepHelpers::getContext(oldFName, argc, argv, nsName);
// заменит контекст newFName если он существовал // заменит контекст newFName если он существовал
in_ctx->rebind_context(ctxNewName, ctx); in_ctx->rebind_context(ctxNewName, ctx);
......
...@@ -42,7 +42,7 @@ PassiveObject::PassiveObject( UniSetTypes::ObjectId id ): ...@@ -42,7 +42,7 @@ PassiveObject::PassiveObject( UniSetTypes::ObjectId id ):
id(id) id(id)
{ {
string myfullname = conf->oind->getNameById(id); string myfullname = conf->oind->getNameById(id);
myname = ORepHelpers::getShortName(myfullname.c_str()); myname = ORepHelpers::getShortName(myfullname.c_str());
} }
PassiveObject::PassiveObject( ObjectId id, ProxyManager* mngr ): PassiveObject::PassiveObject( ObjectId id, ProxyManager* mngr ):
...@@ -116,7 +116,7 @@ void PassiveObject::processingMessage( UniSetTypes::VoidMessage *msg ) ...@@ -116,7 +116,7 @@ void PassiveObject::processingMessage( UniSetTypes::VoidMessage *msg )
{ {
uwarn << myname << "(processingMessage): CORBA::Exception: " << ex._name() << endl; uwarn << myname << "(processingMessage): CORBA::Exception: " << ex._name() << endl;
} }
catch( omniORB::fatalException& fe ) catch( omniORB::fatalException& fe )
{ {
if( ulog.is_crit() ) if( ulog.is_crit() )
{ {
......
...@@ -81,7 +81,7 @@ bool ProxyManager::activateObject() ...@@ -81,7 +81,7 @@ bool ProxyManager::activateObject()
{ {
try try
{ {
uinfo << myname << "(registered): попытка " uinfo << myname << "(registered): попытка "
<< i+1 << " регистриую (id=" << it.first << ") " << i+1 << " регистриую (id=" << it.first << ") "
<< " (pname=" << it.second->getName() << ") " << " (pname=" << it.second->getName() << ") "
<< conf->oind->getNameById(it.first) << endl; << conf->oind->getNameById(it.first) << endl;
...@@ -144,7 +144,7 @@ void ProxyManager::processingMessage( UniSetTypes::VoidMessage *msg ) ...@@ -144,7 +144,7 @@ void ProxyManager::processingMessage( UniSetTypes::VoidMessage *msg )
auto it = omap.find(msg->consumer); auto it = omap.find(msg->consumer);
if( it!=omap.end() ) if( it!=omap.end() )
it->second->processingMessage(msg); it->second->processingMessage(msg);
else else
ucrit << myname << "(processingMessage): не найден объект " ucrit << myname << "(processingMessage): не найден объект "
<< " consumer= " << msg->consumer << endl; << " consumer= " << msg->consumer << endl;
} }
......
...@@ -233,7 +233,7 @@ void UniSetActivator::run(bool thread) ...@@ -233,7 +233,7 @@ void UniSetActivator::run(bool thread)
int ret = orbthr->start(); int ret = orbthr->start();
if( ret !=0 ) if( ret !=0 )
{ {
ucrit << myname << "(run): НЕ СМОГЛИ СОЗДАТЬ ORB-поток"<<endl; ucrit << myname << "(run): НЕ СМОГЛИ СОЗДАТЬ ORB-поток"<<endl;
throw SystemError("(UniSetActivator::run): CREATE ORB THREAD FAILED"); throw SystemError("(UniSetActivator::run): CREATE ORB THREAD FAILED");
} }
} }
......
...@@ -201,7 +201,7 @@ bool UniSetManager::removeObject( UniSetObject* obj ) ...@@ -201,7 +201,7 @@ bool UniSetManager::removeObject( UniSetObject* obj )
} }
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
/*! /*!
* Функция работы со списком менеджеров * Функция работы со списком менеджеров
*/ */
void UniSetManager::managers( OManagerCommand cmd ) void UniSetManager::managers( OManagerCommand cmd )
...@@ -264,7 +264,7 @@ void UniSetManager::managers( OManagerCommand cmd ) ...@@ -264,7 +264,7 @@ void UniSetManager::managers( OManagerCommand cmd )
*/ */
void UniSetManager::objects(OManagerCommand cmd) void UniSetManager::objects(OManagerCommand cmd)
{ {
uinfo << myname <<"(objects): olist.size=" uinfo << myname <<"(objects): olist.size="
<< olist.size() << " cmd=" << cmd << endl; << olist.size() << " cmd=" << cmd << endl;
{ //lock { //lock
uniset_rwmutex_rlock lock(olistMutex); uniset_rwmutex_rlock lock(olistMutex);
...@@ -306,11 +306,11 @@ void UniSetManager::objects(OManagerCommand cmd) ...@@ -306,11 +306,11 @@ void UniSetManager::objects(OManagerCommand cmd)
} }
catch( CORBA::Exception& ex ) catch( CORBA::Exception& ex )
{ {
ucrit << myname << "(objects): Caught CORBA::Exception. " ucrit << myname << "(objects): Caught CORBA::Exception. "
<< ex._name() << ex._name()
<< " (" << li->getName() << ")" << endl; << " (" << li->getName() << ")" << endl;
} }
catch( omniORB::fatalException& fe ) catch( omniORB::fatalException& fe )
{ {
ucrit << myname << "(objects): Caught omniORB::fatalException:" << endl; ucrit << myname << "(objects): Caught omniORB::fatalException:" << endl;
ucrit << myname << "(objects): file: " << fe.file() ucrit << myname << "(objects): file: " << fe.file()
...@@ -387,9 +387,9 @@ bool UniSetManager::addManager( UniSetManager *child ) ...@@ -387,9 +387,9 @@ bool UniSetManager::addManager( UniSetManager *child )
mlist.push_back( child ); mlist.push_back( child );
uinfo << myname << ": добавляем менеджер "<< child->getName()<< endl; uinfo << myname << ": добавляем менеджер "<< child->getName()<< endl;
} }
else else
uwarn << myname << ": попытка повторного добавления объекта "<< child->getName() << endl; uwarn << myname << ": попытка повторного добавления объекта "<< child->getName() << endl;
} // unlock } // unlock
return true; return true;
} }
......
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
/*! \file /*! \file
* \author Pavel Vainerman * \author Pavel Vainerman
*/ */
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
#include "Exceptions.h" #include "Exceptions.h"
#include "UniSetManager_LT.h" #include "UniSetManager_LT.h"
#include "Debug.h" #include "Debug.h"
...@@ -37,20 +37,20 @@ sleepTime(UniSetTimer::WaitUpTime) ...@@ -37,20 +37,20 @@ sleepTime(UniSetTimer::WaitUpTime)
} }
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
UniSetManager_LT::UniSetManager_LT(): UniSetManager_LT::UniSetManager_LT():
sleepTime(UniSetTimer::WaitUpTime) sleepTime(UniSetTimer::WaitUpTime)
{ {
} }
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
UniSetManager_LT::~UniSetManager_LT() UniSetManager_LT::~UniSetManager_LT()
{ {
} }
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
void UniSetManager_LT::callback() void UniSetManager_LT::callback()
{ {
// При реализации с использованием waitMessage() каждый раз при вызове askTimer() необходимо // При реализации с использованием waitMessage() каждый раз при вызове askTimer() необходимо
// проверять возвращаемое значение на UniSetTimers::WaitUpTime и вызывать termWaiting(), // проверять возвращаемое значение на UniSetTimers::WaitUpTime и вызывать termWaiting(),
// чтобы избежать ситуации, когда процесс до заказа таймера 'спал'(в функции waitMessage()) и после // чтобы избежать ситуации, когда процесс до заказа таймера 'спал'(в функции waitMessage()) и после
// заказа продолжит спать(т.е. обработчик вызван не будет)... // заказа продолжит спать(т.е. обработчик вызван не будет)...
try try
{ {
......
...@@ -40,7 +40,7 @@ ...@@ -40,7 +40,7 @@
using namespace std; using namespace std;
using namespace UniSetTypes; using namespace UniSetTypes;
#define CREATE_TIMER new ThrPassiveTimer(); #define CREATE_TIMER new ThrPassiveTimer();
// new PassiveSysTimer(); // new PassiveSysTimer();
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
...@@ -188,7 +188,7 @@ void UniSetObject::setID( UniSetTypes::ObjectId id ) ...@@ -188,7 +188,7 @@ void UniSetObject::setID( UniSetTypes::ObjectId id )
throw ObjectNameAlready("ObjectId already set(setID)"); throw ObjectNameAlready("ObjectId already set(setID)");
string myfullname = ui.getNameById(id); string myfullname = ui.getNameById(id);
myname = ORepHelpers::getShortName(myfullname.c_str()); myname = ORepHelpers::getShortName(myfullname.c_str());
section = ORepHelpers::getSectionName(myfullname.c_str()); section = ORepHelpers::getSectionName(myfullname.c_str());
myid = id; myid = id;
ui.initBackId(myid); ui.initBackId(myid);
...@@ -253,13 +253,13 @@ struct MsgInfo ...@@ -253,13 +253,13 @@ struct MsgInfo
inline bool operator < ( const MsgInfo& mi ) const inline bool operator < ( const MsgInfo& mi ) const
{ {
if( type != mi.type ) if( type != mi.type )
return type < mi.type; return type < mi.type;
if( id != mi.id ) if( id != mi.id )
return id < mi.id; return id < mi.id;
if( node != mi.node ) if( node != mi.node )
return node < mi.node; return node < mi.node;
if( tm.tv_sec != mi.tm.tv_sec ) if( tm.tv_sec != mi.tm.tv_sec )
return tm.tv_sec < mi.tm.tv_sec; return tm.tv_sec < mi.tm.tv_sec;
...@@ -282,7 +282,7 @@ struct CInfo ...@@ -282,7 +282,7 @@ struct CInfo
confirm(0) confirm(0)
{ {
} }
CInfo( ConfirmMessage& cm ): CInfo( ConfirmMessage& cm ):
sensor_id(cm.sensor_id), sensor_id(cm.sensor_id),
value(cm.value), value(cm.value),
...@@ -359,15 +359,15 @@ void UniSetObject::registered() ...@@ -359,15 +359,15 @@ void UniSetObject::registered()
catch( ObjectNameAlready& al ) catch( ObjectNameAlready& al )
{ {
/*! /*!
\warning По умолчанию объекты должны быть уникальны! Поэтому если идёт попытка повторной регистрации. \warning По умолчанию объекты должны быть уникальны! Поэтому если идёт попытка повторной регистрации.
Мы чистим существующую ссылку и заменяем её на новую. Мы чистим существующую ссылку и заменяем её на новую.
Это сделано для более надежной работы, иначе может получится, что если объект перед завершением Это сделано для более надежной работы, иначе может получится, что если объект перед завершением
не очистил за собой ссылку(не разрегистрировался), то больше он никогда не сможет вновь зарегистрироваться. не очистил за собой ссылку(не разрегистрировался), то больше он никогда не сможет вновь зарегистрироваться.
Т.к. \b надёжной функции проверки "жив" ли объект пока нет... Т.к. \b надёжной функции проверки "жив" ли объект пока нет...
(так бы можно было проверить и если "не жив", то смело заменять ссылку на новую). Но существует обратная сторона: (так бы можно было проверить и если "не жив", то смело заменять ссылку на новую). Но существует обратная сторона:
если заменяемый объект "жив" и завершит свою работу, то он может почистить за собой ссылку и это тогда наш(новый) если заменяемый объект "жив" и завершит свою работу, то он может почистить за собой ссылку и это тогда наш(новый)
объект станет недоступен другим, а знать об этом не будет!!! объект станет недоступен другим, а знать об этом не будет!!!
*/ */
ucrit << myname << "(registered): replace object (ObjectNameAlready)" << endl; ucrit << myname << "(registered): replace object (ObjectNameAlready)" << endl;
reg = true; reg = true;
...@@ -578,8 +578,8 @@ void UniSetObject::cleanMsgQueue( MessagesQueue& q ) ...@@ -578,8 +578,8 @@ void UniSetObject::cleanMsgQueue( MessagesQueue& q )
q.push(v); q.push(v);
} }
ucrit << myname ucrit << myname
<< "(cleanMsgQueue): ******* result size of queue: " << "(cleanMsgQueue): ******* result size of queue: "
<< q.size() << q.size()
<< " < " << getMaxSizeOfMessageQueue() << endl; << " < " << getMaxSizeOfMessageQueue() << endl;
...@@ -590,8 +590,8 @@ void UniSetObject::cleanMsgQueue( MessagesQueue& q ) ...@@ -590,8 +590,8 @@ void UniSetObject::cleanMsgQueue( MessagesQueue& q )
for( unsigned int i=0; i<getMaxCountRemoveOfMessage(); i++ ) for( unsigned int i=0; i<getMaxCountRemoveOfMessage(); i++ )
{ {
q.top(); q.top();
q.pop(); q.pop();
if( q.empty() ) if( q.empty() )
break; break;
} }
...@@ -627,7 +627,7 @@ bool UniSetObject::deactivate() ...@@ -627,7 +627,7 @@ bool UniSetObject::deactivate()
{ // lock { // lock
uniset_rwmutex_wrlock mlk(qmutex); uniset_rwmutex_wrlock mlk(qmutex);
while( !queueMsg.empty() ) while( !queueMsg.empty() )
queueMsg.pop(); queueMsg.pop();
} }
try try
...@@ -700,8 +700,8 @@ bool UniSetObject::activate() ...@@ -700,8 +700,8 @@ bool UniSetObject::activate()
} }
else else
{ {
// А если myid==UniSetTypes::DefaultObjectId // А если myid==UniSetTypes::DefaultObjectId
// то myname = noname. ВСЕГДА! // то myname = noname. ВСЕГДА!
if( myid == UniSetTypes::DefaultObjectId ) if( myid == UniSetTypes::DefaultObjectId )
{ {
ucrit << myname << "(activate): Не задан ID!!! activate failure..." << endl; ucrit << myname << "(activate): Не задан ID!!! activate failure..." << endl;
...@@ -736,10 +736,10 @@ bool UniSetObject::activate() ...@@ -736,10 +736,10 @@ bool UniSetObject::activate()
thr = new ThreadCreator<UniSetObject>(this, &UniSetObject::work); thr = new ThreadCreator<UniSetObject>(this, &UniSetObject::work);
thr->start(); thr->start();
} }
else else
{ {
uinfo << myname << ": ?? не задан ObjectId...(" uinfo << myname << ": ?? не задан ObjectId...("
<< "myid=" << myid << " threadcreate=" << threadcreate << "myid=" << myid << " threadcreate=" << threadcreate
<< ")" << endl; << ")" << endl;
thread(false); thread(false);
} }
...@@ -806,7 +806,7 @@ void UniSetObject::processingMessage( UniSetTypes::VoidMessage *msg ) ...@@ -806,7 +806,7 @@ void UniSetObject::processingMessage( UniSetTypes::VoidMessage *msg )
{ {
uwarn << myname << "(processingMessage): CORBA::Exception: " << ex._name() << endl; uwarn << myname << "(processingMessage): CORBA::Exception: " << ex._name() << endl;
} }
catch( omniORB::fatalException& fe ) catch( omniORB::fatalException& fe )
{ {
if( ulog.is_crit() ) if( ulog.is_crit() )
{ {
...@@ -831,26 +831,26 @@ UniSetTypes::SimpleInfo* UniSetObject::getInfo() ...@@ -831,26 +831,26 @@ UniSetTypes::SimpleInfo* UniSetObject::getInfo()
info << "tid=" << setw(10); info << "tid=" << setw(10);
if( threadcreate ) if( threadcreate )
{ {
if(thr) if(thr)
{ {
msgpid = thr->getId(); // заодно(на всякий) обновим и внутреннюю информацию msgpid = thr->getId(); // заодно(на всякий) обновим и внутреннюю информацию
info << msgpid; info << msgpid;
} }
else else
info << "не запущен"; info << "не запущен";
} }
else else
info << "откл."; info << "откл.";
info << "\tcount=" << countMessages(); info << "\tcount=" << countMessages();
info << "\tmaxMsg=" << stMaxQueueMessages; info << "\tmaxMsg=" << stMaxQueueMessages;
info << "\tqFull("<< SizeOfMessageQueue << ")=" << stCountOfQueueFull; info << "\tqFull("<< SizeOfMessageQueue << ")=" << stCountOfQueueFull;
// info << "\n"; // info << "\n";
SimpleInfo* res = new SimpleInfo(); SimpleInfo* res = new SimpleInfo();
res->info = info.str().c_str(); // CORBA::string_dup(info.str().c_str()); res->info = info.str().c_str(); // CORBA::string_dup(info.str().c_str());
res->id = myid; res->id = myid;
return res; // ._retn(); return res; // ._retn();
} }
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
......
...@@ -48,12 +48,12 @@ UniSetObject_LT::~UniSetObject_LT() ...@@ -48,12 +48,12 @@ UniSetObject_LT::~UniSetObject_LT()
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
void UniSetObject_LT::callback() void UniSetObject_LT::callback()
{ {
// При реализации с использованием waitMessage() каждый раз при вызове askTimer() необходимо // При реализации с использованием waitMessage() каждый раз при вызове askTimer() необходимо
// проверять возвращаемое значение на UniSetTimers::WaitUpTime и вызывать termWaiting(), // проверять возвращаемое значение на UniSetTimers::WaitUpTime и вызывать termWaiting(),
// чтобы избежать ситуации, когда процесс до заказа таймера 'спал'(в функции waitMessage()) и после // чтобы избежать ситуации, когда процесс до заказа таймера 'спал'(в функции waitMessage()) и после
// заказа продолжит спать(т.е. обработчик вызван не будет)... // заказа продолжит спать(т.е. обработчик вызван не будет)...
try try
{ {
if( waitMessage(msg, sleepTime) ) if( waitMessage(msg, sleepTime) )
processingMessage(&msg); processingMessage(&msg);
......
...@@ -292,7 +292,7 @@ std::list<UniSetTypes::ParamSInfo> UniSetTypes::getSInfoList( const string& str, ...@@ -292,7 +292,7 @@ std::list<UniSetTypes::ParamSInfo> UniSetTypes::getSInfoList( const string& str,
res.push_back(item); res.push_back(item);
} }
return res; return res;
} }
// -------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------
......
...@@ -144,7 +144,7 @@ long IOController::localGetValue( IOController::IOStateList::iterator& li, const ...@@ -144,7 +144,7 @@ long IOController::localGetValue( IOController::IOStateList::iterator& li, const
// ------------- // -------------
ostringstream err; ostringstream err;
err << myname << "(localGetValue): Not found sensor (" << sid << ") " err << myname << "(localGetValue): Not found sensor (" << sid << ") "
<< conf->oind->getNameById(sid); << conf->oind->getNameById(sid);
uinfo << err.str() << endl; uinfo << err.str() << endl;
...@@ -157,7 +157,7 @@ void IOController::setUndefinedState( UniSetTypes::ObjectId sid, CORBA::Boolean ...@@ -157,7 +157,7 @@ void IOController::setUndefinedState( UniSetTypes::ObjectId sid, CORBA::Boolean
localSetUndefinedState( li,undefined, sid ); localSetUndefinedState( li,undefined, sid );
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
void IOController::localSetUndefinedState( IOStateList::iterator& li, void IOController::localSetUndefinedState( IOStateList::iterator& li,
bool undefined, const UniSetTypes::ObjectId sid ) bool undefined, const UniSetTypes::ObjectId sid )
{ {
// сохранение текущего состояния // сохранение текущего состояния
...@@ -241,7 +241,7 @@ void IOController::setValue( UniSetTypes::ObjectId sid, CORBA::Long value, UniSe ...@@ -241,7 +241,7 @@ void IOController::setValue( UniSetTypes::ObjectId sid, CORBA::Long value, UniSe
} }
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
void IOController::localSetValue( IOController::IOStateList::iterator& li, void IOController::localSetValue( IOController::IOStateList::iterator& li,
UniSetTypes::ObjectId sid, UniSetTypes::ObjectId sid,
CORBA::Long value, UniSetTypes::ObjectId sup_id ) CORBA::Long value, UniSetTypes::ObjectId sup_id )
{ {
if( sup_id == UniSetTypes::DefaultObjectId ) if( sup_id == UniSetTypes::DefaultObjectId )
...@@ -252,7 +252,7 @@ void IOController::localSetValue( IOController::IOStateList::iterator& li, ...@@ -252,7 +252,7 @@ void IOController::localSetValue( IOController::IOStateList::iterator& li,
li = ioList.find(sid); li = ioList.find(sid);
if( li==ioList.end() ) if( li==ioList.end() )
{ {
ostringstream err; ostringstream err;
err << myname << "(localSaveValue): Unknown sensor (" << sid << ")" err << myname << "(localSaveValue): Unknown sensor (" << sid << ")"
<< "name: " << conf->oind->getNameById(sid); << "name: " << conf->oind->getNameById(sid);
...@@ -351,7 +351,7 @@ void IOController::ioRegistration( USensorInfo&& ainf, bool force ) ...@@ -351,7 +351,7 @@ void IOController::ioRegistration( USensorInfo&& ainf, bool force )
if( li!=ioList.end() ) if( li!=ioList.end() )
{ {
ostringstream err; ostringstream err;
err << "Попытка повторной регистрации датчика("<< ainf.si.id << "). имя: " err << "Попытка повторной регистрации датчика("<< ainf.si.id << "). имя: "
<< conf->oind->getNameById(ainf.si.id); << conf->oind->getNameById(ainf.si.id);
throw ObjectNameAlready(err.str().c_str()); throw ObjectNameAlready(err.str().c_str());
} }
...@@ -378,8 +378,8 @@ void IOController::ioRegistration( USensorInfo&& ainf, bool force ) ...@@ -378,8 +378,8 @@ void IOController::ioRegistration( USensorInfo&& ainf, bool force )
{ {
try try
{ {
uinfo << myname uinfo << myname
<< "(ioRegistration): регистрирую " << "(ioRegistration): регистрирую "
<< conf->oind->getNameById(ainf.si.id) << endl; << conf->oind->getNameById(ainf.si.id) << endl;
ui.registered( ainf.si.id, getRef(), true ); ui.registered( ainf.si.id, getRef(), true );
...@@ -442,7 +442,7 @@ void IOController::dumpToDB() ...@@ -442,7 +442,7 @@ void IOController::dumpToDB()
{ // lock { // lock
// uniset_mutex_lock lock(ioMutex, 100); // uniset_mutex_lock lock(ioMutex, 100);
for( auto li = ioList.begin(); li!=ioList.end(); ++li ) for( auto li = ioList.begin(); li!=ioList.end(); ++li )
{ {
uniset_rwmutex_rlock lock(li->second.val_lock); uniset_rwmutex_rlock lock(li->second.val_lock);
SensorMessage sm; SensorMessage sm;
...@@ -458,19 +458,19 @@ void IOController::dumpToDB() ...@@ -458,19 +458,19 @@ void IOController::dumpToDB()
if ( !li->second.dbignore ) if ( !li->second.dbignore )
logging(sm); logging(sm);
} }
} // unlock } // unlock
} }
// -------------------------------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------------------------------
IOController_i::SensorInfoSeq* IOController::getSensorsMap() IOController_i::SensorInfoSeq* IOController::getSensorsMap()
{ {
// ЗА ОСВОБОЖДЕНИЕ ПАМЯТИ ОТВЕЧАЕТ КЛИЕНТ!!!!!! // ЗА ОСВОБОЖДЕНИЕ ПАМЯТИ ОТВЕЧАЕТ КЛИЕНТ!!!!!!
// поэтому ему лучше пользоваться при получении _var-классом // поэтому ему лучше пользоваться при получении _var-классом
IOController_i::SensorInfoSeq* res = new IOController_i::SensorInfoSeq(); IOController_i::SensorInfoSeq* res = new IOController_i::SensorInfoSeq();
res->length( ioList.size()); res->length( ioList.size());
unsigned int i=0; unsigned int i=0;
for( auto &it: ioList ) for( auto &it: ioList )
{ {
uniset_rwmutex_rlock lock(it.second.val_lock); uniset_rwmutex_rlock lock(it.second.val_lock);
(*res)[i] = it.second; (*res)[i] = it.second;
i++; i++;
...@@ -499,7 +499,7 @@ IOController_i::SensorIOInfo IOController::getSensorIOInfo( const UniSetTypes::O ...@@ -499,7 +499,7 @@ IOController_i::SensorIOInfo IOController::getSensorIOInfo( const UniSetTypes::O
// ------------- // -------------
ostringstream err; ostringstream err;
err << myname << "(getSensorIOInfo): Unknown sensor (" << sid << ")" err << myname << "(getSensorIOInfo): Unknown sensor (" << sid << ")"
<< conf->oind->getNameById(sid); << conf->oind->getNameById(sid);
uinfo << err.str() << endl; uinfo << err.str() << endl;
...@@ -513,7 +513,7 @@ CORBA::Long IOController::getRawValue( UniSetTypes::ObjectId sid ) ...@@ -513,7 +513,7 @@ CORBA::Long IOController::getRawValue( UniSetTypes::ObjectId sid )
if( it==ioList.end() ) if( it==ioList.end() )
{ {
ostringstream err; ostringstream err;
err << myname << "(getRawValue): Unknown analog sensor (" << sid << ")" err << myname << "(getRawValue): Unknown analog sensor (" << sid << ")"
<< conf->oind->getNameById(sid); << conf->oind->getNameById(sid);
throw IOController_i::NameNotFound(err.str().c_str()); throw IOController_i::NameNotFound(err.str().c_str());
} }
...@@ -526,14 +526,14 @@ CORBA::Long IOController::getRawValue( UniSetTypes::ObjectId sid ) ...@@ -526,14 +526,14 @@ CORBA::Long IOController::getRawValue( UniSetTypes::ObjectId sid )
if( it->second.type == UniversalIO::AI ) if( it->second.type == UniversalIO::AI )
return UniSetTypes::lcalibrate(it->second.value,ci.minRaw,ci.maxRaw,ci.minCal,ci.maxCal,true); return UniSetTypes::lcalibrate(it->second.value,ci.minRaw,ci.maxRaw,ci.minCal,ci.maxCal,true);
if( it->second.type == UniversalIO::AO ) if( it->second.type == UniversalIO::AO )
return UniSetTypes::lcalibrate(it->second.value,ci.minCal,ci.maxCal,ci.minRaw,ci.maxRaw,true); return UniSetTypes::lcalibrate(it->second.value,ci.minCal,ci.maxCal,ci.minRaw,ci.maxRaw,true);
} }
return it->second.value; return it->second.value;
} }
// -------------------------------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------------------------------
void IOController::calibrate( UniSetTypes::ObjectId sid, void IOController::calibrate( UniSetTypes::ObjectId sid,
const IOController_i::CalibrateInfo& ci, const IOController_i::CalibrateInfo& ci,
UniSetTypes::ObjectId adminId ) UniSetTypes::ObjectId adminId )
{ {
...@@ -541,7 +541,7 @@ void IOController::calibrate( UniSetTypes::ObjectId sid, ...@@ -541,7 +541,7 @@ void IOController::calibrate( UniSetTypes::ObjectId sid,
if( it==ioList.end() ) if( it==ioList.end() )
{ {
ostringstream err; ostringstream err;
err << myname << "(calibrate): Unknown analog sensor (" << sid << ")" err << myname << "(calibrate): Unknown analog sensor (" << sid << ")"
<< conf->oind->getNameById(sid); << conf->oind->getNameById(sid);
throw IOController_i::NameNotFound(err.str().c_str()); throw IOController_i::NameNotFound(err.str().c_str());
} }
...@@ -557,7 +557,7 @@ IOController_i::CalibrateInfo IOController::getCalibrateInfo( UniSetTypes::Objec ...@@ -557,7 +557,7 @@ IOController_i::CalibrateInfo IOController::getCalibrateInfo( UniSetTypes::Objec
if( it==ioList.end() ) if( it==ioList.end() )
{ {
ostringstream err; ostringstream err;
err << myname << "(calibrate): Unknown analog sensor (" << sid << ")" err << myname << "(calibrate): Unknown analog sensor (" << sid << ")"
<< conf->oind->getNameById(sid); << conf->oind->getNameById(sid);
throw IOController_i::NameNotFound(err.str().c_str()); throw IOController_i::NameNotFound(err.str().c_str());
} }
...@@ -579,7 +579,7 @@ IOController::USensorInfo::USensorInfo(IOController_i::SensorIOInfo* ai): ...@@ -579,7 +579,7 @@ IOController::USensorInfo::USensorInfo(IOController_i::SensorIOInfo* ai):
any(0) any(0)
{} {}
IOController::USensorInfo& IOController::USensorInfo&
IOController::USensorInfo::operator=(IOController_i::SensorIOInfo& r) IOController::USensorInfo::operator=(IOController_i::SensorIOInfo& r)
{ {
(*this) = r; (*this) = r;
...@@ -587,16 +587,16 @@ IOController::USensorInfo& ...@@ -587,16 +587,16 @@ IOController::USensorInfo&
return *this; return *this;
} }
IOController::USensorInfo& IOController::USensorInfo&
IOController::USensorInfo::operator=(IOController_i::SensorIOInfo* r) IOController::USensorInfo::operator=(IOController_i::SensorIOInfo* r)
{ {
(*this) = (*r); (*this) = (*r);
// any=0; // any=0;
return *this; return *this;
} }
const IOController::USensorInfo& const IOController::USensorInfo&
IOController::USensorInfo::operator=(const IOController_i::SensorIOInfo& r) IOController::USensorInfo::operator=(const IOController_i::SensorIOInfo& r)
{ {
(*this) = r; (*this) = r;
...@@ -605,7 +605,7 @@ const IOController::USensorInfo& ...@@ -605,7 +605,7 @@ const IOController::USensorInfo&
} }
// ---------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------
bool IOController::checkIOFilters( const USensorInfo& ai, CORBA::Long& newvalue, bool IOController::checkIOFilters( const USensorInfo& ai, CORBA::Long& newvalue,
UniSetTypes::ObjectId sup_id ) UniSetTypes::ObjectId sup_id )
{ {
for( auto &it: iofilters ) for( auto &it: iofilters )
...@@ -716,7 +716,7 @@ IOController_i::ShortIOInfo IOController::getChangedTime( UniSetTypes::ObjectId ...@@ -716,7 +716,7 @@ IOController_i::ShortIOInfo IOController::getChangedTime( UniSetTypes::ObjectId
// ------------- // -------------
ostringstream err; ostringstream err;
err << myname << "(getChangedTime): вход(выход) с именем " err << myname << "(getChangedTime): вход(выход) с именем "
<< conf->oind->getNameById(sid) << " не найден"; << conf->oind->getNameById(sid) << " не найден";
uinfo << err.str() << endl; uinfo << err.str() << endl;
...@@ -752,7 +752,7 @@ IOController::ChangeSignal IOController::signal_change_value( UniSetTypes::Objec ...@@ -752,7 +752,7 @@ IOController::ChangeSignal IOController::signal_change_value( UniSetTypes::Objec
if( it==ioList.end() ) if( it==ioList.end() )
{ {
ostringstream err; ostringstream err;
err << myname << "(signal_change_value): вход(выход) с именем " err << myname << "(signal_change_value): вход(выход) с именем "
<< conf->oind->getNameById(sid) << " не найден"; << conf->oind->getNameById(sid) << " не найден";
uinfo << err.str() << endl; uinfo << err.str() << endl;
...@@ -774,7 +774,7 @@ IOController::ChangeUndefinedStateSignal IOController::signal_change_undefined_s ...@@ -774,7 +774,7 @@ IOController::ChangeUndefinedStateSignal IOController::signal_change_undefined_s
if( it==ioList.end() ) if( it==ioList.end() )
{ {
ostringstream err; ostringstream err;
err << myname << "(signal_change_undefine): вход(выход) с именем " err << myname << "(signal_change_undefine): вход(выход) с именем "
<< conf->oind->getNameById(sid) << " не найден"; << conf->oind->getNameById(sid) << " не найден";
uinfo << err.str() << endl; uinfo << err.str() << endl;
......
...@@ -47,7 +47,7 @@ maxAttemtps(conf->getPIntField("ConsumerMaxAttempts", 5)) ...@@ -47,7 +47,7 @@ maxAttemtps(conf->getPIntField("ConsumerMaxAttempts", 5))
} }
IONotifyController::IONotifyController(const string& name, const string& section, NCRestorer* d ): IONotifyController::IONotifyController(const string& name, const string& section, NCRestorer* d ):
IOController(name, section), IOController(name, section),
restorer(d), restorer(d),
askIOMutex(name+"askIOMutex"), askIOMutex(name+"askIOMutex"),
...@@ -147,11 +147,11 @@ void IONotifyController::askSensor(const UniSetTypes::ObjectId sid, ...@@ -147,11 +147,11 @@ void IONotifyController::askSensor(const UniSetTypes::ObjectId sid,
{ // lock { // lock
uniset_rwmutex_wrlock lock(askIOMutex); uniset_rwmutex_wrlock lock(askIOMutex);
// а раз есть заносим(исключаем) заказчика // а раз есть заносим(исключаем) заказчика
ask(askIOList, sid, ci, cmd); ask(askIOList, sid, ci, cmd);
} // unlock } // unlock
// посылка первый раз состояния // посылка первый раз состояния
if( cmd==UniversalIO::UIONotify || (cmd==UIONotifyFirstNotNull && li->second.value) ) if( cmd==UniversalIO::UIONotify || (cmd==UIONotifyFirstNotNull && li->second.value) )
{ {
SensorMessage smsg; SensorMessage smsg;
...@@ -159,7 +159,7 @@ void IONotifyController::askSensor(const UniSetTypes::ObjectId sid, ...@@ -159,7 +159,7 @@ void IONotifyController::askSensor(const UniSetTypes::ObjectId sid,
smsg.node = conf->getLocalNode(); smsg.node = conf->getLocalNode();
smsg.consumer = ci.id; smsg.consumer = ci.id;
smsg.supplier = getId(); smsg.supplier = getId();
smsg.sensor_type = li->second.type; smsg.sensor_type = li->second.type;
smsg.priority = (Message::Priority)li->second.priority; smsg.priority = (Message::Priority)li->second.priority;
smsg.sm_tv_sec = li->second.tv_sec; smsg.sm_tv_sec = li->second.tv_sec;
smsg.sm_tv_usec = li->second.tv_usec; smsg.sm_tv_usec = li->second.tv_usec;
...@@ -182,7 +182,7 @@ void IONotifyController::askSensor(const UniSetTypes::ObjectId sid, ...@@ -182,7 +182,7 @@ void IONotifyController::askSensor(const UniSetTypes::ObjectId sid,
} }
catch( CORBA::SystemException& ex ) catch( CORBA::SystemException& ex )
{ {
uwarn << myname << "(askSensor): " << conf->oind->getNameById(ci.id) << "@" << ci.node uwarn << myname << "(askSensor): " << conf->oind->getNameById(ci.id) << "@" << ci.node
<< " недоступен!!(CORBA::SystemException): " << " недоступен!!(CORBA::SystemException): "
<< ex.NP_minorString() << endl; << ex.NP_minorString() << endl;
} }
...@@ -195,10 +195,10 @@ void IONotifyController::askSensor(const UniSetTypes::ObjectId sid, ...@@ -195,10 +195,10 @@ void IONotifyController::askSensor(const UniSetTypes::ObjectId sid,
} }
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
void IONotifyController::ask( AskMap& askLst, const UniSetTypes::ObjectId sid, void IONotifyController::ask( AskMap& askLst, const UniSetTypes::ObjectId sid,
const UniSetTypes::ConsumerInfo& cons, UniversalIO::UIOCommand cmd) const UniSetTypes::ConsumerInfo& cons, UniversalIO::UIOCommand cmd)
{ {
// поиск датчика в списке // поиск датчика в списке
auto askIterator = askLst.find(sid); auto askIterator = askLst.find(sid);
switch (cmd) switch (cmd)
...@@ -256,7 +256,7 @@ void IONotifyController::ask( AskMap& askLst, const UniSetTypes::ObjectId sid, ...@@ -256,7 +256,7 @@ void IONotifyController::ask( AskMap& askLst, const UniSetTypes::ObjectId sid,
uniset_rwmutex_wrlock l(askIterator->second.mut); uniset_rwmutex_wrlock l(askIterator->second.mut);
if( askIterator->second.clst.empty() ) if( askIterator->second.clst.empty() )
{ {
// не удаляем, т.к. могут поломаться итераторы // не удаляем, т.к. могут поломаться итераторы
// используемые в это время в других потоках.. // используемые в это время в других потоках..
// askLst.erase(askIterator); // askLst.erase(askIterator);
} }
...@@ -285,7 +285,7 @@ void IONotifyController::ask( AskMap& askLst, const UniSetTypes::ObjectId sid, ...@@ -285,7 +285,7 @@ void IONotifyController::ask( AskMap& askLst, const UniSetTypes::ObjectId sid,
} }
} }
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
bool IONotifyController::myIOFilter( const USensorInfo& ai, bool IONotifyController::myIOFilter( const USensorInfo& ai,
CORBA::Long newvalue, UniSetTypes::ObjectId sup_id ) CORBA::Long newvalue, UniSetTypes::ObjectId sup_id )
{ {
if( ai.value == newvalue ) if( ai.value == newvalue )
...@@ -307,7 +307,7 @@ void IONotifyController::localSetValue( IOController::IOStateList::iterator& li, ...@@ -307,7 +307,7 @@ void IONotifyController::localSetValue( IOController::IOStateList::iterator& li,
} }
catch( IOController_i::Undefined ) catch( IOController_i::Undefined )
{ {
// чтобы сработало prevValue!=value // чтобы сработало prevValue!=value
// искусственно меняем значение // искусственно меняем значение
prevValue = value+1; prevValue = value+1;
} }
...@@ -316,7 +316,7 @@ void IONotifyController::localSetValue( IOController::IOStateList::iterator& li, ...@@ -316,7 +316,7 @@ void IONotifyController::localSetValue( IOController::IOStateList::iterator& li,
if( li == myioEnd() ) // ??? if( li == myioEnd() ) // ???
{ {
ostringstream err; ostringstream err;
err << myname << "(localSetValue): вход(выход) с именем " err << myname << "(localSetValue): вход(выход) с именем "
<< conf->oind->getNameById(sid) << " не найден"; << conf->oind->getNameById(sid) << " не найден";
uinfo << err.str() << endl; uinfo << err.str() << endl;
...@@ -412,7 +412,7 @@ void IONotifyController::send( ConsumerListInfo& lst, UniSetTypes::SensorMessage ...@@ -412,7 +412,7 @@ void IONotifyController::send( ConsumerListInfo& lst, UniSetTypes::SensorMessage
} }
catch( CORBA::SystemException& ex ) catch( CORBA::SystemException& ex )
{ {
uwarn << myname << "(IONotifyController::send): " uwarn << myname << "(IONotifyController::send): "
<< conf->oind->getNameById(li->id) << "@" << li->node << " (CORBA::SystemException): " << conf->oind->getNameById(li->id) << "@" << li->node << " (CORBA::SystemException): "
<< ex.NP_minorString() << endl; << ex.NP_minorString() << endl;
} }
...@@ -456,7 +456,7 @@ void IONotifyController::readDump() ...@@ -456,7 +456,7 @@ void IONotifyController::readDump()
restorer->read(this); restorer->read(this);
} }
catch(Exception& ex) catch(Exception& ex)
{ {
uwarn << myname << "(IONotifyController::readDump): " << ex << endl; uwarn << myname << "(IONotifyController::readDump): " << ex << endl;
} }
} }
...@@ -502,15 +502,15 @@ void IONotifyController::dumpThresholdList( const UniSetTypes::ObjectId sid, con ...@@ -502,15 +502,15 @@ void IONotifyController::dumpThresholdList( const UniSetTypes::ObjectId sid, con
restorer->dumpThreshold(this,inf,lst); restorer->dumpThreshold(this,inf,lst);
} }
catch(Exception& ex) catch(Exception& ex)
{ {
uwarn << myname << "(IONotifyController::dumpThresholdList): " << ex << endl; uwarn << myname << "(IONotifyController::dumpThresholdList): " << ex << endl;
} }
} }
// -------------------------------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------------------------------
void IONotifyController::askThreshold(UniSetTypes::ObjectId sid, const UniSetTypes::ConsumerInfo& ci, void IONotifyController::askThreshold(UniSetTypes::ObjectId sid, const UniSetTypes::ConsumerInfo& ci,
UniSetTypes::ThresholdId tid, UniSetTypes::ThresholdId tid,
CORBA::Long lowLimit, CORBA::Long hiLimit, CORBA::Boolean invert, CORBA::Long lowLimit, CORBA::Long hiLimit, CORBA::Boolean invert,
UniversalIO::UIOCommand cmd ) UniversalIO::UIOCommand cmd )
{ {
if( lowLimit > hiLimit ) if( lowLimit > hiLimit )
...@@ -529,7 +529,7 @@ void IONotifyController::askThreshold(UniSetTypes::ObjectId sid, const UniSetTyp ...@@ -529,7 +529,7 @@ void IONotifyController::askThreshold(UniSetTypes::ObjectId sid, const UniSetTyp
{ // lock { // lock
uniset_rwmutex_wrlock lock(trshMutex); uniset_rwmutex_wrlock lock(trshMutex);
// поиск датчика в списке // поиск датчика в списке
auto it = askTMap.find(sid); auto it = askTMap.find(sid);
ThresholdInfoExt ti(tid,lowLimit,hiLimit,invert); ThresholdInfoExt ti(tid,lowLimit,hiLimit,invert);
...@@ -590,7 +590,7 @@ void IONotifyController::askThreshold(UniSetTypes::ObjectId sid, const UniSetTyp ...@@ -590,7 +590,7 @@ void IONotifyController::askThreshold(UniSetTypes::ObjectId sid, const UniSetTyp
if( cmd == UniversalIO::UIONotifyChange ) if( cmd == UniversalIO::UIONotifyChange )
break; break;
// посылка первый раз состояния // посылка первый раз состояния
try try
{ {
SensorMessage sm; SensorMessage sm;
...@@ -666,11 +666,11 @@ void IONotifyController::askThreshold(UniSetTypes::ObjectId sid, const UniSetTyp ...@@ -666,11 +666,11 @@ void IONotifyController::askThreshold(UniSetTypes::ObjectId sid, const UniSetTyp
break; break;
} }
} // unlock } // unlock
} }
// -------------------------------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------------------------------
bool IONotifyController::addThreshold( ThresholdExtList& lst, ThresholdInfoExt&& ti, const UniSetTypes::ConsumerInfo& ci ) bool IONotifyController::addThreshold( ThresholdExtList& lst, ThresholdInfoExt&& ti, const UniSetTypes::ConsumerInfo& ci )
{ {
for( auto it=lst.begin(); it!=lst.end(); ++it) for( auto it=lst.begin(); it!=lst.end(); ++it)
{ {
if( ti==(*it) ) if( ti==(*it) )
{ {
...@@ -686,7 +686,7 @@ bool IONotifyController::addThreshold( ThresholdExtList& lst, ThresholdInfoExt&& ...@@ -686,7 +686,7 @@ bool IONotifyController::addThreshold( ThresholdExtList& lst, ThresholdInfoExt&&
// запоминаем начальное время // запоминаем начальное время
struct timeval tm; struct timeval tm;
struct timezone tz; struct timezone tz;
tm.tv_sec = 0; tm.tv_sec = 0;
tm.tv_usec = 0; tm.tv_usec = 0;
gettimeofday(&tm,&tz); gettimeofday(&tm,&tz);
ti.tv_sec = tm.tv_sec; ti.tv_sec = tm.tv_sec;
...@@ -698,7 +698,7 @@ bool IONotifyController::addThreshold( ThresholdExtList& lst, ThresholdInfoExt&& ...@@ -698,7 +698,7 @@ bool IONotifyController::addThreshold( ThresholdExtList& lst, ThresholdInfoExt&&
// -------------------------------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------------------------------
bool IONotifyController::removeThreshold( ThresholdExtList& lst, ThresholdInfoExt& ti, const UniSetTypes::ConsumerInfo& ci ) bool IONotifyController::removeThreshold( ThresholdExtList& lst, ThresholdInfoExt& ti, const UniSetTypes::ConsumerInfo& ci )
{ {
for( auto it=lst.begin(); it!=lst.end(); ++it) for( auto it=lst.begin(); it!=lst.end(); ++it)
{ {
if( ti == (*it) ) if( ti == (*it) )
{ {
...@@ -763,7 +763,7 @@ void IONotifyController::checkThreshold( IOStateList::iterator& li, ...@@ -763,7 +763,7 @@ void IONotifyController::checkThreshold( IOStateList::iterator& li,
{ {
uniset_rwmutex_rlock l(lst->second.mut); uniset_rwmutex_rlock l(lst->second.mut);
for( auto it=lst->second.list.begin(); it!=lst->second.list.end(); ++it ) for( auto it=lst->second.list.begin(); it!=lst->second.list.end(); ++it )
{ {
// Используем здесь значение скопированное в sm.value // Используем здесь значение скопированное в sm.value
// чтобы не делать ещё раз lock на li->second.value // чтобы не делать ещё раз lock на li->second.value
...@@ -833,7 +833,7 @@ IONotifyController::ThresholdExtList::iterator IONotifyController::findThreshold ...@@ -833,7 +833,7 @@ IONotifyController::ThresholdExtList::iterator IONotifyController::findThreshold
if( lst!=askTMap.end() ) if( lst!=askTMap.end() )
{ {
for( auto it=lst->second.list.begin(); it!=lst->second.list.end(); ++it) for( auto it=lst->second.list.begin(); it!=lst->second.list.end(); ++it)
{ {
if( it->id == tid ) if( it->id == tid )
return it; return it;
...@@ -852,7 +852,7 @@ IONotifyController_i::ThresholdInfo IONotifyController::getThresholdInfo( UniSet ...@@ -852,7 +852,7 @@ IONotifyController_i::ThresholdInfo IONotifyController::getThresholdInfo( UniSet
if( it == askTMap.end() ) if( it == askTMap.end() )
{ {
ostringstream err; ostringstream err;
err << myname << "(getThresholds): Not found sensor (" << sid << ") " err << myname << "(getThresholds): Not found sensor (" << sid << ") "
<< conf->oind->getNameById(sid); << conf->oind->getNameById(sid);
uinfo << err.str() << endl; uinfo << err.str() << endl;
...@@ -866,7 +866,7 @@ IONotifyController_i::ThresholdInfo IONotifyController::getThresholdInfo( UniSet ...@@ -866,7 +866,7 @@ IONotifyController_i::ThresholdInfo IONotifyController::getThresholdInfo( UniSet
} }
ostringstream err; ostringstream err;
err << myname << "(getThresholds): Not found for sensor (" << sid << ") " err << myname << "(getThresholds): Not found for sensor (" << sid << ") "
<< conf->oind->getNameById(sid) << " ThresholdID='" << tid << "'"; << conf->oind->getNameById(sid) << " ThresholdID='" << tid << "'";
uinfo << err.str() << endl; uinfo << err.str() << endl;
...@@ -881,7 +881,7 @@ IONotifyController_i::ThresholdList* IONotifyController::getThresholds( UniSetTy ...@@ -881,7 +881,7 @@ IONotifyController_i::ThresholdList* IONotifyController::getThresholds( UniSetTy
if( it == askTMap.end() ) if( it == askTMap.end() )
{ {
ostringstream err; ostringstream err;
err << myname << "(getThresholds): Not found sensor (" << sid << ") " err << myname << "(getThresholds): Not found sensor (" << sid << ") "
<< conf->oind->getNameById(sid); << conf->oind->getNameById(sid);
uinfo << err.str() << endl; uinfo << err.str() << endl;
...@@ -898,7 +898,7 @@ IONotifyController_i::ThresholdList* IONotifyController::getThresholds( UniSetTy ...@@ -898,7 +898,7 @@ IONotifyController_i::ThresholdList* IONotifyController::getThresholds( UniSetTy
} }
catch( Exception& ex ) catch( Exception& ex )
{ {
uwarn << myname << "(getThresholdsList): для датчика " uwarn << myname << "(getThresholdsList): для датчика "
<< conf->oind->getNameById(it->second.si.id) << conf->oind->getNameById(it->second.si.id)
<< " " << ex << endl; << " " << ex << endl;
} }
...@@ -940,7 +940,7 @@ IONotifyController_i::ThresholdsListSeq* IONotifyController::getThresholdsList() ...@@ -940,7 +940,7 @@ IONotifyController_i::ThresholdsListSeq* IONotifyController::getThresholdsList()
} }
catch(Exception& ex) catch(Exception& ex)
{ {
uwarn << myname << "(getThresholdsList): для датчика " uwarn << myname << "(getThresholdsList): для датчика "
<< conf->oind->getNameById(it->second.si.id) << conf->oind->getNameById(it->second.si.id)
<< " " << ex << endl; << " " << ex << endl;
continue; continue;
...@@ -972,7 +972,7 @@ void IONotifyController::onChangeUndefinedState( IOStateList::iterator& lit, IOC ...@@ -972,7 +972,7 @@ void IONotifyController::onChangeUndefinedState( IOStateList::iterator& lit, IOC
SensorMessage sm; SensorMessage sm;
// эти поля можно копировать без lock, т.к. они не меняются // эти поля можно копировать без lock, т.к. они не меняются
sm.id = it.si.id; sm.id = it.si.id;
sm.node = it.si.node; sm.node = it.si.node;
sm.undefined = it.undefined; sm.undefined = it.undefined;
sm.priority = (Message::Priority)it.priority; sm.priority = (Message::Priority)it.priority;
......
...@@ -49,12 +49,12 @@ IONotifyController_LT::~IONotifyController_LT() ...@@ -49,12 +49,12 @@ IONotifyController_LT::~IONotifyController_LT()
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
void IONotifyController_LT::callback() void IONotifyController_LT::callback()
{ {
// При реализации с использованием waitMessage() каждый раз при вызове askTimer() необходимо // При реализации с использованием waitMessage() каждый раз при вызове askTimer() необходимо
// проверять возвращаемое значение на UniSetTimers::WaitUpTime и вызывать termWaiting(), // проверять возвращаемое значение на UniSetTimers::WaitUpTime и вызывать termWaiting(),
// чтобы избежать ситуации, когда процесс до заказа таймера 'спал'(в функции waitMessage()) и после // чтобы избежать ситуации, когда процесс до заказа таймера 'спал'(в функции waitMessage()) и после
// заказа продолжит спать(т.е. обработчик вызван не будет)... // заказа продолжит спать(т.е. обработчик вызван не будет)...
try try
{ {
if( waitMessage(msg, sleepTime) ) if( waitMessage(msg, sleepTime) )
processingMessage(&msg); processingMessage(&msg);
......
...@@ -96,13 +96,13 @@ void NCRestorer_XML::init( const std::string& fname ) ...@@ -96,13 +96,13 @@ void NCRestorer_XML::init( const std::string& fname )
} }
} }
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
void NCRestorer_XML::dump(const IONotifyController* ic, SInfo& inf, void NCRestorer_XML::dump(const IONotifyController* ic, SInfo& inf,
const IONotifyController::ConsumerListInfo& lst) const IONotifyController::ConsumerListInfo& lst)
{ {
uwarn << "NCRestorer_XML::dump NOT SUPPORT!!!!" << endl; uwarn << "NCRestorer_XML::dump NOT SUPPORT!!!!" << endl;
} }
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
void NCRestorer_XML::dumpThreshold(const IONotifyController* ic, SInfo& inf, void NCRestorer_XML::dumpThreshold(const IONotifyController* ic, SInfo& inf,
const IONotifyController::ThresholdExtList& lst) const IONotifyController::ThresholdExtList& lst)
{ {
uwarn << "NCRestorer_XML::dumpThreshold NOT SUPPORT!!!!" << endl; uwarn << "NCRestorer_XML::dumpThreshold NOT SUPPORT!!!!" << endl;
...@@ -312,7 +312,7 @@ bool NCRestorer_XML::getSensorInfo( const UniXML& xml, xmlNode* it, SInfo& inf ) ...@@ -312,7 +312,7 @@ bool NCRestorer_XML::getSensorInfo( const UniXML& xml, xmlNode* it, SInfo& inf )
inf.d_si.id = conf->getSensorID(d_txt); inf.d_si.id = conf->getSensorID(d_txt);
if( inf.d_si.id == UniSetTypes::DefaultObjectId ) if( inf.d_si.id == UniSetTypes::DefaultObjectId )
{ {
ucrit << "(NCRestorer_XML:getSensorInfo): sensor='" ucrit << "(NCRestorer_XML:getSensorInfo): sensor='"
<< xml.getProp(it,"name") << "' err: " << xml.getProp(it,"name") << "' err: "
<< " Unknown SensorID for depend='" << d_txt << " Unknown SensorID for depend='" << d_txt
<< endl; << endl;
...@@ -343,7 +343,7 @@ void NCRestorer_XML::read_thresholds(const UniXML& xml, xmlNode* node, IONotifyC ...@@ -343,7 +343,7 @@ void NCRestorer_XML::read_thresholds(const UniXML& xml, xmlNode* node, IONotifyC
NCRestorer_XML::SInfo inf; NCRestorer_XML::SInfo inf;
if( !getSensorInfo(xml,it.getCurrent(),inf) ) if( !getSensorInfo(xml,it.getCurrent(),inf) )
{ {
uwarn << ic->getName() uwarn << ic->getName()
<< "(read_thresholds): не смог получить информацию по датчику" << endl; << "(read_thresholds): не смог получить информацию по датчику" << endl;
continue; continue;
} }
...@@ -360,17 +360,17 @@ void NCRestorer_XML::read_thresholds(const UniXML& xml, xmlNode* node, IONotifyC ...@@ -360,17 +360,17 @@ void NCRestorer_XML::read_thresholds(const UniXML& xml, xmlNode* node, IONotifyC
IONotifyController::ThresholdInfoExt ti(0,0,0,0); IONotifyController::ThresholdInfoExt ti(0,0,0,0);
if( !getThresholdInfo(xml,tit,ti) ) if( !getThresholdInfo(xml,tit,ti) )
{ {
uwarn << ic->getName() uwarn << ic->getName()
<< "(read_thresholds): не смог получить информацию о пороге" << "(read_thresholds): не смог получить информацию о пороге"
<< " для датчика " << " для датчика "
<< conf->oind->getNameById(inf.si.id) << endl; << conf->oind->getNameById(inf.si.id) << endl;
continue; continue;
} }
uinfo << "(read_thresholds): \tthreshold low=" uinfo << "(read_thresholds): \tthreshold low="
<< ti.lowlimit << " \thi=" << ti.hilimit << ti.lowlimit << " \thi=" << ti.hilimit
<< " \t sid=" << ti.sid << " \t sid=" << ti.sid
<< " \t invert=" << ti.invert << " \t invert=" << ti.invert
<< endl << flush; << endl << flush;
xmlNode* cnode = find_node(xml,tit,"consumers",""); xmlNode* cnode = find_node(xml,tit,"consumers","");
...@@ -381,9 +381,9 @@ void NCRestorer_XML::read_thresholds(const UniXML& xml, xmlNode* node, IONotifyC ...@@ -381,9 +381,9 @@ void NCRestorer_XML::read_thresholds(const UniXML& xml, xmlNode* node, IONotifyC
{ {
if( !getConsumerList(xml,ask_it,ti.clst) ) if( !getConsumerList(xml,ask_it,ti.clst) )
{ {
uwarn << ic->getName() uwarn << ic->getName()
<< "(read_thresholds): не смог получить список заказчиков" << "(read_thresholds): не смог получить список заказчиков"
<< " для порога " << ti.id << " для порога " << ti.id
<< " датчика " << conf->oind->getNameById(inf.si.id) << endl; << " датчика " << conf->oind->getNameById(inf.si.id) << endl;
} }
} }
...@@ -399,7 +399,7 @@ void NCRestorer_XML::read_thresholds(const UniXML& xml, xmlNode* node, IONotifyC ...@@ -399,7 +399,7 @@ void NCRestorer_XML::read_thresholds(const UniXML& xml, xmlNode* node, IONotifyC
} }
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
void NCRestorer_XML::read_consumers( const UniXML& xml, xmlNode* it, void NCRestorer_XML::read_consumers( const UniXML& xml, xmlNode* it,
NCRestorer_XML::SInfo&& inf, IONotifyController* ic ) NCRestorer_XML::SInfo&& inf, IONotifyController* ic )
{ {
// в новых ask-файлах список выделен <consumers>...</consumers>, // в новых ask-файлах список выделен <consumers>...</consumers>,
...@@ -417,7 +417,7 @@ void NCRestorer_XML::read_consumers( const UniXML& xml, xmlNode* it, ...@@ -417,7 +417,7 @@ void NCRestorer_XML::read_consumers( const UniXML& xml, xmlNode* it,
} }
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
bool NCRestorer_XML::getConsumerList( const UniXML& xml, xmlNode* node, bool NCRestorer_XML::getConsumerList( const UniXML& xml, xmlNode* node,
IONotifyController::ConsumerListInfo& lst ) IONotifyController::ConsumerListInfo& lst )
{ {
UniXML_iterator it(node); UniXML_iterator it(node);
...@@ -439,7 +439,7 @@ bool NCRestorer_XML::getConsumerList( const UniXML& xml, xmlNode* node, ...@@ -439,7 +439,7 @@ bool NCRestorer_XML::getConsumerList( const UniXML& xml, xmlNode* node,
} }
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
bool NCRestorer_XML::getThresholdInfo( const UniXML& xml,xmlNode* node, bool NCRestorer_XML::getThresholdInfo( const UniXML& xml,xmlNode* node,
IONotifyController::ThresholdInfoExt& ti ) IONotifyController::ThresholdInfoExt& ti )
{ {
UniXML_iterator uit(node); UniXML_iterator uit(node);
...@@ -450,7 +450,7 @@ bool NCRestorer_XML::getThresholdInfo( const UniXML& xml,xmlNode* node, ...@@ -450,7 +450,7 @@ bool NCRestorer_XML::getThresholdInfo( const UniXML& xml,xmlNode* node,
ti.sid = conf->getSensorID(sid_name); ti.sid = conf->getSensorID(sid_name);
if( ti.sid == UniSetTypes::DefaultObjectId ) if( ti.sid == UniSetTypes::DefaultObjectId )
{ {
ucrit << "(NCRestorer_XML:getThresholdInfo): " ucrit << "(NCRestorer_XML:getThresholdInfo): "
<< " Not found ID for " << sid_name << endl; << " Not found ID for " << sid_name << endl;
} }
else else
......
...@@ -71,7 +71,7 @@ void PassiveSysTimer::init() ...@@ -71,7 +71,7 @@ void PassiveSysTimer::init()
{ {
cerr << "PassiveSysTimer: error sigaction" << endl; cerr << "PassiveSysTimer: error sigaction" << endl;
throw NotSetSignal("PassiveTimer: errir sigaction"); throw NotSetSignal("PassiveTimer: errir sigaction");
} }
*/ */
} }
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
...@@ -101,7 +101,7 @@ bool PassiveSysTimer::wait(timeout_t timeMS) ...@@ -101,7 +101,7 @@ bool PassiveSysTimer::wait(timeout_t timeMS)
{ {
cerr << "PassiveSysTimer: error sigaction" << endl; cerr << "PassiveSysTimer: error sigaction" << endl;
return false; return false;
} }
// if ( !terminated ) // if ( !terminated )
...@@ -110,7 +110,7 @@ bool PassiveSysTimer::wait(timeout_t timeMS) ...@@ -110,7 +110,7 @@ bool PassiveSysTimer::wait(timeout_t timeMS)
timeout_t sec; timeout_t sec;
timeout_t msec; timeout_t msec;
if (timeMS == WaitUpTime) if (timeMS == WaitUpTime)
{ {
sec=15*60; // 15min sec=15*60; // 15min
...@@ -129,7 +129,7 @@ bool PassiveSysTimer::wait(timeout_t timeMS) ...@@ -129,7 +129,7 @@ bool PassiveSysTimer::wait(timeout_t timeMS)
setitimer( ITIMER_REAL, &mtimer, (struct itimerval *)0 ); setitimer( ITIMER_REAL, &mtimer, (struct itimerval *)0 );
PassiveTimer::setTiming(timeMS); // вызываем для совместимости с обычным PassiveTimer-ом PassiveTimer::setTiming(timeMS); // вызываем для совместимости с обычным PassiveTimer-ом
sigset_t mask, oldmask; sigset_t mask, oldmask;
sigemptyset(&mask); sigemptyset(&mask);
...@@ -146,7 +146,7 @@ bool PassiveSysTimer::wait(timeout_t timeMS) ...@@ -146,7 +146,7 @@ bool PassiveSysTimer::wait(timeout_t timeMS)
terminated = 1; terminated = 1;
sigprocmask( SIG_UNBLOCK, &mask, NULL ); sigprocmask( SIG_UNBLOCK, &mask, NULL );
// cout << "PassiveSysTimer: time ok"<< endl; // cout << "PassiveSysTimer: time ok"<< endl;
return true; return true;
} }
...@@ -158,21 +158,21 @@ bool PassiveSysTimer::wait(timeout_t timeMS) ...@@ -158,21 +158,21 @@ bool PassiveSysTimer::wait(timeout_t timeMS)
struct itimerspec val; struct itimerspec val;
struct tm do_time; struct tm do_time;
timer_t t_id; timer_t t_id;
sigemptyset(&sigv.sa_mask); sigemptyset(&sigv.sa_mask);
sigv.sa_flags = SA_SIGINFO; sigv.sa_flags = SA_SIGINFO;
sigv.sa_sigaction = call; sigv.sa_sigaction = call;
if (sigaction (SIGUSR1, &sigv, 0) == -1) if (sigaction (SIGUSR1, &sigv, 0) == -1)
{ {
cerr << "Timer: sigaction" << endl; cerr << "Timer: sigaction" << endl;
return -1; return -1;
} }
sigx.sigev_notify = SIGEV_SIGNAL; sigx.sigev_notify = SIGEV_SIGNAL;
sigx.sigev_signo = SIGUSR1; sigx.sigev_signo = SIGUSR1;
sigx.sigev_value.sival_int = timeMS; sigx.sigev_value.sival_int = timeMS;
if ( timer_create(CLOCK_REALTIME, &sigx, &t_id) == -1 ) if ( timer_create(CLOCK_REALTIME, &sigx, &t_id) == -1 )
{ {
cerr << "Timer: timer create" << endl; cerr << "Timer: timer create" << endl;
...@@ -181,7 +181,7 @@ bool PassiveSysTimer::wait(timeout_t timeMS) ...@@ -181,7 +181,7 @@ bool PassiveSysTimer::wait(timeout_t timeMS)
int sec=timeMS/1000; int sec=timeMS/1000;
int micsec=(timeMS%1000)*1000; int micsec=(timeMS%1000)*1000;
val.it_value.tv_sec = sec; val.it_value.tv_sec = sec;
val.it_value.tv_nsec= micsec; val.it_value.tv_nsec= micsec;
val.it_interval.tv_sec = sec; val.it_interval.tv_sec = sec;
...@@ -197,6 +197,6 @@ bool PassiveSysTimer::wait(timeout_t timeMS) ...@@ -197,6 +197,6 @@ bool PassiveSysTimer::wait(timeout_t timeMS)
{ {
cerr << "Timer: timer delete" << endl; cerr << "Timer: timer delete" << endl;
} }
return 0; return 0;
*/ */
...@@ -37,10 +37,10 @@ void WaitingPassiveTimer::checkCount() ...@@ -37,10 +37,10 @@ void WaitingPassiveTimer::checkCount()
{ {
char err[200]; char err[200];
sprintf(err,"LimitThrPassiveTimers: превышено максимальное количество таймеров %d", MAX_COUNT_THRPASSIVE_TIMERS); sprintf(err,"LimitThrPassiveTimers: превышено максимальное количество таймеров %d", MAX_COUNT_THRPASSIVE_TIMERS);
throw LimitWaitingPTimers(err); throw LimitWaitingPTimers(err);
} }
countTimers++; countTimers++;
} }
WaitingPassiveTimer::WaitingPassiveTimer()throw(LimitWaitingPTimers): WaitingPassiveTimer::WaitingPassiveTimer()throw(LimitWaitingPTimers):
...@@ -86,26 +86,26 @@ void WaitingPassiveTimer::work() ...@@ -86,26 +86,26 @@ void WaitingPassiveTimer::work()
terminated = false; terminated = false;
while( !terminated ) while( !terminated )
{ {
usleep(sleepMKS); usleep(sleepMKS);
if ( checkTime() ) if ( checkTime() )
break; break;
} }
terminated = true; terminated = true;
if(pValue != NULL) if(pValue != NULL)
*pValue ^= true; *pValue ^= true;
/* /*
if(pCall!=NULL) if(pCall!=NULL)
{ {
pCall(); pCall();
} }
*/ */
/* /*
check = false; check = false;
pause(); pause();
check = true; check = true;
*/ */
stop(); stop();
// cout << "Timer: завершил поток..."<< endl; // cout << "Timer: завершил поток..."<< endl;
} }
......
...@@ -66,7 +66,7 @@ ostream& UniSetTypes::Configuration::help(ostream& os) ...@@ -66,7 +66,7 @@ ostream& UniSetTypes::Configuration::help(ostream& os)
print_help(os,25,"--uniport num","использовать заданный порт (переопеределяет 'defaultport' заданный в конф. файле в разделе <nodes>)\n"); print_help(os,25,"--uniport num","использовать заданный порт (переопеределяет 'defaultport' заданный в конф. файле в разделе <nodes>)\n");
print_help(os,25,"--localIOR {1,0}","использовать локальные файлы для получения IOR (т.е. не использовать omniNames). Переопределяет параметр в конфигурационном файле.\n"); print_help(os,25,"--localIOR {1,0}","использовать локальные файлы для получения IOR (т.е. не использовать omniNames). Переопределяет параметр в конфигурационном файле.\n");
print_help(os,25,"--transientIOR {1,0}","использовать генерируемые IOR(не постоянные). Переопределяет параметр в конфигурационном файле. Default=1\n"); print_help(os,25,"--transientIOR {1,0}","использовать генерируемые IOR(не постоянные). Переопределяет параметр в конфигурационном файле. Default=1\n");
return os << "\nПример использования:\t myUniSetProgram " return os << "\nПример использования:\t myUniSetProgram "
<< "--ulog-add-levels level1,info,system,warn --ulog-log-in-file myprogrpam.log\n\n"; << "--ulog-add-levels level1,info,system,warn --ulog-log-in-file myprogrpam.log\n\n";
} }
...@@ -80,7 +80,7 @@ namespace UniSetTypes ...@@ -80,7 +80,7 @@ namespace UniSetTypes
Configuration::Configuration(): Configuration::Configuration():
oind(NULL), oind(NULL),
NSName("NameService"), NSName("NameService"),
repeatCount(2),repeatTimeout(100), repeatCount(2),repeatTimeout(100),
localDBServer(UniSetTypes::DefaultObjectId), localDBServer(UniSetTypes::DefaultObjectId),
localNode(UniSetTypes::DefaultObjectId), localNode(UniSetTypes::DefaultObjectId),
localNodeName(""), localNodeName(""),
...@@ -124,7 +124,7 @@ Configuration::Configuration( int argc, const char* const* argv, ObjectIndex* _o ...@@ -124,7 +124,7 @@ Configuration::Configuration( int argc, const char* const* argv, ObjectIndex* _o
_argc(argc), _argc(argc),
_argv(argv), _argv(argv),
NSName("NameService"), NSName("NameService"),
repeatCount(2),repeatTimeout(100), repeatCount(2),repeatTimeout(100),
localDBServer(UniSetTypes::DefaultObjectId), localDBServer(UniSetTypes::DefaultObjectId),
localNode(UniSetTypes::DefaultObjectId), localNode(UniSetTypes::DefaultObjectId),
localNodeName(""), localNodeName(""),
...@@ -143,7 +143,7 @@ Configuration::Configuration( int argc, const char* const* argv, const string& f ...@@ -143,7 +143,7 @@ Configuration::Configuration( int argc, const char* const* argv, const string& f
_argc(argc), _argc(argc),
_argv(argv), _argv(argv),
NSName("NameService"), NSName("NameService"),
repeatCount(2),repeatTimeout(100), repeatCount(2),repeatTimeout(100),
localDBServer(UniSetTypes::DefaultObjectId), localDBServer(UniSetTypes::DefaultObjectId),
localNode(UniSetTypes::DefaultObjectId), localNode(UniSetTypes::DefaultObjectId),
localNodeName(""), localNodeName(""),
...@@ -203,7 +203,7 @@ void Configuration::initConfiguration( int argc, const char* const* argv ) ...@@ -203,7 +203,7 @@ void Configuration::initConfiguration( int argc, const char* const* argv )
// cerr << "*************** initConfiguration: xmlOpen: " << pt.getCurrent() << " msec " << endl; // cerr << "*************** initConfiguration: xmlOpen: " << pt.getCurrent() << " msec " << endl;
// pt.reset(); // pt.reset();
// Init ObjectIndex interface // Init ObjectIndex interface
{ {
if( oind == NULL ) if( oind == NULL )
...@@ -229,7 +229,7 @@ void Configuration::initConfiguration( int argc, const char* const* argv ) ...@@ -229,7 +229,7 @@ void Configuration::initConfiguration( int argc, const char* const* argv )
} }
} }
} }
// Настраиваем отладочные логи // Настраиваем отладочные логи
initDebug(ulog,"UniSetDebug"); initDebug(ulog,"UniSetDebug");
...@@ -294,7 +294,7 @@ void Configuration::initConfiguration( int argc, const char* const* argv ) ...@@ -294,7 +294,7 @@ void Configuration::initConfiguration( int argc, const char* const* argv )
ostringstream uri; ostringstream uri;
uri << "corbaname::" << it.host << ":" << it.port; uri << "corbaname::" << it.host << ":" << it.port;
if( !omni::omniInitialReferences::setFromArgs(name.c_str(), uri.str().c_str()) ) if( !omni::omniInitialReferences::setFromArgs(name.c_str(), uri.str().c_str()) )
cerr << "**********************!!!! FAILED ADD name=" << name << " uri=" << uri.str() << endl; cerr << "**********************!!!! FAILED ADD name=" << name << " uri=" << uri.str() << endl;
assert( i < _argc ); assert( i < _argc );
} }
...@@ -329,12 +329,12 @@ void Configuration::initConfiguration( int argc, const char* const* argv ) ...@@ -329,12 +329,12 @@ void Configuration::initConfiguration( int argc, const char* const* argv )
ostringstream uri; ostringstream uri;
uri << "corbaname::" << getProp(nsnode,"host") << ":" << defPort; uri << "corbaname::" << getProp(nsnode,"host") << ":" << defPort;
if( !omni::omniInitialReferences::setFromArgs(ns_name.str().c_str(), uri.str().c_str()) ) if( !omni::omniInitialReferences::setFromArgs(ns_name.str().c_str(), uri.str().c_str()) )
cerr << "**********************!!!! FAILED ADD name=" <<ns_name << " uri=" << uri.str() << endl; cerr << "**********************!!!! FAILED ADD name=" <<ns_name << " uri=" << uri.str() << endl;
} }
} }
_argv = new_argv; _argv = new_argv;
// ------------- CORBA INIT ------------- // ------------- CORBA INIT -------------
// orb init // orb init
orb = CORBA::ORB_init(_argc,(char**)_argv); orb = CORBA::ORB_init(_argc,(char**)_argv);
// create policy // create policy
...@@ -357,10 +357,10 @@ void Configuration::initConfiguration( int argc, const char* const* argv ) ...@@ -357,10 +357,10 @@ void Configuration::initConfiguration( int argc, const char* const* argv )
pl[1] = root_poa->create_servant_retention_policy(PortableServer::RETAIN); pl[1] = root_poa->create_servant_retention_policy(PortableServer::RETAIN);
pl[2] = root_poa->create_request_processing_policy(PortableServer::USE_ACTIVE_OBJECT_MAP_ONLY); pl[2] = root_poa->create_request_processing_policy(PortableServer::USE_ACTIVE_OBJECT_MAP_ONLY);
// pl[3] = root_poa->create_thread_policy(PortableServer::SINGLE_THREAD_MODEL); // pl[3] = root_poa->create_thread_policy(PortableServer::SINGLE_THREAD_MODEL);
} }
policyList = pl; policyList = pl;
// --------------------------------------- // ---------------------------------------
} }
catch( Exception& ex ) catch( Exception& ex )
...@@ -663,7 +663,7 @@ void Configuration::createNodesList() ...@@ -663,7 +663,7 @@ void Configuration::createNodesList()
initNode(ninf, it); initNode(ninf, it);
uinfo << "Configuration(createNodesList): add to list of nodes: node=" << nodename << " id=" << ninf.id << endl; uinfo << "Configuration(createNodesList): add to list of nodes: node=" << nodename << " id=" << ninf.id << endl;
lnodes.push_back(ninf); lnodes.push_back(ninf);
} }
uinfo << "Configuration(createNodesList): size of node list " << lnodes.size() << endl; uinfo << "Configuration(createNodesList): size of node list " << lnodes.size() << endl;
} }
...@@ -957,7 +957,7 @@ UniversalIO::IOType Configuration::getIOType( UniSetTypes::ObjectId id ) ...@@ -957,7 +957,7 @@ UniversalIO::IOType Configuration::getIOType( UniSetTypes::ObjectId id )
UniversalIO::IOType Configuration::getIOType( const std::string& name ) UniversalIO::IOType Configuration::getIOType( const std::string& name )
{ {
// Если указано "короткое" имя // Если указано "короткое" имя
// то просто сперва ищём ID, а потом по нему // то просто сперва ищём ID, а потом по нему
// iotype // iotype
ObjectId id = getSensorID(name); ObjectId id = getSensorID(name);
if( id != DefaultObjectId ) if( id != DefaultObjectId )
......
...@@ -38,21 +38,21 @@ static error_item errorTags[] = { ...@@ -38,21 +38,21 @@ static error_item errorTags[] = {
{ Debug::LEVEL2, "level2", ("UniSet debug level2")}, { Debug::LEVEL2, "level2", ("UniSet debug level2")},
{ Debug::LEVEL3, "level3", ("UniSet debug level3")}, { Debug::LEVEL3, "level3", ("UniSet debug level3")},
{ Debug::LEVEL4, "level4", ("UniSet debug level4")}, { Debug::LEVEL4, "level4", ("UniSet debug level4")},
{ Debug::LEVEL5, "level5", ("UniSet debug level5")}, { Debug::LEVEL5, "level5", ("UniSet debug level5")},
{ Debug::LEVEL6, "level6", ("UniSet debug level6")}, { Debug::LEVEL6, "level6", ("UniSet debug level6")},
{ Debug::LEVEL7, "level7", ("UniSet debug level7")}, { Debug::LEVEL7, "level7", ("UniSet debug level7")},
{ Debug::LEVEL8, "level8", ("UniSet debug level8")}, { Debug::LEVEL8, "level8", ("UniSet debug level8")},
{ Debug::LEVEL9, "level9", ("UniSet debug level9")}, { Debug::LEVEL9, "level9", ("UniSet debug level9")},
{ Debug::REPOSITORY,"repository",("UniSet repository messages")}, { Debug::REPOSITORY,"repository",("UniSet repository messages")},
{ Debug::ANY, "any", ("All debugging messages")}, { Debug::ANY, "any", ("All debugging messages")},
{ Debug::EXCEPTION, "exception", ("Exception debug messages")}, { Debug::EXCEPTION, "exception", ("Exception debug messages")},
}; };
static const int numErrorTags = sizeof(errorTags)/sizeof(error_item); static const int numErrorTags = sizeof(errorTags)/sizeof(error_item);
Debug::type const Debug::ANY = Debug::type( Debug::type const Debug::ANY = Debug::type(
Debug::INFO | Debug::INIT | Debug::WARN | Debug::CRIT | Debug::INFO | Debug::INIT | Debug::WARN | Debug::CRIT |
Debug::LEVEL1 | Debug::LEVEL2 | Debug::LEVEL3 | Debug::LEVEL4 | Debug::LEVEL1 | Debug::LEVEL2 | Debug::LEVEL3 | Debug::LEVEL4 |
...@@ -71,13 +71,13 @@ Debug::type Debug::value(string const & val) ...@@ -71,13 +71,13 @@ Debug::type Debug::value(string const & val)
string tmp(v.substr(0, st)); string tmp(v.substr(0, st));
if (tmp.empty()) if (tmp.empty())
break; break;
// Is it a number? // Is it a number?
//if (isStrInt(tmp)) //if (isStrInt(tmp))
// l |= static_cast<type>(strToInt(tmp)); // l |= static_cast<type>(strToInt(tmp));
//else //else
// Search for an explicit name // Search for an explicit name
for (int i = 0 ; i < numErrorTags ; ++i) for (int i = 0 ; i < numErrorTags ; ++i)
if (tmp == errorTags[i].name) { if (tmp == errorTags[i].name) {
l |= errorTags[i].level; l |= errorTags[i].level;
break; break;
...@@ -112,7 +112,7 @@ void Debug::showTags(ostream & os) ...@@ -112,7 +112,7 @@ void Debug::showTags(ostream & os)
std::ostream& operator<<(std::ostream& os, Debug::type level ) std::ostream& operator<<(std::ostream& os, Debug::type level )
{ {
for (int i = 0 ; i < numErrorTags ; ++i) for (int i = 0 ; i < numErrorTags ; ++i)
{ {
if( errorTags[i].level & level) // errorTags[i].level != Debug::ANY && errorTags[i].level != Debug::NONE if( errorTags[i].level & level) // errorTags[i].level != Debug::ANY && errorTags[i].level != Debug::NONE
......
...@@ -216,7 +216,7 @@ const DebugStream& DebugStream::operator=( const DebugStream& r ) ...@@ -216,7 +216,7 @@ const DebugStream& DebugStream::operator=( const DebugStream& r )
fname = r.fname; fname = r.fname;
if( !r.fname.empty() ) if( !r.fname.empty() )
logFile(fname); logFile(fname);
return *this; return *this;
} }
//-------------------------------------------------------------------------- //--------------------------------------------------------------------------
...@@ -243,7 +243,7 @@ std::ostream & DebugStream::debug(Debug::type t) ...@@ -243,7 +243,7 @@ std::ostream & DebugStream::debug(Debug::type t)
*this << "(" << std::setfill(' ') << std::setw(6) << t << "): "; // "):\t"; *this << "(" << std::setfill(' ') << std::setw(6) << t << "): "; // "):\t";
return *this; return *this;
} }
return nullstream; return nullstream;
} }
//-------------------------------------------------------------------------- //--------------------------------------------------------------------------
...@@ -251,7 +251,7 @@ std::ostream& DebugStream::operator()(Debug::type t) ...@@ -251,7 +251,7 @@ std::ostream& DebugStream::operator()(Debug::type t)
{ {
if(dt & t) if(dt & t)
return *this; return *this;
return nullstream; return nullstream;
} }
//-------------------------------------------------------------------------- //--------------------------------------------------------------------------
...@@ -265,7 +265,7 @@ std::ostream& DebugStream::printDate(Debug::type t, char brk) ...@@ -265,7 +265,7 @@ std::ostream& DebugStream::printDate(Debug::type t, char brk)
<< std::setw(2) << std::setfill('0') << tms->tm_mon+1 << brk << std::setw(2) << std::setfill('0') << tms->tm_mon+1 << brk
<< std::setw(4) << std::setfill('0') << tms->tm_year+1900; << std::setw(4) << std::setfill('0') << tms->tm_year+1900;
} }
return nullstream; return nullstream;
} }
//-------------------------------------------------------------------------- //--------------------------------------------------------------------------
...@@ -279,7 +279,7 @@ std::ostream& DebugStream::printTime(Debug::type t, char brk) ...@@ -279,7 +279,7 @@ std::ostream& DebugStream::printTime(Debug::type t, char brk)
<< std::setw(2) << std::setfill('0') << tms->tm_min << brk << std::setw(2) << std::setfill('0') << tms->tm_min << brk
<< std::setw(2) << std::setfill('0') << tms->tm_sec; << std::setw(2) << std::setfill('0') << tms->tm_sec;
} }
return nullstream; return nullstream;
} }
//-------------------------------------------------------------------------- //--------------------------------------------------------------------------
...@@ -296,7 +296,7 @@ std::ostream& DebugStream::printDateTime(Debug::type t) ...@@ -296,7 +296,7 @@ std::ostream& DebugStream::printDateTime(Debug::type t)
<< std::setw(2) << std::setfill('0') << tms->tm_min << ":" << std::setw(2) << std::setfill('0') << tms->tm_min << ":"
<< std::setw(2) << std::setfill('0') << tms->tm_sec; << std::setw(2) << std::setfill('0') << tms->tm_sec;
} }
return nullstream; return nullstream;
} }
//-------------------------------------------------------------------------- //--------------------------------------------------------------------------
......
...@@ -159,7 +159,7 @@ timeout_t LT_Object::askTimer( UniSetTypes::TimerId timerid, timeout_t timeMS, c ...@@ -159,7 +159,7 @@ timeout_t LT_Object::askTimer( UniSetTypes::TimerId timerid, timeout_t timeMS, c
} }
else // отказ (при timeMS == 0) else // отказ (при timeMS == 0)
{ {
uinfo << "(LT_askTimer): поступил отказ по таймеру id="<< timerid << endl; uinfo << "(LT_askTimer): поступил отказ по таймеру id="<< timerid << endl;
{ // lock { // lock
uniset_rwmutex_wrlock lock(lstMutex); uniset_rwmutex_wrlock lock(lstMutex);
tlst.erase( std::remove_if(tlst.begin(),tlst.end(),Timer_eq(timerid)), tlst.end() ); tlst.erase( std::remove_if(tlst.begin(),tlst.end(),Timer_eq(timerid)), tlst.end() );
......
...@@ -6,7 +6,7 @@ noinst_LTLIBRARIES = libVarious.la ...@@ -6,7 +6,7 @@ noinst_LTLIBRARIES = libVarious.la
libVarious_la_CPPFLAGS = $(SIGC_CFLAGS) $(COMCPP_CFLAGS) libVarious_la_CPPFLAGS = $(SIGC_CFLAGS) $(COMCPP_CFLAGS)
libVarious_la_LIBADD = $(SIGC_LIBS) $(COMCPP_LIBS) libVarious_la_LIBADD = $(SIGC_LIBS) $(COMCPP_LIBS)
libVarious_la_SOURCES = DebugStream.cc Debug.cc UniXML.cc MessageType.cc Configuration.cc \ libVarious_la_SOURCES = DebugStream.cc Debug.cc UniXML.cc MessageType.cc Configuration.cc \
Restorer_XML.cc RunLock.cc Mutex.cc SViewer.cc SMonitor.cc LT_Object.cc WDTInterface.cc Restorer_XML.cc RunLock.cc Mutex.cc SViewer.cc SMonitor.cc LT_Object.cc WDTInterface.cc
local-clean: local-clean:
rm -rf *iSK.cc rm -rf *iSK.cc
...@@ -90,7 +90,7 @@ tid(UniSetTypes::DefaultThresholdId) ...@@ -90,7 +90,7 @@ tid(UniSetTypes::DefaultThresholdId)
} }
SensorMessage::SensorMessage(ObjectId id, long value, const IOController_i::CalibrateInfo& ci, SensorMessage::SensorMessage(ObjectId id, long value, const IOController_i::CalibrateInfo& ci,
Priority priority, Priority priority,
UniversalIO::IOType st, ObjectId consumer): UniversalIO::IOType st, ObjectId consumer):
id(id), id(id),
value(value), value(value),
...@@ -102,7 +102,7 @@ tid(UniSetTypes::DefaultThresholdId) ...@@ -102,7 +102,7 @@ tid(UniSetTypes::DefaultThresholdId)
{ {
type = Message::SensorInfo; type = Message::SensorInfo;
this->priority = priority; this->priority = priority;
this->consumer = consumer; this->consumer = consumer;
sm_tv_sec = tm.tv_sec; sm_tv_sec = tm.tv_sec;
sm_tv_usec = tm.tv_usec; sm_tv_usec = tm.tv_usec;
} }
...@@ -154,7 +154,7 @@ TimerMessage::TimerMessage(const VoidMessage *msg): ...@@ -154,7 +154,7 @@ TimerMessage::TimerMessage(const VoidMessage *msg):
memcpy(this,msg,sizeof(*this)); memcpy(this,msg,sizeof(*this));
assert(this->type == Message::Timer); assert(this->type == Message::Timer);
} }
//-------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------
ConfirmMessage::ConfirmMessage( const VoidMessage *msg ): ConfirmMessage::ConfirmMessage( const VoidMessage *msg ):
Message(1) // вызываем dummy-конструктор, который не инициализирует данные (оптимизация) Message(1) // вызываем dummy-конструктор, который не инициализирует данные (оптимизация)
{ {
...@@ -180,7 +180,7 @@ ConfirmMessage::ConfirmMessage(long in_sensor_id, ...@@ -180,7 +180,7 @@ ConfirmMessage::ConfirmMessage(long in_sensor_id,
priority = in_priority; priority = in_priority;
} }
//-------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------
} // end of namespace UniSetTypes } // end of namespace UniSetTypes
//-------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------
...@@ -87,7 +87,7 @@ uniset_mutex_lock::uniset_mutex_lock( uniset_mutex& m, const time_t timeMS ): ...@@ -87,7 +87,7 @@ uniset_mutex_lock::uniset_mutex_lock( uniset_mutex& m, const time_t timeMS ):
{ {
if( !mutex->name().empty() ) if( !mutex->name().empty() )
{ {
ulog9 << "(mutex_lock): вышло заданное время ожидания " ulog9 << "(mutex_lock): вышло заданное время ожидания "
<< timeMS << " msec для " << mutex->name() << endl; << timeMS << " msec для " << mutex->name() << endl;
} }
return; return;
......
...@@ -79,7 +79,7 @@ bool Restorer_XML::getConsumerInfo( UniXML_iterator& it, ...@@ -79,7 +79,7 @@ bool Restorer_XML::getConsumerInfo( UniXML_iterator& it,
cname = conf->getServicesSection()+"/"+cname; cname = conf->getServicesSection()+"/"+cname;
else else
{ {
uwarn << "(Restorer_XML:getConsumerInfo): неизвестный тип объекта " uwarn << "(Restorer_XML:getConsumerInfo): неизвестный тип объекта "
<< otype << endl; << otype << endl;
return false; return false;
} }
...@@ -87,7 +87,7 @@ bool Restorer_XML::getConsumerInfo( UniXML_iterator& it, ...@@ -87,7 +87,7 @@ bool Restorer_XML::getConsumerInfo( UniXML_iterator& it,
cid = conf->oind->getIdByName(cname); cid = conf->oind->getIdByName(cname);
if( cid == UniSetTypes::DefaultObjectId ) if( cid == UniSetTypes::DefaultObjectId )
{ {
ucrit << "(Restorer_XML:getConsumerInfo): НЕ НАЙДЕН ИДЕНТИФИКАТОР заказчика -->" ucrit << "(Restorer_XML:getConsumerInfo): НЕ НАЙДЕН ИДЕНТИФИКАТОР заказчика -->"
<< cname << endl; << cname << endl;
return false; return false;
} }
...@@ -100,7 +100,7 @@ bool Restorer_XML::getConsumerInfo( UniXML_iterator& it, ...@@ -100,7 +100,7 @@ bool Restorer_XML::getConsumerInfo( UniXML_iterator& it,
if( cnode == UniSetTypes::DefaultObjectId ) if( cnode == UniSetTypes::DefaultObjectId )
{ {
ucrit << "(Restorer_XML:getConsumerInfo): НЕ НАЙДЕН ИДЕНТИФИКАТОР узла -->" ucrit << "(Restorer_XML:getConsumerInfo): НЕ НАЙДЕН ИДЕНТИФИКАТОР узла -->"
<< cnodename << endl; << cnodename << endl;
return false; return false;
} }
...@@ -119,7 +119,7 @@ bool Restorer_XML::check_consumer_item( UniXML_iterator& it ) ...@@ -119,7 +119,7 @@ bool Restorer_XML::check_consumer_item( UniXML_iterator& it )
return UniSetTypes::check_filter(it,c_filterField,c_filterValue); return UniSetTypes::check_filter(it,c_filterField,c_filterValue);
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
xmlNode* Restorer_XML::find_node( const UniXML& xml, xmlNode* root, xmlNode* Restorer_XML::find_node( const UniXML& xml, xmlNode* root,
const string& nodename, const string& nm ) const string& nodename, const string& nm )
{ {
UniXML_iterator it(root); UniXML_iterator it(root);
...@@ -131,7 +131,7 @@ xmlNode* Restorer_XML::find_node( const UniXML& xml, xmlNode* root, ...@@ -131,7 +131,7 @@ xmlNode* Restorer_XML::find_node( const UniXML& xml, xmlNode* root,
{ {
if( nm.empty() ) if( nm.empty() )
return it; return it;
if( xml.getProp(it, "name") == nm ) if( xml.getProp(it, "name") == nm )
return it; return it;
} }
......
...@@ -42,18 +42,18 @@ RunLock::~RunLock() ...@@ -42,18 +42,18 @@ RunLock::~RunLock()
bool RunLock::isLocked(const string& name) bool RunLock::isLocked(const string& name)
{ {
FILE *out = fopen( string(name + ".lock" ).c_str(), "r" ); FILE *out = fopen( string(name + ".lock" ).c_str(), "r" );
if( out ) if( out )
{ {
char ptr[10]; char ptr[10];
fscanf( out, "%9s", ptr ); fscanf( out, "%9s", ptr );
DIR *d = opendir( "/proc" ); DIR *d = opendir( "/proc" );
dirent *dir; dirent *dir;
while((dir = readdir(d))) while((dir = readdir(d)))
{ {
if( !strcmp( ptr, dir->d_name ) ) if( !strcmp( ptr, dir->d_name ) )
{ {
// по хорошему здесь надо бы проверять // по хорошему здесь надо бы проверять
// статус на зомби // статус на зомби
/* /*
string path(dir->d_name); string path(dir->d_name);
...@@ -70,19 +70,19 @@ bool RunLock::isLocked(const string& name) ...@@ -70,19 +70,19 @@ bool RunLock::isLocked(const string& name)
break; break;
} }
} }
*/ */
uinfo << "(RunLock): programm " << name << " already run" << endl; uinfo << "(RunLock): programm " << name << " already run" << endl;
fclose(out); fclose(out);
closedir(d); closedir(d);
return true; return true;
} }
} }
fclose(out); fclose(out);
closedir(d); closedir(d);
} }
return false; return false;
} }
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
...@@ -90,7 +90,7 @@ bool RunLock::lock( const string& name ) ...@@ -90,7 +90,7 @@ bool RunLock::lock( const string& name )
{ {
if( !isLocked(name) ) if( !isLocked(name) )
{ {
FILE *out = fopen( string(name + ".lock" ).c_str(), "w+" ); FILE *out = fopen( string(name + ".lock" ).c_str(), "w+" );
if(out) if(out)
{ {
fprintf( out, "%d\n", getpid() ); fprintf( out, "%d\n", getpid() );
...@@ -98,14 +98,14 @@ bool RunLock::lock( const string& name ) ...@@ -98,14 +98,14 @@ bool RunLock::lock( const string& name )
return true; return true;
} }
} }
return false; return false;
} }
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
bool RunLock::unlock(const string& name) bool RunLock::unlock(const string& name)
{ {
string fname(name + ".lock"); string fname(name + ".lock");
FILE *out = fopen( fname.c_str(), "r" ); FILE *out = fopen( fname.c_str(), "r" );
if( out ) if( out )
{ {
fclose(out); fclose(out);
......
...@@ -21,8 +21,8 @@ SMonitor::SMonitor(ObjectId id): ...@@ -21,8 +21,8 @@ SMonitor::SMonitor(ObjectId id):
script("") script("")
{ {
string sid(conf->getArgParam("--sid")); string sid(conf->getArgParam("--sid"));
lst = UniSetTypes::getSInfoList(sid,UniSetTypes::conf); lst = UniSetTypes::getSInfoList(sid,UniSetTypes::conf);
if( lst.empty() ) if( lst.empty() )
throw SystemError("Не задан список датчиков (--sid)"); throw SystemError("Не задан список датчиков (--sid)");
...@@ -84,7 +84,7 @@ void SMonitor::sysCommand( const SystemMessage *sm ) ...@@ -84,7 +84,7 @@ void SMonitor::sysCommand( const SystemMessage *sm )
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
void SMonitor::sensorInfo( const SensorMessage* si ) void SMonitor::sensorInfo( const SensorMessage* si )
{ {
cout << "(" << setw(6) << si->id << "): " << setw(8) << timeToString(si->sm_tv_sec,":") cout << "(" << setw(6) << si->id << "): " << setw(8) << timeToString(si->sm_tv_sec,":")
<< "(" << setw(6) << si->sm_tv_usec << "): "; << "(" << setw(6) << si->sm_tv_usec << "): ";
cout << setw(45) << conf->oind->getMapName(si->id); cout << setw(45) << conf->oind->getMapName(si->id);
cout << "\tvalue=" << si->value << "\tfvalue=" << ( (float)si->value / pow(10.0,si->ci.precision) ) << endl; cout << "\tvalue=" << si->value << "\tfvalue=" << ( (float)si->value / pow(10.0,si->ci.precision) ) << endl;
...@@ -97,7 +97,7 @@ void SMonitor::sensorInfo( const SensorMessage* si ) ...@@ -97,7 +97,7 @@ void SMonitor::sensorInfo( const SensorMessage* si )
if( script[0] == '.' || script[0] == '/' ) if( script[0] == '.' || script[0] == '/' )
cmd << script; cmd << script;
else else
cmd << conf->getBinDir() << script; cmd << conf->getBinDir() << script;
cmd << " " << si->id << " " << si->value << " " << si->sm_tv_sec << " " << si->sm_tv_usec; cmd << " " << si->id << " " << si->value << " " << si->sm_tv_sec << " " << si->sm_tv_usec;
......
...@@ -50,7 +50,7 @@ SViewer::~SViewer() ...@@ -50,7 +50,7 @@ SViewer::~SViewer()
void SViewer::on_SViewer_destroy() void SViewer::on_SViewer_destroy()
{ {
// activator->oakill(SIGINT); // activator->oakill(SIGINT);
// msleep(500); // msleep(500);
// activator->oakill(SIGKILL); // activator->oakill(SIGKILL);
} }
...@@ -82,14 +82,14 @@ void SViewer::view() ...@@ -82,14 +82,14 @@ void SViewer::view()
void SViewer::readSection( const string& section, const string& secRoot ) void SViewer::readSection( const string& section, const string& secRoot )
{ {
ListObjectName lst; ListObjectName lst;
string curSection; string curSection;
try try
{ {
if ( secRoot.empty() ) if ( secRoot.empty() )
curSection = section; curSection = section;
else else
curSection=secRoot+"/"+section; curSection=secRoot+"/"+section;
// cout << " read sectionlist ..."<< endl; // cout << " read sectionlist ..."<< endl;
if( !rep.listSections(curSection, &lst, 1000) ) if( !rep.listSections(curSection, &lst, 1000) )
{ {
...@@ -102,7 +102,7 @@ void SViewer::readSection( const string& section, const string& secRoot ) ...@@ -102,7 +102,7 @@ void SViewer::readSection( const string& section, const string& secRoot )
cout << "(readSection): get sectionlist ... catch..." << endl; cout << "(readSection): get sectionlist ... catch..." << endl;
} }
if( !lst.empty() ) if( !lst.empty() )
{ {
for ( ListObjectName::const_iterator li=lst.begin();li!=lst.end();++li) for ( ListObjectName::const_iterator li=lst.begin();li!=lst.end();++li)
{ {
...@@ -184,7 +184,7 @@ void SViewer::getInfo( ObjectId id ) ...@@ -184,7 +184,7 @@ void SViewer::getInfo( ObjectId id )
IOController_i::SensorInfoSeq_var amap = ioc->getSensorsMap(); IOController_i::SensorInfoSeq_var amap = ioc->getSensorsMap();
IONotifyController_i::ThresholdsListSeq_var tlst = ioc->getThresholdsList(); IONotifyController_i::ThresholdsListSeq_var tlst = ioc->getThresholdsList();
try try
{ updateSensors(amap, id); { updateSensors(amap, id);
}catch(...){} }catch(...){}
...@@ -226,7 +226,7 @@ void SViewer::updateSensors( IOController_i::SensorInfoSeq_var& amap, UniSetType ...@@ -226,7 +226,7 @@ void SViewer::updateSensors( IOController_i::SensorInfoSeq_var& amap, UniSetType
printInfo( amap[i].si.id, name, amap[i].value, owner, txtname, "AI"); printInfo( amap[i].si.id, name, amap[i].value, owner, txtname, "AI");
} }
} }
cout << "------------------------------------------------------\n"; cout << "------------------------------------------------------\n";
cout << "\n======================================================\n" << owner; cout << "\n======================================================\n" << owner;
cout << "\t Выходы"; cout << "\t Выходы";
...@@ -242,7 +242,7 @@ void SViewer::updateSensors( IOController_i::SensorInfoSeq_var& amap, UniSetType ...@@ -242,7 +242,7 @@ void SViewer::updateSensors( IOController_i::SensorInfoSeq_var& amap, UniSetType
printInfo( amap[i].si.id, name, amap[i].value, owner, txtname, "AO"); printInfo( amap[i].si.id, name, amap[i].value, owner, txtname, "AO");
} }
} }
cout << "------------------------------------------------------\n"; cout << "------------------------------------------------------\n";
} }
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
...@@ -276,7 +276,7 @@ void SViewer::updateThresholds( IONotifyController_i::ThresholdsListSeq_var& tls ...@@ -276,7 +276,7 @@ void SViewer::updateThresholds( IONotifyController_i::ThresholdsListSeq_var& tls
if( isShort ) if( isShort )
sname = ORepHelpers::getShortName(sname); sname = ORepHelpers::getShortName(sname);
cout << " | " << setw(60) << sname << " | " << setw(5) << tlst[i].value << endl; cout << " | " << setw(60) << sname << " | " << setw(5) << tlst[i].value << endl;
int m = tlst[i].tlist.length(); int m = tlst[i].tlist.length();
for( unsigned int k=0; k<m; k++ ) for( unsigned int k=0; k<m; k++ )
......
...@@ -106,7 +106,7 @@ void UniXML::close() ...@@ -106,7 +106,7 @@ void UniXML::close()
xmlFreeDoc(doc); xmlFreeDoc(doc);
doc=0; doc=0;
} }
filename = ""; filename = "";
} }
...@@ -121,7 +121,7 @@ string UniXML::getProp(const xmlNode* node, const string& name) ...@@ -121,7 +121,7 @@ string UniXML::getProp(const xmlNode* node, const string& name)
const char * text = (const char*)::xmlGetProp((xmlNode*)node, (const xmlChar*)name.c_str()); const char * text = (const char*)::xmlGetProp((xmlNode*)node, (const xmlChar*)name.c_str());
if( text == NULL ) if( text == NULL )
return ""; return "";
string t(text); string t(text);
xmlFree( (void*)text ); xmlFree( (void*)text );
return t; return t;
...@@ -137,7 +137,7 @@ int UniXML::getPIntProp(const xmlNode* node, const string& name, int def ) ...@@ -137,7 +137,7 @@ int UniXML::getPIntProp(const xmlNode* node, const string& name, int def )
string param = getProp(node,name); string param = getProp(node,name);
if( param.empty() ) if( param.empty() )
return def; return def;
return UniSetTypes::uni_atoi(param); return UniSetTypes::uni_atoi(param);
} }
...@@ -173,7 +173,7 @@ xmlNode* UniXML::copyNode(xmlNode* node, int recursive) ...@@ -173,7 +173,7 @@ xmlNode* UniXML::copyNode(xmlNode* node, int recursive)
/*! \bug Почему-то портятся русские имена (точнее становятся UTF8) /*! \bug Почему-то портятся русские имена (точнее становятся UTF8)
независимо от текущей локали файла независимо от текущей локали файла
спасает только такое вот дополнительное копирование списка свойств спасает только такое вот дополнительное копирование списка свойств
\bug Непонятный параметр 'target' \bug Непонятный параметр 'target'
- при указании NULL нормально работает - при указании NULL нормально работает
- при указании copynode - проблеммы с русским при сохранении - при указании copynode - проблеммы с русским при сохранении
- при указании node - SEGFAULT при попытке удалить исходный(node) узел - при указании node - SEGFAULT при попытке удалить исходный(node) узел
...@@ -323,7 +323,7 @@ bool UniXML_iterator::goThrowNext() ...@@ -323,7 +323,7 @@ bool UniXML_iterator::goThrowNext()
return goThrowNext(); return goThrowNext();
return true; return true;
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
bool UniXML_iterator::goPrev() bool UniXML_iterator::goPrev()
{ {
if( !curNode ) // || !curNode->prev ) if( !curNode ) // || !curNode->prev )
...@@ -335,33 +335,33 @@ bool UniXML_iterator::goPrev() ...@@ -335,33 +335,33 @@ bool UniXML_iterator::goPrev()
return goPrev(); return goPrev();
return true; return true;
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
bool UniXML_iterator::canPrev() bool UniXML_iterator::canPrev()
{ {
if( !curNode || !curNode->prev ) if( !curNode || !curNode->prev )
return false; return false;
return true; return true;
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
bool UniXML_iterator::canNext() bool UniXML_iterator::canNext()
{ {
if (!curNode || !curNode->next ) if (!curNode || !curNode->next )
return false; return false;
return true; return true;
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
bool UniXML_iterator::goParent() bool UniXML_iterator::goParent()
{ {
if( !curNode ) if( !curNode )
return false; return false;
if( !curNode->parent ) if( !curNode->parent )
return false; return false;
curNode = curNode->parent; curNode = curNode->parent;
return true; return true;
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
bool UniXML_iterator::goChildren() bool UniXML_iterator::goChildren()
{ {
if (!curNode || !curNode->children ) if (!curNode || !curNode->children )
...@@ -422,9 +422,9 @@ void UniXML_iterator::setProp( const string& name, const string& text ) ...@@ -422,9 +422,9 @@ void UniXML_iterator::setProp( const string& name, const string& text )
UniXML::setProp(curNode, name, text); UniXML::setProp(curNode, name, text);
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
bool UniXML_iterator::findName( const std::string& node, const std::string& searchname ) bool UniXML_iterator::findName( const std::string& node, const std::string& searchname )
{ {
while( this->find(node) ) while( this->find(node) )
{ {
if ( searchname == getProp("name") ) if ( searchname == getProp("name") )
...@@ -435,47 +435,47 @@ bool UniXML_iterator::findName( const std::string& node, const std::string& sear ...@@ -435,47 +435,47 @@ bool UniXML_iterator::findName( const std::string& node, const std::string& sear
return false; return false;
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
bool UniXML_iterator::find( const std::string& searchnode ) bool UniXML_iterator::find( const std::string& searchnode )
{ {
// Функция ищет "в ширину и в глубь" // Функция ищет "в ширину и в глубь"
xmlNode* rnode = curNode; xmlNode* rnode = curNode;
while (curNode != NULL) while (curNode != NULL)
{ {
while( curNode->children ) while( curNode->children )
{ {
curNode = curNode->children; curNode = curNode->children;
if ( searchnode == (const char*)curNode->name ) if ( searchnode == (const char*)curNode->name )
return true; return true;
} }
while( !curNode->next && curNode->parent ) while( !curNode->next && curNode->parent )
{ {
// выше исходного узла "подыматься" нельзя // выше исходного узла "подыматься" нельзя
if( curNode == rnode ) if( curNode == rnode )
break; break;
curNode = curNode->parent; curNode = curNode->parent;
} }
curNode = curNode->next; curNode = curNode->next;
if ( curNode && searchnode == (const char*)curNode->name ) if ( curNode && searchnode == (const char*)curNode->name )
{ {
return true; return true;
} }
} }
return false; return false;
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
UniXML_iterator UniXML_iterator::operator++() UniXML_iterator UniXML_iterator::operator++()
{ {
if (!curNode->next) if (!curNode->next)
{ {
curNode=curNode->next; curNode=curNode->next;
return *this; return *this;
} }
...@@ -486,7 +486,7 @@ UniXML_iterator UniXML_iterator::operator++() ...@@ -486,7 +486,7 @@ UniXML_iterator UniXML_iterator::operator++()
if (getName() == "text" || getName() == "comment") if (getName() == "text" || getName() == "comment")
continue; continue;
else else
break; break;
} }
return *this; return *this;
...@@ -497,18 +497,18 @@ UniXML_iterator UniXML_iterator::operator++(int) ...@@ -497,18 +497,18 @@ UniXML_iterator UniXML_iterator::operator++(int)
UniXML_iterator it = *this; UniXML_iterator it = *this;
if (!curNode->next) if (!curNode->next)
{ {
curNode=curNode->next; curNode=curNode->next;
return it; return it;
} }
for(;;) for(;;)
{ {
curNode=curNode->next; curNode=curNode->next;
if (getName() == "text" || getName() == "comment") if (getName() == "text" || getName() == "comment")
continue; continue;
else else
break; break;
} }
return it; return it;
...@@ -518,7 +518,7 @@ UniXML_iterator UniXML_iterator::operator++(int) ...@@ -518,7 +518,7 @@ UniXML_iterator UniXML_iterator::operator++(int)
UniXML_iterator UniXML_iterator::operator--() UniXML_iterator UniXML_iterator::operator--()
{ {
if (!curNode->prev) if (!curNode->prev)
{ {
curNode=curNode->prev; curNode=curNode->prev;
return *this; return *this;
} }
...@@ -529,7 +529,7 @@ UniXML_iterator UniXML_iterator::operator--() ...@@ -529,7 +529,7 @@ UniXML_iterator UniXML_iterator::operator--()
if (getName() == "text" || getName() == "comment") if (getName() == "text" || getName() == "comment")
continue; continue;
else else
break; break;
} }
return *this; return *this;
...@@ -540,18 +540,18 @@ UniXML_iterator UniXML_iterator::operator--(int) ...@@ -540,18 +540,18 @@ UniXML_iterator UniXML_iterator::operator--(int)
UniXML_iterator it = *this; UniXML_iterator it = *this;
if (!curNode->prev) if (!curNode->prev)
{ {
curNode=curNode->prev; curNode=curNode->prev;
return it; return it;
} }
for(;;) for(;;)
{ {
curNode=curNode->prev; curNode=curNode->prev;
if (getName() == "text" || getName() == "comment") if (getName() == "text" || getName() == "comment")
continue; continue;
else else
break; break;
} }
return it; return it;
......
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
#include <iostream> #include <iostream>
#include <cstring> #include <cstring>
...@@ -43,7 +43,7 @@ bool WDTInterface::stop() ...@@ -43,7 +43,7 @@ bool WDTInterface::stop()
cerr << ": Unable to open device " << dev << " with err: " << strerror(errno) << endl; cerr << ": Unable to open device " << dev << " with err: " << strerror(errno) << endl;
return false; return false;
} }
write(fd, (void*)CMD_STOP, sizeof(CMD_STOP)); write(fd, (void*)CMD_STOP, sizeof(CMD_STOP));
close(fd); close(fd);
return true; return true;
......
...@@ -28,7 +28,7 @@ ...@@ -28,7 +28,7 @@
int main() int main()
{ {
UniXML* f = new UniXML(); UniXML* f = new UniXML();
f->newDoc("journal"); f->newDoc("journal");
xmlNode *cur,*beg; xmlNode *cur,*beg;
......
...@@ -21,12 +21,12 @@ int main(int argc, const char **argv) ...@@ -21,12 +21,12 @@ int main(int argc, const char **argv)
// conf = new Configuration(argc, argv, confile); // conf = new Configuration(argc, argv, confile);
for( int i=-5; i<4095; i+=100 ) for( int i=-5; i<4095; i+=100 )
{ {
cout << "raw=" << (817+i) cout << "raw=" << (817+i)
<< " cal=" << lcalibrate(817+i,817,4095,0,400) << " cal=" << lcalibrate(817+i,817,4095,0,400)
<< endl; << endl;
} }
return 0; return 0;
} }
catch(SystemError& err) catch(SystemError& err)
...@@ -41,6 +41,6 @@ int main(int argc, const char **argv) ...@@ -41,6 +41,6 @@ int main(int argc, const char **argv)
{ {
cerr << "(calibration): catch(...)" << endl; cerr << "(calibration): catch(...)" << endl;
} }
return 1; return 1;
} }
...@@ -14,7 +14,7 @@ int main(int argc, const char **argv) ...@@ -14,7 +14,7 @@ int main(int argc, const char **argv)
cout << "--confile - Configuration file. Default: test.xml" << endl; cout << "--confile - Configuration file. Default: test.xml" << endl;
return 0; return 0;
} }
cout << "**** uni_atoi('')=" << uni_atoi("") << endl; cout << "**** uni_atoi('')=" << uni_atoi("") << endl;
try try
...@@ -23,7 +23,7 @@ int main(int argc, const char **argv) ...@@ -23,7 +23,7 @@ int main(int argc, const char **argv)
conf = new Configuration(argc, argv, confile); conf = new Configuration(argc, argv, confile);
cout << "getLocalNode()=" << conf->getLocalNode() << endl; cout << "getLocalNode()=" << conf->getLocalNode() << endl;
string t(conf->oind->getTextName(1)); string t(conf->oind->getTextName(1));
cout << "**** check getTextName: " << ( t.empty() ? "FAILED" : "OK" ) << endl; cout << "**** check getTextName: " << ( t.empty() ? "FAILED" : "OK" ) << endl;
...@@ -35,8 +35,8 @@ int main(int argc, const char **argv) ...@@ -35,8 +35,8 @@ int main(int argc, const char **argv)
cout << "**** check getMapName: " << ( mn.empty() ? "FAILED" : "OK" ) << endl; cout << "**** check getMapName: " << ( mn.empty() ? "FAILED" : "OK" ) << endl;
cout << "getSensorID(Input1_S): " << conf->getSensorID("Input1_S") << endl; cout << "getSensorID(Input1_S): " << conf->getSensorID("Input1_S") << endl;
std::string iname = conf->oind->getNameById(1); std::string iname = conf->oind->getNameById(1);
cout << "getNameById(1): " << iname << endl; cout << "getNameById(1): " << iname << endl;
...@@ -45,11 +45,11 @@ int main(int argc, const char **argv) ...@@ -45,11 +45,11 @@ int main(int argc, const char **argv)
UniversalIO::IOType t1=conf->getIOType(1); UniversalIO::IOType t1=conf->getIOType(1);
cout << "**** getIOType for " << mn << endl; cout << "**** getIOType for " << mn << endl;
cout << "**** check getIOType(id): (" << t1 << ") " << ( t1 == UniversalIO::UnknownIOType ? "FAILED" : "OK" ) << endl; cout << "**** check getIOType(id): (" << t1 << ") " << ( t1 == UniversalIO::UnknownIOType ? "FAILED" : "OK" ) << endl;
UniversalIO::IOType t2=conf->getIOType(mn); UniversalIO::IOType t2=conf->getIOType(mn);
cout << "**** check getIOType(name): (" << t2 << ") " << ( t2 == UniversalIO::UnknownIOType ? "FAILED" : "OK" ) << endl; cout << "**** check getIOType(name): (" << t2 << ") " << ( t2 == UniversalIO::UnknownIOType ? "FAILED" : "OK" ) << endl;
UniversalIO::IOType t3=conf->getIOType("Input1_S"); UniversalIO::IOType t3=conf->getIOType("Input1_S");
cout << "**** check getIOType(name): for short name 'Input1_S': (" << t3 << ") " << ( t3 == UniversalIO::UnknownIOType ? "FAILED" : "OK" ) << endl; cout << "**** check getIOType(name): for short name 'Input1_S': (" << t3 << ") " << ( t3 == UniversalIO::UnknownIOType ? "FAILED" : "OK" ) << endl;
int i1 = uni_atoi("-100"); int i1 = uni_atoi("-100");
...@@ -57,7 +57,7 @@ int main(int argc, const char **argv) ...@@ -57,7 +57,7 @@ int main(int argc, const char **argv)
int i2 = uni_atoi("20"); int i2 = uni_atoi("20");
cout << "**** check uni_atoi: '20' " << ( ( i2 != 20 ) ? "FAILED" : "OK" ) << endl; cout << "**** check uni_atoi: '20' " << ( ( i2 != 20 ) ? "FAILED" : "OK" ) << endl;
xmlNode* cnode = conf->getNode("testnode"); xmlNode* cnode = conf->getNode("testnode");
if( cnode == NULL ) if( cnode == NULL )
{ {
...@@ -83,10 +83,10 @@ int main(int argc, const char **argv) ...@@ -83,10 +83,10 @@ int main(int argc, const char **argv)
int prop5 = conf->getArgPInt("--prop-dummy",it.getProp("dummy"),0); int prop5 = conf->getArgPInt("--prop-dummy",it.getProp("dummy"),0);
cerr << "**** check conf->getArgPInt(...,...,defval): " << ( (prop5 != 0) ? "[FAILED]" : "OK" ) << endl; cerr << "**** check conf->getArgPInt(...,...,defval): " << ( (prop5 != 0) ? "[FAILED]" : "OK" ) << endl;
return 0; return 0;
} }
catch(SystemError& err) catch(SystemError& err)
...@@ -101,6 +101,6 @@ int main(int argc, const char **argv) ...@@ -101,6 +101,6 @@ int main(int argc, const char **argv)
{ {
cerr << "(conftest): catch(...)" << endl; cerr << "(conftest): catch(...)" << endl;
} }
return 1; return 1;
} }
...@@ -8,7 +8,7 @@ using namespace std; ...@@ -8,7 +8,7 @@ using namespace std;
int main() int main()
{ {
// ---------------------- // ----------------------
// test DelayTimer // test DelayTimer
DelayTimer dtm(1000,500); DelayTimer dtm(1000,500);
...@@ -85,14 +85,14 @@ int main() ...@@ -85,14 +85,14 @@ int main()
if( !dtm2.check(true) ) if( !dtm2.check(true) )
{ {
cerr << "DelayTimer: TEST9 FAILED! " << endl; cerr << "DelayTimer: TEST9 FAILED! " << endl;
return 1; return 1;
} }
cerr << "DelayTimer: TEST9 OK! " << endl; cerr << "DelayTimer: TEST9 OK! " << endl;
if( dtm2.check(false) ) if( dtm2.check(false) )
{ {
cerr << "DelayTimer: TEST10 FAILED! " << endl; cerr << "DelayTimer: TEST10 FAILED! " << endl;
return 1; return 1;
} }
cerr << "DelayTimer: TEST10 OK! " << endl; cerr << "DelayTimer: TEST10 OK! " << endl;
...@@ -106,7 +106,7 @@ int main() ...@@ -106,7 +106,7 @@ int main()
if( dtm3.check(true) ) if( dtm3.check(true) )
{ {
cerr << "DelayTimer: TEST11 FAILED! " << endl; cerr << "DelayTimer: TEST11 FAILED! " << endl;
return 1; return 1;
} }
cerr << "DelayTimer: TEST11 OK! " << endl; cerr << "DelayTimer: TEST11 OK! " << endl;
...@@ -114,7 +114,7 @@ int main() ...@@ -114,7 +114,7 @@ int main()
if( !dtm3.check(true) ) if( !dtm3.check(true) )
{ {
cerr << "DelayTimer: TEST12 FAILED! " << endl; cerr << "DelayTimer: TEST12 FAILED! " << endl;
return 1; return 1;
} }
cerr << "DelayTimer: TEST12 OK! " << endl; cerr << "DelayTimer: TEST12 OK! " << endl;
......
...@@ -8,9 +8,9 @@ using namespace UniSetTypes; ...@@ -8,9 +8,9 @@ using namespace UniSetTypes;
int main( int argc, const char **argv ) int main( int argc, const char **argv )
{ {
DebugStream tlog; DebugStream tlog;
tlog.addLevel(Debug::ANY); tlog.addLevel(Debug::ANY);
tlog[Debug::INFO] << ": [info] ..." << endl; tlog[Debug::INFO] << ": [info] ..." << endl;
tlog(Debug::INFO) << ": (info) ..." << endl; tlog(Debug::INFO) << ": (info) ..." << endl;
cout << endl; cout << endl;
......
...@@ -9,7 +9,7 @@ using namespace std; ...@@ -9,7 +9,7 @@ using namespace std;
int main() int main()
{ {
HourGlass hg; HourGlass hg;
hg.run(1000); hg.run(1000);
hg.rotate(true); hg.rotate(true);
msleep(200); msleep(200);
...@@ -18,14 +18,14 @@ int main() ...@@ -18,14 +18,14 @@ int main()
cerr << "HourGlass: TEST1 FAILED! " << endl; cerr << "HourGlass: TEST1 FAILED! " << endl;
return 1; return 1;
} }
msleep(1000); msleep(1000);
if( !hg.check() ) if( !hg.check() )
{ {
cerr << "HourGlass: TEST1 FAILED! " << endl; cerr << "HourGlass: TEST1 FAILED! " << endl;
return 1; return 1;
} }
cout << "HourGlass: TEST1 OK!" << endl; cout << "HourGlass: TEST1 OK!" << endl;
hg.rotate(false); hg.rotate(false);
......
...@@ -24,12 +24,12 @@ void myf(xmlNode it) ...@@ -24,12 +24,12 @@ void myf(xmlNode it)
{ {
cout<<it.name<<endl; cout<<it.name<<endl;
} }
int main() int main()
{ {
UniXML xml("iterator_test.xml"); UniXML xml("iterator_test.xml");
UniXML::iterator it=xml.begin(); UniXML::iterator it=xml.begin();
it.find("messages"); it.find("messages");
check( "Check find():", "messages", it.getName() ); check( "Check find():", "messages", it.getName() );
...@@ -58,7 +58,7 @@ int main() ...@@ -58,7 +58,7 @@ int main()
--it; --it;
check( "Check iterator -- :", "a2", it.getName() ); check( "Check iterator -- :", "a2", it.getName() );
it=xml.begin(); it=xml.begin();
it.goChildren(); it.goChildren();
cout<<"Check algorythm 'for_each()':\n"; cout<<"Check algorythm 'for_each()':\n";
...@@ -73,6 +73,6 @@ int main() ...@@ -73,6 +73,6 @@ int main()
if( it.find("messages") ) if( it.find("messages") )
cout << "ERROR! begin=<UniSet> but find <messages>!" << endl; cout << "ERROR! begin=<UniSet> but find <messages>!" << endl;
return 0; return 0;
} }
...@@ -18,7 +18,7 @@ int main() ...@@ -18,7 +18,7 @@ int main()
PassiveTimer pt1(5000); PassiveTimer pt1(5000);
cout << " pt1.getInterval()=" << pt1.getInterval() << " TEST: " << ((pt1.getInterval()==5000) ? "OK" : "FAILED") << endl; cout << " pt1.getInterval()=" << pt1.getInterval() << " TEST: " << ((pt1.getInterval()==5000) ? "OK" : "FAILED") << endl;
PassiveTimer pt2; PassiveTimer pt2;
cout << " pt2.getInterval()=" << pt2.getInterval() << endl; cout << " pt2.getInterval()=" << pt2.getInterval() << endl;
if( pt2.getInterval() != 0 ) if( pt2.getInterval() != 0 )
......
...@@ -22,22 +22,22 @@ class MyClass ...@@ -22,22 +22,22 @@ class MyClass
{ {
thr = new ThreadCreator<MyClass>(this, &MyClass::thread); thr = new ThreadCreator<MyClass>(this, &MyClass::thread);
} }
~MyClass() ~MyClass()
{ {
delete thr; delete thr;
} }
inline cctid_t start(){ return thr->start(); } inline cctid_t start(){ return thr->start(); }
inline void stop(){ thr->stop(); } inline void stop(){ thr->stop(); }
inline pid_t getTID(){ return thr->getTID(); } inline pid_t getTID(){ return thr->getTID(); }
// BAD code...only for tests // BAD code...only for tests
inline ThreadCreator<MyClass>* mythr(){ return thr; } inline ThreadCreator<MyClass>* mythr(){ return thr; }
protected: protected:
std::string nm; std::string nm;
void thread() void thread()
{ {
...@@ -49,7 +49,7 @@ class MyClass ...@@ -49,7 +49,7 @@ class MyClass
cout << nm << ": finish thread (" << getTID() << ")" << endl; cout << nm << ": finish thread (" << getTID() << ")" << endl;
} }
private: private:
ThreadCreator<MyClass>* thr; ThreadCreator<MyClass>* thr;
}; };
...@@ -61,17 +61,17 @@ class MyClass2 ...@@ -61,17 +61,17 @@ class MyClass2
{ {
thr = new ThreadCreator<MyClass2>(this, &MyClass2::thread); thr = new ThreadCreator<MyClass2>(this, &MyClass2::thread);
} }
~MyClass2(){ delete thr; } ~MyClass2(){ delete thr; }
inline cctid_t start(){ return thr->start(); } inline cctid_t start(){ return thr->start(); }
inline void stop(){ thr->stop(); } inline void stop(){ thr->stop(); }
inline pid_t getTID(){ return thr->getTID(); } inline pid_t getTID(){ return thr->getTID(); }
protected: protected:
std::string nm; std::string nm;
TCPCheck tcp; TCPCheck tcp;
void thread() void thread()
{ {
pthread_setcancelstate(PTHREAD_CANCEL_ENABLE,NULL); pthread_setcancelstate(PTHREAD_CANCEL_ENABLE,NULL);
...@@ -91,7 +91,7 @@ class MyClass2 ...@@ -91,7 +91,7 @@ class MyClass2
cout << nm << ": finish thread (" << getTID() << ")" << endl; cout << nm << ": finish thread (" << getTID() << ")" << endl;
} }
private: private:
ThreadCreator<MyClass2>* thr; ThreadCreator<MyClass2>* thr;
}; };
...@@ -115,7 +115,7 @@ int main( int argc, const char **argv ) ...@@ -115,7 +115,7 @@ int main( int argc, const char **argv )
cout << "start2..." << endl; cout << "start2..." << endl;
t1.start(); t1.start();
int prior = t1.mythr()->getPriority(); int prior = t1.mythr()->getPriority();
cout << "priority: " << prior << endl; cout << "priority: " << prior << endl;
...@@ -136,7 +136,7 @@ int main( int argc, const char **argv ) ...@@ -136,7 +136,7 @@ int main( int argc, const char **argv )
// cout << "start3..." << endl; // cout << "start3..." << endl;
// t1.start(); // t1.start();
// pause(); // pause();
cout << "finished3..." << endl; cout << "finished3..." << endl;
...@@ -149,8 +149,8 @@ int main( int argc, const char **argv ) ...@@ -149,8 +149,8 @@ int main( int argc, const char **argv )
msleep(50); msleep(50);
cout << "check finished..." << endl; cout << "check finished..." << endl;
// поток в потоке.. // поток в потоке..
MyClass2 t2("Thread2"); MyClass2 t2("Thread2");
cout << "thread2 start..." << endl; cout << "thread2 start..." << endl;
......
...@@ -44,7 +44,7 @@ int main( int argc, const char **argv ) ...@@ -44,7 +44,7 @@ int main( int argc, const char **argv )
char t_str[ 150 ]; char t_str[ 150 ];
strftime( t_str, sizeof(t_str), "%d %b %Y %H:%M:%S", tms ); strftime( t_str, sizeof(t_str), "%d %b %Y %H:%M:%S", tms );
cout << "id=" << id cout << "id=" << id
<< " value=" << inf.value << " value=" << inf.value
<< " last changed: " << string(t_str) << endl; << " last changed: " << string(t_str) << endl;
...@@ -62,7 +62,7 @@ int main( int argc, const char **argv ) ...@@ -62,7 +62,7 @@ int main( int argc, const char **argv )
{ {
cout << "(uitest): catch ..."<< endl; cout << "(uitest): catch ..."<< endl;
} }
return 0; return 0;
} }
...@@ -18,26 +18,26 @@ class MyClass ...@@ -18,26 +18,26 @@ class MyClass
{ {
thr = new ThreadCreator<MyClass>(this, &MyClass::thread); thr = new ThreadCreator<MyClass>(this, &MyClass::thread);
} }
~MyClass() ~MyClass()
{ {
delete thr; delete thr;
} }
void execute() void execute()
{ {
thr->start(); thr->start();
} }
void terminate() { term=true; } void terminate() { term=true; }
inline std::string name(){ return nm; } inline std::string name(){ return nm; }
inline int lock_count(){ return count; } inline int lock_count(){ return count; }
// BAD CODE... only for test.. // BAD CODE... only for test..
inline ThreadCreator<MyClass>* get(){ return thr; } inline ThreadCreator<MyClass>* get(){ return thr; }
protected: protected:
std::string nm; std::string nm;
std::atomic_bool term; std::atomic_bool term;
...@@ -52,7 +52,7 @@ class MyClass ...@@ -52,7 +52,7 @@ class MyClass
} }
} }
} }
private: private:
ThreadCreator<MyClass>* thr; ThreadCreator<MyClass>* thr;
int count; int count;
...@@ -65,12 +65,12 @@ class MyClassSpin ...@@ -65,12 +65,12 @@ class MyClassSpin
{ {
thr = new ThreadCreator<MyClassSpin>(this, &MyClassSpin::thread); thr = new ThreadCreator<MyClassSpin>(this, &MyClassSpin::thread);
} }
~MyClassSpin() ~MyClassSpin()
{ {
delete thr; delete thr;
} }
void execute() void execute()
{ {
thr->start(); thr->start();
...@@ -81,10 +81,10 @@ class MyClassSpin ...@@ -81,10 +81,10 @@ class MyClassSpin
inline std::string name(){ return nm; } inline std::string name(){ return nm; }
inline int lock_count(){ return count; } inline int lock_count(){ return count; }
// BAD CODE... only for test.. // BAD CODE... only for test..
inline ThreadCreator<MyClassSpin>* get(){ return thr; } inline ThreadCreator<MyClassSpin>* get(){ return thr; }
protected: protected:
std::string nm; std::string nm;
bool readLock; bool readLock;
...@@ -104,17 +104,17 @@ class MyClassSpin ...@@ -104,17 +104,17 @@ class MyClassSpin
uniset_rwmutex_rlock l(m_rw); uniset_rwmutex_rlock l(m_rw);
count++; count++;
} }
//msleep(20); //msleep(20);
} }
} }
private: private:
ThreadCreator<MyClassSpin>* thr; ThreadCreator<MyClassSpin>* thr;
int count; int count;
}; };
bool check_wr_lock( ost::ThreadLock& m ) bool check_wr_lock( ost::ThreadLock& m )
{ {
if( m.tryWriteLock() ) if( m.tryWriteLock() )
...@@ -122,7 +122,7 @@ bool check_wr_lock( ost::ThreadLock& m ) ...@@ -122,7 +122,7 @@ bool check_wr_lock( ost::ThreadLock& m )
m.unlock(); m.unlock();
return true; return true;
} }
return false; return false;
} }
...@@ -133,7 +133,7 @@ bool check_r_lock( ost::ThreadLock& m ) ...@@ -133,7 +133,7 @@ bool check_r_lock( ost::ThreadLock& m )
m.unlock(); m.unlock();
return true; return true;
} }
return false; return false;
} }
...@@ -142,60 +142,60 @@ int main( int argc, const char **argv ) ...@@ -142,60 +142,60 @@ int main( int argc, const char **argv )
try try
{ {
#if 0 #if 0
{ {
cout << "check timed_mutex..." << endl; cout << "check timed_mutex..." << endl;
std::timed_mutex m; std::timed_mutex m;
cout << " 'unlock' without 'lock'.."; cout << " 'unlock' without 'lock'..";
m.unlock(); m.unlock();
cout << " ok." << endl; cout << " ok." << endl;
cout << "try lock (lock): " << ( m.try_lock() ? "OK" : "FAIL" ) << endl; cout << "try lock (lock): " << ( m.try_lock() ? "OK" : "FAIL" ) << endl;
m.unlock(); m.unlock();
m.lock(); m.lock();
cout << "try lock (fail): " << ( m.try_lock() ? "FAIL" : "OK" ) << endl; cout << "try lock (fail): " << ( m.try_lock() ? "FAIL" : "OK" ) << endl;
m.unlock(); m.unlock();
} }
{ {
uniset_mutex m("testmutex"); uniset_mutex m("testmutex");
{ {
uniset_mutex_lock l(m); uniset_mutex_lock l(m);
msleep(20); msleep(20);
} }
{ {
uniset_mutex_lock l(m,100); uniset_mutex_lock l(m,100);
msleep(50); msleep(50);
} }
} }
#endif #endif
#if 0 #if 0
{ {
uniset_rwmutex m1("mutex1"); uniset_rwmutex m1("mutex1");
uniset_rwmutex m2("mutex2"); uniset_rwmutex m2("mutex2");
uniset_rwmutex m3_lcopy("mutex3"); uniset_rwmutex m3_lcopy("mutex3");
cout << "m1: " << m1.name() << endl; cout << "m1: " << m1.name() << endl;
cout << "m2: " << m2.name() << endl; cout << "m2: " << m2.name() << endl;
cout << "m3: " << m3_lcopy.name() << endl; cout << "m3: " << m3_lcopy.name() << endl;
m2 = m1; m2 = m1;
cout << "copy m1... m2: " << m2.name() << endl; cout << "copy m1... m2: " << m2.name() << endl;
m1.wrlock(); m1.wrlock();
m3_lcopy = m1; m3_lcopy = m1;
cout << "copy m1... m3: " << m2.name() << endl; cout << "copy m1... m3: " << m2.name() << endl;
cout << "m3.lock: ..." << endl; cout << "m3.lock: ..." << endl;
m3_lcopy.wrlock(); m3_lcopy.wrlock();
cout << "m3.lock: wrlock OK" << endl; cout << "m3.lock: wrlock OK" << endl;
} }
// return 0; // return 0;
#endif #endif
...@@ -258,7 +258,7 @@ int main( int argc, const char **argv ) ...@@ -258,7 +258,7 @@ int main( int argc, const char **argv )
cerr << "test lock: " << ( !um.isRelease() ? "OK" : "FAIL") << endl; cerr << "test lock: " << ( !um.isRelease() ? "OK" : "FAIL") << endl;
} }
cerr << "test unlock: " << (um.isRelease() ? "OK" : "FAIL") << endl; cerr << "test unlock: " << (um.isRelease() ? "OK" : "FAIL") << endl;
{ {
uniset_mutex_lock l(um); uniset_mutex_lock l(um);
cerr << "test second lock: " << (!um.isRelease() ? "OK" : "FAIL") << endl; cerr << "test second lock: " << (!um.isRelease() ? "OK" : "FAIL") << endl;
...@@ -266,20 +266,20 @@ int main( int argc, const char **argv ) ...@@ -266,20 +266,20 @@ int main( int argc, const char **argv )
uniset_mutex_lock l2(um,500); uniset_mutex_lock l2(um,500);
cerr << "test wait lock: " << ( !l2.lock_ok() ? "OK" : "FAIL") << endl; cerr << "test wait lock: " << ( !l2.lock_ok() ? "OK" : "FAIL") << endl;
} }
uniset_mutex_lock l3(um,500); uniset_mutex_lock l3(um,500);
cerr << "test wait lock: " << ( l3.lock_ok() ? "OK" : "FAIL") << endl; cerr << "test wait lock: " << ( l3.lock_ok() ? "OK" : "FAIL") << endl;
return 0; return 0;
#endif #endif
int max = 10; int max = 10;
if( argc > 1 ) if( argc > 1 )
max = UniSetTypes::uni_atoi(argv[1]); max = UniSetTypes::uni_atoi(argv[1]);
#if 1 #if 1
typedef std::vector<MyClass*> TVec; typedef std::vector<MyClass*> TVec;
TVec tvec(max); TVec tvec(max);
...@@ -291,20 +291,20 @@ int main( int argc, const char **argv ) ...@@ -291,20 +291,20 @@ int main( int argc, const char **argv )
tvec[i] = t; tvec[i] = t;
t->execute(); t->execute();
msleep(50); msleep(50);
} }
cout << "TEST MUTEX LOCK wait 10 sec.. (" << tvec.size() << " threads)" << endl; cout << "TEST MUTEX LOCK wait 10 sec.. (" << tvec.size() << " threads)" << endl;
msleep(10000); msleep(10000);
cout << "TEST MUTEX LOCK RESULT: " << endl; cout << "TEST MUTEX LOCK RESULT: " << endl;
for( TVec::iterator it=tvec.begin(); it!=tvec.end(); it++ ) for( TVec::iterator it=tvec.begin(); it!=tvec.end(); it++ )
{ {
int c = (*it)->lock_count(); int c = (*it)->lock_count();
(*it)->terminate(); (*it)->terminate();
if( (*it)->get()->isRunning() ) if( (*it)->get()->isRunning() )
(*it)->get()->join(); (*it)->get()->join();
//(*it)->get()->stop(); //(*it)->get()->stop();
cout << (*it)->name() << ": locked counter: " << (c/10) << " " << ( c!=0 ? "OK":"FAIL" ) << endl; cout << (*it)->name() << ": locked counter: " << (c/10) << " " << ( c!=0 ? "OK":"FAIL" ) << endl;
} }
#endif #endif
...@@ -318,14 +318,14 @@ int main( int argc, const char **argv ) ...@@ -318,14 +318,14 @@ int main( int argc, const char **argv )
ostringstream s; ostringstream s;
bool r=false; bool r=false;
#if 1 #if 1
if( i>=half ) if( i>=half )
{ {
r = true; r = true;
s << "(R)"; s << "(R)";
} }
else else
#endif #endif
s << "(W)"; s << "(W)";
s << "t" << i; s << "t" << i;
...@@ -364,7 +364,7 @@ int main( int argc, const char **argv ) ...@@ -364,7 +364,7 @@ int main( int argc, const char **argv )
tsvec[i] = t; tsvec[i] = t;
t->execute(); t->execute();
msleep(50); msleep(50);
} }
std::atomic_int cnt(0); std::atomic_int cnt(0);
std::atomic_int num(10); std::atomic_int num(10);
...@@ -394,7 +394,7 @@ int main( int argc, const char **argv ) ...@@ -394,7 +394,7 @@ int main( int argc, const char **argv )
} }
#endif #endif
// pause(); // pause();
} }
...@@ -404,7 +404,7 @@ int main( int argc, const char **argv ) ...@@ -404,7 +404,7 @@ int main( int argc, const char **argv )
cerr << " file: " << fe.file() << endl; cerr << " file: " << fe.file() << endl;
cerr << " line: " << fe.line() << endl; cerr << " line: " << fe.line() << endl;
cerr << " mesg: " << fe.errmsg() << endl; cerr << " mesg: " << fe.errmsg() << endl;
} }
catch( std::exception& e ) catch( std::exception& e )
{ {
cerr << "catch: " << e.what() << endl; cerr << "catch: " << e.what() << endl;
...@@ -413,6 +413,6 @@ int main( int argc, const char **argv ) ...@@ -413,6 +413,6 @@ int main( int argc, const char **argv )
{ {
cerr << "catch(...)" << endl; cerr << "catch(...)" << endl;
} }
return 0; return 0;
} }
...@@ -18,7 +18,7 @@ int main() ...@@ -18,7 +18,7 @@ int main()
{ {
cerr << "<testnode> not found" << endl; cerr << "<testnode> not found" << endl;
return 1; return 1;
} }
UniXML_iterator it(cnode); UniXML_iterator it(cnode);
cout << "string id=" << it.getProp("id") cout << "string id=" << it.getProp("id")
...@@ -31,7 +31,7 @@ int main() ...@@ -31,7 +31,7 @@ int main()
{ {
cerr << "<testnode> not found" << endl; cerr << "<testnode> not found" << endl;
return 1; return 1;
} }
cout << "string id=" << it.getProp("dbrepeat") cout << "string id=" << it.getProp("dbrepeat")
<< " int id=" << it.getIntProp("dbrepeat") << " int id=" << it.getIntProp("dbrepeat")
...@@ -44,13 +44,13 @@ int main() ...@@ -44,13 +44,13 @@ int main()
{ {
cerr << "<testnode> not found" << endl; cerr << "<testnode> not found" << endl;
return 1; return 1;
} }
UniXML_iterator it = xml.findNode(xml.getFirstNode(),"item", "LocalhostNode"); UniXML_iterator it = xml.findNode(xml.getFirstNode(),"item", "LocalhostNode");
if( it == NULL ) if( it == NULL )
{ {
cerr << "<testnode> not found" << endl; cerr << "<testnode> not found" << endl;
return 1; return 1;
} }
cout << "textname=" << it.getProp("textname"); cout << "textname=" << it.getProp("textname");
} }
......
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